Home | History | Annotate | Download | only in info
      1 This is doc/gcc.info, produced by makeinfo version 4.13 from
      2 /tmp/build-mingw64-toolchain-digit/src/gcc-4.8.3/gcc/doc/gcc.texi.
      3 
      4 Copyright (C) 1988-2013 Free Software Foundation, Inc.
      5 
      6  Permission is granted to copy, distribute and/or modify this document
      7 under the terms of the GNU Free Documentation License, Version 1.3 or
      8 any later version published by the Free Software Foundation; with the
      9 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     10 being (a) (see below), and with the Back-Cover Texts being (b) (see
     11 below).  A copy of the license is included in the section entitled "GNU
     12 Free Documentation License".
     13 
     14  (a) The FSF's Front-Cover Text is:
     15 
     16  A GNU Manual
     17 
     18  (b) The FSF's Back-Cover Text is:
     19 
     20  You have freedom to copy and modify this GNU Manual, like GNU
     21 software.  Copies published by the Free Software Foundation raise
     22 funds for GNU development.
     23 
     24 INFO-DIR-SECTION Software development
     25 START-INFO-DIR-ENTRY
     26 * gcc: (gcc).                  The GNU Compiler Collection.
     27 * g++: (gcc).                  The GNU C++ compiler.
     28 * gcov: (gcc) Gcov.            `gcov'--a test coverage program.
     29 END-INFO-DIR-ENTRY
     30  This file documents the use of the GNU compilers.
     31 
     32  Copyright (C) 1988-2013 Free Software Foundation, Inc.
     33 
     34  Permission is granted to copy, distribute and/or modify this document
     35 under the terms of the GNU Free Documentation License, Version 1.3 or
     36 any later version published by the Free Software Foundation; with the
     37 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     38 being (a) (see below), and with the Back-Cover Texts being (b) (see
     39 below).  A copy of the license is included in the section entitled "GNU
     40 Free Documentation License".
     41 
     42  (a) The FSF's Front-Cover Text is:
     43 
     44  A GNU Manual
     45 
     46  (b) The FSF's Back-Cover Text is:
     47 
     48  You have freedom to copy and modify this GNU Manual, like GNU
     49 software.  Copies published by the Free Software Foundation raise
     50 funds for GNU development.
     51 
     52 
     53 
     54 File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
     55 
     56 Introduction
     57 ************
     58 
     59 This manual documents how to use the GNU compilers, as well as their
     60 features and incompatibilities, and how to report bugs.  It corresponds
     61 to the compilers (GCC) version 4.8.3.  The internals of the GNU
     62 compilers, including how to port them to new targets and some
     63 information about how to write front ends for new languages, are
     64 documented in a separate manual.  *Note Introduction: (gccint)Top.
     65 
     66 * Menu:
     67 
     68 * G++ and GCC::     You can compile C or C++ programs.
     69 * Standards::       Language standards supported by GCC.
     70 * Invoking GCC::    Command options supported by `gcc'.
     71 * C Implementation:: How GCC implements the ISO C specification.
     72 * C++ Implementation:: How GCC implements the ISO C++ specification.
     73 * C Extensions::    GNU extensions to the C language family.
     74 * C++ Extensions::  GNU extensions to the C++ language.
     75 * Objective-C::     GNU Objective-C runtime features.
     76 * Compatibility::   Binary Compatibility
     77 * Gcov::            `gcov'---a test coverage program.
     78 * Trouble::         If you have trouble using GCC.
     79 * Bugs::            How, why and where to report bugs.
     80 * Service::         How to find suppliers of support for GCC.
     81 * Contributing::    How to contribute to testing and developing GCC.
     82 
     83 * Funding::         How to help assure funding for free software.
     84 * GNU Project::     The GNU Project and GNU/Linux.
     85 
     86 * Copying::         GNU General Public License says
     87                     how you can copy and share GCC.
     88 * GNU Free Documentation License:: How you can copy and share this manual.
     89 * Contributors::    People who have contributed to GCC.
     90 
     91 * Option Index::    Index to command line options.
     92 * Keyword Index::   Index of concepts and symbol names.
     93 
     94 
     95 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
     96 
     97 1 Programming Languages Supported by GCC
     98 ****************************************
     99 
    100 GCC stands for "GNU Compiler Collection".  GCC is an integrated
    101 distribution of compilers for several major programming languages.
    102 These languages currently include C, C++, Objective-C, Objective-C++,
    103 Java, Fortran, Ada, and Go.
    104 
    105  The abbreviation "GCC" has multiple meanings in common use.  The
    106 current official meaning is "GNU Compiler Collection", which refers
    107 generically to the complete suite of tools.  The name historically stood
    108 for "GNU C Compiler", and this usage is still common when the emphasis
    109 is on compiling C programs.  Finally, the name is also used when
    110 speaking of the "language-independent" component of GCC: code shared
    111 among the compilers for all supported languages.
    112 
    113  The language-independent component of GCC includes the majority of the
    114 optimizers, as well as the "back ends" that generate machine code for
    115 various processors.
    116 
    117  The part of a compiler that is specific to a particular language is
    118 called the "front end".  In addition to the front ends that are
    119 integrated components of GCC, there are several other front ends that
    120 are maintained separately.  These support languages such as Pascal,
    121 Mercury, and COBOL.  To use these, they must be built together with GCC
    122 proper.
    123 
    124  Most of the compilers for languages other than C have their own names.
    125 The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
    126 talk about compiling one of those languages, we might refer to that
    127 compiler by its own name, or as GCC.  Either is correct.
    128 
    129  Historically, compilers for many languages, including C++ and Fortran,
    130 have been implemented as "preprocessors" which emit another high level
    131 language such as C.  None of the compilers included in GCC are
    132 implemented this way; they all generate machine code directly.  This
    133 sort of preprocessor should not be confused with the "C preprocessor",
    134 which is an integral feature of the C, C++, Objective-C and
    135 Objective-C++ languages.
    136 
    137 
    138 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
    139 
    140 2 Language Standards Supported by GCC
    141 *************************************
    142 
    143 For each language compiled by GCC for which there is a standard, GCC
    144 attempts to follow one or more versions of that standard, possibly with
    145 some exceptions, and possibly with some extensions.
    146 
    147 2.1 C language
    148 ==============
    149 
    150 GCC supports three versions of the C standard, although support for the
    151 most recent version is not yet complete.
    152 
    153  The original ANSI C standard (X3.159-1989) was ratified in 1989 and
    154 published in 1990.  This standard was ratified as an ISO standard
    155 (ISO/IEC 9899:1990) later in 1990.  There were no technical differences
    156 between these publications, although the sections of the ANSI standard
    157 were renumbered and became clauses in the ISO standard.  This standard,
    158 in both its forms, is commonly known as "C89", or occasionally as
    159 "C90", from the dates of ratification.  The ANSI standard, but not the
    160 ISO standard, also came with a Rationale document.  To select this
    161 standard in GCC, use one of the options `-ansi', `-std=c90' or
    162 `-std=iso9899:1990'; to obtain all the diagnostics required by the
    163 standard, you should also specify `-pedantic' (or `-pedantic-errors' if
    164 you want them to be errors rather than warnings).  *Note Options
    165 Controlling C Dialect: C Dialect Options.
    166 
    167  Errors in the 1990 ISO C standard were corrected in two Technical
    168 Corrigenda published in 1994 and 1996.  GCC does not support the
    169 uncorrected version.
    170 
    171  An amendment to the 1990 standard was published in 1995.  This
    172 amendment added digraphs and `__STDC_VERSION__' to the language, but
    173 otherwise concerned the library.  This amendment is commonly known as
    174 "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
    175 select this standard in GCC, use the option `-std=iso9899:199409'
    176 (with, as for other standard versions, `-pedantic' to receive all
    177 required diagnostics).
    178 
    179  A new edition of the ISO C standard was published in 1999 as ISO/IEC
    180 9899:1999, and is commonly known as "C99".  GCC has incomplete support
    181 for this standard version; see `http://gcc.gnu.org/c99status.html' for
    182 details.  To select this standard, use `-std=c99' or
    183 `-std=iso9899:1999'.  (While in development, drafts of this standard
    184 version were referred to as "C9X".)
    185 
    186  Errors in the 1999 ISO C standard were corrected in three Technical
    187 Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
    188 uncorrected version.
    189 
    190  A fourth version of the C standard, known as "C11", was published in
    191 2011 as ISO/IEC 9899:2011.  GCC has limited incomplete support for
    192 parts of this standard, enabled with `-std=c11' or `-std=iso9899:2011'.
    193 (While in development, drafts of this standard version were referred to
    194 as "C1X".)
    195 
    196  By default, GCC provides some extensions to the C language that on
    197 rare occasions conflict with the C standard.  *Note Extensions to the C
    198 Language Family: C Extensions.  Use of the `-std' options listed above
    199 will disable these extensions where they conflict with the C standard
    200 version selected.  You may also select an extended version of the C
    201 language explicitly with `-std=gnu90' (for C90 with GNU extensions),
    202 `-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11
    203 with GNU extensions).  The default, if no C language dialect options
    204 are given, is `-std=gnu90'; this will change to `-std=gnu99' or
    205 `-std=gnu11' in some future release when the C99 or C11 support is
    206 complete.  Some features that are part of the C99 standard are accepted
    207 as extensions in C90 mode, and some features that are part of the C11
    208 standard are accepted as extensions in C90 and C99 modes.
    209 
    210  The ISO C standard defines (in clause 4) two classes of conforming
    211 implementation.  A "conforming hosted implementation" supports the
    212 whole standard including all the library facilities; a "conforming
    213 freestanding implementation" is only required to provide certain
    214 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
    215 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99,
    216 also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those
    217 in `<stdalign.h>' and `<stdnoreturn.h>'.  In addition, complex types,
    218 added in C99, are not required for freestanding implementations.  The
    219 standard also defines two environments for programs, a "freestanding
    220 environment", required of all implementations and which may not have
    221 library facilities beyond those required of freestanding
    222 implementations, where the handling of program startup and termination
    223 are implementation-defined, and a "hosted environment", which is not
    224 required, in which all the library facilities are provided and startup
    225 is through a function `int main (void)' or `int main (int, char *[])'.
    226 An OS kernel would be a freestanding environment; a program using the
    227 facilities of an operating system would normally be in a hosted
    228 implementation.
    229 
    230  GCC aims towards being usable as a conforming freestanding
    231 implementation, or as the compiler for a conforming hosted
    232 implementation.  By default, it will act as the compiler for a hosted
    233 implementation, defining `__STDC_HOSTED__' as `1' and presuming that
    234 when the names of ISO C functions are used, they have the semantics
    235 defined in the standard.  To make it act as a conforming freestanding
    236 implementation for a freestanding environment, use the option
    237 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
    238 make assumptions about the meanings of function names from the standard
    239 library, with exceptions noted below.  To build an OS kernel, you may
    240 well still need to make your own arrangements for linking and startup.
    241 *Note Options Controlling C Dialect: C Dialect Options.
    242 
    243  GCC does not provide the library facilities required only of hosted
    244 implementations, nor yet all the facilities required by C99 of
    245 freestanding implementations; to use the facilities of a hosted
    246 environment, you will need to find them elsewhere (for example, in the
    247 GNU C library).  *Note Standard Libraries: Standard Libraries.
    248 
    249  Most of the compiler support routines used by GCC are present in
    250 `libgcc', but there are a few exceptions.  GCC requires the
    251 freestanding environment provide `memcpy', `memmove', `memset' and
    252 `memcmp'.  Finally, if `__builtin_trap' is used, and the target does
    253 not implement the `trap' pattern, then GCC will emit a call to `abort'.
    254 
    255  For references to Technical Corrigenda, Rationale documents and
    256 information concerning the history of C that is available online, see
    257 `http://gcc.gnu.org/readings.html'
    258 
    259 2.2 C++ language
    260 ================
    261 
    262 GCC supports the original ISO C++ standard (1998) and contains
    263 experimental support for the second ISO C++ standard (2011).
    264 
    265  The original ISO C++ standard was published as the ISO standard
    266 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
    267 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
    268 C++03, respectively. GCC implements the majority of C++98 (`export' is
    269 a notable exception) and most of the changes in C++03.  To select this
    270 standard in GCC, use one of the options `-ansi', `-std=c++98', or
    271 `-std=c++03'; to obtain all the diagnostics required by the standard,
    272 you should also specify `-pedantic' (or `-pedantic-errors' if you want
    273 them to be errors rather than warnings).
    274 
    275  A revised ISO C++ standard was published in 2011 as ISO/IEC
    276 14882:2011, and is referred to as C++11; before its publication it was
    277 commonly referred to as C++0x.  C++11 contains several changes to the
    278 C++ language, most of which have been implemented in an experimental
    279 C++11 mode in GCC.  For information regarding the C++11 features
    280 available in the experimental C++11 mode, see
    281 `http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
    282 GCC, use the option `-std=c++11'; to obtain all the diagnostics
    283 required by the standard, you should also specify `-pedantic' (or
    284 `-pedantic-errors' if you want them to be errors rather than warnings).
    285 
    286  More information about the C++ standards is available on the ISO C++
    287 committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'.
    288 
    289  By default, GCC provides some extensions to the C++ language; *Note
    290 Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
    291 `-std' option listed above will disable these extensions.  You may also
    292 select an extended version of the C++ language explicitly with
    293 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for
    294 C++11 with GNU extensions).  The default, if no C++ language dialect
    295 options are given, is `-std=gnu++98'.
    296 
    297 2.3 Objective-C and Objective-C++ languages
    298 ===========================================
    299 
    300 GCC supports "traditional" Objective-C (also known as "Objective-C
    301 1.0") and contains support for the Objective-C exception and
    302 synchronization syntax.  It has also support for a number of
    303 "Objective-C 2.0" language extensions, including properties, fast
    304 enumeration (only for Objective-C), method attributes and the @optional
    305 and @required keywords in protocols.  GCC supports Objective-C++ and
    306 features available in Objective-C are also available in Objective-C++.
    307 
    308  GCC by default uses the GNU Objective-C runtime library, which is part
    309 of GCC and is not the same as the Apple/NeXT Objective-C runtime
    310 library used on Apple systems.  There are a number of differences
    311 documented in this manual.  The options `-fgnu-runtime' and
    312 `-fnext-runtime' allow you to switch between producing output that
    313 works with the GNU Objective-C runtime library and output that works
    314 with the Apple/NeXT Objective-C runtime library.
    315 
    316  There is no formal written standard for Objective-C or Objective-C++.
    317 The authoritative manual on traditional Objective-C (1.0) is
    318 "Object-Oriented Programming and the Objective-C Language", available
    319 at a number of web sites:
    320    * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
    321      is the original NeXTstep document;
    322 
    323    * `http://objc.toodarkpark.net' is the same document in another
    324      format;
    325 
    326    *
    327      `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
    328      has an updated version but make sure you search for "Object
    329      Oriented Programming and the Objective-C Programming Language 1.0",
    330      not documentation on the newer "Objective-C 2.0" language
    331 
    332  The Objective-C exception and synchronization syntax (that is, the
    333 keywords @try, @throw, @catch, @finally and @synchronized) is supported
    334 by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
    335 is briefly documented in this manual and in the Objective-C 2.0 manuals
    336 from Apple.
    337 
    338  The Objective-C 2.0 language extensions and features are automatically
    339 enabled; they include properties (via the @property, @synthesize and
    340 @dynamic keywords), fast enumeration (not available in Objective-C++),
    341 attributes for methods (such as deprecated, noreturn, sentinel,
    342 format), the unused attribute for method arguments, the @package
    343 keyword for instance variables and the @optional and @required keywords
    344 in protocols.  You can disable all these Objective-C 2.0 language
    345 extensions with the option `-fobjc-std=objc1', which causes the
    346 compiler to recognize the same Objective-C language syntax recognized
    347 by GCC 4.0, and to produce an error if one of the new features is used.
    348 
    349  GCC has currently no support for non-fragile instance variables.
    350 
    351  The authoritative manual on Objective-C 2.0 is available from Apple:
    352    *
    353      `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
    354 
    355  For more information concerning the history of Objective-C that is
    356 available online, see `http://gcc.gnu.org/readings.html'
    357 
    358 2.4 Go language
    359 ===============
    360 
    361 As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
    362 described at `http://golang.org/doc/go1.html'.
    363 
    364 2.5 References for other languages
    365 ==================================
    366 
    367 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
    368 conformance and compatibility of the Ada compiler.
    369 
    370  *Note Standards: (gfortran)Standards, for details of standards
    371 supported by GNU Fortran.
    372 
    373  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
    374 details of compatibility between `gcj' and the Java Platform.
    375 
    376 
    377 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
    378 
    379 3 GCC Command Options
    380 *********************
    381 
    382 When you invoke GCC, it normally does preprocessing, compilation,
    383 assembly and linking.  The "overall options" allow you to stop this
    384 process at an intermediate stage.  For example, the `-c' option says
    385 not to run the linker.  Then the output consists of object files output
    386 by the assembler.
    387 
    388  Other options are passed on to one stage of processing.  Some options
    389 control the preprocessor and others the compiler itself.  Yet other
    390 options control the assembler and linker; most of these are not
    391 documented here, since you rarely need to use any of them.
    392 
    393  Most of the command-line options that you can use with GCC are useful
    394 for C programs; when an option is only useful with another language
    395 (usually C++), the explanation says so explicitly.  If the description
    396 for a particular option does not mention a source language, you can use
    397 that option with all supported languages.
    398 
    399  *Note Compiling C++ Programs: Invoking G++, for a summary of special
    400 options for compiling C++ programs.
    401 
    402  The `gcc' program accepts options and file names as operands.  Many
    403 options have multi-letter names; therefore multiple single-letter
    404 options may _not_ be grouped: `-dv' is very different from `-d -v'.
    405 
    406  You can mix options and other arguments.  For the most part, the order
    407 you use doesn't matter.  Order does matter when you use several options
    408 of the same kind; for example, if you specify `-L' more than once, the
    409 directories are searched in the order specified.  Also, the placement
    410 of the `-l' option is significant.
    411 
    412  Many options have long names starting with `-f' or with `-W'--for
    413 example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
    414 have both positive and negative forms; the negative form of `-ffoo' is
    415 `-fno-foo'.  This manual documents only one of these two forms,
    416 whichever one is not the default.
    417 
    418  *Note Option Index::, for an index to GCC's options.
    419 
    420 * Menu:
    421 
    422 * Option Summary::      Brief list of all options, without explanations.
    423 * Overall Options::     Controlling the kind of output:
    424                         an executable, object files, assembler files,
    425                         or preprocessed source.
    426 * Invoking G++::        Compiling C++ programs.
    427 * C Dialect Options::   Controlling the variant of C language compiled.
    428 * C++ Dialect Options:: Variations on C++.
    429 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
    430                         and Objective-C++.
    431 * Language Independent Options:: Controlling how diagnostics should be
    432                         formatted.
    433 * Warning Options::     How picky should the compiler be?
    434 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
    435 * Optimize Options::    How much optimization?
    436 * Preprocessor Options:: Controlling header files and macro definitions.
    437                          Also, getting dependency information for Make.
    438 * Assembler Options::   Passing options to the assembler.
    439 * Link Options::        Specifying libraries and so on.
    440 * Directory Options::   Where to find header files and libraries.
    441                         Where to find the compiler executable files.
    442 * Spec Files::          How to pass switches to sub-processes.
    443 * Target Options::      Running a cross-compiler, or an old version of GCC.
    444 * Submodel Options::    Specifying minor hardware or convention variations,
    445                         such as 68010 vs 68020.
    446 * Code Gen Options::    Specifying conventions for function calls, data layout
    447                         and register usage.
    448 * Environment Variables:: Env vars that affect GCC.
    449 * Precompiled Headers:: Compiling a header once, and using it many times.
    450 
    451 
    452 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
    453 
    454 3.1 Option Summary
    455 ==================
    456 
    457 Here is a summary of all the options, grouped by type.  Explanations are
    458 in the following sections.
    459 
    460 _Overall Options_
    461      *Note Options Controlling the Kind of Output: Overall Options.
    462           -c  -S  -E  -o FILE  -no-canonical-prefixes
    463           -pipe  -pass-exit-codes
    464           -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
    465           --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
    466           -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
    467 
    468 _C Language Options_
    469      *Note Options Controlling C Dialect: C Dialect Options.
    470           -ansi  -std=STANDARD  -fgnu89-inline
    471           -aux-info FILENAME -fallow-parameterless-variadic-functions
    472           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
    473           -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
    474           -trigraphs  -traditional  -traditional-cpp
    475           -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
    476           -fsigned-bitfields  -fsigned-char
    477           -funsigned-bitfields  -funsigned-char
    478 
    479 _C++ Language Options_
    480      *Note Options Controlling C++ Dialect: C++ Dialect Options.
    481           -fabi-version=N  -fno-access-control  -fcheck-new
    482           -fconstexpr-depth=N  -ffriend-injection
    483           -fno-elide-constructors
    484           -fno-enforce-eh-specs
    485           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
    486           -fno-implicit-templates
    487           -fno-implicit-inline-templates
    488           -fno-implement-inlines  -fms-extensions
    489           -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
    490           -fno-optional-diags  -fpermissive
    491           -fno-pretty-templates
    492           -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=N
    493           -ftemplate-depth=N
    494           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
    495           -fno-default-inline  -fvisibility-inlines-hidden
    496           -fvisibility-ms-compat
    497           -fext-numeric-literals
    498           -Wabi  -Wconversion-null  -Wctor-dtor-privacy
    499           -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
    500           -Wnoexcept -Wnon-virtual-dtor  -Wreorder
    501           -Weffc++  -Wstrict-null-sentinel
    502           -Wno-non-template-friend  -Wold-style-cast
    503           -Woverloaded-virtual  -Wno-pmf-conversions
    504           -Wsign-promo
    505 
    506 _Objective-C and Objective-C++ Language Options_
    507      *Note Options Controlling Objective-C and Objective-C++ Dialects:
    508      Objective-C and Objective-C++ Dialect Options.
    509           -fconstant-string-class=CLASS-NAME
    510           -fgnu-runtime  -fnext-runtime
    511           -fno-nil-receivers
    512           -fobjc-abi-version=N
    513           -fobjc-call-cxx-cdtors
    514           -fobjc-direct-dispatch
    515           -fobjc-exceptions
    516           -fobjc-gc
    517           -fobjc-nilcheck
    518           -fobjc-std=objc1
    519           -freplace-objc-classes
    520           -fzero-link
    521           -gen-decls
    522           -Wassign-intercept
    523           -Wno-protocol  -Wselector
    524           -Wstrict-selector-match
    525           -Wundeclared-selector
    526 
    527 _Language Independent Options_
    528      *Note Options to Control Diagnostic Messages Formatting: Language
    529      Independent Options.
    530           -fmessage-length=N
    531           -fdiagnostics-show-location=[once|every-line]
    532           -fno-diagnostics-show-option -fno-diagnostics-show-caret
    533 
    534 _Warning Options_
    535      *Note Options to Request or Suppress Warnings: Warning Options.
    536           -fsyntax-only  -fmax-errors=N  -Wpedantic
    537           -pedantic-errors
    538           -w  -Wextra  -Wall  -Waddress  -Waggregate-return
    539           -Waggressive-loop-optimizations -Warray-bounds
    540           -Wno-attributes -Wno-builtin-macro-redefined
    541           -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual
    542           -Wchar-subscripts -Wclobbered  -Wcomment
    543           -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
    544           -Wno-deprecated-declarations -Wdisabled-optimization
    545           -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
    546           -Wno-endif-labels -Werror  -Werror=*
    547           -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
    548           -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
    549           -Wformat-security  -Wformat-y2k
    550           -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
    551           -Wignored-qualifiers
    552           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
    553           -Winit-self  -Winline -Wmaybe-uninitialized
    554           -Wno-int-to-pointer-cast -Wno-invalid-offsetof
    555           -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
    556           -Wlogical-op -Wlong-long
    557           -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
    558           -Wmissing-include-dirs
    559           -Wno-mudflap
    560           -Wno-multichar  -Wnonnull  -Wno-overflow
    561           -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
    562           -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
    563           -Wpointer-arith  -Wno-pointer-to-int-cast
    564           -Wredundant-decls  -Wno-return-local-addr
    565           -Wreturn-type  -Wsequence-point  -Wshadow
    566           -Wsign-compare  -Wsign-conversion  -Wsizeof-pointer-memaccess
    567           -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
    568           -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
    569           -Wsuggest-attribute=[pure|const|noreturn|format]
    570           -Wmissing-format-attribute
    571           -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
    572           -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
    573           -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
    574           -Wunsuffixed-float-constants  -Wunused  -Wunused-function
    575           -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
    576           -Wno-unused-result -Wunused-value  -Wunused-variable
    577           -Wunused-but-set-parameter -Wunused-but-set-variable
    578           -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
    579           -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant
    580 
    581 _C and Objective-C-only Warning Options_
    582           -Wbad-function-cast  -Wmissing-declarations
    583           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
    584           -Wold-style-declaration  -Wold-style-definition
    585           -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
    586           -Wdeclaration-after-statement -Wpointer-sign
    587 
    588 _Debugging Options_
    589      *Note Options for Debugging Your Program or GCC: Debugging Options.
    590           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
    591           -fsanitize=STYLE
    592           -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
    593           -fdisable-ipa-PASS_NAME
    594           -fdisable-rtl-PASS_NAME
    595           -fdisable-rtl-PASS-NAME=RANGE-LIST
    596           -fdisable-tree-PASS_NAME
    597           -fdisable-tree-PASS-NAME=RANGE-LIST
    598           -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
    599           -fdump-translation-unit[-N]
    600           -fdump-class-hierarchy[-N]
    601           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
    602           -fdump-passes
    603           -fdump-statistics
    604           -fdump-tree-all
    605           -fdump-tree-original[-N]
    606           -fdump-tree-optimized[-N]
    607           -fdump-tree-cfg -fdump-tree-alias
    608           -fdump-tree-ch
    609           -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
    610           -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
    611           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
    612           -fdump-tree-dom[-N]
    613           -fdump-tree-dse[-N]
    614           -fdump-tree-phiprop[-N]
    615           -fdump-tree-phiopt[-N]
    616           -fdump-tree-forwprop[-N]
    617           -fdump-tree-copyrename[-N]
    618           -fdump-tree-nrv -fdump-tree-vect
    619           -fdump-tree-sink
    620           -fdump-tree-sra[-N]
    621           -fdump-tree-forwprop[-N]
    622           -fdump-tree-fre[-N]
    623           -fdump-tree-vrp[-N]
    624           -ftree-vectorizer-verbose=N
    625           -fdump-tree-storeccp[-N]
    626           -fdump-final-insns=FILE
    627           -fcompare-debug[=OPTS]  -fcompare-debug-second
    628           -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
    629           -feliminate-unused-debug-symbols -femit-class-debug-always
    630           -fenable-KIND-PASS
    631           -fenable-KIND-PASS=RANGE-LIST
    632           -fdebug-types-section -fmem-report-wpa
    633           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
    634           -fopt-info
    635           -fopt-info-OPTIONS[=FILE]
    636           -frandom-seed=STRING -fsched-verbose=N
    637           -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
    638           -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
    639           -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
    640           -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
    641           -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
    642           -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
    643           -gvms  -gxcoff  -gxcoff+
    644           -fno-merge-debug-strings -fno-dwarf2-cfi-asm
    645           -fdebug-prefix-map=OLD=NEW
    646           -femit-struct-debug-baseonly -femit-struct-debug-reduced
    647           -femit-struct-debug-detailed[=SPEC-LIST]
    648           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
    649           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
    650           -print-prog-name=PROGRAM  -print-search-dirs  -Q
    651           -print-sysroot -print-sysroot-headers-suffix
    652           -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
    653 
    654 _Optimization Options_
    655      *Note Options that Control Optimization: Optimize Options.
    656           -faggressive-loop-optimizations -falign-functions[=N]
    657           -falign-jumps[=N]
    658           -falign-labels[=N] -falign-loops[=N]
    659           -fassociative-math -fauto-inc-dec -fbranch-probabilities
    660           -fbranch-target-load-optimize -fbranch-target-load-optimize2
    661           -fbtr-bb-exclusive -fcaller-saves
    662           -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
    663           -fcompare-elim -fcprop-registers -fcrossjumping
    664           -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
    665           -fcx-limited-range
    666           -fdata-sections -fdce -fdelayed-branch
    667           -fdelete-null-pointer-checks -fdevirtualize -fdse
    668           -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
    669           -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
    670           -fforward-propagate -ffp-contract=STYLE -ffunction-sections
    671           -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
    672           -fgcse-sm -fhoist-adjacent-loads -fif-conversion
    673           -fif-conversion2 -findirect-inlining
    674           -finline-functions -finline-functions-called-once -finline-limit=N
    675           -finline-small-functions -fipa-cp -fipa-cp-clone
    676           -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
    677           -fira-algorithm=ALGORITHM
    678           -fira-region=REGION -fira-hoist-pressure
    679           -fira-loop-pressure -fno-ira-share-save-slots
    680           -fno-ira-share-spill-slots -fira-verbose=N
    681           -fivopts -fkeep-inline-functions -fkeep-static-consts
    682           -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize
    683           -floop-parallelize-all -flto -flto-compression-level
    684           -flto-partition=ALG -flto-report -fmerge-all-constants
    685           -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
    686           -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
    687           -fno-default-inline
    688           -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
    689           -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
    690           -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
    691           -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
    692           -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
    693           -fpartial-inlining -fpeel-loops -fpredictive-commoning
    694           -fprefetch-loop-arrays -fprofile-report
    695           -fprofile-correction -fprofile-dir=PATH -fprofile-generate
    696           -fprofile-generate=PATH
    697           -fprofile-use -fprofile-use=PATH -fprofile-values
    698           -freciprocal-math -free -fregmove -frename-registers -freorder-blocks
    699           -freorder-blocks-and-partition -freorder-functions
    700           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
    701           -frounding-math -fsched2-use-superblocks -fsched-pressure
    702           -fsched-spec-load -fsched-spec-load-dangerous
    703           -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
    704           -fsched-group-heuristic -fsched-critical-path-heuristic
    705           -fsched-spec-insn-heuristic -fsched-rank-heuristic
    706           -fsched-last-insn-heuristic -fsched-dep-count-heuristic
    707           -fschedule-insns -fschedule-insns2 -fsection-anchors
    708           -fselective-scheduling -fselective-scheduling2
    709           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
    710           -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
    711           -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
    712           -fstack-protector-all -fstrict-aliasing -fstrict-overflow
    713           -fthread-jumps -ftracer -ftree-bit-ccp
    714           -ftree-builtin-call-dce -ftree-ccp -ftree-ch
    715           -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
    716           -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
    717           -ftree-forwprop -ftree-fre -ftree-loop-if-convert
    718           -ftree-loop-if-convert-stores -ftree-loop-im
    719           -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
    720           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
    721           -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
    722           -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
    723           -ftree-switch-conversion -ftree-tail-merge
    724           -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
    725           -funit-at-a-time -funroll-all-loops -funroll-loops
    726           -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
    727           -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
    728           -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin
    729           --param NAME=VALUE
    730           -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
    731 
    732 _Preprocessor Options_
    733      *Note Options Controlling the Preprocessor: Preprocessor Options.
    734           -AQUESTION=ANSWER
    735           -A-QUESTION[=ANSWER]
    736           -C  -dD  -dI  -dM  -dN
    737           -DMACRO[=DEFN]  -E  -H
    738           -idirafter DIR
    739           -include FILE  -imacros FILE
    740           -iprefix FILE  -iwithprefix DIR
    741           -iwithprefixbefore DIR  -isystem DIR
    742           -imultilib DIR -isysroot DIR
    743           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
    744           -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
    745           -remap -trigraphs  -undef  -UMACRO
    746           -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
    747 
    748 _Assembler Option_
    749      *Note Passing Options to the Assembler: Assembler Options.
    750           -Wa,OPTION  -Xassembler OPTION
    751 
    752 _Linker Options_
    753      *Note Options for Linking: Link Options.
    754           OBJECT-FILE-NAME  -lLIBRARY
    755           -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
    756           -s  -static -static-libgcc -static-libstdc++
    757           -static-libasan -static-libtsan
    758           -shared -shared-libgcc  -symbolic
    759           -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
    760           -u SYMBOL
    761 
    762 _Directory Options_
    763      *Note Options for Directory Search: Directory Options.
    764           -BPREFIX -IDIR -iplugindir=DIR
    765           -iquoteDIR -LDIR -specs=FILE -I-
    766           --sysroot=DIR --no-sysroot-suffix
    767 
    768 _Machine Dependent Options_
    769      *Note Hardware Models and Configurations: Submodel Options.
    770 
    771      _AArch64 Options_
    772           -mbig-endian  -mlittle-endian
    773           -mgeneral-regs-only
    774           -mcmodel=tiny  -mcmodel=small  -mcmodel=large
    775           -mstrict-align
    776           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
    777           -mtls-dialect=desc  -mtls-dialect=traditional
    778           -march=NAME  -mcpu=NAME  -mtune=NAME
    779 
    780      _Adapteva Epiphany Options_
    781           -mhalf-reg-file -mprefer-short-insn-regs
    782           -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
    783           -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
    784           -mround-nearest -mlong-calls -mshort-calls -msmall16
    785           -mfp-mode=MODE -mvect-double -max-vect-align=NUM
    786           -msplit-vecmove-early -m1reg-REG
    787 
    788      _ARM Options_
    789           -mapcs-frame  -mno-apcs-frame
    790           -mabi=NAME
    791           -mapcs-stack-check  -mno-apcs-stack-check
    792           -mapcs-float  -mno-apcs-float
    793           -mapcs-reentrant  -mno-apcs-reentrant
    794           -msched-prolog  -mno-sched-prolog
    795           -mlittle-endian  -mbig-endian  -mwords-little-endian
    796           -mfloat-abi=NAME
    797           -mfp16-format=NAME
    798           -mthumb-interwork  -mno-thumb-interwork
    799           -mcpu=NAME  -march=NAME  -mfpu=NAME
    800           -mstructure-size-boundary=N
    801           -mabort-on-noreturn
    802           -mlong-calls  -mno-long-calls
    803           -msingle-pic-base  -mno-single-pic-base
    804           -mpic-register=REG
    805           -mnop-fun-dllimport
    806           -mpoke-function-name
    807           -mthumb  -marm
    808           -mtpcs-frame  -mtpcs-leaf-frame
    809           -mcaller-super-interworking  -mcallee-super-interworking
    810           -mtp=NAME -mtls-dialect=DIALECT
    811           -mword-relocations
    812           -mfix-cortex-m3-ldrd
    813           -munaligned-access
    814 
    815      _AVR Options_
    816           -mmcu=MCU -maccumulate-args -mbranch-cost=COST
    817           -mcall-prologues -mint8 -mno-interrupts -mrelax
    818           -mstrict-X -mtiny-stack -Waddr-space-convert
    819 
    820      _Blackfin Options_
    821           -mcpu=CPU[-SIREVISION]
    822           -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
    823           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
    824           -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
    825           -mno-id-shared-library  -mshared-library-id=N
    826           -mleaf-id-shared-library  -mno-leaf-id-shared-library
    827           -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
    828           -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
    829           -micplb
    830 
    831      _C6X Options_
    832           -mbig-endian  -mlittle-endian -march=CPU
    833           -msim -msdata=SDATA-TYPE
    834 
    835      _CRIS Options_
    836           -mcpu=CPU  -march=CPU  -mtune=CPU
    837           -mmax-stack-frame=N  -melinux-stacksize=N
    838           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
    839           -mstack-align  -mdata-align  -mconst-align
    840           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
    841           -melf  -maout  -melinux  -mlinux  -sim  -sim2
    842           -mmul-bug-workaround  -mno-mul-bug-workaround
    843 
    844      _CR16 Options_
    845           -mmac
    846           -mcr16cplus -mcr16c
    847           -msim -mint32 -mbit-ops
    848           -mdata-model=MODEL
    849 
    850      _Darwin Options_
    851           -all_load  -allowable_client  -arch  -arch_errors_fatal
    852           -arch_only  -bind_at_load  -bundle  -bundle_loader
    853           -client_name  -compatibility_version  -current_version
    854           -dead_strip
    855           -dependency-file  -dylib_file  -dylinker_install_name
    856           -dynamic  -dynamiclib  -exported_symbols_list
    857           -filelist  -flat_namespace  -force_cpusubtype_ALL
    858           -force_flat_namespace  -headerpad_max_install_names
    859           -iframework
    860           -image_base  -init  -install_name  -keep_private_externs
    861           -multi_module  -multiply_defined  -multiply_defined_unused
    862           -noall_load   -no_dead_strip_inits_and_terms
    863           -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
    864           -pagezero_size  -prebind  -prebind_all_twolevel_modules
    865           -private_bundle  -read_only_relocs  -sectalign
    866           -sectobjectsymbols  -whyload  -seg1addr
    867           -sectcreate  -sectobjectsymbols  -sectorder
    868           -segaddr -segs_read_only_addr -segs_read_write_addr
    869           -seg_addr_table  -seg_addr_table_filename  -seglinkedit
    870           -segprot  -segs_read_only_addr  -segs_read_write_addr
    871           -single_module  -static  -sub_library  -sub_umbrella
    872           -twolevel_namespace  -umbrella  -undefined
    873           -unexported_symbols_list  -weak_reference_mismatches
    874           -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
    875           -mkernel -mone-byte-bool
    876 
    877      _DEC Alpha Options_
    878           -mno-fp-regs  -msoft-float
    879           -mieee  -mieee-with-inexact  -mieee-conformant
    880           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
    881           -mtrap-precision=MODE  -mbuild-constants
    882           -mcpu=CPU-TYPE  -mtune=CPU-TYPE
    883           -mbwx  -mmax  -mfix  -mcix
    884           -mfloat-vax  -mfloat-ieee
    885           -mexplicit-relocs  -msmall-data  -mlarge-data
    886           -msmall-text  -mlarge-text
    887           -mmemory-latency=TIME
    888 
    889      _FR30 Options_
    890           -msmall-model -mno-lsim
    891 
    892      _FRV Options_
    893           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
    894           -mhard-float  -msoft-float
    895           -malloc-cc  -mfixed-cc  -mdword  -mno-dword
    896           -mdouble  -mno-double
    897           -mmedia  -mno-media  -mmuladd  -mno-muladd
    898           -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
    899           -mlinked-fp  -mlong-calls  -malign-labels
    900           -mlibrary-pic  -macc-4  -macc-8
    901           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
    902           -moptimize-membar -mno-optimize-membar
    903           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
    904           -mvliw-branch  -mno-vliw-branch
    905           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
    906           -mno-nested-cond-exec  -mtomcat-stats
    907           -mTLS -mtls
    908           -mcpu=CPU
    909 
    910      _GNU/Linux Options_
    911           -mglibc -muclibc -mbionic -mandroid
    912           -tno-android-cc -tno-android-ld
    913 
    914      _H8/300 Options_
    915           -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
    916 
    917      _HPPA Options_
    918           -march=ARCHITECTURE-TYPE
    919           -mbig-switch  -mdisable-fpregs  -mdisable-indexing
    920           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
    921           -mfixed-range=REGISTER-RANGE
    922           -mjump-in-delay -mlinker-opt -mlong-calls
    923           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
    924           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
    925           -mno-jump-in-delay  -mno-long-load-store
    926           -mno-portable-runtime  -mno-soft-float
    927           -mno-space-regs  -msoft-float  -mpa-risc-1-0
    928           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
    929           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
    930           -munix=UNIX-STD  -nolibdld  -static  -threads
    931 
    932      _i386 and x86-64 Options_
    933           -mtune=CPU-TYPE  -march=CPU-TYPE
    934           -mfpmath=UNIT
    935           -masm=DIALECT  -mno-fancy-math-387
    936           -mno-fp-ret-in-387  -msoft-float
    937           -mno-wide-multiply  -mrtd  -malign-double
    938           -mpreferred-stack-boundary=NUM
    939           -mincoming-stack-boundary=NUM
    940           -mcld -mcx16 -msahf -mmovbe -mcrc32
    941           -mrecip -mrecip=OPT
    942           -mvzeroupper -mprefer-avx128
    943           -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
    944           -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma
    945           -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
    946           -mbmi2 -mrtm -mlwp -mthreads
    947           -mno-align-stringops  -minline-all-stringops
    948           -minline-stringops-dynamically -mstringop-strategy=ALG
    949           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
    950           -m96bit-long-double -mlong-double-64 -mlong-double-80
    951           -mregparm=NUM  -msseregparm
    952           -mveclibabi=TYPE -mvect8-ret-in-mem
    953           -mpc32 -mpc64 -mpc80 -mstackrealign
    954           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
    955           -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
    956           -m32 -m64 -mx32 -mlarge-data-threshold=NUM
    957           -msse2avx -mfentry -m8bit-idiv
    958           -mavx256-split-unaligned-load -mavx256-split-unaligned-store
    959 
    960      _i386 and x86-64 Windows Options_
    961           -mconsole -mcygwin -mno-cygwin -mdll
    962           -mnop-fun-dllimport -mthread
    963           -municode -mwin32 -mwindows -fno-set-stack-executable
    964 
    965      _IA-64 Options_
    966           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
    967           -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
    968           -mconstant-gp  -mauto-pic  -mfused-madd
    969           -minline-float-divide-min-latency
    970           -minline-float-divide-max-throughput
    971           -mno-inline-float-divide
    972           -minline-int-divide-min-latency
    973           -minline-int-divide-max-throughput
    974           -mno-inline-int-divide
    975           -minline-sqrt-min-latency -minline-sqrt-max-throughput
    976           -mno-inline-sqrt
    977           -mdwarf2-asm -mearly-stop-bits
    978           -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
    979           -mtune=CPU-TYPE -milp32 -mlp64
    980           -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
    981           -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
    982           -msched-spec-ldc -msched-spec-control-ldc
    983           -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
    984           -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
    985           -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
    986           -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
    987 
    988      _LM32 Options_
    989           -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
    990           -msign-extend-enabled -muser-enabled
    991 
    992      _M32R/D Options_
    993           -m32r2 -m32rx -m32r
    994           -mdebug
    995           -malign-loops -mno-align-loops
    996           -missue-rate=NUMBER
    997           -mbranch-cost=NUMBER
    998           -mmodel=CODE-SIZE-MODEL-TYPE
    999           -msdata=SDATA-TYPE
   1000           -mno-flush-func -mflush-func=NAME
   1001           -mno-flush-trap -mflush-trap=NUMBER
   1002           -G NUM
   1003 
   1004      _M32C Options_
   1005           -mcpu=CPU -msim -memregs=NUMBER
   1006 
   1007      _M680x0 Options_
   1008           -march=ARCH  -mcpu=CPU  -mtune=TUNE
   1009           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
   1010           -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
   1011           -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
   1012           -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
   1013           -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
   1014           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
   1015           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
   1016           -mxgot -mno-xgot
   1017 
   1018      _MCore Options_
   1019           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
   1020           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
   1021           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
   1022           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
   1023           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
   1024 
   1025      _MeP Options_
   1026           -mabsdiff -mall-opts -maverage -mbased=N -mbitops
   1027           -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
   1028           -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
   1029           -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
   1030           -mtiny=N
   1031 
   1032      _MicroBlaze Options_
   1033           -msoft-float -mhard-float -msmall-divides -mcpu=CPU
   1034           -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
   1035           -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
   1036           -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
   1037           -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
   1038 
   1039      _MIPS Options_
   1040           -EL  -EB  -march=ARCH  -mtune=ARCH
   1041           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
   1042           -mips64  -mips64r2
   1043           -mips16  -mno-mips16  -mflip-mips16
   1044           -minterlink-mips16  -mno-interlink-mips16
   1045           -mabi=ABI  -mabicalls  -mno-abicalls
   1046           -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
   1047           -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
   1048           -mno-float -msingle-float  -mdouble-float
   1049           -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
   1050           -mmcu -mmno-mcu
   1051           -mfpu=FPU-TYPE
   1052           -msmartmips  -mno-smartmips
   1053           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
   1054           -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
   1055           -mlong64  -mlong32  -msym32  -mno-sym32
   1056           -GNUM  -mlocal-sdata  -mno-local-sdata
   1057           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
   1058           -membedded-data  -mno-embedded-data
   1059           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
   1060           -mcode-readable=SETTING
   1061           -msplit-addresses  -mno-split-addresses
   1062           -mexplicit-relocs  -mno-explicit-relocs
   1063           -mcheck-zero-division  -mno-check-zero-division
   1064           -mdivide-traps  -mdivide-breaks
   1065           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
   1066           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
   1067           -mfix-24k -mno-fix-24k
   1068           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
   1069           -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
   1070           -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
   1071           -mflush-func=FUNC  -mno-flush-func
   1072           -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
   1073           -mfp-exceptions -mno-fp-exceptions
   1074           -mvr4130-align -mno-vr4130-align -msynci -mno-synci
   1075           -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
   1076 
   1077      _MMIX Options_
   1078           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
   1079           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
   1080           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
   1081           -mno-base-addresses  -msingle-exit  -mno-single-exit
   1082 
   1083      _MN10300 Options_
   1084           -mmult-bug  -mno-mult-bug
   1085           -mno-am33 -mam33 -mam33-2 -mam34
   1086           -mtune=CPU-TYPE
   1087           -mreturn-pointer-on-d0
   1088           -mno-crt0  -mrelax -mliw -msetlb
   1089 
   1090      _Moxie Options_
   1091           -meb -mel -mno-crt0
   1092 
   1093      _PDP-11 Options_
   1094           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
   1095           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
   1096           -mint16  -mno-int32  -mfloat32  -mno-float64
   1097           -mfloat64  -mno-float32  -mabshi  -mno-abshi
   1098           -mbranch-expensive  -mbranch-cheap
   1099           -munix-asm  -mdec-asm
   1100 
   1101      _picoChip Options_
   1102           -mae=AE_TYPE -mvliw-lookahead=N
   1103           -msymbol-as-address -mno-inefficient-warnings
   1104 
   1105      _PowerPC Options_ See RS/6000 and PowerPC Options.
   1106 
   1107      _RL78 Options_
   1108           -msim -mmul=none -mmul=g13 -mmul=rl78
   1109 
   1110      _RS/6000 and PowerPC Options_
   1111           -mcpu=CPU-TYPE
   1112           -mtune=CPU-TYPE
   1113           -mcmodel=CODE-MODEL
   1114           -mpowerpc64
   1115           -maltivec  -mno-altivec
   1116           -mpowerpc-gpopt  -mno-powerpc-gpopt
   1117           -mpowerpc-gfxopt  -mno-powerpc-gfxopt
   1118           -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
   1119           -mfprnd  -mno-fprnd
   1120           -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
   1121           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
   1122           -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
   1123           -malign-power  -malign-natural
   1124           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
   1125           -msingle-float -mdouble-float -msimple-fpu
   1126           -mstring  -mno-string  -mupdate  -mno-update
   1127           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
   1128           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
   1129           -mstrict-align  -mno-strict-align  -mrelocatable
   1130           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
   1131           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
   1132           -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
   1133           -mprioritize-restricted-insns=PRIORITY
   1134           -msched-costly-dep=DEPENDENCE_TYPE
   1135           -minsert-sched-nops=SCHEME
   1136           -mcall-sysv  -mcall-netbsd
   1137           -maix-struct-return  -msvr4-struct-return
   1138           -mabi=ABI-TYPE -msecure-plt -mbss-plt
   1139           -mblock-move-inline-limit=NUM
   1140           -misel -mno-isel
   1141           -misel=yes  -misel=no
   1142           -mspe -mno-spe
   1143           -mspe=yes  -mspe=no
   1144           -mpaired
   1145           -mgen-cell-microcode -mwarn-cell-microcode
   1146           -mvrsave -mno-vrsave
   1147           -mmulhw -mno-mulhw
   1148           -mdlmzb -mno-dlmzb
   1149           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
   1150           -mprototype  -mno-prototype
   1151           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
   1152           -msdata=OPT  -mvxworks  -G NUM  -pthread
   1153           -mrecip -mrecip=OPT -mno-recip -mrecip-precision
   1154           -mno-recip-precision
   1155           -mveclibabi=TYPE -mfriz -mno-friz
   1156           -mpointers-to-nested-functions -mno-pointers-to-nested-functions
   1157           -msave-toc-indirect -mno-save-toc-indirect
   1158           -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
   1159           -mcrypto -mno-crypto -mdirect-move -mno-direct-move
   1160           -mquad-memory -mno-quad-memory
   1161           -mquad-memory-atomic -mno-quad-memory-atomic
   1162           -mcompat-align-parm -mno-compat-align-parm
   1163 
   1164      _RX Options_
   1165           -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
   1166           -mcpu=
   1167           -mbig-endian-data -mlittle-endian-data
   1168           -msmall-data
   1169           -msim  -mno-sim
   1170           -mas100-syntax -mno-as100-syntax
   1171           -mrelax
   1172           -mmax-constant-size=
   1173           -mint-register=
   1174           -mpid
   1175           -mno-warn-multiple-fast-interrupts
   1176           -msave-acc-in-interrupts
   1177 
   1178      _S/390 and zSeries Options_
   1179           -mtune=CPU-TYPE  -march=CPU-TYPE
   1180           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
   1181           -mlong-double-64 -mlong-double-128
   1182           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
   1183           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
   1184           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
   1185           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
   1186           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
   1187           -mhotpatch[=HALFWORDS] -mno-hotpatch
   1188 
   1189      _Score Options_
   1190           -meb -mel
   1191           -mnhwloop
   1192           -muls
   1193           -mmac
   1194           -mscore5 -mscore5u -mscore7 -mscore7d
   1195 
   1196      _SH Options_
   1197           -m1  -m2  -m2e
   1198           -m2a-nofpu -m2a-single-only -m2a-single -m2a
   1199           -m3  -m3e
   1200           -m4-nofpu  -m4-single-only  -m4-single  -m4
   1201           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
   1202           -m5-64media  -m5-64media-nofpu
   1203           -m5-32media  -m5-32media-nofpu
   1204           -m5-compact  -m5-compact-nofpu
   1205           -mb  -ml  -mdalign  -mrelax
   1206           -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
   1207           -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
   1208           -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
   1209           -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
   1210           -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
   1211           -maccumulate-outgoing-args -minvalid-symbols
   1212           -matomic-model=ATOMIC-MODEL
   1213           -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi
   1214           -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
   1215           -mpretend-cmove -mtas
   1216 
   1217      _Solaris 2 Options_
   1218           -mimpure-text  -mno-impure-text
   1219           -pthreads -pthread
   1220 
   1221      _SPARC Options_
   1222           -mcpu=CPU-TYPE
   1223           -mtune=CPU-TYPE
   1224           -mcmodel=CODE-MODEL
   1225           -mmemory-model=MEM-MODEL
   1226           -m32  -m64  -mapp-regs  -mno-app-regs
   1227           -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
   1228           -mfpu  -mno-fpu  -mhard-float  -msoft-float
   1229           -mhard-quad-float  -msoft-quad-float
   1230           -mstack-bias  -mno-stack-bias
   1231           -munaligned-doubles  -mno-unaligned-doubles
   1232           -muser-mode  -mno-user-mode
   1233           -mv8plus  -mno-v8plus  -mvis  -mno-vis
   1234           -mvis2  -mno-vis2  -mvis3  -mno-vis3
   1235           -mcbcond -mno-cbcond
   1236           -mfmaf  -mno-fmaf  -mpopc  -mno-popc
   1237           -mfix-at697f -mfix-ut699
   1238 
   1239      _SPU Options_
   1240           -mwarn-reloc -merror-reloc
   1241           -msafe-dma -munsafe-dma
   1242           -mbranch-hints
   1243           -msmall-mem -mlarge-mem -mstdmain
   1244           -mfixed-range=REGISTER-RANGE
   1245           -mea32 -mea64
   1246           -maddress-space-conversion -mno-address-space-conversion
   1247           -mcache-size=CACHE-SIZE
   1248           -matomic-updates -mno-atomic-updates
   1249 
   1250      _System V Options_
   1251           -Qy  -Qn  -YP,PATHS  -Ym,DIR
   1252 
   1253      _TILE-Gx Options_
   1254           -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL
   1255 
   1256      _TILEPro Options_
   1257           -mcpu=CPU -m32
   1258 
   1259      _V850 Options_
   1260           -mlong-calls  -mno-long-calls  -mep  -mno-ep
   1261           -mprolog-function  -mno-prolog-function  -mspace
   1262           -mtda=N  -msda=N  -mzda=N
   1263           -mapp-regs  -mno-app-regs
   1264           -mdisable-callt  -mno-disable-callt
   1265           -mv850e2v3 -mv850e2 -mv850e1 -mv850es
   1266           -mv850e -mv850 -mv850e3v5
   1267           -mloop
   1268           -mrelax
   1269           -mlong-jumps
   1270           -msoft-float
   1271           -mhard-float
   1272           -mgcc-abi
   1273           -mrh850-abi
   1274           -mbig-switch
   1275 
   1276      _VAX Options_
   1277           -mg  -mgnu  -munix
   1278 
   1279      _VMS Options_
   1280           -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
   1281           -mpointer-size=SIZE
   1282 
   1283      _VxWorks Options_
   1284           -mrtp  -non-static  -Bstatic  -Bdynamic
   1285           -Xbind-lazy  -Xbind-now
   1286 
   1287      _x86-64 Options_ See i386 and x86-64 Options.
   1288 
   1289      _Xstormy16 Options_
   1290           -msim
   1291 
   1292      _Xtensa Options_
   1293           -mconst16 -mno-const16
   1294           -mfused-madd  -mno-fused-madd
   1295           -mforce-no-pic
   1296           -mserialize-volatile  -mno-serialize-volatile
   1297           -mtext-section-literals  -mno-text-section-literals
   1298           -mtarget-align  -mno-target-align
   1299           -mlongcalls  -mno-longcalls
   1300 
   1301      _zSeries Options_ See S/390 and zSeries Options.
   1302 
   1303 _Code Generation Options_
   1304      *Note Options for Code Generation Conventions: Code Gen Options.
   1305           -fcall-saved-REG  -fcall-used-REG
   1306           -ffixed-REG  -fexceptions
   1307           -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
   1308           -fasynchronous-unwind-tables
   1309           -finhibit-size-directive  -finstrument-functions
   1310           -finstrument-functions-exclude-function-list=SYM,SYM,...
   1311           -finstrument-functions-exclude-file-list=FILE,FILE,...
   1312           -fno-common  -fno-ident
   1313           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
   1314           -fno-jump-tables
   1315           -frecord-gcc-switches
   1316           -freg-struct-return  -fshort-enums
   1317           -fshort-double  -fshort-wchar
   1318           -fverbose-asm  -fpack-struct[=N]  -fstack-check
   1319           -fstack-limit-register=REG  -fstack-limit-symbol=SYM
   1320           -fno-stack-limit -fsplit-stack
   1321           -fleading-underscore  -ftls-model=MODEL
   1322           -fstack-reuse=REUSE_LEVEL
   1323           -ftrapv  -fwrapv  -fbounds-check
   1324           -fvisibility -fstrict-volatile-bitfields -fsync-libcalls
   1325 
   1326 
   1327 * Menu:
   1328 
   1329 * Overall Options::     Controlling the kind of output:
   1330                         an executable, object files, assembler files,
   1331                         or preprocessed source.
   1332 * C Dialect Options::   Controlling the variant of C language compiled.
   1333 * C++ Dialect Options:: Variations on C++.
   1334 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
   1335                         and Objective-C++.
   1336 * Language Independent Options:: Controlling how diagnostics should be
   1337                         formatted.
   1338 * Warning Options::     How picky should the compiler be?
   1339 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
   1340 * Optimize Options::    How much optimization?
   1341 * Preprocessor Options:: Controlling header files and macro definitions.
   1342                          Also, getting dependency information for Make.
   1343 * Assembler Options::   Passing options to the assembler.
   1344 * Link Options::        Specifying libraries and so on.
   1345 * Directory Options::   Where to find header files and libraries.
   1346                         Where to find the compiler executable files.
   1347 * Spec Files::          How to pass switches to sub-processes.
   1348 * Target Options::      Running a cross-compiler, or an old version of GCC.
   1349 
   1350 
   1351 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
   1352 
   1353 3.2 Options Controlling the Kind of Output
   1354 ==========================================
   1355 
   1356 Compilation can involve up to four stages: preprocessing, compilation
   1357 proper, assembly and linking, always in that order.  GCC is capable of
   1358 preprocessing and compiling several files either into several assembler
   1359 input files, or into one assembler input file; then each assembler
   1360 input file produces an object file, and linking combines all the object
   1361 files (those newly compiled, and those specified as input) into an
   1362 executable file.
   1363 
   1364  For any given input file, the file name suffix determines what kind of
   1365 compilation is done:
   1366 
   1367 `FILE.c'
   1368      C source code that must be preprocessed.
   1369 
   1370 `FILE.i'
   1371      C source code that should not be preprocessed.
   1372 
   1373 `FILE.ii'
   1374      C++ source code that should not be preprocessed.
   1375 
   1376 `FILE.m'
   1377      Objective-C source code.  Note that you must link with the
   1378      `libobjc' library to make an Objective-C program work.
   1379 
   1380 `FILE.mi'
   1381      Objective-C source code that should not be preprocessed.
   1382 
   1383 `FILE.mm'
   1384 `FILE.M'
   1385      Objective-C++ source code.  Note that you must link with the
   1386      `libobjc' library to make an Objective-C++ program work.  Note
   1387      that `.M' refers to a literal capital M.
   1388 
   1389 `FILE.mii'
   1390      Objective-C++ source code that should not be preprocessed.
   1391 
   1392 `FILE.h'
   1393      C, C++, Objective-C or Objective-C++ header file to be turned into
   1394      a precompiled header (default), or C, C++ header file to be turned
   1395      into an Ada spec (via the `-fdump-ada-spec' switch).
   1396 
   1397 `FILE.cc'
   1398 `FILE.cp'
   1399 `FILE.cxx'
   1400 `FILE.cpp'
   1401 `FILE.CPP'
   1402 `FILE.c++'
   1403 `FILE.C'
   1404      C++ source code that must be preprocessed.  Note that in `.cxx',
   1405      the last two letters must both be literally `x'.  Likewise, `.C'
   1406      refers to a literal capital C.
   1407 
   1408 `FILE.mm'
   1409 `FILE.M'
   1410      Objective-C++ source code that must be preprocessed.
   1411 
   1412 `FILE.mii'
   1413      Objective-C++ source code that should not be preprocessed.
   1414 
   1415 `FILE.hh'
   1416 `FILE.H'
   1417 `FILE.hp'
   1418 `FILE.hxx'
   1419 `FILE.hpp'
   1420 `FILE.HPP'
   1421 `FILE.h++'
   1422 `FILE.tcc'
   1423      C++ header file to be turned into a precompiled header or Ada spec.
   1424 
   1425 `FILE.f'
   1426 `FILE.for'
   1427 `FILE.ftn'
   1428      Fixed form Fortran source code that should not be preprocessed.
   1429 
   1430 `FILE.F'
   1431 `FILE.FOR'
   1432 `FILE.fpp'
   1433 `FILE.FPP'
   1434 `FILE.FTN'
   1435      Fixed form Fortran source code that must be preprocessed (with the
   1436      traditional preprocessor).
   1437 
   1438 `FILE.f90'
   1439 `FILE.f95'
   1440 `FILE.f03'
   1441 `FILE.f08'
   1442      Free form Fortran source code that should not be preprocessed.
   1443 
   1444 `FILE.F90'
   1445 `FILE.F95'
   1446 `FILE.F03'
   1447 `FILE.F08'
   1448      Free form Fortran source code that must be preprocessed (with the
   1449      traditional preprocessor).
   1450 
   1451 `FILE.go'
   1452      Go source code.
   1453 
   1454 `FILE.ads'
   1455      Ada source code file that contains a library unit declaration (a
   1456      declaration of a package, subprogram, or generic, or a generic
   1457      instantiation), or a library unit renaming declaration (a package,
   1458      generic, or subprogram renaming declaration).  Such files are also
   1459      called "specs".
   1460 
   1461 `FILE.adb'
   1462      Ada source code file containing a library unit body (a subprogram
   1463      or package body).  Such files are also called "bodies".
   1464 
   1465 `FILE.s'
   1466      Assembler code.
   1467 
   1468 `FILE.S'
   1469 `FILE.sx'
   1470      Assembler code that must be preprocessed.
   1471 
   1472 `OTHER'
   1473      An object file to be fed straight into linking.  Any file name
   1474      with no recognized suffix is treated this way.
   1475 
   1476  You can specify the input language explicitly with the `-x' option:
   1477 
   1478 `-x LANGUAGE'
   1479      Specify explicitly the LANGUAGE for the following input files
   1480      (rather than letting the compiler choose a default based on the
   1481      file name suffix).  This option applies to all following input
   1482      files until the next `-x' option.  Possible values for LANGUAGE
   1483      are:
   1484           c  c-header  cpp-output
   1485           c++  c++-header  c++-cpp-output
   1486           objective-c  objective-c-header  objective-c-cpp-output
   1487           objective-c++ objective-c++-header objective-c++-cpp-output
   1488           assembler  assembler-with-cpp
   1489           ada
   1490           f77  f77-cpp-input f95  f95-cpp-input
   1491           go
   1492           java
   1493 
   1494 `-x none'
   1495      Turn off any specification of a language, so that subsequent files
   1496      are handled according to their file name suffixes (as they are if
   1497      `-x' has not been used at all).
   1498 
   1499 `-pass-exit-codes'
   1500      Normally the `gcc' program exits with the code of 1 if any phase
   1501      of the compiler returns a non-success return code.  If you specify
   1502      `-pass-exit-codes', the `gcc' program instead returns with the
   1503      numerically highest error produced by any phase returning an error
   1504      indication.  The C, C++, and Fortran front ends return 4 if an
   1505      internal compiler error is encountered.
   1506 
   1507  If you only want some of the stages of compilation, you can use `-x'
   1508 (or filename suffixes) to tell `gcc' where to start, and one of the
   1509 options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
   1510 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
   1511 do nothing at all.
   1512 
   1513 `-c'
   1514      Compile or assemble the source files, but do not link.  The linking
   1515      stage simply is not done.  The ultimate output is in the form of an
   1516      object file for each source file.
   1517 
   1518      By default, the object file name for a source file is made by
   1519      replacing the suffix `.c', `.i', `.s', etc., with `.o'.
   1520 
   1521      Unrecognized input files, not requiring compilation or assembly,
   1522      are ignored.
   1523 
   1524 `-S'
   1525      Stop after the stage of compilation proper; do not assemble.  The
   1526      output is in the form of an assembler code file for each
   1527      non-assembler input file specified.
   1528 
   1529      By default, the assembler file name for a source file is made by
   1530      replacing the suffix `.c', `.i', etc., with `.s'.
   1531 
   1532      Input files that don't require compilation are ignored.
   1533 
   1534 `-E'
   1535      Stop after the preprocessing stage; do not run the compiler
   1536      proper.  The output is in the form of preprocessed source code,
   1537      which is sent to the standard output.
   1538 
   1539      Input files that don't require preprocessing are ignored.
   1540 
   1541 `-o FILE'
   1542      Place output in file FILE.  This applies to whatever sort of
   1543      output is being produced, whether it be an executable file, an
   1544      object file, an assembler file or preprocessed C code.
   1545 
   1546      If `-o' is not specified, the default is to put an executable file
   1547      in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
   1548      assembler file in `SOURCE.s', a precompiled header file in
   1549      `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
   1550      output.
   1551 
   1552 `-v'
   1553      Print (on standard error output) the commands executed to run the
   1554      stages of compilation.  Also print the version number of the
   1555      compiler driver program and of the preprocessor and the compiler
   1556      proper.
   1557 
   1558 `-###'
   1559      Like `-v' except the commands are not executed and arguments are
   1560      quoted unless they contain only alphanumeric characters or `./-_'.
   1561      This is useful for shell scripts to capture the driver-generated
   1562      command lines.
   1563 
   1564 `-pipe'
   1565      Use pipes rather than temporary files for communication between the
   1566      various stages of compilation.  This fails to work on some systems
   1567      where the assembler is unable to read from a pipe; but the GNU
   1568      assembler has no trouble.
   1569 
   1570 `--help'
   1571      Print (on the standard output) a description of the command-line
   1572      options understood by `gcc'.  If the `-v' option is also specified
   1573      then `--help' is also passed on to the various processes invoked
   1574      by `gcc', so that they can display the command-line options they
   1575      accept.  If the `-Wextra' option has also been specified (prior to
   1576      the `--help' option), then command-line options that have no
   1577      documentation associated with them are also displayed.
   1578 
   1579 `--target-help'
   1580      Print (on the standard output) a description of target-specific
   1581      command-line options for each tool.  For some targets extra
   1582      target-specific information may also be printed.
   1583 
   1584 `--help={CLASS|[^]QUALIFIER}[,...]'
   1585      Print (on the standard output) a description of the command-line
   1586      options understood by the compiler that fit into all specified
   1587      classes and qualifiers.  These are the supported classes:
   1588 
   1589     `optimizers'
   1590           Display all of the optimization options supported by the
   1591           compiler.
   1592 
   1593     `warnings'
   1594           Display all of the options controlling warning messages
   1595           produced by the compiler.
   1596 
   1597     `target'
   1598           Display target-specific options.  Unlike the `--target-help'
   1599           option however, target-specific options of the linker and
   1600           assembler are not displayed.  This is because those tools do
   1601           not currently support the extended `--help=' syntax.
   1602 
   1603     `params'
   1604           Display the values recognized by the `--param' option.
   1605 
   1606     LANGUAGE
   1607           Display the options supported for LANGUAGE, where LANGUAGE is
   1608           the name of one of the languages supported in this version of
   1609           GCC.
   1610 
   1611     `common'
   1612           Display the options that are common to all languages.
   1613 
   1614      These are the supported qualifiers:
   1615 
   1616     `undocumented'
   1617           Display only those options that are undocumented.
   1618 
   1619     `joined'
   1620           Display options taking an argument that appears after an equal
   1621           sign in the same continuous piece of text, such as:
   1622           `--help=target'.
   1623 
   1624     `separate'
   1625           Display options taking an argument that appears as a separate
   1626           word following the original option, such as: `-o output-file'.
   1627 
   1628      Thus for example to display all the undocumented target-specific
   1629      switches supported by the compiler, use:
   1630 
   1631           --help=target,undocumented
   1632 
   1633      The sense of a qualifier can be inverted by prefixing it with the
   1634      `^' character, so for example to display all binary warning
   1635      options (i.e., ones that are either on or off and that do not take
   1636      an argument) that have a description, use:
   1637 
   1638           --help=warnings,^joined,^undocumented
   1639 
   1640      The argument to `--help=' should not consist solely of inverted
   1641      qualifiers.
   1642 
   1643      Combining several classes is possible, although this usually
   1644      restricts the output so much that there is nothing to display.  One
   1645      case where it does work, however, is when one of the classes is
   1646      TARGET.  For example, to display all the target-specific
   1647      optimization options, use:
   1648 
   1649           --help=target,optimizers
   1650 
   1651      The `--help=' option can be repeated on the command line.  Each
   1652      successive use displays its requested class of options, skipping
   1653      those that have already been displayed.
   1654 
   1655      If the `-Q' option appears on the command line before the
   1656      `--help=' option, then the descriptive text displayed by `--help='
   1657      is changed.  Instead of describing the displayed options, an
   1658      indication is given as to whether the option is enabled, disabled
   1659      or set to a specific value (assuming that the compiler knows this
   1660      at the point where the `--help=' option is used).
   1661 
   1662      Here is a truncated example from the ARM port of `gcc':
   1663 
   1664             % gcc -Q -mabi=2 --help=target -c
   1665             The following options are target specific:
   1666             -mabi=                                2
   1667             -mabort-on-noreturn                   [disabled]
   1668             -mapcs                                [disabled]
   1669 
   1670      The output is sensitive to the effects of previous command-line
   1671      options, so for example it is possible to find out which
   1672      optimizations are enabled at `-O2' by using:
   1673 
   1674           -Q -O2 --help=optimizers
   1675 
   1676      Alternatively you can discover which binary optimizations are
   1677      enabled by `-O3' by using:
   1678 
   1679           gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   1680           gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   1681           diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   1682 
   1683 `-no-canonical-prefixes'
   1684      Do not expand any symbolic links, resolve references to `/../' or
   1685      `/./', or make the path absolute when generating a relative prefix.
   1686 
   1687 `--version'
   1688      Display the version number and copyrights of the invoked GCC.
   1689 
   1690 `-wrapper'
   1691      Invoke all subcommands under a wrapper program.  The name of the
   1692      wrapper program and its parameters are passed as a comma separated
   1693      list.
   1694 
   1695           gcc -c t.c -wrapper gdb,--args
   1696 
   1697      This invokes all subprograms of `gcc' under `gdb --args', thus the
   1698      invocation of `cc1' is `gdb --args cc1 ...'.
   1699 
   1700 `-fplugin=NAME.so'
   1701      Load the plugin code in file NAME.so, assumed to be a shared
   1702      object to be dlopen'd by the compiler.  The base name of the
   1703      shared object file is used to identify the plugin for the purposes
   1704      of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
   1705      Each plugin should define the callback functions specified in the
   1706      Plugins API.
   1707 
   1708 `-fplugin-arg-NAME-KEY=VALUE'
   1709      Define an argument called KEY with a value of VALUE for the plugin
   1710      called NAME.
   1711 
   1712 `-fdump-ada-spec[-slim]'
   1713      For C and C++ source and include files, generate corresponding Ada
   1714      specs.  *Note Generating Ada Bindings for C and C++ headers:
   1715      (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
   1716      provides detailed documentation on this feature.
   1717 
   1718 `-fada-spec-parent=UNIT'
   1719      In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada
   1720      specs as child units of parent UNIT.
   1721 
   1722 `-fdump-go-spec=FILE'
   1723      For input files in any language, generate corresponding Go
   1724      declarations in FILE.  This generates Go `const', `type', `var',
   1725      and `func' declarations which may be a useful way to start writing
   1726      a Go interface to code written in some other language.
   1727 
   1728 `@FILE'
   1729      Read command-line options from FILE.  The options read are
   1730      inserted in place of the original @FILE option.  If FILE does not
   1731      exist, or cannot be read, then the option will be treated
   1732      literally, and not removed.
   1733 
   1734      Options in FILE are separated by whitespace.  A whitespace
   1735      character may be included in an option by surrounding the entire
   1736      option in either single or double quotes.  Any character
   1737      (including a backslash) may be included by prefixing the character
   1738      to be included with a backslash.  The FILE may itself contain
   1739      additional @FILE options; any such options will be processed
   1740      recursively.
   1741 
   1742 
   1743 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
   1744 
   1745 3.3 Compiling C++ Programs
   1746 ==========================
   1747 
   1748 C++ source files conventionally use one of the suffixes `.C', `.cc',
   1749 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
   1750 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
   1751 preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
   1752 these names and compiles them as C++ programs even if you call the
   1753 compiler the same way as for compiling C programs (usually with the
   1754 name `gcc').
   1755 
   1756  However, the use of `gcc' does not add the C++ library.  `g++' is a
   1757 program that calls GCC and automatically specifies linking against the
   1758 C++ library.  It treats `.c', `.h' and `.i' files as C++ source files
   1759 instead of C source files unless `-x' is used.  This program is also
   1760 useful when precompiling a C header file with a `.h' extension for use
   1761 in C++ compilations.  On many systems, `g++' is also installed with the
   1762 name `c++'.
   1763 
   1764  When you compile C++ programs, you may specify many of the same
   1765 command-line options that you use for compiling programs in any
   1766 language; or command-line options meaningful for C and related
   1767 languages; or options that are meaningful only for C++ programs.  *Note
   1768 Options Controlling C Dialect: C Dialect Options, for explanations of
   1769 options for languages related to C.  *Note Options Controlling C++
   1770 Dialect: C++ Dialect Options, for explanations of options that are
   1771 meaningful only for C++ programs.
   1772 
   1773 
   1774 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
   1775 
   1776 3.4 Options Controlling C Dialect
   1777 =================================
   1778 
   1779 The following options control the dialect of C (or languages derived
   1780 from C, such as C++, Objective-C and Objective-C++) that the compiler
   1781 accepts:
   1782 
   1783 `-ansi'
   1784      In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
   1785      equivalent to `-std=c++98'.
   1786 
   1787      This turns off certain features of GCC that are incompatible with
   1788      ISO C90 (when compiling C code), or of standard C++ (when
   1789      compiling C++ code), such as the `asm' and `typeof' keywords, and
   1790      predefined macros such as `unix' and `vax' that identify the type
   1791      of system you are using.  It also enables the undesirable and
   1792      rarely used ISO trigraph feature.  For the C compiler, it disables
   1793      recognition of C++ style `//' comments as well as the `inline'
   1794      keyword.
   1795 
   1796      The alternate keywords `__asm__', `__extension__', `__inline__'
   1797      and `__typeof__' continue to work despite `-ansi'.  You would not
   1798      want to use them in an ISO C program, of course, but it is useful
   1799      to put them in header files that might be included in compilations
   1800      done with `-ansi'.  Alternate predefined macros such as `__unix__'
   1801      and `__vax__' are also available, with or without `-ansi'.
   1802 
   1803      The `-ansi' option does not cause non-ISO programs to be rejected
   1804      gratuitously.  For that, `-Wpedantic' is required in addition to
   1805      `-ansi'.  *Note Warning Options::.
   1806 
   1807      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
   1808      is used.  Some header files may notice this macro and refrain from
   1809      declaring certain functions or defining certain macros that the
   1810      ISO standard doesn't call for; this is to avoid interfering with
   1811      any programs that might use these names for other things.
   1812 
   1813      Functions that are normally built in but do not have semantics
   1814      defined by ISO C (such as `alloca' and `ffs') are not built-in
   1815      functions when `-ansi' is used.  *Note Other built-in functions
   1816      provided by GCC: Other Builtins, for details of the functions
   1817      affected.
   1818 
   1819 `-std='
   1820      Determine the language standard. *Note Language Standards
   1821      Supported by GCC: Standards, for details of these standard
   1822      versions.  This option is currently only supported when compiling
   1823      C or C++.
   1824 
   1825      The compiler can accept several base standards, such as `c90' or
   1826      `c++98', and GNU dialects of those standards, such as `gnu90' or
   1827      `gnu++98'.  When a base standard is specified, the compiler
   1828      accepts all programs following that standard plus those using GNU
   1829      extensions that do not contradict it.  For example, `-std=c90'
   1830      turns off certain features of GCC that are incompatible with ISO
   1831      C90, such as the `asm' and `typeof' keywords, but not other GNU
   1832      extensions that do not have a meaning in ISO C90, such as omitting
   1833      the middle term of a `?:' expression. On the other hand, when a
   1834      GNU dialect of a standard is specified, all features supported by
   1835      the compiler are enabled, even when those features change the
   1836      meaning of the base standard.  As a result, some strict-conforming
   1837      programs may be rejected.  The particular standard is used by
   1838      `-Wpedantic' to identify which features are GNU extensions given
   1839      that version of the standard. For example `-std=gnu90 -Wpedantic'
   1840      warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic'
   1841      does not.
   1842 
   1843      A value for this option must be provided; possible values are
   1844 
   1845     `c90'
   1846     `c89'
   1847     `iso9899:1990'
   1848           Support all ISO C90 programs (certain GNU extensions that
   1849           conflict with ISO C90 are disabled). Same as `-ansi' for C
   1850           code.
   1851 
   1852     `iso9899:199409'
   1853           ISO C90 as modified in amendment 1.
   1854 
   1855     `c99'
   1856     `c9x'
   1857     `iso9899:1999'
   1858     `iso9899:199x'
   1859           ISO C99.  Note that this standard is not yet fully supported;
   1860           see `http://gcc.gnu.org/c99status.html' for more information.
   1861           The names `c9x' and `iso9899:199x' are deprecated.
   1862 
   1863     `c11'
   1864     `c1x'
   1865     `iso9899:2011'
   1866           ISO C11, the 2011 revision of the ISO C standard.  Support is
   1867           incomplete and experimental.  The name `c1x' is deprecated.
   1868 
   1869     `gnu90'
   1870     `gnu89'
   1871           GNU dialect of ISO C90 (including some C99 features). This is
   1872           the default for C code.
   1873 
   1874     `gnu99'
   1875     `gnu9x'
   1876           GNU dialect of ISO C99.  When ISO C99 is fully implemented in
   1877           GCC, this will become the default.  The name `gnu9x' is
   1878           deprecated.
   1879 
   1880     `gnu11'
   1881     `gnu1x'
   1882           GNU dialect of ISO C11.  Support is incomplete and
   1883           experimental.  The name `gnu1x' is deprecated.
   1884 
   1885     `c++98'
   1886     `c++03'
   1887           The 1998 ISO C++ standard plus the 2003 technical corrigendum
   1888           and some additional defect reports. Same as `-ansi' for C++
   1889           code.
   1890 
   1891     `gnu++98'
   1892     `gnu++03'
   1893           GNU dialect of `-std=c++98'.  This is the default for C++
   1894           code.
   1895 
   1896     `c++11'
   1897     `c++0x'
   1898           The 2011 ISO C++ standard plus amendments.  Support for C++11
   1899           is still experimental, and may change in incompatible ways in
   1900           future releases.  The name `c++0x' is deprecated.
   1901 
   1902     `gnu++11'
   1903     `gnu++0x'
   1904           GNU dialect of `-std=c++11'. Support for C++11 is still
   1905           experimental, and may change in incompatible ways in future
   1906           releases.  The name `gnu++0x' is deprecated.
   1907 
   1908     `c++1y'
   1909           The next revision of the ISO C++ standard, tentatively
   1910           planned for 2017.  Support is highly experimental, and will
   1911           almost certainly change in incompatible ways in future
   1912           releases.
   1913 
   1914     `gnu++1y'
   1915           GNU dialect of `-std=c++1y'.  Support is highly experimental,
   1916           and will almost certainly change in incompatible ways in
   1917           future releases.
   1918 
   1919 `-fgnu89-inline'
   1920      The option `-fgnu89-inline' tells GCC to use the traditional GNU
   1921      semantics for `inline' functions when in C99 mode.  *Note An
   1922      Inline Function is As Fast As a Macro: Inline.  This option is
   1923      accepted and ignored by GCC versions 4.1.3 up to but not including
   1924      4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
   1925      in C99 mode.  Using this option is roughly equivalent to adding the
   1926      `gnu_inline' function attribute to all inline functions (*note
   1927      Function Attributes::).
   1928 
   1929      The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
   1930      semantics for `inline' when in C99 or gnu99 mode (i.e., it
   1931      specifies the default behavior).  This option was first supported
   1932      in GCC 4.3.  This option is not supported in `-std=c90' or
   1933      `-std=gnu90' mode.
   1934 
   1935      The preprocessor macros `__GNUC_GNU_INLINE__' and
   1936      `__GNUC_STDC_INLINE__' may be used to check which semantics are in
   1937      effect for `inline' functions.  *Note Common Predefined Macros:
   1938      (cpp)Common Predefined Macros.
   1939 
   1940 `-aux-info FILENAME'
   1941      Output to the given filename prototyped declarations for all
   1942      functions declared and/or defined in a translation unit, including
   1943      those in header files.  This option is silently ignored in any
   1944      language other than C.
   1945 
   1946      Besides declarations, the file indicates, in comments, the origin
   1947      of each declaration (source file and line), whether the
   1948      declaration was implicit, prototyped or unprototyped (`I', `N' for
   1949      new or `O' for old, respectively, in the first character after the
   1950      line number and the colon), and whether it came from a declaration
   1951      or a definition (`C' or `F', respectively, in the following
   1952      character).  In the case of function definitions, a K&R-style list
   1953      of arguments followed by their declarations is also provided,
   1954      inside comments, after the declaration.
   1955 
   1956 `-fallow-parameterless-variadic-functions'
   1957      Accept variadic functions without named parameters.
   1958 
   1959      Although it is possible to define such a function, this is not very
   1960      useful as it is not possible to read the arguments.  This is only
   1961      supported for C as this construct is allowed by C++.
   1962 
   1963 `-fno-asm'
   1964      Do not recognize `asm', `inline' or `typeof' as a keyword, so that
   1965      code can use these words as identifiers.  You can use the keywords
   1966      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
   1967      `-fno-asm'.
   1968 
   1969      In C++, this switch only affects the `typeof' keyword, since `asm'
   1970      and `inline' are standard keywords.  You may want to use the
   1971      `-fno-gnu-keywords' flag instead, which has the same effect.  In
   1972      C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
   1973      the `asm' and `typeof' keywords, since `inline' is a standard
   1974      keyword in ISO C99.
   1975 
   1976 `-fno-builtin'
   1977 `-fno-builtin-FUNCTION'
   1978      Don't recognize built-in functions that do not begin with
   1979      `__builtin_' as prefix.  *Note Other built-in functions provided
   1980      by GCC: Other Builtins, for details of the functions affected,
   1981      including those which are not built-in functions when `-ansi' or
   1982      `-std' options for strict ISO C conformance are used because they
   1983      do not have an ISO standard meaning.
   1984 
   1985      GCC normally generates special code to handle certain built-in
   1986      functions more efficiently; for instance, calls to `alloca' may
   1987      become single instructions which adjust the stack directly, and
   1988      calls to `memcpy' may become inline copy loops.  The resulting
   1989      code is often both smaller and faster, but since the function
   1990      calls no longer appear as such, you cannot set a breakpoint on
   1991      those calls, nor can you change the behavior of the functions by
   1992      linking with a different library.  In addition, when a function is
   1993      recognized as a built-in function, GCC may use information about
   1994      that function to warn about problems with calls to that function,
   1995      or to generate more efficient code, even if the resulting code
   1996      still contains calls to that function.  For example, warnings are
   1997      given with `-Wformat' for bad calls to `printf' when `printf' is
   1998      built in and `strlen' is known not to modify global memory.
   1999 
   2000      With the `-fno-builtin-FUNCTION' option only the built-in function
   2001      FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
   2002      If a function is named that is not built-in in this version of
   2003      GCC, this option is ignored.  There is no corresponding
   2004      `-fbuiltin-FUNCTION' option; if you wish to enable built-in
   2005      functions selectively when using `-fno-builtin' or
   2006      `-ffreestanding', you may define macros such as:
   2007 
   2008           #define abs(n)          __builtin_abs ((n))
   2009           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
   2010 
   2011 `-fhosted'
   2012      Assert that compilation targets a hosted environment.  This implies
   2013      `-fbuiltin'.  A hosted environment is one in which the entire
   2014      standard library is available, and in which `main' has a return
   2015      type of `int'.  Examples are nearly everything except a kernel.
   2016      This is equivalent to `-fno-freestanding'.
   2017 
   2018 `-ffreestanding'
   2019      Assert that compilation targets a freestanding environment.  This
   2020      implies `-fno-builtin'.  A freestanding environment is one in
   2021      which the standard library may not exist, and program startup may
   2022      not necessarily be at `main'.  The most obvious example is an OS
   2023      kernel.  This is equivalent to `-fno-hosted'.
   2024 
   2025      *Note Language Standards Supported by GCC: Standards, for details
   2026      of freestanding and hosted environments.
   2027 
   2028 `-fopenmp'
   2029      Enable handling of OpenMP directives `#pragma omp' in C/C++ and
   2030      `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
   2031      generates parallel code according to the OpenMP Application
   2032      Program Interface v3.0 `http://www.openmp.org/'.  This option
   2033      implies `-pthread', and thus is only supported on targets that
   2034      have support for `-pthread'.
   2035 
   2036 `-fgnu-tm'
   2037      When the option `-fgnu-tm' is specified, the compiler generates
   2038      code for the Linux variant of Intel's current Transactional Memory
   2039      ABI specification document (Revision 1.1, May 6 2009).  This is an
   2040      experimental feature whose interface may change in future versions
   2041      of GCC, as the official specification changes.  Please note that
   2042      not all architectures are supported for this feature.
   2043 
   2044      For more information on GCC's support for transactional memory,
   2045      *Note The GNU Transactional Memory Library: (libitm)Enabling
   2046      libitm.
   2047 
   2048      Note that the transactional memory feature is not supported with
   2049      non-call exceptions (`-fnon-call-exceptions').
   2050 
   2051 `-fms-extensions'
   2052      Accept some non-standard constructs used in Microsoft header files.
   2053 
   2054      In C++ code, this allows member names in structures to be similar
   2055      to previous types declarations.
   2056 
   2057           typedef int UOW;
   2058           struct ABC {
   2059             UOW UOW;
   2060           };
   2061 
   2062      Some cases of unnamed fields in structures and unions are only
   2063      accepted with this option.  *Note Unnamed struct/union fields
   2064      within structs/unions: Unnamed Fields, for details.
   2065 
   2066 `-fplan9-extensions'
   2067      Accept some non-standard constructs used in Plan 9 code.
   2068 
   2069      This enables `-fms-extensions', permits passing pointers to
   2070      structures with anonymous fields to functions that expect pointers
   2071      to elements of the type of the field, and permits referring to
   2072      anonymous fields declared using a typedef.  *Note Unnamed
   2073      struct/union fields within structs/unions: Unnamed Fields, for
   2074      details.  This is only supported for C, not C++.
   2075 
   2076 `-trigraphs'
   2077      Support ISO C trigraphs.  The `-ansi' option (and `-std' options
   2078      for strict ISO C conformance) implies `-trigraphs'.
   2079 
   2080 `-traditional'
   2081 `-traditional-cpp'
   2082      Formerly, these options caused GCC to attempt to emulate a
   2083      pre-standard C compiler.  They are now only supported with the
   2084      `-E' switch.  The preprocessor continues to support a pre-standard
   2085      mode.  See the GNU CPP manual for details.
   2086 
   2087 `-fcond-mismatch'
   2088      Allow conditional expressions with mismatched types in the second
   2089      and third arguments.  The value of such an expression is void.
   2090      This option is not supported for C++.
   2091 
   2092 `-flax-vector-conversions'
   2093      Allow implicit conversions between vectors with differing numbers
   2094      of elements and/or incompatible element types.  This option should
   2095      not be used for new code.
   2096 
   2097 `-funsigned-char'
   2098      Let the type `char' be unsigned, like `unsigned char'.
   2099 
   2100      Each kind of machine has a default for what `char' should be.  It
   2101      is either like `unsigned char' by default or like `signed char' by
   2102      default.
   2103 
   2104      Ideally, a portable program should always use `signed char' or
   2105      `unsigned char' when it depends on the signedness of an object.
   2106      But many programs have been written to use plain `char' and expect
   2107      it to be signed, or expect it to be unsigned, depending on the
   2108      machines they were written for.  This option, and its inverse, let
   2109      you make such a program work with the opposite default.
   2110 
   2111      The type `char' is always a distinct type from each of `signed
   2112      char' or `unsigned char', even though its behavior is always just
   2113      like one of those two.
   2114 
   2115 `-fsigned-char'
   2116      Let the type `char' be signed, like `signed char'.
   2117 
   2118      Note that this is equivalent to `-fno-unsigned-char', which is the
   2119      negative form of `-funsigned-char'.  Likewise, the option
   2120      `-fno-signed-char' is equivalent to `-funsigned-char'.
   2121 
   2122 `-fsigned-bitfields'
   2123 `-funsigned-bitfields'
   2124 `-fno-signed-bitfields'
   2125 `-fno-unsigned-bitfields'
   2126      These options control whether a bit-field is signed or unsigned,
   2127      when the declaration does not use either `signed' or `unsigned'.
   2128      By default, such a bit-field is signed, because this is
   2129      consistent: the basic integer types such as `int' are signed types.
   2130 
   2131 
   2132 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
   2133 
   2134 3.5 Options Controlling C++ Dialect
   2135 ===================================
   2136 
   2137 This section describes the command-line options that are only meaningful
   2138 for C++ programs.  You can also use most of the GNU compiler options
   2139 regardless of what language your program is in.  For example, you might
   2140 compile a file `firstClass.C' like this:
   2141 
   2142      g++ -g -frepo -O -c firstClass.C
   2143 
   2144 In this example, only `-frepo' is an option meant only for C++
   2145 programs; you can use the other options with any language supported by
   2146 GCC.
   2147 
   2148  Here is a list of options that are _only_ for compiling C++ programs:
   2149 
   2150 `-fabi-version=N'
   2151      Use version N of the C++ ABI.  The default is version 2.
   2152 
   2153      Version 0 refers to the version conforming most closely to the C++
   2154      ABI specification.  Therefore, the ABI obtained using version 0
   2155      will change in different versions of G++ as ABI bugs are fixed.
   2156 
   2157      Version 1 is the version of the C++ ABI that first appeared in G++
   2158      3.2.
   2159 
   2160      Version 2 is the version of the C++ ABI that first appeared in G++
   2161      3.4.
   2162 
   2163      Version 3 corrects an error in mangling a constant address as a
   2164      template argument.
   2165 
   2166      Version 4, which first appeared in G++ 4.5, implements a standard
   2167      mangling for vector types.
   2168 
   2169      Version 5, which first appeared in G++ 4.6, corrects the mangling
   2170      of attribute const/volatile on function pointer types, decltype of
   2171      a plain decl, and use of a function parameter in the declaration of
   2172      another parameter.
   2173 
   2174      Version 6, which first appeared in G++ 4.7, corrects the promotion
   2175      behavior of C++11 scoped enums and the mangling of template
   2176      argument packs, const/static_cast, prefix ++ and -, and a class
   2177      scope function used as a template argument.
   2178 
   2179      See also `-Wabi'.
   2180 
   2181 `-fno-access-control'
   2182      Turn off all access checking.  This switch is mainly useful for
   2183      working around bugs in the access control code.
   2184 
   2185 `-fcheck-new'
   2186      Check that the pointer returned by `operator new' is non-null
   2187      before attempting to modify the storage allocated.  This check is
   2188      normally unnecessary because the C++ standard specifies that
   2189      `operator new' only returns `0' if it is declared `throw()', in
   2190      which case the compiler always checks the return value even
   2191      without this option.  In all other cases, when `operator new' has
   2192      a non-empty exception specification, memory exhaustion is
   2193      signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
   2194 
   2195 `-fconstexpr-depth=N'
   2196      Set the maximum nested evaluation depth for C++11 constexpr
   2197      functions to N.  A limit is needed to detect endless recursion
   2198      during constant expression evaluation.  The minimum specified by
   2199      the standard is 512.
   2200 
   2201 `-fdeduce-init-list'
   2202      Enable deduction of a template type parameter as
   2203      `std::initializer_list' from a brace-enclosed initializer list,
   2204      i.e.
   2205 
   2206           template <class T> auto forward(T t) -> decltype (realfn (t))
   2207           {
   2208             return realfn (t);
   2209           }
   2210 
   2211           void f()
   2212           {
   2213             forward({1,2}); // call forward<std::initializer_list<int>>
   2214           }
   2215 
   2216      This deduction was implemented as a possible extension to the
   2217      originally proposed semantics for the C++11 standard, but was not
   2218      part of the final standard, so it is disabled by default.  This
   2219      option is deprecated, and may be removed in a future version of
   2220      G++.
   2221 
   2222 `-ffriend-injection'
   2223      Inject friend functions into the enclosing namespace, so that they
   2224      are visible outside the scope of the class in which they are
   2225      declared.  Friend functions were documented to work this way in
   2226      the old Annotated C++ Reference Manual, and versions of G++ before
   2227      4.1 always worked that way.  However, in ISO C++ a friend function
   2228      that is not declared in an enclosing scope can only be found using
   2229      argument dependent lookup.  This option causes friends to be
   2230      injected as they were in earlier releases.
   2231 
   2232      This option is for compatibility, and may be removed in a future
   2233      release of G++.
   2234 
   2235 `-fno-elide-constructors'
   2236      The C++ standard allows an implementation to omit creating a
   2237      temporary that is only used to initialize another object of the
   2238      same type.  Specifying this option disables that optimization, and
   2239      forces G++ to call the copy constructor in all cases.
   2240 
   2241 `-fno-enforce-eh-specs'
   2242      Don't generate code to check for violation of exception
   2243      specifications at run time.  This option violates the C++
   2244      standard, but may be useful for reducing code size in production
   2245      builds, much like defining `NDEBUG'.  This does not give user code
   2246      permission to throw exceptions in violation of the exception
   2247      specifications; the compiler still optimizes based on the
   2248      specifications, so throwing an unexpected exception results in
   2249      undefined behavior at run time.
   2250 
   2251 `-fextern-tls-init'
   2252 `-fno-extern-tls-init'
   2253      The C++11 and OpenMP standards allow `thread_local' and
   2254      `threadprivate' variables to have dynamic (runtime)
   2255      initialization.  To support this, any use of such a variable goes
   2256      through a wrapper function that performs any necessary
   2257      initialization.  When the use and definition of the variable are
   2258      in the same translation unit, this overhead can be optimized away,
   2259      but when the use is in a different translation unit there is
   2260      significant overhead even if the variable doesn't actually need
   2261      dynamic initialization.  If the programmer can be sure that no use
   2262      of the variable in a non-defining TU needs to trigger dynamic
   2263      initialization (either because the variable is statically
   2264      initialized, or a use of the variable in the defining TU will be
   2265      executed before any uses in another TU), they can avoid this
   2266      overhead with the `-fno-extern-tls-init' option.
   2267 
   2268      On targets that support symbol aliases, the default is
   2269      `-fextern-tls-init'.  On targets that do not support symbol
   2270      aliases, the default is `-fno-extern-tls-init'.
   2271 
   2272 `-ffor-scope'
   2273 `-fno-for-scope'
   2274      If `-ffor-scope' is specified, the scope of variables declared in
   2275      a for-init-statement is limited to the `for' loop itself, as
   2276      specified by the C++ standard.  If `-fno-for-scope' is specified,
   2277      the scope of variables declared in a for-init-statement extends to
   2278      the end of the enclosing scope, as was the case in old versions of
   2279      G++, and other (traditional) implementations of C++.
   2280 
   2281      If neither flag is given, the default is to follow the standard,
   2282      but to allow and give a warning for old-style code that would
   2283      otherwise be invalid, or have different behavior.
   2284 
   2285 `-fno-gnu-keywords'
   2286      Do not recognize `typeof' as a keyword, so that code can use this
   2287      word as an identifier.  You can use the keyword `__typeof__'
   2288      instead.  `-ansi' implies `-fno-gnu-keywords'.
   2289 
   2290 `-fno-implicit-templates'
   2291      Never emit code for non-inline templates that are instantiated
   2292      implicitly (i.e. by use); only emit code for explicit
   2293      instantiations.  *Note Template Instantiation::, for more
   2294      information.
   2295 
   2296 `-fno-implicit-inline-templates'
   2297      Don't emit code for implicit instantiations of inline templates,
   2298      either.  The default is to handle inlines differently so that
   2299      compiles with and without optimization need the same set of
   2300      explicit instantiations.
   2301 
   2302 `-fno-implement-inlines'
   2303      To save space, do not emit out-of-line copies of inline functions
   2304      controlled by `#pragma implementation'.  This causes linker errors
   2305      if these functions are not inlined everywhere they are called.
   2306 
   2307 `-fms-extensions'
   2308      Disable Wpedantic warnings about constructs used in MFC, such as
   2309      implicit int and getting a pointer to member function via
   2310      non-standard syntax.
   2311 
   2312 `-fno-nonansi-builtins'
   2313      Disable built-in declarations of functions that are not mandated by
   2314      ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
   2315      `bzero', `conjf', and other related functions.
   2316 
   2317 `-fnothrow-opt'
   2318      Treat a `throw()' exception specification as if it were a
   2319      `noexcept' specification to reduce or eliminate the text size
   2320      overhead relative to a function with no exception specification.
   2321      If the function has local variables of types with non-trivial
   2322      destructors, the exception specification actually makes the
   2323      function smaller because the EH cleanups for those variables can be
   2324      optimized away.  The semantic effect is that an exception thrown
   2325      out of a function with such an exception specification results in
   2326      a call to `terminate' rather than `unexpected'.
   2327 
   2328 `-fno-operator-names'
   2329      Do not treat the operator name keywords `and', `bitand', `bitor',
   2330      `compl', `not', `or' and `xor' as synonyms as keywords.
   2331 
   2332 `-fno-optional-diags'
   2333      Disable diagnostics that the standard says a compiler does not
   2334      need to issue.  Currently, the only such diagnostic issued by G++
   2335      is the one for a name having multiple meanings within a class.
   2336 
   2337 `-fpermissive'
   2338      Downgrade some diagnostics about nonconformant code from errors to
   2339      warnings.  Thus, using `-fpermissive' allows some nonconforming
   2340      code to compile.
   2341 
   2342 `-fno-pretty-templates'
   2343      When an error message refers to a specialization of a function
   2344      template, the compiler normally prints the signature of the
   2345      template followed by the template arguments and any typedefs or
   2346      typenames in the signature (e.g. `void f(T) [with T = int]' rather
   2347      than `void f(int)') so that it's clear which template is involved.
   2348      When an error message refers to a specialization of a class
   2349      template, the compiler omits any template arguments that match the
   2350      default template arguments for that template.  If either of these
   2351      behaviors make it harder to understand the error message rather
   2352      than easier, you can use `-fno-pretty-templates' to disable them.
   2353 
   2354 `-frepo'
   2355      Enable automatic template instantiation at link time.  This option
   2356      also implies `-fno-implicit-templates'.  *Note Template
   2357      Instantiation::, for more information.
   2358 
   2359 `-fno-rtti'
   2360      Disable generation of information about every class with virtual
   2361      functions for use by the C++ run-time type identification features
   2362      (`dynamic_cast' and `typeid').  If you don't use those parts of
   2363      the language, you can save some space by using this flag.  Note
   2364      that exception handling uses the same information, but G++
   2365      generates it as needed. The `dynamic_cast' operator can still be
   2366      used for casts that do not require run-time type information, i.e.
   2367      casts to `void *' or to unambiguous base classes.
   2368 
   2369 `-fstats'
   2370      Emit statistics about front-end processing at the end of the
   2371      compilation.  This information is generally only useful to the G++
   2372      development team.
   2373 
   2374 `-fstrict-enums'
   2375      Allow the compiler to optimize using the assumption that a value of
   2376      enumerated type can only be one of the values of the enumeration
   2377      (as defined in the C++ standard; basically, a value that can be
   2378      represented in the minimum number of bits needed to represent all
   2379      the enumerators).  This assumption may not be valid if the program
   2380      uses a cast to convert an arbitrary integer value to the
   2381      enumerated type.
   2382 
   2383 `-ftemplate-backtrace-limit=N'
   2384      Set the maximum number of template instantiation notes for a single
   2385      warning or error to N.  The default value is 10.
   2386 
   2387 `-ftemplate-depth=N'
   2388      Set the maximum instantiation depth for template classes to N.  A
   2389      limit on the template instantiation depth is needed to detect
   2390      endless recursions during template class instantiation.  ANSI/ISO
   2391      C++ conforming programs must not rely on a maximum depth greater
   2392      than 17 (changed to 1024 in C++11).  The default value is 900, as
   2393      the compiler can run out of stack space before hitting 1024 in
   2394      some situations.
   2395 
   2396 `-fno-threadsafe-statics'
   2397      Do not emit the extra code to use the routines specified in the C++
   2398      ABI for thread-safe initialization of local statics.  You can use
   2399      this option to reduce code size slightly in code that doesn't need
   2400      to be thread-safe.
   2401 
   2402 `-fuse-cxa-atexit'
   2403      Register destructors for objects with static storage duration with
   2404      the `__cxa_atexit' function rather than the `atexit' function.
   2405      This option is required for fully standards-compliant handling of
   2406      static destructors, but only works if your C library supports
   2407      `__cxa_atexit'.
   2408 
   2409 `-fno-use-cxa-get-exception-ptr'
   2410      Don't use the `__cxa_get_exception_ptr' runtime routine.  This
   2411      causes `std::uncaught_exception' to be incorrect, but is necessary
   2412      if the runtime routine is not available.
   2413 
   2414 `-fvisibility-inlines-hidden'
   2415      This switch declares that the user does not attempt to compare
   2416      pointers to inline functions or methods where the addresses of the
   2417      two functions are taken in different shared objects.
   2418 
   2419      The effect of this is that GCC may, effectively, mark inline
   2420      methods with `__attribute__ ((visibility ("hidden")))' so that
   2421      they do not appear in the export table of a DSO and do not require
   2422      a PLT indirection when used within the DSO.  Enabling this option
   2423      can have a dramatic effect on load and link times of a DSO as it
   2424      massively reduces the size of the dynamic export table when the
   2425      library makes heavy use of templates.
   2426 
   2427      The behavior of this switch is not quite the same as marking the
   2428      methods as hidden directly, because it does not affect static
   2429      variables local to the function or cause the compiler to deduce
   2430      that the function is defined in only one shared object.
   2431 
   2432      You may mark a method as having a visibility explicitly to negate
   2433      the effect of the switch for that method.  For example, if you do
   2434      want to compare pointers to a particular inline method, you might
   2435      mark it as having default visibility.  Marking the enclosing class
   2436      with explicit visibility has no effect.
   2437 
   2438      Explicitly instantiated inline methods are unaffected by this
   2439      option as their linkage might otherwise cross a shared library
   2440      boundary.  *Note Template Instantiation::.
   2441 
   2442 `-fvisibility-ms-compat'
   2443      This flag attempts to use visibility settings to make GCC's C++
   2444      linkage model compatible with that of Microsoft Visual Studio.
   2445 
   2446      The flag makes these changes to GCC's linkage model:
   2447 
   2448        1. It sets the default visibility to `hidden', like
   2449           `-fvisibility=hidden'.
   2450 
   2451        2. Types, but not their members, are not hidden by default.
   2452 
   2453        3. The One Definition Rule is relaxed for types without explicit
   2454           visibility specifications that are defined in more than one
   2455           shared object: those declarations are permitted if they are
   2456           permitted when this option is not used.
   2457 
   2458      In new code it is better to use `-fvisibility=hidden' and export
   2459      those classes that are intended to be externally visible.
   2460      Unfortunately it is possible for code to rely, perhaps
   2461      accidentally, on the Visual Studio behavior.
   2462 
   2463      Among the consequences of these changes are that static data
   2464      members of the same type with the same name but defined in
   2465      different shared objects are different, so changing one does not
   2466      change the other; and that pointers to function members defined in
   2467      different shared objects may not compare equal.  When this flag is
   2468      given, it is a violation of the ODR to define types with the same
   2469      name differently.
   2470 
   2471 `-fno-weak'
   2472      Do not use weak symbol support, even if it is provided by the
   2473      linker.  By default, G++ uses weak symbols if they are available.
   2474      This option exists only for testing, and should not be used by
   2475      end-users; it results in inferior code and has no benefits.  This
   2476      option may be removed in a future release of G++.
   2477 
   2478 `-nostdinc++'
   2479      Do not search for header files in the standard directories
   2480      specific to C++, but do still search the other standard
   2481      directories.  (This option is used when building the C++ library.)
   2482 
   2483  In addition, these optimization, warning, and code generation options
   2484 have meanings only for C++ programs:
   2485 
   2486 `-fno-default-inline'
   2487      Do not assume `inline' for functions defined inside a class scope.
   2488      *Note Options That Control Optimization: Optimize Options.  Note
   2489      that these functions have linkage like inline functions; they just
   2490      aren't inlined by default.
   2491 
   2492 `-Wabi (C, Objective-C, C++ and Objective-C++ only)'
   2493      Warn when G++ generates code that is probably not compatible with
   2494      the vendor-neutral C++ ABI.  Although an effort has been made to
   2495      warn about all such cases, there are probably some cases that are
   2496      not warned about, even though G++ is generating incompatible code.
   2497      There may also be cases where warnings are emitted even though the
   2498      code that is generated is compatible.
   2499 
   2500      You should rewrite your code to avoid these warnings if you are
   2501      concerned about the fact that code generated by G++ may not be
   2502      binary compatible with code generated by other compilers.
   2503 
   2504      The known incompatibilities in `-fabi-version=2' (the default)
   2505      include:
   2506 
   2507         * A template with a non-type template parameter of reference
   2508           type is mangled incorrectly:
   2509                extern int N;
   2510                template <int &> struct S {};
   2511                void n (S<N>) {2}
   2512 
   2513           This is fixed in `-fabi-version=3'.
   2514 
   2515         * SIMD vector types declared using `__attribute
   2516           ((vector_size))' are mangled in a non-standard way that does
   2517           not allow for overloading of functions taking vectors of
   2518           different sizes.
   2519 
   2520           The mangling is changed in `-fabi-version=4'.
   2521 
   2522      The known incompatibilities in `-fabi-version=1' include:
   2523 
   2524         * Incorrect handling of tail-padding for bit-fields.  G++ may
   2525           attempt to pack data into the same byte as a base class.  For
   2526           example:
   2527 
   2528                struct A { virtual void f(); int f1 : 1; };
   2529                struct B : public A { int f2 : 1; };
   2530 
   2531           In this case, G++ places `B::f2' into the same byte as
   2532           `A::f1'; other compilers do not.  You can avoid this problem
   2533           by explicitly padding `A' so that its size is a multiple of
   2534           the byte size on your platform; that causes G++ and other
   2535           compilers to lay out `B' identically.
   2536 
   2537         * Incorrect handling of tail-padding for virtual bases.  G++
   2538           does not use tail padding when laying out virtual bases.  For
   2539           example:
   2540 
   2541                struct A { virtual void f(); char c1; };
   2542                struct B { B(); char c2; };
   2543                struct C : public A, public virtual B {};
   2544 
   2545           In this case, G++ does not place `B' into the tail-padding for
   2546           `A'; other compilers do.  You can avoid this problem by
   2547           explicitly padding `A' so that its size is a multiple of its
   2548           alignment (ignoring virtual base classes); that causes G++
   2549           and other compilers to lay out `C' identically.
   2550 
   2551         * Incorrect handling of bit-fields with declared widths greater
   2552           than that of their underlying types, when the bit-fields
   2553           appear in a union.  For example:
   2554 
   2555                union U { int i : 4096; };
   2556 
   2557           Assuming that an `int' does not have 4096 bits, G++ makes the
   2558           union too small by the number of bits in an `int'.
   2559 
   2560         * Empty classes can be placed at incorrect offsets.  For
   2561           example:
   2562 
   2563                struct A {};
   2564 
   2565                struct B {
   2566                  A a;
   2567                  virtual void f ();
   2568                };
   2569 
   2570                struct C : public B, public A {};
   2571 
   2572           G++ places the `A' base class of `C' at a nonzero offset; it
   2573           should be placed at offset zero.  G++ mistakenly believes
   2574           that the `A' data member of `B' is already at offset zero.
   2575 
   2576         * Names of template functions whose types involve `typename' or
   2577           template template parameters can be mangled incorrectly.
   2578 
   2579                template <typename Q>
   2580                void f(typename Q::X) {}
   2581 
   2582                template <template <typename> class Q>
   2583                void f(typename Q<int>::X) {}
   2584 
   2585           Instantiations of these templates may be mangled incorrectly.
   2586 
   2587 
   2588      It also warns about psABI-related changes.  The known psABI
   2589      changes at this point include:
   2590 
   2591         * For SysV/x86-64, unions with `long double' members are passed
   2592           in memory as specified in psABI.  For example:
   2593 
   2594                union U {
   2595                  long double ld;
   2596                  int i;
   2597                };
   2598 
   2599           `union U' is always passed in memory.
   2600 
   2601 
   2602 `-Wctor-dtor-privacy (C++ and Objective-C++ only)'
   2603      Warn when a class seems unusable because all the constructors or
   2604      destructors in that class are private, and it has neither friends
   2605      nor public static member functions.  Also warn if there are no
   2606      non-private methods, and there's at least one private member
   2607      function that isn't a constructor or destructor.
   2608 
   2609 `-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
   2610      Warn when `delete' is used to destroy an instance of a class that
   2611      has virtual functions and non-virtual destructor. It is unsafe to
   2612      delete an instance of a derived class through a pointer to a base
   2613      class if the base class does not have a virtual destructor.  This
   2614      warning is enabled by `-Wall'.
   2615 
   2616 `-Wliteral-suffix (C++ and Objective-C++ only)'
   2617      Warn when a string or character literal is followed by a ud-suffix
   2618      which does not begin with an underscore.  As a conforming
   2619      extension, GCC treats such suffixes as separate preprocessing
   2620      tokens in order to maintain backwards compatibility with code that
   2621      uses formatting macros from `<inttypes.h>'.  For example:
   2622 
   2623           #define __STDC_FORMAT_MACROS
   2624           #include <inttypes.h>
   2625           #include <stdio.h>
   2626 
   2627           int main() {
   2628             int64_t i64 = 123;
   2629             printf("My int64: %"PRId64"\n", i64);
   2630           }
   2631 
   2632      In this case, `PRId64' is treated as a separate preprocessing
   2633      token.
   2634 
   2635      This warning is enabled by default.
   2636 
   2637 `-Wnarrowing (C++ and Objective-C++ only)'
   2638      Warn when a narrowing conversion prohibited by C++11 occurs within
   2639      `{ }', e.g.
   2640 
   2641           int i = { 2.2 }; // error: narrowing from double to int
   2642 
   2643      This flag is included in `-Wall' and `-Wc++11-compat'.
   2644 
   2645      With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic
   2646      required by the standard.  Note that this does not affect the
   2647      meaning of well-formed code; narrowing conversions are still
   2648      considered ill-formed in SFINAE context.
   2649 
   2650 `-Wnoexcept (C++ and Objective-C++ only)'
   2651      Warn when a noexcept-expression evaluates to false because of a
   2652      call to a function that does not have a non-throwing exception
   2653      specification (i.e. `throw()' or `noexcept') but is known by the
   2654      compiler to never throw an exception.
   2655 
   2656 `-Wnon-virtual-dtor (C++ and Objective-C++ only)'
   2657      Warn when a class has virtual functions and an accessible
   2658      non-virtual destructor, in which case it is possible but unsafe to
   2659      delete an instance of a derived class through a pointer to the
   2660      base class.  This warning is also enabled if `-Weffc++' is
   2661      specified.
   2662 
   2663 `-Wreorder (C++ and Objective-C++ only)'
   2664      Warn when the order of member initializers given in the code does
   2665      not match the order in which they must be executed.  For instance:
   2666 
   2667           struct A {
   2668             int i;
   2669             int j;
   2670             A(): j (0), i (1) { }
   2671           };
   2672 
   2673      The compiler rearranges the member initializers for `i' and `j' to
   2674      match the declaration order of the members, emitting a warning to
   2675      that effect.  This warning is enabled by `-Wall'.
   2676 
   2677 `-fext-numeric-literals (C++ and Objective-C++ only)'
   2678      Accept imaginary, fixed-point, or machine-defined literal number
   2679      suffixes as GNU extensions.  When this option is turned off these
   2680      suffixes are treated as C++11 user-defined literal numeric
   2681      suffixes.  This is on by default for all pre-C++11 dialects and
   2682      all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11',
   2683      `-std=gnu++1y'.  This option is off by default for ISO C++11
   2684      onwards (`-std=c++11', ...).
   2685 
   2686  The following `-W...' options are not affected by `-Wall'.
   2687 
   2688 `-Weffc++ (C++ and Objective-C++ only)'
   2689      Warn about violations of the following style guidelines from Scott
   2690      Meyers' `Effective C++, Second Edition' book:
   2691 
   2692         * Item 11:  Define a copy constructor and an assignment
   2693           operator for classes with dynamically-allocated memory.
   2694 
   2695         * Item 12:  Prefer initialization to assignment in constructors.
   2696 
   2697         * Item 14:  Make destructors virtual in base classes.
   2698 
   2699         * Item 15:  Have `operator=' return a reference to `*this'.
   2700 
   2701         * Item 23:  Don't try to return a reference when you must
   2702           return an object.
   2703 
   2704 
   2705      Also warn about violations of the following style guidelines from
   2706      Scott Meyers' `More Effective C++' book:
   2707 
   2708         * Item 6:  Distinguish between prefix and postfix forms of
   2709           increment and decrement operators.
   2710 
   2711         * Item 7:  Never overload `&&', `||', or `,'.
   2712 
   2713 
   2714      When selecting this option, be aware that the standard library
   2715      headers do not obey all of these guidelines; use `grep -v' to
   2716      filter out those warnings.
   2717 
   2718 `-Wstrict-null-sentinel (C++ and Objective-C++ only)'
   2719      Warn about the use of an uncasted `NULL' as sentinel.  When
   2720      compiling only with GCC this is a valid sentinel, as `NULL' is
   2721      defined to `__null'.  Although it is a null pointer constant
   2722      rather than a null pointer, it is guaranteed to be of the same
   2723      size as a pointer.  But this use is not portable across different
   2724      compilers.
   2725 
   2726 `-Wno-non-template-friend (C++ and Objective-C++ only)'
   2727      Disable warnings when non-templatized friend functions are declared
   2728      within a template.  Since the advent of explicit template
   2729      specification support in G++, if the name of the friend is an
   2730      unqualified-id (i.e., `friend foo(int)'), the C++ language
   2731      specification demands that the friend declare or define an
   2732      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
   2733      implemented explicit specification, unqualified-ids could be
   2734      interpreted as a particular specialization of a templatized
   2735      function.  Because this non-conforming behavior is no longer the
   2736      default behavior for G++, `-Wnon-template-friend' allows the
   2737      compiler to check existing code for potential trouble spots and is
   2738      on by default.  This new compiler behavior can be turned off with
   2739      `-Wno-non-template-friend', which keeps the conformant compiler
   2740      code but disables the helpful warning.
   2741 
   2742 `-Wold-style-cast (C++ and Objective-C++ only)'
   2743      Warn if an old-style (C-style) cast to a non-void type is used
   2744      within a C++ program.  The new-style casts (`dynamic_cast',
   2745      `static_cast', `reinterpret_cast', and `const_cast') are less
   2746      vulnerable to unintended effects and much easier to search for.
   2747 
   2748 `-Woverloaded-virtual (C++ and Objective-C++ only)'
   2749      Warn when a function declaration hides virtual functions from a
   2750      base class.  For example, in:
   2751 
   2752           struct A {
   2753             virtual void f();
   2754           };
   2755 
   2756           struct B: public A {
   2757             void f(int);
   2758           };
   2759 
   2760      the `A' class version of `f' is hidden in `B', and code like:
   2761 
   2762           B* b;
   2763           b->f();
   2764 
   2765      fails to compile.
   2766 
   2767 `-Wno-pmf-conversions (C++ and Objective-C++ only)'
   2768      Disable the diagnostic for converting a bound pointer to member
   2769      function to a plain pointer.
   2770 
   2771 `-Wsign-promo (C++ and Objective-C++ only)'
   2772      Warn when overload resolution chooses a promotion from unsigned or
   2773      enumerated type to a signed type, over a conversion to an unsigned
   2774      type of the same size.  Previous versions of G++ tried to preserve
   2775      unsignedness, but the standard mandates the current behavior.
   2776 
   2777 
   2778 File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
   2779 
   2780 3.6 Options Controlling Objective-C and Objective-C++ Dialects
   2781 ==============================================================
   2782 
   2783 (NOTE: This manual does not describe the Objective-C and Objective-C++
   2784 languages themselves.  *Note Language Standards Supported by GCC:
   2785 Standards, for references.)
   2786 
   2787  This section describes the command-line options that are only
   2788 meaningful for Objective-C and Objective-C++ programs.  You can also
   2789 use most of the language-independent GNU compiler options.  For
   2790 example, you might compile a file `some_class.m' like this:
   2791 
   2792      gcc -g -fgnu-runtime -O -c some_class.m
   2793 
   2794 In this example, `-fgnu-runtime' is an option meant only for
   2795 Objective-C and Objective-C++ programs; you can use the other options
   2796 with any language supported by GCC.
   2797 
   2798  Note that since Objective-C is an extension of the C language,
   2799 Objective-C compilations may also use options specific to the C
   2800 front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
   2801 compilations may use C++-specific options (e.g., `-Wabi').
   2802 
   2803  Here is a list of options that are _only_ for compiling Objective-C
   2804 and Objective-C++ programs:
   2805 
   2806 `-fconstant-string-class=CLASS-NAME'
   2807      Use CLASS-NAME as the name of the class to instantiate for each
   2808      literal string specified with the syntax `@"..."'.  The default
   2809      class name is `NXConstantString' if the GNU runtime is being used,
   2810      and `NSConstantString' if the NeXT runtime is being used (see
   2811      below).  The `-fconstant-cfstrings' option, if also present,
   2812      overrides the `-fconstant-string-class' setting and cause `@"..."'
   2813      literals to be laid out as constant CoreFoundation strings.
   2814 
   2815 `-fgnu-runtime'
   2816      Generate object code compatible with the standard GNU Objective-C
   2817      runtime.  This is the default for most types of systems.
   2818 
   2819 `-fnext-runtime'
   2820      Generate output compatible with the NeXT runtime.  This is the
   2821      default for NeXT-based systems, including Darwin and Mac OS X.
   2822      The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
   2823      option is used.
   2824 
   2825 `-fno-nil-receivers'
   2826      Assume that all Objective-C message dispatches (`[receiver
   2827      message:arg]') in this translation unit ensure that the receiver is
   2828      not `nil'.  This allows for more efficient entry points in the
   2829      runtime to be used.  This option is only available in conjunction
   2830      with the NeXT runtime and ABI version 0 or 1.
   2831 
   2832 `-fobjc-abi-version=N'
   2833      Use version N of the Objective-C ABI for the selected runtime.
   2834      This option is currently supported only for the NeXT runtime.  In
   2835      that case, Version 0 is the traditional (32-bit) ABI without
   2836      support for properties and other Objective-C 2.0 additions.
   2837      Version 1 is the traditional (32-bit) ABI with support for
   2838      properties and other Objective-C 2.0 additions.  Version 2 is the
   2839      modern (64-bit) ABI.  If nothing is specified, the default is
   2840      Version 0 on 32-bit target machines, and Version 2 on 64-bit
   2841      target machines.
   2842 
   2843 `-fobjc-call-cxx-cdtors'
   2844      For each Objective-C class, check if any of its instance variables
   2845      is a C++ object with a non-trivial default constructor.  If so,
   2846      synthesize a special `- (id) .cxx_construct' instance method which
   2847      runs non-trivial default constructors on any such instance
   2848      variables, in order, and then return `self'.  Similarly, check if
   2849      any instance variable is a C++ object with a non-trivial
   2850      destructor, and if so, synthesize a special `- (void)
   2851      .cxx_destruct' method which runs all such default destructors, in
   2852      reverse order.
   2853 
   2854      The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
   2855      thusly generated only operate on instance variables declared in
   2856      the current Objective-C class, and not those inherited from
   2857      superclasses.  It is the responsibility of the Objective-C runtime
   2858      to invoke all such methods in an object's inheritance hierarchy.
   2859      The `- (id) .cxx_construct' methods are invoked by the runtime
   2860      immediately after a new object instance is allocated; the `-
   2861      (void) .cxx_destruct' methods are invoked immediately before the
   2862      runtime deallocates an object instance.
   2863 
   2864      As of this writing, only the NeXT runtime on Mac OS X 10.4 and
   2865      later has support for invoking the `- (id) .cxx_construct' and `-
   2866      (void) .cxx_destruct' methods.
   2867 
   2868 `-fobjc-direct-dispatch'
   2869      Allow fast jumps to the message dispatcher.  On Darwin this is
   2870      accomplished via the comm page.
   2871 
   2872 `-fobjc-exceptions'
   2873      Enable syntactic support for structured exception handling in
   2874      Objective-C, similar to what is offered by C++ and Java.  This
   2875      option is required to use the Objective-C keywords `@try',
   2876      `@throw', `@catch', `@finally' and `@synchronized'.  This option
   2877      is available with both the GNU runtime and the NeXT runtime (but
   2878      not available in conjunction with the NeXT runtime on Mac OS X
   2879      10.2 and earlier).
   2880 
   2881 `-fobjc-gc'
   2882      Enable garbage collection (GC) in Objective-C and Objective-C++
   2883      programs.  This option is only available with the NeXT runtime; the
   2884      GNU runtime has a different garbage collection implementation that
   2885      does not require special compiler flags.
   2886 
   2887 `-fobjc-nilcheck'
   2888      For the NeXT runtime with version 2 of the ABI, check for a nil
   2889      receiver in method invocations before doing the actual method call.
   2890      This is the default and can be disabled using
   2891      `-fno-objc-nilcheck'.  Class methods and super calls are never
   2892      checked for nil in this way no matter what this flag is set to.
   2893      Currently this flag does nothing when the GNU runtime, or an older
   2894      version of the NeXT runtime ABI, is used.
   2895 
   2896 `-fobjc-std=objc1'
   2897      Conform to the language syntax of Objective-C 1.0, the language
   2898      recognized by GCC 4.0.  This only affects the Objective-C
   2899      additions to the C/C++ language; it does not affect conformance to
   2900      C/C++ standards, which is controlled by the separate C/C++ dialect
   2901      option flags.  When this option is used with the Objective-C or
   2902      Objective-C++ compiler, any Objective-C syntax that is not
   2903      recognized by GCC 4.0 is rejected.  This is useful if you need to
   2904      make sure that your Objective-C code can be compiled with older
   2905      versions of GCC.
   2906 
   2907 `-freplace-objc-classes'
   2908      Emit a special marker instructing `ld(1)' not to statically link in
   2909      the resulting object file, and allow `dyld(1)' to load it in at
   2910      run time instead.  This is used in conjunction with the
   2911      Fix-and-Continue debugging mode, where the object file in question
   2912      may be recompiled and dynamically reloaded in the course of
   2913      program execution, without the need to restart the program itself.
   2914      Currently, Fix-and-Continue functionality is only available in
   2915      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
   2916 
   2917 `-fzero-link'
   2918      When compiling for the NeXT runtime, the compiler ordinarily
   2919      replaces calls to `objc_getClass("...")' (when the name of the
   2920      class is known at compile time) with static class references that
   2921      get initialized at load time, which improves run-time performance.
   2922      Specifying the `-fzero-link' flag suppresses this behavior and
   2923      causes calls to `objc_getClass("...")' to be retained.  This is
   2924      useful in Zero-Link debugging mode, since it allows for individual
   2925      class implementations to be modified during program execution.
   2926      The GNU runtime currently always retains calls to
   2927      `objc_get_class("...")' regardless of command-line options.
   2928 
   2929 `-gen-decls'
   2930      Dump interface declarations for all classes seen in the source
   2931      file to a file named `SOURCENAME.decl'.
   2932 
   2933 `-Wassign-intercept (Objective-C and Objective-C++ only)'
   2934      Warn whenever an Objective-C assignment is being intercepted by the
   2935      garbage collector.
   2936 
   2937 `-Wno-protocol (Objective-C and Objective-C++ only)'
   2938      If a class is declared to implement a protocol, a warning is
   2939      issued for every method in the protocol that is not implemented by
   2940      the class.  The default behavior is to issue a warning for every
   2941      method not explicitly implemented in the class, even if a method
   2942      implementation is inherited from the superclass.  If you use the
   2943      `-Wno-protocol' option, then methods inherited from the superclass
   2944      are considered to be implemented, and no warning is issued for
   2945      them.
   2946 
   2947 `-Wselector (Objective-C and Objective-C++ only)'
   2948      Warn if multiple methods of different types for the same selector
   2949      are found during compilation.  The check is performed on the list
   2950      of methods in the final stage of compilation.  Additionally, a
   2951      check is performed for each selector appearing in a
   2952      `@selector(...)'  expression, and a corresponding method for that
   2953      selector has been found during compilation.  Because these checks
   2954      scan the method table only at the end of compilation, these
   2955      warnings are not produced if the final stage of compilation is not
   2956      reached, for example because an error is found during compilation,
   2957      or because the `-fsyntax-only' option is being used.
   2958 
   2959 `-Wstrict-selector-match (Objective-C and Objective-C++ only)'
   2960      Warn if multiple methods with differing argument and/or return
   2961      types are found for a given selector when attempting to send a
   2962      message using this selector to a receiver of type `id' or `Class'.
   2963      When this flag is off (which is the default behavior), the
   2964      compiler omits such warnings if any differences found are confined
   2965      to types that share the same size and alignment.
   2966 
   2967 `-Wundeclared-selector (Objective-C and Objective-C++ only)'
   2968      Warn if a `@selector(...)' expression referring to an undeclared
   2969      selector is found.  A selector is considered undeclared if no
   2970      method with that name has been declared before the
   2971      `@selector(...)' expression, either explicitly in an `@interface'
   2972      or `@protocol' declaration, or implicitly in an `@implementation'
   2973      section.  This option always performs its checks as soon as a
   2974      `@selector(...)' expression is found, while `-Wselector' only
   2975      performs its checks in the final stage of compilation.  This also
   2976      enforces the coding style convention that methods and selectors
   2977      must be declared before being used.
   2978 
   2979 `-print-objc-runtime-info'
   2980      Generate C header describing the largest structure that is passed
   2981      by value, if any.
   2982 
   2983 
   2984 
   2985 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
   2986 
   2987 3.7 Options to Control Diagnostic Messages Formatting
   2988 =====================================================
   2989 
   2990 Traditionally, diagnostic messages have been formatted irrespective of
   2991 the output device's aspect (e.g. its width, ...).  You can use the
   2992 options described below to control the formatting algorithm for
   2993 diagnostic messages, e.g. how many characters per line, how often
   2994 source location information should be reported.  Note that some
   2995 language front ends may not honor these options.
   2996 
   2997 `-fmessage-length=N'
   2998      Try to format error messages so that they fit on lines of about N
   2999      characters.  The default is 72 characters for `g++' and 0 for the
   3000      rest of the front ends supported by GCC.  If N is zero, then no
   3001      line-wrapping is done; each error message appears on a single line.
   3002 
   3003 `-fdiagnostics-show-location=once'
   3004      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   3005      messages reporter to emit source location information _once_; that
   3006      is, in case the message is too long to fit on a single physical
   3007      line and has to be wrapped, the source location won't be emitted
   3008      (as prefix) again, over and over, in subsequent continuation
   3009      lines.  This is the default behavior.
   3010 
   3011 `-fdiagnostics-show-location=every-line'
   3012      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   3013      messages reporter to emit the same source location information (as
   3014      prefix) for physical lines that result from the process of breaking
   3015      a message which is too long to fit on a single line.
   3016 
   3017 `-fno-diagnostics-show-option'
   3018      By default, each diagnostic emitted includes text indicating the
   3019      command-line option that directly controls the diagnostic (if such
   3020      an option is known to the diagnostic machinery).  Specifying the
   3021      `-fno-diagnostics-show-option' flag suppresses that behavior.
   3022 
   3023 `-fno-diagnostics-show-caret'
   3024      By default, each diagnostic emitted includes the original source
   3025      line and a caret '^' indicating the column.  This option
   3026      suppresses this information.
   3027 
   3028 
   3029 
   3030 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
   3031 
   3032 3.8 Options to Request or Suppress Warnings
   3033 ===========================================
   3034 
   3035 Warnings are diagnostic messages that report constructions that are not
   3036 inherently erroneous but that are risky or suggest there may have been
   3037 an error.
   3038 
   3039  The following language-independent options do not enable specific
   3040 warnings but control the kinds of diagnostics produced by GCC.
   3041 
   3042 `-fsyntax-only'
   3043      Check the code for syntax errors, but don't do anything beyond
   3044      that.
   3045 
   3046 `-fmax-errors=N'
   3047      Limits the maximum number of error messages to N, at which point
   3048      GCC bails out rather than attempting to continue processing the
   3049      source code.  If N is 0 (the default), there is no limit on the
   3050      number of error messages produced.  If `-Wfatal-errors' is also
   3051      specified, then `-Wfatal-errors' takes precedence over this option.
   3052 
   3053 `-w'
   3054      Inhibit all warning messages.
   3055 
   3056 `-Werror'
   3057      Make all warnings into errors.
   3058 
   3059 `-Werror='
   3060      Make the specified warning into an error.  The specifier for a
   3061      warning is appended; for example `-Werror=switch' turns the
   3062      warnings controlled by `-Wswitch' into errors.  This switch takes a
   3063      negative form, to be used to negate `-Werror' for specific
   3064      warnings; for example `-Wno-error=switch' makes `-Wswitch'
   3065      warnings not be errors, even when `-Werror' is in effect.
   3066 
   3067      The warning message for each controllable warning includes the
   3068      option that controls the warning.  That option can then be used
   3069      with `-Werror=' and `-Wno-error=' as described above.  (Printing
   3070      of the option in the warning message can be disabled using the
   3071      `-fno-diagnostics-show-option' flag.)
   3072 
   3073      Note that specifying `-Werror='FOO automatically implies `-W'FOO.
   3074      However, `-Wno-error='FOO does not imply anything.
   3075 
   3076 `-Wfatal-errors'
   3077      This option causes the compiler to abort compilation on the first
   3078      error occurred rather than trying to keep going and printing
   3079      further error messages.
   3080 
   3081 
   3082  You can request many specific warnings with options beginning with
   3083 `-W', for example `-Wimplicit' to request warnings on implicit
   3084 declarations.  Each of these specific warning options also has a
   3085 negative form beginning `-Wno-' to turn off warnings; for example,
   3086 `-Wno-implicit'.  This manual lists only one of the two forms,
   3087 whichever is not the default.  For further language-specific options
   3088 also refer to *note C++ Dialect Options:: and *note Objective-C and
   3089 Objective-C++ Dialect Options::.
   3090 
   3091  When an unrecognized warning option is requested (e.g.,
   3092 `-Wunknown-warning'), GCC emits a diagnostic stating that the option is
   3093 not recognized.  However, if the `-Wno-' form is used, the behavior is
   3094 slightly different: no diagnostic is produced for
   3095 `-Wno-unknown-warning' unless other diagnostics are being produced.
   3096 This allows the use of new `-Wno-' options with old compilers, but if
   3097 something goes wrong, the compiler warns that an unrecognized option is
   3098 present.
   3099 
   3100 `-Wpedantic'
   3101 `-pedantic'
   3102      Issue all the warnings demanded by strict ISO C and ISO C++;
   3103      reject all programs that use forbidden extensions, and some other
   3104      programs that do not follow ISO C and ISO C++.  For ISO C, follows
   3105      the version of the ISO C standard specified by any `-std' option
   3106      used.
   3107 
   3108      Valid ISO C and ISO C++ programs should compile properly with or
   3109      without this option (though a rare few require `-ansi' or a `-std'
   3110      option specifying the required version of ISO C).  However,
   3111      without this option, certain GNU extensions and traditional C and
   3112      C++ features are supported as well.  With this option, they are
   3113      rejected.
   3114 
   3115      `-Wpedantic' does not cause warning messages for use of the
   3116      alternate keywords whose names begin and end with `__'.  Pedantic
   3117      warnings are also disabled in the expression that follows
   3118      `__extension__'.  However, only system header files should use
   3119      these escape routes; application programs should avoid them.
   3120      *Note Alternate Keywords::.
   3121 
   3122      Some users try to use `-Wpedantic' to check programs for strict ISO
   3123      C conformance.  They soon find that it does not do quite what they
   3124      want: it finds some non-ISO practices, but not all--only those for
   3125      which ISO C _requires_ a diagnostic, and some others for which
   3126      diagnostics have been added.
   3127 
   3128      A feature to report any failure to conform to ISO C might be
   3129      useful in some instances, but would require considerable
   3130      additional work and would be quite different from `-Wpedantic'.
   3131      We don't have plans to support such a feature in the near future.
   3132 
   3133      Where the standard specified with `-std' represents a GNU extended
   3134      dialect of C, such as `gnu90' or `gnu99', there is a corresponding
   3135      "base standard", the version of ISO C on which the GNU extended
   3136      dialect is based.  Warnings from `-Wpedantic' are given where they
   3137      are required by the base standard.  (It does not make sense for
   3138      such warnings to be given only for features not in the specified
   3139      GNU C dialect, since by definition the GNU dialects of C include
   3140      all features the compiler supports with the given option, and
   3141      there would be nothing to warn about.)
   3142 
   3143 `-pedantic-errors'
   3144      Like `-Wpedantic', except that errors are produced rather than
   3145      warnings.
   3146 
   3147 `-Wall'
   3148      This enables all the warnings about constructions that some users
   3149      consider questionable, and that are easy to avoid (or modify to
   3150      prevent the warning), even in conjunction with macros.  This also
   3151      enables some language-specific warnings described in *note C++
   3152      Dialect Options:: and *note Objective-C and Objective-C++ Dialect
   3153      Options::.
   3154 
   3155      `-Wall' turns on the following warning flags:
   3156 
   3157           -Waddress
   3158           -Warray-bounds (only with `-O2')
   3159           -Wc++11-compat
   3160           -Wchar-subscripts
   3161           -Wenum-compare (in C/ObjC; this is on by default in C++)
   3162           -Wimplicit-int (C and Objective-C only)
   3163           -Wimplicit-function-declaration (C and Objective-C only)
   3164           -Wcomment
   3165           -Wformat
   3166           -Wmain (only for C/ObjC and unless `-ffreestanding')
   3167           -Wmaybe-uninitialized
   3168           -Wmissing-braces (only for C/ObjC)
   3169           -Wnonnull
   3170           -Wparentheses
   3171           -Wpointer-sign
   3172           -Wreorder
   3173           -Wreturn-type
   3174           -Wsequence-point
   3175           -Wsign-compare (only in C++)
   3176           -Wstrict-aliasing
   3177           -Wstrict-overflow=1
   3178           -Wswitch
   3179           -Wtrigraphs
   3180           -Wuninitialized
   3181           -Wunknown-pragmas
   3182           -Wunused-function
   3183           -Wunused-label
   3184           -Wunused-value
   3185           -Wunused-variable
   3186           -Wvolatile-register-var
   3187 
   3188      Note that some warning flags are not implied by `-Wall'.  Some of
   3189      them warn about constructions that users generally do not consider
   3190      questionable, but which occasionally you might wish to check for;
   3191      others warn about constructions that are necessary or hard to
   3192      avoid in some cases, and there is no simple way to modify the code
   3193      to suppress the warning. Some of them are enabled by `-Wextra' but
   3194      many of them must be enabled individually.
   3195 
   3196 `-Wextra'
   3197      This enables some extra warning flags that are not enabled by
   3198      `-Wall'. (This option used to be called `-W'.  The older name is
   3199      still supported, but the newer name is more descriptive.)
   3200 
   3201           -Wclobbered
   3202           -Wempty-body
   3203           -Wignored-qualifiers
   3204           -Wmissing-field-initializers
   3205           -Wmissing-parameter-type (C only)
   3206           -Wold-style-declaration (C only)
   3207           -Woverride-init
   3208           -Wsign-compare
   3209           -Wtype-limits
   3210           -Wuninitialized
   3211           -Wunused-parameter (only with `-Wunused' or `-Wall')
   3212           -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
   3213 
   3214      The option `-Wextra' also prints warning messages for the
   3215      following cases:
   3216 
   3217         * A pointer is compared against integer zero with `<', `<=',
   3218           `>', or `>='.
   3219 
   3220         * (C++ only) An enumerator and a non-enumerator both appear in a
   3221           conditional expression.
   3222 
   3223         * (C++ only) Ambiguous virtual bases.
   3224 
   3225         * (C++ only) Subscripting an array that has been declared
   3226           `register'.
   3227 
   3228         * (C++ only) Taking the address of a variable that has been
   3229           declared `register'.
   3230 
   3231         * (C++ only) A base class is not initialized in a derived
   3232           class's copy constructor.
   3233 
   3234 
   3235 `-Wchar-subscripts'
   3236      Warn if an array subscript has type `char'.  This is a common cause
   3237      of error, as programmers often forget that this type is signed on
   3238      some machines.  This warning is enabled by `-Wall'.
   3239 
   3240 `-Wcomment'
   3241      Warn whenever a comment-start sequence `/*' appears in a `/*'
   3242      comment, or whenever a Backslash-Newline appears in a `//' comment.
   3243      This warning is enabled by `-Wall'.
   3244 
   3245 `-Wno-coverage-mismatch'
   3246      Warn if feedback profiles do not match when using the
   3247      `-fprofile-use' option.  If a source file is changed between
   3248      compiling with `-fprofile-gen' and with `-fprofile-use', the files
   3249      with the profile feedback can fail to match the source file and
   3250      GCC cannot use the profile feedback information.  By default, this
   3251      warning is enabled and is treated as an error.
   3252      `-Wno-coverage-mismatch' can be used to disable the warning or
   3253      `-Wno-error=coverage-mismatch' can be used to disable the error.
   3254      Disabling the error for this warning can result in poorly
   3255      optimized code and is useful only in the case of very minor
   3256      changes such as bug fixes to an existing code-base.  Completely
   3257      disabling the warning is not recommended.
   3258 
   3259 `-Wno-cpp'
   3260      (C, Objective-C, C++, Objective-C++ and Fortran only)
   3261 
   3262      Suppress warning messages emitted by `#warning' directives.
   3263 
   3264 `-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
   3265      Give a warning when a value of type `float' is implicitly promoted
   3266      to `double'.  CPUs with a 32-bit "single-precision" floating-point
   3267      unit implement `float' in hardware, but emulate `double' in
   3268      software.  On such a machine, doing computations using `double'
   3269      values is much more expensive because of the overhead required for
   3270      software emulation.
   3271 
   3272      It is easy to accidentally do computations with `double' because
   3273      floating-point literals are implicitly of type `double'.  For
   3274      example, in:
   3275           float area(float radius)
   3276           {
   3277              return 3.14159 * radius * radius;
   3278           }
   3279      the compiler performs the entire computation with `double' because
   3280      the floating-point literal is a `double'.
   3281 
   3282 `-Wformat'
   3283 `-Wformat=N'
   3284      Check calls to `printf' and `scanf', etc., to make sure that the
   3285      arguments supplied have types appropriate to the format string
   3286      specified, and that the conversions specified in the format string
   3287      make sense.  This includes standard functions, and others
   3288      specified by format attributes (*note Function Attributes::), in
   3289      the `printf', `scanf', `strftime' and `strfmon' (an X/Open
   3290      extension, not in the C standard) families (or other
   3291      target-specific families).  Which functions are checked without
   3292      format attributes having been specified depends on the standard
   3293      version selected, and such checks of functions without the
   3294      attribute specified are disabled by `-ffreestanding' or
   3295      `-fno-builtin'.
   3296 
   3297      The formats are checked against the format features supported by
   3298      GNU libc version 2.2.  These include all ISO C90 and C99 features,
   3299      as well as features from the Single Unix Specification and some
   3300      BSD and GNU extensions.  Other library implementations may not
   3301      support all these features; GCC does not support warning about
   3302      features that go beyond a particular library's limitations.
   3303      However, if `-Wpedantic' is used with `-Wformat', warnings are
   3304      given about format features not in the selected standard version
   3305      (but not for `strfmon' formats, since those are not in any version
   3306      of the C standard).  *Note Options Controlling C Dialect: C
   3307      Dialect Options.
   3308 
   3309     `-Wformat=1'
   3310     `-Wformat'
   3311           Option `-Wformat' is equivalent to `-Wformat=1', and
   3312           `-Wno-format' is equivalent to `-Wformat=0'.  Since
   3313           `-Wformat' also checks for null format arguments for several
   3314           functions, `-Wformat' also implies `-Wnonnull'.  Some aspects
   3315           of this level of format checking can be disabled by the
   3316           options: `-Wno-format-contains-nul',
   3317           `-Wno-format-extra-args', and `-Wno-format-zero-length'.
   3318           `-Wformat' is enabled by `-Wall'.
   3319 
   3320     `-Wno-format-contains-nul'
   3321           If `-Wformat' is specified, do not warn about format strings
   3322           that contain NUL bytes.
   3323 
   3324     `-Wno-format-extra-args'
   3325           If `-Wformat' is specified, do not warn about excess
   3326           arguments to a `printf' or `scanf' format function.  The C
   3327           standard specifies that such arguments are ignored.
   3328 
   3329           Where the unused arguments lie between used arguments that are
   3330           specified with `$' operand number specifications, normally
   3331           warnings are still given, since the implementation could not
   3332           know what type to pass to `va_arg' to skip the unused
   3333           arguments.  However, in the case of `scanf' formats, this
   3334           option suppresses the warning if the unused arguments are all
   3335           pointers, since the Single Unix Specification says that such
   3336           unused arguments are allowed.
   3337 
   3338     `-Wno-format-zero-length'
   3339           If `-Wformat' is specified, do not warn about zero-length
   3340           formats.  The C standard specifies that zero-length formats
   3341           are allowed.
   3342 
   3343     `-Wformat=2'
   3344           Enable `-Wformat' plus additional format checks.  Currently
   3345           equivalent to `-Wformat -Wformat-nonliteral -Wformat-security
   3346           -Wformat-y2k'.
   3347 
   3348     `-Wformat-nonliteral'
   3349           If `-Wformat' is specified, also warn if the format string is
   3350           not a string literal and so cannot be checked, unless the
   3351           format function takes its format arguments as a `va_list'.
   3352 
   3353     `-Wformat-security'
   3354           If `-Wformat' is specified, also warn about uses of format
   3355           functions that represent possible security problems.  At
   3356           present, this warns about calls to `printf' and `scanf'
   3357           functions where the format string is not a string literal and
   3358           there are no format arguments, as in `printf (foo);'.  This
   3359           may be a security hole if the format string came from
   3360           untrusted input and contains `%n'.  (This is currently a
   3361           subset of what `-Wformat-nonliteral' warns about, but in
   3362           future warnings may be added to `-Wformat-security' that are
   3363           not included in `-Wformat-nonliteral'.)
   3364 
   3365     `-Wformat-y2k'
   3366           If `-Wformat' is specified, also warn about `strftime'
   3367           formats that may yield only a two-digit year.
   3368 
   3369 `-Wnonnull'
   3370      Warn about passing a null pointer for arguments marked as
   3371      requiring a non-null value by the `nonnull' function attribute.
   3372 
   3373      `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
   3374      disabled with the `-Wno-nonnull' option.
   3375 
   3376 `-Winit-self (C, C++, Objective-C and Objective-C++ only)'
   3377      Warn about uninitialized variables that are initialized with
   3378      themselves.  Note this option can only be used with the
   3379      `-Wuninitialized' option.
   3380 
   3381      For example, GCC warns about `i' being uninitialized in the
   3382      following snippet only when `-Winit-self' has been specified:
   3383           int f()
   3384           {
   3385             int i = i;
   3386             return i;
   3387           }
   3388 
   3389      This warning is enabled by `-Wall' in C++.
   3390 
   3391 `-Wimplicit-int (C and Objective-C only)'
   3392      Warn when a declaration does not specify a type.  This warning is
   3393      enabled by `-Wall'.
   3394 
   3395 `-Wimplicit-function-declaration (C and Objective-C only)'
   3396      Give a warning whenever a function is used before being declared.
   3397      In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
   3398      by default and it is made into an error by `-pedantic-errors'.
   3399      This warning is also enabled by `-Wall'.
   3400 
   3401 `-Wimplicit (C and Objective-C only)'
   3402      Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
   3403      This warning is enabled by `-Wall'.
   3404 
   3405 `-Wignored-qualifiers (C and C++ only)'
   3406      Warn if the return type of a function has a type qualifier such as
   3407      `const'.  For ISO C such a type qualifier has no effect, since the
   3408      value returned by a function is not an lvalue.  For C++, the
   3409      warning is only emitted for scalar types or `void'.  ISO C
   3410      prohibits qualified `void' return types on function definitions,
   3411      so such return types always receive a warning even without this
   3412      option.
   3413 
   3414      This warning is also enabled by `-Wextra'.
   3415 
   3416 `-Wmain'
   3417      Warn if the type of `main' is suspicious.  `main' should be a
   3418      function with external linkage, returning int, taking either zero
   3419      arguments, two, or three arguments of appropriate types.  This
   3420      warning is enabled by default in C++ and is enabled by either
   3421      `-Wall' or `-Wpedantic'.
   3422 
   3423 `-Wmissing-braces'
   3424      Warn if an aggregate or union initializer is not fully bracketed.
   3425      In the following example, the initializer for `a' is not fully
   3426      bracketed, but that for `b' is fully bracketed.  This warning is
   3427      enabled by `-Wall' in C.
   3428 
   3429           int a[2][2] = { 0, 1, 2, 3 };
   3430           int b[2][2] = { { 0, 1 }, { 2, 3 } };
   3431 
   3432      This warning is enabled by `-Wall'.
   3433 
   3434 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
   3435      Warn if a user-supplied include directory does not exist.
   3436 
   3437 `-Wparentheses'
   3438      Warn if parentheses are omitted in certain contexts, such as when
   3439      there is an assignment in a context where a truth value is
   3440      expected, or when operators are nested whose precedence people
   3441      often get confused about.
   3442 
   3443      Also warn if a comparison like `x<=y<=z' appears; this is
   3444      equivalent to `(x<=y ? 1 : 0) <= z', which is a different
   3445      interpretation from that of ordinary mathematical notation.
   3446 
   3447      Also warn about constructions where there may be confusion to which
   3448      `if' statement an `else' branch belongs.  Here is an example of
   3449      such a case:
   3450 
   3451           {
   3452             if (a)
   3453               if (b)
   3454                 foo ();
   3455             else
   3456               bar ();
   3457           }
   3458 
   3459      In C/C++, every `else' branch belongs to the innermost possible
   3460      `if' statement, which in this example is `if (b)'.  This is often
   3461      not what the programmer expected, as illustrated in the above
   3462      example by indentation the programmer chose.  When there is the
   3463      potential for this confusion, GCC issues a warning when this flag
   3464      is specified.  To eliminate the warning, add explicit braces around
   3465      the innermost `if' statement so there is no way the `else' can
   3466      belong to the enclosing `if'.  The resulting code looks like this:
   3467 
   3468           {
   3469             if (a)
   3470               {
   3471                 if (b)
   3472                   foo ();
   3473                 else
   3474                   bar ();
   3475               }
   3476           }
   3477 
   3478      Also warn for dangerous uses of the GNU extension to `?:' with
   3479      omitted middle operand. When the condition in the `?': operator is
   3480      a boolean expression, the omitted value is always 1.  Often
   3481      programmers expect it to be a value computed inside the
   3482      conditional expression instead.
   3483 
   3484      This warning is enabled by `-Wall'.
   3485 
   3486 `-Wsequence-point'
   3487      Warn about code that may have undefined semantics because of
   3488      violations of sequence point rules in the C and C++ standards.
   3489 
   3490      The C and C++ standards define the order in which expressions in a
   3491      C/C++ program are evaluated in terms of "sequence points", which
   3492      represent a partial ordering between the execution of parts of the
   3493      program: those executed before the sequence point, and those
   3494      executed after it.  These occur after the evaluation of a full
   3495      expression (one which is not part of a larger expression), after
   3496      the evaluation of the first operand of a `&&', `||', `? :' or `,'
   3497      (comma) operator, before a function is called (but after the
   3498      evaluation of its arguments and the expression denoting the called
   3499      function), and in certain other places.  Other than as expressed
   3500      by the sequence point rules, the order of evaluation of
   3501      subexpressions of an expression is not specified.  All these rules
   3502      describe only a partial order rather than a total order, since,
   3503      for example, if two functions are called within one expression
   3504      with no sequence point between them, the order in which the
   3505      functions are called is not specified.  However, the standards
   3506      committee have ruled that function calls do not overlap.
   3507 
   3508      It is not specified when between sequence points modifications to
   3509      the values of objects take effect.  Programs whose behavior
   3510      depends on this have undefined behavior; the C and C++ standards
   3511      specify that "Between the previous and next sequence point an
   3512      object shall have its stored value modified at most once by the
   3513      evaluation of an expression.  Furthermore, the prior value shall
   3514      be read only to determine the value to be stored.".  If a program
   3515      breaks these rules, the results on any particular implementation
   3516      are entirely unpredictable.
   3517 
   3518      Examples of code with undefined behavior are `a = a++;', `a[n] =
   3519      b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
   3520      diagnosed by this option, and it may give an occasional false
   3521      positive result, but in general it has been found fairly effective
   3522      at detecting this sort of problem in programs.
   3523 
   3524      The standard is worded confusingly, therefore there is some debate
   3525      over the precise meaning of the sequence point rules in subtle
   3526      cases.  Links to discussions of the problem, including proposed
   3527      formal definitions, may be found on the GCC readings page, at
   3528      `http://gcc.gnu.org/readings.html'.
   3529 
   3530      This warning is enabled by `-Wall' for C and C++.
   3531 
   3532 `-Wno-return-local-addr'
   3533      Do not warn about returning a pointer (or in C++, a reference) to a
   3534      variable that goes out of scope after the function returns.
   3535 
   3536 `-Wreturn-type'
   3537      Warn whenever a function is defined with a return type that
   3538      defaults to `int'.  Also warn about any `return' statement with no
   3539      return value in a function whose return type is not `void'
   3540      (falling off the end of the function body is considered returning
   3541      without a value), and about a `return' statement with an
   3542      expression in a function whose return type is `void'.
   3543 
   3544      For C++, a function without return type always produces a
   3545      diagnostic message, even when `-Wno-return-type' is specified.
   3546      The only exceptions are `main' and functions defined in system
   3547      headers.
   3548 
   3549      This warning is enabled by `-Wall'.
   3550 
   3551 `-Wswitch'
   3552      Warn whenever a `switch' statement has an index of enumerated type
   3553      and lacks a `case' for one or more of the named codes of that
   3554      enumeration.  (The presence of a `default' label prevents this
   3555      warning.)  `case' labels outside the enumeration range also
   3556      provoke warnings when this option is used (even if there is a
   3557      `default' label).  This warning is enabled by `-Wall'.
   3558 
   3559 `-Wswitch-default'
   3560      Warn whenever a `switch' statement does not have a `default' case.
   3561 
   3562 `-Wswitch-enum'
   3563      Warn whenever a `switch' statement has an index of enumerated type
   3564      and lacks a `case' for one or more of the named codes of that
   3565      enumeration.  `case' labels outside the enumeration range also
   3566      provoke warnings when this option is used.  The only difference
   3567      between `-Wswitch' and this option is that this option gives a
   3568      warning about an omitted enumeration code even if there is a
   3569      `default' label.
   3570 
   3571 `-Wsync-nand (C and C++ only)'
   3572      Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
   3573      built-in functions are used.  These functions changed semantics in
   3574      GCC 4.4.
   3575 
   3576 `-Wtrigraphs'
   3577      Warn if any trigraphs are encountered that might change the
   3578      meaning of the program (trigraphs within comments are not warned
   3579      about).  This warning is enabled by `-Wall'.
   3580 
   3581 `-Wunused-but-set-parameter'
   3582      Warn whenever a function parameter is assigned to, but otherwise
   3583      unused (aside from its declaration).
   3584 
   3585      To suppress this warning use the `unused' attribute (*note
   3586      Variable Attributes::).
   3587 
   3588      This warning is also enabled by `-Wunused' together with `-Wextra'.
   3589 
   3590 `-Wunused-but-set-variable'
   3591      Warn whenever a local variable is assigned to, but otherwise unused
   3592      (aside from its declaration).  This warning is enabled by `-Wall'.
   3593 
   3594      To suppress this warning use the `unused' attribute (*note
   3595      Variable Attributes::).
   3596 
   3597      This warning is also enabled by `-Wunused', which is enabled by
   3598      `-Wall'.
   3599 
   3600 `-Wunused-function'
   3601      Warn whenever a static function is declared but not defined or a
   3602      non-inline static function is unused.  This warning is enabled by
   3603      `-Wall'.
   3604 
   3605 `-Wunused-label'
   3606      Warn whenever a label is declared but not used.  This warning is
   3607      enabled by `-Wall'.
   3608 
   3609      To suppress this warning use the `unused' attribute (*note
   3610      Variable Attributes::).
   3611 
   3612 `-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
   3613      Warn when a typedef locally defined in a function is not used.
   3614      This warning is enabled by `-Wall'.
   3615 
   3616 `-Wunused-parameter'
   3617      Warn whenever a function parameter is unused aside from its
   3618      declaration.
   3619 
   3620      To suppress this warning use the `unused' attribute (*note
   3621      Variable Attributes::).
   3622 
   3623 `-Wno-unused-result'
   3624      Do not warn if a caller of a function marked with attribute
   3625      `warn_unused_result' (*note Function Attributes::) does not use
   3626      its return value. The default is `-Wunused-result'.
   3627 
   3628 `-Wunused-variable'
   3629      Warn whenever a local variable or non-constant static variable is
   3630      unused aside from its declaration.  This warning is enabled by
   3631      `-Wall'.
   3632 
   3633      To suppress this warning use the `unused' attribute (*note
   3634      Variable Attributes::).
   3635 
   3636 `-Wunused-value'
   3637      Warn whenever a statement computes a result that is explicitly not
   3638      used. To suppress this warning cast the unused expression to
   3639      `void'. This includes an expression-statement or the left-hand
   3640      side of a comma expression that contains no side effects. For
   3641      example, an expression such as `x[i,j]' causes a warning, while
   3642      `x[(void)i,j]' does not.
   3643 
   3644      This warning is enabled by `-Wall'.
   3645 
   3646 `-Wunused'
   3647      All the above `-Wunused' options combined.
   3648 
   3649      In order to get a warning about an unused function parameter, you
   3650      must either specify `-Wextra -Wunused' (note that `-Wall' implies
   3651      `-Wunused'), or separately specify `-Wunused-parameter'.
   3652 
   3653 `-Wuninitialized'
   3654      Warn if an automatic variable is used without first being
   3655      initialized or if a variable may be clobbered by a `setjmp' call.
   3656      In C++, warn if a non-static reference or non-static `const' member
   3657      appears in a class without constructors.
   3658 
   3659      If you want to warn about code that uses the uninitialized value
   3660      of the variable in its own initializer, use the `-Winit-self'
   3661      option.
   3662 
   3663      These warnings occur for individual uninitialized or clobbered
   3664      elements of structure, union or array variables as well as for
   3665      variables that are uninitialized or clobbered as a whole.  They do
   3666      not occur for variables or elements declared `volatile'.  Because
   3667      these warnings depend on optimization, the exact variables or
   3668      elements for which there are warnings depends on the precise
   3669      optimization options and version of GCC used.
   3670 
   3671      Note that there may be no warning about a variable that is used
   3672      only to compute a value that itself is never used, because such
   3673      computations may be deleted by data flow analysis before the
   3674      warnings are printed.
   3675 
   3676 `-Wmaybe-uninitialized'
   3677      For an automatic variable, if there exists a path from the function
   3678      entry to a use of the variable that is initialized, but there exist
   3679      some other paths for which the variable is not initialized, the
   3680      compiler emits a warning if it cannot prove the uninitialized
   3681      paths are not executed at run time. These warnings are made
   3682      optional because GCC is not smart enough to see all the reasons
   3683      why the code might be correct in spite of appearing to have an
   3684      error.  Here is one example of how this can happen:
   3685 
   3686           {
   3687             int x;
   3688             switch (y)
   3689               {
   3690               case 1: x = 1;
   3691                 break;
   3692               case 2: x = 4;
   3693                 break;
   3694               case 3: x = 5;
   3695               }
   3696             foo (x);
   3697           }
   3698 
   3699      If the value of `y' is always 1, 2 or 3, then `x' is always
   3700      initialized, but GCC doesn't know this. To suppress the warning,
   3701      you need to provide a default case with assert(0) or similar code.
   3702 
   3703      This option also warns when a non-volatile automatic variable
   3704      might be changed by a call to `longjmp'.  These warnings as well
   3705      are possible only in optimizing compilation.
   3706 
   3707      The compiler sees only the calls to `setjmp'.  It cannot know
   3708      where `longjmp' will be called; in fact, a signal handler could
   3709      call it at any point in the code.  As a result, you may get a
   3710      warning even when there is in fact no problem because `longjmp'
   3711      cannot in fact be called at the place that would cause a problem.
   3712 
   3713      Some spurious warnings can be avoided if you declare all the
   3714      functions you use that never return as `noreturn'.  *Note Function
   3715      Attributes::.
   3716 
   3717      This warning is enabled by `-Wall' or `-Wextra'.
   3718 
   3719 `-Wunknown-pragmas'
   3720      Warn when a `#pragma' directive is encountered that is not
   3721      understood by GCC.  If this command-line option is used, warnings
   3722      are even issued for unknown pragmas in system header files.  This
   3723      is not the case if the warnings are only enabled by the `-Wall'
   3724      command-line option.
   3725 
   3726 `-Wno-pragmas'
   3727      Do not warn about misuses of pragmas, such as incorrect parameters,
   3728      invalid syntax, or conflicts between pragmas.  See also
   3729      `-Wunknown-pragmas'.
   3730 
   3731 `-Wstrict-aliasing'
   3732      This option is only active when `-fstrict-aliasing' is active.  It
   3733      warns about code that might break the strict aliasing rules that
   3734      the compiler is using for optimization.  The warning does not
   3735      catch all cases, but does attempt to catch the more common
   3736      pitfalls.  It is included in `-Wall'.  It is equivalent to
   3737      `-Wstrict-aliasing=3'
   3738 
   3739 `-Wstrict-aliasing=n'
   3740      This option is only active when `-fstrict-aliasing' is active.  It
   3741      warns about code that might break the strict aliasing rules that
   3742      the compiler is using for optimization.  Higher levels correspond
   3743      to higher accuracy (fewer false positives).  Higher levels also
   3744      correspond to more effort, similar to the way `-O' works.
   3745      `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'.
   3746 
   3747      Level 1: Most aggressive, quick, least accurate.  Possibly useful
   3748      when higher levels do not warn but `-fstrict-aliasing' still
   3749      breaks the code, as it has very few false negatives.  However, it
   3750      has many false positives.  Warns for all pointer conversions
   3751      between possibly incompatible types, even if never dereferenced.
   3752      Runs in the front end only.
   3753 
   3754      Level 2: Aggressive, quick, not too precise.  May still have many
   3755      false positives (not as many as level 1 though), and few false
   3756      negatives (but possibly more than level 1).  Unlike level 1, it
   3757      only warns when an address is taken.  Warns about incomplete
   3758      types.  Runs in the front end only.
   3759 
   3760      Level 3 (default for `-Wstrict-aliasing'): Should have very few
   3761      false positives and few false negatives.  Slightly slower than
   3762      levels 1 or 2 when optimization is enabled.  Takes care of the
   3763      common pun+dereference pattern in the front end:
   3764      `*(int*)&some_float'.  If optimization is enabled, it also runs in
   3765      the back end, where it deals with multiple statement cases using
   3766      flow-sensitive points-to information.  Only warns when the
   3767      converted pointer is dereferenced.  Does not warn about incomplete
   3768      types.
   3769 
   3770 `-Wstrict-overflow'
   3771 `-Wstrict-overflow=N'
   3772      This option is only active when `-fstrict-overflow' is active.  It
   3773      warns about cases where the compiler optimizes based on the
   3774      assumption that signed overflow does not occur.  Note that it does
   3775      not warn about all cases where the code might overflow: it only
   3776      warns about cases where the compiler implements some optimization.
   3777      Thus this warning depends on the optimization level.
   3778 
   3779      An optimization that assumes that signed overflow does not occur is
   3780      perfectly safe if the values of the variables involved are such
   3781      that overflow never does, in fact, occur.  Therefore this warning
   3782      can easily give a false positive: a warning about code that is not
   3783      actually a problem.  To help focus on important issues, several
   3784      warning levels are defined.  No warnings are issued for the use of
   3785      undefined signed overflow when estimating how many iterations a
   3786      loop requires, in particular when determining whether a loop will
   3787      be executed at all.
   3788 
   3789     `-Wstrict-overflow=1'
   3790           Warn about cases that are both questionable and easy to
   3791           avoid.  For example,  with `-fstrict-overflow', the compiler
   3792           simplifies `x + 1 > x' to `1'.  This level of
   3793           `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
   3794           not, and must be explicitly requested.
   3795 
   3796     `-Wstrict-overflow=2'
   3797           Also warn about other cases where a comparison is simplified
   3798           to a constant.  For example: `abs (x) >= 0'.  This can only be
   3799           simplified when `-fstrict-overflow' is in effect, because
   3800           `abs (INT_MIN)' overflows to `INT_MIN', which is less than
   3801           zero.  `-Wstrict-overflow' (with no level) is the same as
   3802           `-Wstrict-overflow=2'.
   3803 
   3804     `-Wstrict-overflow=3'
   3805           Also warn about other cases where a comparison is simplified.
   3806           For example: `x + 1 > 1' is simplified to `x > 0'.
   3807 
   3808     `-Wstrict-overflow=4'
   3809           Also warn about other simplifications not covered by the
   3810           above cases.  For example: `(x * 10) / 5' is simplified to `x
   3811           * 2'.
   3812 
   3813     `-Wstrict-overflow=5'
   3814           Also warn about cases where the compiler reduces the
   3815           magnitude of a constant involved in a comparison.  For
   3816           example: `x + 2 > y' is simplified to `x + 1 >= y'.  This is
   3817           reported only at the highest warning level because this
   3818           simplification applies to many comparisons, so this warning
   3819           level gives a very large number of false positives.
   3820 
   3821 `-Wsuggest-attribute=[pure|const|noreturn|format]'
   3822      Warn for cases where adding an attribute may be beneficial. The
   3823      attributes currently supported are listed below.
   3824 
   3825     `-Wsuggest-attribute=pure'
   3826     `-Wsuggest-attribute=const'
   3827     `-Wsuggest-attribute=noreturn'
   3828           Warn about functions that might be candidates for attributes
   3829           `pure', `const' or `noreturn'.  The compiler only warns for
   3830           functions visible in other compilation units or (in the case
   3831           of `pure' and `const') if it cannot prove that the function
   3832           returns normally. A function returns normally if it doesn't
   3833           contain an infinite loop or return abnormally by throwing,
   3834           calling `abort()' or trapping.  This analysis requires option
   3835           `-fipa-pure-const', which is enabled by default at `-O' and
   3836           higher.  Higher optimization levels improve the accuracy of
   3837           the analysis.
   3838 
   3839     `-Wsuggest-attribute=format'
   3840     `-Wmissing-format-attribute'
   3841           Warn about function pointers that might be candidates for
   3842           `format' attributes.  Note these are only possible
   3843           candidates, not absolute ones.  GCC guesses that function
   3844           pointers with `format' attributes that are used in
   3845           assignment, initialization, parameter passing or return
   3846           statements should have a corresponding `format' attribute in
   3847           the resulting type.  I.e. the left-hand side of the
   3848           assignment or initialization, the type of the parameter
   3849           variable, or the return type of the containing function
   3850           respectively should also have a `format' attribute to avoid
   3851           the warning.
   3852 
   3853           GCC also warns about function definitions that might be
   3854           candidates for `format' attributes.  Again, these are only
   3855           possible candidates.  GCC guesses that `format' attributes
   3856           might be appropriate for any function that calls a function
   3857           like `vprintf' or `vscanf', but this might not always be the
   3858           case, and some functions for which `format' attributes are
   3859           appropriate may not be detected.
   3860 
   3861 `-Warray-bounds'
   3862      This option is only active when `-ftree-vrp' is active (default
   3863      for `-O2' and above). It warns about subscripts to arrays that are
   3864      always out of bounds. This warning is enabled by `-Wall'.
   3865 
   3866 `-Wno-div-by-zero'
   3867      Do not warn about compile-time integer division by zero.
   3868      Floating-point division by zero is not warned about, as it can be
   3869      a legitimate way of obtaining infinities and NaNs.
   3870 
   3871 `-Wsystem-headers'
   3872      Print warning messages for constructs found in system header files.
   3873      Warnings from system headers are normally suppressed, on the
   3874      assumption that they usually do not indicate real problems and
   3875      would only make the compiler output harder to read.  Using this
   3876      command-line option tells GCC to emit warnings from system headers
   3877      as if they occurred in user code.  However, note that using
   3878      `-Wall' in conjunction with this option does _not_ warn about
   3879      unknown pragmas in system headers--for that, `-Wunknown-pragmas'
   3880      must also be used.
   3881 
   3882 `-Wtrampolines'
   3883      Warn about trampolines generated for pointers to nested functions.
   3884 
   3885      A trampoline is a small piece of data or code that is created at
   3886      run  time on the stack when the address of a nested function is
   3887      taken, and  is used to call the nested function indirectly.  For
   3888      some targets, it  is made up of data only and thus requires no
   3889      special treatment.  But,  for most targets, it is made up of code
   3890      and thus requires the stack  to be made executable in order for
   3891      the program to work properly.
   3892 
   3893 `-Wfloat-equal'
   3894      Warn if floating-point values are used in equality comparisons.
   3895 
   3896      The idea behind this is that sometimes it is convenient (for the
   3897      programmer) to consider floating-point values as approximations to
   3898      infinitely precise real numbers.  If you are doing this, then you
   3899      need to compute (by analyzing the code, or in some other way) the
   3900      maximum or likely maximum error that the computation introduces,
   3901      and allow for it when performing comparisons (and when producing
   3902      output, but that's a different problem).  In particular, instead
   3903      of testing for equality, you should check to see whether the two
   3904      values have ranges that overlap; and this is done with the
   3905      relational operators, so equality comparisons are probably
   3906      mistaken.
   3907 
   3908 `-Wtraditional (C and Objective-C only)'
   3909      Warn about certain constructs that behave differently in
   3910      traditional and ISO C.  Also warn about ISO C constructs that have
   3911      no traditional C equivalent, and/or problematic constructs that
   3912      should be avoided.
   3913 
   3914         * Macro parameters that appear within string literals in the
   3915           macro body.  In traditional C macro replacement takes place
   3916           within string literals, but in ISO C it does not.
   3917 
   3918         * In traditional C, some preprocessor directives did not exist.
   3919           Traditional preprocessors only considered a line to be a
   3920           directive if the `#' appeared in column 1 on the line.
   3921           Therefore `-Wtraditional' warns about directives that
   3922           traditional C understands but ignores because the `#' does
   3923           not appear as the first character on the line.  It also
   3924           suggests you hide directives like `#pragma' not understood by
   3925           traditional C by indenting them.  Some traditional
   3926           implementations do not recognize `#elif', so this option
   3927           suggests avoiding it altogether.
   3928 
   3929         * A function-like macro that appears without arguments.
   3930 
   3931         * The unary plus operator.
   3932 
   3933         * The `U' integer constant suffix, or the `F' or `L'
   3934           floating-point constant suffixes.  (Traditional C does
   3935           support the `L' suffix on integer constants.)  Note, these
   3936           suffixes appear in macros defined in the system headers of
   3937           most modern systems, e.g. the `_MIN'/`_MAX' macros in
   3938           `<limits.h>'.  Use of these macros in user code might
   3939           normally lead to spurious warnings, however GCC's integrated
   3940           preprocessor has enough context to avoid warning in these
   3941           cases.
   3942 
   3943         * A function declared external in one block and then used after
   3944           the end of the block.
   3945 
   3946         * A `switch' statement has an operand of type `long'.
   3947 
   3948         * A non-`static' function declaration follows a `static' one.
   3949           This construct is not accepted by some traditional C
   3950           compilers.
   3951 
   3952         * The ISO type of an integer constant has a different width or
   3953           signedness from its traditional type.  This warning is only
   3954           issued if the base of the constant is ten.  I.e. hexadecimal
   3955           or octal values, which typically represent bit patterns, are
   3956           not warned about.
   3957 
   3958         * Usage of ISO string concatenation is detected.
   3959 
   3960         * Initialization of automatic aggregates.
   3961 
   3962         * Identifier conflicts with labels.  Traditional C lacks a
   3963           separate namespace for labels.
   3964 
   3965         * Initialization of unions.  If the initializer is zero, the
   3966           warning is omitted.  This is done under the assumption that
   3967           the zero initializer in user code appears conditioned on e.g.
   3968           `__STDC__' to avoid missing initializer warnings and relies
   3969           on default initialization to zero in the traditional C case.
   3970 
   3971         * Conversions by prototypes between fixed/floating-point values
   3972           and vice versa.  The absence of these prototypes when
   3973           compiling with traditional C causes serious problems.  This
   3974           is a subset of the possible conversion warnings; for the full
   3975           set use `-Wtraditional-conversion'.
   3976 
   3977         * Use of ISO C style function definitions.  This warning
   3978           intentionally is _not_ issued for prototype declarations or
   3979           variadic functions because these ISO C features appear in
   3980           your code when using libiberty's traditional C compatibility
   3981           macros, `PARAMS' and `VPARAMS'.  This warning is also
   3982           bypassed for nested functions because that feature is already
   3983           a GCC extension and thus not relevant to traditional C
   3984           compatibility.
   3985 
   3986 `-Wtraditional-conversion (C and Objective-C only)'
   3987      Warn if a prototype causes a type conversion that is different
   3988      from what would happen to the same argument in the absence of a
   3989      prototype.  This includes conversions of fixed point to floating
   3990      and vice versa, and conversions changing the width or signedness
   3991      of a fixed-point argument except when the same as the default
   3992      promotion.
   3993 
   3994 `-Wdeclaration-after-statement (C and Objective-C only)'
   3995      Warn when a declaration is found after a statement in a block.
   3996      This construct, known from C++, was introduced with ISO C99 and is
   3997      by default allowed in GCC.  It is not supported by ISO C90 and was
   3998      not supported by GCC versions before GCC 3.0.  *Note Mixed
   3999      Declarations::.
   4000 
   4001 `-Wundef'
   4002      Warn if an undefined identifier is evaluated in an `#if' directive.
   4003 
   4004 `-Wno-endif-labels'
   4005      Do not warn whenever an `#else' or an `#endif' are followed by
   4006      text.
   4007 
   4008 `-Wshadow'
   4009      Warn whenever a local variable or type declaration shadows another
   4010      variable, parameter, type, or class member (in C++), or whenever a
   4011      built-in function is shadowed. Note that in C++, the compiler
   4012      warns if a local variable shadows an explicit typedef, but not if
   4013      it shadows a struct/class/enum.
   4014 
   4015 `-Wlarger-than=LEN'
   4016      Warn whenever an object of larger than LEN bytes is defined.
   4017 
   4018 `-Wframe-larger-than=LEN'
   4019      Warn if the size of a function frame is larger than LEN bytes.
   4020      The computation done to determine the stack frame size is
   4021      approximate and not conservative.  The actual requirements may be
   4022      somewhat greater than LEN even if you do not get a warning.  In
   4023      addition, any space allocated via `alloca', variable-length
   4024      arrays, or related constructs is not included by the compiler when
   4025      determining whether or not to issue a warning.
   4026 
   4027 `-Wno-free-nonheap-object'
   4028      Do not warn when attempting to free an object that was not
   4029      allocated on the heap.
   4030 
   4031 `-Wstack-usage=LEN'
   4032      Warn if the stack usage of a function might be larger than LEN
   4033      bytes.  The computation done to determine the stack usage is
   4034      conservative.  Any space allocated via `alloca', variable-length
   4035      arrays, or related constructs is included by the compiler when
   4036      determining whether or not to issue a warning.
   4037 
   4038      The message is in keeping with the output of `-fstack-usage'.
   4039 
   4040         * If the stack usage is fully static but exceeds the specified
   4041           amount, it's:
   4042 
   4043                  warning: stack usage is 1120 bytes
   4044 
   4045         * If the stack usage is (partly) dynamic but bounded, it's:
   4046 
   4047                  warning: stack usage might be 1648 bytes
   4048 
   4049         * If the stack usage is (partly) dynamic and not bounded, it's:
   4050 
   4051                  warning: stack usage might be unbounded
   4052 
   4053 `-Wunsafe-loop-optimizations'
   4054      Warn if the loop cannot be optimized because the compiler cannot
   4055      assume anything on the bounds of the loop indices.  With
   4056      `-funsafe-loop-optimizations' warn if the compiler makes such
   4057      assumptions.
   4058 
   4059 `-Wno-pedantic-ms-format (MinGW targets only)'
   4060      When used in combination with `-Wformat' and `-pedantic' without
   4061      GNU extensions, this option disables the warnings about non-ISO
   4062      `printf' / `scanf' format width specifiers `I32', `I64', and `I'
   4063      used on Windows targets, which depend on the MS runtime.
   4064 
   4065 `-Wpointer-arith'
   4066      Warn about anything that depends on the "size of" a function type
   4067      or of `void'.  GNU C assigns these types a size of 1, for
   4068      convenience in calculations with `void *' pointers and pointers to
   4069      functions.  In C++, warn also when an arithmetic operation involves
   4070      `NULL'.  This warning is also enabled by `-Wpedantic'.
   4071 
   4072 `-Wtype-limits'
   4073      Warn if a comparison is always true or always false due to the
   4074      limited range of the data type, but do not warn for constant
   4075      expressions.  For example, warn if an unsigned variable is
   4076      compared against zero with `<' or `>='.  This warning is also
   4077      enabled by `-Wextra'.
   4078 
   4079 `-Wbad-function-cast (C and Objective-C only)'
   4080      Warn whenever a function call is cast to a non-matching type.  For
   4081      example, warn if `int malloc()' is cast to `anything *'.
   4082 
   4083 `-Wc++-compat (C and Objective-C only)'
   4084      Warn about ISO C constructs that are outside of the common subset
   4085      of ISO C and ISO C++, e.g. request for implicit conversion from
   4086      `void *' to a pointer to non-`void' type.
   4087 
   4088 `-Wc++11-compat (C++ and Objective-C++ only)'
   4089      Warn about C++ constructs whose meaning differs between ISO C++
   4090      1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
   4091      keywords in ISO C++ 2011.  This warning turns on `-Wnarrowing' and
   4092      is enabled by `-Wall'.
   4093 
   4094 `-Wcast-qual'
   4095      Warn whenever a pointer is cast so as to remove a type qualifier
   4096      from the target type.  For example, warn if a `const char *' is
   4097      cast to an ordinary `char *'.
   4098 
   4099      Also warn when making a cast that introduces a type qualifier in an
   4100      unsafe way.  For example, casting `char **' to `const char **' is
   4101      unsafe, as in this example:
   4102 
   4103             /* p is char ** value.  */
   4104             const char **q = (const char **) p;
   4105             /* Assignment of readonly string to const char * is OK.  */
   4106             *q = "string";
   4107             /* Now char** pointer points to read-only memory.  */
   4108             **p = 'b';
   4109 
   4110 `-Wcast-align'
   4111      Warn whenever a pointer is cast such that the required alignment
   4112      of the target is increased.  For example, warn if a `char *' is
   4113      cast to an `int *' on machines where integers can only be accessed
   4114      at two- or four-byte boundaries.
   4115 
   4116 `-Wwrite-strings'
   4117      When compiling C, give string constants the type `const
   4118      char[LENGTH]' so that copying the address of one into a
   4119      non-`const' `char *' pointer produces a warning.  These warnings
   4120      help you find at compile time code that can try to write into a
   4121      string constant, but only if you have been very careful about
   4122      using `const' in declarations and prototypes.  Otherwise, it is
   4123      just a nuisance. This is why we did not make `-Wall' request these
   4124      warnings.
   4125 
   4126      When compiling C++, warn about the deprecated conversion from
   4127      string literals to `char *'.  This warning is enabled by default
   4128      for C++ programs.
   4129 
   4130 `-Wclobbered'
   4131      Warn for variables that might be changed by `longjmp' or `vfork'.
   4132      This warning is also enabled by `-Wextra'.
   4133 
   4134 `-Wconversion'
   4135      Warn for implicit conversions that may alter a value. This includes
   4136      conversions between real and integer, like `abs (x)' when `x' is
   4137      `double'; conversions between signed and unsigned, like `unsigned
   4138      ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
   4139      Do not warn for explicit casts like `abs ((int) x)' and `ui =
   4140      (unsigned) -1', or if the value is not changed by the conversion
   4141      like in `abs (2.0)'.  Warnings about conversions between signed
   4142      and unsigned integers can be disabled by using
   4143      `-Wno-sign-conversion'.
   4144 
   4145      For C++, also warn for confusing overload resolution for
   4146      user-defined conversions; and conversions that never use a type
   4147      conversion operator: conversions to `void', the same type, a base
   4148      class or a reference to them. Warnings about conversions between
   4149      signed and unsigned integers are disabled by default in C++ unless
   4150      `-Wsign-conversion' is explicitly enabled.
   4151 
   4152 `-Wno-conversion-null (C++ and Objective-C++ only)'
   4153      Do not warn for conversions between `NULL' and non-pointer types.
   4154      `-Wconversion-null' is enabled by default.
   4155 
   4156 `-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
   4157      Warn when a literal '0' is used as null pointer constant.  This can
   4158      be useful to facilitate the conversion to `nullptr' in C++11.
   4159 
   4160 `-Wuseless-cast (C++ and Objective-C++ only)'
   4161      Warn when an expression is casted to its own type.
   4162 
   4163 `-Wempty-body'
   4164      Warn if an empty body occurs in an `if', `else' or `do while'
   4165      statement.  This warning is also enabled by `-Wextra'.
   4166 
   4167 `-Wenum-compare'
   4168      Warn about a comparison between values of different enumerated
   4169      types.  In C++ enumeral mismatches in conditional expressions are
   4170      also diagnosed and the warning is enabled by default.  In C this
   4171      warning is enabled by `-Wall'.
   4172 
   4173 `-Wjump-misses-init (C, Objective-C only)'
   4174      Warn if a `goto' statement or a `switch' statement jumps forward
   4175      across the initialization of a variable, or jumps backward to a
   4176      label after the variable has been initialized.  This only warns
   4177      about variables that are initialized when they are declared.  This
   4178      warning is only supported for C and Objective-C; in C++ this sort
   4179      of branch is an error in any case.
   4180 
   4181      `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
   4182      disabled with the `-Wno-jump-misses-init' option.
   4183 
   4184 `-Wsign-compare'
   4185      Warn when a comparison between signed and unsigned values could
   4186      produce an incorrect result when the signed value is converted to
   4187      unsigned.  This warning is also enabled by `-Wextra'; to get the
   4188      other warnings of `-Wextra' without this warning, use `-Wextra
   4189      -Wno-sign-compare'.
   4190 
   4191 `-Wsign-conversion'
   4192      Warn for implicit conversions that may change the sign of an
   4193      integer value, like assigning a signed integer expression to an
   4194      unsigned integer variable. An explicit cast silences the warning.
   4195      In C, this option is enabled also by `-Wconversion'.
   4196 
   4197 `-Wsizeof-pointer-memaccess'
   4198      Warn for suspicious length parameters to certain string and memory
   4199      built-in functions if the argument uses `sizeof'.  This warning
   4200      warns e.g.  about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not
   4201      an array, but a pointer, and suggests a possible fix, or about
   4202      `memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
   4203      `-Wall'.
   4204 
   4205 `-Waddress'
   4206      Warn about suspicious uses of memory addresses. These include using
   4207      the address of a function in a conditional expression, such as
   4208      `void func(void); if (func)', and comparisons against the memory
   4209      address of a string literal, such as `if (x == "abc")'.  Such uses
   4210      typically indicate a programmer error: the address of a function
   4211      always evaluates to true, so their use in a conditional usually
   4212      indicate that the programmer forgot the parentheses in a function
   4213      call; and comparisons against string literals result in unspecified
   4214      behavior and are not portable in C, so they usually indicate that
   4215      the programmer intended to use `strcmp'.  This warning is enabled
   4216      by `-Wall'.
   4217 
   4218 `-Wlogical-op'
   4219      Warn about suspicious uses of logical operators in expressions.
   4220      This includes using logical operators in contexts where a bit-wise
   4221      operator is likely to be expected.
   4222 
   4223 `-Waggregate-return'
   4224      Warn if any functions that return structures or unions are defined
   4225      or called.  (In languages where you can return an array, this also
   4226      elicits a warning.)
   4227 
   4228 `-Wno-aggressive-loop-optimizations'
   4229      Warn if in a loop with constant number of iterations the compiler
   4230      detects undefined behavior in some statement during one or more of
   4231      the iterations.
   4232 
   4233 `-Wno-attributes'
   4234      Do not warn if an unexpected `__attribute__' is used, such as
   4235      unrecognized attributes, function attributes applied to variables,
   4236      etc.  This does not stop errors for incorrect use of supported
   4237      attributes.
   4238 
   4239 `-Wno-builtin-macro-redefined'
   4240      Do not warn if certain built-in macros are redefined.  This
   4241      suppresses warnings for redefinition of `__TIMESTAMP__',
   4242      `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
   4243 
   4244 `-Wstrict-prototypes (C and Objective-C only)'
   4245      Warn if a function is declared or defined without specifying the
   4246      argument types.  (An old-style function definition is permitted
   4247      without a warning if preceded by a declaration that specifies the
   4248      argument types.)
   4249 
   4250 `-Wold-style-declaration (C and Objective-C only)'
   4251      Warn for obsolescent usages, according to the C Standard, in a
   4252      declaration. For example, warn if storage-class specifiers like
   4253      `static' are not the first things in a declaration.  This warning
   4254      is also enabled by `-Wextra'.
   4255 
   4256 `-Wold-style-definition (C and Objective-C only)'
   4257      Warn if an old-style function definition is used.  A warning is
   4258      given even if there is a previous prototype.
   4259 
   4260 `-Wmissing-parameter-type (C and Objective-C only)'
   4261      A function parameter is declared without a type specifier in
   4262      K&R-style functions:
   4263 
   4264           void foo(bar) { }
   4265 
   4266      This warning is also enabled by `-Wextra'.
   4267 
   4268 `-Wmissing-prototypes (C and Objective-C only)'
   4269      Warn if a global function is defined without a previous prototype
   4270      declaration.  This warning is issued even if the definition itself
   4271      provides a prototype.  Use this option to detect global functions
   4272      that do not have a matching prototype declaration in a header file.
   4273      This option is not valid for C++ because all function declarations
   4274      provide prototypes and a non-matching declaration will declare an
   4275      overload rather than conflict with an earlier declaration.  Use
   4276      `-Wmissing-declarations' to detect missing declarations in C++.
   4277 
   4278 `-Wmissing-declarations'
   4279      Warn if a global function is defined without a previous
   4280      declaration.  Do so even if the definition itself provides a
   4281      prototype.  Use this option to detect global functions that are
   4282      not declared in header files.  In C, no warnings are issued for
   4283      functions with previous non-prototype declarations; use
   4284      `-Wmissing-prototype' to detect missing prototypes.  In C++, no
   4285      warnings are issued for function templates, or for inline
   4286      functions, or for functions in anonymous namespaces.
   4287 
   4288 `-Wmissing-field-initializers'
   4289      Warn if a structure's initializer has some fields missing.  For
   4290      example, the following code causes such a warning, because `x.h'
   4291      is implicitly zero:
   4292 
   4293           struct s { int f, g, h; };
   4294           struct s x = { 3, 4 };
   4295 
   4296      This option does not warn about designated initializers, so the
   4297      following modification does not trigger a warning:
   4298 
   4299           struct s { int f, g, h; };
   4300           struct s x = { .f = 3, .g = 4 };
   4301 
   4302      This warning is included in `-Wextra'.  To get other `-Wextra'
   4303      warnings without this one, use `-Wextra
   4304      -Wno-missing-field-initializers'.
   4305 
   4306 `-Wno-multichar'
   4307      Do not warn if a multicharacter constant (`'FOOF'') is used.
   4308      Usually they indicate a typo in the user's code, as they have
   4309      implementation-defined values, and should not be used in portable
   4310      code.
   4311 
   4312 `-Wnormalized=<none|id|nfc|nfkc>'
   4313      In ISO C and ISO C++, two identifiers are different if they are
   4314      different sequences of characters.  However, sometimes when
   4315      characters outside the basic ASCII character set are used, you can
   4316      have two different character sequences that look the same.  To
   4317      avoid confusion, the ISO 10646 standard sets out some
   4318      "normalization rules" which when applied ensure that two sequences
   4319      that look the same are turned into the same sequence.  GCC can
   4320      warn you if you are using identifiers that have not been
   4321      normalized; this option controls that warning.
   4322 
   4323      There are four levels of warning supported by GCC.  The default is
   4324      `-Wnormalized=nfc', which warns about any identifier that is not
   4325      in the ISO 10646 "C" normalized form, "NFC".  NFC is the
   4326      recommended form for most uses.
   4327 
   4328      Unfortunately, there are some characters allowed in identifiers by
   4329      ISO C and ISO C++ that, when turned into NFC, are not allowed in
   4330      identifiers.  That is, there's no way to use these symbols in
   4331      portable ISO C or C++ and have all your identifiers in NFC.
   4332      `-Wnormalized=id' suppresses the warning for these characters.  It
   4333      is hoped that future versions of the standards involved will
   4334      correct this, which is why this option is not the default.
   4335 
   4336      You can switch the warning off for all characters by writing
   4337      `-Wnormalized=none'.  You should only do this if you are using
   4338      some other normalization scheme (like "D"), because otherwise you
   4339      can easily create bugs that are literally impossible to see.
   4340 
   4341      Some characters in ISO 10646 have distinct meanings but look
   4342      identical in some fonts or display methodologies, especially once
   4343      formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
   4344      LATIN SMALL LETTER N", displays just like a regular `n' that has
   4345      been placed in a superscript.  ISO 10646 defines the "NFKC"
   4346      normalization scheme to convert all these into a standard form as
   4347      well, and GCC warns if your code is not in NFKC if you use
   4348      `-Wnormalized=nfkc'.  This warning is comparable to warning about
   4349      every identifier that contains the letter O because it might be
   4350      confused with the digit 0, and so is not the default, but may be
   4351      useful as a local coding convention if the programming environment
   4352      cannot be fixed to display these characters distinctly.
   4353 
   4354 `-Wno-deprecated'
   4355      Do not warn about usage of deprecated features.  *Note Deprecated
   4356      Features::.
   4357 
   4358 `-Wno-deprecated-declarations'
   4359      Do not warn about uses of functions (*note Function Attributes::),
   4360      variables (*note Variable Attributes::), and types (*note Type
   4361      Attributes::) marked as deprecated by using the `deprecated'
   4362      attribute.
   4363 
   4364 `-Wno-overflow'
   4365      Do not warn about compile-time overflow in constant expressions.
   4366 
   4367 `-Woverride-init (C and Objective-C only)'
   4368      Warn if an initialized field without side effects is overridden
   4369      when using designated initializers (*note Designated Initializers:
   4370      Designated Inits.).
   4371 
   4372      This warning is included in `-Wextra'.  To get other `-Wextra'
   4373      warnings without this one, use `-Wextra -Wno-override-init'.
   4374 
   4375 `-Wpacked'
   4376      Warn if a structure is given the packed attribute, but the packed
   4377      attribute has no effect on the layout or size of the structure.
   4378      Such structures may be mis-aligned for little benefit.  For
   4379      instance, in this code, the variable `f.x' in `struct bar' is
   4380      misaligned even though `struct bar' does not itself have the
   4381      packed attribute:
   4382 
   4383           struct foo {
   4384             int x;
   4385             char a, b, c, d;
   4386           } __attribute__((packed));
   4387           struct bar {
   4388             char z;
   4389             struct foo f;
   4390           };
   4391 
   4392 `-Wpacked-bitfield-compat'
   4393      The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
   4394      on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
   4395      the change can lead to differences in the structure layout.  GCC
   4396      informs you when the offset of such a field has changed in GCC 4.4.
   4397      For example there is no longer a 4-bit padding between field `a'
   4398      and `b' in this structure:
   4399 
   4400           struct foo
   4401           {
   4402             char a:4;
   4403             char b:8;
   4404           } __attribute__ ((packed));
   4405 
   4406      This warning is enabled by default.  Use
   4407      `-Wno-packed-bitfield-compat' to disable this warning.
   4408 
   4409 `-Wpadded'
   4410      Warn if padding is included in a structure, either to align an
   4411      element of the structure or to align the whole structure.
   4412      Sometimes when this happens it is possible to rearrange the fields
   4413      of the structure to reduce the padding and so make the structure
   4414      smaller.
   4415 
   4416 `-Wredundant-decls'
   4417      Warn if anything is declared more than once in the same scope,
   4418      even in cases where multiple declaration is valid and changes
   4419      nothing.
   4420 
   4421 `-Wnested-externs (C and Objective-C only)'
   4422      Warn if an `extern' declaration is encountered within a function.
   4423 
   4424 `-Wno-inherited-variadic-ctor'
   4425      Suppress warnings about use of C++11 inheriting constructors when
   4426      the base class inherited from has a C variadic constructor; the
   4427      warning is on by default because the ellipsis is not inherited.
   4428 
   4429 `-Winline'
   4430      Warn if a function that is declared as inline cannot be inlined.
   4431      Even with this option, the compiler does not warn about failures to
   4432      inline functions declared in system headers.
   4433 
   4434      The compiler uses a variety of heuristics to determine whether or
   4435      not to inline a function.  For example, the compiler takes into
   4436      account the size of the function being inlined and the amount of
   4437      inlining that has already been done in the current function.
   4438      Therefore, seemingly insignificant changes in the source program
   4439      can cause the warnings produced by `-Winline' to appear or
   4440      disappear.
   4441 
   4442 `-Wno-invalid-offsetof (C++ and Objective-C++ only)'
   4443      Suppress warnings from applying the `offsetof' macro to a non-POD
   4444      type.  According to the 1998 ISO C++ standard, applying `offsetof'
   4445      to a non-POD type is undefined.  In existing C++ implementations,
   4446      however, `offsetof' typically gives meaningful results even when
   4447      applied to certain kinds of non-POD types (such as a simple
   4448      `struct' that fails to be a POD type only by virtue of having a
   4449      constructor).  This flag is for users who are aware that they are
   4450      writing nonportable code and who have deliberately chosen to
   4451      ignore the warning about it.
   4452 
   4453      The restrictions on `offsetof' may be relaxed in a future version
   4454      of the C++ standard.
   4455 
   4456 `-Wno-int-to-pointer-cast'
   4457      Suppress warnings from casts to pointer type of an integer of a
   4458      different size. In C++, casting to a pointer type of smaller size
   4459      is an error. `Wint-to-pointer-cast' is enabled by default.
   4460 
   4461 `-Wno-pointer-to-int-cast (C and Objective-C only)'
   4462      Suppress warnings from casts from a pointer to an integer type of a
   4463      different size.
   4464 
   4465 `-Winvalid-pch'
   4466      Warn if a precompiled header (*note Precompiled Headers::) is
   4467      found in the search path but can't be used.
   4468 
   4469 `-Wlong-long'
   4470      Warn if `long long' type is used.  This is enabled by either
   4471      `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
   4472      inhibit the warning messages, use `-Wno-long-long'.
   4473 
   4474 `-Wvariadic-macros'
   4475      Warn if variadic macros are used in pedantic ISO C90 mode, or the
   4476      GNU alternate syntax when in pedantic ISO C99 mode.  This is
   4477      default.  To inhibit the warning messages, use
   4478      `-Wno-variadic-macros'.
   4479 
   4480 `-Wvarargs'
   4481      Warn upon questionable usage of the macros used to handle variable
   4482      arguments like `va_start'.  This is default.  To inhibit the
   4483      warning messages, use `-Wno-varargs'.
   4484 
   4485 `-Wvector-operation-performance'
   4486      Warn if vector operation is not implemented via SIMD capabilities
   4487      of the architecture.  Mainly useful for the performance tuning.
   4488      Vector operation can be implemented `piecewise', which means that
   4489      the scalar operation is performed on every vector element; `in
   4490      parallel', which means that the vector operation is implemented
   4491      using scalars of wider type, which normally is more performance
   4492      efficient; and `as a single scalar', which means that vector fits
   4493      into a scalar type.
   4494 
   4495 `-Wno-virtual-move-assign'
   4496      Suppress warnings about inheriting from a virtual base with a
   4497      non-trivial C++11 move assignment operator.  This is dangerous
   4498      because if the virtual base is reachable along more than one path,
   4499      it will be moved multiple times, which can mean both objects end
   4500      up in the moved-from state.  If the move assignment operator is
   4501      written to avoid moving from a moved-from object, this warning can
   4502      be disabled.
   4503 
   4504 `-Wvla'
   4505      Warn if variable length array is used in the code.  `-Wno-vla'
   4506      prevents the `-Wpedantic' warning of the variable length array.
   4507 
   4508 `-Wvolatile-register-var'
   4509      Warn if a register variable is declared volatile.  The volatile
   4510      modifier does not inhibit all optimizations that may eliminate
   4511      reads and/or writes to register variables.  This warning is
   4512      enabled by `-Wall'.
   4513 
   4514 `-Wdisabled-optimization'
   4515      Warn if a requested optimization pass is disabled.  This warning
   4516      does not generally indicate that there is anything wrong with your
   4517      code; it merely indicates that GCC's optimizers are unable to
   4518      handle the code effectively.  Often, the problem is that your code
   4519      is too big or too complex; GCC refuses to optimize programs when
   4520      the optimization itself is likely to take inordinate amounts of
   4521      time.
   4522 
   4523 `-Wpointer-sign (C and Objective-C only)'
   4524      Warn for pointer argument passing or assignment with different
   4525      signedness.  This option is only supported for C and Objective-C.
   4526      It is implied by `-Wall' and by `-Wpedantic', which can be
   4527      disabled with `-Wno-pointer-sign'.
   4528 
   4529 `-Wstack-protector'
   4530      This option is only active when `-fstack-protector' is active.  It
   4531      warns about functions that are not protected against stack
   4532      smashing.
   4533 
   4534 `-Wno-mudflap'
   4535      Suppress warnings about constructs that cannot be instrumented by
   4536      `-fmudflap'.
   4537 
   4538 `-Woverlength-strings'
   4539      Warn about string constants that are longer than the "minimum
   4540      maximum" length specified in the C standard.  Modern compilers
   4541      generally allow string constants that are much longer than the
   4542      standard's minimum limit, but very portable programs should avoid
   4543      using longer strings.
   4544 
   4545      The limit applies _after_ string constant concatenation, and does
   4546      not count the trailing NUL.  In C90, the limit was 509 characters;
   4547      in C99, it was raised to 4095.  C++98 does not specify a normative
   4548      minimum maximum, so we do not diagnose overlength strings in C++.
   4549 
   4550      This option is implied by `-Wpedantic', and can be disabled with
   4551      `-Wno-overlength-strings'.
   4552 
   4553 `-Wunsuffixed-float-constants (C and Objective-C only)'
   4554      Issue a warning for any floating constant that does not have a
   4555      suffix.  When used together with `-Wsystem-headers' it warns about
   4556      such constants in system header files.  This can be useful when
   4557      preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from
   4558      the decimal floating-point extension to C99.
   4559 
   4560 
   4561 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
   4562 
   4563 3.9 Options for Debugging Your Program or GCC
   4564 =============================================
   4565 
   4566 GCC has various special options that are used for debugging either your
   4567 program or GCC:
   4568 
   4569 `-g'
   4570      Produce debugging information in the operating system's native
   4571      format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
   4572      debugging information.
   4573 
   4574      On most systems that use stabs format, `-g' enables use of extra
   4575      debugging information that only GDB can use; this extra information
   4576      makes debugging work better in GDB but probably makes other
   4577      debuggers crash or refuse to read the program.  If you want to
   4578      control for certain whether to generate the extra information, use
   4579      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
   4580      below).
   4581 
   4582      GCC allows you to use `-g' with `-O'.  The shortcuts taken by
   4583      optimized code may occasionally produce surprising results: some
   4584      variables you declared may not exist at all; flow of control may
   4585      briefly move where you did not expect it; some statements may not
   4586      be executed because they compute constant results or their values
   4587      are already at hand; some statements may execute in different
   4588      places because they have been moved out of loops.
   4589 
   4590      Nevertheless it proves possible to debug optimized output.  This
   4591      makes it reasonable to use the optimizer for programs that might
   4592      have bugs.
   4593 
   4594      The following options are useful when GCC is generated with the
   4595      capability for more than one debugging format.
   4596 
   4597 `-gsplit-dwarf'
   4598      Separate as much dwarf debugging information as possible into a
   4599      separate output file with the extension .dwo.  This option allows
   4600      the build system to avoid linking files with debug information.  To
   4601      be useful, this option requires a debugger capable of reading .dwo
   4602      files.
   4603 
   4604 `-ggdb'
   4605      Produce debugging information for use by GDB.  This means to use
   4606      the most expressive format available (DWARF 2, stabs, or the
   4607      native format if neither of those are supported), including GDB
   4608      extensions if at all possible.
   4609 
   4610 `-gpubnames'
   4611      Generate dwarf .debug_pubnames and .debug_pubtypes sections.
   4612 
   4613 `-gstabs'
   4614      Produce debugging information in stabs format (if that is
   4615      supported), without GDB extensions.  This is the format used by
   4616      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
   4617      systems this option produces stabs debugging output that is not
   4618      understood by DBX or SDB.  On System V Release 4 systems this
   4619      option requires the GNU assembler.
   4620 
   4621 `-feliminate-unused-debug-symbols'
   4622      Produce debugging information in stabs format (if that is
   4623      supported), for only symbols that are actually used.
   4624 
   4625 `-femit-class-debug-always'
   4626      Instead of emitting debugging information for a C++ class in only
   4627      one object file, emit it in all object files using the class.
   4628      This option should be used only with debuggers that are unable to
   4629      handle the way GCC normally emits debugging information for
   4630      classes because using this option increases the size of debugging
   4631      information by as much as a factor of two.
   4632 
   4633 `-fdebug-types-section'
   4634      When using DWARF Version 4 or higher, type DIEs can be put into
   4635      their own `.debug_types' section instead of making them part of the
   4636      `.debug_info' section.  It is more efficient to put them in a
   4637      separate comdat sections since the linker can then remove
   4638      duplicates.  But not all DWARF consumers support `.debug_types'
   4639      sections yet and on some objects `.debug_types' produces larger
   4640      instead of smaller debugging information.
   4641 
   4642 `-gstabs+'
   4643      Produce debugging information in stabs format (if that is
   4644      supported), using GNU extensions understood only by the GNU
   4645      debugger (GDB).  The use of these extensions is likely to make
   4646      other debuggers crash or refuse to read the program.
   4647 
   4648 `-gcoff'
   4649      Produce debugging information in COFF format (if that is
   4650      supported).  This is the format used by SDB on most System V
   4651      systems prior to System V Release 4.
   4652 
   4653 `-gxcoff'
   4654      Produce debugging information in XCOFF format (if that is
   4655      supported).  This is the format used by the DBX debugger on IBM
   4656      RS/6000 systems.
   4657 
   4658 `-gxcoff+'
   4659      Produce debugging information in XCOFF format (if that is
   4660      supported), using GNU extensions understood only by the GNU
   4661      debugger (GDB).  The use of these extensions is likely to make
   4662      other debuggers crash or refuse to read the program, and may cause
   4663      assemblers other than the GNU assembler (GAS) to fail with an
   4664      error.
   4665 
   4666 `-gdwarf-VERSION'
   4667      Produce debugging information in DWARF format (if that is
   4668      supported).  The value of VERSION may be either 2, 3 or 4; the
   4669      default version for most targets is 4.
   4670 
   4671      Note that with DWARF Version 2, some ports require and always use
   4672      some non-conflicting DWARF 3 extensions in the unwind tables.
   4673 
   4674      Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
   4675      maximum benefit.
   4676 
   4677 `-grecord-gcc-switches'
   4678      This switch causes the command-line options used to invoke the
   4679      compiler that may affect code generation to be appended to the
   4680      DW_AT_producer attribute in DWARF debugging information.  The
   4681      options are concatenated with spaces separating them from each
   4682      other and from the compiler version.  See also
   4683      `-frecord-gcc-switches' for another way of storing compiler
   4684      options into the object file.  This is the default.
   4685 
   4686 `-gno-record-gcc-switches'
   4687      Disallow appending command-line options to the DW_AT_producer
   4688      attribute in DWARF debugging information.
   4689 
   4690 `-gstrict-dwarf'
   4691      Disallow using extensions of later DWARF standard version than
   4692      selected with `-gdwarf-VERSION'.  On most targets using
   4693      non-conflicting DWARF extensions from later standard versions is
   4694      allowed.
   4695 
   4696 `-gno-strict-dwarf'
   4697      Allow using extensions of later DWARF standard version than
   4698      selected with `-gdwarf-VERSION'.
   4699 
   4700 `-gvms'
   4701      Produce debugging information in Alpha/VMS debug format (if that is
   4702      supported).  This is the format used by DEBUG on Alpha/VMS systems.
   4703 
   4704 `-gLEVEL'
   4705 `-ggdbLEVEL'
   4706 `-gstabsLEVEL'
   4707 `-gcoffLEVEL'
   4708 `-gxcoffLEVEL'
   4709 `-gvmsLEVEL'
   4710      Request debugging information and also use LEVEL to specify how
   4711      much information.  The default level is 2.
   4712 
   4713      Level 0 produces no debug information at all.  Thus, `-g0' negates
   4714      `-g'.
   4715 
   4716      Level 1 produces minimal information, enough for making backtraces
   4717      in parts of the program that you don't plan to debug.  This
   4718      includes descriptions of functions and external variables, but no
   4719      information about local variables and no line numbers.
   4720 
   4721      Level 3 includes extra information, such as all the macro
   4722      definitions present in the program.  Some debuggers support macro
   4723      expansion when you use `-g3'.
   4724 
   4725      `-gdwarf-2' does not accept a concatenated debug level, because
   4726      GCC used to support an option `-gdwarf' that meant to generate
   4727      debug information in version 1 of the DWARF format (which is very
   4728      different from version 2), and it would have been too confusing.
   4729      That debug format is long obsolete, but the option cannot be
   4730      changed now.  Instead use an additional `-gLEVEL' option to change
   4731      the debug level for DWARF.
   4732 
   4733 `-gtoggle'
   4734      Turn off generation of debug info, if leaving out this option
   4735      generates it, or turn it on at level 2 otherwise.  The position of
   4736      this argument in the command line does not matter; it takes effect
   4737      after all other options are processed, and it does so only once,
   4738      no matter how many times it is given.  This is mainly intended to
   4739      be used with `-fcompare-debug'.
   4740 
   4741 `-fsanitize=address'
   4742      Enable AddressSanitizer, a fast memory error detector.  Memory
   4743      access instructions will be instrumented to detect out-of-bounds
   4744      and use-after-free bugs.  See
   4745      `http://code.google.com/p/address-sanitizer/' for more details.
   4746 
   4747 `-fsanitize=thread'
   4748      Enable ThreadSanitizer, a fast data race detector.  Memory access
   4749      instructions will be instrumented to detect data race bugs.  See
   4750      `http://code.google.com/p/data-race-test/wiki/ThreadSanitizer' for
   4751      more details.
   4752 
   4753 `-fdump-final-insns[=FILE]'
   4754      Dump the final internal representation (RTL) to FILE.  If the
   4755      optional argument is omitted (or if FILE is `.'), the name of the
   4756      dump file is determined by appending `.gkd' to the compilation
   4757      output file name.
   4758 
   4759 `-fcompare-debug[=OPTS]'
   4760      If no error occurs during compilation, run the compiler a second
   4761      time, adding OPTS and `-fcompare-debug-second' to the arguments
   4762      passed to the second compilation.  Dump the final internal
   4763      representation in both compilations, and print an error if they
   4764      differ.
   4765 
   4766      If the equal sign is omitted, the default `-gtoggle' is used.
   4767 
   4768      The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
   4769      and nonzero, implicitly enables `-fcompare-debug'.  If
   4770      `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
   4771      then it is used for OPTS, otherwise the default `-gtoggle' is used.
   4772 
   4773      `-fcompare-debug=', with the equal sign but without OPTS, is
   4774      equivalent to `-fno-compare-debug', which disables the dumping of
   4775      the final representation and the second compilation, preventing
   4776      even `GCC_COMPARE_DEBUG' from taking effect.
   4777 
   4778      To verify full coverage during `-fcompare-debug' testing, set
   4779      `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
   4780      GCC rejects as an invalid option in any actual compilation (rather
   4781      than preprocessing, assembly or linking).  To get just a warning,
   4782      setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
   4783      overridden' will do.
   4784 
   4785 `-fcompare-debug-second'
   4786      This option is implicitly passed to the compiler for the second
   4787      compilation requested by `-fcompare-debug', along with options to
   4788      silence warnings, and omitting other options that would cause
   4789      side-effect compiler outputs to files or to the standard output.
   4790      Dump files and preserved temporary files are renamed so as to
   4791      contain the `.gk' additional extension during the second
   4792      compilation, to avoid overwriting those generated by the first.
   4793 
   4794      When this option is passed to the compiler driver, it causes the
   4795      _first_ compilation to be skipped, which makes it useful for little
   4796      other than debugging the compiler proper.
   4797 
   4798 `-feliminate-dwarf2-dups'
   4799      Compress DWARF 2 debugging information by eliminating duplicated
   4800      information about each symbol.  This option only makes sense when
   4801      generating DWARF 2 debugging information with `-gdwarf-2'.
   4802 
   4803 `-femit-struct-debug-baseonly'
   4804      Emit debug information for struct-like types only when the base
   4805      name of the compilation source file matches the base name of file
   4806      in which the struct is defined.
   4807 
   4808      This option substantially reduces the size of debugging
   4809      information, but at significant potential loss in type information
   4810      to the debugger.  See `-femit-struct-debug-reduced' for a less
   4811      aggressive option.  See `-femit-struct-debug-detailed' for more
   4812      detailed control.
   4813 
   4814      This option works only with DWARF 2.
   4815 
   4816 `-femit-struct-debug-reduced'
   4817      Emit debug information for struct-like types only when the base
   4818      name of the compilation source file matches the base name of file
   4819      in which the type is defined, unless the struct is a template or
   4820      defined in a system header.
   4821 
   4822      This option significantly reduces the size of debugging
   4823      information, with some potential loss in type information to the
   4824      debugger.  See `-femit-struct-debug-baseonly' for a more
   4825      aggressive option.  See `-femit-struct-debug-detailed' for more
   4826      detailed control.
   4827 
   4828      This option works only with DWARF 2.
   4829 
   4830 `-femit-struct-debug-detailed[=SPEC-LIST]'
   4831      Specify the struct-like types for which the compiler generates
   4832      debug information.  The intent is to reduce duplicate struct debug
   4833      information between different object files within the same program.
   4834 
   4835      This option is a detailed version of `-femit-struct-debug-reduced'
   4836      and `-femit-struct-debug-baseonly', which serves for most needs.
   4837 
   4838      A specification has the syntax
   4839      [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
   4840 
   4841      The optional first word limits the specification to structs that
   4842      are used directly (`dir:') or used indirectly (`ind:').  A struct
   4843      type is used directly when it is the type of a variable, member.
   4844      Indirect uses arise through pointers to structs.  That is, when
   4845      use of an incomplete struct is valid, the use is indirect.  An
   4846      example is `struct one direct; struct two * indirect;'.
   4847 
   4848      The optional second word limits the specification to ordinary
   4849      structs (`ord:') or generic structs (`gen:').  Generic structs are
   4850      a bit complicated to explain.  For C++, these are non-explicit
   4851      specializations of template classes, or non-template classes
   4852      within the above.  Other programming languages have generics, but
   4853      `-femit-struct-debug-detailed' does not yet implement them.
   4854 
   4855      The third word specifies the source files for those structs for
   4856      which the compiler should emit debug information.  The values
   4857      `none' and `any' have the normal meaning.  The value `base' means
   4858      that the base of name of the file in which the type declaration
   4859      appears must match the base of the name of the main compilation
   4860      file.  In practice, this means that when compiling `foo.c', debug
   4861      information is generated for types declared in that file and
   4862      `foo.h', but not other header files.  The value `sys' means those
   4863      types satisfying `base' or declared in system or compiler headers.
   4864 
   4865      You may need to experiment to determine the best settings for your
   4866      application.
   4867 
   4868      The default is `-femit-struct-debug-detailed=all'.
   4869 
   4870      This option works only with DWARF 2.
   4871 
   4872 `-fno-merge-debug-strings'
   4873      Direct the linker to not merge together strings in the debugging
   4874      information that are identical in different object files.  Merging
   4875      is not supported by all assemblers or linkers.  Merging decreases
   4876      the size of the debug information in the output file at the cost
   4877      of increasing link processing time.  Merging is enabled by default.
   4878 
   4879 `-fdebug-prefix-map=OLD=NEW'
   4880      When compiling files in directory `OLD', record debugging
   4881      information describing them as in `NEW' instead.
   4882 
   4883 `-fno-dwarf2-cfi-asm'
   4884      Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
   4885      instead of using GAS `.cfi_*' directives.
   4886 
   4887 `-p'
   4888      Generate extra code to write profile information suitable for the
   4889      analysis program `prof'.  You must use this option when compiling
   4890      the source files you want data about, and you must also use it when
   4891      linking.
   4892 
   4893 `-pg'
   4894      Generate extra code to write profile information suitable for the
   4895      analysis program `gprof'.  You must use this option when compiling
   4896      the source files you want data about, and you must also use it when
   4897      linking.
   4898 
   4899 `-Q'
   4900      Makes the compiler print out each function name as it is compiled,
   4901      and print some statistics about each pass when it finishes.
   4902 
   4903 `-ftime-report'
   4904      Makes the compiler print some statistics about the time consumed
   4905      by each pass when it finishes.
   4906 
   4907 `-fmem-report'
   4908      Makes the compiler print some statistics about permanent memory
   4909      allocation when it finishes.
   4910 
   4911 `-fmem-report-wpa'
   4912      Makes the compiler print some statistics about permanent memory
   4913      allocation for the WPA phase only.
   4914 
   4915 `-fpre-ipa-mem-report'
   4916 
   4917 `-fpost-ipa-mem-report'
   4918      Makes the compiler print some statistics about permanent memory
   4919      allocation before or after interprocedural optimization.
   4920 
   4921 `-fprofile-report'
   4922      Makes the compiler print some statistics about consistency of the
   4923      (estimated) profile and effect of individual passes.
   4924 
   4925 `-fstack-usage'
   4926      Makes the compiler output stack usage information for the program,
   4927      on a per-function basis.  The filename for the dump is made by
   4928      appending `.su' to the AUXNAME.  AUXNAME is generated from the
   4929      name of the output file, if explicitly specified and it is not an
   4930      executable, otherwise it is the basename of the source file.  An
   4931      entry is made up of three fields:
   4932 
   4933         * The name of the function.
   4934 
   4935         * A number of bytes.
   4936 
   4937         * One or more qualifiers: `static', `dynamic', `bounded'.
   4938 
   4939      The qualifier `static' means that the function manipulates the
   4940      stack statically: a fixed number of bytes are allocated for the
   4941      frame on function entry and released on function exit; no stack
   4942      adjustments are otherwise made in the function.  The second field
   4943      is this fixed number of bytes.
   4944 
   4945      The qualifier `dynamic' means that the function manipulates the
   4946      stack dynamically: in addition to the static allocation described
   4947      above, stack adjustments are made in the body of the function, for
   4948      example to push/pop arguments around function calls.  If the
   4949      qualifier `bounded' is also present, the amount of these
   4950      adjustments is bounded at compile time and the second field is an
   4951      upper bound of the total amount of stack used by the function.  If
   4952      it is not present, the amount of these adjustments is not bounded
   4953      at compile time and the second field only represents the bounded
   4954      part.
   4955 
   4956 `-fprofile-arcs'
   4957      Add code so that program flow "arcs" are instrumented.  During
   4958      execution the program records how many times each branch and call
   4959      is executed and how many times it is taken or returns.  When the
   4960      compiled program exits it saves this data to a file called
   4961      `AUXNAME.gcda' for each source file.  The data may be used for
   4962      profile-directed optimizations (`-fbranch-probabilities'), or for
   4963      test coverage analysis (`-ftest-coverage').  Each object file's
   4964      AUXNAME is generated from the name of the output file, if
   4965      explicitly specified and it is not the final executable, otherwise
   4966      it is the basename of the source file.  In both cases any suffix
   4967      is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
   4968      `dir/foo.gcda' for output file specified as `-o dir/foo.o').
   4969      *Note Cross-profiling::.
   4970 
   4971 `--coverage'
   4972      This option is used to compile and link code instrumented for
   4973      coverage analysis.  The option is a synonym for `-fprofile-arcs'
   4974      `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
   4975      See the documentation for those options for more details.
   4976 
   4977         * Compile the source files with `-fprofile-arcs' plus
   4978           optimization and code generation options.  For test coverage
   4979           analysis, use the additional `-ftest-coverage' option.  You
   4980           do not need to profile every source file in a program.
   4981 
   4982         * Link your object files with `-lgcov' or `-fprofile-arcs' (the
   4983           latter implies the former).
   4984 
   4985         * Run the program on a representative workload to generate the
   4986           arc profile information.  This may be repeated any number of
   4987           times.  You can run concurrent instances of your program, and
   4988           provided that the file system supports locking, the data
   4989           files will be correctly updated.  Also `fork' calls are
   4990           detected and correctly handled (double counting will not
   4991           happen).
   4992 
   4993         * For profile-directed optimizations, compile the source files
   4994           again with the same optimization and code generation options
   4995           plus `-fbranch-probabilities' (*note Options that Control
   4996           Optimization: Optimize Options.).
   4997 
   4998         * For test coverage analysis, use `gcov' to produce human
   4999           readable information from the `.gcno' and `.gcda' files.
   5000           Refer to the `gcov' documentation for further information.
   5001 
   5002 
   5003      With `-fprofile-arcs', for each function of your program GCC
   5004      creates a program flow graph, then finds a spanning tree for the
   5005      graph.  Only arcs that are not on the spanning tree have to be
   5006      instrumented: the compiler adds code to count the number of times
   5007      that these arcs are executed.  When an arc is the only exit or
   5008      only entrance to a block, the instrumentation code can be added to
   5009      the block; otherwise, a new basic block must be created to hold
   5010      the instrumentation code.
   5011 
   5012 `-ftest-coverage'
   5013      Produce a notes file that the `gcov' code-coverage utility (*note
   5014      `gcov'--a Test Coverage Program: Gcov.) can use to show program
   5015      coverage.  Each source file's note file is called `AUXNAME.gcno'.
   5016      Refer to the `-fprofile-arcs' option above for a description of
   5017      AUXNAME and instructions on how to generate test coverage data.
   5018      Coverage data matches the source files more closely if you do not
   5019      optimize.
   5020 
   5021 `-fdbg-cnt-list'
   5022      Print the name and the counter upper bound for all debug counters.
   5023 
   5024 `-fdbg-cnt=COUNTER-VALUE-LIST'
   5025      Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
   5026      a comma-separated list of NAME:VALUE pairs which sets the upper
   5027      bound of each debug counter NAME to VALUE.  All debug counters
   5028      have the initial upper bound of `UINT_MAX'; thus `dbg_cnt()'
   5029      returns true always unless the upper bound is set by this option.
   5030      For example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)'
   5031      returns true only for first 10 invocations.
   5032 
   5033 `-fenable-KIND-PASS'
   5034 `-fdisable-KIND-PASS=RANGE-LIST'
   5035      This is a set of options that are used to explicitly disable/enable
   5036      optimization passes.  These options are intended for use for
   5037      debugging GCC.  Compiler users should use regular options for
   5038      enabling/disabling passes instead.
   5039 
   5040     `-fdisable-ipa-PASS'
   5041           Disable IPA pass PASS. PASS is the pass name.  If the same
   5042           pass is statically invoked in the compiler multiple times,
   5043           the pass name should be appended with a sequential number
   5044           starting from 1.
   5045 
   5046     `-fdisable-rtl-PASS'
   5047     `-fdisable-rtl-PASS=RANGE-LIST'
   5048           Disable RTL pass PASS.  PASS is the pass name.  If the same
   5049           pass is statically invoked in the compiler multiple times,
   5050           the pass name should be appended with a sequential number
   5051           starting from 1.  RANGE-LIST is a comma-separated list of
   5052           function ranges or assembler names.  Each range is a number
   5053           pair separated by a colon.  The range is inclusive in both
   5054           ends.  If the range is trivial, the number pair can be
   5055           simplified as a single number.  If the function's call graph
   5056           node's UID falls within one of the specified ranges, the PASS
   5057           is disabled for that function.  The UID is shown in the
   5058           function header of a dump file, and the pass names can be
   5059           dumped by using option `-fdump-passes'.
   5060 
   5061     `-fdisable-tree-PASS'
   5062     `-fdisable-tree-PASS=RANGE-LIST'
   5063           Disable tree pass PASS.  See `-fdisable-rtl' for the
   5064           description of option arguments.
   5065 
   5066     `-fenable-ipa-PASS'
   5067           Enable IPA pass PASS.  PASS is the pass name.  If the same
   5068           pass is statically invoked in the compiler multiple times,
   5069           the pass name should be appended with a sequential number
   5070           starting from 1.
   5071 
   5072     `-fenable-rtl-PASS'
   5073     `-fenable-rtl-PASS=RANGE-LIST'
   5074           Enable RTL pass PASS.  See `-fdisable-rtl' for option argument
   5075           description and examples.
   5076 
   5077     `-fenable-tree-PASS'
   5078     `-fenable-tree-PASS=RANGE-LIST'
   5079           Enable tree pass PASS.  See `-fdisable-rtl' for the
   5080           description of option arguments.
   5081 
   5082 
   5083      Here are some examples showing uses of these options.
   5084 
   5085 
   5086           # disable ccp1 for all functions
   5087              -fdisable-tree-ccp1
   5088           # disable complete unroll for function whose cgraph node uid is 1
   5089              -fenable-tree-cunroll=1
   5090           # disable gcse2 for functions at the following ranges [1,1],
   5091           # [300,400], and [400,1000]
   5092           # disable gcse2 for functions foo and foo2
   5093              -fdisable-rtl-gcse2=foo,foo2
   5094           # disable early inlining
   5095              -fdisable-tree-einline
   5096           # disable ipa inlining
   5097              -fdisable-ipa-inline
   5098           # enable tree full unroll
   5099              -fenable-tree-unroll
   5100 
   5101 `-dLETTERS'
   5102 `-fdump-rtl-PASS'
   5103 `-fdump-rtl-PASS=FILENAME'
   5104      Says to make debugging dumps during compilation at times specified
   5105      by LETTERS.  This is used for debugging the RTL-based passes of the
   5106      compiler.  The file names for most of the dumps are made by
   5107      appending a pass number and a word to the DUMPNAME, and the files
   5108      are created in the directory of the output file. In case of
   5109      `=FILENAME' option, the dump is output on the given file instead
   5110      of the pass numbered dump files. Note that the pass number is
   5111      computed statically as passes get registered into the pass manager.
   5112      Thus the numbering is not related to the dynamic order of
   5113      execution of passes.  In particular, a pass installed by a plugin
   5114      could have a number over 200 even if it executed quite early.
   5115      DUMPNAME is generated from the name of the output file, if
   5116      explicitly specified and it is not an executable, otherwise it is
   5117      the basename of the source file. These switches may have different
   5118      effects when `-E' is used for preprocessing.
   5119 
   5120      Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
   5121      option LETTERS.  Here are the possible letters for use in PASS and
   5122      LETTERS, and their meanings:
   5123 
   5124     `-fdump-rtl-alignments'
   5125           Dump after branch alignments have been computed.
   5126 
   5127     `-fdump-rtl-asmcons'
   5128           Dump after fixing rtl statements that have unsatisfied in/out
   5129           constraints.
   5130 
   5131     `-fdump-rtl-auto_inc_dec'
   5132           Dump after auto-inc-dec discovery.  This pass is only run on
   5133           architectures that have auto inc or auto dec instructions.
   5134 
   5135     `-fdump-rtl-barriers'
   5136           Dump after cleaning up the barrier instructions.
   5137 
   5138     `-fdump-rtl-bbpart'
   5139           Dump after partitioning hot and cold basic blocks.
   5140 
   5141     `-fdump-rtl-bbro'
   5142           Dump after block reordering.
   5143 
   5144     `-fdump-rtl-btl1'
   5145     `-fdump-rtl-btl2'
   5146           `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
   5147           the two branch target load optimization passes.
   5148 
   5149     `-fdump-rtl-bypass'
   5150           Dump after jump bypassing and control flow optimizations.
   5151 
   5152     `-fdump-rtl-combine'
   5153           Dump after the RTL instruction combination pass.
   5154 
   5155     `-fdump-rtl-compgotos'
   5156           Dump after duplicating the computed gotos.
   5157 
   5158     `-fdump-rtl-ce1'
   5159     `-fdump-rtl-ce2'
   5160     `-fdump-rtl-ce3'
   5161           `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
   5162           enable dumping after the three if conversion passes.
   5163 
   5164     `-fdump-rtl-cprop_hardreg'
   5165           Dump after hard register copy propagation.
   5166 
   5167     `-fdump-rtl-csa'
   5168           Dump after combining stack adjustments.
   5169 
   5170     `-fdump-rtl-cse1'
   5171     `-fdump-rtl-cse2'
   5172           `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
   5173           the two common subexpression elimination passes.
   5174 
   5175     `-fdump-rtl-dce'
   5176           Dump after the standalone dead code elimination passes.
   5177 
   5178     `-fdump-rtl-dbr'
   5179           Dump after delayed branch scheduling.
   5180 
   5181     `-fdump-rtl-dce1'
   5182     `-fdump-rtl-dce2'
   5183           `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
   5184           the two dead store elimination passes.
   5185 
   5186     `-fdump-rtl-eh'
   5187           Dump after finalization of EH handling code.
   5188 
   5189     `-fdump-rtl-eh_ranges'
   5190           Dump after conversion of EH handling range regions.
   5191 
   5192     `-fdump-rtl-expand'
   5193           Dump after RTL generation.
   5194 
   5195     `-fdump-rtl-fwprop1'
   5196     `-fdump-rtl-fwprop2'
   5197           `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
   5198           after the two forward propagation passes.
   5199 
   5200     `-fdump-rtl-gcse1'
   5201     `-fdump-rtl-gcse2'
   5202           `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
   5203           after global common subexpression elimination.
   5204 
   5205     `-fdump-rtl-init-regs'
   5206           Dump after the initialization of the registers.
   5207 
   5208     `-fdump-rtl-initvals'
   5209           Dump after the computation of the initial value sets.
   5210 
   5211     `-fdump-rtl-into_cfglayout'
   5212           Dump after converting to cfglayout mode.
   5213 
   5214     `-fdump-rtl-ira'
   5215           Dump after iterated register allocation.
   5216 
   5217     `-fdump-rtl-jump'
   5218           Dump after the second jump optimization.
   5219 
   5220     `-fdump-rtl-loop2'
   5221           `-fdump-rtl-loop2' enables dumping after the rtl loop
   5222           optimization passes.
   5223 
   5224     `-fdump-rtl-mach'
   5225           Dump after performing the machine dependent reorganization
   5226           pass, if that pass exists.
   5227 
   5228     `-fdump-rtl-mode_sw'
   5229           Dump after removing redundant mode switches.
   5230 
   5231     `-fdump-rtl-rnreg'
   5232           Dump after register renumbering.
   5233 
   5234     `-fdump-rtl-outof_cfglayout'
   5235           Dump after converting from cfglayout mode.
   5236 
   5237     `-fdump-rtl-peephole2'
   5238           Dump after the peephole pass.
   5239 
   5240     `-fdump-rtl-postreload'
   5241           Dump after post-reload optimizations.
   5242 
   5243     `-fdump-rtl-pro_and_epilogue'
   5244           Dump after generating the function prologues and epilogues.
   5245 
   5246     `-fdump-rtl-regmove'
   5247           Dump after the register move pass.
   5248 
   5249     `-fdump-rtl-sched1'
   5250     `-fdump-rtl-sched2'
   5251           `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
   5252           after the basic block scheduling passes.
   5253 
   5254     `-fdump-rtl-see'
   5255           Dump after sign extension elimination.
   5256 
   5257     `-fdump-rtl-seqabstr'
   5258           Dump after common sequence discovery.
   5259 
   5260     `-fdump-rtl-shorten'
   5261           Dump after shortening branches.
   5262 
   5263     `-fdump-rtl-sibling'
   5264           Dump after sibling call optimizations.
   5265 
   5266     `-fdump-rtl-split1'
   5267     `-fdump-rtl-split2'
   5268     `-fdump-rtl-split3'
   5269     `-fdump-rtl-split4'
   5270     `-fdump-rtl-split5'
   5271           `-fdump-rtl-split1', `-fdump-rtl-split2',
   5272           `-fdump-rtl-split3', `-fdump-rtl-split4' and
   5273           `-fdump-rtl-split5' enable dumping after five rounds of
   5274           instruction splitting.
   5275 
   5276     `-fdump-rtl-sms'
   5277           Dump after modulo scheduling.  This pass is only run on some
   5278           architectures.
   5279 
   5280     `-fdump-rtl-stack'
   5281           Dump after conversion from GCC's "flat register file"
   5282           registers to the x87's stack-like registers.  This pass is
   5283           only run on x86 variants.
   5284 
   5285     `-fdump-rtl-subreg1'
   5286     `-fdump-rtl-subreg2'
   5287           `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
   5288           after the two subreg expansion passes.
   5289 
   5290     `-fdump-rtl-unshare'
   5291           Dump after all rtl has been unshared.
   5292 
   5293     `-fdump-rtl-vartrack'
   5294           Dump after variable tracking.
   5295 
   5296     `-fdump-rtl-vregs'
   5297           Dump after converting virtual registers to hard registers.
   5298 
   5299     `-fdump-rtl-web'
   5300           Dump after live range splitting.
   5301 
   5302     `-fdump-rtl-regclass'
   5303     `-fdump-rtl-subregs_of_mode_init'
   5304     `-fdump-rtl-subregs_of_mode_finish'
   5305     `-fdump-rtl-dfinit'
   5306     `-fdump-rtl-dfinish'
   5307           These dumps are defined but always produce empty files.
   5308 
   5309     `-da'
   5310     `-fdump-rtl-all'
   5311           Produce all the dumps listed above.
   5312 
   5313     `-dA'
   5314           Annotate the assembler output with miscellaneous debugging
   5315           information.
   5316 
   5317     `-dD'
   5318           Dump all macro definitions, at the end of preprocessing, in
   5319           addition to normal output.
   5320 
   5321     `-dH'
   5322           Produce a core dump whenever an error occurs.
   5323 
   5324     `-dp'
   5325           Annotate the assembler output with a comment indicating which
   5326           pattern and alternative is used.  The length of each
   5327           instruction is also printed.
   5328 
   5329     `-dP'
   5330           Dump the RTL in the assembler output as a comment before each
   5331           instruction.  Also turns on `-dp' annotation.
   5332 
   5333     `-dx'
   5334           Just generate RTL for a function instead of compiling it.
   5335           Usually used with `-fdump-rtl-expand'.
   5336 
   5337 `-fdump-noaddr'
   5338      When doing debugging dumps, suppress address output.  This makes
   5339      it more feasible to use diff on debugging dumps for compiler
   5340      invocations with different compiler binaries and/or different text
   5341      / bss / data / heap / stack / dso start locations.
   5342 
   5343 `-fdump-unnumbered'
   5344      When doing debugging dumps, suppress instruction numbers and
   5345      address output.  This makes it more feasible to use diff on
   5346      debugging dumps for compiler invocations with different options,
   5347      in particular with and without `-g'.
   5348 
   5349 `-fdump-unnumbered-links'
   5350      When doing debugging dumps (see `-d' option above), suppress
   5351      instruction numbers for the links to the previous and next
   5352      instructions in a sequence.
   5353 
   5354 `-fdump-translation-unit (C++ only)'
   5355 `-fdump-translation-unit-OPTIONS (C++ only)'
   5356      Dump a representation of the tree structure for the entire
   5357      translation unit to a file.  The file name is made by appending
   5358      `.tu' to the source file name, and the file is created in the same
   5359      directory as the output file.  If the `-OPTIONS' form is used,
   5360      OPTIONS controls the details of the dump as described for the
   5361      `-fdump-tree' options.
   5362 
   5363 `-fdump-class-hierarchy (C++ only)'
   5364 `-fdump-class-hierarchy-OPTIONS (C++ only)'
   5365      Dump a representation of each class's hierarchy and virtual
   5366      function table layout to a file.  The file name is made by
   5367      appending `.class' to the source file name, and the file is
   5368      created in the same directory as the output file.  If the
   5369      `-OPTIONS' form is used, OPTIONS controls the details of the dump
   5370      as described for the `-fdump-tree' options.
   5371 
   5372 `-fdump-ipa-SWITCH'
   5373      Control the dumping at various stages of inter-procedural analysis
   5374      language tree to a file.  The file name is generated by appending a
   5375      switch specific suffix to the source file name, and the file is
   5376      created in the same directory as the output file.  The following
   5377      dumps are possible:
   5378 
   5379     `all'
   5380           Enables all inter-procedural analysis dumps.
   5381 
   5382     `cgraph'
   5383           Dumps information about call-graph optimization, unused
   5384           function removal, and inlining decisions.
   5385 
   5386     `inline'
   5387           Dump after function inlining.
   5388 
   5389 
   5390 `-fdump-passes'
   5391      Dump the list of optimization passes that are turned on and off by
   5392      the current command-line options.
   5393 
   5394 `-fdump-statistics-OPTION'
   5395      Enable and control dumping of pass statistics in a separate file.
   5396      The file name is generated by appending a suffix ending in
   5397      `.statistics' to the source file name, and the file is created in
   5398      the same directory as the output file.  If the `-OPTION' form is
   5399      used, `-stats' causes counters to be summed over the whole
   5400      compilation unit while `-details' dumps every event as the passes
   5401      generate them.  The default with no option is to sum counters for
   5402      each function compiled.
   5403 
   5404 `-fdump-tree-SWITCH'
   5405 `-fdump-tree-SWITCH-OPTIONS'
   5406 `-fdump-tree-SWITCH-OPTIONS=FILENAME'
   5407      Control the dumping at various stages of processing the
   5408      intermediate language tree to a file.  The file name is generated
   5409      by appending a switch-specific suffix to the source file name, and
   5410      the file is created in the same directory as the output file. In
   5411      case of `=FILENAME' option, the dump is output on the given file
   5412      instead of the auto named dump files.  If the `-OPTIONS' form is
   5413      used, OPTIONS is a list of `-' separated options which control the
   5414      details of the dump.  Not all options are applicable to all dumps;
   5415      those that are not meaningful are ignored.  The following options
   5416      are available
   5417 
   5418     `address'
   5419           Print the address of each node.  Usually this is not
   5420           meaningful as it changes according to the environment and
   5421           source file.  Its primary use is for tying up a dump file
   5422           with a debug environment.
   5423 
   5424     `asmname'
   5425           If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
   5426           that in the dump instead of `DECL_NAME'.  Its primary use is
   5427           ease of use working backward from mangled names in the
   5428           assembly file.
   5429 
   5430     `slim'
   5431           When dumping front-end intermediate representations, inhibit
   5432           dumping of members of a scope or body of a function merely
   5433           because that scope has been reached.  Only dump such items
   5434           when they are directly reachable by some other path.
   5435 
   5436           When dumping pretty-printed trees, this option inhibits
   5437           dumping the bodies of control structures.
   5438 
   5439           When dumping RTL, print the RTL in slim (condensed) form
   5440           instead of the default LISP-like representation.
   5441 
   5442     `raw'
   5443           Print a raw representation of the tree.  By default, trees are
   5444           pretty-printed into a C-like representation.
   5445 
   5446     `details'
   5447           Enable more detailed dumps (not honored by every dump
   5448           option). Also include information from the optimization
   5449           passes.
   5450 
   5451     `stats'
   5452           Enable dumping various statistics about the pass (not honored
   5453           by every dump option).
   5454 
   5455     `blocks'
   5456           Enable showing basic block boundaries (disabled in raw dumps).
   5457 
   5458     `graph'
   5459           For each of the other indicated dump files
   5460           (`-fdump-rtl-PASS'), dump a representation of the control
   5461           flow graph suitable for viewing with GraphViz to
   5462           `FILE.PASSID.PASS.dot'.  Each function in the file is
   5463           pretty-printed as a subgraph, so that GraphViz can render them
   5464           all in a single plot.
   5465 
   5466           This option currently only works for RTL dumps, and the RTL
   5467           is always dumped in slim form.
   5468 
   5469     `vops'
   5470           Enable showing virtual operands for every statement.
   5471 
   5472     `lineno'
   5473           Enable showing line numbers for statements.
   5474 
   5475     `uid'
   5476           Enable showing the unique ID (`DECL_UID') for each variable.
   5477 
   5478     `verbose'
   5479           Enable showing the tree dump for each statement.
   5480 
   5481     `eh'
   5482           Enable showing the EH region number holding each statement.
   5483 
   5484     `scev'
   5485           Enable showing scalar evolution analysis details.
   5486 
   5487     `optimized'
   5488           Enable showing optimization information (only available in
   5489           certain passes).
   5490 
   5491     `missed'
   5492           Enable showing missed optimization information (only
   5493           available in certain passes).
   5494 
   5495     `notes'
   5496           Enable other detailed optimization information (only
   5497           available in certain passes).
   5498 
   5499     `=FILENAME'
   5500           Instead of an auto named dump file, output into the given file
   5501           name. The file names `stdout' and `stderr' are treated
   5502           specially and are considered already open standard streams.
   5503           For example,
   5504 
   5505                gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
   5506                     -fdump-tree-pre=stderr file.c
   5507 
   5508           outputs vectorizer dump into `foo.dump', while the PRE dump is
   5509           output on to `stderr'. If two conflicting dump filenames are
   5510           given for the same pass, then the latter option overrides the
   5511           earlier one.
   5512 
   5513     `all'
   5514           Turn on all options, except `raw', `slim', `verbose' and
   5515           `lineno'.
   5516 
   5517     `optall'
   5518           Turn on all optimization options, i.e., `optimized',
   5519           `missed', and `note'.
   5520 
   5521      The following tree dumps are possible:
   5522     `original'
   5523           Dump before any tree based optimization, to `FILE.original'.
   5524 
   5525     `optimized'
   5526           Dump after all tree based optimization, to `FILE.optimized'.
   5527 
   5528     `gimple'
   5529           Dump each function before and after the gimplification pass
   5530           to a file.  The file name is made by appending `.gimple' to
   5531           the source file name.
   5532 
   5533     `cfg'
   5534           Dump the control flow graph of each function to a file.  The
   5535           file name is made by appending `.cfg' to the source file name.
   5536 
   5537     `ch'
   5538           Dump each function after copying loop headers.  The file name
   5539           is made by appending `.ch' to the source file name.
   5540 
   5541     `ssa'
   5542           Dump SSA related information to a file.  The file name is
   5543           made by appending `.ssa' to the source file name.
   5544 
   5545     `alias'
   5546           Dump aliasing information for each function.  The file name
   5547           is made by appending `.alias' to the source file name.
   5548 
   5549     `ccp'
   5550           Dump each function after CCP.  The file name is made by
   5551           appending `.ccp' to the source file name.
   5552 
   5553     `storeccp'
   5554           Dump each function after STORE-CCP.  The file name is made by
   5555           appending `.storeccp' to the source file name.
   5556 
   5557     `pre'
   5558           Dump trees after partial redundancy elimination.  The file
   5559           name is made by appending `.pre' to the source file name.
   5560 
   5561     `fre'
   5562           Dump trees after full redundancy elimination.  The file name
   5563           is made by appending `.fre' to the source file name.
   5564 
   5565     `copyprop'
   5566           Dump trees after copy propagation.  The file name is made by
   5567           appending `.copyprop' to the source file name.
   5568 
   5569     `store_copyprop'
   5570           Dump trees after store copy-propagation.  The file name is
   5571           made by appending `.store_copyprop' to the source file name.
   5572 
   5573     `dce'
   5574           Dump each function after dead code elimination.  The file
   5575           name is made by appending `.dce' to the source file name.
   5576 
   5577     `mudflap'
   5578           Dump each function after adding mudflap instrumentation.  The
   5579           file name is made by appending `.mudflap' to the source file
   5580           name.
   5581 
   5582     `sra'
   5583           Dump each function after performing scalar replacement of
   5584           aggregates.  The file name is made by appending `.sra' to the
   5585           source file name.
   5586 
   5587     `sink'
   5588           Dump each function after performing code sinking.  The file
   5589           name is made by appending `.sink' to the source file name.
   5590 
   5591     `dom'
   5592           Dump each function after applying dominator tree
   5593           optimizations.  The file name is made by appending `.dom' to
   5594           the source file name.
   5595 
   5596     `dse'
   5597           Dump each function after applying dead store elimination.
   5598           The file name is made by appending `.dse' to the source file
   5599           name.
   5600 
   5601     `phiopt'
   5602           Dump each function after optimizing PHI nodes into
   5603           straightline code.  The file name is made by appending
   5604           `.phiopt' to the source file name.
   5605 
   5606     `forwprop'
   5607           Dump each function after forward propagating single use
   5608           variables.  The file name is made by appending `.forwprop' to
   5609           the source file name.
   5610 
   5611     `copyrename'
   5612           Dump each function after applying the copy rename
   5613           optimization.  The file name is made by appending
   5614           `.copyrename' to the source file name.
   5615 
   5616     `nrv'
   5617           Dump each function after applying the named return value
   5618           optimization on generic trees.  The file name is made by
   5619           appending `.nrv' to the source file name.
   5620 
   5621     `vect'
   5622           Dump each function after applying vectorization of loops.
   5623           The file name is made by appending `.vect' to the source file
   5624           name.
   5625 
   5626     `slp'
   5627           Dump each function after applying vectorization of basic
   5628           blocks.  The file name is made by appending `.slp' to the
   5629           source file name.
   5630 
   5631     `vrp'
   5632           Dump each function after Value Range Propagation (VRP).  The
   5633           file name is made by appending `.vrp' to the source file name.
   5634 
   5635     `all'
   5636           Enable all the available tree dumps with the flags provided
   5637           in this option.
   5638 
   5639 `-fopt-info'
   5640 `-fopt-info-OPTIONS'
   5641 `-fopt-info-OPTIONS=FILENAME'
   5642      Controls optimization dumps from various optimization passes. If
   5643      the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
   5644      options to select the dump details and optimizations.  If OPTIONS
   5645      is not specified, it defaults to `all' for details and `optall'
   5646      for optimization groups. If the FILENAME is not specified, it
   5647      defaults to `stderr'. Note that the output FILENAME will be
   5648      overwritten in case of multiple translation units. If a combined
   5649      output from multiple translation units is desired, `stderr' should
   5650      be used instead.
   5651 
   5652      The options can be divided into two groups, 1) options describing
   5653      the verbosity of the dump, and 2) options describing which
   5654      optimizations should be included. The options from both the groups
   5655      can be freely mixed as they are non-overlapping. However, in case
   5656      of any conflicts, the latter options override the earlier options
   5657      on the command line. Though multiple -fopt-info options are
   5658      accepted, only one of them can have `=filename'. If other
   5659      filenames are provided then all but the first one are ignored.
   5660 
   5661      The dump verbosity has the following options
   5662 
   5663     `optimized'
   5664           Print information when an optimization is successfully
   5665           applied. It is up to a pass to decide which information is
   5666           relevant. For example, the vectorizer passes print the source
   5667           location of loops which got successfully vectorized.
   5668 
   5669     `missed'
   5670           Print information about missed optimizations. Individual
   5671           passes control which information to include in the output.
   5672           For example,
   5673 
   5674                gcc -O2 -ftree-vectorize -fopt-info-vec-missed
   5675 
   5676           will print information about missed optimization
   5677           opportunities from vectorization passes on stderr.
   5678 
   5679     `note'
   5680           Print verbose information about optimizations, such as certain
   5681           transformations, more detailed messages about decisions etc.
   5682 
   5683     `all'
   5684           Print detailed optimization information. This includes
   5685           OPTIMIZED, MISSED, and NOTE.
   5686 
   5687      The second set of options describes a group of optimizations and
   5688      may include one or more of the following.
   5689 
   5690     `ipa'
   5691           Enable dumps from all interprocedural optimizations.
   5692 
   5693     `loop'
   5694           Enable dumps from all loop optimizations.
   5695 
   5696     `inline'
   5697           Enable dumps from all inlining optimizations.
   5698 
   5699     `vec'
   5700           Enable dumps from all vectorization optimizations.
   5701 
   5702      For example,
   5703           gcc -O3 -fopt-info-missed=missed.all
   5704 
   5705      outputs missed optimization report from all the passes into
   5706      `missed.all'.
   5707 
   5708      As another example,
   5709           gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
   5710 
   5711      will output information about missed optimizations as well as
   5712      optimized locations from all the inlining passes into `inline.txt'.
   5713 
   5714      If the FILENAME is provided, then the dumps from all the
   5715      applicable optimizations are concatenated into the `filename'.
   5716      Otherwise the dump is output onto `stderr'. If OPTIONS is omitted,
   5717      it defaults to `all-optall', which means dump all available
   5718      optimization info from all the passes. In the following example,
   5719      all optimization info is output on to `stderr'.
   5720 
   5721           gcc -O3 -fopt-info
   5722 
   5723      Note that `-fopt-info-vec-missed' behaves the same as
   5724      `-fopt-info-missed-vec'.
   5725 
   5726      As another example, consider
   5727 
   5728           gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
   5729 
   5730      Here the two output filenames `vec.miss' and `loop.opt' are in
   5731      conflict since only one output file is allowed. In this case, only
   5732      the first option takes effect and the subsequent options are
   5733      ignored. Thus only the `vec.miss' is produced which cotaints dumps
   5734      from the vectorizer about missed opportunities.
   5735 
   5736 `-ftree-vectorizer-verbose=N'
   5737      This option is deprecated and is implemented in terms of
   5738      `-fopt-info'. Please use `-fopt-info-KIND' form instead, where
   5739      KIND is one of the valid opt-info options. It prints additional
   5740      optimization information.  For N=0 no diagnostic information is
   5741      reported.  If N=1 the vectorizer reports each loop that got
   5742      vectorized, and the total number of loops that got vectorized.  If
   5743      N=2 the vectorizer reports locations which could not be vectorized
   5744      and the reasons for those. For any higher verbosity levels all the
   5745      analysis and transformation information from the vectorizer is
   5746      reported.
   5747 
   5748      Note that the information output by `-ftree-vectorizer-verbose'
   5749      option is sent to `stderr'. If the equivalent form
   5750      `-fopt-info-OPTIONS=FILENAME' is used then the output is sent into
   5751      FILENAME instead.
   5752 
   5753 `-frandom-seed=STRING'
   5754      This option provides a seed that GCC uses in place of random
   5755      numbers in generating certain symbol names that have to be
   5756      different in every compiled file.  It is also used to place unique
   5757      stamps in coverage data files and the object files that produce
   5758      them.  You can use the `-frandom-seed' option to produce
   5759      reproducibly identical object files.
   5760 
   5761      The STRING should be different for every file you compile.
   5762 
   5763 `-fsched-verbose=N'
   5764      On targets that use instruction scheduling, this option controls
   5765      the amount of debugging output the scheduler prints.  This
   5766      information is written to standard error, unless
   5767      `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
   5768      case it is output to the usual dump listing file, `.sched1' or
   5769      `.sched2' respectively.  However for N greater than nine, the
   5770      output is always printed to standard error.
   5771 
   5772      For N greater than zero, `-fsched-verbose' outputs the same
   5773      information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
   5774      greater than one, it also output basic block probabilities,
   5775      detailed ready list information and unit/insn info.  For N greater
   5776      than two, it includes RTL at abort point, control-flow and regions
   5777      info.  And for N over four, `-fsched-verbose' also includes
   5778      dependence info.
   5779 
   5780 `-save-temps'
   5781 `-save-temps=cwd'
   5782      Store the usual "temporary" intermediate files permanently; place
   5783      them in the current directory and name them based on the source
   5784      file.  Thus, compiling `foo.c' with `-c -save-temps' produces files
   5785      `foo.i' and `foo.s', as well as `foo.o'.  This creates a
   5786      preprocessed `foo.i' output file even though the compiler now
   5787      normally uses an integrated preprocessor.
   5788 
   5789      When used in combination with the `-x' command-line option,
   5790      `-save-temps' is sensible enough to avoid over writing an input
   5791      source file with the same extension as an intermediate file.  The
   5792      corresponding intermediate file may be obtained by renaming the
   5793      source file before using `-save-temps'.
   5794 
   5795      If you invoke GCC in parallel, compiling several different source
   5796      files that share a common base name in different subdirectories or
   5797      the same source file compiled for multiple output destinations, it
   5798      is likely that the different parallel compilers will interfere
   5799      with each other, and overwrite the temporary files.  For instance:
   5800 
   5801           gcc -save-temps -o outdir1/foo.o indir1/foo.c&
   5802           gcc -save-temps -o outdir2/foo.o indir2/foo.c&
   5803 
   5804      may result in `foo.i' and `foo.o' being written to simultaneously
   5805      by both compilers.
   5806 
   5807 `-save-temps=obj'
   5808      Store the usual "temporary" intermediate files permanently.  If the
   5809      `-o' option is used, the temporary files are based on the object
   5810      file.  If the `-o' option is not used, the `-save-temps=obj'
   5811      switch behaves like `-save-temps'.
   5812 
   5813      For example:
   5814 
   5815           gcc -save-temps=obj -c foo.c
   5816           gcc -save-temps=obj -c bar.c -o dir/xbar.o
   5817           gcc -save-temps=obj foobar.c -o dir2/yfoobar
   5818 
   5819      creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
   5820      `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
   5821 
   5822 `-time[=FILE]'
   5823      Report the CPU time taken by each subprocess in the compilation
   5824      sequence.  For C source files, this is the compiler proper and
   5825      assembler (plus the linker if linking is done).
   5826 
   5827      Without the specification of an output file, the output looks like
   5828      this:
   5829 
   5830           # cc1 0.12 0.01
   5831           # as 0.00 0.01
   5832 
   5833      The first number on each line is the "user time", that is time
   5834      spent executing the program itself.  The second number is "system
   5835      time", time spent executing operating system routines on behalf of
   5836      the program.  Both numbers are in seconds.
   5837 
   5838      With the specification of an output file, the output is appended
   5839      to the named file, and it looks like this:
   5840 
   5841           0.12 0.01 cc1 OPTIONS
   5842           0.00 0.01 as OPTIONS
   5843 
   5844      The "user time" and the "system time" are moved before the program
   5845      name, and the options passed to the program are displayed, so that
   5846      one can later tell what file was being compiled, and with which
   5847      options.
   5848 
   5849 `-fvar-tracking'
   5850      Run variable tracking pass.  It computes where variables are
   5851      stored at each position in code.  Better debugging information is
   5852      then generated (if the debugging information format supports this
   5853      information).
   5854 
   5855      It is enabled by default when compiling with optimization (`-Os',
   5856      `-O', `-O2', ...), debugging information (`-g') and the debug info
   5857      format supports it.
   5858 
   5859 `-fvar-tracking-assignments'
   5860      Annotate assignments to user variables early in the compilation and
   5861      attempt to carry the annotations over throughout the compilation
   5862      all the way to the end, in an attempt to improve debug information
   5863      while optimizing.  Use of `-gdwarf-4' is recommended along with it.
   5864 
   5865      It can be enabled even if var-tracking is disabled, in which case
   5866      annotations are created and maintained, but discarded at the end.
   5867 
   5868 `-fvar-tracking-assignments-toggle'
   5869      Toggle `-fvar-tracking-assignments', in the same way that
   5870      `-gtoggle' toggles `-g'.
   5871 
   5872 `-print-file-name=LIBRARY'
   5873      Print the full absolute name of the library file LIBRARY that
   5874      would be used when linking--and don't do anything else.  With this
   5875      option, GCC does not compile or link anything; it just prints the
   5876      file name.
   5877 
   5878 `-print-multi-directory'
   5879      Print the directory name corresponding to the multilib selected by
   5880      any other switches present in the command line.  This directory is
   5881      supposed to exist in `GCC_EXEC_PREFIX'.
   5882 
   5883 `-print-multi-lib'
   5884      Print the mapping from multilib directory names to compiler
   5885      switches that enable them.  The directory name is separated from
   5886      the switches by `;', and each switch starts with an `@' instead of
   5887      the `-', without spaces between multiple switches.  This is
   5888      supposed to ease shell processing.
   5889 
   5890 `-print-multi-os-directory'
   5891      Print the path to OS libraries for the selected multilib, relative
   5892      to some `lib' subdirectory.  If OS libraries are present in the
   5893      `lib' subdirectory and no multilibs are used, this is usually just
   5894      `.', if OS libraries are present in `libSUFFIX' sibling
   5895      directories this prints e.g. `../lib64', `../lib' or `../lib32',
   5896      or if OS libraries are present in `lib/SUBDIR' subdirectories it
   5897      prints e.g. `amd64', `sparcv9' or `ev6'.
   5898 
   5899 `-print-multiarch'
   5900      Print the path to OS libraries for the selected multiarch,
   5901      relative to some `lib' subdirectory.
   5902 
   5903 `-print-prog-name=PROGRAM'
   5904      Like `-print-file-name', but searches for a program such as `cpp'.
   5905 
   5906 `-print-libgcc-file-name'
   5907      Same as `-print-file-name=libgcc.a'.
   5908 
   5909      This is useful when you use `-nostdlib' or `-nodefaultlibs' but
   5910      you do want to link with `libgcc.a'.  You can do:
   5911 
   5912           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
   5913 
   5914 `-print-search-dirs'
   5915      Print the name of the configured installation directory and a list
   5916      of program and library directories `gcc' searches--and don't do
   5917      anything else.
   5918 
   5919      This is useful when `gcc' prints the error message `installation
   5920      problem, cannot exec cpp0: No such file or directory'.  To resolve
   5921      this you either need to put `cpp0' and the other compiler
   5922      components where `gcc' expects to find them, or you can set the
   5923      environment variable `GCC_EXEC_PREFIX' to the directory where you
   5924      installed them.  Don't forget the trailing `/'.  *Note Environment
   5925      Variables::.
   5926 
   5927 `-print-sysroot'
   5928      Print the target sysroot directory that is used during
   5929      compilation.  This is the target sysroot specified either at
   5930      configure time or using the `--sysroot' option, possibly with an
   5931      extra suffix that depends on compilation options.  If no target
   5932      sysroot is specified, the option prints nothing.
   5933 
   5934 `-print-sysroot-headers-suffix'
   5935      Print the suffix added to the target sysroot when searching for
   5936      headers, or give an error if the compiler is not configured with
   5937      such a suffix--and don't do anything else.
   5938 
   5939 `-dumpmachine'
   5940      Print the compiler's target machine (for example,
   5941      `i686-pc-linux-gnu')--and don't do anything else.
   5942 
   5943 `-dumpversion'
   5944      Print the compiler version (for example, `3.0')--and don't do
   5945      anything else.
   5946 
   5947 `-dumpspecs'
   5948      Print the compiler's built-in specs--and don't do anything else.
   5949      (This is used when GCC itself is being built.)  *Note Spec Files::.
   5950 
   5951 `-fno-eliminate-unused-debug-types'
   5952      Normally, when producing DWARF 2 output, GCC avoids producing
   5953      debug symbol output for types that are nowhere used in the source
   5954      file being compiled.  Sometimes it is useful to have GCC emit
   5955      debugging information for all types declared in a compilation
   5956      unit, regardless of whether or not they are actually used in that
   5957      compilation unit, for example if, in the debugger, you want to
   5958      cast a value to a type that is not actually used in your program
   5959      (but is declared).  More often, however, this results in a
   5960      significant amount of wasted space.
   5961 
   5962 
   5963 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
   5964 
   5965 3.10 Options That Control Optimization
   5966 ======================================
   5967 
   5968 These options control various sorts of optimizations.
   5969 
   5970  Without any optimization option, the compiler's goal is to reduce the
   5971 cost of compilation and to make debugging produce the expected results.
   5972 Statements are independent: if you stop the program with a breakpoint
   5973 between statements, you can then assign a new value to any variable or
   5974 change the program counter to any other statement in the function and
   5975 get exactly the results you expect from the source code.
   5976 
   5977  Turning on optimization flags makes the compiler attempt to improve
   5978 the performance and/or code size at the expense of compilation time and
   5979 possibly the ability to debug the program.
   5980 
   5981  The compiler performs optimization based on the knowledge it has of the
   5982 program.  Compiling multiple files at once to a single output file mode
   5983 allows the compiler to use information gained from all of the files
   5984 when compiling each of them.
   5985 
   5986  Not all optimizations are controlled directly by a flag.  Only
   5987 optimizations that have a flag are listed in this section.
   5988 
   5989  Most optimizations are only enabled if an `-O' level is set on the
   5990 command line.  Otherwise they are disabled, even if individual
   5991 optimization flags are specified.
   5992 
   5993  Depending on the target and how GCC was configured, a slightly
   5994 different set of optimizations may be enabled at each `-O' level than
   5995 those listed here.  You can invoke GCC with `-Q --help=optimizers' to
   5996 find out the exact set of optimizations that are enabled at each level.
   5997 *Note Overall Options::, for examples.
   5998 
   5999 `-O'
   6000 `-O1'
   6001      Optimize.  Optimizing compilation takes somewhat more time, and a
   6002      lot more memory for a large function.
   6003 
   6004      With `-O', the compiler tries to reduce code size and execution
   6005      time, without performing any optimizations that take a great deal
   6006      of compilation time.
   6007 
   6008      `-O' turns on the following optimization flags:
   6009           -fauto-inc-dec
   6010           -fcompare-elim
   6011           -fcprop-registers
   6012           -fdce
   6013           -fdefer-pop
   6014           -fdelayed-branch
   6015           -fdse
   6016           -fguess-branch-probability
   6017           -fif-conversion2
   6018           -fif-conversion
   6019           -fipa-pure-const
   6020           -fipa-profile
   6021           -fipa-reference
   6022           -fmerge-constants
   6023           -fsplit-wide-types
   6024           -ftree-bit-ccp
   6025           -ftree-builtin-call-dce
   6026           -ftree-ccp
   6027           -ftree-ch
   6028           -ftree-copyrename
   6029           -ftree-dce
   6030           -ftree-dominator-opts
   6031           -ftree-dse
   6032           -ftree-forwprop
   6033           -ftree-fre
   6034           -ftree-phiprop
   6035           -ftree-slsr
   6036           -ftree-sra
   6037           -ftree-pta
   6038           -ftree-ter
   6039           -funit-at-a-time
   6040 
   6041      `-O' also turns on `-fomit-frame-pointer' on machines where doing
   6042      so does not interfere with debugging.
   6043 
   6044 `-O2'
   6045      Optimize even more.  GCC performs nearly all supported
   6046      optimizations that do not involve a space-speed tradeoff.  As
   6047      compared to `-O', this option increases both compilation time and
   6048      the performance of the generated code.
   6049 
   6050      `-O2' turns on all optimization flags specified by `-O'.  It also
   6051      turns on the following optimization flags:
   6052           -fthread-jumps
   6053           -falign-functions  -falign-jumps
   6054           -falign-loops  -falign-labels
   6055           -fcaller-saves
   6056           -fcrossjumping
   6057           -fcse-follow-jumps  -fcse-skip-blocks
   6058           -fdelete-null-pointer-checks
   6059           -fdevirtualize
   6060           -fexpensive-optimizations
   6061           -fgcse  -fgcse-lm
   6062           -fhoist-adjacent-loads
   6063           -finline-small-functions
   6064           -findirect-inlining
   6065           -fipa-sra
   6066           -foptimize-sibling-calls
   6067           -fpartial-inlining
   6068           -fpeephole2
   6069           -fregmove
   6070           -freorder-blocks  -freorder-functions
   6071           -frerun-cse-after-loop
   6072           -fsched-interblock  -fsched-spec
   6073           -fschedule-insns  -fschedule-insns2
   6074           -fstrict-aliasing -fstrict-overflow
   6075           -ftree-switch-conversion -ftree-tail-merge
   6076           -ftree-pre
   6077           -ftree-vrp
   6078 
   6079      Please note the warning under `-fgcse' about invoking `-O2' on
   6080      programs that use computed gotos.
   6081 
   6082 `-O3'
   6083      Optimize yet more.  `-O3' turns on all optimizations specified by
   6084      `-O2' and also turns on the `-finline-functions',
   6085      `-funswitch-loops', `-fpredictive-commoning',
   6086      `-fgcse-after-reload', `-ftree-vectorize', `-fvect-cost-model',
   6087      `-ftree-partial-pre' and `-fipa-cp-clone' options.
   6088 
   6089 `-O0'
   6090      Reduce compilation time and make debugging produce the expected
   6091      results.  This is the default.
   6092 
   6093 `-Os'
   6094      Optimize for size.  `-Os' enables all `-O2' optimizations that do
   6095      not typically increase code size.  It also performs further
   6096      optimizations designed to reduce code size.
   6097 
   6098      `-Os' disables the following optimization flags:
   6099           -falign-functions  -falign-jumps  -falign-loops
   6100           -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
   6101           -fprefetch-loop-arrays  -ftree-vect-loop-version
   6102 
   6103 `-Ofast'
   6104      Disregard strict standards compliance.  `-Ofast' enables all `-O3'
   6105      optimizations.  It also enables optimizations that are not valid
   6106      for all standard-compliant programs.  It turns on `-ffast-math'
   6107      and the Fortran-specific `-fno-protect-parens' and
   6108      `-fstack-arrays'.
   6109 
   6110 `-Og'
   6111      Optimize debugging experience.  `-Og' enables optimizations that
   6112      do not interfere with debugging. It should be the optimization
   6113      level of choice for the standard edit-compile-debug cycle, offering
   6114      a reasonable level of optimization while maintaining fast
   6115      compilation and a good debugging experience.
   6116 
   6117      If you use multiple `-O' options, with or without level numbers,
   6118      the last such option is the one that is effective.
   6119 
   6120  Options of the form `-fFLAG' specify machine-independent flags.  Most
   6121 flags have both positive and negative forms; the negative form of
   6122 `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
   6123 listed--the one you typically use.  You can figure out the other form
   6124 by either removing `no-' or adding it.
   6125 
   6126  The following options control specific optimizations.  They are either
   6127 activated by `-O' options or are related to ones that are.  You can use
   6128 the following flags in the rare cases when "fine-tuning" of
   6129 optimizations to be performed is desired.
   6130 
   6131 `-fno-default-inline'
   6132      Do not make member functions inline by default merely because they
   6133      are defined inside the class scope (C++ only).  Otherwise, when
   6134      you specify `-O', member functions defined inside class scope are
   6135      compiled inline by default; i.e., you don't need to add `inline'
   6136      in front of the member function name.
   6137 
   6138 `-fno-defer-pop'
   6139      Always pop the arguments to each function call as soon as that
   6140      function returns.  For machines that must pop arguments after a
   6141      function call, the compiler normally lets arguments accumulate on
   6142      the stack for several function calls and pops them all at once.
   6143 
   6144      Disabled at levels `-O', `-O2', `-O3', `-Os'.
   6145 
   6146 `-fforward-propagate'
   6147      Perform a forward propagation pass on RTL.  The pass tries to
   6148      combine two instructions and checks if the result can be
   6149      simplified.  If loop unrolling is active, two passes are performed
   6150      and the second is scheduled after loop unrolling.
   6151 
   6152      This option is enabled by default at optimization levels `-O',
   6153      `-O2', `-O3', `-Os'.
   6154 
   6155 `-ffp-contract=STYLE'
   6156      `-ffp-contract=off' disables floating-point expression contraction.
   6157      `-ffp-contract=fast' enables floating-point expression contraction
   6158      such as forming of fused multiply-add operations if the target has
   6159      native support for them.  `-ffp-contract=on' enables
   6160      floating-point expression contraction if allowed by the language
   6161      standard.  This is currently not implemented and treated equal to
   6162      `-ffp-contract=off'.
   6163 
   6164      The default is `-ffp-contract=fast'.
   6165 
   6166 `-fomit-frame-pointer'
   6167      Don't keep the frame pointer in a register for functions that
   6168      don't need one.  This avoids the instructions to save, set up and
   6169      restore frame pointers; it also makes an extra register available
   6170      in many functions.  *It also makes debugging impossible on some
   6171      machines.*
   6172 
   6173      On some machines, such as the VAX, this flag has no effect, because
   6174      the standard calling sequence automatically handles the frame
   6175      pointer and nothing is saved by pretending it doesn't exist.  The
   6176      machine-description macro `FRAME_POINTER_REQUIRED' controls
   6177      whether a target machine supports this flag.  *Note Register
   6178      Usage: (gccint)Registers.
   6179 
   6180      Starting with GCC version 4.6, the default setting (when not
   6181      optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin
   6182      x86 targets has been changed to `-fomit-frame-pointer'.  The
   6183      default can be reverted to `-fno-omit-frame-pointer' by
   6184      configuring GCC with the `--enable-frame-pointer' configure option.
   6185 
   6186      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6187 
   6188 `-foptimize-sibling-calls'
   6189      Optimize sibling and tail recursive calls.
   6190 
   6191      Enabled at levels `-O2', `-O3', `-Os'.
   6192 
   6193 `-fno-inline'
   6194      Do not expand any functions inline apart from those marked with
   6195      the `always_inline' attribute.  This is the default when not
   6196      optimizing.
   6197 
   6198      Single functions can be exempted from inlining by marking them
   6199      with the `noinline' attribute.
   6200 
   6201 `-finline-small-functions'
   6202      Integrate functions into their callers when their body is smaller
   6203      than expected function call code (so overall size of program gets
   6204      smaller).  The compiler heuristically decides which functions are
   6205      simple enough to be worth integrating in this way.  This inlining
   6206      applies to all functions, even those not declared inline.
   6207 
   6208      Enabled at level `-O2'.
   6209 
   6210 `-findirect-inlining'
   6211      Inline also indirect calls that are discovered to be known at
   6212      compile time thanks to previous inlining.  This option has any
   6213      effect only when inlining itself is turned on by the
   6214      `-finline-functions' or `-finline-small-functions' options.
   6215 
   6216      Enabled at level `-O2'.
   6217 
   6218 `-finline-functions'
   6219      Consider all functions for inlining, even if they are not declared
   6220      inline.  The compiler heuristically decides which functions are
   6221      worth integrating in this way.
   6222 
   6223      If all calls to a given function are integrated, and the function
   6224      is declared `static', then the function is normally not output as
   6225      assembler code in its own right.
   6226 
   6227      Enabled at level `-O3'.
   6228 
   6229 `-finline-functions-called-once'
   6230      Consider all `static' functions called once for inlining into their
   6231      caller even if they are not marked `inline'.  If a call to a given
   6232      function is integrated, then the function is not output as
   6233      assembler code in its own right.
   6234 
   6235      Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
   6236 
   6237 `-fearly-inlining'
   6238      Inline functions marked by `always_inline' and functions whose
   6239      body seems smaller than the function call overhead early before
   6240      doing `-fprofile-generate' instrumentation and real inlining pass.
   6241      Doing so makes profiling significantly cheaper and usually
   6242      inlining faster on programs having large chains of nested wrapper
   6243      functions.
   6244 
   6245      Enabled by default.
   6246 
   6247 `-fipa-sra'
   6248      Perform interprocedural scalar replacement of aggregates, removal
   6249      of unused parameters and replacement of parameters passed by
   6250      reference by parameters passed by value.
   6251 
   6252      Enabled at levels `-O2', `-O3' and `-Os'.
   6253 
   6254 `-finline-limit=N'
   6255      By default, GCC limits the size of functions that can be inlined.
   6256      This flag allows coarse control of this limit.  N is the size of
   6257      functions that can be inlined in number of pseudo instructions.
   6258 
   6259      Inlining is actually controlled by a number of parameters, which
   6260      may be specified individually by using `--param NAME=VALUE'.  The
   6261      `-finline-limit=N' option sets some of these parameters as follows:
   6262 
   6263     `max-inline-insns-single'
   6264           is set to N/2.
   6265 
   6266     `max-inline-insns-auto'
   6267           is set to N/2.
   6268 
   6269      See below for a documentation of the individual parameters
   6270      controlling inlining and for the defaults of these parameters.
   6271 
   6272      _Note:_ there may be no value to `-finline-limit' that results in
   6273      default behavior.
   6274 
   6275      _Note:_ pseudo instruction represents, in this particular context,
   6276      an abstract measurement of function's size.  In no way does it
   6277      represent a count of assembly instructions and as such its exact
   6278      meaning might change from one release to an another.
   6279 
   6280 `-fno-keep-inline-dllexport'
   6281      This is a more fine-grained version of `-fkeep-inline-functions',
   6282      which applies only to functions that are declared using the
   6283      `dllexport' attribute or declspec (*Note Declaring Attributes of
   6284      Functions: Function Attributes.)
   6285 
   6286 `-fkeep-inline-functions'
   6287      In C, emit `static' functions that are declared `inline' into the
   6288      object file, even if the function has been inlined into all of its
   6289      callers.  This switch does not affect functions using the `extern
   6290      inline' extension in GNU C90.  In C++, emit any and all inline
   6291      functions into the object file.
   6292 
   6293 `-fkeep-static-consts'
   6294      Emit variables declared `static const' when optimization isn't
   6295      turned on, even if the variables aren't referenced.
   6296 
   6297      GCC enables this option by default.  If you want to force the
   6298      compiler to check if a variable is referenced, regardless of
   6299      whether or not optimization is turned on, use the
   6300      `-fno-keep-static-consts' option.
   6301 
   6302 `-fmerge-constants'
   6303      Attempt to merge identical constants (string constants and
   6304      floating-point constants) across compilation units.
   6305 
   6306      This option is the default for optimized compilation if the
   6307      assembler and linker support it.  Use `-fno-merge-constants' to
   6308      inhibit this behavior.
   6309 
   6310      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6311 
   6312 `-fmerge-all-constants'
   6313      Attempt to merge identical constants and identical variables.
   6314 
   6315      This option implies `-fmerge-constants'.  In addition to
   6316      `-fmerge-constants' this considers e.g. even constant initialized
   6317      arrays or initialized constant variables with integral or
   6318      floating-point types.  Languages like C or C++ require each
   6319      variable, including multiple instances of the same variable in
   6320      recursive calls, to have distinct locations, so using this option
   6321      results in non-conforming behavior.
   6322 
   6323 `-fmodulo-sched'
   6324      Perform swing modulo scheduling immediately before the first
   6325      scheduling pass.  This pass looks at innermost loops and reorders
   6326      their instructions by overlapping different iterations.
   6327 
   6328 `-fmodulo-sched-allow-regmoves'
   6329      Perform more aggressive SMS-based modulo scheduling with register
   6330      moves allowed.  By setting this flag certain anti-dependences
   6331      edges are deleted, which triggers the generation of reg-moves
   6332      based on the life-range analysis.  This option is effective only
   6333      with `-fmodulo-sched' enabled.
   6334 
   6335 `-fno-branch-count-reg'
   6336      Do not use "decrement and branch" instructions on a count register,
   6337      but instead generate a sequence of instructions that decrement a
   6338      register, compare it against zero, then branch based upon the
   6339      result.  This option is only meaningful on architectures that
   6340      support such instructions, which include x86, PowerPC, IA-64 and
   6341      S/390.
   6342 
   6343      The default is `-fbranch-count-reg'.
   6344 
   6345 `-fno-function-cse'
   6346      Do not put function addresses in registers; make each instruction
   6347      that calls a constant function contain the function's address
   6348      explicitly.
   6349 
   6350      This option results in less efficient code, but some strange hacks
   6351      that alter the assembler output may be confused by the
   6352      optimizations performed when this option is not used.
   6353 
   6354      The default is `-ffunction-cse'
   6355 
   6356 `-fno-zero-initialized-in-bss'
   6357      If the target supports a BSS section, GCC by default puts
   6358      variables that are initialized to zero into BSS.  This can save
   6359      space in the resulting code.
   6360 
   6361      This option turns off this behavior because some programs
   6362      explicitly rely on variables going to the data section--e.g., so
   6363      that the resulting executable can find the beginning of that
   6364      section and/or make assumptions based on that.
   6365 
   6366      The default is `-fzero-initialized-in-bss'.
   6367 
   6368 `-fmudflap -fmudflapth -fmudflapir'
   6369      For front-ends that support it (C and C++), instrument all risky
   6370      pointer/array dereferencing operations, some standard library
   6371      string/heap functions, and some other associated constructs with
   6372      range/validity tests.  Modules so instrumented should be immune to
   6373      buffer overflows, invalid heap use, and some other classes of C/C++
   6374      programming errors.  The instrumentation relies on a separate
   6375      runtime library (`libmudflap'), which is linked into a program if
   6376      `-fmudflap' is given at link time.  Run-time behavior of the
   6377      instrumented program is controlled by the `MUDFLAP_OPTIONS'
   6378      environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
   6379      its options.
   6380 
   6381      Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
   6382      your program is multi-threaded.  Use `-fmudflapir', in addition to
   6383      `-fmudflap' or `-fmudflapth', if instrumentation should ignore
   6384      pointer reads.  This produces less instrumentation (and therefore
   6385      faster execution) and still provides some protection against
   6386      outright memory corrupting writes, but allows erroneously read
   6387      data to propagate within a program.
   6388 
   6389 `-fthread-jumps'
   6390      Perform optimizations that check to see if a jump branches to a
   6391      location where another comparison subsumed by the first is found.
   6392      If so, the first branch is redirected to either the destination of
   6393      the second branch or a point immediately following it, depending
   6394      on whether the condition is known to be true or false.
   6395 
   6396      Enabled at levels `-O2', `-O3', `-Os'.
   6397 
   6398 `-fsplit-wide-types'
   6399      When using a type that occupies multiple registers, such as `long
   6400      long' on a 32-bit system, split the registers apart and allocate
   6401      them independently.  This normally generates better code for those
   6402      types, but may make debugging more difficult.
   6403 
   6404      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6405 
   6406 `-fcse-follow-jumps'
   6407      In common subexpression elimination (CSE), scan through jump
   6408      instructions when the target of the jump is not reached by any
   6409      other path.  For example, when CSE encounters an `if' statement
   6410      with an `else' clause, CSE follows the jump when the condition
   6411      tested is false.
   6412 
   6413      Enabled at levels `-O2', `-O3', `-Os'.
   6414 
   6415 `-fcse-skip-blocks'
   6416      This is similar to `-fcse-follow-jumps', but causes CSE to follow
   6417      jumps that conditionally skip over blocks.  When CSE encounters a
   6418      simple `if' statement with no else clause, `-fcse-skip-blocks'
   6419      causes CSE to follow the jump around the body of the `if'.
   6420 
   6421      Enabled at levels `-O2', `-O3', `-Os'.
   6422 
   6423 `-frerun-cse-after-loop'
   6424      Re-run common subexpression elimination after loop optimizations
   6425      are performed.
   6426 
   6427      Enabled at levels `-O2', `-O3', `-Os'.
   6428 
   6429 `-fgcse'
   6430      Perform a global common subexpression elimination pass.  This pass
   6431      also performs global constant and copy propagation.
   6432 
   6433      _Note:_ When compiling a program using computed gotos, a GCC
   6434      extension, you may get better run-time performance if you disable
   6435      the global common subexpression elimination pass by adding
   6436      `-fno-gcse' to the command line.
   6437 
   6438      Enabled at levels `-O2', `-O3', `-Os'.
   6439 
   6440 `-fgcse-lm'
   6441      When `-fgcse-lm' is enabled, global common subexpression
   6442      elimination attempts to move loads that are only killed by stores
   6443      into themselves.  This allows a loop containing a load/store
   6444      sequence to be changed to a load outside the loop, and a
   6445      copy/store within the loop.
   6446 
   6447      Enabled by default when `-fgcse' is enabled.
   6448 
   6449 `-fgcse-sm'
   6450      When `-fgcse-sm' is enabled, a store motion pass is run after
   6451      global common subexpression elimination.  This pass attempts to
   6452      move stores out of loops.  When used in conjunction with
   6453      `-fgcse-lm', loops containing a load/store sequence can be changed
   6454      to a load before the loop and a store after the loop.
   6455 
   6456      Not enabled at any optimization level.
   6457 
   6458 `-fgcse-las'
   6459      When `-fgcse-las' is enabled, the global common subexpression
   6460      elimination pass eliminates redundant loads that come after stores
   6461      to the same memory location (both partial and full redundancies).
   6462 
   6463      Not enabled at any optimization level.
   6464 
   6465 `-fgcse-after-reload'
   6466      When `-fgcse-after-reload' is enabled, a redundant load elimination
   6467      pass is performed after reload.  The purpose of this pass is to
   6468      clean up redundant spilling.
   6469 
   6470 `-faggressive-loop-optimizations'
   6471      This option tells the loop optimizer to use language constraints to
   6472      derive bounds for the number of iterations of a loop.  This
   6473      assumes that loop code does not invoke undefined behavior by for
   6474      example causing signed integer overflows or out-of-bound array
   6475      accesses.  The bounds for the number of iterations of a loop are
   6476      used to guide loop unrolling and peeling and loop exit test
   6477      optimizations.  This option is enabled by default.
   6478 
   6479 `-funsafe-loop-optimizations'
   6480      This option tells the loop optimizer to assume that loop indices
   6481      do not overflow, and that loops with nontrivial exit condition are
   6482      not infinite.  This enables a wider range of loop optimizations
   6483      even if the loop optimizer itself cannot prove that these
   6484      assumptions are valid.  If you use `-Wunsafe-loop-optimizations',
   6485      the compiler warns you if it finds this kind of loop.
   6486 
   6487 `-fcrossjumping'
   6488      Perform cross-jumping transformation.  This transformation unifies
   6489      equivalent code and saves code size.  The resulting code may or
   6490      may not perform better than without cross-jumping.
   6491 
   6492      Enabled at levels `-O2', `-O3', `-Os'.
   6493 
   6494 `-fauto-inc-dec'
   6495      Combine increments or decrements of addresses with memory accesses.
   6496      This pass is always skipped on architectures that do not have
   6497      instructions to support this.  Enabled by default at `-O' and
   6498      higher on architectures that support this.
   6499 
   6500 `-fdce'
   6501      Perform dead code elimination (DCE) on RTL.  Enabled by default at
   6502      `-O' and higher.
   6503 
   6504 `-fdse'
   6505      Perform dead store elimination (DSE) on RTL.  Enabled by default
   6506      at `-O' and higher.
   6507 
   6508 `-fif-conversion'
   6509      Attempt to transform conditional jumps into branch-less
   6510      equivalents.  This includes use of conditional moves, min, max,
   6511      set flags and abs instructions, and some tricks doable by standard
   6512      arithmetics.  The use of conditional execution on chips where it
   6513      is available is controlled by `if-conversion2'.
   6514 
   6515      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6516 
   6517 `-fif-conversion2'
   6518      Use conditional execution (where available) to transform
   6519      conditional jumps into branch-less equivalents.
   6520 
   6521      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6522 
   6523 `-fdelete-null-pointer-checks'
   6524      Assume that programs cannot safely dereference null pointers, and
   6525      that no code or data element resides there.  This enables simple
   6526      constant folding optimizations at all optimization levels.  In
   6527      addition, other optimization passes in GCC use this flag to
   6528      control global dataflow analyses that eliminate useless checks for
   6529      null pointers; these assume that if a pointer is checked after it
   6530      has already been dereferenced, it cannot be null.
   6531 
   6532      Note however that in some environments this assumption is not true.
   6533      Use `-fno-delete-null-pointer-checks' to disable this optimization
   6534      for programs that depend on that behavior.
   6535 
   6536      Some targets, especially embedded ones, disable this option at all
   6537      levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
   6538      `-O2', `-O3', `-Os'.  Passes that use the information are enabled
   6539      independently at different optimization levels.
   6540 
   6541 `-fdevirtualize'
   6542      Attempt to convert calls to virtual functions to direct calls.
   6543      This is done both within a procedure and interprocedurally as part
   6544      of indirect inlining (`-findirect-inlining') and interprocedural
   6545      constant propagation (`-fipa-cp').  Enabled at levels `-O2',
   6546      `-O3', `-Os'.
   6547 
   6548 `-fexpensive-optimizations'
   6549      Perform a number of minor optimizations that are relatively
   6550      expensive.
   6551 
   6552      Enabled at levels `-O2', `-O3', `-Os'.
   6553 
   6554 `-free'
   6555      Attempt to remove redundant extension instructions.  This is
   6556      especially helpful for the x86-64 architecture, which implicitly
   6557      zero-extends in 64-bit registers after writing to their lower
   6558      32-bit half.
   6559 
   6560      Enabled for x86 at levels `-O2', `-O3'.
   6561 
   6562 `-foptimize-register-move'
   6563 `-fregmove'
   6564      Attempt to reassign register numbers in move instructions and as
   6565      operands of other simple instructions in order to maximize the
   6566      amount of register tying.  This is especially helpful on machines
   6567      with two-operand instructions.
   6568 
   6569      Note `-fregmove' and `-foptimize-register-move' are the same
   6570      optimization.
   6571 
   6572      Enabled at levels `-O2', `-O3', `-Os'.
   6573 
   6574 `-fira-algorithm=ALGORITHM'
   6575      Use the specified coloring algorithm for the integrated register
   6576      allocator.  The ALGORITHM argument can be `priority', which
   6577      specifies Chow's priority coloring, or `CB', which specifies
   6578      Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
   6579      implemented for all architectures, but for those targets that do
   6580      support it, it is the default because it generates better code.
   6581 
   6582 `-fira-region=REGION'
   6583      Use specified regions for the integrated register allocator.  The
   6584      REGION argument should be one of the following:
   6585 
   6586     `all'
   6587           Use all loops as register allocation regions.  This can give
   6588           the best results for machines with a small and/or irregular
   6589           register set.
   6590 
   6591     `mixed'
   6592           Use all loops except for loops with small register pressure
   6593           as the regions.  This value usually gives the best results in
   6594           most cases and for most architectures, and is enabled by
   6595           default when compiling with optimization for speed (`-O',
   6596           `-O2', ...).
   6597 
   6598     `one'
   6599           Use all functions as a single region.  This typically results
   6600           in the smallest code size, and is enabled by default for
   6601           `-Os' or `-O0'.
   6602 
   6603 
   6604 `-fira-hoist-pressure'
   6605      Use IRA to evaluate register pressure in the code hoisting pass for
   6606      decisions to hoist expressions.  This option usually results in
   6607      smaller code, but it can slow the compiler down.
   6608 
   6609      This option is enabled at level `-Os' for all targets.
   6610 
   6611 `-fira-loop-pressure'
   6612      Use IRA to evaluate register pressure in loops for decisions to
   6613      move loop invariants.  This option usually results in generation
   6614      of faster and smaller code on machines with large register files
   6615      (>= 32 registers), but it can slow the compiler down.
   6616 
   6617      This option is enabled at level `-O3' for some targets.
   6618 
   6619 `-fno-ira-share-save-slots'
   6620      Disable sharing of stack slots used for saving call-used hard
   6621      registers living through a call.  Each hard register gets a
   6622      separate stack slot, and as a result function stack frames are
   6623      larger.
   6624 
   6625 `-fno-ira-share-spill-slots'
   6626      Disable sharing of stack slots allocated for pseudo-registers.
   6627      Each pseudo-register that does not get a hard register gets a
   6628      separate stack slot, and as a result function stack frames are
   6629      larger.
   6630 
   6631 `-fira-verbose=N'
   6632      Control the verbosity of the dump file for the integrated register
   6633      allocator.  The default value is 5.  If the value N is greater or
   6634      equal to 10, the dump output is sent to stderr using the same
   6635      format as N minus 10.
   6636 
   6637 `-fdelayed-branch'
   6638      If supported for the target machine, attempt to reorder
   6639      instructions to exploit instruction slots available after delayed
   6640      branch instructions.
   6641 
   6642      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6643 
   6644 `-fschedule-insns'
   6645      If supported for the target machine, attempt to reorder
   6646      instructions to eliminate execution stalls due to required data
   6647      being unavailable.  This helps machines that have slow floating
   6648      point or memory load instructions by allowing other instructions
   6649      to be issued until the result of the load or floating-point
   6650      instruction is required.
   6651 
   6652      Enabled at levels `-O2', `-O3'.
   6653 
   6654 `-fschedule-insns2'
   6655      Similar to `-fschedule-insns', but requests an additional pass of
   6656      instruction scheduling after register allocation has been done.
   6657      This is especially useful on machines with a relatively small
   6658      number of registers and where memory load instructions take more
   6659      than one cycle.
   6660 
   6661      Enabled at levels `-O2', `-O3', `-Os'.
   6662 
   6663 `-fno-sched-interblock'
   6664      Don't schedule instructions across basic blocks.  This is normally
   6665      enabled by default when scheduling before register allocation, i.e.
   6666      with `-fschedule-insns' or at `-O2' or higher.
   6667 
   6668 `-fno-sched-spec'
   6669      Don't allow speculative motion of non-load instructions.  This is
   6670      normally enabled by default when scheduling before register
   6671      allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
   6672 
   6673 `-fsched-pressure'
   6674      Enable register pressure sensitive insn scheduling before register
   6675      allocation.  This only makes sense when scheduling before register
   6676      allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or
   6677      higher.  Usage of this option can improve the generated code and
   6678      decrease its size by preventing register pressure increase above
   6679      the number of available hard registers and subsequent spills in
   6680      register allocation.
   6681 
   6682 `-fsched-spec-load'
   6683      Allow speculative motion of some load instructions.  This only
   6684      makes sense when scheduling before register allocation, i.e. with
   6685      `-fschedule-insns' or at `-O2' or higher.
   6686 
   6687 `-fsched-spec-load-dangerous'
   6688      Allow speculative motion of more load instructions.  This only
   6689      makes sense when scheduling before register allocation, i.e. with
   6690      `-fschedule-insns' or at `-O2' or higher.
   6691 
   6692 `-fsched-stalled-insns'
   6693 `-fsched-stalled-insns=N'
   6694      Define how many insns (if any) can be moved prematurely from the
   6695      queue of stalled insns into the ready list during the second
   6696      scheduling pass.  `-fno-sched-stalled-insns' means that no insns
   6697      are moved prematurely, `-fsched-stalled-insns=0' means there is no
   6698      limit on how many queued insns can be moved prematurely.
   6699      `-fsched-stalled-insns' without a value is equivalent to
   6700      `-fsched-stalled-insns=1'.
   6701 
   6702 `-fsched-stalled-insns-dep'
   6703 `-fsched-stalled-insns-dep=N'
   6704      Define how many insn groups (cycles) are examined for a dependency
   6705      on a stalled insn that is a candidate for premature removal from
   6706      the queue of stalled insns.  This has an effect only during the
   6707      second scheduling pass, and only if `-fsched-stalled-insns' is
   6708      used.  `-fno-sched-stalled-insns-dep' is equivalent to
   6709      `-fsched-stalled-insns-dep=0'.  `-fsched-stalled-insns-dep'
   6710      without a value is equivalent to `-fsched-stalled-insns-dep=1'.
   6711 
   6712 `-fsched2-use-superblocks'
   6713      When scheduling after register allocation, use superblock
   6714      scheduling.  This allows motion across basic block boundaries,
   6715      resulting in faster schedules.  This option is experimental, as
   6716      not all machine descriptions used by GCC model the CPU closely
   6717      enough to avoid unreliable results from the algorithm.
   6718 
   6719      This only makes sense when scheduling after register allocation,
   6720      i.e. with `-fschedule-insns2' or at `-O2' or higher.
   6721 
   6722 `-fsched-group-heuristic'
   6723      Enable the group heuristic in the scheduler.  This heuristic favors
   6724      the instruction that belongs to a schedule group.  This is enabled
   6725      by default when scheduling is enabled, i.e. with `-fschedule-insns'
   6726      or `-fschedule-insns2' or at `-O2' or higher.
   6727 
   6728 `-fsched-critical-path-heuristic'
   6729      Enable the critical-path heuristic in the scheduler.  This
   6730      heuristic favors instructions on the critical path.  This is
   6731      enabled by default when scheduling is enabled, i.e. with
   6732      `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
   6733 
   6734 `-fsched-spec-insn-heuristic'
   6735      Enable the speculative instruction heuristic in the scheduler.
   6736      This heuristic favors speculative instructions with greater
   6737      dependency weakness.  This is enabled by default when scheduling
   6738      is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
   6739      or at `-O2' or higher.
   6740 
   6741 `-fsched-rank-heuristic'
   6742      Enable the rank heuristic in the scheduler.  This heuristic favors
   6743      the instruction belonging to a basic block with greater size or
   6744      frequency.  This is enabled by default when scheduling is enabled,
   6745      i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
   6746      or higher.
   6747 
   6748 `-fsched-last-insn-heuristic'
   6749      Enable the last-instruction heuristic in the scheduler.  This
   6750      heuristic favors the instruction that is less dependent on the
   6751      last instruction scheduled.  This is enabled by default when
   6752      scheduling is enabled, i.e. with `-fschedule-insns' or
   6753      `-fschedule-insns2' or at `-O2' or higher.
   6754 
   6755 `-fsched-dep-count-heuristic'
   6756      Enable the dependent-count heuristic in the scheduler.  This
   6757      heuristic favors the instruction that has more instructions
   6758      depending on it.  This is enabled by default when scheduling is
   6759      enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
   6760      at `-O2' or higher.
   6761 
   6762 `-freschedule-modulo-scheduled-loops'
   6763      Modulo scheduling is performed before traditional scheduling.  If
   6764      a loop is modulo scheduled, later scheduling passes may change its
   6765      schedule.  Use this option to control that behavior.
   6766 
   6767 `-fselective-scheduling'
   6768      Schedule instructions using selective scheduling algorithm.
   6769      Selective scheduling runs instead of the first scheduler pass.
   6770 
   6771 `-fselective-scheduling2'
   6772      Schedule instructions using selective scheduling algorithm.
   6773      Selective scheduling runs instead of the second scheduler pass.
   6774 
   6775 `-fsel-sched-pipelining'
   6776      Enable software pipelining of innermost loops during selective
   6777      scheduling.  This option has no effect unless one of
   6778      `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
   6779 
   6780 `-fsel-sched-pipelining-outer-loops'
   6781      When pipelining loops during selective scheduling, also pipeline
   6782      outer loops.  This option has no effect unless
   6783      `-fsel-sched-pipelining' is turned on.
   6784 
   6785 `-fshrink-wrap'
   6786      Emit function prologues only before parts of the function that
   6787      need it, rather than at the top of the function.  This flag is
   6788      enabled by default at `-O' and higher.
   6789 
   6790 `-fcaller-saves'
   6791      Enable allocation of values to registers that are clobbered by
   6792      function calls, by emitting extra instructions to save and restore
   6793      the registers around such calls.  Such allocation is done only
   6794      when it seems to result in better code.
   6795 
   6796      This option is always enabled by default on certain machines,
   6797      usually those which have no call-preserved registers to use
   6798      instead.
   6799 
   6800      Enabled at levels `-O2', `-O3', `-Os'.
   6801 
   6802 `-fcombine-stack-adjustments'
   6803      Tracks stack adjustments (pushes and pops) and stack memory
   6804      references and then tries to find ways to combine them.
   6805 
   6806      Enabled by default at `-O1' and higher.
   6807 
   6808 `-fconserve-stack'
   6809      Attempt to minimize stack usage.  The compiler attempts to use less
   6810      stack space, even if that makes the program slower.  This option
   6811      implies setting the `large-stack-frame' parameter to 100 and the
   6812      `large-stack-frame-growth' parameter to 400.
   6813 
   6814 `-ftree-reassoc'
   6815      Perform reassociation on trees.  This flag is enabled by default
   6816      at `-O' and higher.
   6817 
   6818 `-ftree-pre'
   6819      Perform partial redundancy elimination (PRE) on trees.  This flag
   6820      is enabled by default at `-O2' and `-O3'.
   6821 
   6822 `-ftree-partial-pre'
   6823      Make partial redundancy elimination (PRE) more aggressive.  This
   6824      flag is enabled by default at `-O3'.
   6825 
   6826 `-ftree-forwprop'
   6827      Perform forward propagation on trees.  This flag is enabled by
   6828      default at `-O' and higher.
   6829 
   6830 `-ftree-fre'
   6831      Perform full redundancy elimination (FRE) on trees.  The difference
   6832      between FRE and PRE is that FRE only considers expressions that
   6833      are computed on all paths leading to the redundant computation.
   6834      This analysis is faster than PRE, though it exposes fewer
   6835      redundancies.  This flag is enabled by default at `-O' and higher.
   6836 
   6837 `-ftree-phiprop'
   6838      Perform hoisting of loads from conditional pointers on trees.  This
   6839      pass is enabled by default at `-O' and higher.
   6840 
   6841 `-fhoist-adjacent-loads'
   6842      Speculatively hoist loads from both branches of an if-then-else if
   6843      the loads are from adjacent locations in the same structure and
   6844      the target architecture has a conditional move instruction.  This
   6845      flag is enabled by default at `-O2' and higher.
   6846 
   6847 `-ftree-copy-prop'
   6848      Perform copy propagation on trees.  This pass eliminates
   6849      unnecessary copy operations.  This flag is enabled by default at
   6850      `-O' and higher.
   6851 
   6852 `-fipa-pure-const'
   6853      Discover which functions are pure or constant.  Enabled by default
   6854      at `-O' and higher.
   6855 
   6856 `-fipa-reference'
   6857      Discover which static variables do not escape the compilation unit.
   6858      Enabled by default at `-O' and higher.
   6859 
   6860 `-fipa-pta'
   6861      Perform interprocedural pointer analysis and interprocedural
   6862      modification and reference analysis.  This option can cause
   6863      excessive memory and compile-time usage on large compilation
   6864      units.  It is not enabled by default at any optimization level.
   6865 
   6866 `-fipa-profile'
   6867      Perform interprocedural profile propagation.  The functions called
   6868      only from cold functions are marked as cold. Also functions
   6869      executed once (such as `cold', `noreturn', static constructors or
   6870      destructors) are identified. Cold functions and loop less parts of
   6871      functions executed once are then optimized for size.  Enabled by
   6872      default at `-O' and higher.
   6873 
   6874 `-fipa-cp'
   6875      Perform interprocedural constant propagation.  This optimization
   6876      analyzes the program to determine when values passed to functions
   6877      are constants and then optimizes accordingly.  This optimization
   6878      can substantially increase performance if the application has
   6879      constants passed to functions.  This flag is enabled by default at
   6880      `-O2', `-Os' and `-O3'.
   6881 
   6882 `-fipa-cp-clone'
   6883      Perform function cloning to make interprocedural constant
   6884      propagation stronger.  When enabled, interprocedural constant
   6885      propagation performs function cloning when externally visible
   6886      function can be called with constant arguments.  Because this
   6887      optimization can create multiple copies of functions, it may
   6888      significantly increase code size (see `--param
   6889      ipcp-unit-growth=VALUE').  This flag is enabled by default at
   6890      `-O3'.
   6891 
   6892 `-ftree-sink'
   6893      Perform forward store motion  on trees.  This flag is enabled by
   6894      default at `-O' and higher.
   6895 
   6896 `-ftree-bit-ccp'
   6897      Perform sparse conditional bit constant propagation on trees and
   6898      propagate pointer alignment information.  This pass only operates
   6899      on local scalar variables and is enabled by default at `-O' and
   6900      higher.  It requires that `-ftree-ccp' is enabled.
   6901 
   6902 `-ftree-ccp'
   6903      Perform sparse conditional constant propagation (CCP) on trees.
   6904      This pass only operates on local scalar variables and is enabled
   6905      by default at `-O' and higher.
   6906 
   6907 `-ftree-switch-conversion'
   6908      Perform conversion of simple initializations in a switch to
   6909      initializations from a scalar array.  This flag is enabled by
   6910      default at `-O2' and higher.
   6911 
   6912 `-ftree-tail-merge'
   6913      Look for identical code sequences.  When found, replace one with a
   6914      jump to the other.  This optimization is known as tail merging or
   6915      cross jumping.  This flag is enabled by default at `-O2' and
   6916      higher.  The compilation time in this pass can be limited using
   6917      `max-tail-merge-comparisons' parameter and
   6918      `max-tail-merge-iterations' parameter.
   6919 
   6920 `-ftree-dce'
   6921      Perform dead code elimination (DCE) on trees.  This flag is
   6922      enabled by default at `-O' and higher.
   6923 
   6924 `-ftree-builtin-call-dce'
   6925      Perform conditional dead code elimination (DCE) for calls to
   6926      built-in functions that may set `errno' but are otherwise
   6927      side-effect free.  This flag is enabled by default at `-O2' and
   6928      higher if `-Os' is not also specified.
   6929 
   6930 `-ftree-dominator-opts'
   6931      Perform a variety of simple scalar cleanups (constant/copy
   6932      propagation, redundancy elimination, range propagation and
   6933      expression simplification) based on a dominator tree traversal.
   6934      This also performs jump threading (to reduce jumps to jumps). This
   6935      flag is enabled by default at `-O' and higher.
   6936 
   6937 `-ftree-dse'
   6938      Perform dead store elimination (DSE) on trees.  A dead store is a
   6939      store into a memory location that is later overwritten by another
   6940      store without any intervening loads.  In this case the earlier
   6941      store can be deleted.  This flag is enabled by default at `-O' and
   6942      higher.
   6943 
   6944 `-ftree-ch'
   6945      Perform loop header copying on trees.  This is beneficial since it
   6946      increases effectiveness of code motion optimizations.  It also
   6947      saves one jump.  This flag is enabled by default at `-O' and
   6948      higher.  It is not enabled for `-Os', since it usually increases
   6949      code size.
   6950 
   6951 `-ftree-loop-optimize'
   6952      Perform loop optimizations on trees.  This flag is enabled by
   6953      default at `-O' and higher.
   6954 
   6955 `-ftree-loop-linear'
   6956      Perform loop interchange transformations on tree.  Same as
   6957      `-floop-interchange'.  To use this code transformation, GCC has to
   6958      be configured with `--with-ppl' and `--with-cloog' to enable the
   6959      Graphite loop transformation infrastructure.
   6960 
   6961 `-floop-interchange'
   6962      Perform loop interchange transformations on loops.  Interchanging
   6963      two nested loops switches the inner and outer loops.  For example,
   6964      given a loop like:
   6965           DO J = 1, M
   6966             DO I = 1, N
   6967               A(J, I) = A(J, I) * C
   6968             ENDDO
   6969           ENDDO
   6970      loop interchange transforms the loop as if it were written:
   6971           DO I = 1, N
   6972             DO J = 1, M
   6973               A(J, I) = A(J, I) * C
   6974             ENDDO
   6975           ENDDO
   6976      which can be beneficial when `N' is larger than the caches,
   6977      because in Fortran, the elements of an array are stored in memory
   6978      contiguously by column, and the original loop iterates over rows,
   6979      potentially creating at each access a cache miss.  This
   6980      optimization applies to all the languages supported by GCC and is
   6981      not limited to Fortran.  To use this code transformation, GCC has
   6982      to be configured with `--with-ppl' and `--with-cloog' to enable the
   6983      Graphite loop transformation infrastructure.
   6984 
   6985 `-floop-strip-mine'
   6986      Perform loop strip mining transformations on loops.  Strip mining
   6987      splits a loop into two nested loops.  The outer loop has strides
   6988      equal to the strip size and the inner loop has strides of the
   6989      original loop within a strip.  The strip length can be changed
   6990      using the `loop-block-tile-size' parameter.  For example, given a
   6991      loop like:
   6992           DO I = 1, N
   6993             A(I) = A(I) + C
   6994           ENDDO
   6995      loop strip mining transforms the loop as if it were written:
   6996           DO II = 1, N, 51
   6997             DO I = II, min (II + 50, N)
   6998               A(I) = A(I) + C
   6999             ENDDO
   7000           ENDDO
   7001      This optimization applies to all the languages supported by GCC
   7002      and is not limited to Fortran.  To use this code transformation,
   7003      GCC has to be configured with `--with-ppl' and `--with-cloog' to
   7004      enable the Graphite loop transformation infrastructure.
   7005 
   7006 `-floop-block'
   7007      Perform loop blocking transformations on loops.  Blocking strip
   7008      mines each loop in the loop nest such that the memory accesses of
   7009      the element loops fit inside caches.  The strip length can be
   7010      changed using the `loop-block-tile-size' parameter.  For example,
   7011      given a loop like:
   7012           DO I = 1, N
   7013             DO J = 1, M
   7014               A(J, I) = B(I) + C(J)
   7015             ENDDO
   7016           ENDDO
   7017      loop blocking transforms the loop as if it were written:
   7018           DO II = 1, N, 51
   7019             DO JJ = 1, M, 51
   7020               DO I = II, min (II + 50, N)
   7021                 DO J = JJ, min (JJ + 50, M)
   7022                   A(J, I) = B(I) + C(J)
   7023                 ENDDO
   7024               ENDDO
   7025             ENDDO
   7026           ENDDO
   7027      which can be beneficial when `M' is larger than the caches,
   7028      because the innermost loop iterates over a smaller amount of data
   7029      which can be kept in the caches.  This optimization applies to all
   7030      the languages supported by GCC and is not limited to Fortran.  To
   7031      use this code transformation, GCC has to be configured with
   7032      `--with-ppl' and `--with-cloog' to enable the Graphite loop
   7033      transformation infrastructure.
   7034 
   7035 `-fgraphite-identity'
   7036      Enable the identity transformation for graphite.  For every SCoP
   7037      we generate the polyhedral representation and transform it back to
   7038      gimple.  Using `-fgraphite-identity' we can check the costs or
   7039      benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
   7040      minimal optimizations are also performed by the code generator
   7041      CLooG, like index splitting and dead code elimination in loops.
   7042 
   7043 `-floop-nest-optimize'
   7044      Enable the ISL based loop nest optimizer.  This is a generic loop
   7045      nest optimizer based on the Pluto optimization algorithms.  It
   7046      calculates a loop structure optimized for data-locality and
   7047      parallelism.  This option is experimental.
   7048 
   7049 `-floop-parallelize-all'
   7050      Use the Graphite data dependence analysis to identify loops that
   7051      can be parallelized.  Parallelize all the loops that can be
   7052      analyzed to not contain loop carried dependences without checking
   7053      that it is profitable to parallelize the loops.
   7054 
   7055 `-fcheck-data-deps'
   7056      Compare the results of several data dependence analyzers.  This
   7057      option is used for debugging the data dependence analyzers.
   7058 
   7059 `-ftree-loop-if-convert'
   7060      Attempt to transform conditional jumps in the innermost loops to
   7061      branch-less equivalents.  The intent is to remove control-flow from
   7062      the innermost loops in order to improve the ability of the
   7063      vectorization pass to handle these loops.  This is enabled by
   7064      default if vectorization is enabled.
   7065 
   7066 `-ftree-loop-if-convert-stores'
   7067      Attempt to also if-convert conditional jumps containing memory
   7068      writes.  This transformation can be unsafe for multi-threaded
   7069      programs as it transforms conditional memory writes into
   7070      unconditional memory writes.  For example,
   7071           for (i = 0; i < N; i++)
   7072             if (cond)
   7073               A[i] = expr;
   7074      is transformed to
   7075           for (i = 0; i < N; i++)
   7076             A[i] = cond ? expr : A[i];
   7077      potentially producing data races.
   7078 
   7079 `-ftree-loop-distribution'
   7080      Perform loop distribution.  This flag can improve cache
   7081      performance on big loop bodies and allow further loop
   7082      optimizations, like parallelization or vectorization, to take
   7083      place.  For example, the loop
   7084           DO I = 1, N
   7085             A(I) = B(I) + C
   7086             D(I) = E(I) * F
   7087           ENDDO
   7088      is transformed to
   7089           DO I = 1, N
   7090              A(I) = B(I) + C
   7091           ENDDO
   7092           DO I = 1, N
   7093              D(I) = E(I) * F
   7094           ENDDO
   7095 
   7096 `-ftree-loop-distribute-patterns'
   7097      Perform loop distribution of patterns that can be code generated
   7098      with calls to a library.  This flag is enabled by default at `-O3'.
   7099 
   7100      This pass distributes the initialization loops and generates a
   7101      call to memset zero.  For example, the loop
   7102           DO I = 1, N
   7103             A(I) = 0
   7104             B(I) = A(I) + I
   7105           ENDDO
   7106      is transformed to
   7107           DO I = 1, N
   7108              A(I) = 0
   7109           ENDDO
   7110           DO I = 1, N
   7111              B(I) = A(I) + I
   7112           ENDDO
   7113      and the initialization loop is transformed into a call to memset
   7114      zero.
   7115 
   7116 `-ftree-loop-im'
   7117      Perform loop invariant motion on trees.  This pass moves only
   7118      invariants that are hard to handle at RTL level (function calls,
   7119      operations that expand to nontrivial sequences of insns).  With
   7120      `-funswitch-loops' it also moves operands of conditions that are
   7121      invariant out of the loop, so that we can use just trivial
   7122      invariantness analysis in loop unswitching.  The pass also includes
   7123      store motion.
   7124 
   7125 `-ftree-loop-ivcanon'
   7126      Create a canonical counter for number of iterations in loops for
   7127      which determining number of iterations requires complicated
   7128      analysis.  Later optimizations then may determine the number
   7129      easily.  Useful especially in connection with unrolling.
   7130 
   7131 `-fivopts'
   7132      Perform induction variable optimizations (strength reduction,
   7133      induction variable merging and induction variable elimination) on
   7134      trees.
   7135 
   7136 `-ftree-parallelize-loops=n'
   7137      Parallelize loops, i.e., split their iteration space to run in n
   7138      threads.  This is only possible for loops whose iterations are
   7139      independent and can be arbitrarily reordered.  The optimization is
   7140      only profitable on multiprocessor machines, for loops that are
   7141      CPU-intensive, rather than constrained e.g. by memory bandwidth.
   7142      This option implies `-pthread', and thus is only supported on
   7143      targets that have support for `-pthread'.
   7144 
   7145 `-ftree-pta'
   7146      Perform function-local points-to analysis on trees.  This flag is
   7147      enabled by default at `-O' and higher.
   7148 
   7149 `-ftree-sra'
   7150      Perform scalar replacement of aggregates.  This pass replaces
   7151      structure references with scalars to prevent committing structures
   7152      to memory too early.  This flag is enabled by default at `-O' and
   7153      higher.
   7154 
   7155 `-ftree-copyrename'
   7156      Perform copy renaming on trees.  This pass attempts to rename
   7157      compiler temporaries to other variables at copy locations, usually
   7158      resulting in variable names which more closely resemble the
   7159      original variables.  This flag is enabled by default at `-O' and
   7160      higher.
   7161 
   7162 `-ftree-coalesce-inlined-vars'
   7163      Tell the copyrename pass (see `-ftree-copyrename') to attempt to
   7164      combine small user-defined variables too, but only if they were
   7165      inlined from other functions.  It is a more limited form of
   7166      `-ftree-coalesce-vars'.  This may harm debug information of such
   7167      inlined variables, but it will keep variables of the inlined-into
   7168      function apart from each other, such that they are more likely to
   7169      contain the expected values in a debugging session.  This was the
   7170      default in GCC versions older than 4.7.
   7171 
   7172 `-ftree-coalesce-vars'
   7173      Tell the copyrename pass (see `-ftree-copyrename') to attempt to
   7174      combine small user-defined variables too, instead of just compiler
   7175      temporaries.  This may severely limit the ability to debug an
   7176      optimized program compiled with `-fno-var-tracking-assignments'.
   7177      In the negated form, this flag prevents SSA coalescing of user
   7178      variables, including inlined ones.  This option is enabled by
   7179      default.
   7180 
   7181 `-ftree-ter'
   7182      Perform temporary expression replacement during the SSA->normal
   7183      phase.  Single use/single def temporaries are replaced at their
   7184      use location with their defining expression.  This results in
   7185      non-GIMPLE code, but gives the expanders much more complex trees
   7186      to work on resulting in better RTL generation.  This is enabled by
   7187      default at `-O' and higher.
   7188 
   7189 `-ftree-slsr'
   7190      Perform straight-line strength reduction on trees.  This
   7191      recognizes related expressions involving multiplications and
   7192      replaces them by less expensive calculations when possible.  This
   7193      is enabled by default at `-O' and higher.
   7194 
   7195 `-ftree-vectorize'
   7196      Perform loop vectorization on trees. This flag is enabled by
   7197      default at `-O3'.
   7198 
   7199 `-ftree-slp-vectorize'
   7200      Perform basic block vectorization on trees. This flag is enabled
   7201      by default at `-O3' and when `-ftree-vectorize' is enabled.
   7202 
   7203 `-ftree-vect-loop-version'
   7204      Perform loop versioning when doing loop vectorization on trees.
   7205      When a loop appears to be vectorizable except that data alignment
   7206      or data dependence cannot be determined at compile time, then
   7207      vectorized and non-vectorized versions of the loop are generated
   7208      along with run-time checks for alignment or dependence to control
   7209      which version is executed.  This option is enabled by default
   7210      except at level `-Os' where it is disabled.
   7211 
   7212 `-fvect-cost-model'
   7213      Enable cost model for vectorization.  This option is enabled by
   7214      default at `-O3'.
   7215 
   7216 `-ftree-vrp'
   7217      Perform Value Range Propagation on trees.  This is similar to the
   7218      constant propagation pass, but instead of values, ranges of values
   7219      are propagated.  This allows the optimizers to remove unnecessary
   7220      range checks like array bound checks and null pointer checks.
   7221      This is enabled by default at `-O2' and higher.  Null pointer check
   7222      elimination is only done if `-fdelete-null-pointer-checks' is
   7223      enabled.
   7224 
   7225 `-ftracer'
   7226      Perform tail duplication to enlarge superblock size.  This
   7227      transformation simplifies the control flow of the function
   7228      allowing other optimizations to do a better job.
   7229 
   7230 `-funroll-loops'
   7231      Unroll loops whose number of iterations can be determined at
   7232      compile time or upon entry to the loop.  `-funroll-loops' implies
   7233      `-frerun-cse-after-loop'.  This option makes code larger, and may
   7234      or may not make it run faster.
   7235 
   7236 `-funroll-all-loops'
   7237      Unroll all loops, even if their number of iterations is uncertain
   7238      when the loop is entered.  This usually makes programs run more
   7239      slowly.  `-funroll-all-loops' implies the same options as
   7240      `-funroll-loops',
   7241 
   7242 `-fsplit-ivs-in-unroller'
   7243      Enables expression of values of induction variables in later
   7244      iterations of the unrolled loop using the value in the first
   7245      iteration.  This breaks long dependency chains, thus improving
   7246      efficiency of the scheduling passes.
   7247 
   7248      A combination of `-fweb' and CSE is often sufficient to obtain the
   7249      same effect.  However, that is not reliable in cases where the
   7250      loop body is more complicated than a single basic block.  It also
   7251      does not work at all on some architectures due to restrictions in
   7252      the CSE pass.
   7253 
   7254      This optimization is enabled by default.
   7255 
   7256 `-fvariable-expansion-in-unroller'
   7257      With this option, the compiler creates multiple copies of some
   7258      local variables when unrolling a loop, which can result in
   7259      superior code.
   7260 
   7261 `-fpartial-inlining'
   7262      Inline parts of functions.  This option has any effect only when
   7263      inlining itself is turned on by the `-finline-functions' or
   7264      `-finline-small-functions' options.
   7265 
   7266      Enabled at level `-O2'.
   7267 
   7268 `-fpredictive-commoning'
   7269      Perform predictive commoning optimization, i.e., reusing
   7270      computations (especially memory loads and stores) performed in
   7271      previous iterations of loops.
   7272 
   7273      This option is enabled at level `-O3'.
   7274 
   7275 `-fprefetch-loop-arrays'
   7276      If supported by the target machine, generate instructions to
   7277      prefetch memory to improve the performance of loops that access
   7278      large arrays.
   7279 
   7280      This option may generate better or worse code; results are highly
   7281      dependent on the structure of loops within the source code.
   7282 
   7283      Disabled at level `-Os'.
   7284 
   7285 `-fno-peephole'
   7286 `-fno-peephole2'
   7287      Disable any machine-specific peephole optimizations.  The
   7288      difference between `-fno-peephole' and `-fno-peephole2' is in how
   7289      they are implemented in the compiler; some targets use one, some
   7290      use the other, a few use both.
   7291 
   7292      `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
   7293      levels `-O2', `-O3', `-Os'.
   7294 
   7295 `-fno-guess-branch-probability'
   7296      Do not guess branch probabilities using heuristics.
   7297 
   7298      GCC uses heuristics to guess branch probabilities if they are not
   7299      provided by profiling feedback (`-fprofile-arcs').  These
   7300      heuristics are based on the control flow graph.  If some branch
   7301      probabilities are specified by `__builtin_expect', then the
   7302      heuristics are used to guess branch probabilities for the rest of
   7303      the control flow graph, taking the `__builtin_expect' info into
   7304      account.  The interactions between the heuristics and
   7305      `__builtin_expect' can be complex, and in some cases, it may be
   7306      useful to disable the heuristics so that the effects of
   7307      `__builtin_expect' are easier to understand.
   7308 
   7309      The default is `-fguess-branch-probability' at levels `-O', `-O2',
   7310      `-O3', `-Os'.
   7311 
   7312 `-freorder-blocks'
   7313      Reorder basic blocks in the compiled function in order to reduce
   7314      number of taken branches and improve code locality.
   7315 
   7316      Enabled at levels `-O2', `-O3'.
   7317 
   7318 `-freorder-blocks-and-partition'
   7319      In addition to reordering basic blocks in the compiled function,
   7320      in order to reduce number of taken branches, partitions hot and
   7321      cold basic blocks into separate sections of the assembly and .o
   7322      files, to improve paging and cache locality performance.
   7323 
   7324      This optimization is automatically turned off in the presence of
   7325      exception handling, for linkonce sections, for functions with a
   7326      user-defined section attribute and on any architecture that does
   7327      not support named sections.
   7328 
   7329 `-freorder-functions'
   7330      Reorder functions in the object file in order to improve code
   7331      locality.  This is implemented by using special subsections
   7332      `.text.hot' for most frequently executed functions and
   7333      `.text.unlikely' for unlikely executed functions.  Reordering is
   7334      done by the linker so object file format must support named
   7335      sections and linker must place them in a reasonable way.
   7336 
   7337      Also profile feedback must be available to make this option
   7338      effective.  See `-fprofile-arcs' for details.
   7339 
   7340      Enabled at levels `-O2', `-O3', `-Os'.
   7341 
   7342 `-fstrict-aliasing'
   7343      Allow the compiler to assume the strictest aliasing rules
   7344      applicable to the language being compiled.  For C (and C++), this
   7345      activates optimizations based on the type of expressions.  In
   7346      particular, an object of one type is assumed never to reside at
   7347      the same address as an object of a different type, unless the
   7348      types are almost the same.  For example, an `unsigned int' can
   7349      alias an `int', but not a `void*' or a `double'.  A character type
   7350      may alias any other type.
   7351 
   7352      Pay special attention to code like this:
   7353           union a_union {
   7354             int i;
   7355             double d;
   7356           };
   7357 
   7358           int f() {
   7359             union a_union t;
   7360             t.d = 3.0;
   7361             return t.i;
   7362           }
   7363      The practice of reading from a different union member than the one
   7364      most recently written to (called "type-punning") is common.  Even
   7365      with `-fstrict-aliasing', type-punning is allowed, provided the
   7366      memory is accessed through the union type.  So, the code above
   7367      works as expected.  *Note Structures unions enumerations and
   7368      bit-fields implementation::.  However, this code might not:
   7369           int f() {
   7370             union a_union t;
   7371             int* ip;
   7372             t.d = 3.0;
   7373             ip = &t.i;
   7374             return *ip;
   7375           }
   7376 
   7377      Similarly, access by taking the address, casting the resulting
   7378      pointer and dereferencing the result has undefined behavior, even
   7379      if the cast uses a union type, e.g.:
   7380           int f() {
   7381             double d = 3.0;
   7382             return ((union a_union *) &d)->i;
   7383           }
   7384 
   7385      The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
   7386      `-Os'.
   7387 
   7388 `-fstrict-overflow'
   7389      Allow the compiler to assume strict signed overflow rules,
   7390      depending on the language being compiled.  For C (and C++) this
   7391      means that overflow when doing arithmetic with signed numbers is
   7392      undefined, which means that the compiler may assume that it does
   7393      not happen.  This permits various optimizations.  For example, the
   7394      compiler assumes that an expression like `i + 10 > i' is always
   7395      true for signed `i'.  This assumption is only valid if signed
   7396      overflow is undefined, as the expression is false if `i + 10'
   7397      overflows when using twos complement arithmetic.  When this option
   7398      is in effect any attempt to determine whether an operation on
   7399      signed numbers overflows must be written carefully to not actually
   7400      involve overflow.
   7401 
   7402      This option also allows the compiler to assume strict pointer
   7403      semantics: given a pointer to an object, if adding an offset to
   7404      that pointer does not produce a pointer to the same object, the
   7405      addition is undefined.  This permits the compiler to conclude that
   7406      `p + u > p' is always true for a pointer `p' and unsigned integer
   7407      `u'.  This assumption is only valid because pointer wraparound is
   7408      undefined, as the expression is false if `p + u' overflows using
   7409      twos complement arithmetic.
   7410 
   7411      See also the `-fwrapv' option.  Using `-fwrapv' means that integer
   7412      signed overflow is fully defined: it wraps.  When `-fwrapv' is
   7413      used, there is no difference between `-fstrict-overflow' and
   7414      `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
   7415      of overflow are permitted.  For example, if the compiler gets an
   7416      overflow when doing arithmetic on constants, the overflowed value
   7417      can still be used with `-fwrapv', but not otherwise.
   7418 
   7419      The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
   7420      `-Os'.
   7421 
   7422 `-falign-functions'
   7423 `-falign-functions=N'
   7424      Align the start of functions to the next power-of-two greater than
   7425      N, skipping up to N bytes.  For instance, `-falign-functions=32'
   7426      aligns functions to the next 32-byte boundary, but
   7427      `-falign-functions=24' aligns to the next 32-byte boundary only if
   7428      this can be done by skipping 23 bytes or less.
   7429 
   7430      `-fno-align-functions' and `-falign-functions=1' are equivalent
   7431      and mean that functions are not aligned.
   7432 
   7433      Some assemblers only support this flag when N is a power of two;
   7434      in that case, it is rounded up.
   7435 
   7436      If N is not specified or is zero, use a machine-dependent default.
   7437 
   7438      Enabled at levels `-O2', `-O3'.
   7439 
   7440 `-falign-labels'
   7441 `-falign-labels=N'
   7442      Align all branch targets to a power-of-two boundary, skipping up to
   7443      N bytes like `-falign-functions'.  This option can easily make
   7444      code slower, because it must insert dummy operations for when the
   7445      branch target is reached in the usual flow of the code.
   7446 
   7447      `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
   7448      that labels are not aligned.
   7449 
   7450      If `-falign-loops' or `-falign-jumps' are applicable and are
   7451      greater than this value, then their values are used instead.
   7452 
   7453      If N is not specified or is zero, use a machine-dependent default
   7454      which is very likely to be `1', meaning no alignment.
   7455 
   7456      Enabled at levels `-O2', `-O3'.
   7457 
   7458 `-falign-loops'
   7459 `-falign-loops=N'
   7460      Align loops to a power-of-two boundary, skipping up to N bytes
   7461      like `-falign-functions'.  If the loops are executed many times,
   7462      this makes up for any execution of the dummy operations.
   7463 
   7464      `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
   7465      that loops are not aligned.
   7466 
   7467      If N is not specified or is zero, use a machine-dependent default.
   7468 
   7469      Enabled at levels `-O2', `-O3'.
   7470 
   7471 `-falign-jumps'
   7472 `-falign-jumps=N'
   7473      Align branch targets to a power-of-two boundary, for branch targets
   7474      where the targets can only be reached by jumping, skipping up to N
   7475      bytes like `-falign-functions'.  In this case, no dummy operations
   7476      need be executed.
   7477 
   7478      `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
   7479      that loops are not aligned.
   7480 
   7481      If N is not specified or is zero, use a machine-dependent default.
   7482 
   7483      Enabled at levels `-O2', `-O3'.
   7484 
   7485 `-funit-at-a-time'
   7486      This option is left for compatibility reasons. `-funit-at-a-time'
   7487      has no effect, while `-fno-unit-at-a-time' implies
   7488      `-fno-toplevel-reorder' and `-fno-section-anchors'.
   7489 
   7490      Enabled by default.
   7491 
   7492 `-fno-toplevel-reorder'
   7493      Do not reorder top-level functions, variables, and `asm'
   7494      statements.  Output them in the same order that they appear in the
   7495      input file.  When this option is used, unreferenced static
   7496      variables are not removed.  This option is intended to support
   7497      existing code that relies on a particular ordering.  For new code,
   7498      it is better to use attributes.
   7499 
   7500      Enabled at level `-O0'.  When disabled explicitly, it also implies
   7501      `-fno-section-anchors', which is otherwise enabled at `-O0' on some
   7502      targets.
   7503 
   7504 `-fweb'
   7505      Constructs webs as commonly used for register allocation purposes
   7506      and assign each web individual pseudo register.  This allows the
   7507      register allocation pass to operate on pseudos directly, but also
   7508      strengthens several other optimization passes, such as CSE, loop
   7509      optimizer and trivial dead code remover.  It can, however, make
   7510      debugging impossible, since variables no longer stay in a "home
   7511      register".
   7512 
   7513      Enabled by default with `-funroll-loops'.
   7514 
   7515 `-fwhole-program'
   7516      Assume that the current compilation unit represents the whole
   7517      program being compiled.  All public functions and variables with
   7518      the exception of `main' and those merged by attribute
   7519      `externally_visible' become static functions and in effect are
   7520      optimized more aggressively by interprocedural optimizers.
   7521 
   7522      This option should not be used in combination with `-flto'.
   7523      Instead relying on a linker plugin should provide safer and more
   7524      precise information.
   7525 
   7526 `-flto[=N]'
   7527      This option runs the standard link-time optimizer.  When invoked
   7528      with source code, it generates GIMPLE (one of GCC's internal
   7529      representations) and writes it to special ELF sections in the
   7530      object file.  When the object files are linked together, all the
   7531      function bodies are read from these ELF sections and instantiated
   7532      as if they had been part of the same translation unit.
   7533 
   7534      To use the link-time optimizer, `-flto' needs to be specified at
   7535      compile time and during the final link.  For example:
   7536 
   7537           gcc -c -O2 -flto foo.c
   7538           gcc -c -O2 -flto bar.c
   7539           gcc -o myprog -flto -O2 foo.o bar.o
   7540 
   7541      The first two invocations to GCC save a bytecode representation of
   7542      GIMPLE into special ELF sections inside `foo.o' and `bar.o'.  The
   7543      final invocation reads the GIMPLE bytecode from `foo.o' and
   7544      `bar.o', merges the two files into a single internal image, and
   7545      compiles the result as usual.  Since both `foo.o' and `bar.o' are
   7546      merged into a single image, this causes all the interprocedural
   7547      analyses and optimizations in GCC to work across the two files as
   7548      if they were a single one.  This means, for example, that the
   7549      inliner is able to inline functions in `bar.o' into functions in
   7550      `foo.o' and vice-versa.
   7551 
   7552      Another (simpler) way to enable link-time optimization is:
   7553 
   7554           gcc -o myprog -flto -O2 foo.c bar.c
   7555 
   7556      The above generates bytecode for `foo.c' and `bar.c', merges them
   7557      together into a single GIMPLE representation and optimizes them as
   7558      usual to produce `myprog'.
   7559 
   7560      The only important thing to keep in mind is that to enable
   7561      link-time optimizations the `-flto' flag needs to be passed to
   7562      both the compile and the link commands.
   7563 
   7564      To make whole program optimization effective, it is necessary to
   7565      make certain whole program assumptions.  The compiler needs to know
   7566      what functions and variables can be accessed by libraries and
   7567      runtime outside of the link-time optimized unit.  When supported
   7568      by the linker, the linker plugin (see `-fuse-linker-plugin')
   7569      passes information to the compiler about used and externally
   7570      visible symbols.  When the linker plugin is not available,
   7571      `-fwhole-program' should be used to allow the compiler to make
   7572      these assumptions, which leads to more aggressive optimization
   7573      decisions.
   7574 
   7575      Note that when a file is compiled with `-flto', the generated
   7576      object file is larger than a regular object file because it
   7577      contains GIMPLE bytecodes and the usual final code.  This means
   7578      that object files with LTO information can be linked as normal
   7579      object files; if `-flto' is not passed to the linker, no
   7580      interprocedural optimizations are applied.
   7581 
   7582      Additionally, the optimization flags used to compile individual
   7583      files are not necessarily related to those used at link time.  For
   7584      instance,
   7585 
   7586           gcc -c -O0 -flto foo.c
   7587           gcc -c -O0 -flto bar.c
   7588           gcc -o myprog -flto -O3 foo.o bar.o
   7589 
   7590      This produces individual object files with unoptimized assembler
   7591      code, but the resulting binary `myprog' is optimized at `-O3'.
   7592      If, instead, the final binary is generated without `-flto', then
   7593      `myprog' is not optimized.
   7594 
   7595      When producing the final binary with `-flto', GCC only applies
   7596      link-time optimizations to those files that contain bytecode.
   7597      Therefore, you can mix and match object files and libraries with
   7598      GIMPLE bytecodes and final object code.  GCC automatically selects
   7599      which files to optimize in LTO mode and which files to link without
   7600      further processing.
   7601 
   7602      There are some code generation flags preserved by GCC when
   7603      generating bytecodes, as they need to be used during the final link
   7604      stage.  Currently, the following options are saved into the GIMPLE
   7605      bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags.
   7606 
   7607      At link time, these options are read in and reapplied.  Note that
   7608      the current implementation makes no attempt to recognize
   7609      conflicting values for these options.  If different files have
   7610      conflicting option values (e.g., one file is compiled with `-fPIC'
   7611      and another isn't), the compiler simply uses the last value read
   7612      from the bytecode files.  It is recommended, then, that you
   7613      compile all the files participating in the same link with the same
   7614      options.
   7615 
   7616      If LTO encounters objects with C linkage declared with incompatible
   7617      types in separate translation units to be linked together
   7618      (undefined behavior according to ISO C99 6.2.7), a non-fatal
   7619      diagnostic may be issued.  The behavior is still undefined at run
   7620      time.
   7621 
   7622      Another feature of LTO is that it is possible to apply
   7623      interprocedural optimizations on files written in different
   7624      languages.  This requires support in the language front end.
   7625      Currently, the C, C++ and Fortran front ends are capable of
   7626      emitting GIMPLE bytecodes, so something like this should work:
   7627 
   7628           gcc -c -flto foo.c
   7629           g++ -c -flto bar.cc
   7630           gfortran -c -flto baz.f90
   7631           g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
   7632 
   7633      Notice that the final link is done with `g++' to get the C++
   7634      runtime libraries and `-lgfortran' is added to get the Fortran
   7635      runtime libraries.  In general, when mixing languages in LTO mode,
   7636      you should use the same link command options as when mixing
   7637      languages in a regular (non-LTO) compilation; all you need to add
   7638      is `-flto' to all the compile and link commands.
   7639 
   7640      If object files containing GIMPLE bytecode are stored in a library
   7641      archive, say `libfoo.a', it is possible to extract and use them in
   7642      an LTO link if you are using a linker with plugin support.  To
   7643      enable this feature, use the flag `-fuse-linker-plugin' at link
   7644      time:
   7645 
   7646           gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
   7647 
   7648      With the linker plugin enabled, the linker extracts the needed
   7649      GIMPLE files from `libfoo.a' and passes them on to the running GCC
   7650      to make them part of the aggregated GIMPLE image to be optimized.
   7651 
   7652      If you are not using a linker with plugin support and/or do not
   7653      enable the linker plugin, then the objects inside `libfoo.a' are
   7654      extracted and linked as usual, but they do not participate in the
   7655      LTO optimization process.
   7656 
   7657      Link-time optimizations do not require the presence of the whole
   7658      program to operate.  If the program does not require any symbols
   7659      to be exported, it is possible to combine `-flto' and
   7660      `-fwhole-program' to allow the interprocedural optimizers to use
   7661      more aggressive assumptions which may lead to improved
   7662      optimization opportunities.  Use of `-fwhole-program' is not
   7663      needed when linker plugin is active (see `-fuse-linker-plugin').
   7664 
   7665      The current implementation of LTO makes no attempt to generate
   7666      bytecode that is portable between different types of hosts.  The
   7667      bytecode files are versioned and there is a strict version check,
   7668      so bytecode files generated in one version of GCC will not work
   7669      with an older/newer version of GCC.
   7670 
   7671      Link-time optimization does not work well with generation of
   7672      debugging information.  Combining `-flto' with `-g' is currently
   7673      experimental and expected to produce wrong results.
   7674 
   7675      If you specify the optional N, the optimization and code
   7676      generation done at link time is executed in parallel using N
   7677      parallel jobs by utilizing an installed `make' program.  The
   7678      environment variable `MAKE' may be used to override the program
   7679      used.  The default value for N is 1.
   7680 
   7681      You can also specify `-flto=jobserver' to use GNU make's job
   7682      server mode to determine the number of parallel jobs. This is
   7683      useful when the Makefile calling GCC is already executing in
   7684      parallel.  You must prepend a `+' to the command recipe in the
   7685      parent Makefile for this to work.  This option likely only works
   7686      if `MAKE' is GNU make.
   7687 
   7688      This option is disabled by default.
   7689 
   7690 `-flto-partition=ALG'
   7691      Specify the partitioning algorithm used by the link-time optimizer.
   7692      The value is either `1to1' to specify a partitioning mirroring the
   7693      original source files or `balanced' to specify partitioning into
   7694      equally sized chunks (whenever possible) or `max' to create new
   7695      partition for every symbol where possible.  Specifying `none' as
   7696      an algorithm disables partitioning and streaming completely.  The
   7697      default value is `balanced'. While `1to1' can be used as an
   7698      workaround for various code ordering issues, the `max'
   7699      partitioning is intended for internal testing only.
   7700 
   7701 `-flto-compression-level=N'
   7702      This option specifies the level of compression used for
   7703      intermediate language written to LTO object files, and is only
   7704      meaningful in conjunction with LTO mode (`-flto').  Valid values
   7705      are 0 (no compression) to 9 (maximum compression).  Values outside
   7706      this range are clamped to either 0 or 9.  If the option is not
   7707      given, a default balanced compression setting is used.
   7708 
   7709 `-flto-report'
   7710      Prints a report with internal details on the workings of the
   7711      link-time optimizer.  The contents of this report vary from
   7712      version to version.  It is meant to be useful to GCC developers
   7713      when processing object files in LTO mode (via `-flto').
   7714 
   7715      Disabled by default.
   7716 
   7717 `-fuse-linker-plugin'
   7718      Enables the use of a linker plugin during link-time optimization.
   7719      This option relies on plugin support in the linker, which is
   7720      available in gold or in GNU ld 2.21 or newer.
   7721 
   7722      This option enables the extraction of object files with GIMPLE
   7723      bytecode out of library archives. This improves the quality of
   7724      optimization by exposing more code to the link-time optimizer.
   7725      This information specifies what symbols can be accessed externally
   7726      (by non-LTO object or during dynamic linking).  Resulting code
   7727      quality improvements on binaries (and shared libraries that use
   7728      hidden visibility) are similar to `-fwhole-program'.  See `-flto'
   7729      for a description of the effect of this flag and how to use it.
   7730 
   7731      This option is enabled by default when LTO support in GCC is
   7732      enabled and GCC was configured for use with a linker supporting
   7733      plugins (GNU ld 2.21 or newer or gold).
   7734 
   7735 `-ffat-lto-objects'
   7736      Fat LTO objects are object files that contain both the
   7737      intermediate language and the object code. This makes them usable
   7738      for both LTO linking and normal linking. This option is effective
   7739      only when compiling with `-flto' and is ignored at link time.
   7740 
   7741      `-fno-fat-lto-objects' improves compilation time over plain LTO,
   7742      but requires the complete toolchain to be aware of LTO. It
   7743      requires a linker with linker plugin support for basic
   7744      functionality.  Additionally, `nm', `ar' and `ranlib' need to
   7745      support linker plugins to allow a full-featured build environment
   7746      (capable of building static libraries etc).  GCC provides the
   7747      `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options
   7748      to these tools. With non fat LTO makefiles need to be modified to
   7749      use them.
   7750 
   7751      The default is `-ffat-lto-objects' but this default is intended to
   7752      change in future releases when linker plugin enabled environments
   7753      become more common.
   7754 
   7755 `-fcompare-elim'
   7756      After register allocation and post-register allocation instruction
   7757      splitting, identify arithmetic instructions that compute processor
   7758      flags similar to a comparison operation based on that arithmetic.
   7759      If possible, eliminate the explicit comparison operation.
   7760 
   7761      This pass only applies to certain targets that cannot explicitly
   7762      represent the comparison operation before register allocation is
   7763      complete.
   7764 
   7765      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   7766 
   7767 `-fuse-ld=bfd'
   7768      Use the `bfd' linker instead of the default linker.
   7769 
   7770 `-fuse-ld=gold'
   7771      Use the `gold' linker instead of the default linker.
   7772 
   7773 `-fcprop-registers'
   7774      After register allocation and post-register allocation instruction
   7775      splitting, perform a copy-propagation pass to try to reduce
   7776      scheduling dependencies and occasionally eliminate the copy.
   7777 
   7778      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   7779 
   7780 `-fprofile-correction'
   7781      Profiles collected using an instrumented binary for multi-threaded
   7782      programs may be inconsistent due to missed counter updates. When
   7783      this option is specified, GCC uses heuristics to correct or smooth
   7784      out such inconsistencies. By default, GCC emits an error message
   7785      when an inconsistent profile is detected.
   7786 
   7787 `-fprofile-dir=PATH'
   7788      Set the directory to search for the profile data files in to PATH.
   7789      This option affects only the profile data generated by
   7790      `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
   7791      by `-fprofile-use' and `-fbranch-probabilities' and its related
   7792      options.  Both absolute and relative paths can be used.  By
   7793      default, GCC uses the current directory as PATH, thus the profile
   7794      data file appears in the same directory as the object file.
   7795 
   7796 `-fprofile-generate'
   7797 `-fprofile-generate=PATH'
   7798      Enable options usually used for instrumenting application to
   7799      produce profile useful for later recompilation with profile
   7800      feedback based optimization.  You must use `-fprofile-generate'
   7801      both when compiling and when linking your program.
   7802 
   7803      The following options are enabled: `-fprofile-arcs',
   7804      `-fprofile-values', `-fvpt'.
   7805 
   7806      If PATH is specified, GCC looks at the PATH to find the profile
   7807      feedback data files. See `-fprofile-dir'.
   7808 
   7809 `-fprofile-use'
   7810 `-fprofile-use=PATH'
   7811      Enable profile feedback directed optimizations, and optimizations
   7812      generally profitable only with profile feedback available.
   7813 
   7814      The following options are enabled: `-fbranch-probabilities',
   7815      `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer',
   7816      `-ftree-vectorize', `ftree-loop-distribute-patterns'
   7817 
   7818      By default, GCC emits an error message if the feedback profiles do
   7819      not match the source code.  This error can be turned into a
   7820      warning by using `-Wcoverage-mismatch'.  Note this may result in
   7821      poorly optimized code.
   7822 
   7823      If PATH is specified, GCC looks at the PATH to find the profile
   7824      feedback data files. See `-fprofile-dir'.
   7825 
   7826  The following options control compiler behavior regarding
   7827 floating-point arithmetic.  These options trade off between speed and
   7828 correctness.  All must be specifically enabled.
   7829 
   7830 `-ffloat-store'
   7831      Do not store floating-point variables in registers, and inhibit
   7832      other options that might change whether a floating-point value is
   7833      taken from a register or memory.
   7834 
   7835      This option prevents undesirable excess precision on machines such
   7836      as the 68000 where the floating registers (of the 68881) keep more
   7837      precision than a `double' is supposed to have.  Similarly for the
   7838      x86 architecture.  For most programs, the excess precision does
   7839      only good, but a few programs rely on the precise definition of
   7840      IEEE floating point.  Use `-ffloat-store' for such programs, after
   7841      modifying them to store all pertinent intermediate computations
   7842      into variables.
   7843 
   7844 `-fexcess-precision=STYLE'
   7845      This option allows further control over excess precision on
   7846      machines where floating-point registers have more precision than
   7847      the IEEE `float' and `double' types and the processor does not
   7848      support operations rounding to those types.  By default,
   7849      `-fexcess-precision=fast' is in effect; this means that operations
   7850      are carried out in the precision of the registers and that it is
   7851      unpredictable when rounding to the types specified in the source
   7852      code takes place.  When compiling C, if
   7853      `-fexcess-precision=standard' is specified then excess precision
   7854      follows the rules specified in ISO C99; in particular, both casts
   7855      and assignments cause values to be rounded to their semantic types
   7856      (whereas `-ffloat-store' only affects assignments).  This option
   7857      is enabled by default for C if a strict conformance option such as
   7858      `-std=c99' is used.
   7859 
   7860      `-fexcess-precision=standard' is not implemented for languages
   7861      other than C, and has no effect if `-funsafe-math-optimizations'
   7862      or `-ffast-math' is specified.  On the x86, it also has no effect
   7863      if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
   7864      former case, IEEE semantics apply without excess precision, and in
   7865      the latter, rounding is unpredictable.
   7866 
   7867 `-ffast-math'
   7868      Sets `-fno-math-errno', `-funsafe-math-optimizations',
   7869      `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
   7870      and `-fcx-limited-range'.
   7871 
   7872      This option causes the preprocessor macro `__FAST_MATH__' to be
   7873      defined.
   7874 
   7875      This option is not turned on by any `-O' option besides `-Ofast'
   7876      since it can result in incorrect output for programs that depend
   7877      on an exact implementation of IEEE or ISO rules/specifications for
   7878      math functions. It may, however, yield faster code for programs
   7879      that do not require the guarantees of these specifications.
   7880 
   7881 `-fno-math-errno'
   7882      Do not set `errno' after calling math functions that are executed
   7883      with a single instruction, e.g., `sqrt'.  A program that relies on
   7884      IEEE exceptions for math error handling may want to use this flag
   7885      for speed while maintaining IEEE arithmetic compatibility.
   7886 
   7887      This option is not turned on by any `-O' option since it can
   7888      result in incorrect output for programs that depend on an exact
   7889      implementation of IEEE or ISO rules/specifications for math
   7890      functions. It may, however, yield faster code for programs that do
   7891      not require the guarantees of these specifications.
   7892 
   7893      The default is `-fmath-errno'.
   7894 
   7895      On Darwin systems, the math library never sets `errno'.  There is
   7896      therefore no reason for the compiler to consider the possibility
   7897      that it might, and `-fno-math-errno' is the default.
   7898 
   7899 `-funsafe-math-optimizations'
   7900      Allow optimizations for floating-point arithmetic that (a) assume
   7901      that arguments and results are valid and (b) may violate IEEE or
   7902      ANSI standards.  When used at link-time, it may include libraries
   7903      or startup files that change the default FPU control word or other
   7904      similar optimizations.
   7905 
   7906      This option is not turned on by any `-O' option since it can
   7907      result in incorrect output for programs that depend on an exact
   7908      implementation of IEEE or ISO rules/specifications for math
   7909      functions. It may, however, yield faster code for programs that do
   7910      not require the guarantees of these specifications.  Enables
   7911      `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
   7912      and `-freciprocal-math'.
   7913 
   7914      The default is `-fno-unsafe-math-optimizations'.
   7915 
   7916 `-fassociative-math'
   7917      Allow re-association of operands in series of floating-point
   7918      operations.  This violates the ISO C and C++ language standard by
   7919      possibly changing computation result.  NOTE: re-ordering may
   7920      change the sign of zero as well as ignore NaNs and inhibit or
   7921      create underflow or overflow (and thus cannot be used on code that
   7922      relies on rounding behavior like `(x + 2**52) - 2**52'.  May also
   7923      reorder floating-point comparisons and thus may not be used when
   7924      ordered comparisons are required.  This option requires that both
   7925      `-fno-signed-zeros' and `-fno-trapping-math' be in effect.
   7926      Moreover, it doesn't make much sense with `-frounding-math'. For
   7927      Fortran the option is automatically enabled when both
   7928      `-fno-signed-zeros' and `-fno-trapping-math' are in effect.
   7929 
   7930      The default is `-fno-associative-math'.
   7931 
   7932 `-freciprocal-math'
   7933      Allow the reciprocal of a value to be used instead of dividing by
   7934      the value if this enables optimizations.  For example `x / y' can
   7935      be replaced with `x * (1/y)', which is useful if `(1/y)' is
   7936      subject to common subexpression elimination.  Note that this loses
   7937      precision and increases the number of flops operating on the value.
   7938 
   7939      The default is `-fno-reciprocal-math'.
   7940 
   7941 `-ffinite-math-only'
   7942      Allow optimizations for floating-point arithmetic that assume that
   7943      arguments and results are not NaNs or +-Infs.
   7944 
   7945      This option is not turned on by any `-O' option since it can
   7946      result in incorrect output for programs that depend on an exact
   7947      implementation of IEEE or ISO rules/specifications for math
   7948      functions. It may, however, yield faster code for programs that do
   7949      not require the guarantees of these specifications.
   7950 
   7951      The default is `-fno-finite-math-only'.
   7952 
   7953 `-fno-signed-zeros'
   7954      Allow optimizations for floating-point arithmetic that ignore the
   7955      signedness of zero.  IEEE arithmetic specifies the behavior of
   7956      distinct +0.0 and -0.0 values, which then prohibits simplification
   7957      of expressions such as x+0.0 or 0.0*x (even with
   7958      `-ffinite-math-only').  This option implies that the sign of a
   7959      zero result isn't significant.
   7960 
   7961      The default is `-fsigned-zeros'.
   7962 
   7963 `-fno-trapping-math'
   7964      Compile code assuming that floating-point operations cannot
   7965      generate user-visible traps.  These traps include division by
   7966      zero, overflow, underflow, inexact result and invalid operation.
   7967      This option requires that `-fno-signaling-nans' be in effect.
   7968      Setting this option may allow faster code if one relies on
   7969      "non-stop" IEEE arithmetic, for example.
   7970 
   7971      This option should never be turned on by any `-O' option since it
   7972      can result in incorrect output for programs that depend on an
   7973      exact implementation of IEEE or ISO rules/specifications for math
   7974      functions.
   7975 
   7976      The default is `-ftrapping-math'.
   7977 
   7978 `-frounding-math'
   7979      Disable transformations and optimizations that assume default
   7980      floating-point rounding behavior.  This is round-to-zero for all
   7981      floating point to integer conversions, and round-to-nearest for
   7982      all other arithmetic truncations.  This option should be specified
   7983      for programs that change the FP rounding mode dynamically, or that
   7984      may be executed with a non-default rounding mode.  This option
   7985      disables constant folding of floating-point expressions at compile
   7986      time (which may be affected by rounding mode) and arithmetic
   7987      transformations that are unsafe in the presence of sign-dependent
   7988      rounding modes.
   7989 
   7990      The default is `-fno-rounding-math'.
   7991 
   7992      This option is experimental and does not currently guarantee to
   7993      disable all GCC optimizations that are affected by rounding mode.
   7994      Future versions of GCC may provide finer control of this setting
   7995      using C99's `FENV_ACCESS' pragma.  This command-line option will
   7996      be used to specify the default state for `FENV_ACCESS'.
   7997 
   7998 `-fsignaling-nans'
   7999      Compile code assuming that IEEE signaling NaNs may generate
   8000      user-visible traps during floating-point operations.  Setting this
   8001      option disables optimizations that may change the number of
   8002      exceptions visible with signaling NaNs.  This option implies
   8003      `-ftrapping-math'.
   8004 
   8005      This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
   8006      defined.
   8007 
   8008      The default is `-fno-signaling-nans'.
   8009 
   8010      This option is experimental and does not currently guarantee to
   8011      disable all GCC optimizations that affect signaling NaN behavior.
   8012 
   8013 `-fsingle-precision-constant'
   8014      Treat floating-point constants as single precision instead of
   8015      implicitly converting them to double-precision constants.
   8016 
   8017 `-fcx-limited-range'
   8018      When enabled, this option states that a range reduction step is not
   8019      needed when performing complex division.  Also, there is no
   8020      checking whether the result of a complex multiplication or
   8021      division is `NaN + I*NaN', with an attempt to rescue the situation
   8022      in that case.  The default is `-fno-cx-limited-range', but is
   8023      enabled by `-ffast-math'.
   8024 
   8025      This option controls the default setting of the ISO C99
   8026      `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
   8027      all languages.
   8028 
   8029 `-fcx-fortran-rules'
   8030      Complex multiplication and division follow Fortran rules.  Range
   8031      reduction is done as part of complex division, but there is no
   8032      checking whether the result of a complex multiplication or
   8033      division is `NaN + I*NaN', with an attempt to rescue the situation
   8034      in that case.
   8035 
   8036      The default is `-fno-cx-fortran-rules'.
   8037 
   8038 
   8039  The following options control optimizations that may improve
   8040 performance, but are not enabled by any `-O' options.  This section
   8041 includes experimental options that may produce broken code.
   8042 
   8043 `-fbranch-probabilities'
   8044      After running a program compiled with `-fprofile-arcs' (*note
   8045      Options for Debugging Your Program or `gcc': Debugging Options.),
   8046      you can compile it a second time using `-fbranch-probabilities',
   8047      to improve optimizations based on the number of times each branch
   8048      was taken.  When a program compiled with `-fprofile-arcs' exits,
   8049      it saves arc execution counts to a file called `SOURCENAME.gcda'
   8050      for each source file.  The information in this data file is very
   8051      dependent on the structure of the generated code, so you must use
   8052      the same source code and the same optimization options for both
   8053      compilations.
   8054 
   8055      With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
   8056      each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
   8057      optimization.  Currently, they are only used in one place: in
   8058      `reorg.c', instead of guessing which path a branch is most likely
   8059      to take, the `REG_BR_PROB' values are used to exactly determine
   8060      which path is taken more often.
   8061 
   8062 `-fprofile-values'
   8063      If combined with `-fprofile-arcs', it adds code so that some data
   8064      about values of expressions in the program is gathered.
   8065 
   8066      With `-fbranch-probabilities', it reads back the data gathered
   8067      from profiling values of expressions for usage in optimizations.
   8068 
   8069      Enabled with `-fprofile-generate' and `-fprofile-use'.
   8070 
   8071 `-fvpt'
   8072      If combined with `-fprofile-arcs', this option instructs the
   8073      compiler to add code to gather information about values of
   8074      expressions.
   8075 
   8076      With `-fbranch-probabilities', it reads back the data gathered and
   8077      actually performs the optimizations based on them.  Currently the
   8078      optimizations include specialization of division operations using
   8079      the knowledge about the value of the denominator.
   8080 
   8081 `-frename-registers'
   8082      Attempt to avoid false dependencies in scheduled code by making use
   8083      of registers left over after register allocation.  This
   8084      optimization most benefits processors with lots of registers.
   8085      Depending on the debug information format adopted by the target,
   8086      however, it can make debugging impossible, since variables no
   8087      longer stay in a "home register".
   8088 
   8089      Enabled by default with `-funroll-loops' and `-fpeel-loops'.
   8090 
   8091 `-ftracer'
   8092      Perform tail duplication to enlarge superblock size.  This
   8093      transformation simplifies the control flow of the function
   8094      allowing other optimizations to do a better job.
   8095 
   8096      Enabled with `-fprofile-use'.
   8097 
   8098 `-funroll-loops'
   8099      Unroll loops whose number of iterations can be determined at
   8100      compile time or upon entry to the loop.  `-funroll-loops' implies
   8101      `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
   8102      also turns on complete loop peeling (i.e. complete removal of
   8103      loops with a small constant number of iterations).  This option
   8104      makes code larger, and may or may not make it run faster.
   8105 
   8106      Enabled with `-fprofile-use'.
   8107 
   8108 `-funroll-all-loops'
   8109      Unroll all loops, even if their number of iterations is uncertain
   8110      when the loop is entered.  This usually makes programs run more
   8111      slowly.  `-funroll-all-loops' implies the same options as
   8112      `-funroll-loops'.
   8113 
   8114 `-fpeel-loops'
   8115      Peels loops for which there is enough information that they do not
   8116      roll much (from profile feedback).  It also turns on complete loop
   8117      peeling (i.e. complete removal of loops with small constant number
   8118      of iterations).
   8119 
   8120      Enabled with `-fprofile-use'.
   8121 
   8122 `-fmove-loop-invariants'
   8123      Enables the loop invariant motion pass in the RTL loop optimizer.
   8124      Enabled at level `-O1'
   8125 
   8126 `-funswitch-loops'
   8127      Move branches with loop invariant conditions out of the loop, with
   8128      duplicates of the loop on both branches (modified according to
   8129      result of the condition).
   8130 
   8131 `-ffunction-sections'
   8132 `-fdata-sections'
   8133      Place each function or data item into its own section in the output
   8134      file if the target supports arbitrary sections.  The name of the
   8135      function or the name of the data item determines the section's name
   8136      in the output file.
   8137 
   8138      Use these options on systems where the linker can perform
   8139      optimizations to improve locality of reference in the instruction
   8140      space.  Most systems using the ELF object format and SPARC
   8141      processors running Solaris 2 have linkers with such optimizations.
   8142      AIX may have these optimizations in the future.
   8143 
   8144      Only use these options when there are significant benefits from
   8145      doing so.  When you specify these options, the assembler and linker
   8146      create larger object and executable files and are also slower.
   8147      You cannot use `gprof' on all systems if you specify this option,
   8148      and you may have problems with debugging if you specify both this
   8149      option and `-g'.
   8150 
   8151 `-fbranch-target-load-optimize'
   8152      Perform branch target register load optimization before prologue /
   8153      epilogue threading.  The use of target registers can typically be
   8154      exposed only during reload, thus hoisting loads out of loops and
   8155      doing inter-block scheduling needs a separate optimization pass.
   8156 
   8157 `-fbranch-target-load-optimize2'
   8158      Perform branch target register load optimization after prologue /
   8159      epilogue threading.
   8160 
   8161 `-fbtr-bb-exclusive'
   8162      When performing branch target register load optimization, don't
   8163      reuse branch target registers within any basic block.
   8164 
   8165 `-fstack-protector'
   8166      Emit extra code to check for buffer overflows, such as stack
   8167      smashing attacks.  This is done by adding a guard variable to
   8168      functions with vulnerable objects.  This includes functions that
   8169      call `alloca', and functions with buffers larger than 8 bytes.
   8170      The guards are initialized when a function is entered and then
   8171      checked when the function exits.  If a guard check fails, an error
   8172      message is printed and the program exits.
   8173 
   8174 `-fstack-protector-all'
   8175      Like `-fstack-protector' except that all functions are protected.
   8176 
   8177 `-fsection-anchors'
   8178      Try to reduce the number of symbolic address calculations by using
   8179      shared "anchor" symbols to address nearby objects.  This
   8180      transformation can help to reduce the number of GOT entries and
   8181      GOT accesses on some targets.
   8182 
   8183      For example, the implementation of the following function `foo':
   8184 
   8185           static int a, b, c;
   8186           int foo (void) { return a + b + c; }
   8187 
   8188      usually calculates the addresses of all three variables, but if you
   8189      compile it with `-fsection-anchors', it accesses the variables
   8190      from a common anchor point instead.  The effect is similar to the
   8191      following pseudocode (which isn't valid C):
   8192 
   8193           int foo (void)
   8194           {
   8195             register int *xr = &x;
   8196             return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
   8197           }
   8198 
   8199      Not all targets support this option.
   8200 
   8201 `--param NAME=VALUE'
   8202      In some places, GCC uses various constants to control the amount of
   8203      optimization that is done.  For example, GCC does not inline
   8204      functions that contain more than a certain number of instructions.
   8205      You can control some of these constants on the command line using
   8206      the `--param' option.
   8207 
   8208      The names of specific parameters, and the meaning of the values,
   8209      are tied to the internals of the compiler, and are subject to
   8210      change without notice in future releases.
   8211 
   8212      In each case, the VALUE is an integer.  The allowable choices for
   8213      NAME are:
   8214 
   8215     `predictable-branch-outcome'
   8216           When branch is predicted to be taken with probability lower
   8217           than this threshold (in percent), then it is considered well
   8218           predictable. The default is 10.
   8219 
   8220     `max-crossjump-edges'
   8221           The maximum number of incoming edges to consider for
   8222           cross-jumping.  The algorithm used by `-fcrossjumping' is
   8223           O(N^2) in the number of edges incoming to each block.
   8224           Increasing values mean more aggressive optimization, making
   8225           the compilation time increase with probably small improvement
   8226           in executable size.
   8227 
   8228     `min-crossjump-insns'
   8229           The minimum number of instructions that must be matched at
   8230           the end of two blocks before cross-jumping is performed on
   8231           them.  This value is ignored in the case where all
   8232           instructions in the block being cross-jumped from are
   8233           matched.  The default value is 5.
   8234 
   8235     `max-grow-copy-bb-insns'
   8236           The maximum code size expansion factor when copying basic
   8237           blocks instead of jumping.  The expansion is relative to a
   8238           jump instruction.  The default value is 8.
   8239 
   8240     `max-goto-duplication-insns'
   8241           The maximum number of instructions to duplicate to a block
   8242           that jumps to a computed goto.  To avoid O(N^2) behavior in a
   8243           number of passes, GCC factors computed gotos early in the
   8244           compilation process, and unfactors them as late as possible.
   8245           Only computed jumps at the end of a basic blocks with no more
   8246           than max-goto-duplication-insns are unfactored.  The default
   8247           value is 8.
   8248 
   8249     `max-delay-slot-insn-search'
   8250           The maximum number of instructions to consider when looking
   8251           for an instruction to fill a delay slot.  If more than this
   8252           arbitrary number of instructions are searched, the time
   8253           savings from filling the delay slot are minimal, so stop
   8254           searching.  Increasing values mean more aggressive
   8255           optimization, making the compilation time increase with
   8256           probably small improvement in execution time.
   8257 
   8258     `max-delay-slot-live-search'
   8259           When trying to fill delay slots, the maximum number of
   8260           instructions to consider when searching for a block with
   8261           valid live register information.  Increasing this arbitrarily
   8262           chosen value means more aggressive optimization, increasing
   8263           the compilation time.  This parameter should be removed when
   8264           the delay slot code is rewritten to maintain the control-flow
   8265           graph.
   8266 
   8267     `max-gcse-memory'
   8268           The approximate maximum amount of memory that can be
   8269           allocated in order to perform the global common subexpression
   8270           elimination optimization.  If more memory than specified is
   8271           required, the optimization is not done.
   8272 
   8273     `max-gcse-insertion-ratio'
   8274           If the ratio of expression insertions to deletions is larger
   8275           than this value for any expression, then RTL PRE inserts or
   8276           removes the expression and thus leaves partially redundant
   8277           computations in the instruction stream.  The default value is
   8278           20.
   8279 
   8280     `max-pending-list-length'
   8281           The maximum number of pending dependencies scheduling allows
   8282           before flushing the current state and starting over.  Large
   8283           functions with few branches or calls can create excessively
   8284           large lists which needlessly consume memory and resources.
   8285 
   8286     `max-modulo-backtrack-attempts'
   8287           The maximum number of backtrack attempts the scheduler should
   8288           make when modulo scheduling a loop.  Larger values can
   8289           exponentially increase compilation time.
   8290 
   8291     `max-inline-insns-single'
   8292           Several parameters control the tree inliner used in GCC.
   8293           This number sets the maximum number of instructions (counted
   8294           in GCC's internal representation) in a single function that
   8295           the tree inliner considers for inlining.  This only affects
   8296           functions declared inline and methods implemented in a class
   8297           declaration (C++).  The default value is 400.
   8298 
   8299     `max-inline-insns-auto'
   8300           When you use `-finline-functions' (included in `-O3'), a lot
   8301           of functions that would otherwise not be considered for
   8302           inlining by the compiler are investigated.  To those
   8303           functions, a different (more restrictive) limit compared to
   8304           functions declared inline can be applied.  The default value
   8305           is 40.
   8306 
   8307     `inline-min-speedup'
   8308           When estimated performance improvement of caller + callee
   8309           runtime exceeds this threshold (in precent), the function can
   8310           be inlined regardless the limit on `--param
   8311           max-inline-insns-single' and `--param max-inline-insns-auto'.
   8312 
   8313     `large-function-insns'
   8314           The limit specifying really large functions.  For functions
   8315           larger than this limit after inlining, inlining is
   8316           constrained by `--param large-function-growth'.  This
   8317           parameter is useful primarily to avoid extreme compilation
   8318           time caused by non-linear algorithms used by the back end.
   8319           The default value is 2700.
   8320 
   8321     `large-function-growth'
   8322           Specifies maximal growth of large function caused by inlining
   8323           in percents.  The default value is 100 which limits large
   8324           function growth to 2.0 times the original size.
   8325 
   8326     `large-unit-insns'
   8327           The limit specifying large translation unit.  Growth caused
   8328           by inlining of units larger than this limit is limited by
   8329           `--param inline-unit-growth'.  For small units this might be
   8330           too tight.  For example, consider a unit consisting of
   8331           function A that is inline and B that just calls A three
   8332           times.  If B is small relative to A, the growth of unit is
   8333           300\% and yet such inlining is very sane.  For very large
   8334           units consisting of small inlineable functions, however, the
   8335           overall unit growth limit is needed to avoid exponential
   8336           explosion of code size.  Thus for smaller units, the size is
   8337           increased to `--param large-unit-insns' before applying
   8338           `--param inline-unit-growth'.  The default is 10000.
   8339 
   8340     `inline-unit-growth'
   8341           Specifies maximal overall growth of the compilation unit
   8342           caused by inlining.  The default value is 30 which limits
   8343           unit growth to 1.3 times the original size.
   8344 
   8345     `ipcp-unit-growth'
   8346           Specifies maximal overall growth of the compilation unit
   8347           caused by interprocedural constant propagation.  The default
   8348           value is 10 which limits unit growth to 1.1 times the
   8349           original size.
   8350 
   8351     `large-stack-frame'
   8352           The limit specifying large stack frames.  While inlining the
   8353           algorithm is trying to not grow past this limit too much.
   8354           The default value is 256 bytes.
   8355 
   8356     `large-stack-frame-growth'
   8357           Specifies maximal growth of large stack frames caused by
   8358           inlining in percents.  The default value is 1000 which limits
   8359           large stack frame growth to 11 times the original size.
   8360 
   8361     `max-inline-insns-recursive'
   8362     `max-inline-insns-recursive-auto'
   8363           Specifies the maximum number of instructions an out-of-line
   8364           copy of a self-recursive inline function can grow into by
   8365           performing recursive inlining.
   8366 
   8367           For functions declared inline, `--param
   8368           max-inline-insns-recursive' is taken into account.  For
   8369           functions not declared inline, recursive inlining happens
   8370           only when `-finline-functions' (included in `-O3') is enabled
   8371           and `--param max-inline-insns-recursive-auto' is used.  The
   8372           default value is 450.
   8373 
   8374     `max-inline-recursive-depth'
   8375     `max-inline-recursive-depth-auto'
   8376           Specifies the maximum recursion depth used for recursive
   8377           inlining.
   8378 
   8379           For functions declared inline, `--param
   8380           max-inline-recursive-depth' is taken into account.  For
   8381           functions not declared inline, recursive inlining happens
   8382           only when `-finline-functions' (included in `-O3') is enabled
   8383           and `--param max-inline-recursive-depth-auto' is used.  The
   8384           default value is 8.
   8385 
   8386     `min-inline-recursive-probability'
   8387           Recursive inlining is profitable only for function having
   8388           deep recursion in average and can hurt for function having
   8389           little recursion depth by increasing the prologue size or
   8390           complexity of function body to other optimizers.
   8391 
   8392           When profile feedback is available (see `-fprofile-generate')
   8393           the actual recursion depth can be guessed from probability
   8394           that function recurses via a given call expression.  This
   8395           parameter limits inlining only to call expressions whose
   8396           probability exceeds the given threshold (in percents).  The
   8397           default value is 10.
   8398 
   8399     `early-inlining-insns'
   8400           Specify growth that the early inliner can make.  In effect it
   8401           increases the amount of inlining for code having a large
   8402           abstraction penalty.  The default value is 10.
   8403 
   8404     `max-early-inliner-iterations'
   8405     `max-early-inliner-iterations'
   8406           Limit of iterations of the early inliner.  This basically
   8407           bounds the number of nested indirect calls the early inliner
   8408           can resolve.  Deeper chains are still handled by late
   8409           inlining.
   8410 
   8411     `comdat-sharing-probability'
   8412     `comdat-sharing-probability'
   8413           Probability (in percent) that C++ inline function with comdat
   8414           visibility are shared across multiple compilation units.  The
   8415           default value is 20.
   8416 
   8417     `min-vect-loop-bound'
   8418           The minimum number of iterations under which loops are not
   8419           vectorized when `-ftree-vectorize' is used.  The number of
   8420           iterations after vectorization needs to be greater than the
   8421           value specified by this option to allow vectorization.  The
   8422           default value is 0.
   8423 
   8424     `gcse-cost-distance-ratio'
   8425           Scaling factor in calculation of maximum distance an
   8426           expression can be moved by GCSE optimizations.  This is
   8427           currently supported only in the code hoisting pass.  The
   8428           bigger the ratio, the more aggressive code hoisting is with
   8429           simple expressions, i.e., the expressions that have cost less
   8430           than `gcse-unrestricted-cost'.  Specifying 0 disables
   8431           hoisting of simple expressions.  The default value is 10.
   8432 
   8433     `gcse-unrestricted-cost'
   8434           Cost, roughly measured as the cost of a single typical machine
   8435           instruction, at which GCSE optimizations do not constrain the
   8436           distance an expression can travel.  This is currently
   8437           supported only in the code hoisting pass.  The lesser the
   8438           cost, the more aggressive code hoisting is.  Specifying 0
   8439           allows all expressions to travel unrestricted distances.  The
   8440           default value is 3.
   8441 
   8442     `max-hoist-depth'
   8443           The depth of search in the dominator tree for expressions to
   8444           hoist.  This is used to avoid quadratic behavior in hoisting
   8445           algorithm.  The value of 0 does not limit on the search, but
   8446           may slow down compilation of huge functions.  The default
   8447           value is 30.
   8448 
   8449     `max-tail-merge-comparisons'
   8450           The maximum amount of similar bbs to compare a bb with.  This
   8451           is used to avoid quadratic behavior in tree tail merging.
   8452           The default value is 10.
   8453 
   8454     `max-tail-merge-iterations'
   8455           The maximum amount of iterations of the pass over the
   8456           function.  This is used to limit compilation time in tree
   8457           tail merging.  The default value is 2.
   8458 
   8459     `max-unrolled-insns'
   8460           The maximum number of instructions that a loop may have to be
   8461           unrolled.  If a loop is unrolled, this parameter also
   8462           determines how many times the loop code is unrolled.
   8463 
   8464     `max-average-unrolled-insns'
   8465           The maximum number of instructions biased by probabilities of
   8466           their execution that a loop may have to be unrolled.  If a
   8467           loop is unrolled, this parameter also determines how many
   8468           times the loop code is unrolled.
   8469 
   8470     `max-unroll-times'
   8471           The maximum number of unrollings of a single loop.
   8472 
   8473     `max-peeled-insns'
   8474           The maximum number of instructions that a loop may have to be
   8475           peeled.  If a loop is peeled, this parameter also determines
   8476           how many times the loop code is peeled.
   8477 
   8478     `max-peel-times'
   8479           The maximum number of peelings of a single loop.
   8480 
   8481     `max-peel-branches'
   8482           The maximum number of branches on the hot path through the
   8483           peeled sequence.
   8484 
   8485     `max-completely-peeled-insns'
   8486           The maximum number of insns of a completely peeled loop.
   8487 
   8488     `max-completely-peel-times'
   8489           The maximum number of iterations of a loop to be suitable for
   8490           complete peeling.
   8491 
   8492     `max-completely-peel-loop-nest-depth'
   8493           The maximum depth of a loop nest suitable for complete
   8494           peeling.
   8495 
   8496     `max-unswitch-insns'
   8497           The maximum number of insns of an unswitched loop.
   8498 
   8499     `max-unswitch-level'
   8500           The maximum number of branches unswitched in a single loop.
   8501 
   8502     `lim-expensive'
   8503           The minimum cost of an expensive expression in the loop
   8504           invariant motion.
   8505 
   8506     `iv-consider-all-candidates-bound'
   8507           Bound on number of candidates for induction variables, below
   8508           which all candidates are considered for each use in induction
   8509           variable optimizations.  If there are more candidates than
   8510           this, only the most relevant ones are considered to avoid
   8511           quadratic time complexity.
   8512 
   8513     `iv-max-considered-uses'
   8514           The induction variable optimizations give up on loops that
   8515           contain more induction variable uses.
   8516 
   8517     `iv-always-prune-cand-set-bound'
   8518           If the number of candidates in the set is smaller than this
   8519           value, always try to remove unnecessary ivs from the set when
   8520           adding a new one.
   8521 
   8522     `scev-max-expr-size'
   8523           Bound on size of expressions used in the scalar evolutions
   8524           analyzer.  Large expressions slow the analyzer.
   8525 
   8526     `scev-max-expr-complexity'
   8527           Bound on the complexity of the expressions in the scalar
   8528           evolutions analyzer.  Complex expressions slow the analyzer.
   8529 
   8530     `omega-max-vars'
   8531           The maximum number of variables in an Omega constraint system.
   8532           The default value is 128.
   8533 
   8534     `omega-max-geqs'
   8535           The maximum number of inequalities in an Omega constraint
   8536           system.  The default value is 256.
   8537 
   8538     `omega-max-eqs'
   8539           The maximum number of equalities in an Omega constraint
   8540           system.  The default value is 128.
   8541 
   8542     `omega-max-wild-cards'
   8543           The maximum number of wildcard variables that the Omega
   8544           solver is able to insert.  The default value is 18.
   8545 
   8546     `omega-hash-table-size'
   8547           The size of the hash table in the Omega solver.  The default
   8548           value is 550.
   8549 
   8550     `omega-max-keys'
   8551           The maximal number of keys used by the Omega solver.  The
   8552           default value is 500.
   8553 
   8554     `omega-eliminate-redundant-constraints'
   8555           When set to 1, use expensive methods to eliminate all
   8556           redundant constraints.  The default value is 0.
   8557 
   8558     `vect-max-version-for-alignment-checks'
   8559           The maximum number of run-time checks that can be performed
   8560           when doing loop versioning for alignment in the vectorizer.
   8561           See option `-ftree-vect-loop-version' for more information.
   8562 
   8563     `vect-max-version-for-alias-checks'
   8564           The maximum number of run-time checks that can be performed
   8565           when doing loop versioning for alias in the vectorizer.  See
   8566           option `-ftree-vect-loop-version' for more information.
   8567 
   8568     `max-iterations-to-track'
   8569           The maximum number of iterations of a loop the brute-force
   8570           algorithm for analysis of the number of iterations of the
   8571           loop tries to evaluate.
   8572 
   8573     `hot-bb-count-ws-permille'
   8574           A basic block profile count is considered hot if it
   8575           contributes to the given permillage (i.e. 0...1000) of the
   8576           entire profiled execution.
   8577 
   8578     `hot-bb-frequency-fraction'
   8579           Select fraction of the entry block frequency of executions of
   8580           basic block in function given basic block needs to have to be
   8581           considered hot.
   8582 
   8583     `max-predicted-iterations'
   8584           The maximum number of loop iterations we predict statically.
   8585           This is useful in cases where a function contains a single
   8586           loop with known bound and another loop with unknown bound.
   8587           The known number of iterations is predicted correctly, while
   8588           the unknown number of iterations average to roughly 10.  This
   8589           means that the loop without bounds appears artificially cold
   8590           relative to the other one.
   8591 
   8592     `align-threshold'
   8593           Select fraction of the maximal frequency of executions of a
   8594           basic block in a function to align the basic block.
   8595 
   8596     `align-loop-iterations'
   8597           A loop expected to iterate at least the selected number of
   8598           iterations is aligned.
   8599 
   8600     `tracer-dynamic-coverage'
   8601     `tracer-dynamic-coverage-feedback'
   8602           This value is used to limit superblock formation once the
   8603           given percentage of executed instructions is covered.  This
   8604           limits unnecessary code size expansion.
   8605 
   8606           The `tracer-dynamic-coverage-feedback' is used only when
   8607           profile feedback is available.  The real profiles (as opposed
   8608           to statically estimated ones) are much less balanced allowing
   8609           the threshold to be larger value.
   8610 
   8611     `tracer-max-code-growth'
   8612           Stop tail duplication once code growth has reached given
   8613           percentage.  This is a rather artificial limit, as most of
   8614           the duplicates are eliminated later in cross jumping, so it
   8615           may be set to much higher values than is the desired code
   8616           growth.
   8617 
   8618     `tracer-min-branch-ratio'
   8619           Stop reverse growth when the reverse probability of best edge
   8620           is less than this threshold (in percent).
   8621 
   8622     `tracer-min-branch-ratio'
   8623     `tracer-min-branch-ratio-feedback'
   8624           Stop forward growth if the best edge has probability lower
   8625           than this threshold.
   8626 
   8627           Similarly to `tracer-dynamic-coverage' two values are
   8628           present, one for compilation for profile feedback and one for
   8629           compilation without.  The value for compilation with profile
   8630           feedback needs to be more conservative (higher) in order to
   8631           make tracer effective.
   8632 
   8633     `max-cse-path-length'
   8634           The maximum number of basic blocks on path that CSE considers.
   8635           The default is 10.
   8636 
   8637     `max-cse-insns'
   8638           The maximum number of instructions CSE processes before
   8639           flushing.  The default is 1000.
   8640 
   8641     `ggc-min-expand'
   8642           GCC uses a garbage collector to manage its own memory
   8643           allocation.  This parameter specifies the minimum percentage
   8644           by which the garbage collector's heap should be allowed to
   8645           expand between collections.  Tuning this may improve
   8646           compilation speed; it has no effect on code generation.
   8647 
   8648           The default is 30% + 70% * (RAM/1GB) with an upper bound of
   8649           100% when RAM >= 1GB.  If `getrlimit' is available, the
   8650           notion of "RAM" is the smallest of actual RAM and
   8651           `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
   8652           calculate RAM on a particular platform, the lower bound of
   8653           30% is used.  Setting this parameter and `ggc-min-heapsize'
   8654           to zero causes a full collection to occur at every
   8655           opportunity.  This is extremely slow, but can be useful for
   8656           debugging.
   8657 
   8658     `ggc-min-heapsize'
   8659           Minimum size of the garbage collector's heap before it begins
   8660           bothering to collect garbage.  The first collection occurs
   8661           after the heap expands by `ggc-min-expand'% beyond
   8662           `ggc-min-heapsize'.  Again, tuning this may improve
   8663           compilation speed, and has no effect on code generation.
   8664 
   8665           The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
   8666           that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
   8667           exceeded, but with a lower bound of 4096 (four megabytes) and
   8668           an upper bound of 131072 (128 megabytes).  If GCC is not able
   8669           to calculate RAM on a particular platform, the lower bound is
   8670           used.  Setting this parameter very large effectively disables
   8671           garbage collection.  Setting this parameter and
   8672           `ggc-min-expand' to zero causes a full collection to occur at
   8673           every opportunity.
   8674 
   8675     `max-reload-search-insns'
   8676           The maximum number of instruction reload should look backward
   8677           for equivalent register.  Increasing values mean more
   8678           aggressive optimization, making the compilation time increase
   8679           with probably slightly better performance.  The default value
   8680           is 100.
   8681 
   8682     `max-cselib-memory-locations'
   8683           The maximum number of memory locations cselib should take
   8684           into account.  Increasing values mean more aggressive
   8685           optimization, making the compilation time increase with
   8686           probably slightly better performance.  The default value is
   8687           500.
   8688 
   8689     `reorder-blocks-duplicate'
   8690     `reorder-blocks-duplicate-feedback'
   8691           Used by the basic block reordering pass to decide whether to
   8692           use unconditional branch or duplicate the code on its
   8693           destination.  Code is duplicated when its estimated size is
   8694           smaller than this value multiplied by the estimated size of
   8695           unconditional jump in the hot spots of the program.
   8696 
   8697           The `reorder-block-duplicate-feedback' is used only when
   8698           profile feedback is available.  It may be set to higher
   8699           values than `reorder-block-duplicate' since information about
   8700           the hot spots is more accurate.
   8701 
   8702     `max-sched-ready-insns'
   8703           The maximum number of instructions ready to be issued the
   8704           scheduler should consider at any given time during the first
   8705           scheduling pass.  Increasing values mean more thorough
   8706           searches, making the compilation time increase with probably
   8707           little benefit.  The default value is 100.
   8708 
   8709     `max-sched-region-blocks'
   8710           The maximum number of blocks in a region to be considered for
   8711           interblock scheduling.  The default value is 10.
   8712 
   8713     `max-pipeline-region-blocks'
   8714           The maximum number of blocks in a region to be considered for
   8715           pipelining in the selective scheduler.  The default value is
   8716           15.
   8717 
   8718     `max-sched-region-insns'
   8719           The maximum number of insns in a region to be considered for
   8720           interblock scheduling.  The default value is 100.
   8721 
   8722     `max-pipeline-region-insns'
   8723           The maximum number of insns in a region to be considered for
   8724           pipelining in the selective scheduler.  The default value is
   8725           200.
   8726 
   8727     `min-spec-prob'
   8728           The minimum probability (in percents) of reaching a source
   8729           block for interblock speculative scheduling.  The default
   8730           value is 40.
   8731 
   8732     `max-sched-extend-regions-iters'
   8733           The maximum number of iterations through CFG to extend
   8734           regions.  A value of 0 (the default) disables region
   8735           extensions.
   8736 
   8737     `max-sched-insn-conflict-delay'
   8738           The maximum conflict delay for an insn to be considered for
   8739           speculative motion.  The default value is 3.
   8740 
   8741     `sched-spec-prob-cutoff'
   8742           The minimal probability of speculation success (in percents),
   8743           so that speculative insns are scheduled.  The default value
   8744           is 40.
   8745 
   8746     `sched-spec-state-edge-prob-cutoff'
   8747           The minimum probability an edge must have for the scheduler
   8748           to save its state across it.  The default value is 10.
   8749 
   8750     `sched-mem-true-dep-cost'
   8751           Minimal distance (in CPU cycles) between store and load
   8752           targeting same memory locations.  The default value is 1.
   8753 
   8754     `selsched-max-lookahead'
   8755           The maximum size of the lookahead window of selective
   8756           scheduling.  It is a depth of search for available
   8757           instructions.  The default value is 50.
   8758 
   8759     `selsched-max-sched-times'
   8760           The maximum number of times that an instruction is scheduled
   8761           during selective scheduling.  This is the limit on the number
   8762           of iterations through which the instruction may be pipelined.
   8763           The default value is 2.
   8764 
   8765     `selsched-max-insns-to-rename'
   8766           The maximum number of best instructions in the ready list
   8767           that are considered for renaming in the selective scheduler.
   8768           The default value is 2.
   8769 
   8770     `sms-min-sc'
   8771           The minimum value of stage count that swing modulo scheduler
   8772           generates.  The default value is 2.
   8773 
   8774     `max-last-value-rtl'
   8775           The maximum size measured as number of RTLs that can be
   8776           recorded in an expression in combiner for a pseudo register
   8777           as last known value of that register.  The default is 10000.
   8778 
   8779     `integer-share-limit'
   8780           Small integer constants can use a shared data structure,
   8781           reducing the compiler's memory usage and increasing its
   8782           speed.  This sets the maximum value of a shared integer
   8783           constant.  The default value is 256.
   8784 
   8785     `ssp-buffer-size'
   8786           The minimum size of buffers (i.e. arrays) that receive stack
   8787           smashing protection when `-fstack-protection' is used.
   8788 
   8789     `max-jump-thread-duplication-stmts'
   8790           Maximum number of statements allowed in a block that needs to
   8791           be duplicated when threading jumps.
   8792 
   8793     `max-fields-for-field-sensitive'
   8794           Maximum number of fields in a structure treated in a field
   8795           sensitive manner during pointer analysis.  The default is zero
   8796           for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'.
   8797 
   8798     `prefetch-latency'
   8799           Estimate on average number of instructions that are executed
   8800           before prefetch finishes.  The distance prefetched ahead is
   8801           proportional to this constant.  Increasing this number may
   8802           also lead to less streams being prefetched (see
   8803           `simultaneous-prefetches').
   8804 
   8805     `simultaneous-prefetches'
   8806           Maximum number of prefetches that can run at the same time.
   8807 
   8808     `l1-cache-line-size'
   8809           The size of cache line in L1 cache, in bytes.
   8810 
   8811     `l1-cache-size'
   8812           The size of L1 cache, in kilobytes.
   8813 
   8814     `l2-cache-size'
   8815           The size of L2 cache, in kilobytes.
   8816 
   8817     `min-insn-to-prefetch-ratio'
   8818           The minimum ratio between the number of instructions and the
   8819           number of prefetches to enable prefetching in a loop.
   8820 
   8821     `prefetch-min-insn-to-mem-ratio'
   8822           The minimum ratio between the number of instructions and the
   8823           number of memory references to enable prefetching in a loop.
   8824 
   8825     `use-canonical-types'
   8826           Whether the compiler should use the "canonical" type system.
   8827           By default, this should always be 1, which uses a more
   8828           efficient internal mechanism for comparing types in C++ and
   8829           Objective-C++.  However, if bugs in the canonical type system
   8830           are causing compilation failures, set this value to 0 to
   8831           disable canonical types.
   8832 
   8833     `switch-conversion-max-branch-ratio'
   8834           Switch initialization conversion refuses to create arrays
   8835           that are bigger than `switch-conversion-max-branch-ratio'
   8836           times the number of branches in the switch.
   8837 
   8838     `max-partial-antic-length'
   8839           Maximum length of the partial antic set computed during the
   8840           tree partial redundancy elimination optimization
   8841           (`-ftree-pre') when optimizing at `-O3' and above.  For some
   8842           sorts of source code the enhanced partial redundancy
   8843           elimination optimization can run away, consuming all of the
   8844           memory available on the host machine.  This parameter sets a
   8845           limit on the length of the sets that are computed, which
   8846           prevents the runaway behavior.  Setting a value of 0 for this
   8847           parameter allows an unlimited set length.
   8848 
   8849     `sccvn-max-scc-size'
   8850           Maximum size of a strongly connected component (SCC) during
   8851           SCCVN processing.  If this limit is hit, SCCVN processing for
   8852           the whole function is not done and optimizations depending on
   8853           it are disabled.  The default maximum SCC size is 10000.
   8854 
   8855     `sccvn-max-alias-queries-per-access'
   8856           Maximum number of alias-oracle queries we perform when
   8857           looking for redundancies for loads and stores.  If this limit
   8858           is hit the search is aborted and the load or store is not
   8859           considered redundant.  The number of queries is
   8860           algorithmically limited to the number of stores on all paths
   8861           from the load to the function entry.  The default maxmimum
   8862           number of queries is 1000.
   8863 
   8864     `ira-max-loops-num'
   8865           IRA uses regional register allocation by default.  If a
   8866           function contains more loops than the number given by this
   8867           parameter, only at most the given number of the most
   8868           frequently-executed loops form regions for regional register
   8869           allocation.  The default value of the parameter is 100.
   8870 
   8871     `ira-max-conflict-table-size'
   8872           Although IRA uses a sophisticated algorithm to compress the
   8873           conflict table, the table can still require excessive amounts
   8874           of memory for huge functions.  If the conflict table for a
   8875           function could be more than the size in MB given by this
   8876           parameter, the register allocator instead uses a faster,
   8877           simpler, and lower-quality algorithm that does not require
   8878           building a pseudo-register conflict table.  The default value
   8879           of the parameter is 2000.
   8880 
   8881     `ira-loop-reserved-regs'
   8882           IRA can be used to evaluate more accurate register pressure
   8883           in loops for decisions to move loop invariants (see `-O3').
   8884           The number of available registers reserved for some other
   8885           purposes is given by this parameter.  The default value of
   8886           the parameter is 2, which is the minimal number of registers
   8887           needed by typical instructions.  This value is the best found
   8888           from numerous experiments.
   8889 
   8890     `loop-invariant-max-bbs-in-loop'
   8891           Loop invariant motion can be very expensive, both in
   8892           compilation time and in amount of needed compile-time memory,
   8893           with very large loops.  Loops with more basic blocks than
   8894           this parameter won't have loop invariant motion optimization
   8895           performed on them.  The default value of the parameter is
   8896           1000 for `-O1' and 10000 for `-O2' and above.
   8897 
   8898     `loop-max-datarefs-for-datadeps'
   8899           Building data dapendencies is expensive for very large loops.
   8900           This parameter limits the number of data references in loops
   8901           that are considered for data dependence analysis.  These
   8902           large loops are no handled by the optimizations using loop
   8903           data dependencies.  The default value is 1000.
   8904 
   8905     `max-vartrack-size'
   8906           Sets a maximum number of hash table slots to use during
   8907           variable tracking dataflow analysis of any function.  If this
   8908           limit is exceeded with variable tracking at assignments
   8909           enabled, analysis for that function is retried without it,
   8910           after removing all debug insns from the function.  If the
   8911           limit is exceeded even without debug insns, var tracking
   8912           analysis is completely disabled for the function.  Setting
   8913           the parameter to zero makes it unlimited.
   8914 
   8915     `max-vartrack-expr-depth'
   8916           Sets a maximum number of recursion levels when attempting to
   8917           map variable names or debug temporaries to value expressions.
   8918           This trades compilation time for more complete debug
   8919           information.  If this is set too low, value expressions that
   8920           are available and could be represented in debug information
   8921           may end up not being used; setting this higher may enable the
   8922           compiler to find more complex debug expressions, but compile
   8923           time and memory use may grow.  The default is 12.
   8924 
   8925     `min-nondebug-insn-uid'
   8926           Use uids starting at this parameter for nondebug insns.  The
   8927           range below the parameter is reserved exclusively for debug
   8928           insns created by `-fvar-tracking-assignments', but debug
   8929           insns may get (non-overlapping) uids above it if the reserved
   8930           range is exhausted.
   8931 
   8932     `ipa-sra-ptr-growth-factor'
   8933           IPA-SRA replaces a pointer to an aggregate with one or more
   8934           new parameters only when their cumulative size is less or
   8935           equal to `ipa-sra-ptr-growth-factor' times the size of the
   8936           original pointer parameter.
   8937 
   8938     `tm-max-aggregate-size'
   8939           When making copies of thread-local variables in a
   8940           transaction, this parameter specifies the size in bytes after
   8941           which variables are saved with the logging functions as
   8942           opposed to save/restore code sequence pairs.  This option
   8943           only applies when using `-fgnu-tm'.
   8944 
   8945     `graphite-max-nb-scop-params'
   8946           To avoid exponential effects in the Graphite loop transforms,
   8947           the number of parameters in a Static Control Part (SCoP) is
   8948           bounded.  The default value is 10 parameters.  A variable
   8949           whose value is unknown at compilation time and defined
   8950           outside a SCoP is a parameter of the SCoP.
   8951 
   8952     `graphite-max-bbs-per-function'
   8953           To avoid exponential effects in the detection of SCoPs, the
   8954           size of the functions analyzed by Graphite is bounded.  The
   8955           default value is 100 basic blocks.
   8956 
   8957     `loop-block-tile-size'
   8958           Loop blocking or strip mining transforms, enabled with
   8959           `-floop-block' or `-floop-strip-mine', strip mine each loop
   8960           in the loop nest by a given number of iterations.  The strip
   8961           length can be changed using the `loop-block-tile-size'
   8962           parameter.  The default value is 51 iterations.
   8963 
   8964     `ipa-cp-value-list-size'
   8965           IPA-CP attempts to track all possible values and types passed
   8966           to a function's parameter in order to propagate them and
   8967           perform devirtualization.  `ipa-cp-value-list-size' is the
   8968           maximum number of values and types it stores per one formal
   8969           parameter of a function.
   8970 
   8971     `lto-partitions'
   8972           Specify desired number of partitions produced during WHOPR
   8973           compilation.  The number of partitions should exceed the
   8974           number of CPUs used for compilation.  The default value is 32.
   8975 
   8976     `lto-minpartition'
   8977           Size of minimal partition for WHOPR (in estimated
   8978           instructions).  This prevents expenses of splitting very
   8979           small programs into too many partitions.
   8980 
   8981     `cxx-max-namespaces-for-diagnostic-help'
   8982           The maximum number of namespaces to consult for suggestions
   8983           when C++ name lookup fails for an identifier.  The default is
   8984           1000.
   8985 
   8986     `sink-frequency-threshold'
   8987           The maximum relative execution frequency (in percents) of the
   8988           target block relative to a statement's original block to
   8989           allow statement sinking of a statement.  Larger numbers
   8990           result in more aggressive statement sinking.  The default
   8991           value is 75.  A small positive adjustment is applied for
   8992           statements with memory operands as those are even more
   8993           profitable so sink.
   8994 
   8995     `max-stores-to-sink'
   8996           The maximum number of conditional stores paires that can be
   8997           sunk.  Set to 0 if either vectorization (`-ftree-vectorize')
   8998           or if-conversion (`-ftree-loop-if-convert') is disabled.  The
   8999           default is 2.
   9000 
   9001     `allow-load-data-races'
   9002           Allow optimizers to introduce new data races on loads.  Set
   9003           to 1 to allow, otherwise to 0.  This option is enabled by
   9004           default unless implicitly set by the `-fmemory-model=' option.
   9005 
   9006     `allow-store-data-races'
   9007           Allow optimizers to introduce new data races on stores.  Set
   9008           to 1 to allow, otherwise to 0.  This option is enabled by
   9009           default unless implicitly set by the `-fmemory-model=' option.
   9010 
   9011     `allow-packed-load-data-races'
   9012           Allow optimizers to introduce new data races on packed data
   9013           loads.  Set to 1 to allow, otherwise to 0.  This option is
   9014           enabled by default unless implicitly set by the
   9015           `-fmemory-model=' option.
   9016 
   9017     `allow-packed-store-data-races'
   9018           Allow optimizers to introduce new data races on packed data
   9019           stores.  Set to 1 to allow, otherwise to 0.  This option is
   9020           enabled by default unless implicitly set by the
   9021           `-fmemory-model=' option.
   9022 
   9023     `case-values-threshold'
   9024           The smallest number of different values for which it is best
   9025           to use a jump-table instead of a tree of conditional
   9026           branches.  If the value is 0, use the default for the
   9027           machine.  The default is 0.
   9028 
   9029     `tree-reassoc-width'
   9030           Set the maximum number of instructions executed in parallel in
   9031           reassociated tree. This parameter overrides target dependent
   9032           heuristics used by default if has non zero value.
   9033 
   9034     `sched-pressure-algorithm'
   9035           Choose between the two available implementations of
   9036           `-fsched-pressure'.  Algorithm 1 is the original
   9037           implementation and is the more likely to prevent instructions
   9038           from being reordered.  Algorithm 2 was designed to be a
   9039           compromise between the relatively conservative approach taken
   9040           by algorithm 1 and the rather aggressive approach taken by
   9041           the default scheduler.  It relies more heavily on having a
   9042           regular register file and accurate register pressure classes.
   9043           See `haifa-sched.c' in the GCC sources for more details.
   9044 
   9045           The default choice depends on the target.
   9046 
   9047     `max-slsr-cand-scan'
   9048           Set the maximum number of existing candidates that will be
   9049           considered when seeking a basis for a new straight-line
   9050           strength reduction candidate.
   9051 
   9052 
   9053 
   9054 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
   9055 
   9056 3.11 Options Controlling the Preprocessor
   9057 =========================================
   9058 
   9059 These options control the C preprocessor, which is run on each C source
   9060 file before actual compilation.
   9061 
   9062  If you use the `-E' option, nothing is done except preprocessing.
   9063 Some of these options make sense only together with `-E' because they
   9064 cause the preprocessor output to be unsuitable for actual compilation.
   9065 
   9066 `-Wp,OPTION'
   9067      You can use `-Wp,OPTION' to bypass the compiler driver and pass
   9068      OPTION directly through to the preprocessor.  If OPTION contains
   9069      commas, it is split into multiple options at the commas.  However,
   9070      many options are modified, translated or interpreted by the
   9071      compiler driver before being passed to the preprocessor, and `-Wp'
   9072      forcibly bypasses this phase.  The preprocessor's direct interface
   9073      is undocumented and subject to change, so whenever possible you
   9074      should avoid using `-Wp' and let the driver handle the options
   9075      instead.
   9076 
   9077 `-Xpreprocessor OPTION'
   9078      Pass OPTION as an option to the preprocessor.  You can use this to
   9079      supply system-specific preprocessor options that GCC does not
   9080      recognize.
   9081 
   9082      If you want to pass an option that takes an argument, you must use
   9083      `-Xpreprocessor' twice, once for the option and once for the
   9084      argument.
   9085 
   9086 `-no-integrated-cpp'
   9087      Perform preprocessing as a separate pass before compilation.  By
   9088      default, GCC performs preprocessing as an integrated part of input
   9089      tokenization and parsing.  If this option is provided, the
   9090      appropriate language front end (`cc1', `cc1plus', or `cc1obj' for
   9091      C, C++, and Objective-C, respectively) is instead invoked twice,
   9092      once for preprocessing only and once for actual compilation of the
   9093      preprocessed input.  This option may be useful in conjunction with
   9094      the `-B' or `-wrapper' options to specify an alternate
   9095      preprocessor or perform additional processing of the program
   9096      source between normal preprocessing and compilation.
   9097 
   9098 `-D NAME'
   9099      Predefine NAME as a macro, with definition `1'.
   9100 
   9101 `-D NAME=DEFINITION'
   9102      The contents of DEFINITION are tokenized and processed as if they
   9103      appeared during translation phase three in a `#define' directive.
   9104      In particular, the definition will be truncated by embedded
   9105      newline characters.
   9106 
   9107      If you are invoking the preprocessor from a shell or shell-like
   9108      program you may need to use the shell's quoting syntax to protect
   9109      characters such as spaces that have a meaning in the shell syntax.
   9110 
   9111      If you wish to define a function-like macro on the command line,
   9112      write its argument list with surrounding parentheses before the
   9113      equals sign (if any).  Parentheses are meaningful to most shells,
   9114      so you will need to quote the option.  With `sh' and `csh',
   9115      `-D'NAME(ARGS...)=DEFINITION'' works.
   9116 
   9117      `-D' and `-U' options are processed in the order they are given on
   9118      the command line.  All `-imacros FILE' and `-include FILE' options
   9119      are processed after all `-D' and `-U' options.
   9120 
   9121 `-U NAME'
   9122      Cancel any previous definition of NAME, either built in or
   9123      provided with a `-D' option.
   9124 
   9125 `-undef'
   9126      Do not predefine any system-specific or GCC-specific macros.  The
   9127      standard predefined macros remain defined.
   9128 
   9129 `-I DIR'
   9130      Add the directory DIR to the list of directories to be searched
   9131      for header files.  Directories named by `-I' are searched before
   9132      the standard system include directories.  If the directory DIR is
   9133      a standard system include directory, the option is ignored to
   9134      ensure that the default search order for system directories and
   9135      the special treatment of system headers are not defeated .  If DIR
   9136      begins with `=', then the `=' will be replaced by the sysroot
   9137      prefix; see `--sysroot' and `-isysroot'.
   9138 
   9139 `-o FILE'
   9140      Write output to FILE.  This is the same as specifying FILE as the
   9141      second non-option argument to `cpp'.  `gcc' has a different
   9142      interpretation of a second non-option argument, so you must use
   9143      `-o' to specify the output file.
   9144 
   9145 `-Wall'
   9146      Turns on all optional warnings which are desirable for normal code.
   9147      At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
   9148      warning about integer promotion causing a change of sign in `#if'
   9149      expressions.  Note that many of the preprocessor's warnings are on
   9150      by default and have no options to control them.
   9151 
   9152 `-Wcomment'
   9153 `-Wcomments'
   9154      Warn whenever a comment-start sequence `/*' appears in a `/*'
   9155      comment, or whenever a backslash-newline appears in a `//' comment.
   9156      (Both forms have the same effect.)
   9157 
   9158 `-Wtrigraphs'
   9159      Most trigraphs in comments cannot affect the meaning of the
   9160      program.  However, a trigraph that would form an escaped newline
   9161      (`??/' at the end of a line) can, by changing where the comment
   9162      begins or ends.  Therefore, only trigraphs that would form escaped
   9163      newlines produce warnings inside a comment.
   9164 
   9165      This option is implied by `-Wall'.  If `-Wall' is not given, this
   9166      option is still enabled unless trigraphs are enabled.  To get
   9167      trigraph conversion without warnings, but get the other `-Wall'
   9168      warnings, use `-trigraphs -Wall -Wno-trigraphs'.
   9169 
   9170 `-Wtraditional'
   9171      Warn about certain constructs that behave differently in
   9172      traditional and ISO C.  Also warn about ISO C constructs that have
   9173      no traditional C equivalent, and problematic constructs which
   9174      should be avoided.
   9175 
   9176 `-Wundef'
   9177      Warn whenever an identifier which is not a macro is encountered in
   9178      an `#if' directive, outside of `defined'.  Such identifiers are
   9179      replaced with zero.
   9180 
   9181 `-Wunused-macros'
   9182      Warn about macros defined in the main file that are unused.  A
   9183      macro is "used" if it is expanded or tested for existence at least
   9184      once.  The preprocessor will also warn if the macro has not been
   9185      used at the time it is redefined or undefined.
   9186 
   9187      Built-in macros, macros defined on the command line, and macros
   9188      defined in include files are not warned about.
   9189 
   9190      _Note:_ If a macro is actually used, but only used in skipped
   9191      conditional blocks, then CPP will report it as unused.  To avoid
   9192      the warning in such a case, you might improve the scope of the
   9193      macro's definition by, for example, moving it into the first
   9194      skipped block.  Alternatively, you could provide a dummy use with
   9195      something like:
   9196 
   9197           #if defined the_macro_causing_the_warning
   9198           #endif
   9199 
   9200 `-Wendif-labels'
   9201      Warn whenever an `#else' or an `#endif' are followed by text.
   9202      This usually happens in code of the form
   9203 
   9204           #if FOO
   9205           ...
   9206           #else FOO
   9207           ...
   9208           #endif FOO
   9209 
   9210      The second and third `FOO' should be in comments, but often are not
   9211      in older programs.  This warning is on by default.
   9212 
   9213 `-Werror'
   9214      Make all warnings into hard errors.  Source code which triggers
   9215      warnings will be rejected.
   9216 
   9217 `-Wsystem-headers'
   9218      Issue warnings for code in system headers.  These are normally
   9219      unhelpful in finding bugs in your own code, therefore suppressed.
   9220      If you are responsible for the system library, you may want to see
   9221      them.
   9222 
   9223 `-w'
   9224      Suppress all warnings, including those which GNU CPP issues by
   9225      default.
   9226 
   9227 `-pedantic'
   9228      Issue all the mandatory diagnostics listed in the C standard.
   9229      Some of them are left out by default, since they trigger
   9230      frequently on harmless code.
   9231 
   9232 `-pedantic-errors'
   9233      Issue all the mandatory diagnostics, and make all mandatory
   9234      diagnostics into errors.  This includes mandatory diagnostics that
   9235      GCC issues without `-pedantic' but treats as warnings.
   9236 
   9237 `-M'
   9238      Instead of outputting the result of preprocessing, output a rule
   9239      suitable for `make' describing the dependencies of the main source
   9240      file.  The preprocessor outputs one `make' rule containing the
   9241      object file name for that source file, a colon, and the names of
   9242      all the included files, including those coming from `-include' or
   9243      `-imacros' command line options.
   9244 
   9245      Unless specified explicitly (with `-MT' or `-MQ'), the object file
   9246      name consists of the name of the source file with any suffix
   9247      replaced with object file suffix and with any leading directory
   9248      parts removed.  If there are many included files then the rule is
   9249      split into several lines using `\'-newline.  The rule has no
   9250      commands.
   9251 
   9252      This option does not suppress the preprocessor's debug output,
   9253      such as `-dM'.  To avoid mixing such debug output with the
   9254      dependency rules you should explicitly specify the dependency
   9255      output file with `-MF', or use an environment variable like
   9256      `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
   9257      output will still be sent to the regular output stream as normal.
   9258 
   9259      Passing `-M' to the driver implies `-E', and suppresses warnings
   9260      with an implicit `-w'.
   9261 
   9262 `-MM'
   9263      Like `-M' but do not mention header files that are found in system
   9264      header directories, nor header files that are included, directly
   9265      or indirectly, from such a header.
   9266 
   9267      This implies that the choice of angle brackets or double quotes in
   9268      an `#include' directive does not in itself determine whether that
   9269      header will appear in `-MM' dependency output.  This is a slight
   9270      change in semantics from GCC versions 3.0 and earlier.
   9271 
   9272 `-MF FILE'
   9273      When used with `-M' or `-MM', specifies a file to write the
   9274      dependencies to.  If no `-MF' switch is given the preprocessor
   9275      sends the rules to the same place it would have sent preprocessed
   9276      output.
   9277 
   9278      When used with the driver options `-MD' or `-MMD', `-MF' overrides
   9279      the default dependency output file.
   9280 
   9281 `-MG'
   9282      In conjunction with an option such as `-M' requesting dependency
   9283      generation, `-MG' assumes missing header files are generated files
   9284      and adds them to the dependency list without raising an error.
   9285      The dependency filename is taken directly from the `#include'
   9286      directive without prepending any path.  `-MG' also suppresses
   9287      preprocessed output, as a missing header file renders this useless.
   9288 
   9289      This feature is used in automatic updating of makefiles.
   9290 
   9291 `-MP'
   9292      This option instructs CPP to add a phony target for each dependency
   9293      other than the main file, causing each to depend on nothing.  These
   9294      dummy rules work around errors `make' gives if you remove header
   9295      files without updating the `Makefile' to match.
   9296 
   9297      This is typical output:
   9298 
   9299           test.o: test.c test.h
   9300 
   9301           test.h:
   9302 
   9303 `-MT TARGET'
   9304      Change the target of the rule emitted by dependency generation.  By
   9305      default CPP takes the name of the main input file, deletes any
   9306      directory components and any file suffix such as `.c', and appends
   9307      the platform's usual object suffix.  The result is the target.
   9308 
   9309      An `-MT' option will set the target to be exactly the string you
   9310      specify.  If you want multiple targets, you can specify them as a
   9311      single argument to `-MT', or use multiple `-MT' options.
   9312 
   9313      For example, `-MT '$(objpfx)foo.o'' might give
   9314 
   9315           $(objpfx)foo.o: foo.c
   9316 
   9317 `-MQ TARGET'
   9318      Same as `-MT', but it quotes any characters which are special to
   9319      Make.  `-MQ '$(objpfx)foo.o'' gives
   9320 
   9321           $$(objpfx)foo.o: foo.c
   9322 
   9323      The default target is automatically quoted, as if it were given
   9324      with `-MQ'.
   9325 
   9326 `-MD'
   9327      `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
   9328      implied.  The driver determines FILE based on whether an `-o'
   9329      option is given.  If it is, the driver uses its argument but with
   9330      a suffix of `.d', otherwise it takes the name of the input file,
   9331      removes any directory components and suffix, and applies a `.d'
   9332      suffix.
   9333 
   9334      If `-MD' is used in conjunction with `-E', any `-o' switch is
   9335      understood to specify the dependency output file (*note -MF:
   9336      dashMF.), but if used without `-E', each `-o' is understood to
   9337      specify a target object file.
   9338 
   9339      Since `-E' is not implied, `-MD' can be used to generate a
   9340      dependency output file as a side-effect of the compilation process.
   9341 
   9342 `-MMD'
   9343      Like `-MD' except mention only user header files, not system
   9344      header files.
   9345 
   9346 `-fpch-deps'
   9347      When using precompiled headers (*note Precompiled Headers::), this
   9348      flag will cause the dependency-output flags to also list the files
   9349      from the precompiled header's dependencies.  If not specified only
   9350      the precompiled header would be listed and not the files that were
   9351      used to create it because those files are not consulted when a
   9352      precompiled header is used.
   9353 
   9354 `-fpch-preprocess'
   9355      This option allows use of a precompiled header (*note Precompiled
   9356      Headers::) together with `-E'.  It inserts a special `#pragma',
   9357      `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
   9358      place where the precompiled header was found, and its FILENAME.
   9359      When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
   9360      loads the PCH.
   9361 
   9362      This option is off by default, because the resulting preprocessed
   9363      output is only really suitable as input to GCC.  It is switched on
   9364      by `-save-temps'.
   9365 
   9366      You should not write this `#pragma' in your own code, but it is
   9367      safe to edit the filename if the PCH file is available in a
   9368      different location.  The filename may be absolute or it may be
   9369      relative to GCC's current directory.
   9370 
   9371 `-x c'
   9372 `-x c++'
   9373 `-x objective-c'
   9374 `-x assembler-with-cpp'
   9375      Specify the source language: C, C++, Objective-C, or assembly.
   9376      This has nothing to do with standards conformance or extensions;
   9377      it merely selects which base syntax to expect.  If you give none
   9378      of these options, cpp will deduce the language from the extension
   9379      of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
   9380      extensions for C++ and assembly are also recognized.  If cpp does
   9381      not recognize the extension, it will treat the file as C; this is
   9382      the most generic mode.
   9383 
   9384      _Note:_ Previous versions of cpp accepted a `-lang' option which
   9385      selected both the language and the standards conformance level.
   9386      This option has been removed, because it conflicts with the `-l'
   9387      option.
   9388 
   9389 `-std=STANDARD'
   9390 `-ansi'
   9391      Specify the standard to which the code should conform.  Currently
   9392      CPP knows about C and C++ standards; others may be added in the
   9393      future.
   9394 
   9395      STANDARD may be one of:
   9396     `c90'
   9397     `c89'
   9398     `iso9899:1990'
   9399           The ISO C standard from 1990.  `c90' is the customary
   9400           shorthand for this version of the standard.
   9401 
   9402           The `-ansi' option is equivalent to `-std=c90'.
   9403 
   9404     `iso9899:199409'
   9405           The 1990 C standard, as amended in 1994.
   9406 
   9407     `iso9899:1999'
   9408     `c99'
   9409     `iso9899:199x'
   9410     `c9x'
   9411           The revised ISO C standard, published in December 1999.
   9412           Before publication, this was known as C9X.
   9413 
   9414     `iso9899:2011'
   9415     `c11'
   9416     `c1x'
   9417           The revised ISO C standard, published in December 2011.
   9418           Before publication, this was known as C1X.
   9419 
   9420     `gnu90'
   9421     `gnu89'
   9422           The 1990 C standard plus GNU extensions.  This is the default.
   9423 
   9424     `gnu99'
   9425     `gnu9x'
   9426           The 1999 C standard plus GNU extensions.
   9427 
   9428     `gnu11'
   9429     `gnu1x'
   9430           The 2011 C standard plus GNU extensions.
   9431 
   9432     `c++98'
   9433           The 1998 ISO C++ standard plus amendments.
   9434 
   9435     `gnu++98'
   9436           The same as `-std=c++98' plus GNU extensions.  This is the
   9437           default for C++ code.
   9438 
   9439 `-I-'
   9440      Split the include path.  Any directories specified with `-I'
   9441      options before `-I-' are searched only for headers requested with
   9442      `#include "FILE"'; they are not searched for `#include <FILE>'.
   9443      If additional directories are specified with `-I' options after
   9444      the `-I-', those directories are searched for all `#include'
   9445      directives.
   9446 
   9447      In addition, `-I-' inhibits the use of the directory of the current
   9448      file directory as the first search directory for `#include "FILE"'.
   9449      This option has been deprecated.
   9450 
   9451 `-nostdinc'
   9452      Do not search the standard system directories for header files.
   9453      Only the directories you have specified with `-I' options (and the
   9454      directory of the current file, if appropriate) are searched.
   9455 
   9456 `-nostdinc++'
   9457      Do not search for header files in the C++-specific standard
   9458      directories, but do still search the other standard directories.
   9459      (This option is used when building the C++ library.)
   9460 
   9461 `-include FILE'
   9462      Process FILE as if `#include "file"' appeared as the first line of
   9463      the primary source file.  However, the first directory searched
   9464      for FILE is the preprocessor's working directory _instead of_ the
   9465      directory containing the main source file.  If not found there, it
   9466      is searched for in the remainder of the `#include "..."' search
   9467      chain as normal.
   9468 
   9469      If multiple `-include' options are given, the files are included
   9470      in the order they appear on the command line.
   9471 
   9472 `-imacros FILE'
   9473      Exactly like `-include', except that any output produced by
   9474      scanning FILE is thrown away.  Macros it defines remain defined.
   9475      This allows you to acquire all the macros from a header without
   9476      also processing its declarations.
   9477 
   9478      All files specified by `-imacros' are processed before all files
   9479      specified by `-include'.
   9480 
   9481 `-idirafter DIR'
   9482      Search DIR for header files, but do it _after_ all directories
   9483      specified with `-I' and the standard system directories have been
   9484      exhausted.  DIR is treated as a system include directory.  If DIR
   9485      begins with `=', then the `=' will be replaced by the sysroot
   9486      prefix; see `--sysroot' and `-isysroot'.
   9487 
   9488 `-iprefix PREFIX'
   9489      Specify PREFIX as the prefix for subsequent `-iwithprefix'
   9490      options.  If the prefix represents a directory, you should include
   9491      the final `/'.
   9492 
   9493 `-iwithprefix DIR'
   9494 `-iwithprefixbefore DIR'
   9495      Append DIR to the prefix specified previously with `-iprefix', and
   9496      add the resulting directory to the include search path.
   9497      `-iwithprefixbefore' puts it in the same place `-I' would;
   9498      `-iwithprefix' puts it where `-idirafter' would.
   9499 
   9500 `-isysroot DIR'
   9501      This option is like the `--sysroot' option, but applies only to
   9502      header files (except for Darwin targets, where it applies to both
   9503      header files and libraries).  See the `--sysroot' option for more
   9504      information.
   9505 
   9506 `-imultilib DIR'
   9507      Use DIR as a subdirectory of the directory containing
   9508      target-specific C++ headers.
   9509 
   9510 `-isystem DIR'
   9511      Search DIR for header files, after all directories specified by
   9512      `-I' but before the standard system directories.  Mark it as a
   9513      system directory, so that it gets the same special treatment as is
   9514      applied to the standard system directories.  If DIR begins with
   9515      `=', then the `=' will be replaced by the sysroot prefix; see
   9516      `--sysroot' and `-isysroot'.
   9517 
   9518 `-iquote DIR'
   9519      Search DIR only for header files requested with `#include "FILE"';
   9520      they are not searched for `#include <FILE>', before all
   9521      directories specified by `-I' and before the standard system
   9522      directories.  If DIR begins with `=', then the `=' will be replaced
   9523      by the sysroot prefix; see `--sysroot' and `-isysroot'.
   9524 
   9525 `-fdirectives-only'
   9526      When preprocessing, handle directives, but do not expand macros.
   9527 
   9528      The option's behavior depends on the `-E' and `-fpreprocessed'
   9529      options.
   9530 
   9531      With `-E', preprocessing is limited to the handling of directives
   9532      such as `#define', `#ifdef', and `#error'.  Other preprocessor
   9533      operations, such as macro expansion and trigraph conversion are
   9534      not performed.  In addition, the `-dD' option is implicitly
   9535      enabled.
   9536 
   9537      With `-fpreprocessed', predefinition of command line and most
   9538      builtin macros is disabled.  Macros such as `__LINE__', which are
   9539      contextually dependent, are handled normally.  This enables
   9540      compilation of files previously preprocessed with `-E
   9541      -fdirectives-only'.
   9542 
   9543      With both `-E' and `-fpreprocessed', the rules for
   9544      `-fpreprocessed' take precedence.  This enables full preprocessing
   9545      of files previously preprocessed with `-E -fdirectives-only'.
   9546 
   9547 `-fdollars-in-identifiers'
   9548      Accept `$' in identifiers.
   9549 
   9550 `-fextended-identifiers'
   9551      Accept universal character names in identifiers.  This option is
   9552      experimental; in a future version of GCC, it will be enabled by
   9553      default for C99 and C++.
   9554 
   9555 `-fno-canonical-system-headers'
   9556      When preprocessing, do not shorten system header paths with
   9557      canonicalization.
   9558 
   9559 `-fpreprocessed'
   9560      Indicate to the preprocessor that the input file has already been
   9561      preprocessed.  This suppresses things like macro expansion,
   9562      trigraph conversion, escaped newline splicing, and processing of
   9563      most directives.  The preprocessor still recognizes and removes
   9564      comments, so that you can pass a file preprocessed with `-C' to
   9565      the compiler without problems.  In this mode the integrated
   9566      preprocessor is little more than a tokenizer for the front ends.
   9567 
   9568      `-fpreprocessed' is implicit if the input file has one of the
   9569      extensions `.i', `.ii' or `.mi'.  These are the extensions that
   9570      GCC uses for preprocessed files created by `-save-temps'.
   9571 
   9572 `-ftabstop=WIDTH'
   9573      Set the distance between tab stops.  This helps the preprocessor
   9574      report correct column numbers in warnings or errors, even if tabs
   9575      appear on the line.  If the value is less than 1 or greater than
   9576      100, the option is ignored.  The default is 8.
   9577 
   9578 `-fdebug-cpp'
   9579      This option is only useful for debugging GCC.  When used with
   9580      `-E', dumps debugging information about location maps.  Every
   9581      token in the output is preceded by the dump of the map its location
   9582      belongs to.  The dump of the map holding the location of a token
   9583      would be:
   9584           {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION}
   9585 
   9586      When used without `-E', this option has no effect.
   9587 
   9588 `-ftrack-macro-expansion[=LEVEL]'
   9589      Track locations of tokens across macro expansions. This allows the
   9590      compiler to emit diagnostic about the current macro expansion stack
   9591      when a compilation error occurs in a macro expansion. Using this
   9592      option makes the preprocessor and the compiler consume more
   9593      memory. The LEVEL parameter can be used to choose the level of
   9594      precision of token location tracking thus decreasing the memory
   9595      consumption if necessary. Value `0' of LEVEL de-activates this
   9596      option just as if no `-ftrack-macro-expansion' was present on the
   9597      command line. Value `1' tracks tokens locations in a degraded mode
   9598      for the sake of minimal memory overhead. In this mode all tokens
   9599      resulting from the expansion of an argument of a function-like
   9600      macro have the same location. Value `2' tracks tokens locations
   9601      completely. This value is the most memory hungry.  When this
   9602      option is given no argument, the default parameter value is `2'.
   9603 
   9604      Note that -ftrack-macro-expansion=2 is activated by default.
   9605 
   9606 `-fexec-charset=CHARSET'
   9607      Set the execution character set, used for string and character
   9608      constants.  The default is UTF-8.  CHARSET can be any encoding
   9609      supported by the system's `iconv' library routine.
   9610 
   9611 `-fwide-exec-charset=CHARSET'
   9612      Set the wide execution character set, used for wide string and
   9613      character constants.  The default is UTF-32 or UTF-16, whichever
   9614      corresponds to the width of `wchar_t'.  As with `-fexec-charset',
   9615      CHARSET can be any encoding supported by the system's `iconv'
   9616      library routine; however, you will have problems with encodings
   9617      that do not fit exactly in `wchar_t'.
   9618 
   9619 `-finput-charset=CHARSET'
   9620      Set the input character set, used for translation from the
   9621      character set of the input file to the source character set used
   9622      by GCC.  If the locale does not specify, or GCC cannot get this
   9623      information from the locale, the default is UTF-8.  This can be
   9624      overridden by either the locale or this command line option.
   9625      Currently the command line option takes precedence if there's a
   9626      conflict.  CHARSET can be any encoding supported by the system's
   9627      `iconv' library routine.
   9628 
   9629 `-fworking-directory'
   9630      Enable generation of linemarkers in the preprocessor output that
   9631      will let the compiler know the current working directory at the
   9632      time of preprocessing.  When this option is enabled, the
   9633      preprocessor will emit, after the initial linemarker, a second
   9634      linemarker with the current working directory followed by two
   9635      slashes.  GCC will use this directory, when it's present in the
   9636      preprocessed input, as the directory emitted as the current
   9637      working directory in some debugging information formats.  This
   9638      option is implicitly enabled if debugging information is enabled,
   9639      but this can be inhibited with the negated form
   9640      `-fno-working-directory'.  If the `-P' flag is present in the
   9641      command line, this option has no effect, since no `#line'
   9642      directives are emitted whatsoever.
   9643 
   9644 `-fno-show-column'
   9645      Do not print column numbers in diagnostics.  This may be necessary
   9646      if diagnostics are being scanned by a program that does not
   9647      understand the column numbers, such as `dejagnu'.
   9648 
   9649 `-A PREDICATE=ANSWER'
   9650      Make an assertion with the predicate PREDICATE and answer ANSWER.
   9651      This form is preferred to the older form `-A PREDICATE(ANSWER)',
   9652      which is still supported, because it does not use shell special
   9653      characters.
   9654 
   9655 `-A -PREDICATE=ANSWER'
   9656      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
   9657 
   9658 `-dCHARS'
   9659      CHARS is a sequence of one or more of the following characters,
   9660      and must not be preceded by a space.  Other characters are
   9661      interpreted by the compiler proper, or reserved for future
   9662      versions of GCC, and so are silently ignored.  If you specify
   9663      characters whose behavior conflicts, the result is undefined.
   9664 
   9665     `M'
   9666           Instead of the normal output, generate a list of `#define'
   9667           directives for all the macros defined during the execution of
   9668           the preprocessor, including predefined macros.  This gives
   9669           you a way of finding out what is predefined in your version
   9670           of the preprocessor.  Assuming you have no file `foo.h', the
   9671           command
   9672 
   9673                touch foo.h; cpp -dM foo.h
   9674 
   9675           will show all the predefined macros.
   9676 
   9677           If you use `-dM' without the `-E' option, `-dM' is
   9678           interpreted as a synonym for `-fdump-rtl-mach'.  *Note
   9679           Debugging Options: (gcc)Debugging Options.
   9680 
   9681     `D'
   9682           Like `M' except in two respects: it does _not_ include the
   9683           predefined macros, and it outputs _both_ the `#define'
   9684           directives and the result of preprocessing.  Both kinds of
   9685           output go to the standard output file.
   9686 
   9687     `N'
   9688           Like `D', but emit only the macro names, not their expansions.
   9689 
   9690     `I'
   9691           Output `#include' directives in addition to the result of
   9692           preprocessing.
   9693 
   9694     `U'
   9695           Like `D' except that only macros that are expanded, or whose
   9696           definedness is tested in preprocessor directives, are output;
   9697           the output is delayed until the use or test of the macro; and
   9698           `#undef' directives are also output for macros tested but
   9699           undefined at the time.
   9700 
   9701 `-P'
   9702      Inhibit generation of linemarkers in the output from the
   9703      preprocessor.  This might be useful when running the preprocessor
   9704      on something that is not C code, and will be sent to a program
   9705      which might be confused by the linemarkers.
   9706 
   9707 `-C'
   9708      Do not discard comments.  All comments are passed through to the
   9709      output file, except for comments in processed directives, which
   9710      are deleted along with the directive.
   9711 
   9712      You should be prepared for side effects when using `-C'; it causes
   9713      the preprocessor to treat comments as tokens in their own right.
   9714      For example, comments appearing at the start of what would be a
   9715      directive line have the effect of turning that line into an
   9716      ordinary source line, since the first token on the line is no
   9717      longer a `#'.
   9718 
   9719 `-CC'
   9720      Do not discard comments, including during macro expansion.  This is
   9721      like `-C', except that comments contained within macros are also
   9722      passed through to the output file where the macro is expanded.
   9723 
   9724      In addition to the side-effects of the `-C' option, the `-CC'
   9725      option causes all C++-style comments inside a macro to be
   9726      converted to C-style comments.  This is to prevent later use of
   9727      that macro from inadvertently commenting out the remainder of the
   9728      source line.
   9729 
   9730      The `-CC' option is generally used to support lint comments.
   9731 
   9732 `-traditional-cpp'
   9733      Try to imitate the behavior of old-fashioned C preprocessors, as
   9734      opposed to ISO C preprocessors.
   9735 
   9736 `-trigraphs'
   9737      Process trigraph sequences.  These are three-character sequences,
   9738      all starting with `??', that are defined by ISO C to stand for
   9739      single characters.  For example, `??/' stands for `\', so `'??/n''
   9740      is a character constant for a newline.  By default, GCC ignores
   9741      trigraphs, but in standard-conforming modes it converts them.  See
   9742      the `-std' and `-ansi' options.
   9743 
   9744      The nine trigraphs and their replacements are
   9745 
   9746           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
   9747           Replacement:      [    ]    {    }    #    \    ^    |    ~
   9748 
   9749 `-remap'
   9750      Enable special code to work around file systems which only permit
   9751      very short file names, such as MS-DOS.
   9752 
   9753 `--help'
   9754 `--target-help'
   9755      Print text describing all the command line options instead of
   9756      preprocessing anything.
   9757 
   9758 `-v'
   9759      Verbose mode.  Print out GNU CPP's version number at the beginning
   9760      of execution, and report the final form of the include path.
   9761 
   9762 `-H'
   9763      Print the name of each header file used, in addition to other
   9764      normal activities.  Each name is indented to show how deep in the
   9765      `#include' stack it is.  Precompiled header files are also
   9766      printed, even if they are found to be invalid; an invalid
   9767      precompiled header file is printed with `...x' and a valid one
   9768      with `...!' .
   9769 
   9770 `-version'
   9771 `--version'
   9772      Print out GNU CPP's version number.  With one dash, proceed to
   9773      preprocess as normal.  With two dashes, exit immediately.
   9774 
   9775 
   9776 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
   9777 
   9778 3.12 Passing Options to the Assembler
   9779 =====================================
   9780 
   9781 You can pass options to the assembler.
   9782 
   9783 `-Wa,OPTION'
   9784      Pass OPTION as an option to the assembler.  If OPTION contains
   9785      commas, it is split into multiple options at the commas.
   9786 
   9787 `-Xassembler OPTION'
   9788      Pass OPTION as an option to the assembler.  You can use this to
   9789      supply system-specific assembler options that GCC does not
   9790      recognize.
   9791 
   9792      If you want to pass an option that takes an argument, you must use
   9793      `-Xassembler' twice, once for the option and once for the argument.
   9794 
   9795 
   9796 
   9797 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
   9798 
   9799 3.13 Options for Linking
   9800 ========================
   9801 
   9802 These options come into play when the compiler links object files into
   9803 an executable output file.  They are meaningless if the compiler is not
   9804 doing a link step.
   9805 
   9806 `OBJECT-FILE-NAME'
   9807      A file name that does not end in a special recognized suffix is
   9808      considered to name an object file or library.  (Object files are
   9809      distinguished from libraries by the linker according to the file
   9810      contents.)  If linking is done, these object files are used as
   9811      input to the linker.
   9812 
   9813 `-c'
   9814 `-S'
   9815 `-E'
   9816      If any of these options is used, then the linker is not run, and
   9817      object file names should not be used as arguments.  *Note Overall
   9818      Options::.
   9819 
   9820 `-lLIBRARY'
   9821 `-l LIBRARY'
   9822      Search the library named LIBRARY when linking.  (The second
   9823      alternative with the library as a separate argument is only for
   9824      POSIX compliance and is not recommended.)
   9825 
   9826      It makes a difference where in the command you write this option;
   9827      the linker searches and processes libraries and object files in
   9828      the order they are specified.  Thus, `foo.o -lz bar.o' searches
   9829      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
   9830      refers to functions in `z', those functions may not be loaded.
   9831 
   9832      The linker searches a standard list of directories for the library,
   9833      which is actually a file named `libLIBRARY.a'.  The linker then
   9834      uses this file as if it had been specified precisely by name.
   9835 
   9836      The directories searched include several standard system
   9837      directories plus any that you specify with `-L'.
   9838 
   9839      Normally the files found this way are library files--archive files
   9840      whose members are object files.  The linker handles an archive
   9841      file by scanning through it for members which define symbols that
   9842      have so far been referenced but not defined.  But if the file that
   9843      is found is an ordinary object file, it is linked in the usual
   9844      fashion.  The only difference between using an `-l' option and
   9845      specifying a file name is that `-l' surrounds LIBRARY with `lib'
   9846      and `.a' and searches several directories.
   9847 
   9848 `-lobjc'
   9849      You need this special case of the `-l' option in order to link an
   9850      Objective-C or Objective-C++ program.
   9851 
   9852 `-nostartfiles'
   9853      Do not use the standard system startup files when linking.  The
   9854      standard system libraries are used normally, unless `-nostdlib' or
   9855      `-nodefaultlibs' is used.
   9856 
   9857 `-nodefaultlibs'
   9858      Do not use the standard system libraries when linking.  Only the
   9859      libraries you specify are passed to the linker, and options
   9860      specifying linkage of the system libraries, such as
   9861      `-static-libgcc' or `-shared-libgcc', are ignored.  The standard
   9862      startup files are used normally, unless `-nostartfiles' is used.
   9863 
   9864      The compiler may generate calls to `memcmp', `memset', `memcpy'
   9865      and `memmove'.  These entries are usually resolved by entries in
   9866      libc.  These entry points should be supplied through some other
   9867      mechanism when this option is specified.
   9868 
   9869 `-nostdlib'
   9870      Do not use the standard system startup files or libraries when
   9871      linking.  No startup files and only the libraries you specify are
   9872      passed to the linker, and options specifying linkage of the system
   9873      libraries, such as `-static-libgcc' or `-shared-libgcc', are
   9874      ignored.
   9875 
   9876      The compiler may generate calls to `memcmp', `memset', `memcpy'
   9877      and `memmove'.  These entries are usually resolved by entries in
   9878      libc.  These entry points should be supplied through some other
   9879      mechanism when this option is specified.
   9880 
   9881      One of the standard libraries bypassed by `-nostdlib' and
   9882      `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
   9883      which GCC uses to overcome shortcomings of particular machines, or
   9884      special needs for some languages.  (*Note Interfacing to GCC
   9885      Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
   9886      most cases, you need `libgcc.a' even when you want to avoid other
   9887      standard libraries.  In other words, when you specify `-nostdlib'
   9888      or `-nodefaultlibs' you should usually specify `-lgcc' as well.
   9889      This ensures that you have no unresolved references to internal GCC
   9890      library subroutines.  (An example of such an internal subroutine
   9891      is `__main', used to ensure C++ constructors are called; *note
   9892      `collect2': (gccint)Collect2.)
   9893 
   9894 `-pie'
   9895      Produce a position independent executable on targets that support
   9896      it.  For predictable results, you must also specify the same set
   9897      of options used for compilation (`-fpie', `-fPIE', or model
   9898      suboptions) when you specify this linker option.
   9899 
   9900 `-rdynamic'
   9901      Pass the flag `-export-dynamic' to the ELF linker, on targets that
   9902      support it. This instructs the linker to add all symbols, not only
   9903      used ones, to the dynamic symbol table. This option is needed for
   9904      some uses of `dlopen' or to allow obtaining backtraces from within
   9905      a program.
   9906 
   9907 `-s'
   9908      Remove all symbol table and relocation information from the
   9909      executable.
   9910 
   9911 `-static'
   9912      On systems that support dynamic linking, this prevents linking
   9913      with the shared libraries.  On other systems, this option has no
   9914      effect.
   9915 
   9916 `-shared'
   9917      Produce a shared object which can then be linked with other
   9918      objects to form an executable.  Not all systems support this
   9919      option.  For predictable results, you must also specify the same
   9920      set of options used for compilation (`-fpic', `-fPIC', or model
   9921      suboptions) when you specify this linker option.(1)
   9922 
   9923 `-shared-libgcc'
   9924 `-static-libgcc'
   9925      On systems that provide `libgcc' as a shared library, these options
   9926      force the use of either the shared or static version, respectively.
   9927      If no shared version of `libgcc' was built when the compiler was
   9928      configured, these options have no effect.
   9929 
   9930      There are several situations in which an application should use the
   9931      shared `libgcc' instead of the static version.  The most common of
   9932      these is when the application wishes to throw and catch exceptions
   9933      across different shared libraries.  In that case, each of the
   9934      libraries as well as the application itself should use the shared
   9935      `libgcc'.
   9936 
   9937      Therefore, the G++ and GCJ drivers automatically add
   9938      `-shared-libgcc' whenever you build a shared library or a main
   9939      executable, because C++ and Java programs typically use
   9940      exceptions, so this is the right thing to do.
   9941 
   9942      If, instead, you use the GCC driver to create shared libraries,
   9943      you may find that they are not always linked with the shared
   9944      `libgcc'.  If GCC finds, at its configuration time, that you have
   9945      a non-GNU linker or a GNU linker that does not support option
   9946      `--eh-frame-hdr', it links the shared version of `libgcc' into
   9947      shared libraries by default.  Otherwise, it takes advantage of the
   9948      linker and optimizes away the linking with the shared version of
   9949      `libgcc', linking with the static version of libgcc by default.
   9950      This allows exceptions to propagate through such shared libraries,
   9951      without incurring relocation costs at library load time.
   9952 
   9953      However, if a library or main executable is supposed to throw or
   9954      catch exceptions, you must link it using the G++ or GCJ driver, as
   9955      appropriate for the languages used in the program, or using the
   9956      option `-shared-libgcc', such that it is linked with the shared
   9957      `libgcc'.
   9958 
   9959 `-static-libasan'
   9960      When the `-fsanitize=address' option is used to link a program,
   9961      the GCC driver automatically links against `libasan'.  If
   9962      `libasan' is available as a shared library, and the `-static'
   9963      option is not used, then this links against the shared version of
   9964      `libasan'.  The `-static-libasan' option directs the GCC driver to
   9965      link `libasan' statically, without necessarily linking other
   9966      libraries statically.
   9967 
   9968 `-static-libtsan'
   9969      When the `-fsanitize=thread' option is used to link a program, the
   9970      GCC driver automatically links against `libtsan'.  If `libtsan' is
   9971      available as a shared library, and the `-static' option is not
   9972      used, then this links against the shared version of `libtsan'.
   9973      The `-static-libtsan' option directs the GCC driver to link
   9974      `libtsan' statically, without necessarily linking other libraries
   9975      statically.
   9976 
   9977 `-static-libstdc++'
   9978      When the `g++' program is used to link a C++ program, it normally
   9979      automatically links against `libstdc++'.  If `libstdc++' is
   9980      available as a shared library, and the `-static' option is not
   9981      used, then this links against the shared version of `libstdc++'.
   9982      That is normally fine.  However, it is sometimes useful to freeze
   9983      the version of `libstdc++' used by the program without going all
   9984      the way to a fully static link.  The `-static-libstdc++' option
   9985      directs the `g++' driver to link `libstdc++' statically, without
   9986      necessarily linking other libraries statically.
   9987 
   9988 `-symbolic'
   9989      Bind references to global symbols when building a shared object.
   9990      Warn about any unresolved references (unless overridden by the
   9991      link editor option `-Xlinker -z -Xlinker defs').  Only a few
   9992      systems support this option.
   9993 
   9994 `-T SCRIPT'
   9995      Use SCRIPT as the linker script.  This option is supported by most
   9996      systems using the GNU linker.  On some targets, such as bare-board
   9997      targets without an operating system, the `-T' option may be
   9998      required when linking to avoid references to undefined symbols.
   9999 
   10000 `-Xlinker OPTION'
   10001      Pass OPTION as an option to the linker.  You can use this to
   10002      supply system-specific linker options that GCC does not recognize.
   10003 
   10004      If you want to pass an option that takes a separate argument, you
   10005      must use `-Xlinker' twice, once for the option and once for the
   10006      argument.  For example, to pass `-assert definitions', you must
   10007      write `-Xlinker -assert -Xlinker definitions'.  It does not work
   10008      to write `-Xlinker "-assert definitions"', because this passes the
   10009      entire string as a single argument, which is not what the linker
   10010      expects.
   10011 
   10012      When using the GNU linker, it is usually more convenient to pass
   10013      arguments to linker options using the `OPTION=VALUE' syntax than
   10014      as separate arguments.  For example, you can specify `-Xlinker
   10015      -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
   10016      Other linkers may not support this syntax for command-line options.
   10017 
   10018 `-Wl,OPTION'
   10019      Pass OPTION as an option to the linker.  If OPTION contains
   10020      commas, it is split into multiple options at the commas.  You can
   10021      use this syntax to pass an argument to the option.  For example,
   10022      `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
   10023      When using the GNU linker, you can also get the same effect with
   10024      `-Wl,-Map=output.map'.
   10025 
   10026 `-u SYMBOL'
   10027      Pretend the symbol SYMBOL is undefined, to force linking of
   10028      library modules to define it.  You can use `-u' multiple times with
   10029      different symbols to force loading of additional library modules.
   10030 
   10031  ---------- Footnotes ----------
   10032 
   10033  (1) On some systems, `gcc -shared' needs to build supplementary stub
   10034 code for constructors to work.  On multi-libbed systems, `gcc -shared'
   10035 must select the correct support libraries to link against.  Failing to
   10036 supply the correct flags may lead to subtle defects.  Supplying them in
   10037 cases where they are not necessary is innocuous.
   10038 
   10039 
   10040 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
   10041 
   10042 3.14 Options for Directory Search
   10043 =================================
   10044 
   10045 These options specify directories to search for header files, for
   10046 libraries and for parts of the compiler:
   10047 
   10048 `-IDIR'
   10049      Add the directory DIR to the head of the list of directories to be
   10050      searched for header files.  This can be used to override a system
   10051      header file, substituting your own version, since these
   10052      directories are searched before the system header file
   10053      directories.  However, you should not use this option to add
   10054      directories that contain vendor-supplied system header files (use
   10055      `-isystem' for that).  If you use more than one `-I' option, the
   10056      directories are scanned in left-to-right order; the standard
   10057      system directories come after.
   10058 
   10059      If a standard system include directory, or a directory specified
   10060      with `-isystem', is also specified with `-I', the `-I' option is
   10061      ignored.  The directory is still searched but as a system
   10062      directory at its normal position in the system include chain.
   10063      This is to ensure that GCC's procedure to fix buggy system headers
   10064      and the ordering for the `include_next' directive are not
   10065      inadvertently changed.  If you really need to change the search
   10066      order for system directories, use the `-nostdinc' and/or
   10067      `-isystem' options.
   10068 
   10069 `-iplugindir=DIR'
   10070      Set the directory to search for plugins that are passed by
   10071      `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
   10072      is not meant to be used by the user, but only passed by the driver.
   10073 
   10074 `-iquoteDIR'
   10075      Add the directory DIR to the head of the list of directories to be
   10076      searched for header files only for the case of `#include "FILE"';
   10077      they are not searched for `#include <FILE>', otherwise just like
   10078      `-I'.
   10079 
   10080 `-LDIR'
   10081      Add directory DIR to the list of directories to be searched for
   10082      `-l'.
   10083 
   10084 `-BPREFIX'
   10085      This option specifies where to find the executables, libraries,
   10086      include files, and data files of the compiler itself.
   10087 
   10088      The compiler driver program runs one or more of the subprograms
   10089      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
   10090      program it tries to run, both with and without `MACHINE/VERSION/'
   10091      (*note Target Options::).
   10092 
   10093      For each subprogram to be run, the compiler driver first tries the
   10094      `-B' prefix, if any.  If that name is not found, or if `-B' is not
   10095      specified, the driver tries two standard prefixes, `/usr/lib/gcc/'
   10096      and `/usr/local/lib/gcc/'.  If neither of those results in a file
   10097      name that is found, the unmodified program name is searched for
   10098      using the directories specified in your `PATH' environment
   10099      variable.
   10100 
   10101      The compiler checks to see if the path provided by the `-B' refers
   10102      to a directory, and if necessary it adds a directory separator
   10103      character at the end of the path.
   10104 
   10105      `-B' prefixes that effectively specify directory names also apply
   10106      to libraries in the linker, because the compiler translates these
   10107      options into `-L' options for the linker.  They also apply to
   10108      includes files in the preprocessor, because the compiler
   10109      translates these options into `-isystem' options for the
   10110      preprocessor.  In this case, the compiler appends `include' to the
   10111      prefix.
   10112 
   10113      The runtime support file `libgcc.a' can also be searched for using
   10114      the `-B' prefix, if needed.  If it is not found there, the two
   10115      standard prefixes above are tried, and that is all.  The file is
   10116      left out of the link if it is not found by those means.
   10117 
   10118      Another way to specify a prefix much like the `-B' prefix is to use
   10119      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
   10120      Variables::.
   10121 
   10122      As a special kludge, if the path provided by `-B' is
   10123      `[dir/]stageN/', where N is a number in the range 0 to 9, then it
   10124      is replaced by `[dir/]include'.  This is to help with
   10125      boot-strapping the compiler.
   10126 
   10127 `-specs=FILE'
   10128      Process FILE after the compiler reads in the standard `specs'
   10129      file, in order to override the defaults which the `gcc' driver
   10130      program uses when determining what switches to pass to `cc1',
   10131      `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
   10132      specified on the command line, and they are processed in order,
   10133      from left to right.
   10134 
   10135 `--sysroot=DIR'
   10136      Use DIR as the logical root directory for headers and libraries.
   10137      For example, if the compiler normally searches for headers in
   10138      `/usr/include' and libraries in `/usr/lib', it instead searches
   10139      `DIR/usr/include' and `DIR/usr/lib'.
   10140 
   10141      If you use both this option and the `-isysroot' option, then the
   10142      `--sysroot' option applies to libraries, but the `-isysroot'
   10143      option applies to header files.
   10144 
   10145      The GNU linker (beginning with version 2.16) has the necessary
   10146      support for this option.  If your linker does not support this
   10147      option, the header file aspect of `--sysroot' still works, but the
   10148      library aspect does not.
   10149 
   10150 `--no-sysroot-suffix'
   10151      For some targets, a suffix is added to the root directory specified
   10152      with `--sysroot', depending on the other options used, so that
   10153      headers may for example be found in `DIR/SUFFIX/usr/include'
   10154      instead of `DIR/usr/include'.  This option disables the addition of
   10155      such a suffix.
   10156 
   10157 `-I-'
   10158      This option has been deprecated.  Please use `-iquote' instead for
   10159      `-I' directories before the `-I-' and remove the `-I-'.  Any
   10160      directories you specify with `-I' options before the `-I-' option
   10161      are searched only for the case of `#include "FILE"'; they are not
   10162      searched for `#include <FILE>'.
   10163 
   10164      If additional directories are specified with `-I' options after
   10165      the `-I-', these directories are searched for all `#include'
   10166      directives.  (Ordinarily _all_ `-I' directories are used this way.)
   10167 
   10168      In addition, the `-I-' option inhibits the use of the current
   10169      directory (where the current input file came from) as the first
   10170      search directory for `#include "FILE"'.  There is no way to
   10171      override this effect of `-I-'.  With `-I.' you can specify
   10172      searching the directory that is current when the compiler is
   10173      invoked.  That is not exactly the same as what the preprocessor
   10174      does by default, but it is often satisfactory.
   10175 
   10176      `-I-' does not inhibit the use of the standard system directories
   10177      for header files.  Thus, `-I-' and `-nostdinc' are independent.
   10178 
   10179 
   10180 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
   10181 
   10182 3.15 Specifying subprocesses and the switches to pass to them
   10183 =============================================================
   10184 
   10185 `gcc' is a driver program.  It performs its job by invoking a sequence
   10186 of other programs to do the work of compiling, assembling and linking.
   10187 GCC interprets its command-line parameters and uses these to deduce
   10188 which programs it should invoke, and which command-line options it
   10189 ought to place on their command lines.  This behavior is controlled by
   10190 "spec strings".  In most cases there is one spec string for each
   10191 program that GCC can invoke, but a few programs have multiple spec
   10192 strings to control their behavior.  The spec strings built into GCC can
   10193 be overridden by using the `-specs=' command-line switch to specify a
   10194 spec file.
   10195 
   10196  "Spec files" are plaintext files that are used to construct spec
   10197 strings.  They consist of a sequence of directives separated by blank
   10198 lines.  The type of directive is determined by the first non-whitespace
   10199 character on the line, which can be one of the following:
   10200 
   10201 `%COMMAND'
   10202      Issues a COMMAND to the spec file processor.  The commands that can
   10203      appear here are:
   10204 
   10205     `%include <FILE>'
   10206           Search for FILE and insert its text at the current point in
   10207           the specs file.
   10208 
   10209     `%include_noerr <FILE>'
   10210           Just like `%include', but do not generate an error message if
   10211           the include file cannot be found.
   10212 
   10213     `%rename OLD_NAME NEW_NAME'
   10214           Rename the spec string OLD_NAME to NEW_NAME.
   10215 
   10216 
   10217 `*[SPEC_NAME]:'
   10218      This tells the compiler to create, override or delete the named
   10219      spec string.  All lines after this directive up to the next
   10220      directive or blank line are considered to be the text for the spec
   10221      string.  If this results in an empty string then the spec is
   10222      deleted.  (Or, if the spec did not exist, then nothing happens.)
   10223      Otherwise, if the spec does not currently exist a new spec is
   10224      created.  If the spec does exist then its contents are overridden
   10225      by the text of this directive, unless the first character of that
   10226      text is the `+' character, in which case the text is appended to
   10227      the spec.
   10228 
   10229 `[SUFFIX]:'
   10230      Creates a new `[SUFFIX] spec' pair.  All lines after this directive
   10231      and up to the next directive or blank line are considered to make
   10232      up the spec string for the indicated suffix.  When the compiler
   10233      encounters an input file with the named suffix, it processes the
   10234      spec string in order to work out how to compile that file.  For
   10235      example:
   10236 
   10237           .ZZ:
   10238           z-compile -input %i
   10239 
   10240      This says that any input file whose name ends in `.ZZ' should be
   10241      passed to the program `z-compile', which should be invoked with the
   10242      command-line switch `-input' and with the result of performing the
   10243      `%i' substitution.  (See below.)
   10244 
   10245      As an alternative to providing a spec string, the text following a
   10246      suffix directive can be one of the following:
   10247 
   10248     `@LANGUAGE'
   10249           This says that the suffix is an alias for a known LANGUAGE.
   10250           This is similar to using the `-x' command-line switch to GCC
   10251           to specify a language explicitly.  For example:
   10252 
   10253                .ZZ:
   10254                @c++
   10255 
   10256           Says that .ZZ files are, in fact, C++ source files.
   10257 
   10258     `#NAME'
   10259           This causes an error messages saying:
   10260 
   10261                NAME compiler not installed on this system.
   10262 
   10263      GCC already has an extensive list of suffixes built into it.  This
   10264      directive adds an entry to the end of the list of suffixes, but
   10265      since the list is searched from the end backwards, it is
   10266      effectively possible to override earlier entries using this
   10267      technique.
   10268 
   10269 
   10270  GCC has the following spec strings built into it.  Spec files can
   10271 override these strings or create their own.  Note that individual
   10272 targets can also add their own spec strings to this list.
   10273 
   10274      asm          Options to pass to the assembler
   10275      asm_final    Options to pass to the assembler post-processor
   10276      cpp          Options to pass to the C preprocessor
   10277      cc1          Options to pass to the C compiler
   10278      cc1plus      Options to pass to the C++ compiler
   10279      endfile      Object files to include at the end of the link
   10280      link         Options to pass to the linker
   10281      lib          Libraries to include on the command line to the linker
   10282      libgcc       Decides which GCC support library to pass to the linker
   10283      linker       Sets the name of the linker
   10284      predefines   Defines to be passed to the C preprocessor
   10285      signed_char  Defines to pass to CPP to say whether `char' is signed
   10286                   by default
   10287      startfile    Object files to include at the start of the link
   10288 
   10289  Here is a small example of a spec file:
   10290 
   10291      %rename lib                 old_lib
   10292 
   10293      *lib:
   10294      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
   10295 
   10296  This example renames the spec called `lib' to `old_lib' and then
   10297 overrides the previous definition of `lib' with a new one.  The new
   10298 definition adds in some extra command-line options before including the
   10299 text of the old definition.
   10300 
   10301  "Spec strings" are a list of command-line options to be passed to their
   10302 corresponding program.  In addition, the spec strings can contain
   10303 `%'-prefixed sequences to substitute variable text or to conditionally
   10304 insert text into the command line.  Using these constructs it is
   10305 possible to generate quite complex command lines.
   10306 
   10307  Here is a table of all defined `%'-sequences for spec strings.  Note
   10308 that spaces are not generated automatically around the results of
   10309 expanding these sequences.  Therefore you can concatenate them together
   10310 or combine them with constant text in a single argument.
   10311 
   10312 `%%'
   10313      Substitute one `%' into the program name or argument.
   10314 
   10315 `%i'
   10316      Substitute the name of the input file being processed.
   10317 
   10318 `%b'
   10319      Substitute the basename of the input file being processed.  This
   10320      is the substring up to (and not including) the last period and not
   10321      including the directory.
   10322 
   10323 `%B'
   10324      This is the same as `%b', but include the file suffix (text after
   10325      the last period).
   10326 
   10327 `%d'
   10328      Marks the argument containing or following the `%d' as a temporary
   10329      file name, so that that file is deleted if GCC exits successfully.
   10330      Unlike `%g', this contributes no text to the argument.
   10331 
   10332 `%gSUFFIX'
   10333      Substitute a file name that has suffix SUFFIX and is chosen once
   10334      per compilation, and mark the argument in the same way as `%d'.
   10335      To reduce exposure to denial-of-service attacks, the file name is
   10336      now chosen in a way that is hard to predict even when previously
   10337      chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
   10338      might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
   10339      matches the regexp `[.A-Za-z]*' or the special string `%O', which
   10340      is treated exactly as if `%O' had been preprocessed.  Previously,
   10341      `%g' was simply substituted with a file name chosen once per
   10342      compilation, without regard to any appended suffix (which was
   10343      therefore treated just like ordinary text), making such attacks
   10344      more likely to succeed.
   10345 
   10346 `%uSUFFIX'
   10347      Like `%g', but generates a new temporary file name each time it
   10348      appears instead of once per compilation.
   10349 
   10350 `%USUFFIX'
   10351      Substitutes the last file name generated with `%uSUFFIX',
   10352      generating a new one if there is no such last file name.  In the
   10353      absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
   10354      they don't share the same suffix _space_, so `%g.s ... %U.s ...
   10355      %g.s ... %U.s' involves the generation of two distinct file names,
   10356      one for each `%g.s' and another for each `%U.s'.  Previously, `%U'
   10357      was simply substituted with a file name chosen for the previous
   10358      `%u', without regard to any appended suffix.
   10359 
   10360 `%jSUFFIX'
   10361      Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
   10362      writable, and if `-save-temps' is not used; otherwise, substitute
   10363      the name of a temporary file, just like `%u'.  This temporary file
   10364      is not meant for communication between processes, but rather as a
   10365      junk disposal mechanism.
   10366 
   10367 `%|SUFFIX'
   10368 `%mSUFFIX'
   10369      Like `%g', except if `-pipe' is in effect.  In that case `%|'
   10370      substitutes a single dash and `%m' substitutes nothing at all.
   10371      These are the two most common ways to instruct a program that it
   10372      should read from standard input or write to standard output.  If
   10373      you need something more elaborate you can use an `%{pipe:`X'}'
   10374      construct: see for example `f/lang-specs.h'.
   10375 
   10376 `%.SUFFIX'
   10377      Substitutes .SUFFIX for the suffixes of a matched switch's args
   10378      when it is subsequently output with `%*'.  SUFFIX is terminated by
   10379      the next space or %.
   10380 
   10381 `%w'
   10382      Marks the argument containing or following the `%w' as the
   10383      designated output file of this compilation.  This puts the argument
   10384      into the sequence of arguments that `%o' substitutes.
   10385 
   10386 `%o'
   10387      Substitutes the names of all the output files, with spaces
   10388      automatically placed around them.  You should write spaces around
   10389      the `%o' as well or the results are undefined.  `%o' is for use in
   10390      the specs for running the linker.  Input files whose names have no
   10391      recognized suffix are not compiled at all, but they are included
   10392      among the output files, so they are linked.
   10393 
   10394 `%O'
   10395      Substitutes the suffix for object files.  Note that this is
   10396      handled specially when it immediately follows `%g, %u, or %U',
   10397      because of the need for those to form complete file names.  The
   10398      handling is such that `%O' is treated exactly as if it had already
   10399      been substituted, except that `%g, %u, and %U' do not currently
   10400      support additional SUFFIX characters following `%O' as they do
   10401      following, for example, `.o'.
   10402 
   10403 `%p'
   10404      Substitutes the standard macro predefinitions for the current
   10405      target machine.  Use this when running `cpp'.
   10406 
   10407 `%P'
   10408      Like `%p', but puts `__' before and after the name of each
   10409      predefined macro, except for macros that start with `__' or with
   10410      `_L', where L is an uppercase letter.  This is for ISO C.
   10411 
   10412 `%I'
   10413      Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
   10414      `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
   10415      from `COMPILER_PATH' and `-B' options) and `-imultilib' as
   10416      necessary.
   10417 
   10418 `%s'
   10419      Current argument is the name of a library or startup file of some
   10420      sort.  Search for that file in a standard list of directories and
   10421      substitute the full name found.  The current working directory is
   10422      included in the list of directories scanned.
   10423 
   10424 `%T'
   10425      Current argument is the name of a linker script.  Search for that
   10426      file in the current list of directories to scan for libraries. If
   10427      the file is located insert a `--script' option into the command
   10428      line followed by the full path name found.  If the file is not
   10429      found then generate an error message.  Note: the current working
   10430      directory is not searched.
   10431 
   10432 `%eSTR'
   10433      Print STR as an error message.  STR is terminated by a newline.
   10434      Use this when inconsistent options are detected.
   10435 
   10436 `%(NAME)'
   10437      Substitute the contents of spec string NAME at this point.
   10438 
   10439 `%x{OPTION}'
   10440      Accumulate an option for `%X'.
   10441 
   10442 `%X'
   10443      Output the accumulated linker options specified by `-Wl' or a `%x'
   10444      spec string.
   10445 
   10446 `%Y'
   10447      Output the accumulated assembler options specified by `-Wa'.
   10448 
   10449 `%Z'
   10450      Output the accumulated preprocessor options specified by `-Wp'.
   10451 
   10452 `%a'
   10453      Process the `asm' spec.  This is used to compute the switches to
   10454      be passed to the assembler.
   10455 
   10456 `%A'
   10457      Process the `asm_final' spec.  This is a spec string for passing
   10458      switches to an assembler post-processor, if such a program is
   10459      needed.
   10460 
   10461 `%l'
   10462      Process the `link' spec.  This is the spec for computing the
   10463      command line passed to the linker.  Typically it makes use of the
   10464      `%L %G %S %D and %E' sequences.
   10465 
   10466 `%D'
   10467      Dump out a `-L' option for each directory that GCC believes might
   10468      contain startup files.  If the target supports multilibs then the
   10469      current multilib directory is prepended to each of these paths.
   10470 
   10471 `%L'
   10472      Process the `lib' spec.  This is a spec string for deciding which
   10473      libraries are included on the command line to the linker.
   10474 
   10475 `%G'
   10476      Process the `libgcc' spec.  This is a spec string for deciding
   10477      which GCC support library is included on the command line to the
   10478      linker.
   10479 
   10480 `%S'
   10481      Process the `startfile' spec.  This is a spec for deciding which
   10482      object files are the first ones passed to the linker.  Typically
   10483      this might be a file named `crt0.o'.
   10484 
   10485 `%E'
   10486      Process the `endfile' spec.  This is a spec string that specifies
   10487      the last object files that are passed to the linker.
   10488 
   10489 `%C'
   10490      Process the `cpp' spec.  This is used to construct the arguments
   10491      to be passed to the C preprocessor.
   10492 
   10493 `%1'
   10494      Process the `cc1' spec.  This is used to construct the options to
   10495      be passed to the actual C compiler (`cc1').
   10496 
   10497 `%2'
   10498      Process the `cc1plus' spec.  This is used to construct the options
   10499      to be passed to the actual C++ compiler (`cc1plus').
   10500 
   10501 `%*'
   10502      Substitute the variable part of a matched option.  See below.
   10503      Note that each comma in the substituted string is replaced by a
   10504      single space.
   10505 
   10506 `%<`S''
   10507      Remove all occurrences of `-S' from the command line.  Note--this
   10508      command is position dependent.  `%' commands in the spec string
   10509      before this one see `-S', `%' commands in the spec string after
   10510      this one do not.
   10511 
   10512 `%:FUNCTION(ARGS)'
   10513      Call the named function FUNCTION, passing it ARGS.  ARGS is first
   10514      processed as a nested spec string, then split into an argument
   10515      vector in the usual fashion.  The function returns a string which
   10516      is processed as if it had appeared literally as part of the
   10517      current spec.
   10518 
   10519      The following built-in spec functions are provided:
   10520 
   10521     ``getenv''
   10522           The `getenv' spec function takes two arguments: an environment
   10523           variable name and a string.  If the environment variable is
   10524           not defined, a fatal error is issued.  Otherwise, the return
   10525           value is the value of the environment variable concatenated
   10526           with the string.  For example, if `TOPDIR' is defined as
   10527           `/path/to/top', then:
   10528 
   10529                %:getenv(TOPDIR /include)
   10530 
   10531           expands to `/path/to/top/include'.
   10532 
   10533     ``if-exists''
   10534           The `if-exists' spec function takes one argument, an absolute
   10535           pathname to a file.  If the file exists, `if-exists' returns
   10536           the pathname.  Here is a small example of its usage:
   10537 
   10538                *startfile:
   10539                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
   10540 
   10541     ``if-exists-else''
   10542           The `if-exists-else' spec function is similar to the
   10543           `if-exists' spec function, except that it takes two
   10544           arguments.  The first argument is an absolute pathname to a
   10545           file.  If the file exists, `if-exists-else' returns the
   10546           pathname.  If it does not exist, it returns the second
   10547           argument.  This way, `if-exists-else' can be used to select
   10548           one file or another, based on the existence of the first.
   10549           Here is a small example of its usage:
   10550 
   10551                *startfile:
   10552                crt0%O%s %:if-exists(crti%O%s) \
   10553                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
   10554 
   10555     ``replace-outfile''
   10556           The `replace-outfile' spec function takes two arguments.  It
   10557           looks for the first argument in the outfiles array and
   10558           replaces it with the second argument.  Here is a small
   10559           example of its usage:
   10560 
   10561                %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
   10562 
   10563     ``remove-outfile''
   10564           The `remove-outfile' spec function takes one argument.  It
   10565           looks for the first argument in the outfiles array and
   10566           removes it.  Here is a small example its usage:
   10567 
   10568                %:remove-outfile(-lm)
   10569 
   10570     ``pass-through-libs''
   10571           The `pass-through-libs' spec function takes any number of
   10572           arguments.  It finds any `-l' options and any non-options
   10573           ending in `.a' (which it assumes are the names of linker
   10574           input library archive files) and returns a result containing
   10575           all the found arguments each prepended by
   10576           `-plugin-opt=-pass-through=' and joined by spaces.  This list
   10577           is intended to be passed to the LTO linker plugin.
   10578 
   10579                %:pass-through-libs(%G %L %G)
   10580 
   10581     ``print-asm-header''
   10582           The `print-asm-header' function takes no arguments and simply
   10583           prints a banner like:
   10584 
   10585                Assembler options
   10586                =================
   10587 
   10588                Use "-Wa,OPTION" to pass "OPTION" to the assembler.
   10589 
   10590           It is used to separate compiler options from assembler options
   10591           in the `--target-help' output.
   10592 
   10593 `%{`S'}'
   10594      Substitutes the `-S' switch, if that switch is given to GCC.  If
   10595      that switch is not specified, this substitutes nothing.  Note that
   10596      the leading dash is omitted when specifying this option, and it is
   10597      automatically inserted if the substitution is performed.  Thus the
   10598      spec string `%{foo}' matches the command-line option `-foo' and
   10599      outputs the command-line option `-foo'.
   10600 
   10601 `%W{`S'}'
   10602      Like %{`S'} but mark last argument supplied within as a file to be
   10603      deleted on failure.
   10604 
   10605 `%{`S'*}'
   10606      Substitutes all the switches specified to GCC whose names start
   10607      with `-S', but which also take an argument.  This is used for
   10608      switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
   10609      being one switch whose name starts with `o'.  %{o*} substitutes
   10610      this text, including the space.  Thus two arguments are generated.
   10611 
   10612 `%{`S'*&`T'*}'
   10613      Like %{`S'*}, but preserve order of `S' and `T' options (the order
   10614      of `S' and `T' in the spec is not significant).  There can be any
   10615      number of ampersand-separated variables; for each the wild card is
   10616      optional.  Useful for CPP as `%{D*&U*&A*}'.
   10617 
   10618 `%{`S':`X'}'
   10619      Substitutes `X', if the `-S' switch is given to GCC.
   10620 
   10621 `%{!`S':`X'}'
   10622      Substitutes `X', if the `-S' switch is _not_ given to GCC.
   10623 
   10624 `%{`S'*:`X'}'
   10625      Substitutes `X' if one or more switches whose names start with
   10626      `-S' are specified to GCC.  Normally `X' is substituted only once,
   10627      no matter how many such switches appeared.  However, if `%*'
   10628      appears somewhere in `X', then `X' is substituted once for each
   10629      matching switch, with the `%*' replaced by the part of that switch
   10630      matching the `*'.
   10631 
   10632 `%{.`S':`X'}'
   10633      Substitutes `X', if processing a file with suffix `S'.
   10634 
   10635 `%{!.`S':`X'}'
   10636      Substitutes `X', if _not_ processing a file with suffix `S'.
   10637 
   10638 `%{,`S':`X'}'
   10639      Substitutes `X', if processing a file for language `S'.
   10640 
   10641 `%{!,`S':`X'}'
   10642      Substitutes `X', if not processing a file for language `S'.
   10643 
   10644 `%{`S'|`P':`X'}'
   10645      Substitutes `X' if either `-S' or `-P' is given to GCC.  This may
   10646      be combined with `!', `.', `,', and `*' sequences as well,
   10647      although they have a stronger binding than the `|'.  If `%*'
   10648      appears in `X', all of the alternatives must be starred, and only
   10649      the first matching alternative is substituted.
   10650 
   10651      For example, a spec string like this:
   10652 
   10653           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
   10654 
   10655      outputs the following command-line options from the following input
   10656      command-line options:
   10657 
   10658           fred.c        -foo -baz
   10659           jim.d         -bar -boggle
   10660           -d fred.c     -foo -baz -boggle
   10661           -d jim.d      -bar -baz -boggle
   10662 
   10663 `%{S:X; T:Y; :D}'
   10664      If `S' is given to GCC, substitutes `X'; else if `T' is given to
   10665      GCC, substitutes `Y'; else substitutes `D'.  There can be as many
   10666      clauses as you need.  This may be combined with `.', `,', `!',
   10667      `|', and `*' as needed.
   10668 
   10669 
   10670  The conditional text `X' in a %{`S':`X'} or similar construct may
   10671 contain other nested `%' constructs or spaces, or even newlines.  They
   10672 are processed as usual, as described above.  Trailing white space in
   10673 `X' is ignored.  White space may also appear anywhere on the left side
   10674 of the colon in these constructs, except between `.' or `*' and the
   10675 corresponding word.
   10676 
   10677  The `-O', `-f', `-m', and `-W' switches are handled specifically in
   10678 these constructs.  If another value of `-O' or the negated form of a
   10679 `-f', `-m', or `-W' switch is found later in the command line, the
   10680 earlier switch value is ignored, except with {`S'*} where `S' is just
   10681 one letter, which passes all matching options.
   10682 
   10683  The character `|' at the beginning of the predicate text is used to
   10684 indicate that a command should be piped to the following command, but
   10685 only if `-pipe' is specified.
   10686 
   10687  It is built into GCC which switches take arguments and which do not.
   10688 (You might think it would be useful to generalize this to allow each
   10689 compiler's spec to say which switches take arguments.  But this cannot
   10690 be done in a consistent fashion.  GCC cannot even decide which input
   10691 files have been specified without knowing which switches take arguments,
   10692 and it must know which input files to compile in order to tell which
   10693 compilers to run).
   10694 
   10695  GCC also knows implicitly that arguments starting in `-l' are to be
   10696 treated as compiler output files, and passed to the linker in their
   10697 proper position among the other output files.
   10698 
   10699 
   10700 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
   10701 
   10702 3.16 Specifying Target Machine and Compiler Version
   10703 ===================================================
   10704 
   10705 The usual way to run GCC is to run the executable called `gcc', or
   10706 `MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
   10707 version other than the one that was installed last.
   10708 
   10709 
   10710 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
   10711 
   10712 3.17 Hardware Models and Configurations
   10713 =======================================
   10714 
   10715 Each target machine types can have its own special options, starting
   10716 with `-m', to choose among various hardware models or
   10717 configurations--for example, 68010 vs 68020, floating coprocessor or
   10718 none.  A single installed version of the compiler can compile for any
   10719 model or configuration, according to the options specified.
   10720 
   10721  Some configurations of the compiler also support additional special
   10722 options, usually for compatibility with other compilers on the same
   10723 platform.
   10724 
   10725 * Menu:
   10726 
   10727 * AArch64 Options::
   10728 * Adapteva Epiphany Options::
   10729 * ARM Options::
   10730 * AVR Options::
   10731 * Blackfin Options::
   10732 * C6X Options::
   10733 * CRIS Options::
   10734 * CR16 Options::
   10735 * Darwin Options::
   10736 * DEC Alpha Options::
   10737 * FR30 Options::
   10738 * FRV Options::
   10739 * GNU/Linux Options::
   10740 * H8/300 Options::
   10741 * HPPA Options::
   10742 * i386 and x86-64 Options::
   10743 * i386 and x86-64 Windows Options::
   10744 * IA-64 Options::
   10745 * LM32 Options::
   10746 * M32C Options::
   10747 * M32R/D Options::
   10748 * M680x0 Options::
   10749 * MCore Options::
   10750 * MeP Options::
   10751 * MicroBlaze Options::
   10752 * MIPS Options::
   10753 * MMIX Options::
   10754 * MN10300 Options::
   10755 * Moxie Options::
   10756 * PDP-11 Options::
   10757 * picoChip Options::
   10758 * PowerPC Options::
   10759 * RL78 Options::
   10760 * RS/6000 and PowerPC Options::
   10761 * RX Options::
   10762 * S/390 and zSeries Options::
   10763 * Score Options::
   10764 * SH Options::
   10765 * Solaris 2 Options::
   10766 * SPARC Options::
   10767 * SPU Options::
   10768 * System V Options::
   10769 * TILE-Gx Options::
   10770 * TILEPro Options::
   10771 * V850 Options::
   10772 * VAX Options::
   10773 * VMS Options::
   10774 * VxWorks Options::
   10775 * x86-64 Options::
   10776 * Xstormy16 Options::
   10777 * Xtensa Options::
   10778 * zSeries Options::
   10779 
   10780 
   10781 File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
   10782 
   10783 3.17.1 AArch64 Options
   10784 ----------------------
   10785 
   10786 These options are defined for AArch64 implementations:
   10787 
   10788 `-mbig-endian'
   10789      Generate big-endian code.  This is the default when GCC is
   10790      configured for an `aarch64_be-*-*' target.
   10791 
   10792 `-mgeneral-regs-only'
   10793      Generate code which uses only the general registers.
   10794 
   10795 `-mlittle-endian'
   10796      Generate little-endian code.  This is the default when GCC is
   10797      configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target.
   10798 
   10799 `-mcmodel=tiny'
   10800      Generate code for the tiny code model.  The program and its
   10801      statically defined symbols must be within 1GB of each other.
   10802      Pointers are 64 bits.  Programs can be statically or dynamically
   10803      linked.  This model is not fully implemented and mostly treated as
   10804      `small'.
   10805 
   10806 `-mcmodel=small'
   10807      Generate code for the small code model.  The program and its
   10808      statically defined symbols must be within 4GB of each other.
   10809      Pointers are 64 bits.  Programs can be statically or dynamically
   10810      linked.  This is the default code model.
   10811 
   10812 `-mcmodel=large'
   10813      Generate code for the large code model.  This makes no assumptions
   10814      about addresses and sizes of sections.  Pointers are 64 bits.
   10815      Programs can be statically linked only.
   10816 
   10817 `-mstrict-align'
   10818      Do not assume that unaligned memory references will be handled by
   10819      the system.
   10820 
   10821 `-momit-leaf-frame-pointer'
   10822 `-mno-omit-leaf-frame-pointer'
   10823      Omit or keep the frame pointer in leaf functions.  The former
   10824      behaviour is the default.
   10825 
   10826 `-mtls-dialect=desc'
   10827      Use TLS descriptors as the thread-local storage mechanism for
   10828      dynamic accesses of TLS variables.  This is the default.
   10829 
   10830 `-mtls-dialect=traditional'
   10831      Use traditional TLS as the thread-local storage mechanism for
   10832      dynamic accesses of TLS variables.
   10833 
   10834 `-march=NAME'
   10835      Specify the name of the target architecture, optionally suffixed
   10836      by one or more feature modifiers.  This option has the form
   10837      `-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is
   10838      `armv8-a'.  The possible values for FEATURE are documented in the
   10839      sub-section below.
   10840 
   10841      Where conflicting feature modifiers are specified, the right-most
   10842      feature is used.
   10843 
   10844      GCC uses this name to determine what kind of instructions it can
   10845      emit when generating assembly code.  This option can be used in
   10846      conjunction with or instead of the `-mcpu=' option.
   10847 
   10848 `-mcpu=NAME'
   10849      Specify the name of the target processor, optionally suffixed by
   10850      one or more feature modifiers.  This option has the form
   10851      `-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are
   10852      `generic', `large'.  The possible values for FEATURE are
   10853      documented in the sub-section below.
   10854 
   10855      Where conflicting feature modifiers are specified, the right-most
   10856      feature is used.
   10857 
   10858      GCC uses this name to determine what kind of instructions it can
   10859      emit when generating assembly code.
   10860 
   10861 `-mtune=NAME'
   10862      Specify the name of the processor to tune the performance for.
   10863      The code will be tuned as if the target processor were of the type
   10864      specified in this option, but still using instructions compatible
   10865      with the target processor specified by a `-mcpu=' option.  This
   10866      option cannot be suffixed by feature modifiers.
   10867 
   10868 
   10869 3.17.1.1 `-march' and `-mcpu' feature modifiers
   10870 ...............................................
   10871 
   10872 Feature modifiers used with `-march' and `-mcpu' can be one the
   10873 following:
   10874 
   10875 `crypto'
   10876      Enable Crypto extension.  This implies Advanced SIMD is enabled.
   10877 
   10878 `fp'
   10879      Enable floating-point instructions.
   10880 
   10881 `simd'
   10882      Enable Advanced SIMD instructions.  This implies floating-point
   10883      instructions are enabled.  This is the default for all current
   10884      possible values for options `-march' and `-mcpu='.
   10885 
   10886 
   10887 File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARM Options,  Prev: AArch64 Options,  Up: Submodel Options
   10888 
   10889 3.17.2 Adapteva Epiphany Options
   10890 --------------------------------
   10891 
   10892 These `-m' options are defined for Adapteva Epiphany:
   10893 
   10894 `-mhalf-reg-file'
   10895      Don't allocate any register in the range `r32'...`r63'.  That
   10896      allows code to run on hardware variants that lack these registers.
   10897 
   10898 `-mprefer-short-insn-regs'
   10899      Preferrentially allocate registers that allow short instruction
   10900      generation.  This can result in increased instruction count, so
   10901      this may either reduce or increase overall code size.
   10902 
   10903 `-mbranch-cost=NUM'
   10904      Set the cost of branches to roughly NUM "simple" instructions.
   10905      This cost is only a heuristic and is not guaranteed to produce
   10906      consistent results across releases.
   10907 
   10908 `-mcmove'
   10909      Enable the generation of conditional moves.
   10910 
   10911 `-mnops=NUM'
   10912      Emit NUM NOPs before every other generated instruction.
   10913 
   10914 `-mno-soft-cmpsf'
   10915      For single-precision floating-point comparisons, emit an `fsub'
   10916      instruction and test the flags.  This is faster than a software
   10917      comparison, but can get incorrect results in the presence of NaNs,
   10918      or when two different small numbers are compared such that their
   10919      difference is calculated as zero.  The default is `-msoft-cmpsf',
   10920      which uses slower, but IEEE-compliant, software comparisons.
   10921 
   10922 `-mstack-offset=NUM'
   10923      Set the offset between the top of the stack and the stack pointer.
   10924      E.g., a value of 8 means that the eight bytes in the range
   10925      `sp+0...sp+7' can be used by leaf functions without stack
   10926      allocation.  Values other than `8' or `16' are untested and
   10927      unlikely to work.  Note also that this option changes the ABI;
   10928      compiling a program with a different stack offset than the
   10929      libraries have been compiled with generally does not work.  This
   10930      option can be useful if you want to evaluate if a different stack
   10931      offset would give you better code, but to actually use a different
   10932      stack offset to build working programs, it is recommended to
   10933      configure the toolchain with the appropriate
   10934      `--with-stack-offset=NUM' option.
   10935 
   10936 `-mno-round-nearest'
   10937      Make the scheduler assume that the rounding mode has been set to
   10938      truncating.  The default is `-mround-nearest'.
   10939 
   10940 `-mlong-calls'
   10941      If not otherwise specified by an attribute, assume all calls might
   10942      be beyond the offset range of the `b' / `bl' instructions, and
   10943      therefore load the function address into a register before
   10944      performing a (otherwise direct) call.  This is the default.
   10945 
   10946 `-mshort-calls'
   10947      If not otherwise specified by an attribute, assume all direct
   10948      calls are in the range of the `b' / `bl' instructions, so use
   10949      these instructions for direct calls.  The default is
   10950      `-mlong-calls'.
   10951 
   10952 `-msmall16'
   10953      Assume addresses can be loaded as 16-bit unsigned values.  This
   10954      does not apply to function addresses for which `-mlong-calls'
   10955      semantics are in effect.
   10956 
   10957 `-mfp-mode=MODE'
   10958      Set the prevailing mode of the floating-point unit.  This
   10959      determines the floating-point mode that is provided and expected
   10960      at function call and return time.  Making this mode match the mode
   10961      you predominantly need at function start can make your programs
   10962      smaller and faster by avoiding unnecessary mode switches.
   10963 
   10964      MODE can be set to one the following values:
   10965 
   10966     `caller'
   10967           Any mode at function entry is valid, and retained or restored
   10968           when the function returns, and when it calls other functions.
   10969           This mode is useful for compiling libraries or other
   10970           compilation units you might want to incorporate into
   10971           different programs with different prevailing FPU modes, and
   10972           the convenience of being able to use a single object file
   10973           outweighs the size and speed overhead for any extra mode
   10974           switching that might be needed, compared with what would be
   10975           needed with a more specific choice of prevailing FPU mode.
   10976 
   10977     `truncate'
   10978           This is the mode used for floating-point calculations with
   10979           truncating (i.e. round towards zero) rounding mode.  That
   10980           includes conversion from floating point to integer.
   10981 
   10982     `round-nearest'
   10983           This is the mode used for floating-point calculations with
   10984           round-to-nearest-or-even rounding mode.
   10985 
   10986     `int'
   10987           This is the mode used to perform integer calculations in the
   10988           FPU, e.g.  integer multiply, or integer
   10989           multiply-and-accumulate.
   10990 
   10991      The default is `-mfp-mode=caller'
   10992 
   10993 `-mnosplit-lohi'
   10994 `-mno-postinc'
   10995 `-mno-postmodify'
   10996      Code generation tweaks that disable, respectively, splitting of
   10997      32-bit loads, generation of post-increment addresses, and
   10998      generation of post-modify addresses.  The defaults are
   10999      `msplit-lohi', `-mpost-inc', and `-mpost-modify'.
   11000 
   11001 `-mnovect-double'
   11002      Change the preferred SIMD mode to SImode.  The default is
   11003      `-mvect-double', which uses DImode as preferred SIMD mode.
   11004 
   11005 `-max-vect-align=NUM'
   11006      The maximum alignment for SIMD vector mode types.  NUM may be 4 or
   11007      8.  The default is 8.  Note that this is an ABI change, even
   11008      though many library function interfaces are unaffected if they
   11009      don't use SIMD vector modes in places that affect size and/or
   11010      alignment of relevant types.
   11011 
   11012 `-msplit-vecmove-early'
   11013      Split vector moves into single word moves before reload.  In
   11014      theory this can give better register allocation, but so far the
   11015      reverse seems to be generally the case.
   11016 
   11017 `-m1reg-REG'
   11018      Specify a register to hold the constant -1, which makes loading
   11019      small negative constants and certain bitmasks faster.  Allowable
   11020      values for REG are `r43' and `r63', which specify use of that
   11021      register as a fixed register, and `none', which means that no
   11022      register is used for this purpose.  The default is `-m1reg-none'.
   11023 
   11024 
   11025 
   11026 File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
   11027 
   11028 3.17.3 ARM Options
   11029 ------------------
   11030 
   11031 These `-m' options are defined for Advanced RISC Machines (ARM)
   11032 architectures:
   11033 
   11034 `-mabi=NAME'
   11035      Generate code for the specified ABI.  Permissible values are:
   11036      `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
   11037 
   11038 `-mapcs-frame'
   11039      Generate a stack frame that is compliant with the ARM Procedure
   11040      Call Standard for all functions, even if this is not strictly
   11041      necessary for correct execution of the code.  Specifying
   11042      `-fomit-frame-pointer' with this option causes the stack frames
   11043      not to be generated for leaf functions.  The default is
   11044      `-mno-apcs-frame'.
   11045 
   11046 `-mapcs'
   11047      This is a synonym for `-mapcs-frame'.
   11048 
   11049 `-mthumb-interwork'
   11050      Generate code that supports calling between the ARM and Thumb
   11051      instruction sets.  Without this option, on pre-v5 architectures,
   11052      the two instruction sets cannot be reliably used inside one
   11053      program.  The default is `-mno-thumb-interwork', since slightly
   11054      larger code is generated when `-mthumb-interwork' is specified.
   11055      In AAPCS configurations this option is meaningless.
   11056 
   11057 `-mno-sched-prolog'
   11058      Prevent the reordering of instructions in the function prologue,
   11059      or the merging of those instruction with the instructions in the
   11060      function's body.  This means that all functions start with a
   11061      recognizable set of instructions (or in fact one of a choice from
   11062      a small set of different function prologues), and this information
   11063      can be used to locate the start of functions inside an executable
   11064      piece of code.  The default is `-msched-prolog'.
   11065 
   11066 `-mfloat-abi=NAME'
   11067      Specifies which floating-point ABI to use.  Permissible values
   11068      are: `soft', `softfp' and `hard'.
   11069 
   11070      Specifying `soft' causes GCC to generate output containing library
   11071      calls for floating-point operations.  `softfp' allows the
   11072      generation of code using hardware floating-point instructions, but
   11073      still uses the soft-float calling conventions.  `hard' allows
   11074      generation of floating-point instructions and uses FPU-specific
   11075      calling conventions.
   11076 
   11077      The default depends on the specific target configuration.  Note
   11078      that the hard-float and soft-float ABIs are not link-compatible;
   11079      you must compile your entire program with the same ABI, and link
   11080      with a compatible set of libraries.
   11081 
   11082 `-mlittle-endian'
   11083      Generate code for a processor running in little-endian mode.  This
   11084      is the default for all standard configurations.
   11085 
   11086 `-mbig-endian'
   11087      Generate code for a processor running in big-endian mode; the
   11088      default is to compile code for a little-endian processor.
   11089 
   11090 `-mwords-little-endian'
   11091      This option only applies when generating code for big-endian
   11092      processors.  Generate code for a little-endian word order but a
   11093      big-endian byte order.  That is, a byte order of the form
   11094      `32107654'.  Note: this option should only be used if you require
   11095      compatibility with code for big-endian ARM processors generated by
   11096      versions of the compiler prior to 2.8.  This option is now
   11097      deprecated.
   11098 
   11099 `-march=NAME'
   11100      This specifies the name of the target ARM architecture.  GCC uses
   11101      this name to determine what kind of instructions it can emit when
   11102      generating assembly code.  This option can be used in conjunction
   11103      with or instead of the `-mcpu=' option.  Permissible names are:
   11104      `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
   11105      `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
   11106      `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
   11107      `armv7-m', `armv7e-m' `armv8-a', `iwmmxt', `iwmmxt2', `ep9312'.
   11108 
   11109      `-march=native' causes the compiler to auto-detect the architecture
   11110      of the build computer.  At present, this feature is only supported
   11111      on Linux, and not all architectures are recognized.  If the
   11112      auto-detect is unsuccessful the option has no effect.
   11113 
   11114 `-mtune=NAME'
   11115      This option specifies the name of the target ARM processor for
   11116      which GCC should tune the performance of the code.  For some ARM
   11117      implementations better performance can be obtained by using this
   11118      option.  Permissible names are: `arm2', `arm250', `arm3', `arm6',
   11119      `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d',
   11120      `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i',
   11121      `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe',
   11122      `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t',
   11123      `strongarm', `strongarm110', `strongarm1100', `strongarm1110',
   11124      `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t',
   11125      `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t',
   11126      `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e',
   11127      `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore',
   11128      `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s',
   11129      `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9',
   11130      `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-m4',
   11131      `cortex-m3', `cortex-m1', `cortex-m0', `cortex-m0plus',
   11132      `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', `ep9312', `fa526',
   11133      `fa626', `fa606te', `fa626te', `fmp626', `fa726te'.
   11134 
   11135      `-mtune=generic-ARCH' specifies that GCC should tune the
   11136      performance for a blend of processors within architecture ARCH.
   11137      The aim is to generate code that run well on the current most
   11138      popular processors, balancing between optimizations that benefit
   11139      some CPUs in the range, and avoiding performance pitfalls of other
   11140      CPUs.  The effects of this option may change in future GCC
   11141      versions as CPU models come and go.
   11142 
   11143      `-mtune=native' causes the compiler to auto-detect the CPU of the
   11144      build computer.  At present, this feature is only supported on
   11145      Linux, and not all architectures are recognized.  If the
   11146      auto-detect is unsuccessful the option has no effect.
   11147 
   11148 `-mcpu=NAME'
   11149      This specifies the name of the target ARM processor.  GCC uses
   11150      this name to derive the name of the target ARM architecture (as if
   11151      specified by `-march') and the ARM processor type for which to
   11152      tune for performance (as if specified by `-mtune').  Where this
   11153      option is used in conjunction with `-march' or `-mtune', those
   11154      options take precedence over the appropriate part of this option.
   11155 
   11156      Permissible names for this option are the same as those for
   11157      `-mtune'.
   11158 
   11159      `-mcpu=generic-ARCH' is also permissible, and is equivalent to
   11160      `-march=ARCH -mtune=generic-ARCH'.  See `-mtune' for more
   11161      information.
   11162 
   11163      `-mcpu=native' causes the compiler to auto-detect the CPU of the
   11164      build computer.  At present, this feature is only supported on
   11165      Linux, and not all architectures are recognized.  If the
   11166      auto-detect is unsuccessful the option has no effect.
   11167 
   11168 `-mfpu=NAME'
   11169      This specifies what floating-point hardware (or hardware
   11170      emulation) is available on the target.  Permissible names are:
   11171      `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16',
   11172      `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4',
   11173      `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fp-armv8',
   11174      `neon-fp-armv8', and `crypto-neon-fp-armv8'.
   11175 
   11176      If `-msoft-float' is specified this specifies the format of
   11177      floating-point values.
   11178 
   11179      If the selected floating-point hardware includes the NEON extension
   11180      (e.g. `-mfpu'=`neon'), note that floating-point operations are not
   11181      generated by GCC's auto-vectorization pass unless
   11182      `-funsafe-math-optimizations' is also specified.  This is because
   11183      NEON hardware does not fully implement the IEEE 754 standard for
   11184      floating-point arithmetic (in particular denormal values are
   11185      treated as zero), so the use of NEON instructions may lead to a
   11186      loss of precision.
   11187 
   11188 `-mfp16-format=NAME'
   11189      Specify the format of the `__fp16' half-precision floating-point
   11190      type.  Permissible names are `none', `ieee', and `alternative';
   11191      the default is `none', in which case the `__fp16' type is not
   11192      defined.  *Note Half-Precision::, for more information.
   11193 
   11194 `-mstructure-size-boundary=N'
   11195      The sizes of all structures and unions are rounded up to a multiple
   11196      of the number of bits set by this option.  Permissible values are
   11197      8, 32 and 64.  The default value varies for different toolchains.
   11198      For the COFF targeted toolchain the default value is 8.  A value
   11199      of 64 is only allowed if the underlying ABI supports it.
   11200 
   11201      Specifying a larger number can produce faster, more efficient
   11202      code, but can also increase the size of the program.  Different
   11203      values are potentially incompatible.  Code compiled with one value
   11204      cannot necessarily expect to work with code or libraries compiled
   11205      with another value, if they exchange information using structures
   11206      or unions.
   11207 
   11208 `-mabort-on-noreturn'
   11209      Generate a call to the function `abort' at the end of a `noreturn'
   11210      function.  It is executed if the function tries to return.
   11211 
   11212 `-mlong-calls'
   11213 `-mno-long-calls'
   11214      Tells the compiler to perform function calls by first loading the
   11215      address of the function into a register and then performing a
   11216      subroutine call on this register.  This switch is needed if the
   11217      target function lies outside of the 64-megabyte addressing range
   11218      of the offset-based version of subroutine call instruction.
   11219 
   11220      Even if this switch is enabled, not all function calls are turned
   11221      into long calls.  The heuristic is that static functions, functions
   11222      that have the `short-call' attribute, functions that are inside
   11223      the scope of a `#pragma no_long_calls' directive, and functions
   11224      whose definitions have already been compiled within the current
   11225      compilation unit are not turned into long calls.  The exceptions
   11226      to this rule are that weak function definitions, functions with
   11227      the `long-call' attribute or the `section' attribute, and
   11228      functions that are within the scope of a `#pragma long_calls'
   11229      directive are always turned into long calls.
   11230 
   11231      This feature is not enabled by default.  Specifying
   11232      `-mno-long-calls' restores the default behavior, as does placing
   11233      the function calls within the scope of a `#pragma long_calls_off'
   11234      directive.  Note these switches have no effect on how the compiler
   11235      generates code to handle function calls via function pointers.
   11236 
   11237 `-msingle-pic-base'
   11238      Treat the register used for PIC addressing as read-only, rather
   11239      than loading it in the prologue for each function.  The runtime
   11240      system is responsible for initializing this register with an
   11241      appropriate value before execution begins.
   11242 
   11243 `-mpic-register=REG'
   11244      Specify the register to be used for PIC addressing.  For standard
   11245      PIC base case, the default will be any suitable register
   11246      determined by compiler.  For single PIC base case, the default is
   11247      `R9' if target is EABI based or stack-checking is enabled,
   11248      otherwise the default is `R10'.
   11249 
   11250 `-mpoke-function-name'
   11251      Write the name of each function into the text section, directly
   11252      preceding the function prologue.  The generated code is similar to
   11253      this:
   11254 
   11255                t0
   11256                    .ascii "arm_poke_function_name", 0
   11257                    .align
   11258                t1
   11259                    .word 0xff000000 + (t1 - t0)
   11260                arm_poke_function_name
   11261                    mov     ip, sp
   11262                    stmfd   sp!, {fp, ip, lr, pc}
   11263                    sub     fp, ip, #4
   11264 
   11265      When performing a stack backtrace, code can inspect the value of
   11266      `pc' stored at `fp + 0'.  If the trace function then looks at
   11267      location `pc - 12' and the top 8 bits are set, then we know that
   11268      there is a function name embedded immediately preceding this
   11269      location and has length `((pc[-3]) & 0xff000000)'.
   11270 
   11271 `-mthumb'
   11272 `-marm'
   11273      Select between generating code that executes in ARM and Thumb
   11274      states.  The default for most configurations is to generate code
   11275      that executes in ARM state, but the default can be changed by
   11276      configuring GCC with the `--with-mode='STATE configure option.
   11277 
   11278 `-mtpcs-frame'
   11279      Generate a stack frame that is compliant with the Thumb Procedure
   11280      Call Standard for all non-leaf functions.  (A leaf function is one
   11281      that does not call any other functions.)  The default is
   11282      `-mno-tpcs-frame'.
   11283 
   11284 `-mtpcs-leaf-frame'
   11285      Generate a stack frame that is compliant with the Thumb Procedure
   11286      Call Standard for all leaf functions.  (A leaf function is one
   11287      that does not call any other functions.)  The default is
   11288      `-mno-apcs-leaf-frame'.
   11289 
   11290 `-mcallee-super-interworking'
   11291      Gives all externally visible functions in the file being compiled
   11292      an ARM instruction set header which switches to Thumb mode before
   11293      executing the rest of the function.  This allows these functions
   11294      to be called from non-interworking code.  This option is not valid
   11295      in AAPCS configurations because interworking is enabled by default.
   11296 
   11297 `-mcaller-super-interworking'
   11298      Allows calls via function pointers (including virtual functions) to
   11299      execute correctly regardless of whether the target code has been
   11300      compiled for interworking or not.  There is a small overhead in
   11301      the cost of executing a function pointer if this option is
   11302      enabled.  This option is not valid in AAPCS configurations because
   11303      interworking is enabled by default.
   11304 
   11305 `-mtp=NAME'
   11306      Specify the access model for the thread local storage pointer.
   11307      The valid models are `soft', which generates calls to
   11308      `__aeabi_read_tp', `cp15', which fetches the thread pointer from
   11309      `cp15' directly (supported in the arm6k architecture), and `auto',
   11310      which uses the best available method for the selected processor.
   11311      The default setting is `auto'.
   11312 
   11313 `-mtls-dialect=DIALECT'
   11314      Specify the dialect to use for accessing thread local storage.  Two
   11315      DIALECTs are supported--`gnu' and `gnu2'.  The `gnu' dialect
   11316      selects the original GNU scheme for supporting local and global
   11317      dynamic TLS models.  The `gnu2' dialect selects the GNU descriptor
   11318      scheme, which provides better performance for shared libraries.
   11319      The GNU descriptor scheme is compatible with the original scheme,
   11320      but does require new assembler, linker and library support.
   11321      Initial and local exec TLS models are unaffected by this option
   11322      and always use the original scheme.
   11323 
   11324 `-mword-relocations'
   11325      Only generate absolute relocations on word-sized values (i.e.
   11326      R_ARM_ABS32).  This is enabled by default on targets (uClinux,
   11327      SymbianOS) where the runtime loader imposes this restriction, and
   11328      when `-fpic' or `-fPIC' is specified.
   11329 
   11330 `-mfix-cortex-m3-ldrd'
   11331      Some Cortex-M3 cores can cause data corruption when `ldrd'
   11332      instructions with overlapping destination and base registers are
   11333      used.  This option avoids generating these instructions.  This
   11334      option is enabled by default when `-mcpu=cortex-m3' is specified.
   11335 
   11336 `-munaligned-access'
   11337 `-mno-unaligned-access'
   11338      Enables (or disables) reading and writing of 16- and 32- bit values
   11339      from addresses that are not 16- or 32- bit aligned.  By default
   11340      unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
   11341      architectures, and enabled for all other architectures.  If
   11342      unaligned access is not enabled then words in packed data
   11343      structures will be accessed a byte at a time.
   11344 
   11345      The ARM attribute `Tag_CPU_unaligned_access' will be set in the
   11346      generated object file to either true or false, depending upon the
   11347      setting of this option.  If unaligned access is enabled then the
   11348      preprocessor symbol `__ARM_FEATURE_UNALIGNED' will also be defined.
   11349 
   11350 
   11351 
   11352 File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
   11353 
   11354 3.17.4 AVR Options
   11355 ------------------
   11356 
   11357 These options are defined for AVR implementations:
   11358 
   11359 `-mmcu=MCU'
   11360      Specify Atmel AVR instruction set architectures (ISA) or MCU type.
   11361 
   11362      The default for this option is `avr2'.
   11363 
   11364      GCC supports the following AVR devices and ISAs:
   11365 
   11366     `avr2'
   11367           "Classic" devices with up to 8 KiB of program memory.
   11368           MCU = `attiny22', `attiny26', `at90c8534', `at90s2313',
   11369           `at90s2323', `at90s2333', `at90s2343', `at90s4414',
   11370           `at90s4433', `at90s4434', `at90s8515', `at90s8535'.
   11371 
   11372     `avr25'
   11373           "Classic" devices with up to 8 KiB of program memory and with
   11374           the `MOVW' instruction.
   11375           MCU = `ata5272', `ata6289', `attiny13', `attiny13a',
   11376           `attiny2313', `attiny2313a', `attiny24', `attiny24a',
   11377           `attiny25', `attiny261', `attiny261a', `attiny43u',
   11378           `attiny4313', `attiny44', `attiny44a', `attiny45',
   11379           `attiny461', `attiny461a', `attiny48', `attiny84',
   11380           `attiny84a', `attiny85', `attiny861', `attiny861a',
   11381           `attiny87', `attiny88', `at86rf401'.
   11382 
   11383     `avr3'
   11384           "Classic" devices with 16 KiB up to 64 KiB of  program memory.
   11385           MCU = `at43usb355', `at76c711'.
   11386 
   11387     `avr31'
   11388           "Classic" devices with 128 KiB of program memory.
   11389           MCU = `atmega103', `at43usb320'.
   11390 
   11391     `avr35'
   11392           "Classic" devices with 16 KiB up to 64 KiB of program memory
   11393           and with the `MOVW' instruction.
   11394           MCU = `ata5505', `atmega16u2', `atmega32u2', `atmega8u2',
   11395           `attiny1634', `attiny167', `at90usb162', `at90usb82'.
   11396 
   11397     `avr4'
   11398           "Enhanced" devices with up to 8 KiB of program memory.
   11399           MCU = `ata6285', `ata6286', `atmega48', `atmega48a',
   11400           `atmega48p', `atmega48pa', `atmega8', `atmega8a',
   11401           `atmega8hva', `atmega8515', `atmega8535', `atmega88',
   11402           `atmega88a', `atmega88p', `atmega88pa', `at90pwm1',
   11403           `at90pwm2', `at90pwm2b', `at90pwm3', `at90pwm3b', `at90pwm81'.
   11404 
   11405     `avr5'
   11406           "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
   11407           MCU = `ata5790', `ata5790n', `ata5795', `atmega16',
   11408           `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb',
   11409           `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161',
   11410           `atmega162', `atmega163', `atmega164a', `atmega164p',
   11411           `atmega164pa', `atmega165', `atmega165a', `atmega165p',
   11412           `atmega165pa', `atmega168', `atmega168a', `atmega168p',
   11413           `atmega168pa', `atmega169', `atmega169a', `atmega169p',
   11414           `atmega169pa', `atmega26hvg', `atmega32', `atmega32a',
   11415           `atmega32c1', `atmega32hvb', `atmega32hvbrevb', `atmega32m1',
   11416           `atmega32u4', `atmega32u6', `atmega323', `atmega324a',
   11417           `atmega324p', `atmega324pa', `atmega325', `atmega325a',
   11418           `atmega325p', `atmega3250', `atmega3250a', `atmega3250p',
   11419           `atmega3250pa', `atmega328', `atmega328p', `atmega329',
   11420           `atmega329a', `atmega329p', `atmega329pa', `atmega3290',
   11421           `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406',
   11422           `atmega48hvf', `atmega64', `atmega64a', `atmega64c1',
   11423           `atmega64hve', `atmega64m1', `atmega64rfa2', `atmega64rfr2',
   11424           `atmega640', `atmega644', `atmega644a', `atmega644p',
   11425           `atmega644pa', `atmega645', `atmega645a', `atmega645p',
   11426           `atmega6450', `atmega6450a', `atmega6450p', `atmega649',
   11427           `atmega649a', `atmega649p', `atmega6490', `atmega6490a',
   11428           `atmega6490p', `at90can32', `at90can64', `at90pwm161',
   11429           `at90pwm216', `at90pwm316', `at90scr100', `at90usb646',
   11430           `at90usb647', `at94k', `m3000'.
   11431 
   11432     `avr51'
   11433           "Enhanced" devices with 128 KiB of program memory.
   11434           MCU = `atmega128', `atmega128a', `atmega128rfa1',
   11435           `atmega1280', `atmega1281', `atmega1284', `atmega1284p',
   11436           `at90can128', `at90usb1286', `at90usb1287'.
   11437 
   11438     `avr6'
   11439           "Enhanced" devices with 3-byte PC, i.e. with more than
   11440           128 KiB of program memory.
   11441           MCU = `atmega2560', `atmega2561'.
   11442 
   11443     `avrxmega2'
   11444           "XMEGA" devices with more than 8 KiB and up to 64 KiB of
   11445           program memory.
   11446           MCU = `atmxt112sl', `atmxt224', `atmxt224e', `atmxt336s',
   11447           `atxmega16a4', `atxmega16a4u', `atxmega16c4', `atxmega16d4',
   11448           `atxmega16x1', `atxmega32a4', `atxmega32a4u', `atxmega32c4',
   11449           `atxmega32d4', `atxmega32e5', `atxmega32x1'.
   11450 
   11451     `avrxmega4'
   11452           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
   11453           program memory.
   11454           MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u',
   11455           `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3',
   11456           `atxmega64d4'.
   11457 
   11458     `avrxmega5'
   11459           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
   11460           program memory and more than 64 KiB of RAM.
   11461           MCU = `atxmega64a1', `atxmega64a1u'.
   11462 
   11463     `avrxmega6'
   11464           "XMEGA" devices with more than 128 KiB of program memory.
   11465           MCU = `atmxt540s', `atmxt540sreva', `atxmega128a3',
   11466           `atxmega128a3u', `atxmega128b1', `atxmega128b3',
   11467           `atxmega128c3', `atxmega128d3', `atxmega128d4',
   11468           `atxmega192a3', `atxmega192a3u', `atxmega192c3',
   11469           `atxmega192d3', `atxmega256a3', `atxmega256a3b',
   11470           `atxmega256a3bu', `atxmega256a3u', `atxmega256c3',
   11471           `atxmega256d3', `atxmega384c3', `atxmega384d3'.
   11472 
   11473     `avrxmega7'
   11474           "XMEGA" devices with more than 128 KiB of program memory and
   11475           more than 64 KiB of RAM.
   11476           MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'.
   11477 
   11478     `avr1'
   11479           This ISA is implemented by the minimal AVR core and supported
   11480           for assembler only.
   11481           MCU = `attiny11', `attiny12', `attiny15', `attiny28',
   11482           `at90s1200'.
   11483 
   11484 
   11485 `-maccumulate-args'
   11486      Accumulate outgoing function arguments and acquire/release the
   11487      needed stack space for outgoing function arguments once in function
   11488      prologue/epilogue.  Without this option, outgoing arguments are
   11489      pushed before calling a function and popped afterwards.
   11490 
   11491      Popping the arguments after the function call can be expensive on
   11492      AVR so that accumulating the stack space might lead to smaller
   11493      executables because arguments need not to be removed from the
   11494      stack after such a function call.
   11495 
   11496      This option can lead to reduced code size for functions that
   11497      perform several calls to functions that get their arguments on the
   11498      stack like calls to printf-like functions.
   11499 
   11500 `-mbranch-cost=COST'
   11501      Set the branch costs for conditional branch instructions to COST.
   11502      Reasonable values for COST are small, non-negative integers. The
   11503      default branch cost is 0.
   11504 
   11505 `-mcall-prologues'
   11506      Functions prologues/epilogues are expanded as calls to appropriate
   11507      subroutines.  Code size is smaller.
   11508 
   11509 `-mint8'
   11510      Assume `int' to be 8-bit integer.  This affects the sizes of all
   11511      types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes,
   11512      and `long long' is 4 bytes.  Please note that this option does not
   11513      conform to the C standards, but it results in smaller code size.
   11514 
   11515 `-mno-interrupts'
   11516      Generated code is not compatible with hardware interrupts.  Code
   11517      size is smaller.
   11518 
   11519 `-mrelax'
   11520      Try to replace `CALL' resp. `JMP' instruction by the shorter
   11521      `RCALL' resp. `RJMP' instruction if applicable.  Setting `-mrelax'
   11522      just adds the `--relax' option to the linker command line when the
   11523      linker is called.
   11524 
   11525      Jump relaxing is performed by the linker because jump offsets are
   11526      not known before code is located. Therefore, the assembler code
   11527      generated by the compiler is the same, but the instructions in the
   11528      executable may differ from instructions in the assembler code.
   11529 
   11530      Relaxing must be turned on if linker stubs are needed, see the
   11531      section on `EIND' and linker stubs below.
   11532 
   11533 `-msp8'
   11534      Treat the stack pointer register as an 8-bit register, i.e. assume
   11535      the high byte of the stack pointer is zero.  In general, you don't
   11536      need to set this option by hand.
   11537 
   11538      This option is used internally by the compiler to select and build
   11539      multilibs for architectures `avr2' and `avr25'.  These
   11540      architectures mix devices with and without `SPH'.  For any setting
   11541      other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver will
   11542      add or remove this option from the compiler proper's command line,
   11543      because the compiler then knows if the device or architecture has
   11544      an 8-bit stack pointer and thus no `SPH' register or not.
   11545 
   11546 `-mstrict-X'
   11547      Use address register `X' in a way proposed by the hardware.  This
   11548      means that `X' is only used in indirect, post-increment or
   11549      pre-decrement addressing.
   11550 
   11551      Without this option, the `X' register may be used in the same way
   11552      as `Y' or `Z' which then is emulated by additional instructions.
   11553      For example, loading a value with `X+const' addressing with a
   11554      small non-negative `const < 64' to a register RN is performed as
   11555 
   11556           adiw r26, const   ; X += const
   11557           ld   RN, X        ; RN = *X
   11558           sbiw r26, const   ; X -= const
   11559 
   11560 `-mtiny-stack'
   11561      Only change the lower 8 bits of the stack pointer.
   11562 
   11563 `-Waddr-space-convert'
   11564      Warn about conversions between address spaces in the case where the
   11565      resulting address space is not contained in the incoming address
   11566      space.
   11567 
   11568 3.17.4.1 `EIND' and Devices with more than 128 Ki Bytes of Flash
   11569 ................................................................
   11570 
   11571 Pointers in the implementation are 16 bits wide.  The address of a
   11572 function or label is represented as word address so that indirect jumps
   11573 and calls can target any code address in the range of 64 Ki words.
   11574 
   11575  In order to facilitate indirect jump on devices with more than 128 Ki
   11576 bytes of program memory space, there is a special function register
   11577 called `EIND' that serves as most significant part of the target address
   11578 when `EICALL' or `EIJMP' instructions are used.
   11579 
   11580  Indirect jumps and calls on these devices are handled as follows by
   11581 the compiler and are subject to some limitations:
   11582 
   11583    * The compiler never sets `EIND'.
   11584 
   11585    * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP'
   11586      instructions or might read `EIND' directly in order to emulate an
   11587      indirect call/jump by means of a `RET' instruction.
   11588 
   11589    * The compiler assumes that `EIND' never changes during the startup
   11590      code or during the application. In particular, `EIND' is not
   11591      saved/restored in function or interrupt service routine
   11592      prologue/epilogue.
   11593 
   11594    * For indirect calls to functions and computed goto, the linker
   11595      generates _stubs_. Stubs are jump pads sometimes also called
   11596      _trampolines_. Thus, the indirect call/jump jumps to such a stub.
   11597      The stub contains a direct jump to the desired address.
   11598 
   11599    * Linker relaxation must be turned on so that the linker will
   11600      generate the stubs correctly an all situaltion. See the compiler
   11601      option `-mrelax' and the linler option `--relax'.  There are
   11602      corner cases where the linker is supposed to generate stubs but
   11603      aborts without relaxation and without a helpful error message.
   11604 
   11605    * The default linker script is arranged for code with `EIND = 0'.
   11606      If code is supposed to work for a setup with `EIND != 0', a custom
   11607      linker script has to be used in order to place the sections whose
   11608      name start with `.trampolines' into the segment where `EIND'
   11609      points to.
   11610 
   11611    * The startup code from libgcc never sets `EIND'.  Notice that
   11612      startup code is a blend of code from libgcc and AVR-LibC.  For the
   11613      impact of AVR-LibC on `EIND', see the
   11614      AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
   11615 
   11616    * It is legitimate for user-specific startup code to set up `EIND'
   11617      early, for example by means of initialization code located in
   11618      section `.init3'. Such code runs prior to general startup code
   11619      that initializes RAM and calls constructors, but after the bit of
   11620      startup code from AVR-LibC that sets `EIND' to the segment where
   11621      the vector table is located.
   11622           #include <avr/io.h>
   11623 
   11624           static void
   11625           __attribute__((section(".init3"),naked,used,no_instrument_function))
   11626           init3_set_eind (void)
   11627           {
   11628             __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
   11629                             "out %i0,r24" :: "n" (&EIND) : "r24","memory");
   11630           }
   11631 
   11632      The `__trampolines_start' symbol is defined in the linker script.
   11633 
   11634    * Stubs are generated automatically by the linker if the following
   11635      two conditions are met:
   11636         - The address of a label is taken by means of the `gs' modifier
   11637           (short for _generate stubs_) like so:
   11638                LDI r24, lo8(gs(FUNC))
   11639                LDI r25, hi8(gs(FUNC))
   11640 
   11641         - The final location of that label is in a code segment
   11642           _outside_ the segment where the stubs are located.
   11643 
   11644    * The compiler emits such `gs' modifiers for code labels in the
   11645      following situations:
   11646         - Taking address of a function or code label.
   11647 
   11648         - Computed goto.
   11649 
   11650         - If prologue-save function is used, see `-mcall-prologues'
   11651           command-line option.
   11652 
   11653         - Switch/case dispatch tables. If you do not want such dispatch
   11654           tables you can specify the `-fno-jump-tables' command-line
   11655           option.
   11656 
   11657         - C and C++ constructors/destructors called during
   11658           startup/shutdown.
   11659 
   11660         - If the tools hit a `gs()' modifier explained above.
   11661 
   11662    * Jumping to non-symbolic addresses like so is _not_ supported:
   11663 
   11664           int main (void)
   11665           {
   11666               /* Call function at word address 0x2 */
   11667               return ((int(*)(void)) 0x2)();
   11668           }
   11669 
   11670      Instead, a stub has to be set up, i.e. the function has to be
   11671      called through a symbol (`func_4' in the example):
   11672 
   11673           int main (void)
   11674           {
   11675               extern int func_4 (void);
   11676 
   11677               /* Call function at byte address 0x4 */
   11678               return func_4();
   11679           }
   11680 
   11681      and the application be linked with `-Wl,--defsym,func_4=0x4'.
   11682      Alternatively, `func_4' can be defined in the linker script.
   11683 
   11684 3.17.4.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers
   11685 .........................................................................................
   11686 
   11687 Some AVR devices support memories larger than the 64 KiB range that can
   11688 be accessed with 16-bit pointers.  To access memory locations outside
   11689 this 64 KiB range, the contentent of a `RAMP' register is used as high
   11690 part of the address: The `X', `Y', `Z' address register is concatenated
   11691 with the `RAMPX', `RAMPY', `RAMPZ' special function register,
   11692 respectively, to get a wide address. Similarly, `RAMPD' is used
   11693 together with direct addressing.
   11694 
   11695    * The startup code initializes the `RAMP' special function registers
   11696      with zero.
   11697 
   11698    * If a *note named address space: AVR Named Address Spaces. other
   11699      than generic or `__flash' is used, then `RAMPZ' is set as needed
   11700      before the operation.
   11701 
   11702    * If the device supports RAM larger than 64 KiB and the compiler
   11703      needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is
   11704      reset to zero after the operation.
   11705 
   11706    * If the device comes with a specific `RAMP' register, the ISR
   11707      prologue/epilogue saves/restores that SFR and initializes it with
   11708      zero in case the ISR code might (implicitly) use it.
   11709 
   11710    * RAM larger than 64 KiB is not supported by GCC for AVR targets.
   11711      If you use inline assembler to read from locations outside the
   11712      16-bit address range and change one of the `RAMP' registers, you
   11713      must reset it to zero after the access.
   11714 
   11715 
   11716 3.17.4.3 AVR Built-in Macros
   11717 ............................
   11718 
   11719 GCC defines several built-in macros so that the user code can test for
   11720 the presence or absence of features.  Almost any of the following
   11721 built-in macros are deduced from device capabilities and thus triggered
   11722 by the `-mmcu=' command-line option.
   11723 
   11724  For even more AVR-specific built-in macros see *note AVR Named Address
   11725 Spaces:: and *note AVR Built-in Functions::.
   11726 
   11727 `__AVR_ARCH__'
   11728      Build-in macro that resolves to a decimal number that identifies
   11729      the architecture and depends on the `-mmcu=MCU' option.  Possible
   11730      values are:
   11731 
   11732      `2', `25', `3', `31', `35', `4', `5', `51', `6', `102', `104',
   11733      `105', `106', `107'
   11734 
   11735      for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5',
   11736      `avr51', `avr6', `avrxmega2', `avrxmega4', `avrxmega5',
   11737      `avrxmega6', `avrxmega7', respectively.  If MCU specifies a
   11738      device, this built-in macro is set accordingly. For example, with
   11739      `-mmcu=atmega8' the macro will be defined to `4'.
   11740 
   11741 `__AVR_DEVICE__'
   11742      Setting `-mmcu=DEVICE' defines this built-in macro which reflects
   11743      the device's name. For example, `-mmcu=atmega8' defines the
   11744      built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines
   11745      `__AVR_ATtiny261A__', etc.
   11746 
   11747      The built-in macros' names follow the scheme `__AVR_DEVICE__'
   11748      where DEVICE is the device name as from the AVR user manual. The
   11749      difference between DEVICE in the built-in macro and DEVICE in
   11750      `-mmcu=DEVICE' is that the latter is always lowercase.
   11751 
   11752      If DEVICE is not a device but only a core architecture like
   11753      `avr51', this macro will not be defined.
   11754 
   11755 `__AVR_XMEGA__'
   11756      The device / architecture belongs to the XMEGA family of devices.
   11757 
   11758 `__AVR_HAVE_ELPM__'
   11759      The device has the the `ELPM' instruction.
   11760 
   11761 `__AVR_HAVE_ELPMX__'
   11762      The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions.
   11763 
   11764 `__AVR_HAVE_MOVW__'
   11765      The device has the `MOVW' instruction to perform 16-bit
   11766      register-register moves.
   11767 
   11768 `__AVR_HAVE_LPMX__'
   11769      The device has the `LPM RN,Z' and `LPM RN,Z+' instructions.
   11770 
   11771 `__AVR_HAVE_MUL__'
   11772      The device has a hardware multiplier.
   11773 
   11774 `__AVR_HAVE_JMP_CALL__'
   11775      The device has the `JMP' and `CALL' instructions.  This is the
   11776      case for devices with at least 16 KiB of program memory.
   11777 
   11778 `__AVR_HAVE_EIJMP_EICALL__'
   11779 `__AVR_3_BYTE_PC__'
   11780      The device has the `EIJMP' and `EICALL' instructions.  This is the
   11781      case for devices with more than 128 KiB of program memory.  This
   11782      also means that the program counter (PC) is 3 bytes wide.
   11783 
   11784 `__AVR_2_BYTE_PC__'
   11785      The program counter (PC) is 2 bytes wide. This is the case for
   11786      devices with up to 128 KiB of program memory.
   11787 
   11788 `__AVR_HAVE_8BIT_SP__'
   11789 `__AVR_HAVE_16BIT_SP__'
   11790      The stack pointer (SP) register is treated as 8-bit respectively
   11791      16-bit register by the compiler.  The definition of these macros
   11792      is affected by `-mtiny-stack'.
   11793 
   11794 `__AVR_HAVE_SPH__'
   11795 `__AVR_SP8__'
   11796      The device has the SPH (high part of stack pointer) special
   11797      function register or has an 8-bit stack pointer, respectively.
   11798      The definition of these macros is affected by `-mmcu=' and in the
   11799      cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'.
   11800 
   11801 `__AVR_HAVE_RAMPD__'
   11802 `__AVR_HAVE_RAMPX__'
   11803 `__AVR_HAVE_RAMPY__'
   11804 `__AVR_HAVE_RAMPZ__'
   11805      The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special
   11806      function register, respectively.
   11807 
   11808 `__NO_INTERRUPTS__'
   11809      This macro reflects the `-mno-interrupts' command line option.
   11810 
   11811 `__AVR_ERRATA_SKIP__'
   11812 `__AVR_ERRATA_SKIP_JMP_CALL__'
   11813      Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
   11814      instructions because of a hardware erratum.  Skip instructions are
   11815      `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'.  The second macro is
   11816      only defined if `__AVR_HAVE_JMP_CALL__' is also set.
   11817 
   11818 `__AVR_SFR_OFFSET__=OFFSET'
   11819      Instructions that can address I/O special function registers
   11820      directly like `IN', `OUT', `SBI', etc. may use a different address
   11821      as if addressed by an instruction to access RAM like `LD' or
   11822      `STS'. This offset depends on the device architecture and has to
   11823      be subtracted from the RAM address in order to get the respective
   11824      I/O address.
   11825 
   11826 `__WITH_AVRLIBC__'
   11827      The compiler is configured to be used together with AVR-Libc.  See
   11828      the `--with-avrlibc' configure option.
   11829 
   11830 
   11831 
   11832 File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
   11833 
   11834 3.17.5 Blackfin Options
   11835 -----------------------
   11836 
   11837 `-mcpu=CPU[-SIREVISION]'
   11838      Specifies the name of the target Blackfin processor.  Currently,
   11839      CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
   11840      `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
   11841      `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
   11842      `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
   11843      `bf548m', `bf549m', `bf561', `bf592'.
   11844 
   11845      The optional SIREVISION specifies the silicon revision of the
   11846      target Blackfin processor.  Any workarounds available for the
   11847      targeted silicon revision are enabled.  If SIREVISION is `none',
   11848      no workarounds are enabled.  If SIREVISION is `any', all
   11849      workarounds for the targeted processor are enabled.  The
   11850      `__SILICON_REVISION__' macro is defined to two hexadecimal digits
   11851      representing the major and minor numbers in the silicon revision.
   11852      If SIREVISION is `none', the `__SILICON_REVISION__' is not
   11853      defined.  If SIREVISION is `any', the `__SILICON_REVISION__' is
   11854      defined to be `0xffff'.  If this optional SIREVISION is not used,
   11855      GCC assumes the latest known silicon revision of the targeted
   11856      Blackfin processor.
   11857 
   11858      GCC defines a preprocessor macro for the specified CPU.  For the
   11859      `bfin-elf' toolchain, this option causes the hardware BSP provided
   11860      by libgloss to be linked in if `-msim' is not given.
   11861 
   11862      Without this option, `bf532' is used as the processor by default.
   11863 
   11864      Note that support for `bf561' is incomplete.  For `bf561', only
   11865      the preprocessor macro is defined.
   11866 
   11867 `-msim'
   11868      Specifies that the program will be run on the simulator.  This
   11869      causes the simulator BSP provided by libgloss to be linked in.
   11870      This option has effect only for `bfin-elf' toolchain.  Certain
   11871      other options, such as `-mid-shared-library' and `-mfdpic', imply
   11872      `-msim'.
   11873 
   11874 `-momit-leaf-frame-pointer'
   11875      Don't keep the frame pointer in a register for leaf functions.
   11876      This avoids the instructions to save, set up and restore frame
   11877      pointers and makes an extra register available in leaf functions.
   11878      The option `-fomit-frame-pointer' removes the frame pointer for
   11879      all functions, which might make debugging harder.
   11880 
   11881 `-mspecld-anomaly'
   11882      When enabled, the compiler ensures that the generated code does not
   11883      contain speculative loads after jump instructions. If this option
   11884      is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
   11885 
   11886 `-mno-specld-anomaly'
   11887      Don't generate extra code to prevent speculative loads from
   11888      occurring.
   11889 
   11890 `-mcsync-anomaly'
   11891      When enabled, the compiler ensures that the generated code does not
   11892      contain CSYNC or SSYNC instructions too soon after conditional
   11893      branches.  If this option is used,
   11894      `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
   11895 
   11896 `-mno-csync-anomaly'
   11897      Don't generate extra code to prevent CSYNC or SSYNC instructions
   11898      from occurring too soon after a conditional branch.
   11899 
   11900 `-mlow-64k'
   11901      When enabled, the compiler is free to take advantage of the
   11902      knowledge that the entire program fits into the low 64k of memory.
   11903 
   11904 `-mno-low-64k'
   11905      Assume that the program is arbitrarily large.  This is the default.
   11906 
   11907 `-mstack-check-l1'
   11908      Do stack checking using information placed into L1 scratchpad
   11909      memory by the uClinux kernel.
   11910 
   11911 `-mid-shared-library'
   11912      Generate code that supports shared libraries via the library ID
   11913      method.  This allows for execute in place and shared libraries in
   11914      an environment without virtual memory management.  This option
   11915      implies `-fPIC'.  With a `bfin-elf' target, this option implies
   11916      `-msim'.
   11917 
   11918 `-mno-id-shared-library'
   11919      Generate code that doesn't assume ID-based shared libraries are
   11920      being used.  This is the default.
   11921 
   11922 `-mleaf-id-shared-library'
   11923      Generate code that supports shared libraries via the library ID
   11924      method, but assumes that this library or executable won't link
   11925      against any other ID shared libraries.  That allows the compiler
   11926      to use faster code for jumps and calls.
   11927 
   11928 `-mno-leaf-id-shared-library'
   11929      Do not assume that the code being compiled won't link against any
   11930      ID shared libraries.  Slower code is generated for jump and call
   11931      insns.
   11932 
   11933 `-mshared-library-id=n'
   11934      Specifies the identification number of the ID-based shared library
   11935      being compiled.  Specifying a value of 0 generates more compact
   11936      code; specifying other values forces the allocation of that number
   11937      to the current library but is no more space- or time-efficient
   11938      than omitting this option.
   11939 
   11940 `-msep-data'
   11941      Generate code that allows the data segment to be located in a
   11942      different area of memory from the text segment.  This allows for
   11943      execute in place in an environment without virtual memory
   11944      management by eliminating relocations against the text section.
   11945 
   11946 `-mno-sep-data'
   11947      Generate code that assumes that the data segment follows the text
   11948      segment.  This is the default.
   11949 
   11950 `-mlong-calls'
   11951 `-mno-long-calls'
   11952      Tells the compiler to perform function calls by first loading the
   11953      address of the function into a register and then performing a
   11954      subroutine call on this register.  This switch is needed if the
   11955      target function lies outside of the 24-bit addressing range of the
   11956      offset-based version of subroutine call instruction.
   11957 
   11958      This feature is not enabled by default.  Specifying
   11959      `-mno-long-calls' restores the default behavior.  Note these
   11960      switches have no effect on how the compiler generates code to
   11961      handle function calls via function pointers.
   11962 
   11963 `-mfast-fp'
   11964      Link with the fast floating-point library. This library relaxes
   11965      some of the IEEE floating-point standard's rules for checking
   11966      inputs against Not-a-Number (NAN), in the interest of performance.
   11967 
   11968 `-minline-plt'
   11969      Enable inlining of PLT entries in function calls to functions that
   11970      are not known to bind locally.  It has no effect without `-mfdpic'.
   11971 
   11972 `-mmulticore'
   11973      Build a standalone application for multicore Blackfin processors.
   11974      This option causes proper start files and link scripts supporting
   11975      multicore to be used, and defines the macro `__BFIN_MULTICORE'.
   11976      It can only be used with `-mcpu=bf561[-SIREVISION]'.
   11977 
   11978      This option can be used with `-mcorea' or `-mcoreb', which selects
   11979      the one-application-per-core programming model.  Without `-mcorea'
   11980      or `-mcoreb', the single-application/dual-core programming model
   11981      is used. In this model, the main function of Core B should be
   11982      named as `coreb_main'.
   11983 
   11984      If this option is not used, the single-core application programming
   11985      model is used.
   11986 
   11987 `-mcorea'
   11988      Build a standalone application for Core A of BF561 when using the
   11989      one-application-per-core programming model. Proper start files and
   11990      link scripts are used to support Core A, and the macro
   11991      `__BFIN_COREA' is defined.  This option can only be used in
   11992      conjunction with `-mmulticore'.
   11993 
   11994 `-mcoreb'
   11995      Build a standalone application for Core B of BF561 when using the
   11996      one-application-per-core programming model. Proper start files and
   11997      link scripts are used to support Core B, and the macro
   11998      `__BFIN_COREB' is defined. When this option is used, `coreb_main'
   11999      should be used instead of `main'.  This option can only be used in
   12000      conjunction with `-mmulticore'.
   12001 
   12002 `-msdram'
   12003      Build a standalone application for SDRAM. Proper start files and
   12004      link scripts are used to put the application into SDRAM, and the
   12005      macro `__BFIN_SDRAM' is defined.  The loader should initialize
   12006      SDRAM before loading the application.
   12007 
   12008 `-micplb'
   12009      Assume that ICPLBs are enabled at run time.  This has an effect on
   12010      certain anomaly workarounds.  For Linux targets, the default is to
   12011      assume ICPLBs are enabled; for standalone applications the default
   12012      is off.
   12013 
   12014 
   12015 File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
   12016 
   12017 3.17.6 C6X Options
   12018 ------------------
   12019 
   12020 `-march=NAME'
   12021      This specifies the name of the target architecture.  GCC uses this
   12022      name to determine what kind of instructions it can emit when
   12023      generating assembly code.  Permissible names are: `c62x', `c64x',
   12024      `c64x+', `c67x', `c67x+', `c674x'.
   12025 
   12026 `-mbig-endian'
   12027      Generate code for a big-endian target.
   12028 
   12029 `-mlittle-endian'
   12030      Generate code for a little-endian target.  This is the default.
   12031 
   12032 `-msim'
   12033      Choose startup files and linker script suitable for the simulator.
   12034 
   12035 `-msdata=default'
   12036      Put small global and static data in the `.neardata' section, which
   12037      is pointed to by register `B14'.  Put small uninitialized global
   12038      and static data in the `.bss' section, which is adjacent to the
   12039      `.neardata' section.  Put small read-only data into the `.rodata'
   12040      section.  The corresponding sections used for large pieces of data
   12041      are `.fardata', `.far' and `.const'.
   12042 
   12043 `-msdata=all'
   12044      Put all data, not just small objects, into the sections reserved
   12045      for small data, and use addressing relative to the `B14' register
   12046      to access them.
   12047 
   12048 `-msdata=none'
   12049      Make no use of the sections reserved for small data, and use
   12050      absolute addresses to access all data.  Put all initialized global
   12051      and static data in the `.fardata' section, and all uninitialized
   12052      data in the `.far' section.  Put all constant data into the
   12053      `.const' section.
   12054 
   12055 
   12056 File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
   12057 
   12058 3.17.7 CRIS Options
   12059 -------------------
   12060 
   12061 These options are defined specifically for the CRIS ports.
   12062 
   12063 `-march=ARCHITECTURE-TYPE'
   12064 `-mcpu=ARCHITECTURE-TYPE'
   12065      Generate code for the specified architecture.  The choices for
   12066      ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
   12067      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
   12068      cris-axis-linux-gnu, where the default is `v10'.
   12069 
   12070 `-mtune=ARCHITECTURE-TYPE'
   12071      Tune to ARCHITECTURE-TYPE everything applicable about the generated
   12072      code, except for the ABI and the set of available instructions.
   12073      The choices for ARCHITECTURE-TYPE are the same as for
   12074      `-march=ARCHITECTURE-TYPE'.
   12075 
   12076 `-mmax-stack-frame=N'
   12077      Warn when the stack frame of a function exceeds N bytes.
   12078 
   12079 `-metrax4'
   12080 `-metrax100'
   12081      The options `-metrax4' and `-metrax100' are synonyms for
   12082      `-march=v3' and `-march=v8' respectively.
   12083 
   12084 `-mmul-bug-workaround'
   12085 `-mno-mul-bug-workaround'
   12086      Work around a bug in the `muls' and `mulu' instructions for CPU
   12087      models where it applies.  This option is active by default.
   12088 
   12089 `-mpdebug'
   12090      Enable CRIS-specific verbose debug-related information in the
   12091      assembly code.  This option also has the effect of turning off the
   12092      `#NO_APP' formatted-code indicator to the assembler at the
   12093      beginning of the assembly file.
   12094 
   12095 `-mcc-init'
   12096      Do not use condition-code results from previous instruction;
   12097      always emit compare and test instructions before use of condition
   12098      codes.
   12099 
   12100 `-mno-side-effects'
   12101      Do not emit instructions with side effects in addressing modes
   12102      other than post-increment.
   12103 
   12104 `-mstack-align'
   12105 `-mno-stack-align'
   12106 `-mdata-align'
   12107 `-mno-data-align'
   12108 `-mconst-align'
   12109 `-mno-const-align'
   12110      These options (`no-' options) arrange (eliminate arrangements) for
   12111      the stack frame, individual data and constants to be aligned for
   12112      the maximum single data access size for the chosen CPU model.  The
   12113      default is to arrange for 32-bit alignment.  ABI details such as
   12114      structure layout are not affected by these options.
   12115 
   12116 `-m32-bit'
   12117 `-m16-bit'
   12118 `-m8-bit'
   12119      Similar to the stack- data- and const-align options above, these
   12120      options arrange for stack frame, writable data and constants to
   12121      all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
   12122      alignment.
   12123 
   12124 `-mno-prologue-epilogue'
   12125 `-mprologue-epilogue'
   12126      With `-mno-prologue-epilogue', the normal function prologue and
   12127      epilogue which set up the stack frame are omitted and no return
   12128      instructions or return sequences are generated in the code.  Use
   12129      this option only together with visual inspection of the compiled
   12130      code: no warnings or errors are generated when call-saved
   12131      registers must be saved, or storage for local variables needs to
   12132      be allocated.
   12133 
   12134 `-mno-gotplt'
   12135 `-mgotplt'
   12136      With `-fpic' and `-fPIC', don't generate (do generate) instruction
   12137      sequences that load addresses for functions from the PLT part of
   12138      the GOT rather than (traditional on other architectures) calls to
   12139      the PLT.  The default is `-mgotplt'.
   12140 
   12141 `-melf'
   12142      Legacy no-op option only recognized with the cris-axis-elf and
   12143      cris-axis-linux-gnu targets.
   12144 
   12145 `-mlinux'
   12146      Legacy no-op option only recognized with the cris-axis-linux-gnu
   12147      target.
   12148 
   12149 `-sim'
   12150      This option, recognized for the cris-axis-elf, arranges to link
   12151      with input-output functions from a simulator library.  Code,
   12152      initialized data and zero-initialized data are allocated
   12153      consecutively.
   12154 
   12155 `-sim2'
   12156      Like `-sim', but pass linker options to locate initialized data at
   12157      0x40000000 and zero-initialized data at 0x80000000.
   12158 
   12159 
   12160 File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
   12161 
   12162 3.17.8 CR16 Options
   12163 -------------------
   12164 
   12165 These options are defined specifically for the CR16 ports.
   12166 
   12167 `-mmac'
   12168      Enable the use of multiply-accumulate instructions. Disabled by
   12169      default.
   12170 
   12171 `-mcr16cplus'
   12172 `-mcr16c'
   12173      Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
   12174      is default.
   12175 
   12176 `-msim'
   12177      Links the library libsim.a which is in compatible with simulator.
   12178      Applicable to ELF compiler only.
   12179 
   12180 `-mint32'
   12181      Choose integer type as 32-bit wide.
   12182 
   12183 `-mbit-ops'
   12184      Generates `sbit'/`cbit' instructions for bit manipulations.
   12185 
   12186 `-mdata-model=MODEL'
   12187      Choose a data model. The choices for MODEL are `near', `far' or
   12188      `medium'. `medium' is default.  However, `far' is not valid with
   12189      `-mcr16c', as the CR16C architecture does not support the far data
   12190      model.
   12191 
   12192 
   12193 File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
   12194 
   12195 3.17.9 Darwin Options
   12196 ---------------------
   12197 
   12198 These options are defined for all architectures running the Darwin
   12199 operating system.
   12200 
   12201  FSF GCC on Darwin does not create "fat" object files; it creates an
   12202 object file for the single architecture that GCC was built to target.
   12203 Apple's GCC on Darwin does create "fat" files if multiple `-arch'
   12204 options are used; it does so by running the compiler or linker multiple
   12205 times and joining the results together with `lipo'.
   12206 
   12207  The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
   12208 is determined by the flags that specify the ISA that GCC is targeting,
   12209 like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
   12210 used to override this.
   12211 
   12212  The Darwin tools vary in their behavior when presented with an ISA
   12213 mismatch.  The assembler, `as', only permits instructions to be used
   12214 that are valid for the subtype of the file it is generating, so you
   12215 cannot put 64-bit instructions in a `ppc750' object file.  The linker
   12216 for shared libraries, `/usr/bin/libtool', fails and prints an error if
   12217 asked to create a shared library with a less restrictive subtype than
   12218 its input files (for instance, trying to put a `ppc970' object file in
   12219 a `ppc7400' library).  The linker for executables, `ld', quietly gives
   12220 the executable the most restrictive subtype of any of its input files.
   12221 
   12222 `-FDIR'
   12223      Add the framework directory DIR to the head of the list of
   12224      directories to be searched for header files.  These directories are
   12225      interleaved with those specified by `-I' options and are scanned
   12226      in a left-to-right order.
   12227 
   12228      A framework directory is a directory with frameworks in it.  A
   12229      framework is a directory with a `Headers' and/or `PrivateHeaders'
   12230      directory contained directly in it that ends in `.framework'.  The
   12231      name of a framework is the name of this directory excluding the
   12232      `.framework'.  Headers associated with the framework are found in
   12233      one of those two directories, with `Headers' being searched first.
   12234      A subframework is a framework directory that is in a framework's
   12235      `Frameworks' directory.  Includes of subframework headers can only
   12236      appear in a header of a framework that contains the subframework,
   12237      or in a sibling subframework header.  Two subframeworks are
   12238      siblings if they occur in the same framework.  A subframework
   12239      should not have the same name as a framework; a warning is issued
   12240      if this is violated.  Currently a subframework cannot have
   12241      subframeworks; in the future, the mechanism may be extended to
   12242      support this.  The standard frameworks can be found in
   12243      `/System/Library/Frameworks' and `/Library/Frameworks'.  An
   12244      example include looks like `#include <Framework/header.h>', where
   12245      `Framework' denotes the name of the framework and `header.h' is
   12246      found in the `PrivateHeaders' or `Headers' directory.
   12247 
   12248 `-iframeworkDIR'
   12249      Like `-F' except the directory is a treated as a system directory.
   12250      The main difference between this `-iframework' and `-F' is that
   12251      with `-iframework' the compiler does not warn about constructs
   12252      contained within header files found via DIR.  This option is valid
   12253      only for the C family of languages.
   12254 
   12255 `-gused'
   12256      Emit debugging information for symbols that are used.  For stabs
   12257      debugging format, this enables `-feliminate-unused-debug-symbols'.
   12258      This is by default ON.
   12259 
   12260 `-gfull'
   12261      Emit debugging information for all symbols and types.
   12262 
   12263 `-mmacosx-version-min=VERSION'
   12264      The earliest version of MacOS X that this executable will run on
   12265      is VERSION.  Typical values of VERSION include `10.1', `10.2', and
   12266      `10.3.9'.
   12267 
   12268      If the compiler was built to use the system's headers by default,
   12269      then the default for this option is the system version on which the
   12270      compiler is running, otherwise the default is to make choices that
   12271      are compatible with as many systems and code bases as possible.
   12272 
   12273 `-mkernel'
   12274      Enable kernel development mode.  The `-mkernel' option sets
   12275      `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
   12276      `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
   12277      `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
   12278      `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
   12279      targets.
   12280 
   12281 `-mone-byte-bool'
   12282      Override the defaults for `bool' so that `sizeof(bool)==1'.  By
   12283      default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
   12284      and `1' when compiling for Darwin/x86, so this option has no
   12285      effect on x86.
   12286 
   12287      *Warning:* The `-mone-byte-bool' switch causes GCC to generate
   12288      code that is not binary compatible with code generated without
   12289      that switch.  Using this switch may require recompiling all other
   12290      modules in a program, including system libraries.  Use this switch
   12291      to conform to a non-default data model.
   12292 
   12293 `-mfix-and-continue'
   12294 `-ffix-and-continue'
   12295 `-findirect-data'
   12296      Generate code suitable for fast turnaround development, such as to
   12297      allow GDB to dynamically load `.o' files into already-running
   12298      programs.  `-findirect-data' and `-ffix-and-continue' are provided
   12299      for backwards compatibility.
   12300 
   12301 `-all_load'
   12302      Loads all members of static archive libraries.  See man ld(1) for
   12303      more information.
   12304 
   12305 `-arch_errors_fatal'
   12306      Cause the errors having to do with files that have the wrong
   12307      architecture to be fatal.
   12308 
   12309 `-bind_at_load'
   12310      Causes the output file to be marked such that the dynamic linker
   12311      will bind all undefined references when the file is loaded or
   12312      launched.
   12313 
   12314 `-bundle'
   12315      Produce a Mach-o bundle format file.  See man ld(1) for more
   12316      information.
   12317 
   12318 `-bundle_loader EXECUTABLE'
   12319      This option specifies the EXECUTABLE that will load the build
   12320      output file being linked.  See man ld(1) for more information.
   12321 
   12322 `-dynamiclib'
   12323      When passed this option, GCC produces a dynamic library instead of
   12324      an executable when linking, using the Darwin `libtool' command.
   12325 
   12326 `-force_cpusubtype_ALL'
   12327      This causes GCC's output file to have the ALL subtype, instead of
   12328      one controlled by the `-mcpu' or `-march' option.
   12329 
   12330 `-allowable_client  CLIENT_NAME'
   12331 `-client_name'
   12332 `-compatibility_version'
   12333 `-current_version'
   12334 `-dead_strip'
   12335 `-dependency-file'
   12336 `-dylib_file'
   12337 `-dylinker_install_name'
   12338 `-dynamic'
   12339 `-exported_symbols_list'
   12340 `-filelist'
   12341 `-flat_namespace'
   12342 `-force_flat_namespace'
   12343 `-headerpad_max_install_names'
   12344 `-image_base'
   12345 `-init'
   12346 `-install_name'
   12347 `-keep_private_externs'
   12348 `-multi_module'
   12349 `-multiply_defined'
   12350 `-multiply_defined_unused'
   12351 `-noall_load'
   12352 `-no_dead_strip_inits_and_terms'
   12353 `-nofixprebinding'
   12354 `-nomultidefs'
   12355 `-noprebind'
   12356 `-noseglinkedit'
   12357 `-pagezero_size'
   12358 `-prebind'
   12359 `-prebind_all_twolevel_modules'
   12360 `-private_bundle'
   12361 `-read_only_relocs'
   12362 `-sectalign'
   12363 `-sectobjectsymbols'
   12364 `-whyload'
   12365 `-seg1addr'
   12366 `-sectcreate'
   12367 `-sectobjectsymbols'
   12368 `-sectorder'
   12369 `-segaddr'
   12370 `-segs_read_only_addr'
   12371 `-segs_read_write_addr'
   12372 `-seg_addr_table'
   12373 `-seg_addr_table_filename'
   12374 `-seglinkedit'
   12375 `-segprot'
   12376 `-segs_read_only_addr'
   12377 `-segs_read_write_addr'
   12378 `-single_module'
   12379 `-static'
   12380 `-sub_library'
   12381 `-sub_umbrella'
   12382 `-twolevel_namespace'
   12383 `-umbrella'
   12384 `-undefined'
   12385 `-unexported_symbols_list'
   12386 `-weak_reference_mismatches'
   12387 `-whatsloaded'
   12388      These options are passed to the Darwin linker.  The Darwin linker
   12389      man page describes them in detail.
   12390 
   12391 
   12392 File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
   12393 
   12394 3.17.10 DEC Alpha Options
   12395 -------------------------
   12396 
   12397 These `-m' options are defined for the DEC Alpha implementations:
   12398 
   12399 `-mno-soft-float'
   12400 `-msoft-float'
   12401      Use (do not use) the hardware floating-point instructions for
   12402      floating-point operations.  When `-msoft-float' is specified,
   12403      functions in `libgcc.a' are used to perform floating-point
   12404      operations.  Unless they are replaced by routines that emulate the
   12405      floating-point operations, or compiled in such a way as to call
   12406      such emulations routines, these routines issue floating-point
   12407      operations.   If you are compiling for an Alpha without
   12408      floating-point operations, you must ensure that the library is
   12409      built so as not to call them.
   12410 
   12411      Note that Alpha implementations without floating-point operations
   12412      are required to have floating-point registers.
   12413 
   12414 `-mfp-reg'
   12415 `-mno-fp-regs'
   12416      Generate code that uses (does not use) the floating-point register
   12417      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
   12418      register set is not used, floating-point operands are passed in
   12419      integer registers as if they were integers and floating-point
   12420      results are passed in `$0' instead of `$f0'.  This is a
   12421      non-standard calling sequence, so any function with a
   12422      floating-point argument or return value called by code compiled
   12423      with `-mno-fp-regs' must also be compiled with that option.
   12424 
   12425      A typical use of this option is building a kernel that does not
   12426      use, and hence need not save and restore, any floating-point
   12427      registers.
   12428 
   12429 `-mieee'
   12430      The Alpha architecture implements floating-point hardware
   12431      optimized for maximum performance.  It is mostly compliant with
   12432      the IEEE floating-point standard.  However, for full compliance,
   12433      software assistance is required.  This option generates code fully
   12434      IEEE-compliant code _except_ that the INEXACT-FLAG is not
   12435      maintained (see below).  If this option is turned on, the
   12436      preprocessor macro `_IEEE_FP' is defined during compilation.  The
   12437      resulting code is less efficient but is able to correctly support
   12438      denormalized numbers and exceptional IEEE values such as
   12439      not-a-number and plus/minus infinity.  Other Alpha compilers call
   12440      this option `-ieee_with_no_inexact'.
   12441 
   12442 `-mieee-with-inexact'
   12443      This is like `-mieee' except the generated code also maintains the
   12444      IEEE INEXACT-FLAG.  Turning on this option causes the generated
   12445      code to implement fully-compliant IEEE math.  In addition to
   12446      `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
   12447      On some Alpha implementations the resulting code may execute
   12448      significantly slower than the code generated by default.  Since
   12449      there is very little code that depends on the INEXACT-FLAG, you
   12450      should normally not specify this option.  Other Alpha compilers
   12451      call this option `-ieee_with_inexact'.
   12452 
   12453 `-mfp-trap-mode=TRAP-MODE'
   12454      This option controls what floating-point related traps are enabled.
   12455      Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
   12456      trap mode can be set to one of four values:
   12457 
   12458     `n'
   12459           This is the default (normal) setting.  The only traps that
   12460           are enabled are the ones that cannot be disabled in software
   12461           (e.g., division by zero trap).
   12462 
   12463     `u'
   12464           In addition to the traps enabled by `n', underflow traps are
   12465           enabled as well.
   12466 
   12467     `su'
   12468           Like `u', but the instructions are marked to be safe for
   12469           software completion (see Alpha architecture manual for
   12470           details).
   12471 
   12472     `sui'
   12473           Like `su', but inexact traps are enabled as well.
   12474 
   12475 `-mfp-rounding-mode=ROUNDING-MODE'
   12476      Selects the IEEE rounding mode.  Other Alpha compilers call this
   12477      option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
   12478 
   12479     `n'
   12480           Normal IEEE rounding mode.  Floating-point numbers are
   12481           rounded towards the nearest machine number or towards the
   12482           even machine number in case of a tie.
   12483 
   12484     `m'
   12485           Round towards minus infinity.
   12486 
   12487     `c'
   12488           Chopped rounding mode.  Floating-point numbers are rounded
   12489           towards zero.
   12490 
   12491     `d'
   12492           Dynamic rounding mode.  A field in the floating-point control
   12493           register (FPCR, see Alpha architecture reference manual)
   12494           controls the rounding mode in effect.  The C library
   12495           initializes this register for rounding towards plus infinity.
   12496           Thus, unless your program modifies the FPCR, `d' corresponds
   12497           to round towards plus infinity.
   12498 
   12499 `-mtrap-precision=TRAP-PRECISION'
   12500      In the Alpha architecture, floating-point traps are imprecise.
   12501      This means without software assistance it is impossible to recover
   12502      from a floating trap and program execution normally needs to be
   12503      terminated.  GCC can generate code that can assist operating
   12504      system trap handlers in determining the exact location that caused
   12505      a floating-point trap.  Depending on the requirements of an
   12506      application, different levels of precisions can be selected:
   12507 
   12508     `p'
   12509           Program precision.  This option is the default and means a
   12510           trap handler can only identify which program caused a
   12511           floating-point exception.
   12512 
   12513     `f'
   12514           Function precision.  The trap handler can determine the
   12515           function that caused a floating-point exception.
   12516 
   12517     `i'
   12518           Instruction precision.  The trap handler can determine the
   12519           exact instruction that caused a floating-point exception.
   12520 
   12521      Other Alpha compilers provide the equivalent options called
   12522      `-scope_safe' and `-resumption_safe'.
   12523 
   12524 `-mieee-conformant'
   12525      This option marks the generated code as IEEE conformant.  You must
   12526      not use this option unless you also specify `-mtrap-precision=i'
   12527      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
   12528      effect is to emit the line `.eflag 48' in the function prologue of
   12529      the generated assembly file.
   12530 
   12531 `-mbuild-constants'
   12532      Normally GCC examines a 32- or 64-bit integer constant to see if
   12533      it can construct it from smaller constants in two or three
   12534      instructions.  If it cannot, it outputs the constant as a literal
   12535      and generates code to load it from the data segment at run time.
   12536 
   12537      Use this option to require GCC to construct _all_ integer constants
   12538      using code, even if it takes more instructions (the maximum is
   12539      six).
   12540 
   12541      You typically use this option to build a shared library dynamic
   12542      loader.  Itself a shared library, it must relocate itself in memory
   12543      before it can find the variables and constants in its own data
   12544      segment.
   12545 
   12546 `-mbwx'
   12547 `-mno-bwx'
   12548 `-mcix'
   12549 `-mno-cix'
   12550 `-mfix'
   12551 `-mno-fix'
   12552 `-mmax'
   12553 `-mno-max'
   12554      Indicate whether GCC should generate code to use the optional BWX,
   12555      CIX, FIX and MAX instruction sets.  The default is to use the
   12556      instruction sets supported by the CPU type specified via `-mcpu='
   12557      option or that of the CPU on which GCC was built if none is
   12558      specified.
   12559 
   12560 `-mfloat-vax'
   12561 `-mfloat-ieee'
   12562      Generate code that uses (does not use) VAX F and G floating-point
   12563      arithmetic instead of IEEE single and double precision.
   12564 
   12565 `-mexplicit-relocs'
   12566 `-mno-explicit-relocs'
   12567      Older Alpha assemblers provided no way to generate symbol
   12568      relocations except via assembler macros.  Use of these macros does
   12569      not allow optimal instruction scheduling.  GNU binutils as of
   12570      version 2.12 supports a new syntax that allows the compiler to
   12571      explicitly mark which relocations should apply to which
   12572      instructions.  This option is mostly useful for debugging, as GCC
   12573      detects the capabilities of the assembler when it is built and
   12574      sets the default accordingly.
   12575 
   12576 `-msmall-data'
   12577 `-mlarge-data'
   12578      When `-mexplicit-relocs' is in effect, static data is accessed via
   12579      "gp-relative" relocations.  When `-msmall-data' is used, objects 8
   12580      bytes long or smaller are placed in a "small data area" (the
   12581      `.sdata' and `.sbss' sections) and are accessed via 16-bit
   12582      relocations off of the `$gp' register.  This limits the size of
   12583      the small data area to 64KB, but allows the variables to be
   12584      directly accessed via a single instruction.
   12585 
   12586      The default is `-mlarge-data'.  With this option the data area is
   12587      limited to just below 2GB.  Programs that require more than 2GB of
   12588      data must use `malloc' or `mmap' to allocate the data in the heap
   12589      instead of in the program's data segment.
   12590 
   12591      When generating code for shared libraries, `-fpic' implies
   12592      `-msmall-data' and `-fPIC' implies `-mlarge-data'.
   12593 
   12594 `-msmall-text'
   12595 `-mlarge-text'
   12596      When `-msmall-text' is used, the compiler assumes that the code of
   12597      the entire program (or shared library) fits in 4MB, and is thus
   12598      reachable with a branch instruction.  When `-msmall-data' is used,
   12599      the compiler can assume that all local symbols share the same
   12600      `$gp' value, and thus reduce the number of instructions required
   12601      for a function call from 4 to 1.
   12602 
   12603      The default is `-mlarge-text'.
   12604 
   12605 `-mcpu=CPU_TYPE'
   12606      Set the instruction set and instruction scheduling parameters for
   12607      machine type CPU_TYPE.  You can specify either the `EV' style name
   12608      or the corresponding chip number.  GCC supports scheduling
   12609      parameters for the EV4, EV5 and EV6 family of processors and
   12610      chooses the default values for the instruction set from the
   12611      processor you specify.  If you do not specify a processor type,
   12612      GCC defaults to the processor on which the compiler was built.
   12613 
   12614      Supported values for CPU_TYPE are
   12615 
   12616     `ev4'
   12617     `ev45'
   12618     `21064'
   12619           Schedules as an EV4 and has no instruction set extensions.
   12620 
   12621     `ev5'
   12622     `21164'
   12623           Schedules as an EV5 and has no instruction set extensions.
   12624 
   12625     `ev56'
   12626     `21164a'
   12627           Schedules as an EV5 and supports the BWX extension.
   12628 
   12629     `pca56'
   12630     `21164pc'
   12631     `21164PC'
   12632           Schedules as an EV5 and supports the BWX and MAX extensions.
   12633 
   12634     `ev6'
   12635     `21264'
   12636           Schedules as an EV6 and supports the BWX, FIX, and MAX
   12637           extensions.
   12638 
   12639     `ev67'
   12640     `21264a'
   12641           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
   12642           extensions.
   12643 
   12644      Native toolchains also support the value `native', which selects
   12645      the best architecture option for the host processor.
   12646      `-mcpu=native' has no effect if GCC does not recognize the
   12647      processor.
   12648 
   12649 `-mtune=CPU_TYPE'
   12650      Set only the instruction scheduling parameters for machine type
   12651      CPU_TYPE.  The instruction set is not changed.
   12652 
   12653      Native toolchains also support the value `native', which selects
   12654      the best architecture option for the host processor.
   12655      `-mtune=native' has no effect if GCC does not recognize the
   12656      processor.
   12657 
   12658 `-mmemory-latency=TIME'
   12659      Sets the latency the scheduler should assume for typical memory
   12660      references as seen by the application.  This number is highly
   12661      dependent on the memory access patterns used by the application
   12662      and the size of the external cache on the machine.
   12663 
   12664      Valid options for TIME are
   12665 
   12666     `NUMBER'
   12667           A decimal number representing clock cycles.
   12668 
   12669     `L1'
   12670     `L2'
   12671     `L3'
   12672     `main'
   12673           The compiler contains estimates of the number of clock cycles
   12674           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
   12675           (also called Dcache, Scache, and Bcache), as well as to main
   12676           memory.  Note that L3 is only valid for EV5.
   12677 
   12678 
   12679 
   12680 File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
   12681 
   12682 3.17.11 FR30 Options
   12683 --------------------
   12684 
   12685 These options are defined specifically for the FR30 port.
   12686 
   12687 `-msmall-model'
   12688      Use the small address space model.  This can produce smaller code,
   12689      but it does assume that all symbolic values and addresses fit into
   12690      a 20-bit range.
   12691 
   12692 `-mno-lsim'
   12693      Assume that runtime support has been provided and so there is no
   12694      need to include the simulator library (`libsim.a') on the linker
   12695      command line.
   12696 
   12697 
   12698 
   12699 File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
   12700 
   12701 3.17.12 FRV Options
   12702 -------------------
   12703 
   12704 `-mgpr-32'
   12705      Only use the first 32 general-purpose registers.
   12706 
   12707 `-mgpr-64'
   12708      Use all 64 general-purpose registers.
   12709 
   12710 `-mfpr-32'
   12711      Use only the first 32 floating-point registers.
   12712 
   12713 `-mfpr-64'
   12714      Use all 64 floating-point registers.
   12715 
   12716 `-mhard-float'
   12717      Use hardware instructions for floating-point operations.
   12718 
   12719 `-msoft-float'
   12720      Use library routines for floating-point operations.
   12721 
   12722 `-malloc-cc'
   12723      Dynamically allocate condition code registers.
   12724 
   12725 `-mfixed-cc'
   12726      Do not try to dynamically allocate condition code registers, only
   12727      use `icc0' and `fcc0'.
   12728 
   12729 `-mdword'
   12730      Change ABI to use double word insns.
   12731 
   12732 `-mno-dword'
   12733      Do not use double word instructions.
   12734 
   12735 `-mdouble'
   12736      Use floating-point double instructions.
   12737 
   12738 `-mno-double'
   12739      Do not use floating-point double instructions.
   12740 
   12741 `-mmedia'
   12742      Use media instructions.
   12743 
   12744 `-mno-media'
   12745      Do not use media instructions.
   12746 
   12747 `-mmuladd'
   12748      Use multiply and add/subtract instructions.
   12749 
   12750 `-mno-muladd'
   12751      Do not use multiply and add/subtract instructions.
   12752 
   12753 `-mfdpic'
   12754      Select the FDPIC ABI, which uses function descriptors to represent
   12755      pointers to functions.  Without any PIC/PIE-related options, it
   12756      implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
   12757      and small data are within a 12-bit range from the GOT base
   12758      address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
   12759      bits.  With a `bfin-elf' target, this option implies `-msim'.
   12760 
   12761 `-minline-plt'
   12762      Enable inlining of PLT entries in function calls to functions that
   12763      are not known to bind locally.  It has no effect without `-mfdpic'.
   12764      It's enabled by default if optimizing for speed and compiling for
   12765      shared libraries (i.e., `-fPIC' or `-fpic'), or when an
   12766      optimization option such as `-O3' or above is present in the
   12767      command line.
   12768 
   12769 `-mTLS'
   12770      Assume a large TLS segment when generating thread-local code.
   12771 
   12772 `-mtls'
   12773      Do not assume a large TLS segment when generating thread-local
   12774      code.
   12775 
   12776 `-mgprel-ro'
   12777      Enable the use of `GPREL' relocations in the FDPIC ABI for data
   12778      that is known to be in read-only sections.  It's enabled by
   12779      default, except for `-fpic' or `-fpie': even though it may help
   12780      make the global offset table smaller, it trades 1 instruction for
   12781      4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
   12782      of which may be shared by multiple symbols, and it avoids the need
   12783      for a GOT entry for the referenced symbol, so it's more likely to
   12784      be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
   12785 
   12786 `-multilib-library-pic'
   12787      Link with the (library, not FD) pic libraries.  It's implied by
   12788      `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
   12789      `-mfdpic'.  You should never have to use it explicitly.
   12790 
   12791 `-mlinked-fp'
   12792      Follow the EABI requirement of always creating a frame pointer
   12793      whenever a stack frame is allocated.  This option is enabled by
   12794      default and can be disabled with `-mno-linked-fp'.
   12795 
   12796 `-mlong-calls'
   12797      Use indirect addressing to call functions outside the current
   12798      compilation unit.  This allows the functions to be placed anywhere
   12799      within the 32-bit address space.
   12800 
   12801 `-malign-labels'
   12802      Try to align labels to an 8-byte boundary by inserting NOPs into
   12803      the previous packet.  This option only has an effect when VLIW
   12804      packing is enabled.  It doesn't create new packets; it merely adds
   12805      NOPs to existing ones.
   12806 
   12807 `-mlibrary-pic'
   12808      Generate position-independent EABI code.
   12809 
   12810 `-macc-4'
   12811      Use only the first four media accumulator registers.
   12812 
   12813 `-macc-8'
   12814      Use all eight media accumulator registers.
   12815 
   12816 `-mpack'
   12817      Pack VLIW instructions.
   12818 
   12819 `-mno-pack'
   12820      Do not pack VLIW instructions.
   12821 
   12822 `-mno-eflags'
   12823      Do not mark ABI switches in e_flags.
   12824 
   12825 `-mcond-move'
   12826      Enable the use of conditional-move instructions (default).
   12827 
   12828      This switch is mainly for debugging the compiler and will likely
   12829      be removed in a future version.
   12830 
   12831 `-mno-cond-move'
   12832      Disable the use of conditional-move instructions.
   12833 
   12834      This switch is mainly for debugging the compiler and will likely
   12835      be removed in a future version.
   12836 
   12837 `-mscc'
   12838      Enable the use of conditional set instructions (default).
   12839 
   12840      This switch is mainly for debugging the compiler and will likely
   12841      be removed in a future version.
   12842 
   12843 `-mno-scc'
   12844      Disable the use of conditional set instructions.
   12845 
   12846      This switch is mainly for debugging the compiler and will likely
   12847      be removed in a future version.
   12848 
   12849 `-mcond-exec'
   12850      Enable the use of conditional execution (default).
   12851 
   12852      This switch is mainly for debugging the compiler and will likely
   12853      be removed in a future version.
   12854 
   12855 `-mno-cond-exec'
   12856      Disable the use of conditional execution.
   12857 
   12858      This switch is mainly for debugging the compiler and will likely
   12859      be removed in a future version.
   12860 
   12861 `-mvliw-branch'
   12862      Run a pass to pack branches into VLIW instructions (default).
   12863 
   12864      This switch is mainly for debugging the compiler and will likely
   12865      be removed in a future version.
   12866 
   12867 `-mno-vliw-branch'
   12868      Do not run a pass to pack branches into VLIW instructions.
   12869 
   12870      This switch is mainly for debugging the compiler and will likely
   12871      be removed in a future version.
   12872 
   12873 `-mmulti-cond-exec'
   12874      Enable optimization of `&&' and `||' in conditional execution
   12875      (default).
   12876 
   12877      This switch is mainly for debugging the compiler and will likely
   12878      be removed in a future version.
   12879 
   12880 `-mno-multi-cond-exec'
   12881      Disable optimization of `&&' and `||' in conditional execution.
   12882 
   12883      This switch is mainly for debugging the compiler and will likely
   12884      be removed in a future version.
   12885 
   12886 `-mnested-cond-exec'
   12887      Enable nested conditional execution optimizations (default).
   12888 
   12889      This switch is mainly for debugging the compiler and will likely
   12890      be removed in a future version.
   12891 
   12892 `-mno-nested-cond-exec'
   12893      Disable nested conditional execution optimizations.
   12894 
   12895      This switch is mainly for debugging the compiler and will likely
   12896      be removed in a future version.
   12897 
   12898 `-moptimize-membar'
   12899      This switch removes redundant `membar' instructions from the
   12900      compiler-generated code.  It is enabled by default.
   12901 
   12902 `-mno-optimize-membar'
   12903      This switch disables the automatic removal of redundant `membar'
   12904      instructions from the generated code.
   12905 
   12906 `-mtomcat-stats'
   12907      Cause gas to print out tomcat statistics.
   12908 
   12909 `-mcpu=CPU'
   12910      Select the processor type for which to generate code.  Possible
   12911      values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
   12912      `fr400', `fr300' and `simple'.
   12913 
   12914 
   12915 
   12916 File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
   12917 
   12918 3.17.13 GNU/Linux Options
   12919 -------------------------
   12920 
   12921 These `-m' options are defined for GNU/Linux targets:
   12922 
   12923 `-mglibc'
   12924      Use the GNU C library.  This is the default except on
   12925      `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
   12926 
   12927 `-muclibc'
   12928      Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
   12929      targets.
   12930 
   12931 `-mbionic'
   12932      Use Bionic C library.  This is the default on
   12933      `*-*-linux-*android*' targets.
   12934 
   12935 `-mandroid'
   12936      Compile code compatible with Android platform.  This is the
   12937      default on `*-*-linux-*android*' targets.
   12938 
   12939      When compiling, this option enables `-mbionic', `-fPIC',
   12940      `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
   12941      option makes the GCC driver pass Android-specific options to the
   12942      linker.  Finally, this option causes the preprocessor macro
   12943      `__ANDROID__' to be defined.
   12944 
   12945 `-tno-android-cc'
   12946      Disable compilation effects of `-mandroid', i.e., do not enable
   12947      `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
   12948 
   12949 `-tno-android-ld'
   12950      Disable linking effects of `-mandroid', i.e., pass standard Linux
   12951      linking options to the linker.
   12952 
   12953 
   12954 
   12955 File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
   12956 
   12957 3.17.14 H8/300 Options
   12958 ----------------------
   12959 
   12960 These `-m' options are defined for the H8/300 implementations:
   12961 
   12962 `-mrelax'
   12963      Shorten some address references at link time, when possible; uses
   12964      the linker option `-relax'.  *Note `ld' and the H8/300:
   12965      (ld)H8/300, for a fuller description.
   12966 
   12967 `-mh'
   12968      Generate code for the H8/300H.
   12969 
   12970 `-ms'
   12971      Generate code for the H8S.
   12972 
   12973 `-mn'
   12974      Generate code for the H8S and H8/300H in the normal mode.  This
   12975      switch must be used either with `-mh' or `-ms'.
   12976 
   12977 `-ms2600'
   12978      Generate code for the H8S/2600.  This switch must be used with
   12979      `-ms'.
   12980 
   12981 `-mexr'
   12982      Extended registers are stored on stack before execution of function
   12983      with monitor attribute. Default option is `-mexr'.  This option is
   12984      valid only for H8S targets.
   12985 
   12986 `-mno-exr'
   12987      Extended registers are not stored on stack before execution of
   12988      function with monitor attribute. Default option is `-mno-exr'.
   12989      This option is valid only for H8S targets.
   12990 
   12991 `-mint32'
   12992      Make `int' data 32 bits by default.
   12993 
   12994 `-malign-300'
   12995      On the H8/300H and H8S, use the same alignment rules as for the
   12996      H8/300.  The default for the H8/300H and H8S is to align longs and
   12997      floats on 4-byte boundaries.  `-malign-300' causes them to be
   12998      aligned on 2-byte boundaries.  This option has no effect on the
   12999      H8/300.
   13000 
   13001 
   13002 File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
   13003 
   13004 3.17.15 HPPA Options
   13005 --------------------
   13006 
   13007 These `-m' options are defined for the HPPA family of computers:
   13008 
   13009 `-march=ARCHITECTURE-TYPE'
   13010      Generate code for the specified architecture.  The choices for
   13011      ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
   13012      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
   13013      an HP-UX system to determine the proper architecture option for
   13014      your machine.  Code compiled for lower numbered architectures runs
   13015      on higher numbered architectures, but not the other way around.
   13016 
   13017 `-mpa-risc-1-0'
   13018 `-mpa-risc-1-1'
   13019 `-mpa-risc-2-0'
   13020      Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
   13021      respectively.
   13022 
   13023 `-mbig-switch'
   13024      Generate code suitable for big switch tables.  Use this option
   13025      only if the assembler/linker complain about out-of-range branches
   13026      within a switch table.
   13027 
   13028 `-mjump-in-delay'
   13029      Fill delay slots of function calls with unconditional jump
   13030      instructions by modifying the return pointer for the function call
   13031      to be the target of the conditional jump.
   13032 
   13033 `-mdisable-fpregs'
   13034      Prevent floating-point registers from being used in any manner.
   13035      This is necessary for compiling kernels that perform lazy context
   13036      switching of floating-point registers.  If you use this option and
   13037      attempt to perform floating-point operations, the compiler aborts.
   13038 
   13039 `-mdisable-indexing'
   13040      Prevent the compiler from using indexing address modes.  This
   13041      avoids some rather obscure problems when compiling MIG generated
   13042      code under MACH.
   13043 
   13044 `-mno-space-regs'
   13045      Generate code that assumes the target has no space registers.
   13046      This allows GCC to generate faster indirect calls and use unscaled
   13047      index address modes.
   13048 
   13049      Such code is suitable for level 0 PA systems and kernels.
   13050 
   13051 `-mfast-indirect-calls'
   13052      Generate code that assumes calls never cross space boundaries.
   13053      This allows GCC to emit code that performs faster indirect calls.
   13054 
   13055      This option does not work in the presence of shared libraries or
   13056      nested functions.
   13057 
   13058 `-mfixed-range=REGISTER-RANGE'
   13059      Generate code treating the given register range as fixed registers.
   13060      A fixed register is one that the register allocator cannot use.
   13061      This is useful when compiling kernel code.  A register range is
   13062      specified as two registers separated by a dash.  Multiple register
   13063      ranges can be specified separated by a comma.
   13064 
   13065 `-mlong-load-store'
   13066      Generate 3-instruction load and store sequences as sometimes
   13067      required by the HP-UX 10 linker.  This is equivalent to the `+k'
   13068      option to the HP compilers.
   13069 
   13070 `-mportable-runtime'
   13071      Use the portable calling conventions proposed by HP for ELF
   13072      systems.
   13073 
   13074 `-mgas'
   13075      Enable the use of assembler directives only GAS understands.
   13076 
   13077 `-mschedule=CPU-TYPE'
   13078      Schedule code according to the constraints for the machine type
   13079      CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
   13080      `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
   13081      HP-UX system to determine the proper scheduling option for your
   13082      machine.  The default scheduling is `8000'.
   13083 
   13084 `-mlinker-opt'
   13085      Enable the optimization pass in the HP-UX linker.  Note this makes
   13086      symbolic debugging impossible.  It also triggers a bug in the
   13087      HP-UX 8 and HP-UX 9 linkers in which they give bogus error
   13088      messages when linking some programs.
   13089 
   13090 `-msoft-float'
   13091      Generate output containing library calls for floating point.
   13092      *Warning:* the requisite libraries are not available for all HPPA
   13093      targets.  Normally the facilities of the machine's usual C
   13094      compiler are used, but this cannot be done directly in
   13095      cross-compilation.  You must make your own arrangements to provide
   13096      suitable library functions for cross-compilation.
   13097 
   13098      `-msoft-float' changes the calling convention in the output file;
   13099      therefore, it is only useful if you compile _all_ of a program with
   13100      this option.  In particular, you need to compile `libgcc.a', the
   13101      library that comes with GCC, with `-msoft-float' in order for this
   13102      to work.
   13103 
   13104 `-msio'
   13105      Generate the predefine, `_SIO', for server IO.  The default is
   13106      `-mwsio'.  This generates the predefines, `__hp9000s700',
   13107      `__hp9000s700__' and `_WSIO', for workstation IO.  These options
   13108      are available under HP-UX and HI-UX.
   13109 
   13110 `-mgnu-ld'
   13111      Use options specific to GNU `ld'.  This passes `-shared' to `ld'
   13112      when building a shared library.  It is the default when GCC is
   13113      configured, explicitly or implicitly, with the GNU linker.  This
   13114      option does not affect which `ld' is called; it only changes what
   13115      parameters are passed to that `ld'.  The `ld' that is called is
   13116      determined by the `--with-ld' configure option, GCC's program
   13117      search path, and finally by the user's `PATH'.  The linker used by
   13118      GCC can be printed using `which `gcc -print-prog-name=ld`'.  This
   13119      option is only available on the 64-bit HP-UX GCC, i.e. configured
   13120      with `hppa*64*-*-hpux*'.
   13121 
   13122 `-mhp-ld'
   13123      Use options specific to HP `ld'.  This passes `-b' to `ld' when
   13124      building a shared library and passes `+Accept TypeMismatch' to
   13125      `ld' on all links.  It is the default when GCC is configured,
   13126      explicitly or implicitly, with the HP linker.  This option does
   13127      not affect which `ld' is called; it only changes what parameters
   13128      are passed to that `ld'.  The `ld' that is called is determined by
   13129      the `--with-ld' configure option, GCC's program search path, and
   13130      finally by the user's `PATH'.  The linker used by GCC can be
   13131      printed using `which `gcc -print-prog-name=ld`'.  This option is
   13132      only available on the 64-bit HP-UX GCC, i.e. configured with
   13133      `hppa*64*-*-hpux*'.
   13134 
   13135 `-mlong-calls'
   13136      Generate code that uses long call sequences.  This ensures that a
   13137      call is always able to reach linker generated stubs.  The default
   13138      is to generate long calls only when the distance from the call
   13139      site to the beginning of the function or translation unit, as the
   13140      case may be, exceeds a predefined limit set by the branch type
   13141      being used.  The limits for normal calls are 7,600,000 and 240,000
   13142      bytes, respectively for the PA 2.0 and PA 1.X architectures.
   13143      Sibcalls are always limited at 240,000 bytes.
   13144 
   13145      Distances are measured from the beginning of functions when using
   13146      the `-ffunction-sections' option, or when using the `-mgas' and
   13147      `-mno-portable-runtime' options together under HP-UX with the SOM
   13148      linker.
   13149 
   13150      It is normally not desirable to use this option as it degrades
   13151      performance.  However, it may be useful in large applications,
   13152      particularly when partial linking is used to build the application.
   13153 
   13154      The types of long calls used depends on the capabilities of the
   13155      assembler and linker, and the type of code being generated.  The
   13156      impact on systems that support long absolute calls, and long pic
   13157      symbol-difference or pc-relative calls should be relatively small.
   13158      However, an indirect call is used on 32-bit ELF systems in pic code
   13159      and it is quite long.
   13160 
   13161 `-munix=UNIX-STD'
   13162      Generate compiler predefines and select a startfile for the
   13163      specified UNIX standard.  The choices for UNIX-STD are `93', `95'
   13164      and `98'.  `93' is supported on all HP-UX versions.  `95' is
   13165      available on HP-UX 10.10 and later.  `98' is available on HP-UX
   13166      11.11 and later.  The default values are `93' for HP-UX 10.00,
   13167      `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
   13168      later.
   13169 
   13170      `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
   13171      `-munix=95' provides additional predefines for `XOPEN_UNIX' and
   13172      `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
   13173      `-munix=98' provides additional predefines for `_XOPEN_UNIX',
   13174      `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
   13175      `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
   13176 
   13177      It is _important_ to note that this option changes the interfaces
   13178      for various library routines.  It also affects the operational
   13179      behavior of the C library.  Thus, _extreme_ care is needed in
   13180      using this option.
   13181 
   13182      Library code that is intended to operate with more than one UNIX
   13183      standard must test, set and restore the variable
   13184      __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
   13185      provide this capability.
   13186 
   13187 `-nolibdld'
   13188      Suppress the generation of link options to search libdld.sl when
   13189      the `-static' option is specified on HP-UX 10 and later.
   13190 
   13191 `-static'
   13192      The HP-UX implementation of setlocale in libc has a dependency on
   13193      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
   13194      when the `-static' option is specified, special link options are
   13195      needed to resolve this dependency.
   13196 
   13197      On HP-UX 10 and later, the GCC driver adds the necessary options to
   13198      link with libdld.sl when the `-static' option is specified.  This
   13199      causes the resulting binary to be dynamic.  On the 64-bit port,
   13200      the linkers generate dynamic binaries by default in any case.  The
   13201      `-nolibdld' option can be used to prevent the GCC driver from
   13202      adding these link options.
   13203 
   13204 `-threads'
   13205      Add support for multithreading with the "dce thread" library under
   13206      HP-UX.  This option sets flags for both the preprocessor and
   13207      linker.
   13208 
   13209 
   13210 File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
   13211 
   13212 3.17.16 Intel 386 and AMD x86-64 Options
   13213 ----------------------------------------
   13214 
   13215 These `-m' options are defined for the i386 and x86-64 family of
   13216 computers:
   13217 
   13218 `-march=CPU-TYPE'
   13219      Generate instructions for the machine type CPU-TYPE.  In contrast
   13220      to `-mtune=CPU-TYPE', which merely tunes the generated code for
   13221      the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate
   13222      code that may not run at all on processors other than the one
   13223      indicated.  Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
   13224 
   13225      The choices for CPU-TYPE are:
   13226 
   13227     `native'
   13228           This selects the CPU to generate code for at compilation time
   13229           by determining the processor type of the compiling machine.
   13230           Using `-march=native' enables all instruction subsets
   13231           supported by the local machine (hence the result might not
   13232           run on different machines).  Using `-mtune=native' produces
   13233           code optimized for the local machine under the constraints of
   13234           the selected instruction set.
   13235 
   13236     `i386'
   13237           Original Intel i386 CPU.
   13238 
   13239     `i486'
   13240           Intel i486 CPU.  (No scheduling is implemented for this chip.)
   13241 
   13242     `i586'
   13243     `pentium'
   13244           Intel Pentium CPU with no MMX support.
   13245 
   13246     `pentium-mmx'
   13247           Intel Pentium MMX CPU, based on Pentium core with MMX
   13248           instruction set support.
   13249 
   13250     `pentiumpro'
   13251           Intel Pentium Pro CPU.
   13252 
   13253     `i686'
   13254           When used with `-march', the Pentium Pro instruction set is
   13255           used, so the code runs on all i686 family chips.  When used
   13256           with `-mtune', it has the same meaning as `generic'.
   13257 
   13258     `pentium2'
   13259           Intel Pentium II CPU, based on Pentium Pro core with MMX
   13260           instruction set support.
   13261 
   13262     `pentium3'
   13263     `pentium3m'
   13264           Intel Pentium III CPU, based on Pentium Pro core with MMX and
   13265           SSE instruction set support.
   13266 
   13267     `pentium-m'
   13268           Intel Pentium M; low-power version of Intel Pentium III CPU
   13269           with MMX, SSE and SSE2 instruction set support.  Used by
   13270           Centrino notebooks.
   13271 
   13272     `pentium4'
   13273     `pentium4m'
   13274           Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
   13275           support.
   13276 
   13277     `prescott'
   13278           Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
   13279           and SSE3 instruction set support.
   13280 
   13281     `nocona'
   13282           Improved version of Intel Pentium 4 CPU with 64-bit
   13283           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
   13284 
   13285     `core2'
   13286           Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
   13287           and SSSE3 instruction set support.
   13288 
   13289     `corei7'
   13290           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
   13291           SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
   13292 
   13293     `corei7-avx'
   13294           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
   13295           SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
   13296           set support.
   13297 
   13298     `core-avx-i'
   13299           Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
   13300           SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
   13301           F16C instruction set support.
   13302 
   13303     `core-avx2'
   13304           Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
   13305           SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL,
   13306           FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction set
   13307           support.
   13308 
   13309     `atom'
   13310           Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
   13311           SSE3 and SSSE3 instruction set support.
   13312 
   13313     `k6'
   13314           AMD K6 CPU with MMX instruction set support.
   13315 
   13316     `k6-2'
   13317     `k6-3'
   13318           Improved versions of AMD K6 CPU with MMX and 3DNow!
   13319           instruction set support.
   13320 
   13321     `athlon'
   13322     `athlon-tbird'
   13323           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
   13324           prefetch instructions support.
   13325 
   13326     `athlon-4'
   13327     `athlon-xp'
   13328     `athlon-mp'
   13329           Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
   13330           full SSE instruction set support.
   13331 
   13332     `k8'
   13333     `opteron'
   13334     `athlon64'
   13335     `athlon-fx'
   13336           Processors based on the AMD K8 core with x86-64 instruction
   13337           set support, including the AMD Opteron, Athlon 64, and Athlon
   13338           64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
   13339           enhanced 3DNow! and 64-bit instruction set extensions.)
   13340 
   13341     `k8-sse3'
   13342     `opteron-sse3'
   13343     `athlon64-sse3'
   13344           Improved versions of AMD K8 cores with SSE3 instruction set
   13345           support.
   13346 
   13347     `amdfam10'
   13348     `barcelona'
   13349           CPUs based on AMD Family 10h cores with x86-64 instruction
   13350           set support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
   13351           3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
   13352           extensions.)
   13353 
   13354     `bdver1'
   13355           CPUs based on AMD Family 15h cores with x86-64 instruction
   13356           set support.  (This supersets FMA4, AVX, XOP, LWP, AES,
   13357           PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
   13358           SSE4.2, ABM and 64-bit instruction set extensions.)
   13359 
   13360     `bdver2'
   13361           AMD Family 15h core based CPUs with x86-64 instruction set
   13362           support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
   13363           AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
   13364           SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
   13365 
   13366     `bdver3'
   13367           AMD Family 15h core based CPUs with x86-64 instruction set
   13368           support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
   13369           AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
   13370           SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.
   13371 
   13372     `btver1'
   13373           CPUs based on AMD Family 14h cores with x86-64 instruction
   13374           set support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3,
   13375           SSE4A, CX16, ABM and 64-bit instruction set extensions.)
   13376 
   13377     `btver2'
   13378           CPUs based on AMD Family 16h cores with x86-64 instruction
   13379           set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL,
   13380           AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2,
   13381           SSE, MMX and 64-bit instruction set extensions.
   13382 
   13383     `winchip-c6'
   13384           IDT WinChip C6 CPU, dealt in same way as i486 with additional
   13385           MMX instruction set support.
   13386 
   13387     `winchip2'
   13388           IDT WinChip 2 CPU, dealt in same way as i486 with additional
   13389           MMX and 3DNow!  instruction set support.
   13390 
   13391     `c3'
   13392           VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
   13393           scheduling is implemented for this chip.)
   13394 
   13395     `c3-2'
   13396           VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
   13397           support.  (No scheduling is implemented for this chip.)
   13398 
   13399     `geode'
   13400           AMD Geode embedded processor with MMX and 3DNow! instruction
   13401           set support.
   13402 
   13403 `-mtune=CPU-TYPE'
   13404      Tune to CPU-TYPE everything applicable about the generated code,
   13405      except for the ABI and the set of available instructions.  While
   13406      picking a specific CPU-TYPE schedules things appropriately for
   13407      that particular chip, the compiler does not generate any code that
   13408      cannot run on the default machine type unless you use a
   13409      `-march=CPU-TYPE' option.  For example, if GCC is configured for
   13410      i686-pc-linux-gnu then `-mtune=pentium4' generates code that is
   13411      tuned for Pentium 4 but still runs on i686 machines.
   13412 
   13413      The choices for CPU-TYPE are the same as for `-march'.  In
   13414      addition, `-mtune' supports an extra choice for CPU-TYPE:
   13415 
   13416     `generic'
   13417           Produce code optimized for the most common IA32/AMD64/EM64T
   13418           processors.  If you know the CPU on which your code will run,
   13419           then you should use the corresponding `-mtune' or `-march'
   13420           option instead of `-mtune=generic'.  But, if you do not know
   13421           exactly what CPU users of your application will have, then
   13422           you should use this option.
   13423 
   13424           As new processors are deployed in the marketplace, the
   13425           behavior of this option will change.  Therefore, if you
   13426           upgrade to a newer version of GCC, code generation controlled
   13427           by this option will change to reflect the processors that are
   13428           most common at the time that version of GCC is released.
   13429 
   13430           There is no `-march=generic' option because `-march'
   13431           indicates the instruction set the compiler can use, and there
   13432           is no generic instruction set applicable to all processors.
   13433           In contrast, `-mtune' indicates the processor (or, in this
   13434           case, collection of processors) for which the code is
   13435           optimized.
   13436 
   13437 `-mcpu=CPU-TYPE'
   13438      A deprecated synonym for `-mtune'.
   13439 
   13440 `-mfpmath=UNIT'
   13441      Generate floating-point arithmetic for selected unit UNIT.  The
   13442      choices for UNIT are:
   13443 
   13444     `387'
   13445           Use the standard 387 floating-point coprocessor present on
   13446           the majority of chips and emulated otherwise.  Code compiled
   13447           with this option runs almost everywhere.  The temporary
   13448           results are computed in 80-bit precision instead of the
   13449           precision specified by the type, resulting in slightly
   13450           different results compared to most of other chips.  See
   13451           `-ffloat-store' for more detailed description.
   13452 
   13453           This is the default choice for i386 compiler.
   13454 
   13455     `sse'
   13456           Use scalar floating-point instructions present in the SSE
   13457           instruction set.  This instruction set is supported by
   13458           Pentium III and newer chips, and in the AMD line by Athlon-4,
   13459           Athlon XP and Athlon MP chips.  The earlier version of the SSE
   13460           instruction set supports only single-precision arithmetic,
   13461           thus the double and extended-precision arithmetic are still
   13462           done using 387.  A later version, present only in Pentium 4
   13463           and AMD x86-64 chips, supports double-precision arithmetic
   13464           too.
   13465 
   13466           For the i386 compiler, you must use `-march=CPU-TYPE', `-msse'
   13467           or `-msse2' switches to enable SSE extensions and make this
   13468           option effective.  For the x86-64 compiler, these extensions
   13469           are enabled by default.
   13470 
   13471           The resulting code should be considerably faster in the
   13472           majority of cases and avoid the numerical instability
   13473           problems of 387 code, but may break some existing code that
   13474           expects temporaries to be 80 bits.
   13475 
   13476           This is the default choice for the x86-64 compiler.
   13477 
   13478     `sse,387'
   13479     `sse+387'
   13480     `both'
   13481           Attempt to utilize both instruction sets at once.  This
   13482           effectively doubles the amount of available registers, and on
   13483           chips with separate execution units for 387 and SSE the
   13484           execution resources too.  Use this option with care, as it is
   13485           still experimental, because the GCC register allocator does
   13486           not model separate functional units well, resulting in
   13487           unstable performance.
   13488 
   13489 `-masm=DIALECT'
   13490      Output assembly instructions using selected DIALECT.  Supported
   13491      choices are `intel' or `att' (the default).  Darwin does not
   13492      support `intel'.
   13493 
   13494 `-mieee-fp'
   13495 `-mno-ieee-fp'
   13496      Control whether or not the compiler uses IEEE floating-point
   13497      comparisons.  These correctly handle the case where the result of a
   13498      comparison is unordered.
   13499 
   13500 `-msoft-float'
   13501      Generate output containing library calls for floating point.
   13502 
   13503      *Warning:* the requisite libraries are not part of GCC.  Normally
   13504      the facilities of the machine's usual C compiler are used, but
   13505      this can't be done directly in cross-compilation.  You must make
   13506      your own arrangements to provide suitable library functions for
   13507      cross-compilation.
   13508 
   13509      On machines where a function returns floating-point results in the
   13510      80387 register stack, some floating-point opcodes may be emitted
   13511      even if `-msoft-float' is used.
   13512 
   13513 `-mno-fp-ret-in-387'
   13514      Do not use the FPU registers for return values of functions.
   13515 
   13516      The usual calling convention has functions return values of types
   13517      `float' and `double' in an FPU register, even if there is no FPU.
   13518      The idea is that the operating system should emulate an FPU.
   13519 
   13520      The option `-mno-fp-ret-in-387' causes such values to be returned
   13521      in ordinary CPU registers instead.
   13522 
   13523 `-mno-fancy-math-387'
   13524      Some 387 emulators do not support the `sin', `cos' and `sqrt'
   13525      instructions for the 387.  Specify this option to avoid generating
   13526      those instructions.  This option is the default on FreeBSD,
   13527      OpenBSD and NetBSD.  This option is overridden when `-march'
   13528      indicates that the target CPU always has an FPU and so the
   13529      instruction does not need emulation.  These instructions are not
   13530      generated unless you also use the `-funsafe-math-optimizations'
   13531      switch.
   13532 
   13533 `-malign-double'
   13534 `-mno-align-double'
   13535      Control whether GCC aligns `double', `long double', and `long
   13536      long' variables on a two-word boundary or a one-word boundary.
   13537      Aligning `double' variables on a two-word boundary produces code
   13538      that runs somewhat faster on a Pentium at the expense of more
   13539      memory.
   13540 
   13541      On x86-64, `-malign-double' is enabled by default.
   13542 
   13543      *Warning:* if you use the `-malign-double' switch, structures
   13544      containing the above types are aligned differently than the
   13545      published application binary interface specifications for the 386
   13546      and are not binary compatible with structures in code compiled
   13547      without that switch.
   13548 
   13549 `-m96bit-long-double'
   13550 `-m128bit-long-double'
   13551      These switches control the size of `long double' type.  The i386
   13552      application binary interface specifies the size to be 96 bits, so
   13553      `-m96bit-long-double' is the default in 32-bit mode.
   13554 
   13555      Modern architectures (Pentium and newer) prefer `long double' to
   13556      be aligned to an 8- or 16-byte boundary.  In arrays or structures
   13557      conforming to the ABI, this is not possible.  So specifying
   13558      `-m128bit-long-double' aligns `long double' to a 16-byte boundary
   13559      by padding the `long double' with an additional 32-bit zero.
   13560 
   13561      In the x86-64 compiler, `-m128bit-long-double' is the default
   13562      choice as its ABI specifies that `long double' is aligned on
   13563      16-byte boundary.
   13564 
   13565      Notice that neither of these options enable any extra precision
   13566      over the x87 standard of 80 bits for a `long double'.
   13567 
   13568      *Warning:* if you override the default value for your target ABI,
   13569      this changes the size of structures and arrays containing `long
   13570      double' variables, as well as modifying the function calling
   13571      convention for functions taking `long double'.  Hence they are not
   13572      binary-compatible with code compiled without that switch.
   13573 
   13574 `-mlong-double-64'
   13575 `-mlong-double-80'
   13576      These switches control the size of `long double' type. A size of
   13577      64 bits makes the `long double' type equivalent to the `double'
   13578      type. This is the default for Bionic C library.
   13579 
   13580      *Warning:* if you override the default value for your target ABI,
   13581      this changes the size of structures and arrays containing `long
   13582      double' variables, as well as modifying the function calling
   13583      convention for functions taking `long double'.  Hence they are not
   13584      binary-compatible with code compiled without that switch.
   13585 
   13586 `-mlarge-data-threshold=THRESHOLD'
   13587      When `-mcmodel=medium' is specified, data objects larger than
   13588      THRESHOLD are placed in the large data section.  This value must
   13589      be the same across all objects linked into the binary, and
   13590      defaults to 65535.
   13591 
   13592 `-mrtd'
   13593      Use a different function-calling convention, in which functions
   13594      that take a fixed number of arguments return with the `ret NUM'
   13595      instruction, which pops their arguments while returning.  This
   13596      saves one instruction in the caller since there is no need to pop
   13597      the arguments there.
   13598 
   13599      You can specify that an individual function is called with this
   13600      calling sequence with the function attribute `stdcall'.  You can
   13601      also override the `-mrtd' option by using the function attribute
   13602      `cdecl'.  *Note Function Attributes::.
   13603 
   13604      *Warning:* this calling convention is incompatible with the one
   13605      normally used on Unix, so you cannot use it if you need to call
   13606      libraries compiled with the Unix compiler.
   13607 
   13608      Also, you must provide function prototypes for all functions that
   13609      take variable numbers of arguments (including `printf'); otherwise
   13610      incorrect code is generated for calls to those functions.
   13611 
   13612      In addition, seriously incorrect code results if you call a
   13613      function with too many arguments.  (Normally, extra arguments are
   13614      harmlessly ignored.)
   13615 
   13616 `-mregparm=NUM'
   13617      Control how many registers are used to pass integer arguments.  By
   13618      default, no registers are used to pass arguments, and at most 3
   13619      registers can be used.  You can control this behavior for a
   13620      specific function by using the function attribute `regparm'.
   13621      *Note Function Attributes::.
   13622 
   13623      *Warning:* if you use this switch, and NUM is nonzero, then you
   13624      must build all modules with the same value, including any
   13625      libraries.  This includes the system libraries and startup modules.
   13626 
   13627 `-msseregparm'
   13628      Use SSE register passing conventions for float and double arguments
   13629      and return values.  You can control this behavior for a specific
   13630      function by using the function attribute `sseregparm'.  *Note
   13631      Function Attributes::.
   13632 
   13633      *Warning:* if you use this switch then you must build all modules
   13634      with the same value, including any libraries.  This includes the
   13635      system libraries and startup modules.
   13636 
   13637 `-mvect8-ret-in-mem'
   13638      Return 8-byte vectors in memory instead of MMX registers.  This is
   13639      the default on Solaris 8 and 9 and VxWorks to match the ABI of the
   13640      Sun Studio compilers until version 12.  Later compiler versions
   13641      (starting with Studio 12 Update 1) follow the ABI used by other
   13642      x86 targets, which is the default on Solaris 10 and later.  _Only_
   13643      use this option if you need to remain compatible with existing
   13644      code produced by those previous compiler versions or older
   13645      versions of GCC.
   13646 
   13647 `-mpc32'
   13648 `-mpc64'
   13649 `-mpc80'
   13650      Set 80387 floating-point precision to 32, 64 or 80 bits.  When
   13651      `-mpc32' is specified, the significands of results of
   13652      floating-point operations are rounded to 24 bits (single
   13653      precision); `-mpc64' rounds the significands of results of
   13654      floating-point operations to 53 bits (double precision) and
   13655      `-mpc80' rounds the significands of results of floating-point
   13656      operations to 64 bits (extended double precision), which is the
   13657      default.  When this option is used, floating-point operations in
   13658      higher precisions are not available to the programmer without
   13659      setting the FPU control word explicitly.
   13660 
   13661      Setting the rounding of floating-point operations to less than the
   13662      default 80 bits can speed some programs by 2% or more.  Note that
   13663      some mathematical libraries assume that extended-precision
   13664      (80-bit) floating-point operations are enabled by default;
   13665      routines in such libraries could suffer significant loss of
   13666      accuracy, typically through so-called "catastrophic cancellation",
   13667      when this option is used to set the precision to less than
   13668      extended precision.
   13669 
   13670 `-mstackrealign'
   13671      Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
   13672      option generates an alternate prologue and epilogue that realigns
   13673      the run-time stack if necessary.  This supports mixing legacy
   13674      codes that keep 4-byte stack alignment with modern codes that keep
   13675      16-byte stack alignment for SSE compatibility.  See also the
   13676      attribute `force_align_arg_pointer', applicable to individual
   13677      functions.
   13678 
   13679 `-mpreferred-stack-boundary=NUM'
   13680      Attempt to keep the stack boundary aligned to a 2 raised to NUM
   13681      byte boundary.  If `-mpreferred-stack-boundary' is not specified,
   13682      the default is 4 (16 bytes or 128 bits).
   13683 
   13684      *Warning:* When generating code for the x86-64 architecture with
   13685      SSE extensions disabled, `-mpreferred-stack-boundary=3' can be
   13686      used to keep the stack boundary aligned to 8 byte boundary.  Since
   13687      x86-64 ABI require 16 byte stack alignment, this is ABI
   13688      incompatible and intended to be used in controlled environment
   13689      where stack space is important limitation.  This option will lead
   13690      to wrong code when functions compiled with 16 byte stack alignment
   13691      (such as functions from a standard library) are called with
   13692      misaligned stack.  In this case, SSE instructions may lead to
   13693      misaligned memory access traps.  In addition, variable arguments
   13694      will be handled incorrectly for 16 byte aligned objects (including
   13695      x87 long double and __int128), leading to wrong results.  You must
   13696      build all modules with `-mpreferred-stack-boundary=3', including
   13697      any libraries.  This includes the system libraries and startup
   13698      modules.
   13699 
   13700 `-mincoming-stack-boundary=NUM'
   13701      Assume the incoming stack is aligned to a 2 raised to NUM byte
   13702      boundary.  If `-mincoming-stack-boundary' is not specified, the
   13703      one specified by `-mpreferred-stack-boundary' is used.
   13704 
   13705      On Pentium and Pentium Pro, `double' and `long double' values
   13706      should be aligned to an 8-byte boundary (see `-malign-double') or
   13707      suffer significant run time performance penalties.  On Pentium
   13708      III, the Streaming SIMD Extension (SSE) data type `__m128' may not
   13709      work properly if it is not 16-byte aligned.
   13710 
   13711      To ensure proper alignment of this values on the stack, the stack
   13712      boundary must be as aligned as that required by any value stored
   13713      on the stack.  Further, every function must be generated such that
   13714      it keeps the stack aligned.  Thus calling a function compiled with
   13715      a higher preferred stack boundary from a function compiled with a
   13716      lower preferred stack boundary most likely misaligns the stack.
   13717      It is recommended that libraries that use callbacks always use the
   13718      default setting.
   13719 
   13720      This extra alignment does consume extra stack space, and generally
   13721      increases code size.  Code that is sensitive to stack space usage,
   13722      such as embedded systems and operating system kernels, may want to
   13723      reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
   13724 
   13725 `-mmmx'
   13726 `-mno-mmx'
   13727 `-msse'
   13728 `-mno-sse'
   13729 `-msse2'
   13730 `-mno-sse2'
   13731 `-msse3'
   13732 `-mno-sse3'
   13733 `-mssse3'
   13734 `-mno-ssse3'
   13735 `-msse4.1'
   13736 `-mno-sse4.1'
   13737 `-msse4.2'
   13738 `-mno-sse4.2'
   13739 `-msse4'
   13740 `-mno-sse4'
   13741 `-mavx'
   13742 `-mno-avx'
   13743 `-mavx2'
   13744 `-mno-avx2'
   13745 `-maes'
   13746 `-mno-aes'
   13747 `-mpclmul'
   13748 `-mno-pclmul'
   13749 `-mfsgsbase'
   13750 `-mno-fsgsbase'
   13751 `-mrdrnd'
   13752 `-mno-rdrnd'
   13753 `-mf16c'
   13754 `-mno-f16c'
   13755 `-mfma'
   13756 `-mno-fma'
   13757 `-msse4a'
   13758 `-mno-sse4a'
   13759 `-mfma4'
   13760 `-mno-fma4'
   13761 `-mxop'
   13762 `-mno-xop'
   13763 `-mlwp'
   13764 `-mno-lwp'
   13765 `-m3dnow'
   13766 `-mno-3dnow'
   13767 `-mpopcnt'
   13768 `-mno-popcnt'
   13769 `-mabm'
   13770 `-mno-abm'
   13771 `-mbmi'
   13772 `-mbmi2'
   13773 `-mno-bmi'
   13774 `-mno-bmi2'
   13775 `-mlzcnt'
   13776 `-mno-lzcnt'
   13777 `-mrtm'
   13778 `-mtbm'
   13779 `-mno-tbm'
   13780      These switches enable or disable the use of instructions in the
   13781      MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
   13782      FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
   13783      LZCNT, RTM or 3DNow!  extended instruction sets.  These extensions
   13784      are also available as built-in functions: see *note X86 Built-in
   13785      Functions::, for details of the functions enabled and disabled by
   13786      these switches.
   13787 
   13788      To generate SSE/SSE2 instructions automatically from floating-point
   13789      code (as opposed to 387 instructions), see `-mfpmath=sse'.
   13790 
   13791      GCC depresses SSEx instructions when `-mavx' is used. Instead, it
   13792      generates new AVX instructions or AVX equivalence for all SSEx
   13793      instructions when needed.
   13794 
   13795      These options enable GCC to use these extended instructions in
   13796      generated code, even without `-mfpmath=sse'.  Applications that
   13797      perform run-time CPU detection must compile separate files for each
   13798      supported architecture, using the appropriate flags.  In
   13799      particular, the file containing the CPU detection code should be
   13800      compiled without these options.
   13801 
   13802 `-mcld'
   13803      This option instructs GCC to emit a `cld' instruction in the
   13804      prologue of functions that use string instructions.  String
   13805      instructions depend on the DF flag to select between autoincrement
   13806      or autodecrement mode.  While the ABI specifies the DF flag to be
   13807      cleared on function entry, some operating systems violate this
   13808      specification by not clearing the DF flag in their exception
   13809      dispatchers.  The exception handler can be invoked with the DF flag
   13810      set, which leads to wrong direction mode when string instructions
   13811      are used.  This option can be enabled by default on 32-bit x86
   13812      targets by configuring GCC with the `--enable-cld' configure
   13813      option.  Generation of `cld' instructions can be suppressed with
   13814      the `-mno-cld' compiler option in this case.
   13815 
   13816 `-mvzeroupper'
   13817      This option instructs GCC to emit a `vzeroupper' instruction
   13818      before a transfer of control flow out of the function to minimize
   13819      the AVX to SSE transition penalty as well as remove unnecessary
   13820      `zeroupper' intrinsics.
   13821 
   13822 `-mprefer-avx128'
   13823      This option instructs GCC to use 128-bit AVX instructions instead
   13824      of 256-bit AVX instructions in the auto-vectorizer.
   13825 
   13826 `-mcx16'
   13827      This option enables GCC to generate `CMPXCHG16B' instructions.
   13828      `CMPXCHG16B' allows for atomic operations on 128-bit double
   13829      quadword (or oword) data types.  This is useful for
   13830      high-resolution counters that can be updated by multiple
   13831      processors (or cores).  This instruction is generated as part of
   13832      atomic built-in functions: see *note __sync Builtins:: or *note
   13833      __atomic Builtins:: for details.
   13834 
   13835 `-msahf'
   13836      This option enables generation of `SAHF' instructions in 64-bit
   13837      code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
   13838      the introduction of Pentium 4 G1 step in December 2005, lacked the
   13839      `LAHF' and `SAHF' instructions which were supported by AMD64.
   13840      These are load and store instructions, respectively, for certain
   13841      status flags.  In 64-bit mode, the `SAHF' instruction is used to
   13842      optimize `fmod', `drem', and `remainder' built-in functions; see
   13843      *note Other Builtins:: for details.
   13844 
   13845 `-mmovbe'
   13846      This option enables use of the `movbe' instruction to implement
   13847      `__builtin_bswap32' and `__builtin_bswap64'.
   13848 
   13849 `-mcrc32'
   13850      This option enables built-in functions `__builtin_ia32_crc32qi',
   13851      `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and
   13852      `__builtin_ia32_crc32di' to generate the `crc32' machine
   13853      instruction.
   13854 
   13855 `-mrecip'
   13856      This option enables use of `RCPSS' and `RSQRTSS' instructions (and
   13857      their vectorized variants `RCPPS' and `RSQRTPS') with an
   13858      additional Newton-Raphson step to increase precision instead of
   13859      `DIVSS' and `SQRTSS' (and their vectorized variants) for
   13860      single-precision floating-point arguments.  These instructions are
   13861      generated only when `-funsafe-math-optimizations' is enabled
   13862      together with `-finite-math-only' and `-fno-trapping-math'.  Note
   13863      that while the throughput of the sequence is higher than the
   13864      throughput of the non-reciprocal instruction, the precision of the
   13865      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
   13866      equals 0.99999994).
   13867 
   13868      Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or
   13869      `RSQRTPS') already with `-ffast-math' (or the above option
   13870      combination), and doesn't need `-mrecip'.
   13871 
   13872      Also note that GCC emits the above sequence with additional
   13873      Newton-Raphson step for vectorized single-float division and
   13874      vectorized `sqrtf(X)' already with `-ffast-math' (or the above
   13875      option combination), and doesn't need `-mrecip'.
   13876 
   13877 `-mrecip=OPT'
   13878      This option controls which reciprocal estimate instructions may be
   13879      used.  OPT is a comma-separated list of options, which may be
   13880      preceded by a `!' to invert the option:
   13881 
   13882     `all'
   13883           Enable all estimate instructions.
   13884 
   13885     `default'
   13886           Enable the default instructions, equivalent to `-mrecip'.
   13887 
   13888     `none'
   13889           Disable all estimate instructions, equivalent to `-mno-recip'.
   13890 
   13891     `div'
   13892           Enable the approximation for scalar division.
   13893 
   13894     `vec-div'
   13895           Enable the approximation for vectorized division.
   13896 
   13897     `sqrt'
   13898           Enable the approximation for scalar square root.
   13899 
   13900     `vec-sqrt'
   13901           Enable the approximation for vectorized square root.
   13902 
   13903      So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal
   13904      approximations, except for square root.
   13905 
   13906 `-mveclibabi=TYPE'
   13907      Specifies the ABI type to use for vectorizing intrinsics using an
   13908      external library.  Supported values for TYPE are `svml' for the
   13909      Intel short vector math library and `acml' for the AMD math core
   13910      library.  To use this option, both `-ftree-vectorize' and
   13911      `-funsafe-math-optimizations' have to be enabled, and an SVML or
   13912      ACML ABI-compatible library must be specified at link time.
   13913 
   13914      GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102',
   13915      `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2',
   13916      `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2',
   13917      `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2',
   13918      `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4',
   13919      `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4',
   13920      `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4',
   13921      `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding
   13922      function type when `-mveclibabi=svml' is used, and `__vrd2_sin',
   13923      `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2',
   13924      `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf',
   13925      `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf'
   13926      for the corresponding function type when `-mveclibabi=acml' is
   13927      used.
   13928 
   13929 `-mabi=NAME'
   13930      Generate code for the specified calling convention.  Permissible
   13931      values are `sysv' for the ABI used on GNU/Linux and other systems,
   13932      and `ms' for the Microsoft ABI.  The default is to use the
   13933      Microsoft ABI when targeting Microsoft Windows and the SysV ABI on
   13934      all other systems.  You can control this behavior for a specific
   13935      function by using the function attribute `ms_abi'/`sysv_abi'.
   13936      *Note Function Attributes::.
   13937 
   13938 `-mtls-dialect=TYPE'
   13939      Generate code to access thread-local storage using the `gnu' or
   13940      `gnu2' conventions.  `gnu' is the conservative default; `gnu2' is
   13941      more efficient, but it may add compile- and run-time requirements
   13942      that cannot be satisfied on all systems.
   13943 
   13944 `-mpush-args'
   13945 `-mno-push-args'
   13946      Use PUSH operations to store outgoing parameters.  This method is
   13947      shorter and usually equally fast as method using SUB/MOV
   13948      operations and is enabled by default.  In some cases disabling it
   13949      may improve performance because of improved scheduling and reduced
   13950      dependencies.
   13951 
   13952 `-maccumulate-outgoing-args'
   13953      If enabled, the maximum amount of space required for outgoing
   13954      arguments is computed in the function prologue.  This is faster on
   13955      most modern CPUs because of reduced dependencies, improved
   13956      scheduling and reduced stack usage when the preferred stack
   13957      boundary is not equal to 2.  The drawback is a notable increase in
   13958      code size.  This switch implies `-mno-push-args'.
   13959 
   13960 `-mthreads'
   13961      Support thread-safe exception handling on MinGW.  Programs that
   13962      rely on thread-safe exception handling must compile and link all
   13963      code with the `-mthreads' option.  When compiling, `-mthreads'
   13964      defines `-D_MT'; when linking, it links in a special thread helper
   13965      library `-lmingwthrd' which cleans up per-thread
   13966      exception-handling data.
   13967 
   13968 `-mno-align-stringops'
   13969      Do not align the destination of inlined string operations.  This
   13970      switch reduces code size and improves performance in case the
   13971      destination is already aligned, but GCC doesn't know about it.
   13972 
   13973 `-minline-all-stringops'
   13974      By default GCC inlines string operations only when the destination
   13975      is known to be aligned to least a 4-byte boundary.  This enables
   13976      more inlining and increases code size, but may improve performance
   13977      of code that depends on fast `memcpy', `strlen', and `memset' for
   13978      short lengths.
   13979 
   13980 `-minline-stringops-dynamically'
   13981      For string operations of unknown size, use run-time checks with
   13982      inline code for small blocks and a library call for large blocks.
   13983 
   13984 `-mstringop-strategy=ALG'
   13985      Override the internal decision heuristic for the particular
   13986      algorithm to use for inlining string operations.  The allowed
   13987      values for ALG are:
   13988 
   13989     `rep_byte'
   13990     `rep_4byte'
   13991     `rep_8byte'
   13992           Expand using i386 `rep' prefix of the specified size.
   13993 
   13994     `byte_loop'
   13995     `loop'
   13996     `unrolled_loop'
   13997           Expand into an inline loop.
   13998 
   13999     `libcall'
   14000           Always use a library call.
   14001 
   14002 `-momit-leaf-frame-pointer'
   14003      Don't keep the frame pointer in a register for leaf functions.
   14004      This avoids the instructions to save, set up, and restore frame
   14005      pointers and makes an extra register available in leaf functions.
   14006      The option `-fomit-leaf-frame-pointer' removes the frame pointer
   14007      for leaf functions, which might make debugging harder.
   14008 
   14009 `-mtls-direct-seg-refs'
   14010 `-mno-tls-direct-seg-refs'
   14011      Controls whether TLS variables may be accessed with offsets from
   14012      the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
   14013      whether the thread base pointer must be added.  Whether or not this
   14014      is valid depends on the operating system, and whether it maps the
   14015      segment to cover the entire TLS area.
   14016 
   14017      For systems that use the GNU C Library, the default is on.
   14018 
   14019 `-msse2avx'
   14020 `-mno-sse2avx'
   14021      Specify that the assembler should encode SSE instructions with VEX
   14022      prefix.  The option `-mavx' turns this on by default.
   14023 
   14024 `-mfentry'
   14025 `-mno-fentry'
   14026      If profiling is active (`-pg'), put the profiling counter call
   14027      before the prologue.  Note: On x86 architectures the attribute
   14028      `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
   14029      `-pg'.
   14030 
   14031 `-m8bit-idiv'
   14032 `-mno-8bit-idiv'
   14033      On some processors, like Intel Atom, 8-bit unsigned integer divide
   14034      is much faster than 32-bit/64-bit integer divide.  This option
   14035      generates a run-time check.  If both dividend and divisor are
   14036      within range of 0 to 255, 8-bit unsigned integer divide is used
   14037      instead of 32-bit/64-bit integer divide.
   14038 
   14039 `-mavx256-split-unaligned-load'
   14040 `-mavx256-split-unaligned-store'
   14041      Split 32-byte AVX unaligned load and store.
   14042 
   14043 
   14044  These `-m' switches are supported in addition to the above on x86-64
   14045 processors in 64-bit environments.
   14046 
   14047 `-m32'
   14048 `-m64'
   14049 `-mx32'
   14050      Generate code for a 32-bit or 64-bit environment.  The `-m32'
   14051      option sets `int', `long', and pointer types to 32 bits, and
   14052      generates code that runs on any i386 system.
   14053 
   14054      The `-m64' option sets `int' to 32 bits and `long' and pointer
   14055      types to 64 bits, and generates code for the x86-64 architecture.
   14056      For Darwin only the `-m64' option also turns off the `-fno-pic'
   14057      and `-mdynamic-no-pic' options.
   14058 
   14059      The `-mx32' option sets `int', `long', and pointer types to 32
   14060      bits, and generates code for the x86-64 architecture.
   14061 
   14062 `-mno-red-zone'
   14063      Do not use a so-called "red zone" for x86-64 code.  The red zone
   14064      is mandated by the x86-64 ABI; it is a 128-byte area beyond the
   14065      location of the stack pointer that is not modified by signal or
   14066      interrupt handlers and therefore can be used for temporary data
   14067      without adjusting the stack pointer.  The flag `-mno-red-zone'
   14068      disables this red zone.
   14069 
   14070 `-mcmodel=small'
   14071      Generate code for the small code model: the program and its
   14072      symbols must be linked in the lower 2 GB of the address space.
   14073      Pointers are 64 bits.  Programs can be statically or dynamically
   14074      linked.  This is the default code model.
   14075 
   14076 `-mcmodel=kernel'
   14077      Generate code for the kernel code model.  The kernel runs in the
   14078      negative 2 GB of the address space.  This model has to be used for
   14079      Linux kernel code.
   14080 
   14081 `-mcmodel=medium'
   14082      Generate code for the medium model: the program is linked in the
   14083      lower 2 GB of the address space.  Small symbols are also placed
   14084      there.  Symbols with sizes larger than `-mlarge-data-threshold'
   14085      are put into large data or BSS sections and can be located above
   14086      2GB.  Programs can be statically or dynamically linked.
   14087 
   14088 `-mcmodel=large'
   14089      Generate code for the large model.  This model makes no assumptions
   14090      about addresses and sizes of sections.
   14091 
   14092 `-maddress-mode=long'
   14093      Generate code for long address mode.  This is only supported for
   14094      64-bit and x32 environments.  It is the default address mode for
   14095      64-bit environments.
   14096 
   14097 `-maddress-mode=short'
   14098      Generate code for short address mode.  This is only supported for
   14099      32-bit and x32 environments.  It is the default address mode for
   14100      32-bit and x32 environments.
   14101 
   14102 
   14103 File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
   14104 
   14105 3.17.17 i386 and x86-64 Windows Options
   14106 ---------------------------------------
   14107 
   14108 These additional options are available for Microsoft Windows targets:
   14109 
   14110 `-mconsole'
   14111      This option specifies that a console application is to be
   14112      generated, by instructing the linker to set the PE header
   14113      subsystem type required for console applications.  This option is
   14114      available for Cygwin and MinGW targets and is enabled by default
   14115      on those targets.
   14116 
   14117 `-mdll'
   14118      This option is available for Cygwin and MinGW targets.  It
   14119      specifies that a DLL--a dynamic link library--is to be generated,
   14120      enabling the selection of the required runtime startup object and
   14121      entry point.
   14122 
   14123 `-mnop-fun-dllimport'
   14124      This option is available for Cygwin and MinGW targets.  It
   14125      specifies that the `dllimport' attribute should be ignored.
   14126 
   14127 `-mthread'
   14128      This option is available for MinGW targets. It specifies that
   14129      MinGW-specific thread support is to be used.
   14130 
   14131 `-municode'
   14132      This option is available for MinGW-w64 targets.  It causes the
   14133      `UNICODE' preprocessor macro to be predefined, and chooses
   14134      Unicode-capable runtime startup code.
   14135 
   14136 `-mwin32'
   14137      This option is available for Cygwin and MinGW targets.  It
   14138      specifies that the typical Microsoft Windows predefined macros are
   14139      to be set in the pre-processor, but does not influence the choice
   14140      of runtime library/startup code.
   14141 
   14142 `-mwindows'
   14143      This option is available for Cygwin and MinGW targets.  It
   14144      specifies that a GUI application is to be generated by instructing
   14145      the linker to set the PE header subsystem type appropriately.
   14146 
   14147 `-fno-set-stack-executable'
   14148      This option is available for MinGW targets. It specifies that the
   14149      executable flag for the stack used by nested functions isn't set.
   14150      This is necessary for binaries running in kernel mode of Microsoft
   14151      Windows, as there the User32 API, which is used to set executable
   14152      privileges, isn't available.
   14153 
   14154 `-fwritable-relocated-rdata'
   14155      This option is available for MinGW and Cygwin targets.  It
   14156      specifies that relocated-data in read-only section is put into
   14157      .data section.  This is a necessary for older runtimes not
   14158      supporting modification of .rdata sections for pseudo-relocation.
   14159 
   14160 `-mpe-aligned-commons'
   14161      This option is available for Cygwin and MinGW targets.  It
   14162      specifies that the GNU extension to the PE file format that
   14163      permits the correct alignment of COMMON variables should be used
   14164      when generating code.  It is enabled by default if GCC detects
   14165      that the target assembler found during configuration supports the
   14166      feature.
   14167 
   14168  See also under *note i386 and x86-64 Options:: for standard options.
   14169 
   14170 
   14171 File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
   14172 
   14173 3.17.18 IA-64 Options
   14174 ---------------------
   14175 
   14176 These are the `-m' options defined for the Intel IA-64 architecture.
   14177 
   14178 `-mbig-endian'
   14179      Generate code for a big-endian target.  This is the default for
   14180      HP-UX.
   14181 
   14182 `-mlittle-endian'
   14183      Generate code for a little-endian target.  This is the default for
   14184      AIX5 and GNU/Linux.
   14185 
   14186 `-mgnu-as'
   14187 `-mno-gnu-as'
   14188      Generate (or don't) code for the GNU assembler.  This is the
   14189      default.
   14190 
   14191 `-mgnu-ld'
   14192 `-mno-gnu-ld'
   14193      Generate (or don't) code for the GNU linker.  This is the default.
   14194 
   14195 `-mno-pic'
   14196      Generate code that does not use a global pointer register.  The
   14197      result is not position independent code, and violates the IA-64
   14198      ABI.
   14199 
   14200 `-mvolatile-asm-stop'
   14201 `-mno-volatile-asm-stop'
   14202      Generate (or don't) a stop bit immediately before and after
   14203      volatile asm statements.
   14204 
   14205 `-mregister-names'
   14206 `-mno-register-names'
   14207      Generate (or don't) `in', `loc', and `out' register names for the
   14208      stacked registers.  This may make assembler output more readable.
   14209 
   14210 `-mno-sdata'
   14211 `-msdata'
   14212      Disable (or enable) optimizations that use the small data section.
   14213      This may be useful for working around optimizer bugs.
   14214 
   14215 `-mconstant-gp'
   14216      Generate code that uses a single constant global pointer value.
   14217      This is useful when compiling kernel code.
   14218 
   14219 `-mauto-pic'
   14220      Generate code that is self-relocatable.  This implies
   14221      `-mconstant-gp'.  This is useful when compiling firmware code.
   14222 
   14223 `-minline-float-divide-min-latency'
   14224      Generate code for inline divides of floating-point values using
   14225      the minimum latency algorithm.
   14226 
   14227 `-minline-float-divide-max-throughput'
   14228      Generate code for inline divides of floating-point values using
   14229      the maximum throughput algorithm.
   14230 
   14231 `-mno-inline-float-divide'
   14232      Do not generate inline code for divides of floating-point values.
   14233 
   14234 `-minline-int-divide-min-latency'
   14235      Generate code for inline divides of integer values using the
   14236      minimum latency algorithm.
   14237 
   14238 `-minline-int-divide-max-throughput'
   14239      Generate code for inline divides of integer values using the
   14240      maximum throughput algorithm.
   14241 
   14242 `-mno-inline-int-divide'
   14243      Do not generate inline code for divides of integer values.
   14244 
   14245 `-minline-sqrt-min-latency'
   14246      Generate code for inline square roots using the minimum latency
   14247      algorithm.
   14248 
   14249 `-minline-sqrt-max-throughput'
   14250      Generate code for inline square roots using the maximum throughput
   14251      algorithm.
   14252 
   14253 `-mno-inline-sqrt'
   14254      Do not generate inline code for `sqrt'.
   14255 
   14256 `-mfused-madd'
   14257 `-mno-fused-madd'
   14258      Do (don't) generate code that uses the fused multiply/add or
   14259      multiply/subtract instructions.  The default is to use these
   14260      instructions.
   14261 
   14262 `-mno-dwarf2-asm'
   14263 `-mdwarf2-asm'
   14264      Don't (or do) generate assembler code for the DWARF 2 line number
   14265      debugging info.  This may be useful when not using the GNU
   14266      assembler.
   14267 
   14268 `-mearly-stop-bits'
   14269 `-mno-early-stop-bits'
   14270      Allow stop bits to be placed earlier than immediately preceding the
   14271      instruction that triggered the stop bit.  This can improve
   14272      instruction scheduling, but does not always do so.
   14273 
   14274 `-mfixed-range=REGISTER-RANGE'
   14275      Generate code treating the given register range as fixed registers.
   14276      A fixed register is one that the register allocator cannot use.
   14277      This is useful when compiling kernel code.  A register range is
   14278      specified as two registers separated by a dash.  Multiple register
   14279      ranges can be specified separated by a comma.
   14280 
   14281 `-mtls-size=TLS-SIZE'
   14282      Specify bit size of immediate TLS offsets.  Valid values are 14,
   14283      22, and 64.
   14284 
   14285 `-mtune=CPU-TYPE'
   14286      Tune the instruction scheduling for a particular CPU, Valid values
   14287      are `itanium', `itanium1', `merced', `itanium2', and `mckinley'.
   14288 
   14289 `-milp32'
   14290 `-mlp64'
   14291      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   14292      environment sets int, long and pointer to 32 bits.  The 64-bit
   14293      environment sets int to 32 bits and long and pointer to 64 bits.
   14294      These are HP-UX specific flags.
   14295 
   14296 `-mno-sched-br-data-spec'
   14297 `-msched-br-data-spec'
   14298      (Dis/En)able data speculative scheduling before reload.  This
   14299      results in generation of `ld.a' instructions and the corresponding
   14300      check instructions (`ld.c' / `chk.a').  The default is 'disable'.
   14301 
   14302 `-msched-ar-data-spec'
   14303 `-mno-sched-ar-data-spec'
   14304      (En/Dis)able data speculative scheduling after reload.  This
   14305      results in generation of `ld.a' instructions and the corresponding
   14306      check instructions (`ld.c' / `chk.a').  The default is 'enable'.
   14307 
   14308 `-mno-sched-control-spec'
   14309 `-msched-control-spec'
   14310      (Dis/En)able control speculative scheduling.  This feature is
   14311      available only during region scheduling (i.e. before reload).
   14312      This results in generation of the `ld.s' instructions and the
   14313      corresponding check instructions `chk.s'.  The default is
   14314      'disable'.
   14315 
   14316 `-msched-br-in-data-spec'
   14317 `-mno-sched-br-in-data-spec'
   14318      (En/Dis)able speculative scheduling of the instructions that are
   14319      dependent on the data speculative loads before reload.  This is
   14320      effective only with `-msched-br-data-spec' enabled.  The default
   14321      is 'enable'.
   14322 
   14323 `-msched-ar-in-data-spec'
   14324 `-mno-sched-ar-in-data-spec'
   14325      (En/Dis)able speculative scheduling of the instructions that are
   14326      dependent on the data speculative loads after reload.  This is
   14327      effective only with `-msched-ar-data-spec' enabled.  The default
   14328      is 'enable'.
   14329 
   14330 `-msched-in-control-spec'
   14331 `-mno-sched-in-control-spec'
   14332      (En/Dis)able speculative scheduling of the instructions that are
   14333      dependent on the control speculative loads.  This is effective
   14334      only with `-msched-control-spec' enabled.  The default is 'enable'.
   14335 
   14336 `-mno-sched-prefer-non-data-spec-insns'
   14337 `-msched-prefer-non-data-spec-insns'
   14338      If enabled, data-speculative instructions are chosen for schedule
   14339      only if there are no other choices at the moment.  This makes the
   14340      use of the data speculation much more conservative.  The default
   14341      is 'disable'.
   14342 
   14343 `-mno-sched-prefer-non-control-spec-insns'
   14344 `-msched-prefer-non-control-spec-insns'
   14345      If enabled, control-speculative instructions are chosen for
   14346      schedule only if there are no other choices at the moment.  This
   14347      makes the use of the control speculation much more conservative.
   14348      The default is 'disable'.
   14349 
   14350 `-mno-sched-count-spec-in-critical-path'
   14351 `-msched-count-spec-in-critical-path'
   14352      If enabled, speculative dependencies are considered during
   14353      computation of the instructions priorities.  This makes the use of
   14354      the speculation a bit more conservative.  The default is 'disable'.
   14355 
   14356 `-msched-spec-ldc'
   14357      Use a simple data speculation check.  This option is on by default.
   14358 
   14359 `-msched-control-spec-ldc'
   14360      Use a simple check for control speculation.  This option is on by
   14361      default.
   14362 
   14363 `-msched-stop-bits-after-every-cycle'
   14364      Place a stop bit after every cycle when scheduling.  This option
   14365      is on by default.
   14366 
   14367 `-msched-fp-mem-deps-zero-cost'
   14368      Assume that floating-point stores and loads are not likely to
   14369      cause a conflict when placed into the same instruction group.
   14370      This option is disabled by default.
   14371 
   14372 `-msel-sched-dont-check-control-spec'
   14373      Generate checks for control speculation in selective scheduling.
   14374      This flag is disabled by default.
   14375 
   14376 `-msched-max-memory-insns=MAX-INSNS'
   14377      Limit on the number of memory insns per instruction group, giving
   14378      lower priority to subsequent memory insns attempting to schedule
   14379      in the same instruction group. Frequently useful to prevent cache
   14380      bank conflicts.  The default value is 1.
   14381 
   14382 `-msched-max-memory-insns-hard-limit'
   14383      Makes the limit specified by `msched-max-memory-insns' a hard
   14384      limit, disallowing more than that number in an instruction group.
   14385      Otherwise, the limit is "soft", meaning that non-memory operations
   14386      are preferred when the limit is reached, but memory operations may
   14387      still be scheduled.
   14388 
   14389 
   14390 
   14391 File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
   14392 
   14393 3.17.19 LM32 Options
   14394 --------------------
   14395 
   14396 These `-m' options are defined for the LatticeMico32 architecture:
   14397 
   14398 `-mbarrel-shift-enabled'
   14399      Enable barrel-shift instructions.
   14400 
   14401 `-mdivide-enabled'
   14402      Enable divide and modulus instructions.
   14403 
   14404 `-mmultiply-enabled'
   14405      Enable multiply instructions.
   14406 
   14407 `-msign-extend-enabled'
   14408      Enable sign extend instructions.
   14409 
   14410 `-muser-enabled'
   14411      Enable user-defined instructions.
   14412 
   14413 
   14414 
   14415 File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
   14416 
   14417 3.17.20 M32C Options
   14418 --------------------
   14419 
   14420 `-mcpu=NAME'
   14421      Select the CPU for which code is generated.  NAME may be one of
   14422      `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
   14423      series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
   14424      series.
   14425 
   14426 `-msim'
   14427      Specifies that the program will be run on the simulator.  This
   14428      causes an alternate runtime library to be linked in which
   14429      supports, for example, file I/O.  You must not use this option
   14430      when generating programs that will run on real hardware; you must
   14431      provide your own runtime library for whatever I/O functions are
   14432      needed.
   14433 
   14434 `-memregs=NUMBER'
   14435      Specifies the number of memory-based pseudo-registers GCC uses
   14436      during code generation.  These pseudo-registers are used like real
   14437      registers, so there is a tradeoff between GCC's ability to fit the
   14438      code into available registers, and the performance penalty of using
   14439      memory instead of registers.  Note that all modules in a program
   14440      must be compiled with the same value for this option.  Because of
   14441      that, you must not use this option with GCC's default runtime
   14442      libraries.
   14443 
   14444 
   14445 
   14446 File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
   14447 
   14448 3.17.21 M32R/D Options
   14449 ----------------------
   14450 
   14451 These `-m' options are defined for Renesas M32R/D architectures:
   14452 
   14453 `-m32r2'
   14454      Generate code for the M32R/2.
   14455 
   14456 `-m32rx'
   14457      Generate code for the M32R/X.
   14458 
   14459 `-m32r'
   14460      Generate code for the M32R.  This is the default.
   14461 
   14462 `-mmodel=small'
   14463      Assume all objects live in the lower 16MB of memory (so that their
   14464      addresses can be loaded with the `ld24' instruction), and assume
   14465      all subroutines are reachable with the `bl' instruction.  This is
   14466      the default.
   14467 
   14468      The addressability of a particular object can be set with the
   14469      `model' attribute.
   14470 
   14471 `-mmodel=medium'
   14472      Assume objects may be anywhere in the 32-bit address space (the
   14473      compiler generates `seth/add3' instructions to load their
   14474      addresses), and assume all subroutines are reachable with the `bl'
   14475      instruction.
   14476 
   14477 `-mmodel=large'
   14478      Assume objects may be anywhere in the 32-bit address space (the
   14479      compiler generates `seth/add3' instructions to load their
   14480      addresses), and assume subroutines may not be reachable with the
   14481      `bl' instruction (the compiler generates the much slower
   14482      `seth/add3/jl' instruction sequence).
   14483 
   14484 `-msdata=none'
   14485      Disable use of the small data area.  Variables are put into one of
   14486      `.data', `.bss', or `.rodata' (unless the `section' attribute has
   14487      been specified).  This is the default.
   14488 
   14489      The small data area consists of sections `.sdata' and `.sbss'.
   14490      Objects may be explicitly put in the small data area with the
   14491      `section' attribute using one of these sections.
   14492 
   14493 `-msdata=sdata'
   14494      Put small global and static data in the small data area, but do not
   14495      generate special code to reference them.
   14496 
   14497 `-msdata=use'
   14498      Put small global and static data in the small data area, and
   14499      generate special instructions to reference them.
   14500 
   14501 `-G NUM'
   14502      Put global and static objects less than or equal to NUM bytes into
   14503      the small data or BSS sections instead of the normal data or BSS
   14504      sections.  The default value of NUM is 8.  The `-msdata' option
   14505      must be set to one of `sdata' or `use' for this option to have any
   14506      effect.
   14507 
   14508      All modules should be compiled with the same `-G NUM' value.
   14509      Compiling with different values of NUM may or may not work; if it
   14510      doesn't the linker gives an error message--incorrect code is not
   14511      generated.
   14512 
   14513 `-mdebug'
   14514      Makes the M32R-specific code in the compiler display some
   14515      statistics that might help in debugging programs.
   14516 
   14517 `-malign-loops'
   14518      Align all loops to a 32-byte boundary.
   14519 
   14520 `-mno-align-loops'
   14521      Do not enforce a 32-byte alignment for loops.  This is the default.
   14522 
   14523 `-missue-rate=NUMBER'
   14524      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
   14525 
   14526 `-mbranch-cost=NUMBER'
   14527      NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
   14528      over conditional code, if it is 2, then the opposite applies.
   14529 
   14530 `-mflush-trap=NUMBER'
   14531      Specifies the trap number to use to flush the cache.  The default
   14532      is 12.  Valid numbers are between 0 and 15 inclusive.
   14533 
   14534 `-mno-flush-trap'
   14535      Specifies that the cache cannot be flushed by using a trap.
   14536 
   14537 `-mflush-func=NAME'
   14538      Specifies the name of the operating system function to call to
   14539      flush the cache.  The default is __flush_cache_, but a function
   14540      call is only used if a trap is not available.
   14541 
   14542 `-mno-flush-func'
   14543      Indicates that there is no OS function for flushing the cache.
   14544 
   14545 
   14546 
   14547 File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
   14548 
   14549 3.17.22 M680x0 Options
   14550 ----------------------
   14551 
   14552 These are the `-m' options defined for M680x0 and ColdFire processors.
   14553 The default settings depend on which architecture was selected when the
   14554 compiler was configured; the defaults for the most common choices are
   14555 given below.
   14556 
   14557 `-march=ARCH'
   14558      Generate code for a specific M680x0 or ColdFire instruction set
   14559      architecture.  Permissible values of ARCH for M680x0 architectures
   14560      are: `68000', `68010', `68020', `68030', `68040', `68060' and
   14561      `cpu32'.  ColdFire architectures are selected according to
   14562      Freescale's ISA classification and the permissible values are:
   14563      `isaa', `isaaplus', `isab' and `isac'.
   14564 
   14565      GCC defines a macro `__mcfARCH__' whenever it is generating code
   14566      for a ColdFire target.  The ARCH in this macro is one of the
   14567      `-march' arguments given above.
   14568 
   14569      When used together, `-march' and `-mtune' select code that runs on
   14570      a family of similar processors but that is optimized for a
   14571      particular microarchitecture.
   14572 
   14573 `-mcpu=CPU'
   14574      Generate code for a specific M680x0 or ColdFire processor.  The
   14575      M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
   14576      `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
   14577      given by the table below, which also classifies the CPUs into
   14578      families:
   14579 
   14580      *Family*      *`-mcpu' arguments*
   14581      `51'          `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
   14582                    `51jm' `51mm' `51qe' `51qm'
   14583      `5206'        `5202' `5204' `5206'
   14584      `5206e'       `5206e'
   14585      `5208'        `5207' `5208'
   14586      `5211a'       `5210a' `5211a'
   14587      `5213'        `5211' `5212' `5213'
   14588      `5216'        `5214' `5216'
   14589      `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
   14590      `5225'        `5224' `5225'
   14591      `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
   14592      `5235'        `5232' `5233' `5234' `5235' `523x'
   14593      `5249'        `5249'
   14594      `5250'        `5250'
   14595      `5271'        `5270' `5271'
   14596      `5272'        `5272'
   14597      `5275'        `5274' `5275'
   14598      `5282'        `5280' `5281' `5282' `528x'
   14599      `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
   14600                    `53017'
   14601      `5307'        `5307'
   14602      `5329'        `5327' `5328' `5329' `532x'
   14603      `5373'        `5372' `5373' `537x'
   14604      `5407'        `5407'
   14605      `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
   14606                    `5480' `5481' `5482' `5483' `5484' `5485'
   14607 
   14608      `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
   14609      CPU.  Other combinations of `-mcpu' and `-march' are rejected.
   14610 
   14611      GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
   14612      selected.  It also defines `__mcf_family_FAMILY', where the value
   14613      of FAMILY is given by the table above.
   14614 
   14615 `-mtune=TUNE'
   14616      Tune the code for a particular microarchitecture within the
   14617      constraints set by `-march' and `-mcpu'.  The M680x0
   14618      microarchitectures are: `68000', `68010', `68020', `68030',
   14619      `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
   14620      are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
   14621 
   14622      You can also use `-mtune=68020-40' for code that needs to run
   14623      relatively well on 68020, 68030 and 68040 targets.
   14624      `-mtune=68020-60' is similar but includes 68060 targets as well.
   14625      These two options select the same tuning decisions as `-m68020-40'
   14626      and `-m68020-60' respectively.
   14627 
   14628      GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for
   14629      680x0 architecture ARCH.  It also defines `mcARCH' unless either
   14630      `-ansi' or a non-GNU `-std' option is used.  If GCC is tuning for
   14631      a range of architectures, as selected by `-mtune=68020-40' or
   14632      `-mtune=68020-60', it defines the macros for every architecture in
   14633      the range.
   14634 
   14635      GCC also defines the macro `__mUARCH__' when tuning for ColdFire
   14636      microarchitecture UARCH, where UARCH is one of the arguments given
   14637      above.
   14638 
   14639 `-m68000'
   14640 `-mc68000'
   14641      Generate output for a 68000.  This is the default when the
   14642      compiler is configured for 68000-based systems.  It is equivalent
   14643      to `-march=68000'.
   14644 
   14645      Use this option for microcontrollers with a 68000 or EC000 core,
   14646      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
   14647 
   14648 `-m68010'
   14649      Generate output for a 68010.  This is the default when the
   14650      compiler is configured for 68010-based systems.  It is equivalent
   14651      to `-march=68010'.
   14652 
   14653 `-m68020'
   14654 `-mc68020'
   14655      Generate output for a 68020.  This is the default when the
   14656      compiler is configured for 68020-based systems.  It is equivalent
   14657      to `-march=68020'.
   14658 
   14659 `-m68030'
   14660      Generate output for a 68030.  This is the default when the
   14661      compiler is configured for 68030-based systems.  It is equivalent
   14662      to `-march=68030'.
   14663 
   14664 `-m68040'
   14665      Generate output for a 68040.  This is the default when the
   14666      compiler is configured for 68040-based systems.  It is equivalent
   14667      to `-march=68040'.
   14668 
   14669      This option inhibits the use of 68881/68882 instructions that have
   14670      to be emulated by software on the 68040.  Use this option if your
   14671      68040 does not have code to emulate those instructions.
   14672 
   14673 `-m68060'
   14674      Generate output for a 68060.  This is the default when the
   14675      compiler is configured for 68060-based systems.  It is equivalent
   14676      to `-march=68060'.
   14677 
   14678      This option inhibits the use of 68020 and 68881/68882 instructions
   14679      that have to be emulated by software on the 68060.  Use this
   14680      option if your 68060 does not have code to emulate those
   14681      instructions.
   14682 
   14683 `-mcpu32'
   14684      Generate output for a CPU32.  This is the default when the
   14685      compiler is configured for CPU32-based systems.  It is equivalent
   14686      to `-march=cpu32'.
   14687 
   14688      Use this option for microcontrollers with a CPU32 or CPU32+ core,
   14689      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
   14690      68341, 68349 and 68360.
   14691 
   14692 `-m5200'
   14693      Generate output for a 520X ColdFire CPU.  This is the default when
   14694      the compiler is configured for 520X-based systems.  It is
   14695      equivalent to `-mcpu=5206', and is now deprecated in favor of that
   14696      option.
   14697 
   14698      Use this option for microcontroller with a 5200 core, including
   14699      the MCF5202, MCF5203, MCF5204 and MCF5206.
   14700 
   14701 `-m5206e'
   14702      Generate output for a 5206e ColdFire CPU.  The option is now
   14703      deprecated in favor of the equivalent `-mcpu=5206e'.
   14704 
   14705 `-m528x'
   14706      Generate output for a member of the ColdFire 528X family.  The
   14707      option is now deprecated in favor of the equivalent `-mcpu=528x'.
   14708 
   14709 `-m5307'
   14710      Generate output for a ColdFire 5307 CPU.  The option is now
   14711      deprecated in favor of the equivalent `-mcpu=5307'.
   14712 
   14713 `-m5407'
   14714      Generate output for a ColdFire 5407 CPU.  The option is now
   14715      deprecated in favor of the equivalent `-mcpu=5407'.
   14716 
   14717 `-mcfv4e'
   14718      Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
   14719      This includes use of hardware floating-point instructions.  The
   14720      option is equivalent to `-mcpu=547x', and is now deprecated in
   14721      favor of that option.
   14722 
   14723 `-m68020-40'
   14724      Generate output for a 68040, without using any of the new
   14725      instructions.  This results in code that can run relatively
   14726      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   14727      generated code does use the 68881 instructions that are emulated
   14728      on the 68040.
   14729 
   14730      The option is equivalent to `-march=68020' `-mtune=68020-40'.
   14731 
   14732 `-m68020-60'
   14733      Generate output for a 68060, without using any of the new
   14734      instructions.  This results in code that can run relatively
   14735      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   14736      generated code does use the 68881 instructions that are emulated
   14737      on the 68060.
   14738 
   14739      The option is equivalent to `-march=68020' `-mtune=68020-60'.
   14740 
   14741 `-mhard-float'
   14742 `-m68881'
   14743      Generate floating-point instructions.  This is the default for
   14744      68020 and above, and for ColdFire devices that have an FPU.  It
   14745      defines the macro `__HAVE_68881__' on M680x0 targets and
   14746      `__mcffpu__' on ColdFire targets.
   14747 
   14748 `-msoft-float'
   14749      Do not generate floating-point instructions; use library calls
   14750      instead.  This is the default for 68000, 68010, and 68832 targets.
   14751      It is also the default for ColdFire devices that have no FPU.
   14752 
   14753 `-mdiv'
   14754 `-mno-div'
   14755      Generate (do not generate) ColdFire hardware divide and remainder
   14756      instructions.  If `-march' is used without `-mcpu', the default is
   14757      "on" for ColdFire architectures and "off" for M680x0
   14758      architectures.  Otherwise, the default is taken from the target CPU
   14759      (either the default CPU, or the one specified by `-mcpu').  For
   14760      example, the default is "off" for `-mcpu=5206' and "on" for
   14761      `-mcpu=5206e'.
   14762 
   14763      GCC defines the macro `__mcfhwdiv__' when this option is enabled.
   14764 
   14765 `-mshort'
   14766      Consider type `int' to be 16 bits wide, like `short int'.
   14767      Additionally, parameters passed on the stack are also aligned to a
   14768      16-bit boundary even on targets whose API mandates promotion to
   14769      32-bit.
   14770 
   14771 `-mno-short'
   14772      Do not consider type `int' to be 16 bits wide.  This is the
   14773      default.
   14774 
   14775 `-mnobitfield'
   14776 `-mno-bitfield'
   14777      Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
   14778      and `-m5200' options imply `-mnobitfield'.
   14779 
   14780 `-mbitfield'
   14781      Do use the bit-field instructions.  The `-m68020' option implies
   14782      `-mbitfield'.  This is the default if you use a configuration
   14783      designed for a 68020.
   14784 
   14785 `-mrtd'
   14786      Use a different function-calling convention, in which functions
   14787      that take a fixed number of arguments return with the `rtd'
   14788      instruction, which pops their arguments while returning.  This
   14789      saves one instruction in the caller since there is no need to pop
   14790      the arguments there.
   14791 
   14792      This calling convention is incompatible with the one normally used
   14793      on Unix, so you cannot use it if you need to call libraries
   14794      compiled with the Unix compiler.
   14795 
   14796      Also, you must provide function prototypes for all functions that
   14797      take variable numbers of arguments (including `printf'); otherwise
   14798      incorrect code is generated for calls to those functions.
   14799 
   14800      In addition, seriously incorrect code results if you call a
   14801      function with too many arguments.  (Normally, extra arguments are
   14802      harmlessly ignored.)
   14803 
   14804      The `rtd' instruction is supported by the 68010, 68020, 68030,
   14805      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
   14806 
   14807 `-mno-rtd'
   14808      Do not use the calling conventions selected by `-mrtd'.  This is
   14809      the default.
   14810 
   14811 `-malign-int'
   14812 `-mno-align-int'
   14813      Control whether GCC aligns `int', `long', `long long', `float',
   14814      `double', and `long double' variables on a 32-bit boundary
   14815      (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
   14816      variables on 32-bit boundaries produces code that runs somewhat
   14817      faster on processors with 32-bit busses at the expense of more
   14818      memory.
   14819 
   14820      *Warning:* if you use the `-malign-int' switch, GCC aligns
   14821      structures containing the above types differently than most
   14822      published application binary interface specifications for the m68k.
   14823 
   14824 `-mpcrel'
   14825      Use the pc-relative addressing mode of the 68000 directly, instead
   14826      of using a global offset table.  At present, this option implies
   14827      `-fpic', allowing at most a 16-bit offset for pc-relative
   14828      addressing.  `-fPIC' is not presently supported with `-mpcrel',
   14829      though this could be supported for 68020 and higher processors.
   14830 
   14831 `-mno-strict-align'
   14832 `-mstrict-align'
   14833      Do not (do) assume that unaligned memory references are handled by
   14834      the system.
   14835 
   14836 `-msep-data'
   14837      Generate code that allows the data segment to be located in a
   14838      different area of memory from the text segment.  This allows for
   14839      execute-in-place in an environment without virtual memory
   14840      management.  This option implies `-fPIC'.
   14841 
   14842 `-mno-sep-data'
   14843      Generate code that assumes that the data segment follows the text
   14844      segment.  This is the default.
   14845 
   14846 `-mid-shared-library'
   14847      Generate code that supports shared libraries via the library ID
   14848      method.  This allows for execute-in-place and shared libraries in
   14849      an environment without virtual memory management.  This option
   14850      implies `-fPIC'.
   14851 
   14852 `-mno-id-shared-library'
   14853      Generate code that doesn't assume ID-based shared libraries are
   14854      being used.  This is the default.
   14855 
   14856 `-mshared-library-id=n'
   14857      Specifies the identification number of the ID-based shared library
   14858      being compiled.  Specifying a value of 0 generates more compact
   14859      code; specifying other values forces the allocation of that number
   14860      to the current library, but is no more space- or time-efficient
   14861      than omitting this option.
   14862 
   14863 `-mxgot'
   14864 `-mno-xgot'
   14865      When generating position-independent code for ColdFire, generate
   14866      code that works if the GOT has more than 8192 entries.  This code
   14867      is larger and slower than code generated without this option.  On
   14868      M680x0 processors, this option is not needed; `-fPIC' suffices.
   14869 
   14870      GCC normally uses a single instruction to load values from the GOT.
   14871      While this is relatively efficient, it only works if the GOT is
   14872      smaller than about 64k.  Anything larger causes the linker to
   14873      report an error such as:
   14874 
   14875           relocation truncated to fit: R_68K_GOT16O foobar
   14876 
   14877      If this happens, you should recompile your code with `-mxgot'.  It
   14878      should then work with very large GOTs.  However, code generated
   14879      with `-mxgot' is less efficient, since it takes 4 instructions to
   14880      fetch the value of a global symbol.
   14881 
   14882      Note that some linkers, including newer versions of the GNU linker,
   14883      can create multiple GOTs and sort GOT entries.  If you have such a
   14884      linker, you should only need to use `-mxgot' when compiling a
   14885      single object file that accesses more than 8192 GOT entries.  Very
   14886      few do.
   14887 
   14888      These options have no effect unless GCC is generating
   14889      position-independent code.
   14890 
   14891 
   14892 
   14893 File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
   14894 
   14895 3.17.23 MCore Options
   14896 ---------------------
   14897 
   14898 These are the `-m' options defined for the Motorola M*Core processors.
   14899 
   14900 `-mhardlit'
   14901 `-mno-hardlit'
   14902      Inline constants into the code stream if it can be done in two
   14903      instructions or less.
   14904 
   14905 `-mdiv'
   14906 `-mno-div'
   14907      Use the divide instruction.  (Enabled by default).
   14908 
   14909 `-mrelax-immediate'
   14910 `-mno-relax-immediate'
   14911      Allow arbitrary-sized immediates in bit operations.
   14912 
   14913 `-mwide-bitfields'
   14914 `-mno-wide-bitfields'
   14915      Always treat bit-fields as `int'-sized.
   14916 
   14917 `-m4byte-functions'
   14918 `-mno-4byte-functions'
   14919      Force all functions to be aligned to a 4-byte boundary.
   14920 
   14921 `-mcallgraph-data'
   14922 `-mno-callgraph-data'
   14923      Emit callgraph information.
   14924 
   14925 `-mslow-bytes'
   14926 `-mno-slow-bytes'
   14927      Prefer word access when reading byte quantities.
   14928 
   14929 `-mlittle-endian'
   14930 `-mbig-endian'
   14931      Generate code for a little-endian target.
   14932 
   14933 `-m210'
   14934 `-m340'
   14935      Generate code for the 210 processor.
   14936 
   14937 `-mno-lsim'
   14938      Assume that runtime support has been provided and so omit the
   14939      simulator library (`libsim.a)' from the linker command line.
   14940 
   14941 `-mstack-increment=SIZE'
   14942      Set the maximum amount for a single stack increment operation.
   14943      Large values can increase the speed of programs that contain
   14944      functions that need a large amount of stack space, but they can
   14945      also trigger a segmentation fault if the stack is extended too
   14946      much.  The default value is 0x1000.
   14947 
   14948 
   14949 
   14950 File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
   14951 
   14952 3.17.24 MeP Options
   14953 -------------------
   14954 
   14955 `-mabsdiff'
   14956      Enables the `abs' instruction, which is the absolute difference
   14957      between two registers.
   14958 
   14959 `-mall-opts'
   14960      Enables all the optional instructions--average, multiply, divide,
   14961      bit operations, leading zero, absolute difference, min/max, clip,
   14962      and saturation.
   14963 
   14964 `-maverage'
   14965      Enables the `ave' instruction, which computes the average of two
   14966      registers.
   14967 
   14968 `-mbased=N'
   14969      Variables of size N bytes or smaller are placed in the `.based'
   14970      section by default.  Based variables use the `$tp' register as a
   14971      base register, and there is a 128-byte limit to the `.based'
   14972      section.
   14973 
   14974 `-mbitops'
   14975      Enables the bit operation instructions--bit test (`btstm'), set
   14976      (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
   14977      (`tas').
   14978 
   14979 `-mc=NAME'
   14980      Selects which section constant data is placed in.  NAME may be
   14981      `tiny', `near', or `far'.
   14982 
   14983 `-mclip'
   14984      Enables the `clip' instruction.  Note that `-mclip' is not useful
   14985      unless you also provide `-mminmax'.
   14986 
   14987 `-mconfig=NAME'
   14988      Selects one of the built-in core configurations.  Each MeP chip has
   14989      one or more modules in it; each module has a core CPU and a
   14990      variety of coprocessors, optional instructions, and peripherals.
   14991      The `MeP-Integrator' tool, not part of GCC, provides these
   14992      configurations through this option; using this option is the same
   14993      as using all the corresponding command-line options.  The default
   14994      configuration is `default'.
   14995 
   14996 `-mcop'
   14997      Enables the coprocessor instructions.  By default, this is a 32-bit
   14998      coprocessor.  Note that the coprocessor is normally enabled via the
   14999      `-mconfig=' option.
   15000 
   15001 `-mcop32'
   15002      Enables the 32-bit coprocessor's instructions.
   15003 
   15004 `-mcop64'
   15005      Enables the 64-bit coprocessor's instructions.
   15006 
   15007 `-mivc2'
   15008      Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
   15009 
   15010 `-mdc'
   15011      Causes constant variables to be placed in the `.near' section.
   15012 
   15013 `-mdiv'
   15014      Enables the `div' and `divu' instructions.
   15015 
   15016 `-meb'
   15017      Generate big-endian code.
   15018 
   15019 `-mel'
   15020      Generate little-endian code.
   15021 
   15022 `-mio-volatile'
   15023      Tells the compiler that any variable marked with the `io'
   15024      attribute is to be considered volatile.
   15025 
   15026 `-ml'
   15027      Causes variables to be assigned to the `.far' section by default.
   15028 
   15029 `-mleadz'
   15030      Enables the `leadz' (leading zero) instruction.
   15031 
   15032 `-mm'
   15033      Causes variables to be assigned to the `.near' section by default.
   15034 
   15035 `-mminmax'
   15036      Enables the `min' and `max' instructions.
   15037 
   15038 `-mmult'
   15039      Enables the multiplication and multiply-accumulate instructions.
   15040 
   15041 `-mno-opts'
   15042      Disables all the optional instructions enabled by `-mall-opts'.
   15043 
   15044 `-mrepeat'
   15045      Enables the `repeat' and `erepeat' instructions, used for
   15046      low-overhead looping.
   15047 
   15048 `-ms'
   15049      Causes all variables to default to the `.tiny' section.  Note that
   15050      there is a 65536-byte limit to this section.  Accesses to these
   15051      variables use the `%gp' base register.
   15052 
   15053 `-msatur'
   15054      Enables the saturation instructions.  Note that the compiler does
   15055      not currently generate these itself, but this option is included
   15056      for compatibility with other tools, like `as'.
   15057 
   15058 `-msdram'
   15059      Link the SDRAM-based runtime instead of the default ROM-based
   15060      runtime.
   15061 
   15062 `-msim'
   15063      Link the simulator runtime libraries.
   15064 
   15065 `-msimnovec'
   15066      Link the simulator runtime libraries, excluding built-in support
   15067      for reset and exception vectors and tables.
   15068 
   15069 `-mtf'
   15070      Causes all functions to default to the `.far' section.  Without
   15071      this option, functions default to the `.near' section.
   15072 
   15073 `-mtiny=N'
   15074      Variables that are N bytes or smaller are allocated to the `.tiny'
   15075      section.  These variables use the `$gp' base register.  The
   15076      default for this option is 4, but note that there's a 65536-byte
   15077      limit to the `.tiny' section.
   15078 
   15079 
   15080 
   15081 File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
   15082 
   15083 3.17.25 MicroBlaze Options
   15084 --------------------------
   15085 
   15086 `-msoft-float'
   15087      Use software emulation for floating point (default).
   15088 
   15089 `-mhard-float'
   15090      Use hardware floating-point instructions.
   15091 
   15092 `-mmemcpy'
   15093      Do not optimize block moves, use `memcpy'.
   15094 
   15095 `-mno-clearbss'
   15096      This option is deprecated.  Use `-fno-zero-initialized-in-bss'
   15097      instead.
   15098 
   15099 `-mcpu=CPU-TYPE'
   15100      Use features of, and schedule code for, the given CPU.  Supported
   15101      values are in the format `vX.YY.Z', where X is a major version, YY
   15102      is the minor version, and Z is compatibility code.  Example values
   15103      are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b',
   15104      `v6.00.a'.
   15105 
   15106 `-mxl-soft-mul'
   15107      Use software multiply emulation (default).
   15108 
   15109 `-mxl-soft-div'
   15110      Use software emulation for divides (default).
   15111 
   15112 `-mxl-barrel-shift'
   15113      Use the hardware barrel shifter.
   15114 
   15115 `-mxl-pattern-compare'
   15116      Use pattern compare instructions.
   15117 
   15118 `-msmall-divides'
   15119      Use table lookup optimization for small signed integer divisions.
   15120 
   15121 `-mxl-stack-check'
   15122      This option is deprecated.  Use `-fstack-check' instead.
   15123 
   15124 `-mxl-gp-opt'
   15125      Use GP-relative `.sdata'/`.sbss' sections.
   15126 
   15127 `-mxl-multiply-high'
   15128      Use multiply high instructions for high part of 32x32 multiply.
   15129 
   15130 `-mxl-float-convert'
   15131      Use hardware floating-point conversion instructions.
   15132 
   15133 `-mxl-float-sqrt'
   15134      Use hardware floating-point square root instruction.
   15135 
   15136 `-mbig-endian'
   15137      Generate code for a big-endian target.
   15138 
   15139 `-mlittle-endian'
   15140      Generate code for a little-endian target.
   15141 
   15142 `-mxl-reorder'
   15143      Use reorder instructions (swap and byte reversed load/store).
   15144 
   15145 `-mxl-mode-APP-MODEL'
   15146      Select application model APP-MODEL.  Valid models are
   15147     `executable'
   15148           normal executable (default), uses startup code `crt0.o'.
   15149 
   15150     `xmdstub'
   15151           for use with Xilinx Microprocessor Debugger (XMD) based
   15152           software intrusive debug agent called xmdstub. This uses
   15153           startup file `crt1.o' and sets the start address of the
   15154           program to 0x800.
   15155 
   15156     `bootstrap'
   15157           for applications that are loaded using a bootloader.  This
   15158           model uses startup file `crt2.o' which does not contain a
   15159           processor reset vector handler. This is suitable for
   15160           transferring control on a processor reset to the bootloader
   15161           rather than the application.
   15162 
   15163     `novectors'
   15164           for applications that do not require any of the MicroBlaze
   15165           vectors. This option may be useful for applications running
   15166           within a monitoring application. This model uses `crt3.o' as
   15167           a startup file.
   15168 
   15169      Option `-xl-mode-APP-MODEL' is a deprecated alias for
   15170      `-mxl-mode-APP-MODEL'.
   15171 
   15172 
   15173 
   15174 File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
   15175 
   15176 3.17.26 MIPS Options
   15177 --------------------
   15178 
   15179 `-EB'
   15180      Generate big-endian code.
   15181 
   15182 `-EL'
   15183      Generate little-endian code.  This is the default for `mips*el-*-*'
   15184      configurations.
   15185 
   15186 `-march=ARCH'
   15187      Generate code that runs on ARCH, which can be the name of a
   15188      generic MIPS ISA, or the name of a particular processor.  The ISA
   15189      names are: `mips1', `mips2', `mips3', `mips4', `mips32',
   15190      `mips32r2', `mips64' and `mips64r2'.  The processor names are:
   15191      `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
   15192      `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
   15193      `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `34kn',
   15194      `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1',
   15195      `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k',
   15196      `octeon', `octeon+', `octeon2', `orion', `r2000', `r3000',
   15197      `r3900', `r4000', `r4400', `r4600', `r4650', `r4700', `r6000',
   15198      `r8000', `rm7000', `rm9000', `r10000', `r12000', `r14000',
   15199      `r16000', `sb1', `sr71000', `vr4100', `vr4111', `vr4120',
   15200      `vr4130', `vr4300', `vr5000', `vr5400', `vr5500', `xlr' and `xlp'.
   15201      The special value `from-abi' selects the most compatible
   15202      architecture for the selected ABI (that is, `mips1' for 32-bit
   15203      ABIs and `mips3' for 64-bit ABIs).
   15204 
   15205      The native Linux/GNU toolchain also supports the value `native',
   15206      which selects the best architecture option for the host processor.
   15207      `-march=native' has no effect if GCC does not recognize the
   15208      processor.
   15209 
   15210      In processor names, a final `000' can be abbreviated as `k' (for
   15211      example, `-march=r2k').  Prefixes are optional, and `vr' may be
   15212      written `r'.
   15213 
   15214      Names of the form `Nf2_1' refer to processors with FPUs clocked at
   15215      half the rate of the core, names of the form `Nf1_1' refer to
   15216      processors with FPUs clocked at the same rate as the core, and
   15217      names of the form `Nf3_2' refer to processors with FPUs clocked a
   15218      ratio of 3:2 with respect to the core.  For compatibility reasons,
   15219      `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
   15220      accepted as synonyms for `Nf1_1'.
   15221 
   15222      GCC defines two macros based on the value of this option.  The
   15223      first is `_MIPS_ARCH', which gives the name of target
   15224      architecture, as a string.  The second has the form
   15225      `_MIPS_ARCH_FOO', where FOO is the capitalized value of
   15226      `_MIPS_ARCH'.  For example, `-march=r2000' sets `_MIPS_ARCH' to
   15227      `"r2000"' and defines the macro `_MIPS_ARCH_R2000'.
   15228 
   15229      Note that the `_MIPS_ARCH' macro uses the processor names given
   15230      above.  In other words, it has the full prefix and does not
   15231      abbreviate `000' as `k'.  In the case of `from-abi', the macro
   15232      names the resolved architecture (either `"mips1"' or `"mips3"').
   15233      It names the default architecture when no `-march' option is given.
   15234 
   15235 `-mtune=ARCH'
   15236      Optimize for ARCH.  Among other things, this option controls the
   15237      way instructions are scheduled, and the perceived cost of
   15238      arithmetic operations.  The list of ARCH values is the same as for
   15239      `-march'.
   15240 
   15241      When this option is not used, GCC optimizes for the processor
   15242      specified by `-march'.  By using `-march' and `-mtune' together,
   15243      it is possible to generate code that runs on a family of
   15244      processors, but optimize the code for one particular member of
   15245      that family.
   15246 
   15247      `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
   15248      which work in the same way as the `-march' ones described above.
   15249 
   15250 `-mips1'
   15251      Equivalent to `-march=mips1'.
   15252 
   15253 `-mips2'
   15254      Equivalent to `-march=mips2'.
   15255 
   15256 `-mips3'
   15257      Equivalent to `-march=mips3'.
   15258 
   15259 `-mips4'
   15260      Equivalent to `-march=mips4'.
   15261 
   15262 `-mips32'
   15263      Equivalent to `-march=mips32'.
   15264 
   15265 `-mips32r2'
   15266      Equivalent to `-march=mips32r2'.
   15267 
   15268 `-mips64'
   15269      Equivalent to `-march=mips64'.
   15270 
   15271 `-mips64r2'
   15272      Equivalent to `-march=mips64r2'.
   15273 
   15274 `-mips16'
   15275 `-mno-mips16'
   15276      Generate (do not generate) MIPS16 code.  If GCC is targeting a
   15277      MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
   15278 
   15279      MIPS16 code generation can also be controlled on a per-function
   15280      basis by means of `mips16' and `nomips16' attributes.  *Note
   15281      Function Attributes::, for more information.
   15282 
   15283 `-mflip-mips16'
   15284      Generate MIPS16 code on alternating functions.  This option is
   15285      provided for regression testing of mixed MIPS16/non-MIPS16 code
   15286      generation, and is not intended for ordinary use in compiling user
   15287      code.
   15288 
   15289 `-minterlink-mips16'
   15290 `-mno-interlink-mips16'
   15291      Require (do not require) that non-MIPS16 code be link-compatible
   15292      with MIPS16 code.
   15293 
   15294      For example, non-MIPS16 code cannot jump directly to MIPS16 code;
   15295      it must either use a call or an indirect jump.
   15296      `-minterlink-mips16' therefore disables direct jumps unless GCC
   15297      knows that the target of the jump is not MIPS16.
   15298 
   15299 `-mabi=32'
   15300 `-mabi=o64'
   15301 `-mabi=n32'
   15302 `-mabi=64'
   15303 `-mabi=eabi'
   15304      Generate code for the given ABI.
   15305 
   15306      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
   15307      generates 64-bit code when you select a 64-bit architecture, but
   15308      you can use `-mgp32' to get 32-bit code instead.
   15309 
   15310      For information about the O64 ABI, see
   15311      `http://gcc.gnu.org/projects/mipso64-abi.html'.
   15312 
   15313      GCC supports a variant of the o32 ABI in which floating-point
   15314      registers are 64 rather than 32 bits wide.  You can select this
   15315      combination with `-mabi=32' `-mfp64'.  This ABI relies on the
   15316      `mthc1' and `mfhc1' instructions and is therefore only supported
   15317      for MIPS32R2 processors.
   15318 
   15319      The register assignments for arguments and return values remain the
   15320      same, but each scalar value is passed in a single 64-bit register
   15321      rather than a pair of 32-bit registers.  For example, scalar
   15322      floating-point values are returned in `$f0' only, not a
   15323      `$f0'/`$f1' pair.  The set of call-saved registers also remains
   15324      the same, but all 64 bits are saved.
   15325 
   15326 `-mabicalls'
   15327 `-mno-abicalls'
   15328      Generate (do not generate) code that is suitable for SVR4-style
   15329      dynamic objects.  `-mabicalls' is the default for SVR4-based
   15330      systems.
   15331 
   15332 `-mshared'
   15333 `-mno-shared'
   15334      Generate (do not generate) code that is fully position-independent,
   15335      and that can therefore be linked into shared libraries.  This
   15336      option only affects `-mabicalls'.
   15337 
   15338      All `-mabicalls' code has traditionally been position-independent,
   15339      regardless of options like `-fPIC' and `-fpic'.  However, as an
   15340      extension, the GNU toolchain allows executables to use absolute
   15341      accesses for locally-binding symbols.  It can also use shorter GP
   15342      initialization sequences and generate direct calls to
   15343      locally-defined functions.  This mode is selected by `-mno-shared'.
   15344 
   15345      `-mno-shared' depends on binutils 2.16 or higher and generates
   15346      objects that can only be linked by the GNU linker.  However, the
   15347      option does not affect the ABI of the final executable; it only
   15348      affects the ABI of relocatable objects.  Using `-mno-shared'
   15349      generally makes executables both smaller and quicker.
   15350 
   15351      `-mshared' is the default.
   15352 
   15353 `-mplt'
   15354 `-mno-plt'
   15355      Assume (do not assume) that the static and dynamic linkers support
   15356      PLTs and copy relocations.  This option only affects `-mno-shared
   15357      -mabicalls'.  For the n64 ABI, this option has no effect without
   15358      `-msym32'.
   15359 
   15360      You can make `-mplt' the default by configuring GCC with
   15361      `--with-mips-plt'.  The default is `-mno-plt' otherwise.
   15362 
   15363 `-mxgot'
   15364 `-mno-xgot'
   15365      Lift (do not lift) the usual restrictions on the size of the global
   15366      offset table.
   15367 
   15368      GCC normally uses a single instruction to load values from the GOT.
   15369      While this is relatively efficient, it only works if the GOT is
   15370      smaller than about 64k.  Anything larger causes the linker to
   15371      report an error such as:
   15372 
   15373           relocation truncated to fit: R_MIPS_GOT16 foobar
   15374 
   15375      If this happens, you should recompile your code with `-mxgot'.
   15376      This works with very large GOTs, although the code is also less
   15377      efficient, since it takes three instructions to fetch the value of
   15378      a global symbol.
   15379 
   15380      Note that some linkers can create multiple GOTs.  If you have such
   15381      a linker, you should only need to use `-mxgot' when a single object
   15382      file accesses more than 64k's worth of GOT entries.  Very few do.
   15383 
   15384      These options have no effect unless GCC is generating position
   15385      independent code.
   15386 
   15387 `-mgp32'
   15388      Assume that general-purpose registers are 32 bits wide.
   15389 
   15390 `-mgp64'
   15391      Assume that general-purpose registers are 64 bits wide.
   15392 
   15393 `-mfp32'
   15394      Assume that floating-point registers are 32 bits wide.
   15395 
   15396 `-mfp64'
   15397      Assume that floating-point registers are 64 bits wide.
   15398 
   15399 `-mhard-float'
   15400      Use floating-point coprocessor instructions.
   15401 
   15402 `-msoft-float'
   15403      Do not use floating-point coprocessor instructions.  Implement
   15404      floating-point calculations using library calls instead.
   15405 
   15406 `-mno-float'
   15407      Equivalent to `-msoft-float', but additionally asserts that the
   15408      program being compiled does not perform any floating-point
   15409      operations.  This option is presently supported only by some
   15410      bare-metal MIPS configurations, where it may select a special set
   15411      of libraries that lack all floating-point support (including, for
   15412      example, the floating-point `printf' formats).  If code compiled
   15413      with `-mno-float' accidentally contains floating-point operations,
   15414      it is likely to suffer a link-time or run-time failure.
   15415 
   15416 `-msingle-float'
   15417      Assume that the floating-point coprocessor only supports
   15418      single-precision operations.
   15419 
   15420 `-mdouble-float'
   15421      Assume that the floating-point coprocessor supports
   15422      double-precision operations.  This is the default.
   15423 
   15424 `-mllsc'
   15425 `-mno-llsc'
   15426      Use (do not use) `ll', `sc', and `sync' instructions to implement
   15427      atomic memory built-in functions.  When neither option is
   15428      specified, GCC uses the instructions if the target architecture
   15429      supports them.
   15430 
   15431      `-mllsc' is useful if the runtime environment can emulate the
   15432      instructions and `-mno-llsc' can be useful when compiling for
   15433      nonstandard ISAs.  You can make either option the default by
   15434      configuring GCC with `--with-llsc' and `--without-llsc'
   15435      respectively.  `--with-llsc' is the default for some
   15436      configurations; see the installation documentation for details.
   15437 
   15438 `-mdsp'
   15439 `-mno-dsp'
   15440      Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
   15441      Built-in Functions::.  This option defines the preprocessor macro
   15442      `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
   15443 
   15444 `-mdspr2'
   15445 `-mno-dspr2'
   15446      Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
   15447      Built-in Functions::.  This option defines the preprocessor macros
   15448      `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
   15449      to 2.
   15450 
   15451 `-msmartmips'
   15452 `-mno-smartmips'
   15453      Use (do not use) the MIPS SmartMIPS ASE.
   15454 
   15455 `-mpaired-single'
   15456 `-mno-paired-single'
   15457      Use (do not use) paired-single floating-point instructions.  *Note
   15458      MIPS Paired-Single Support::.  This option requires hardware
   15459      floating-point support to be enabled.
   15460 
   15461 `-mdmx'
   15462 `-mno-mdmx'
   15463      Use (do not use) MIPS Digital Media Extension instructions.  This
   15464      option can only be used when generating 64-bit code and requires
   15465      hardware floating-point support to be enabled.
   15466 
   15467 `-mips3d'
   15468 `-mno-mips3d'
   15469      Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
   15470      Functions::.  The option `-mips3d' implies `-mpaired-single'.
   15471 
   15472 `-mmt'
   15473 `-mno-mt'
   15474      Use (do not use) MT Multithreading instructions.
   15475 
   15476 `-mmcu'
   15477 `-mno-mcu'
   15478      Use (do not use) the MIPS MCU ASE instructions.
   15479 
   15480 `-mlong64'
   15481      Force `long' types to be 64 bits wide.  See `-mlong32' for an
   15482      explanation of the default and the way that the pointer size is
   15483      determined.
   15484 
   15485 `-mlong32'
   15486      Force `long', `int', and pointer types to be 32 bits wide.
   15487 
   15488      The default size of `int's, `long's and pointers depends on the
   15489      ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
   15490      64-bit `long's, as does the 64-bit EABI; the others use 32-bit
   15491      `long's.  Pointers are the same size as `long's, or the same size
   15492      as integer registers, whichever is smaller.
   15493 
   15494 `-msym32'
   15495 `-mno-sym32'
   15496      Assume (do not assume) that all symbols have 32-bit values,
   15497      regardless of the selected ABI.  This option is useful in
   15498      combination with `-mabi=64' and `-mno-abicalls' because it allows
   15499      GCC to generate shorter and faster references to symbolic
   15500      addresses.
   15501 
   15502 `-G NUM'
   15503      Put definitions of externally-visible data in a small data section
   15504      if that data is no bigger than NUM bytes.  GCC can then generate
   15505      more efficient accesses to the data; see `-mgpopt' for details.
   15506 
   15507      The default `-G' option depends on the configuration.
   15508 
   15509 `-mlocal-sdata'
   15510 `-mno-local-sdata'
   15511      Extend (do not extend) the `-G' behavior to local data too, such
   15512      as to static variables in C.  `-mlocal-sdata' is the default for
   15513      all configurations.
   15514 
   15515      If the linker complains that an application is using too much
   15516      small data, you might want to try rebuilding the less
   15517      performance-critical parts with `-mno-local-sdata'.  You might
   15518      also want to build large libraries with `-mno-local-sdata', so
   15519      that the libraries leave more room for the main program.
   15520 
   15521 `-mextern-sdata'
   15522 `-mno-extern-sdata'
   15523      Assume (do not assume) that externally-defined data is in a small
   15524      data section if the size of that data is within the `-G' limit.
   15525      `-mextern-sdata' is the default for all configurations.
   15526 
   15527      If you compile a module MOD with `-mextern-sdata' `-G NUM'
   15528      `-mgpopt', and MOD references a variable VAR that is no bigger
   15529      than NUM bytes, you must make sure that VAR is placed in a small
   15530      data section.  If VAR is defined by another module, you must
   15531      either compile that module with a high-enough `-G' setting or
   15532      attach a `section' attribute to VAR's definition.  If VAR is
   15533      common, you must link the application with a high-enough `-G'
   15534      setting.
   15535 
   15536      The easiest way of satisfying these restrictions is to compile and
   15537      link every module with the same `-G' option.  However, you may
   15538      wish to build a library that supports several different small data
   15539      limits.  You can do this by compiling the library with the highest
   15540      supported `-G' setting and additionally using `-mno-extern-sdata'
   15541      to stop the library from making assumptions about
   15542      externally-defined data.
   15543 
   15544 `-mgpopt'
   15545 `-mno-gpopt'
   15546      Use (do not use) GP-relative accesses for symbols that are known
   15547      to be in a small data section; see `-G', `-mlocal-sdata' and
   15548      `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
   15549 
   15550      `-mno-gpopt' is useful for cases where the `$gp' register might
   15551      not hold the value of `_gp'.  For example, if the code is part of
   15552      a library that might be used in a boot monitor, programs that call
   15553      boot monitor routines pass an unknown value in `$gp'.  (In such
   15554      situations, the boot monitor itself is usually compiled with
   15555      `-G0'.)
   15556 
   15557      `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
   15558 
   15559 `-membedded-data'
   15560 `-mno-embedded-data'
   15561      Allocate variables to the read-only data section first if
   15562      possible, then next in the small data section if possible,
   15563      otherwise in data.  This gives slightly slower code than the
   15564      default, but reduces the amount of RAM required when executing,
   15565      and thus may be preferred for some embedded systems.
   15566 
   15567 `-muninit-const-in-rodata'
   15568 `-mno-uninit-const-in-rodata'
   15569      Put uninitialized `const' variables in the read-only data section.
   15570      This option is only meaningful in conjunction with
   15571      `-membedded-data'.
   15572 
   15573 `-mcode-readable=SETTING'
   15574      Specify whether GCC may generate code that reads from executable
   15575      sections.  There are three possible settings:
   15576 
   15577     `-mcode-readable=yes'
   15578           Instructions may freely access executable sections.  This is
   15579           the default setting.
   15580 
   15581     `-mcode-readable=pcrel'
   15582           MIPS16 PC-relative load instructions can access executable
   15583           sections, but other instructions must not do so.  This option
   15584           is useful on 4KSc and 4KSd processors when the code TLBs have
   15585           the Read Inhibit bit set.  It is also useful on processors
   15586           that can be configured to have a dual instruction/data SRAM
   15587           interface and that, like the M4K, automatically redirect
   15588           PC-relative loads to the instruction RAM.
   15589 
   15590     `-mcode-readable=no'
   15591           Instructions must not access executable sections.  This
   15592           option can be useful on targets that are configured to have a
   15593           dual instruction/data SRAM interface but that (unlike the
   15594           M4K) do not automatically redirect PC-relative loads to the
   15595           instruction RAM.
   15596 
   15597 `-msplit-addresses'
   15598 `-mno-split-addresses'
   15599      Enable (disable) use of the `%hi()' and `%lo()' assembler
   15600      relocation operators.  This option has been superseded by
   15601      `-mexplicit-relocs' but is retained for backwards compatibility.
   15602 
   15603 `-mexplicit-relocs'
   15604 `-mno-explicit-relocs'
   15605      Use (do not use) assembler relocation operators when dealing with
   15606      symbolic addresses.  The alternative, selected by
   15607      `-mno-explicit-relocs', is to use assembler macros instead.
   15608 
   15609      `-mexplicit-relocs' is the default if GCC was configured to use an
   15610      assembler that supports relocation operators.
   15611 
   15612 `-mcheck-zero-division'
   15613 `-mno-check-zero-division'
   15614      Trap (do not trap) on integer division by zero.
   15615 
   15616      The default is `-mcheck-zero-division'.
   15617 
   15618 `-mdivide-traps'
   15619 `-mdivide-breaks'
   15620      MIPS systems check for division by zero by generating either a
   15621      conditional trap or a break instruction.  Using traps results in
   15622      smaller code, but is only supported on MIPS II and later.  Also,
   15623      some versions of the Linux kernel have a bug that prevents trap
   15624      from generating the proper signal (`SIGFPE').  Use
   15625      `-mdivide-traps' to allow conditional traps on architectures that
   15626      support them and `-mdivide-breaks' to force the use of breaks.
   15627 
   15628      The default is usually `-mdivide-traps', but this can be
   15629      overridden at configure time using `--with-divide=breaks'.
   15630      Divide-by-zero checks can be completely disabled using
   15631      `-mno-check-zero-division'.
   15632 
   15633 `-mmemcpy'
   15634 `-mno-memcpy'
   15635      Force (do not force) the use of `memcpy()' for non-trivial block
   15636      moves.  The default is `-mno-memcpy', which allows GCC to inline
   15637      most constant-sized copies.
   15638 
   15639 `-mlong-calls'
   15640 `-mno-long-calls'
   15641      Disable (do not disable) use of the `jal' instruction.  Calling
   15642      functions using `jal' is more efficient but requires the caller
   15643      and callee to be in the same 256 megabyte segment.
   15644 
   15645      This option has no effect on abicalls code.  The default is
   15646      `-mno-long-calls'.
   15647 
   15648 `-mmad'
   15649 `-mno-mad'
   15650      Enable (disable) use of the `mad', `madu' and `mul' instructions,
   15651      as provided by the R4650 ISA.
   15652 
   15653 `-mfused-madd'
   15654 `-mno-fused-madd'
   15655      Enable (disable) use of the floating-point multiply-accumulate
   15656      instructions, when they are available.  The default is
   15657      `-mfused-madd'.
   15658 
   15659      On the R8000 CPU when multiply-accumulate instructions are used,
   15660      the intermediate product is calculated to infinite precision and
   15661      is not subject to the FCSR Flush to Zero bit.  This may be
   15662      undesirable in some circumstances.  On other processors the result
   15663      is numerically identical to the equivalent computation using
   15664      separate multiply, add, subtract and negate instructions.
   15665 
   15666 `-nocpp'
   15667      Tell the MIPS assembler to not run its preprocessor over user
   15668      assembler files (with a `.s' suffix) when assembling them.
   15669 
   15670 `-mfix-24k'
   15671 
   15672 `-mno-fix-24k'
   15673      Work around the 24K E48 (lost data on stores during refill) errata.
   15674      The workarounds are implemented by the assembler rather than by
   15675      GCC.
   15676 
   15677 `-mfix-r4000'
   15678 `-mno-fix-r4000'
   15679      Work around certain R4000 CPU errata:
   15680         - A double-word or a variable shift may give an incorrect
   15681           result if executed immediately after starting an integer
   15682           division.
   15683 
   15684         - A double-word or a variable shift may give an incorrect
   15685           result if executed while an integer multiplication is in
   15686           progress.
   15687 
   15688         - An integer division may give an incorrect result if started
   15689           in a delay slot of a taken branch or a jump.
   15690 
   15691 `-mfix-r4400'
   15692 `-mno-fix-r4400'
   15693      Work around certain R4400 CPU errata:
   15694         - A double-word or a variable shift may give an incorrect
   15695           result if executed immediately after starting an integer
   15696           division.
   15697 
   15698 `-mfix-r10000'
   15699 `-mno-fix-r10000'
   15700      Work around certain R10000 errata:
   15701         - `ll'/`sc' sequences may not behave atomically on revisions
   15702           prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
   15703 
   15704      This option can only be used if the target architecture supports
   15705      branch-likely instructions.  `-mfix-r10000' is the default when
   15706      `-march=r10000' is used; `-mno-fix-r10000' is the default
   15707      otherwise.
   15708 
   15709 `-mfix-vr4120'
   15710 `-mno-fix-vr4120'
   15711      Work around certain VR4120 errata:
   15712         - `dmultu' does not always produce the correct result.
   15713 
   15714         - `div' and `ddiv' do not always produce the correct result if
   15715           one of the operands is negative.
   15716      The workarounds for the division errata rely on special functions
   15717      in `libgcc.a'.  At present, these functions are only provided by
   15718      the `mips64vr*-elf' configurations.
   15719 
   15720      Other VR4120 errata require a NOP to be inserted between certain
   15721      pairs of instructions.  These errata are handled by the assembler,
   15722      not by GCC itself.
   15723 
   15724 `-mfix-vr4130'
   15725      Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
   15726      implemented by the assembler rather than by GCC, although GCC
   15727      avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
   15728      `dmacc' and `dmacchi' instructions are available instead.
   15729 
   15730 `-mfix-sb1'
   15731 `-mno-fix-sb1'
   15732      Work around certain SB-1 CPU core errata.  (This flag currently
   15733      works around the SB-1 revision 2 "F1" and "F2" floating-point
   15734      errata.)
   15735 
   15736 `-mr10k-cache-barrier=SETTING'
   15737      Specify whether GCC should insert cache barriers to avoid the
   15738      side-effects of speculation on R10K processors.
   15739 
   15740      In common with many processors, the R10K tries to predict the
   15741      outcome of a conditional branch and speculatively executes
   15742      instructions from the "taken" branch.  It later aborts these
   15743      instructions if the predicted outcome is wrong.  However, on the
   15744      R10K, even aborted instructions can have side effects.
   15745 
   15746      This problem only affects kernel stores and, depending on the
   15747      system, kernel loads.  As an example, a speculatively-executed
   15748      store may load the target memory into cache and mark the cache
   15749      line as dirty, even if the store itself is later aborted.  If a
   15750      DMA operation writes to the same area of memory before the "dirty"
   15751      line is flushed, the cached data overwrites the DMA-ed data.  See
   15752      the R10K processor manual for a full description, including other
   15753      potential problems.
   15754 
   15755      One workaround is to insert cache barrier instructions before
   15756      every memory access that might be speculatively executed and that
   15757      might have side effects even if aborted.
   15758      `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
   15759      this workaround.  It assumes that aborted accesses to any byte in
   15760      the following regions does not have side effects:
   15761 
   15762        1. the memory occupied by the current function's stack frame;
   15763 
   15764        2. the memory occupied by an incoming stack argument;
   15765 
   15766        3. the memory occupied by an object with a link-time-constant
   15767           address.
   15768 
   15769      It is the kernel's responsibility to ensure that speculative
   15770      accesses to these regions are indeed safe.
   15771 
   15772      If the input program contains a function declaration such as:
   15773 
   15774           void foo (void);
   15775 
   15776      then the implementation of `foo' must allow `j foo' and `jal foo'
   15777      to be executed speculatively.  GCC honors this restriction for
   15778      functions it compiles itself.  It expects non-GCC functions (such
   15779      as hand-written assembly code) to do the same.
   15780 
   15781      The option has three forms:
   15782 
   15783     `-mr10k-cache-barrier=load-store'
   15784           Insert a cache barrier before a load or store that might be
   15785           speculatively executed and that might have side effects even
   15786           if aborted.
   15787 
   15788     `-mr10k-cache-barrier=store'
   15789           Insert a cache barrier before a store that might be
   15790           speculatively executed and that might have side effects even
   15791           if aborted.
   15792 
   15793     `-mr10k-cache-barrier=none'
   15794           Disable the insertion of cache barriers.  This is the default
   15795           setting.
   15796 
   15797 `-mflush-func=FUNC'
   15798 `-mno-flush-func'
   15799      Specifies the function to call to flush the I and D caches, or to
   15800      not call any such function.  If called, the function must take the
   15801      same arguments as the common `_flush_func()', that is, the address
   15802      of the memory range for which the cache is being flushed, the size
   15803      of the memory range, and the number 3 (to flush both caches).  The
   15804      default depends on the target GCC was configured for, but commonly
   15805      is either `_flush_func' or `__cpu_flush'.
   15806 
   15807 `mbranch-cost=NUM'
   15808      Set the cost of branches to roughly NUM "simple" instructions.
   15809      This cost is only a heuristic and is not guaranteed to produce
   15810      consistent results across releases.  A zero cost redundantly
   15811      selects the default, which is based on the `-mtune' setting.
   15812 
   15813 `-mbranch-likely'
   15814 `-mno-branch-likely'
   15815      Enable or disable use of Branch Likely instructions, regardless of
   15816      the default for the selected architecture.  By default, Branch
   15817      Likely instructions may be generated if they are supported by the
   15818      selected architecture.  An exception is for the MIPS32 and MIPS64
   15819      architectures and processors that implement those architectures;
   15820      for those, Branch Likely instructions are not be generated by
   15821      default because the MIPS32 and MIPS64 architectures specifically
   15822      deprecate their use.
   15823 
   15824 `-mfp-exceptions'
   15825 `-mno-fp-exceptions'
   15826      Specifies whether FP exceptions are enabled.  This affects how FP
   15827      instructions are scheduled for some processors.  The default is
   15828      that FP exceptions are enabled.
   15829 
   15830      For instance, on the SB-1, if FP exceptions are disabled, and we
   15831      are emitting 64-bit code, then we can use both FP pipes.
   15832      Otherwise, we can only use one FP pipe.
   15833 
   15834 `-mvr4130-align'
   15835 `-mno-vr4130-align'
   15836      The VR4130 pipeline is two-way superscalar, but can only issue two
   15837      instructions together if the first one is 8-byte aligned.  When
   15838      this option is enabled, GCC aligns pairs of instructions that it
   15839      thinks should execute in parallel.
   15840 
   15841      This option only has an effect when optimizing for the VR4130.  It
   15842      normally makes code faster, but at the expense of making it bigger.
   15843      It is enabled by default at optimization level `-O3'.
   15844 
   15845 `-msynci'
   15846 `-mno-synci'
   15847      Enable (disable) generation of `synci' instructions on
   15848      architectures that support it.  The `synci' instructions (if
   15849      enabled) are generated when `__builtin___clear_cache()' is
   15850      compiled.
   15851 
   15852      This option defaults to `-mno-synci', but the default can be
   15853      overridden by configuring with `--with-synci'.
   15854 
   15855      When compiling code for single processor systems, it is generally
   15856      safe to use `synci'.  However, on many multi-core (SMP) systems, it
   15857      does not invalidate the instruction caches on all cores and may
   15858      lead to undefined behavior.
   15859 
   15860 `-mrelax-pic-calls'
   15861 `-mno-relax-pic-calls'
   15862      Try to turn PIC calls that are normally dispatched via register
   15863      `$25' into direct calls.  This is only possible if the linker can
   15864      resolve the destination at link-time and if the destination is
   15865      within range for a direct call.
   15866 
   15867      `-mrelax-pic-calls' is the default if GCC was configured to use an
   15868      assembler and a linker that support the `.reloc' assembly
   15869      directive and `-mexplicit-relocs' is in effect.  With
   15870      `-mno-explicit-relocs', this optimization can be performed by the
   15871      assembler and the linker alone without help from the compiler.
   15872 
   15873 `-mmcount-ra-address'
   15874 `-mno-mcount-ra-address'
   15875      Emit (do not emit) code that allows `_mcount' to modify the
   15876      calling function's return address.  When enabled, this option
   15877      extends the usual `_mcount' interface with a new RA-ADDRESS
   15878      parameter, which has type `intptr_t *' and is passed in register
   15879      `$12'.  `_mcount' can then modify the return address by doing both
   15880      of the following:
   15881         * Returning the new address in register `$31'.
   15882 
   15883         * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
   15884           nonnull.
   15885 
   15886      The default is `-mno-mcount-ra-address'.
   15887 
   15888 
   15889 
   15890 File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
   15891 
   15892 3.17.27 MMIX Options
   15893 --------------------
   15894 
   15895 These options are defined for the MMIX:
   15896 
   15897 `-mlibfuncs'
   15898 `-mno-libfuncs'
   15899      Specify that intrinsic library functions are being compiled,
   15900      passing all values in registers, no matter the size.
   15901 
   15902 `-mepsilon'
   15903 `-mno-epsilon'
   15904      Generate floating-point comparison instructions that compare with
   15905      respect to the `rE' epsilon register.
   15906 
   15907 `-mabi=mmixware'
   15908 `-mabi=gnu'
   15909      Generate code that passes function parameters and return values
   15910      that (in the called function) are seen as registers `$0' and up,
   15911      as opposed to the GNU ABI which uses global registers `$231' and
   15912      up.
   15913 
   15914 `-mzero-extend'
   15915 `-mno-zero-extend'
   15916      When reading data from memory in sizes shorter than 64 bits, use
   15917      (do not use) zero-extending load instructions by default, rather
   15918      than sign-extending ones.
   15919 
   15920 `-mknuthdiv'
   15921 `-mno-knuthdiv'
   15922      Make the result of a division yielding a remainder have the same
   15923      sign as the divisor.  With the default, `-mno-knuthdiv', the sign
   15924      of the remainder follows the sign of the dividend.  Both methods
   15925      are arithmetically valid, the latter being almost exclusively used.
   15926 
   15927 `-mtoplevel-symbols'
   15928 `-mno-toplevel-symbols'
   15929      Prepend (do not prepend) a `:' to all global symbols, so the
   15930      assembly code can be used with the `PREFIX' assembly directive.
   15931 
   15932 `-melf'
   15933      Generate an executable in the ELF format, rather than the default
   15934      `mmo' format used by the `mmix' simulator.
   15935 
   15936 `-mbranch-predict'
   15937 `-mno-branch-predict'
   15938      Use (do not use) the probable-branch instructions, when static
   15939      branch prediction indicates a probable branch.
   15940 
   15941 `-mbase-addresses'
   15942 `-mno-base-addresses'
   15943      Generate (do not generate) code that uses _base addresses_.  Using
   15944      a base address automatically generates a request (handled by the
   15945      assembler and the linker) for a constant to be set up in a global
   15946      register.  The register is used for one or more base address
   15947      requests within the range 0 to 255 from the value held in the
   15948      register.  The generally leads to short and fast code, but the
   15949      number of different data items that can be addressed is limited.
   15950      This means that a program that uses lots of static data may
   15951      require `-mno-base-addresses'.
   15952 
   15953 `-msingle-exit'
   15954 `-mno-single-exit'
   15955      Force (do not force) generated code to have a single exit point in
   15956      each function.
   15957 
   15958 
   15959 File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
   15960 
   15961 3.17.28 MN10300 Options
   15962 -----------------------
   15963 
   15964 These `-m' options are defined for Matsushita MN10300 architectures:
   15965 
   15966 `-mmult-bug'
   15967      Generate code to avoid bugs in the multiply instructions for the
   15968      MN10300 processors.  This is the default.
   15969 
   15970 `-mno-mult-bug'
   15971      Do not generate code to avoid bugs in the multiply instructions
   15972      for the MN10300 processors.
   15973 
   15974 `-mam33'
   15975      Generate code using features specific to the AM33 processor.
   15976 
   15977 `-mno-am33'
   15978      Do not generate code using features specific to the AM33
   15979      processor.  This is the default.
   15980 
   15981 `-mam33-2'
   15982      Generate code using features specific to the AM33/2.0 processor.
   15983 
   15984 `-mam34'
   15985      Generate code using features specific to the AM34 processor.
   15986 
   15987 `-mtune=CPU-TYPE'
   15988      Use the timing characteristics of the indicated CPU type when
   15989      scheduling instructions.  This does not change the targeted
   15990      processor type.  The CPU type must be one of `mn10300', `am33',
   15991      `am33-2' or `am34'.
   15992 
   15993 `-mreturn-pointer-on-d0'
   15994      When generating a function that returns a pointer, return the
   15995      pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
   15996      only in `a0', and attempts to call such functions without a
   15997      prototype result in errors.  Note that this option is on by
   15998      default; use `-mno-return-pointer-on-d0' to disable it.
   15999 
   16000 `-mno-crt0'
   16001      Do not link in the C run-time initialization object file.
   16002 
   16003 `-mrelax'
   16004      Indicate to the linker that it should perform a relaxation
   16005      optimization pass to shorten branches, calls and absolute memory
   16006      addresses.  This option only has an effect when used on the
   16007      command line for the final link step.
   16008 
   16009      This option makes symbolic debugging impossible.
   16010 
   16011 `-mliw'
   16012      Allow the compiler to generate _Long Instruction Word_
   16013      instructions if the target is the `AM33' or later.  This is the
   16014      default.  This option defines the preprocessor macro `__LIW__'.
   16015 
   16016 `-mnoliw'
   16017      Do not allow the compiler to generate _Long Instruction Word_
   16018      instructions.  This option defines the preprocessor macro
   16019      `__NO_LIW__'.
   16020 
   16021 `-msetlb'
   16022      Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
   16023      if the target is the `AM33' or later.  This is the default.  This
   16024      option defines the preprocessor macro `__SETLB__'.
   16025 
   16026 `-mnosetlb'
   16027      Do not allow the compiler to generate _SETLB_ or _Lcc_
   16028      instructions.  This option defines the preprocessor macro
   16029      `__NO_SETLB__'.
   16030 
   16031 
   16032 
   16033 File: gcc.info,  Node: Moxie Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
   16034 
   16035 3.17.29 Moxie Options
   16036 ---------------------
   16037 
   16038 `-meb'
   16039      Generate big-endian code.  This is the default for `moxie-*-*'
   16040      configurations.
   16041 
   16042 `-mel'
   16043      Generate little-endian code.
   16044 
   16045 `-mno-crt0'
   16046      Do not link in the C run-time initialization object file.
   16047 
   16048 
   16049 
   16050 File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Moxie Options,  Up: Submodel Options
   16051 
   16052 3.17.30 PDP-11 Options
   16053 ----------------------
   16054 
   16055 These options are defined for the PDP-11:
   16056 
   16057 `-mfpu'
   16058      Use hardware FPP floating point.  This is the default.  (FIS
   16059      floating point on the PDP-11/40 is not supported.)
   16060 
   16061 `-msoft-float'
   16062      Do not use hardware floating point.
   16063 
   16064 `-mac0'
   16065      Return floating-point results in ac0 (fr0 in Unix assembler
   16066      syntax).
   16067 
   16068 `-mno-ac0'
   16069      Return floating-point results in memory.  This is the default.
   16070 
   16071 `-m40'
   16072      Generate code for a PDP-11/40.
   16073 
   16074 `-m45'
   16075      Generate code for a PDP-11/45.  This is the default.
   16076 
   16077 `-m10'
   16078      Generate code for a PDP-11/10.
   16079 
   16080 `-mbcopy-builtin'
   16081      Use inline `movmemhi' patterns for copying memory.  This is the
   16082      default.
   16083 
   16084 `-mbcopy'
   16085      Do not use inline `movmemhi' patterns for copying memory.
   16086 
   16087 `-mint16'
   16088 `-mno-int32'
   16089      Use 16-bit `int'.  This is the default.
   16090 
   16091 `-mint32'
   16092 `-mno-int16'
   16093      Use 32-bit `int'.
   16094 
   16095 `-mfloat64'
   16096 `-mno-float32'
   16097      Use 64-bit `float'.  This is the default.
   16098 
   16099 `-mfloat32'
   16100 `-mno-float64'
   16101      Use 32-bit `float'.
   16102 
   16103 `-mabshi'
   16104      Use `abshi2' pattern.  This is the default.
   16105 
   16106 `-mno-abshi'
   16107      Do not use `abshi2' pattern.
   16108 
   16109 `-mbranch-expensive'
   16110      Pretend that branches are expensive.  This is for experimenting
   16111      with code generation only.
   16112 
   16113 `-mbranch-cheap'
   16114      Do not pretend that branches are expensive.  This is the default.
   16115 
   16116 `-munix-asm'
   16117      Use Unix assembler syntax.  This is the default when configured for
   16118      `pdp11-*-bsd'.
   16119 
   16120 `-mdec-asm'
   16121      Use DEC assembler syntax.  This is the default when configured for
   16122      any PDP-11 target other than `pdp11-*-bsd'.
   16123 
   16124 
   16125 File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
   16126 
   16127 3.17.31 picoChip Options
   16128 ------------------------
   16129 
   16130 These `-m' options are defined for picoChip implementations:
   16131 
   16132 `-mae=AE_TYPE'
   16133      Set the instruction set, register set, and instruction scheduling
   16134      parameters for array element type AE_TYPE.  Supported values for
   16135      AE_TYPE are `ANY', `MUL', and `MAC'.
   16136 
   16137      `-mae=ANY' selects a completely generic AE type.  Code generated
   16138      with this option runs on any of the other AE types.  The code is
   16139      not as efficient as it would be if compiled for a specific AE
   16140      type, and some types of operation (e.g., multiplication) do not
   16141      work properly on all types of AE.
   16142 
   16143      `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
   16144      for compiled code, and is the default.
   16145 
   16146      `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
   16147      option may suffer from poor performance of byte (char)
   16148      manipulation, since the DSP AE does not provide hardware support
   16149      for byte load/stores.
   16150 
   16151 `-msymbol-as-address'
   16152      Enable the compiler to directly use a symbol name as an address in
   16153      a load/store instruction, without first loading it into a
   16154      register.  Typically, the use of this option generates larger
   16155      programs, which run faster than when the option isn't used.
   16156      However, the results vary from program to program, so it is left
   16157      as a user option, rather than being permanently enabled.
   16158 
   16159 `-mno-inefficient-warnings'
   16160      Disables warnings about the generation of inefficient code.  These
   16161      warnings can be generated, for example, when compiling code that
   16162      performs byte-level memory operations on the MAC AE type.  The MAC
   16163      AE has no hardware support for byte-level memory operations, so
   16164      all byte load/stores must be synthesized from word load/store
   16165      operations.  This is inefficient and a warning is generated to
   16166      indicate that you should rewrite the code to avoid byte
   16167      operations, or to target an AE type that has the necessary
   16168      hardware support.  This option disables these warnings.
   16169 
   16170 
   16171 
   16172 File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
   16173 
   16174 3.17.32 PowerPC Options
   16175 -----------------------
   16176 
   16177 These are listed under *Note RS/6000 and PowerPC Options::.
   16178 
   16179 
   16180 File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
   16181 
   16182 3.17.33 RL78 Options
   16183 --------------------
   16184 
   16185 `-msim'
   16186      Links in additional target libraries to support operation within a
   16187      simulator.
   16188 
   16189 `-mmul=none'
   16190 `-mmul=g13'
   16191 `-mmul=rl78'
   16192      Specifies the type of hardware multiplication support to be used.
   16193      The default is `none', which uses software multiplication
   16194      functions.  The `g13' option is for the hardware multiply/divide
   16195      peripheral only on the RL78/G13 targets.  The `rl78' option is for
   16196      the standard hardware multiplication defined in the RL78 software
   16197      manual.
   16198 
   16199 
   16200 
   16201 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
   16202 
   16203 3.17.34 IBM RS/6000 and PowerPC Options
   16204 ---------------------------------------
   16205 
   16206 These `-m' options are defined for the IBM RS/6000 and PowerPC:
   16207 `-mpowerpc-gpopt'
   16208 `-mno-powerpc-gpopt'
   16209 `-mpowerpc-gfxopt'
   16210 `-mno-powerpc-gfxopt'
   16211 `-mpowerpc64'
   16212 `-mno-powerpc64'
   16213 `-mmfcrf'
   16214 `-mno-mfcrf'
   16215 `-mpopcntb'
   16216 `-mno-popcntb'
   16217 `-mpopcntd'
   16218 `-mno-popcntd'
   16219 `-mfprnd'
   16220 `-mno-fprnd'
   16221 `-mcmpb'
   16222 `-mno-cmpb'
   16223 `-mmfpgpr'
   16224 `-mno-mfpgpr'
   16225 `-mhard-dfp'
   16226 `-mno-hard-dfp'
   16227      You use these options to specify which instructions are available
   16228      on the processor you are using.  The default value of these
   16229      options is determined when configuring GCC.  Specifying the
   16230      `-mcpu=CPU_TYPE' overrides the specification of these options.  We
   16231      recommend you use the `-mcpu=CPU_TYPE' option rather than the
   16232      options listed above.
   16233 
   16234      Specifying `-mpowerpc-gpopt' allows GCC to use the optional
   16235      PowerPC architecture instructions in the General Purpose group,
   16236      including floating-point square root.  Specifying
   16237      `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC
   16238      architecture instructions in the Graphics group, including
   16239      floating-point select.
   16240 
   16241      The `-mmfcrf' option allows GCC to generate the move from
   16242      condition register field instruction implemented on the POWER4
   16243      processor and other processors that support the PowerPC V2.01
   16244      architecture.  The `-mpopcntb' option allows GCC to generate the
   16245      popcount and double-precision FP reciprocal estimate instruction
   16246      implemented on the POWER5 processor and other processors that
   16247      support the PowerPC V2.02 architecture.  The `-mpopcntd' option
   16248      allows GCC to generate the popcount instruction implemented on the
   16249      POWER7 processor and other processors that support the PowerPC
   16250      V2.06 architecture.  The `-mfprnd' option allows GCC to generate
   16251      the FP round to integer instructions implemented on the POWER5+
   16252      processor and other processors that support the PowerPC V2.03
   16253      architecture.  The `-mcmpb' option allows GCC to generate the
   16254      compare bytes instruction implemented on the POWER6 processor and
   16255      other processors that support the PowerPC V2.05 architecture.  The
   16256      `-mmfpgpr' option allows GCC to generate the FP move to/from
   16257      general-purpose register instructions implemented on the POWER6X
   16258      processor and other processors that support the extended PowerPC
   16259      V2.05 architecture.  The `-mhard-dfp' option allows GCC to
   16260      generate the decimal floating-point instructions implemented on
   16261      some POWER processors.
   16262 
   16263      The `-mpowerpc64' option allows GCC to generate the additional
   16264      64-bit instructions that are found in the full PowerPC64
   16265      architecture and to treat GPRs as 64-bit, doubleword quantities.
   16266      GCC defaults to `-mno-powerpc64'.
   16267 
   16268 `-mcpu=CPU_TYPE'
   16269      Set architecture type, register usage, and instruction scheduling
   16270      parameters for machine type CPU_TYPE.  Supported values for
   16271      CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464',
   16272      `464fp', `476', `476fp', `505', `601', `602', `603', `603e',
   16273      `604', `604e', `620', `630', `740', `7400', `7450', `750', `801',
   16274      `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3',
   16275      `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5',
   16276      `titan', `power3', `power4', `power5', `power5+', `power6',
   16277      `power6x', `power7', `power8', `powerpc', `powerpc64', and `rs64'.
   16278 
   16279      `-mcpu=powerpc', and `-mcpu=powerpc64' specify pure 32-bit PowerPC
   16280      and 64-bit PowerPC architecture machine types, with an
   16281      appropriate, generic processor model assumed for scheduling
   16282      purposes.
   16283 
   16284      The other options specify a specific processor.  Code generated
   16285      under those options runs best on that processor, and may not run
   16286      at all on others.
   16287 
   16288      The `-mcpu' options automatically enable or disable the following
   16289      options:
   16290 
   16291           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
   16292           -mpopcntb -mpopcntd  -mpowerpc64
   16293           -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
   16294           -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
   16295           -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
   16296           -mquad-memory -mquad-memory-atomic
   16297 
   16298      The particular options set for any particular CPU varies between
   16299      compiler versions, depending on what setting seems to produce
   16300      optimal code for that CPU; it doesn't necessarily reflect the
   16301      actual hardware's capabilities.  If you wish to set an individual
   16302      option to a particular value, you may specify it after the `-mcpu'
   16303      option, like `-mcpu=970 -mno-altivec'.
   16304 
   16305      On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
   16306      or disabled by the `-mcpu' option at present because AIX does not
   16307      have full support for these options.  You may still enable or
   16308      disable them individually if you're sure it'll work in your
   16309      environment.
   16310 
   16311 `-mtune=CPU_TYPE'
   16312      Set the instruction scheduling parameters for machine type
   16313      CPU_TYPE, but do not set the architecture type or register usage,
   16314      as `-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
   16315      for `-mtune' as for `-mcpu'.  If both are specified, the code
   16316      generated uses the architecture and registers set by `-mcpu', but
   16317      the scheduling parameters set by `-mtune'.
   16318 
   16319 `-mcmodel=small'
   16320      Generate PowerPC64 code for the small model: The TOC is limited to
   16321      64k.
   16322 
   16323 `-mcmodel=medium'
   16324      Generate PowerPC64 code for the medium model: The TOC and other
   16325      static data may be up to a total of 4G in size.
   16326 
   16327 `-mcmodel=large'
   16328      Generate PowerPC64 code for the large model: The TOC may be up to
   16329      4G in size.  Other data and code is only limited by the 64-bit
   16330      address space.
   16331 
   16332 `-maltivec'
   16333 `-mno-altivec'
   16334      Generate code that uses (does not use) AltiVec instructions, and
   16335      also enable the use of built-in functions that allow more direct
   16336      access to the AltiVec instruction set.  You may also need to set
   16337      `-mabi=altivec' to adjust the current ABI with AltiVec ABI
   16338      enhancements.
   16339 
   16340      When `-maltivec' is used, rather than `-maltivec=le' or
   16341      `-maltivec=be', the element order for Altivec intrinsics such as
   16342      `vec_splat', `vec_extract', and `vec_insert' will match array
   16343      element order corresponding to the endianness of the target.  That
   16344      is, element zero identifies the leftmost element in a vector
   16345      register when targeting a big-endian platform, and identifies the
   16346      rightmost element in a vector register when targeting a
   16347      little-endian platform.
   16348 
   16349 `-maltivec=be'
   16350      Generate Altivec instructions using big-endian element order,
   16351      regardless of whether the target is big- or little-endian.  This is
   16352      the default when targeting a big-endian platform.
   16353 
   16354      The element order is used to interpret element numbers in Altivec
   16355      intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
   16356      By default, these will match array element order corresponding to
   16357      the endianness for the target.
   16358 
   16359 `-maltivec=le'
   16360      Generate Altivec instructions using little-endian element order,
   16361      regardless of whether the target is big- or little-endian.  This is
   16362      the default when targeting a little-endian platform.  This option
   16363      is currently ignored when targeting a big-endian platform.
   16364 
   16365      The element order is used to interpret element numbers in Altivec
   16366      intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
   16367      By default, these will match array element order corresponding to
   16368      the endianness for the target.
   16369 
   16370 `-mvrsave'
   16371 `-mno-vrsave'
   16372      Generate VRSAVE instructions when generating AltiVec code.
   16373 
   16374 `-mgen-cell-microcode'
   16375      Generate Cell microcode instructions.
   16376 
   16377 `-mwarn-cell-microcode'
   16378      Warn when a Cell microcode instruction is emitted.  An example of
   16379      a Cell microcode instruction is a variable shift.
   16380 
   16381 `-msecure-plt'
   16382      Generate code that allows `ld' and `ld.so' to build executables
   16383      and shared libraries with non-executable `.plt' and `.got'
   16384      sections.  This is a PowerPC 32-bit SYSV ABI option.
   16385 
   16386 `-mbss-plt'
   16387      Generate code that uses a BSS `.plt' section that `ld.so' fills
   16388      in, and requires `.plt' and `.got' sections that are both writable
   16389      and executable.  This is a PowerPC 32-bit SYSV ABI option.
   16390 
   16391 `-misel'
   16392 `-mno-isel'
   16393      This switch enables or disables the generation of ISEL
   16394      instructions.
   16395 
   16396 `-misel=YES/NO'
   16397      This switch has been deprecated.  Use `-misel' and `-mno-isel'
   16398      instead.
   16399 
   16400 `-mspe'
   16401 `-mno-spe'
   16402      This switch enables or disables the generation of SPE simd
   16403      instructions.
   16404 
   16405 `-mpaired'
   16406 `-mno-paired'
   16407      This switch enables or disables the generation of PAIRED simd
   16408      instructions.
   16409 
   16410 `-mspe=YES/NO'
   16411      This option has been deprecated.  Use `-mspe' and `-mno-spe'
   16412      instead.
   16413 
   16414 `-mvsx'
   16415 `-mno-vsx'
   16416      Generate code that uses (does not use) vector/scalar (VSX)
   16417      instructions, and also enable the use of built-in functions that
   16418      allow more direct access to the VSX instruction set.
   16419 
   16420 `-mcrypto'
   16421 `-mno-crypto'
   16422      Enable the use (disable) of the built-in functions that allow
   16423      direct access to the cryptographic instructions that were added in
   16424      version 2.07 of the PowerPC ISA.
   16425 
   16426 `-mdirect-move'
   16427 `-mno-direct-move'
   16428      Generate code that uses (does not use) the instructions to move
   16429      data between the general purpose registers and the vector/scalar
   16430      (VSX) registers that were added in version 2.07 of the PowerPC ISA.
   16431 
   16432 `-mpower8-fusion'
   16433 `-mno-power8-fusion'
   16434      Generate code that keeps (does not keeps) some integer operations
   16435      adjacent so that the instructions can be fused together on power8
   16436      and later processors.
   16437 
   16438 `-mpower8-vector'
   16439 `-mno-power8-vector'
   16440      Generate code that uses (does not use) the vector and scalar
   16441      instructions that were added in version 2.07 of the PowerPC ISA.
   16442      Also enable the use of built-in functions that allow more direct
   16443      access to the vector instructions.
   16444 
   16445 `-mquad-memory'
   16446 `-mno-quad-memory'
   16447      Generate code that uses (does not use) the non-atomic quad word
   16448      memory instructions.  The `-mquad-memory' option requires use of
   16449      64-bit mode.
   16450 
   16451 `-mquad-memory-atomic'
   16452 `-mno-quad-memory-atomic'
   16453      Generate code that uses (does not use) the atomic quad word memory
   16454      instructions.  The `-mquad-memory-atomic' option requires use of
   16455      64-bit mode.
   16456 
   16457 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
   16458 `-mfloat-gprs'
   16459      This switch enables or disables the generation of floating-point
   16460      operations on the general-purpose registers for architectures that
   16461      support it.
   16462 
   16463      The argument YES or SINGLE enables the use of single-precision
   16464      floating-point operations.
   16465 
   16466      The argument DOUBLE enables the use of single and double-precision
   16467      floating-point operations.
   16468 
   16469      The argument NO disables floating-point operations on the
   16470      general-purpose registers.
   16471 
   16472      This option is currently only available on the MPC854x.
   16473 
   16474 `-m32'
   16475 `-m64'
   16476      Generate code for 32-bit or 64-bit environments of Darwin and SVR4
   16477      targets (including GNU/Linux).  The 32-bit environment sets int,
   16478      long and pointer to 32 bits and generates code that runs on any
   16479      PowerPC variant.  The 64-bit environment sets int to 32 bits and
   16480      long and pointer to 64 bits, and generates code for PowerPC64, as
   16481      for `-mpowerpc64'.
   16482 
   16483 `-mfull-toc'
   16484 `-mno-fp-in-toc'
   16485 `-mno-sum-in-toc'
   16486 `-mminimal-toc'
   16487      Modify generation of the TOC (Table Of Contents), which is created
   16488      for every executable file.  The `-mfull-toc' option is selected by
   16489      default.  In that case, GCC allocates at least one TOC entry for
   16490      each unique non-automatic variable reference in your program.  GCC
   16491      also places floating-point constants in the TOC.  However, only
   16492      16,384 entries are available in the TOC.
   16493 
   16494      If you receive a linker error message that saying you have
   16495      overflowed the available TOC space, you can reduce the amount of
   16496      TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
   16497      options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
   16498      constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
   16499      code to calculate the sum of an address and a constant at run time
   16500      instead of putting that sum into the TOC.  You may specify one or
   16501      both of these options.  Each causes GCC to produce very slightly
   16502      slower and larger code at the expense of conserving TOC space.
   16503 
   16504      If you still run out of space in the TOC even when you specify
   16505      both of these options, specify `-mminimal-toc' instead.  This
   16506      option causes GCC to make only one TOC entry for every file.  When
   16507      you specify this option, GCC produces code that is slower and
   16508      larger but which uses extremely little TOC space.  You may wish to
   16509      use this option only on files that contain less
   16510      frequently-executed code.
   16511 
   16512 `-maix64'
   16513 `-maix32'
   16514      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
   16515      64-bit `long' type, and the infrastructure needed to support them.
   16516      Specifying `-maix64' implies `-mpowerpc64', while `-maix32'
   16517      disables the 64-bit ABI and implies `-mno-powerpc64'.  GCC
   16518      defaults to `-maix32'.
   16519 
   16520 `-mxl-compat'
   16521 `-mno-xl-compat'
   16522      Produce code that conforms more closely to IBM XL compiler
   16523      semantics when using AIX-compatible ABI.  Pass floating-point
   16524      arguments to prototyped functions beyond the register save area
   16525      (RSA) on the stack in addition to argument FPRs.  Do not assume
   16526      that most significant double in 128-bit long double value is
   16527      properly rounded when comparing values and converting to double.
   16528      Use XL symbol names for long double support routines.
   16529 
   16530      The AIX calling convention was extended but not initially
   16531      documented to handle an obscure K&R C case of calling a function
   16532      that takes the address of its arguments with fewer arguments than
   16533      declared.  IBM XL compilers access floating-point arguments that
   16534      do not fit in the RSA from the stack when a subroutine is compiled
   16535      without optimization.  Because always storing floating-point
   16536      arguments on the stack is inefficient and rarely needed, this
   16537      option is not enabled by default and only is necessary when
   16538      calling subroutines compiled by IBM XL compilers without
   16539      optimization.
   16540 
   16541 `-mpe'
   16542      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
   16543      application written to use message passing with special startup
   16544      code to enable the application to run.  The system must have PE
   16545      installed in the standard location (`/usr/lpp/ppe.poe/'), or the
   16546      `specs' file must be overridden with the `-specs=' option to
   16547      specify the appropriate directory location.  The Parallel
   16548      Environment does not support threads, so the `-mpe' option and the
   16549      `-pthread' option are incompatible.
   16550 
   16551 `-malign-natural'
   16552 `-malign-power'
   16553      On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
   16554      `-malign-natural' overrides the ABI-defined alignment of larger
   16555      types, such as floating-point doubles, on their natural size-based
   16556      boundary.  The option `-malign-power' instructs GCC to follow the
   16557      ABI-specified alignment rules.  GCC defaults to the standard
   16558      alignment defined in the ABI.
   16559 
   16560      On 64-bit Darwin, natural alignment is the default, and
   16561      `-malign-power' is not supported.
   16562 
   16563 `-msoft-float'
   16564 `-mhard-float'
   16565      Generate code that does not use (uses) the floating-point register
   16566      set.  Software floating-point emulation is provided if you use the
   16567      `-msoft-float' option, and pass the option to GCC when linking.
   16568 
   16569 `-msingle-float'
   16570 `-mdouble-float'
   16571      Generate code for single- or double-precision floating-point
   16572      operations.  `-mdouble-float' implies `-msingle-float'.
   16573 
   16574 `-msimple-fpu'
   16575      Do not generate `sqrt' and `div' instructions for hardware
   16576      floating-point unit.
   16577 
   16578 `-mfpu=NAME'
   16579      Specify type of floating-point unit.  Valid values for NAME are
   16580      `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite'
   16581      (equivalent to `-mdouble-float -msimple-fpu'), `sp_full'
   16582      (equivalent to `-msingle-float'), and `dp_full' (equivalent to
   16583      `-mdouble-float').
   16584 
   16585 `-mxilinx-fpu'
   16586      Perform optimizations for the floating-point unit on Xilinx PPC
   16587      405/440.
   16588 
   16589 `-mmultiple'
   16590 `-mno-multiple'
   16591      Generate code that uses (does not use) the load multiple word
   16592      instructions and the store multiple word instructions.  These
   16593      instructions are generated by default on POWER systems, and not
   16594      generated on PowerPC systems.  Do not use `-mmultiple' on
   16595      little-endian PowerPC systems, since those instructions do not
   16596      work when the processor is in little-endian mode.  The exceptions
   16597      are PPC740 and PPC750 which permit these instructions in
   16598      little-endian mode.
   16599 
   16600 `-mstring'
   16601 `-mno-string'
   16602      Generate code that uses (does not use) the load string instructions
   16603      and the store string word instructions to save multiple registers
   16604      and do small block moves.  These instructions are generated by
   16605      default on POWER systems, and not generated on PowerPC systems.
   16606      Do not use `-mstring' on little-endian PowerPC systems, since those
   16607      instructions do not work when the processor is in little-endian
   16608      mode.  The exceptions are PPC740 and PPC750 which permit these
   16609      instructions in little-endian mode.
   16610 
   16611 `-mupdate'
   16612 `-mno-update'
   16613      Generate code that uses (does not use) the load or store
   16614      instructions that update the base register to the address of the
   16615      calculated memory location.  These instructions are generated by
   16616      default.  If you use `-mno-update', there is a small window
   16617      between the time that the stack pointer is updated and the address
   16618      of the previous frame is stored, which means code that walks the
   16619      stack frame across interrupts or signals may get corrupted data.
   16620 
   16621 `-mavoid-indexed-addresses'
   16622 `-mno-avoid-indexed-addresses'
   16623      Generate code that tries to avoid (not avoid) the use of indexed
   16624      load or store instructions. These instructions can incur a
   16625      performance penalty on Power6 processors in certain situations,
   16626      such as when stepping through large arrays that cross a 16M
   16627      boundary.  This option is enabled by default when targeting Power6
   16628      and disabled otherwise.
   16629 
   16630 `-mfused-madd'
   16631 `-mno-fused-madd'
   16632      Generate code that uses (does not use) the floating-point multiply
   16633      and accumulate instructions.  These instructions are generated by
   16634      default if hardware floating point is used.  The machine-dependent
   16635      `-mfused-madd' option is now mapped to the machine-independent
   16636      `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
   16637      `-ffp-contract=off'.
   16638 
   16639 `-mmulhw'
   16640 `-mno-mulhw'
   16641      Generate code that uses (does not use) the half-word multiply and
   16642      multiply-accumulate instructions on the IBM 405, 440, 464 and 476
   16643      processors.  These instructions are generated by default when
   16644      targeting those processors.
   16645 
   16646 `-mdlmzb'
   16647 `-mno-dlmzb'
   16648      Generate code that uses (does not use) the string-search `dlmzb'
   16649      instruction on the IBM 405, 440, 464 and 476 processors.  This
   16650      instruction is generated by default when targeting those
   16651      processors.
   16652 
   16653 `-mno-bit-align'
   16654 `-mbit-align'
   16655      On System V.4 and embedded PowerPC systems do not (do) force
   16656      structures and unions that contain bit-fields to be aligned to the
   16657      base type of the bit-field.
   16658 
   16659      For example, by default a structure containing nothing but 8
   16660      `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
   16661      and has a size of 4 bytes.  By using `-mno-bit-align', the
   16662      structure is aligned to a 1-byte boundary and is 1 byte in size.
   16663 
   16664 `-mno-strict-align'
   16665 `-mstrict-align'
   16666      On System V.4 and embedded PowerPC systems do not (do) assume that
   16667      unaligned memory references are handled by the system.
   16668 
   16669 `-mrelocatable'
   16670 `-mno-relocatable'
   16671      Generate code that allows (does not allow) a static executable to
   16672      be relocated to a different address at run time.  A simple embedded
   16673      PowerPC system loader should relocate the entire contents of
   16674      `.got2' and 4-byte locations listed in the `.fixup' section, a
   16675      table of 32-bit addresses generated by this option.  For this to
   16676      work, all objects linked together must be compiled with
   16677      `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
   16678      aligns the stack to an 8-byte boundary.
   16679 
   16680 `-mrelocatable-lib'
   16681 `-mno-relocatable-lib'
   16682      Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
   16683      section to allow static executables to be relocated at run time,
   16684      but `-mrelocatable-lib' does not use the smaller stack alignment
   16685      of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
   16686      be linked with objects compiled with any combination of the
   16687      `-mrelocatable' options.
   16688 
   16689 `-mno-toc'
   16690 `-mtoc'
   16691      On System V.4 and embedded PowerPC systems do not (do) assume that
   16692      register 2 contains a pointer to a global area pointing to the
   16693      addresses used in the program.
   16694 
   16695 `-mlittle'
   16696 `-mlittle-endian'
   16697      On System V.4 and embedded PowerPC systems compile code for the
   16698      processor in little-endian mode.  The `-mlittle-endian' option is
   16699      the same as `-mlittle'.
   16700 
   16701 `-mbig'
   16702 `-mbig-endian'
   16703      On System V.4 and embedded PowerPC systems compile code for the
   16704      processor in big-endian mode.  The `-mbig-endian' option is the
   16705      same as `-mbig'.
   16706 
   16707 `-mdynamic-no-pic'
   16708      On Darwin and Mac OS X systems, compile code so that it is not
   16709      relocatable, but that its external references are relocatable.  The
   16710      resulting code is suitable for applications, but not shared
   16711      libraries.
   16712 
   16713 `-msingle-pic-base'
   16714      Treat the register used for PIC addressing as read-only, rather
   16715      than loading it in the prologue for each function.  The runtime
   16716      system is responsible for initializing this register with an
   16717      appropriate value before execution begins.
   16718 
   16719 `-mprioritize-restricted-insns=PRIORITY'
   16720      This option controls the priority that is assigned to
   16721      dispatch-slot restricted instructions during the second scheduling
   16722      pass.  The argument PRIORITY takes the value `0', `1', or `2' to
   16723      assign no, highest, or second-highest (respectively) priority to
   16724      dispatch-slot restricted instructions.
   16725 
   16726 `-msched-costly-dep=DEPENDENCE_TYPE'
   16727      This option controls which dependences are considered costly by
   16728      the target during instruction scheduling.  The argument
   16729      DEPENDENCE_TYPE takes one of the following values:
   16730 
   16731     `no'
   16732           No dependence is costly.
   16733 
   16734     `all'
   16735           All dependences are costly.
   16736 
   16737     `true_store_to_load'
   16738           A true dependence from store to load is costly.
   16739 
   16740     `store_to_load'
   16741           Any dependence from store to load is costly.
   16742 
   16743     NUMBER
   16744           Any dependence for which the latency is greater than or equal
   16745           to NUMBER is costly.
   16746 
   16747 `-minsert-sched-nops=SCHEME'
   16748      This option controls which NOP insertion scheme is used during the
   16749      second scheduling pass.  The argument SCHEME takes one of the
   16750      following values:
   16751 
   16752     `no'
   16753           Don't insert NOPs.
   16754 
   16755     `pad'
   16756           Pad with NOPs any dispatch group that has vacant issue slots,
   16757           according to the scheduler's grouping.
   16758 
   16759     `regroup_exact'
   16760           Insert NOPs to force costly dependent insns into separate
   16761           groups.  Insert exactly as many NOPs as needed to force an
   16762           insn to a new group, according to the estimated processor
   16763           grouping.
   16764 
   16765     NUMBER
   16766           Insert NOPs to force costly dependent insns into separate
   16767           groups.  Insert NUMBER NOPs to force an insn to a new group.
   16768 
   16769 `-mcall-sysv'
   16770      On System V.4 and embedded PowerPC systems compile code using
   16771      calling conventions that adhere to the March 1995 draft of the
   16772      System V Application Binary Interface, PowerPC processor
   16773      supplement.  This is the default unless you configured GCC using
   16774      `powerpc-*-eabiaix'.
   16775 
   16776 `-mcall-sysv-eabi'
   16777 `-mcall-eabi'
   16778      Specify both `-mcall-sysv' and `-meabi' options.
   16779 
   16780 `-mcall-sysv-noeabi'
   16781      Specify both `-mcall-sysv' and `-mno-eabi' options.
   16782 
   16783 `-mcall-aixdesc'
   16784      On System V.4 and embedded PowerPC systems compile code for the AIX
   16785      operating system.
   16786 
   16787 `-mcall-linux'
   16788      On System V.4 and embedded PowerPC systems compile code for the
   16789      Linux-based GNU system.
   16790 
   16791 `-mcall-freebsd'
   16792      On System V.4 and embedded PowerPC systems compile code for the
   16793      FreeBSD operating system.
   16794 
   16795 `-mcall-netbsd'
   16796      On System V.4 and embedded PowerPC systems compile code for the
   16797      NetBSD operating system.
   16798 
   16799 `-mcall-openbsd'
   16800      On System V.4 and embedded PowerPC systems compile code for the
   16801      OpenBSD operating system.
   16802 
   16803 `-maix-struct-return'
   16804      Return all structures in memory (as specified by the AIX ABI).
   16805 
   16806 `-msvr4-struct-return'
   16807      Return structures smaller than 8 bytes in registers (as specified
   16808      by the SVR4 ABI).
   16809 
   16810 `-mabi=ABI-TYPE'
   16811      Extend the current ABI with a particular extension, or remove such
   16812      extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
   16813      IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2.
   16814 
   16815 `-mabi=spe'
   16816      Extend the current ABI with SPE ABI extensions.  This does not
   16817      change the default ABI, instead it adds the SPE ABI extensions to
   16818      the current ABI.
   16819 
   16820 `-mabi=no-spe'
   16821      Disable Book-E SPE ABI extensions for the current ABI.
   16822 
   16823 `-mabi=ibmlongdouble'
   16824      Change the current ABI to use IBM extended-precision long double.
   16825      This is a PowerPC 32-bit SYSV ABI option.
   16826 
   16827 `-mabi=ieeelongdouble'
   16828      Change the current ABI to use IEEE extended-precision long double.
   16829      This is a PowerPC 32-bit Linux ABI option.
   16830 
   16831 `-mabi=elfv1'
   16832      Change the current ABI to use the ELFv1 ABI.  This is the default
   16833      ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
   16834      ABI requires special system support and is likely to fail in
   16835      spectacular ways.
   16836 
   16837 `-mabi=elfv2'
   16838      Change the current ABI to use the ELFv2 ABI.  This is the default
   16839      ABI for little-endian PowerPC 64-bit Linux.  Overriding the
   16840      default ABI requires special system support and is likely to fail
   16841      in spectacular ways.
   16842 
   16843 `-mprototype'
   16844 `-mno-prototype'
   16845      On System V.4 and embedded PowerPC systems assume that all calls to
   16846      variable argument functions are properly prototyped.  Otherwise,
   16847      the compiler must insert an instruction before every
   16848      non-prototyped call to set or clear bit 6 of the condition code
   16849      register (CR) to indicate whether floating-point values are passed
   16850      in the floating-point registers in case the function takes
   16851      variable arguments.  With `-mprototype', only calls to prototyped
   16852      variable argument functions set or clear the bit.
   16853 
   16854 `-msim'
   16855      On embedded PowerPC systems, assume that the startup module is
   16856      called `sim-crt0.o' and that the standard C libraries are
   16857      `libsim.a' and `libc.a'.  This is the default for
   16858      `powerpc-*-eabisim' configurations.
   16859 
   16860 `-mmvme'
   16861      On embedded PowerPC systems, assume that the startup module is
   16862      called `crt0.o' and the standard C libraries are `libmvme.a' and
   16863      `libc.a'.
   16864 
   16865 `-mads'
   16866      On embedded PowerPC systems, assume that the startup module is
   16867      called `crt0.o' and the standard C libraries are `libads.a' and
   16868      `libc.a'.
   16869 
   16870 `-myellowknife'
   16871      On embedded PowerPC systems, assume that the startup module is
   16872      called `crt0.o' and the standard C libraries are `libyk.a' and
   16873      `libc.a'.
   16874 
   16875 `-mvxworks'
   16876      On System V.4 and embedded PowerPC systems, specify that you are
   16877      compiling for a VxWorks system.
   16878 
   16879 `-memb'
   16880      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
   16881      header to indicate that `eabi' extended relocations are used.
   16882 
   16883 `-meabi'
   16884 `-mno-eabi'
   16885      On System V.4 and embedded PowerPC systems do (do not) adhere to
   16886      the Embedded Applications Binary Interface (EABI), which is a set
   16887      of modifications to the System V.4 specifications.  Selecting
   16888      `-meabi' means that the stack is aligned to an 8-byte boundary, a
   16889      function `__eabi' is called from `main' to set up the EABI
   16890      environment, and the `-msdata' option can use both `r2' and `r13'
   16891      to point to two separate small data areas.  Selecting `-mno-eabi'
   16892      means that the stack is aligned to a 16-byte boundary, no EABI
   16893      initialization function is called from `main', and the `-msdata'
   16894      option only uses `r13' to point to a single small data area.  The
   16895      `-meabi' option is on by default if you configured GCC using one
   16896      of the `powerpc*-*-eabi*' options.
   16897 
   16898 `-msdata=eabi'
   16899      On System V.4 and embedded PowerPC systems, put small initialized
   16900      `const' global and static data in the `.sdata2' section, which is
   16901      pointed to by register `r2'.  Put small initialized non-`const'
   16902      global and static data in the `.sdata' section, which is pointed
   16903      to by register `r13'.  Put small uninitialized global and static
   16904      data in the `.sbss' section, which is adjacent to the `.sdata'
   16905      section.  The `-msdata=eabi' option is incompatible with the
   16906      `-mrelocatable' option.  The `-msdata=eabi' option also sets the
   16907      `-memb' option.
   16908 
   16909 `-msdata=sysv'
   16910      On System V.4 and embedded PowerPC systems, put small global and
   16911      static data in the `.sdata' section, which is pointed to by
   16912      register `r13'.  Put small uninitialized global and static data in
   16913      the `.sbss' section, which is adjacent to the `.sdata' section.
   16914      The `-msdata=sysv' option is incompatible with the `-mrelocatable'
   16915      option.
   16916 
   16917 `-msdata=default'
   16918 `-msdata'
   16919      On System V.4 and embedded PowerPC systems, if `-meabi' is used,
   16920      compile code the same as `-msdata=eabi', otherwise compile code the
   16921      same as `-msdata=sysv'.
   16922 
   16923 `-msdata=data'
   16924      On System V.4 and embedded PowerPC systems, put small global data
   16925      in the `.sdata' section.  Put small uninitialized global data in
   16926      the `.sbss' section.  Do not use register `r13' to address small
   16927      data however.  This is the default behavior unless other `-msdata'
   16928      options are used.
   16929 
   16930 `-msdata=none'
   16931 `-mno-sdata'
   16932      On embedded PowerPC systems, put all initialized global and static
   16933      data in the `.data' section, and all uninitialized data in the
   16934      `.bss' section.
   16935 
   16936 `-mblock-move-inline-limit=NUM'
   16937      Inline all block moves (such as calls to `memcpy' or structure
   16938      copies) less than or equal to NUM bytes.  The minimum value for
   16939      NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
   16940      The default value is target-specific.
   16941 
   16942 `-G NUM'
   16943      On embedded PowerPC systems, put global and static items less than
   16944      or equal to NUM bytes into the small data or BSS sections instead
   16945      of the normal data or BSS section.  By default, NUM is 8.  The `-G
   16946      NUM' switch is also passed to the linker.  All modules should be
   16947      compiled with the same `-G NUM' value.
   16948 
   16949 `-mregnames'
   16950 `-mno-regnames'
   16951      On System V.4 and embedded PowerPC systems do (do not) emit
   16952      register names in the assembly language output using symbolic
   16953      forms.
   16954 
   16955 `-mlongcall'
   16956 `-mno-longcall'
   16957      By default assume that all calls are far away so that a longer and
   16958      more expensive calling sequence is required.  This is required for
   16959      calls farther than 32 megabytes (33,554,432 bytes) from the
   16960      current location.  A short call is generated if the compiler knows
   16961      the call cannot be that far away.  This setting can be overridden
   16962      by the `shortcall' function attribute, or by `#pragma longcall(0)'.
   16963 
   16964      Some linkers are capable of detecting out-of-range calls and
   16965      generating glue code on the fly.  On these systems, long calls are
   16966      unnecessary and generate slower code.  As of this writing, the AIX
   16967      linker can do this, as can the GNU linker for PowerPC/64.  It is
   16968      planned to add this feature to the GNU linker for 32-bit PowerPC
   16969      systems as well.
   16970 
   16971      On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee,
   16972      L42', plus a "branch island" (glue code).  The two target
   16973      addresses represent the callee and the branch island.  The
   16974      Darwin/PPC linker prefers the first address and generates a `bl
   16975      callee' if the PPC `bl' instruction reaches the callee directly;
   16976      otherwise, the linker generates `bl L42' to call the branch
   16977      island.  The branch island is appended to the body of the calling
   16978      function; it computes the full 32-bit address of the callee and
   16979      jumps to it.
   16980 
   16981      On Mach-O (Darwin) systems, this option directs the compiler emit
   16982      to the glue for every direct call, and the Darwin linker decides
   16983      whether to use or discard it.
   16984 
   16985      In the future, GCC may ignore all longcall specifications when the
   16986      linker is known to generate glue.
   16987 
   16988 `-mtls-markers'
   16989 `-mno-tls-markers'
   16990      Mark (do not mark) calls to `__tls_get_addr' with a relocation
   16991      specifying the function argument.  The relocation allows the
   16992      linker to reliably associate function call with argument setup
   16993      instructions for TLS optimization, which in turn allows GCC to
   16994      better schedule the sequence.
   16995 
   16996 `-pthread'
   16997      Adds support for multithreading with the "pthreads" library.  This
   16998      option sets flags for both the preprocessor and linker.
   16999 
   17000 `-mrecip'
   17001 `-mno-recip'
   17002      This option enables use of the reciprocal estimate and reciprocal
   17003      square root estimate instructions with additional Newton-Raphson
   17004      steps to increase precision instead of doing a divide or square
   17005      root and divide for floating-point arguments.  You should use the
   17006      `-ffast-math' option when using `-mrecip' (or at least
   17007      `-funsafe-math-optimizations', `-finite-math-only',
   17008      `-freciprocal-math' and `-fno-trapping-math').  Note that while
   17009      the throughput of the sequence is generally higher than the
   17010      throughput of the non-reciprocal instruction, the precision of the
   17011      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
   17012      equals 0.99999994) for reciprocal square roots.
   17013 
   17014 `-mrecip=OPT'
   17015      This option controls which reciprocal estimate instructions may be
   17016      used.  OPT is a comma-separated list of options, which may be
   17017      preceded by a `!' to invert the option: `all': enable all estimate
   17018      instructions, `default': enable the default instructions,
   17019      equivalent to `-mrecip', `none': disable all estimate
   17020      instructions, equivalent to `-mno-recip'; `div': enable the
   17021      reciprocal approximation instructions for both single and double
   17022      precision; `divf': enable the single-precision reciprocal
   17023      approximation instructions; `divd': enable the double-precision
   17024      reciprocal approximation instructions; `rsqrt': enable the
   17025      reciprocal square root approximation instructions for both single
   17026      and double precision; `rsqrtf': enable the single-precision
   17027      reciprocal square root approximation instructions; `rsqrtd':
   17028      enable the double-precision reciprocal square root approximation
   17029      instructions;
   17030 
   17031      So, for example, `-mrecip=all,!rsqrtd' enables all of the
   17032      reciprocal estimate instructions, except for the `FRSQRTE',
   17033      `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
   17034      double-precision reciprocal square root calculations.
   17035 
   17036 `-mrecip-precision'
   17037 `-mno-recip-precision'
   17038      Assume (do not assume) that the reciprocal estimate instructions
   17039      provide higher-precision estimates than is mandated by the PowerPC
   17040      ABI.  Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8'
   17041      automatically selects `-mrecip-precision'.  The double-precision
   17042      square root estimate instructions are not generated by default on
   17043      low-precision machines, since they do not provide an estimate that
   17044      converges after three steps.
   17045 
   17046 `-mveclibabi=TYPE'
   17047      Specifies the ABI type to use for vectorizing intrinsics using an
   17048      external library.  The only type supported at present is `mass',
   17049      which specifies to use IBM's Mathematical Acceleration Subsystem
   17050      (MASS) libraries for vectorizing intrinsics using external
   17051      libraries.  GCC currently emits calls to `acosd2', `acosf4',
   17052      `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
   17053      `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
   17054      `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
   17055      `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
   17056      `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
   17057      `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
   17058      `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
   17059      `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
   17060      `tanhd2', and `tanhf4' when generating code for power7.  Both
   17061      `-ftree-vectorize' and `-funsafe-math-optimizations' must also be
   17062      enabled.  The MASS libraries must be specified at link time.
   17063 
   17064 `-mfriz'
   17065 `-mno-friz'
   17066      Generate (do not generate) the `friz' instruction when the
   17067      `-funsafe-math-optimizations' option is used to optimize rounding
   17068      of floating-point values to 64-bit integer and back to floating
   17069      point.  The `friz' instruction does not return the same value if
   17070      the floating-point number is too large to fit in an integer.
   17071 
   17072 `-mpointers-to-nested-functions'
   17073 `-mno-pointers-to-nested-functions'
   17074      Generate (do not generate) code to load up the static chain
   17075      register (R11) when calling through a pointer on AIX and 64-bit
   17076      Linux systems where a function pointer points to a 3-word
   17077      descriptor giving the function address, TOC value to be loaded in
   17078      register R2, and static chain value to be loaded in register R11.
   17079      The `-mpointers-to-nested-functions' is on by default.  You cannot
   17080      call through pointers to nested functions or pointers to functions
   17081      compiled in other languages that use the static chain if you use
   17082      the `-mno-pointers-to-nested-functions'.
   17083 
   17084 `-msave-toc-indirect'
   17085 `-mno-save-toc-indirect'
   17086      Generate (do not generate) code to save the TOC value in the
   17087      reserved stack location in the function prologue if the function
   17088      calls through a pointer on AIX and 64-bit Linux systems.  If the
   17089      TOC value is not saved in the prologue, it is saved just before
   17090      the call through the pointer.  The `-mno-save-toc-indirect' option
   17091      is the default.
   17092 
   17093 `-mcompat-align-parm'
   17094 `-mno-compat-align-parm'
   17095      Generate (do not generate) code to pass structure parameters with a
   17096      maximum alignment of 64 bits, for compatibility with older versions
   17097      of GCC.
   17098 
   17099      Older versions of GCC (prior to 4.9.0) incorrectly did not align a
   17100      structure parameter on a 128-bit boundary when that structure
   17101      contained a member requiring 128-bit alignment.  This is corrected
   17102      in more recent versions of GCC.  This option may be used to
   17103      generate code that is compatible with functions compiled with
   17104      older versions of GCC.
   17105 
   17106      In this version of the compiler, the `-mcompat-align-parm' is the
   17107      default, except when using the Linux ELFv2 ABI.
   17108 
   17109 
   17110 File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
   17111 
   17112 3.17.35 RX Options
   17113 ------------------
   17114 
   17115 These command-line options are defined for RX targets:
   17116 
   17117 `-m64bit-doubles'
   17118 `-m32bit-doubles'
   17119      Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
   17120      bits (`-m32bit-doubles') in size.  The default is
   17121      `-m32bit-doubles'.  _Note_ RX floating-point hardware only works
   17122      on 32-bit values, which is why the default is `-m32bit-doubles'.
   17123 
   17124 `-fpu'
   17125 `-nofpu'
   17126      Enables (`-fpu') or disables (`-nofpu') the use of RX
   17127      floating-point hardware.  The default is enabled for the RX600
   17128      series and disabled for the RX200 series.
   17129 
   17130      Floating-point instructions are only generated for 32-bit
   17131      floating-point values, however, so the FPU hardware is not used
   17132      for doubles if the `-m64bit-doubles' option is used.
   17133 
   17134      _Note_ If the `-fpu' option is enabled then
   17135      `-funsafe-math-optimizations' is also enabled automatically.  This
   17136      is because the RX FPU instructions are themselves unsafe.
   17137 
   17138 `-mcpu=NAME'
   17139      Selects the type of RX CPU to be targeted.  Currently three types
   17140      are supported, the generic RX600 and RX200 series hardware and the
   17141      specific RX610 CPU.  The default is RX600.
   17142 
   17143      The only difference between RX600 and RX610 is that the RX610 does
   17144      not support the `MVTIPL' instruction.
   17145 
   17146      The RX200 series does not have a hardware floating-point unit and
   17147      so `-nofpu' is enabled by default when this type is selected.
   17148 
   17149 `-mbig-endian-data'
   17150 `-mlittle-endian-data'
   17151      Store data (but not code) in the big-endian format.  The default is
   17152      `-mlittle-endian-data', i.e. to store data in the little-endian
   17153      format.
   17154 
   17155 `-msmall-data-limit=N'
   17156      Specifies the maximum size in bytes of global and static variables
   17157      which can be placed into the small data area.  Using the small data
   17158      area can lead to smaller and faster code, but the size of area is
   17159      limited and it is up to the programmer to ensure that the area does
   17160      not overflow.  Also when the small data area is used one of the
   17161      RX's registers (usually `r13') is reserved for use pointing to this
   17162      area, so it is no longer available for use by the compiler.  This
   17163      could result in slower and/or larger code if variables are pushed
   17164      onto the stack instead of being held in this register.
   17165 
   17166      Note, common variables (variables that have not been initialized)
   17167      and constants are not placed into the small data area as they are
   17168      assigned to other sections in the output executable.
   17169 
   17170      The default value is zero, which disables this feature.  Note, this
   17171      feature is not enabled by default with higher optimization levels
   17172      (`-O2' etc) because of the potentially detrimental effects of
   17173      reserving a register.  It is up to the programmer to experiment and
   17174      discover whether this feature is of benefit to their program.  See
   17175      the description of the `-mpid' option for a description of how the
   17176      actual register to hold the small data area pointer is chosen.
   17177 
   17178 `-msim'
   17179 `-mno-sim'
   17180      Use the simulator runtime.  The default is to use the libgloss
   17181      board-specific runtime.
   17182 
   17183 `-mas100-syntax'
   17184 `-mno-as100-syntax'
   17185      When generating assembler output use a syntax that is compatible
   17186      with Renesas's AS100 assembler.  This syntax can also be handled
   17187      by the GAS assembler, but it has some restrictions so it is not
   17188      generated by default.
   17189 
   17190 `-mmax-constant-size=N'
   17191      Specifies the maximum size, in bytes, of a constant that can be
   17192      used as an operand in a RX instruction.  Although the RX
   17193      instruction set does allow constants of up to 4 bytes in length to
   17194      be used in instructions, a longer value equates to a longer
   17195      instruction.  Thus in some circumstances it can be beneficial to
   17196      restrict the size of constants that are used in instructions.
   17197      Constants that are too big are instead placed into a constant pool
   17198      and referenced via register indirection.
   17199 
   17200      The value N can be between 0 and 4.  A value of 0 (the default) or
   17201      4 means that constants of any size are allowed.
   17202 
   17203 `-mrelax'
   17204      Enable linker relaxation.  Linker relaxation is a process whereby
   17205      the linker attempts to reduce the size of a program by finding
   17206      shorter versions of various instructions.  Disabled by default.
   17207 
   17208 `-mint-register=N'
   17209      Specify the number of registers to reserve for fast interrupt
   17210      handler functions.  The value N can be between 0 and 4.  A value
   17211      of 1 means that register `r13' is reserved for the exclusive use
   17212      of fast interrupt handlers.  A value of 2 reserves `r13' and
   17213      `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
   17214      of 4 reserves `r13' through `r10'.  A value of 0, the default,
   17215      does not reserve any registers.
   17216 
   17217 `-msave-acc-in-interrupts'
   17218      Specifies that interrupt handler functions should preserve the
   17219      accumulator register.  This is only necessary if normal code might
   17220      use the accumulator register, for example because it performs
   17221      64-bit multiplications.  The default is to ignore the accumulator
   17222      as this makes the interrupt handlers faster.
   17223 
   17224 `-mpid'
   17225 `-mno-pid'
   17226      Enables the generation of position independent data.  When enabled
   17227      any access to constant data is done via an offset from a base
   17228      address held in a register.  This allows the location of constant
   17229      data to be determined at run time without requiring the executable
   17230      to be relocated, which is a benefit to embedded applications with
   17231      tight memory constraints.  Data that can be modified is not
   17232      affected by this option.
   17233 
   17234      Note, using this feature reserves a register, usually `r13', for
   17235      the constant data base address.  This can result in slower and/or
   17236      larger code, especially in complicated functions.
   17237 
   17238      The actual register chosen to hold the constant data base address
   17239      depends upon whether the `-msmall-data-limit' and/or the
   17240      `-mint-register' command-line options are enabled.  Starting with
   17241      register `r13' and proceeding downwards, registers are allocated
   17242      first to satisfy the requirements of `-mint-register', then
   17243      `-mpid' and finally `-msmall-data-limit'.  Thus it is possible for
   17244      the small data area register to be `r8' if both `-mint-register=4'
   17245      and `-mpid' are specified on the command line.
   17246 
   17247      By default this feature is not enabled.  The default can be
   17248      restored via the `-mno-pid' command-line option.
   17249 
   17250 `-mno-warn-multiple-fast-interrupts'
   17251 `-mwarn-multiple-fast-interrupts'
   17252      Prevents GCC from issuing a warning message if it finds more than
   17253      one fast interrupt handler when it is compiling a file.  The
   17254      default is to issue a warning for each extra fast interrupt
   17255      handler found, as the RX only supports one such interrupt.
   17256 
   17257 
   17258  _Note:_ The generic GCC command-line option `-ffixed-REG' has special
   17259 significance to the RX port when used with the `interrupt' function
   17260 attribute.  This attribute indicates a function intended to process
   17261 fast interrupts.  GCC ensures that it only uses the registers `r10',
   17262 `r11', `r12' and/or `r13' and only provided that the normal use of the
   17263 corresponding registers have been restricted via the `-ffixed-REG' or
   17264 `-mint-register' command-line options.
   17265 
   17266 
   17267 File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
   17268 
   17269 3.17.36 S/390 and zSeries Options
   17270 ---------------------------------
   17271 
   17272 These are the `-m' options defined for the S/390 and zSeries
   17273 architecture.
   17274 
   17275 `-mhard-float'
   17276 `-msoft-float'
   17277      Use (do not use) the hardware floating-point instructions and
   17278      registers for floating-point operations.  When `-msoft-float' is
   17279      specified, functions in `libgcc.a' are used to perform
   17280      floating-point operations.  When `-mhard-float' is specified, the
   17281      compiler generates IEEE floating-point instructions.  This is the
   17282      default.
   17283 
   17284 `-mhard-dfp'
   17285 `-mno-hard-dfp'
   17286      Use (do not use) the hardware decimal-floating-point instructions
   17287      for decimal-floating-point operations.  When `-mno-hard-dfp' is
   17288      specified, functions in `libgcc.a' are used to perform
   17289      decimal-floating-point operations.  When `-mhard-dfp' is
   17290      specified, the compiler generates decimal-floating-point hardware
   17291      instructions.  This is the default for `-march=z9-ec' or higher.
   17292 
   17293 `-mlong-double-64'
   17294 `-mlong-double-128'
   17295      These switches control the size of `long double' type. A size of
   17296      64 bits makes the `long double' type equivalent to the `double'
   17297      type. This is the default.
   17298 
   17299 `-mbackchain'
   17300 `-mno-backchain'
   17301      Store (do not store) the address of the caller's frame as
   17302      backchain pointer into the callee's stack frame.  A backchain may
   17303      be needed to allow debugging using tools that do not understand
   17304      DWARF 2 call frame information.  When `-mno-packed-stack' is in
   17305      effect, the backchain pointer is stored at the bottom of the stack
   17306      frame; when `-mpacked-stack' is in effect, the backchain is placed
   17307      into the topmost word of the 96/160 byte register save area.
   17308 
   17309      In general, code compiled with `-mbackchain' is call-compatible
   17310      with code compiled with `-mmo-backchain'; however, use of the
   17311      backchain for debugging purposes usually requires that the whole
   17312      binary is built with `-mbackchain'.  Note that the combination of
   17313      `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
   17314      supported.  In order to build a linux kernel use `-msoft-float'.
   17315 
   17316      The default is to not maintain the backchain.
   17317 
   17318 `-mpacked-stack'
   17319 `-mno-packed-stack'
   17320      Use (do not use) the packed stack layout.  When
   17321      `-mno-packed-stack' is specified, the compiler uses the all fields
   17322      of the 96/160 byte register save area only for their default
   17323      purpose; unused fields still take up stack space.  When
   17324      `-mpacked-stack' is specified, register save slots are densely
   17325      packed at the top of the register save area; unused space is
   17326      reused for other purposes, allowing for more efficient use of the
   17327      available stack space.  However, when `-mbackchain' is also in
   17328      effect, the topmost word of the save area is always used to store
   17329      the backchain, and the return address register is always saved two
   17330      words below the backchain.
   17331 
   17332      As long as the stack frame backchain is not used, code generated
   17333      with `-mpacked-stack' is call-compatible with code generated with
   17334      `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
   17335      for S/390 or zSeries generated code that uses the stack frame
   17336      backchain at run time, not just for debugging purposes.  Such code
   17337      is not call-compatible with code compiled with `-mpacked-stack'.
   17338      Also, note that the combination of `-mbackchain', `-mpacked-stack'
   17339      and `-mhard-float' is not supported.  In order to build a linux
   17340      kernel use `-msoft-float'.
   17341 
   17342      The default is to not use the packed stack layout.
   17343 
   17344 `-msmall-exec'
   17345 `-mno-small-exec'
   17346      Generate (or do not generate) code using the `bras' instruction to
   17347      do subroutine calls.  This only works reliably if the total
   17348      executable size does not exceed 64k.  The default is to use the
   17349      `basr' instruction instead, which does not have this limitation.
   17350 
   17351 `-m64'
   17352 `-m31'
   17353      When `-m31' is specified, generate code compliant to the GNU/Linux
   17354      for S/390 ABI.  When `-m64' is specified, generate code compliant
   17355      to the GNU/Linux for zSeries ABI.  This allows GCC in particular
   17356      to generate 64-bit instructions.  For the `s390' targets, the
   17357      default is `-m31', while the `s390x' targets default to `-m64'.
   17358 
   17359 `-mzarch'
   17360 `-mesa'
   17361      When `-mzarch' is specified, generate code using the instructions
   17362      available on z/Architecture.  When `-mesa' is specified, generate
   17363      code using the instructions available on ESA/390.  Note that
   17364      `-mesa' is not possible with `-m64'.  When generating code
   17365      compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
   17366      When generating code compliant to the GNU/Linux for zSeries ABI,
   17367      the default is `-mzarch'.
   17368 
   17369 `-mmvcle'
   17370 `-mno-mvcle'
   17371      Generate (or do not generate) code using the `mvcle' instruction
   17372      to perform block moves.  When `-mno-mvcle' is specified, use a
   17373      `mvc' loop instead.  This is the default unless optimizing for
   17374      size.
   17375 
   17376 `-mdebug'
   17377 `-mno-debug'
   17378      Print (or do not print) additional debug information when
   17379      compiling.  The default is to not print debug information.
   17380 
   17381 `-march=CPU-TYPE'
   17382      Generate code that runs on CPU-TYPE, which is the name of a system
   17383      representing a certain processor type.  Possible values for
   17384      CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and
   17385      `z10'.  When generating code using the instructions available on
   17386      z/Architecture, the default is `-march=z900'.  Otherwise, the
   17387      default is `-march=g5'.
   17388 
   17389 `-mtune=CPU-TYPE'
   17390      Tune to CPU-TYPE everything applicable about the generated code,
   17391      except for the ABI and the set of available instructions.  The
   17392      list of CPU-TYPE values is the same as for `-march'.  The default
   17393      is the value used for `-march'.
   17394 
   17395 `-mtpf-trace'
   17396 `-mno-tpf-trace'
   17397      Generate code that adds (does not add) in TPF OS specific branches
   17398      to trace routines in the operating system.  This option is off by
   17399      default, even when compiling for the TPF OS.
   17400 
   17401 `-mfused-madd'
   17402 `-mno-fused-madd'
   17403      Generate code that uses (does not use) the floating-point multiply
   17404      and accumulate instructions.  These instructions are generated by
   17405      default if hardware floating point is used.
   17406 
   17407 `-mwarn-framesize=FRAMESIZE'
   17408      Emit a warning if the current function exceeds the given frame
   17409      size.  Because this is a compile-time check it doesn't need to be
   17410      a real problem when the program runs.  It is intended to identify
   17411      functions that most probably cause a stack overflow.  It is useful
   17412      to be used in an environment with limited stack size e.g. the
   17413      linux kernel.
   17414 
   17415 `-mwarn-dynamicstack'
   17416      Emit a warning if the function calls `alloca' or uses
   17417      dynamically-sized arrays.  This is generally a bad idea with a
   17418      limited stack size.
   17419 
   17420 `-mstack-guard=STACK-GUARD'
   17421 `-mstack-size=STACK-SIZE'
   17422      If these options are provided the S/390 back end emits additional
   17423      instructions in the function prologue that trigger a trap if the
   17424      stack size is STACK-GUARD bytes above the STACK-SIZE (remember
   17425      that the stack on S/390 grows downward).  If the STACK-GUARD
   17426      option is omitted the smallest power of 2 larger than the frame
   17427      size of the compiled function is chosen.  These options are
   17428      intended to be used to help debugging stack overflow problems.
   17429      The additionally emitted code causes only little overhead and
   17430      hence can also be used in production-like systems without greater
   17431      performance degradation.  The given values have to be exact powers
   17432      of 2 and STACK-SIZE has to be greater than STACK-GUARD without
   17433      exceeding 64k.  In order to be efficient the extra code makes the
   17434      assumption that the stack starts at an address aligned to the
   17435      value given by STACK-SIZE.  The STACK-GUARD option can only be
   17436      used in conjunction with STACK-SIZE.
   17437 
   17438 `-mhotpatch[=HALFWORDS]'
   17439 `-mno-hotpatch'
   17440      If the hotpatch option is enabled, a "hot-patching" function
   17441      prologue is generated for all functions in the compilation unit.
   17442      The funtion label is prepended with the given number of two-byte
   17443      Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop
   17444      instructions if no argument is present.  Functions with a
   17445      hot-patching prologue are never inlined automatically, and a
   17446      hot-patching prologue is never generated for functions functions
   17447      that are explicitly inline.
   17448 
   17449      This option can be overridden for individual functions with the
   17450      `hotpatch' attribute.
   17451 
   17452 
   17453 File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
   17454 
   17455 3.17.37 Score Options
   17456 ---------------------
   17457 
   17458 These options are defined for Score implementations:
   17459 
   17460 `-meb'
   17461      Compile code for big-endian mode.  This is the default.
   17462 
   17463 `-mel'
   17464      Compile code for little-endian mode.
   17465 
   17466 `-mnhwloop'
   17467      Disable generation of `bcnz' instructions.
   17468 
   17469 `-muls'
   17470      Enable generation of unaligned load and store instructions.
   17471 
   17472 `-mmac'
   17473      Enable the use of multiply-accumulate instructions. Disabled by
   17474      default.
   17475 
   17476 `-mscore5'
   17477      Specify the SCORE5 as the target architecture.
   17478 
   17479 `-mscore5u'
   17480      Specify the SCORE5U of the target architecture.
   17481 
   17482 `-mscore7'
   17483      Specify the SCORE7 as the target architecture. This is the default.
   17484 
   17485 `-mscore7d'
   17486      Specify the SCORE7D as the target architecture.
   17487 
   17488 
   17489 File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
   17490 
   17491 3.17.38 SH Options
   17492 ------------------
   17493 
   17494 These `-m' options are defined for the SH implementations:
   17495 
   17496 `-m1'
   17497      Generate code for the SH1.
   17498 
   17499 `-m2'
   17500      Generate code for the SH2.
   17501 
   17502 `-m2e'
   17503      Generate code for the SH2e.
   17504 
   17505 `-m2a-nofpu'
   17506      Generate code for the SH2a without FPU, or for a SH2a-FPU in such
   17507      a way that the floating-point unit is not used.
   17508 
   17509 `-m2a-single-only'
   17510      Generate code for the SH2a-FPU, in such a way that no
   17511      double-precision floating-point operations are used.
   17512 
   17513 `-m2a-single'
   17514      Generate code for the SH2a-FPU assuming the floating-point unit is
   17515      in single-precision mode by default.
   17516 
   17517 `-m2a'
   17518      Generate code for the SH2a-FPU assuming the floating-point unit is
   17519      in double-precision mode by default.
   17520 
   17521 `-m3'
   17522      Generate code for the SH3.
   17523 
   17524 `-m3e'
   17525      Generate code for the SH3e.
   17526 
   17527 `-m4-nofpu'
   17528      Generate code for the SH4 without a floating-point unit.
   17529 
   17530 `-m4-single-only'
   17531      Generate code for the SH4 with a floating-point unit that only
   17532      supports single-precision arithmetic.
   17533 
   17534 `-m4-single'
   17535      Generate code for the SH4 assuming the floating-point unit is in
   17536      single-precision mode by default.
   17537 
   17538 `-m4'
   17539      Generate code for the SH4.
   17540 
   17541 `-m4a-nofpu'
   17542      Generate code for the SH4al-dsp, or for a SH4a in such a way that
   17543      the floating-point unit is not used.
   17544 
   17545 `-m4a-single-only'
   17546      Generate code for the SH4a, in such a way that no double-precision
   17547      floating-point operations are used.
   17548 
   17549 `-m4a-single'
   17550      Generate code for the SH4a assuming the floating-point unit is in
   17551      single-precision mode by default.
   17552 
   17553 `-m4a'
   17554      Generate code for the SH4a.
   17555 
   17556 `-m4al'
   17557      Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
   17558      the assembler.  GCC doesn't generate any DSP instructions at the
   17559      moment.
   17560 
   17561 `-mb'
   17562      Compile code for the processor in big-endian mode.
   17563 
   17564 `-ml'
   17565      Compile code for the processor in little-endian mode.
   17566 
   17567 `-mdalign'
   17568      Align doubles at 64-bit boundaries.  Note that this changes the
   17569      calling conventions, and thus some functions from the standard C
   17570      library do not work unless you recompile it first with `-mdalign'.
   17571 
   17572 `-mrelax'
   17573      Shorten some address references at link time, when possible; uses
   17574      the linker option `-relax'.
   17575 
   17576 `-mbigtable'
   17577      Use 32-bit offsets in `switch' tables.  The default is to use
   17578      16-bit offsets.
   17579 
   17580 `-mbitops'
   17581      Enable the use of bit manipulation instructions on SH2A.
   17582 
   17583 `-mfmovd'
   17584      Enable the use of the instruction `fmovd'.  Check `-mdalign' for
   17585      alignment constraints.
   17586 
   17587 `-mhitachi'
   17588      Comply with the calling conventions defined by Renesas.
   17589 
   17590 `-mrenesas'
   17591      Comply with the calling conventions defined by Renesas.
   17592 
   17593 `-mno-renesas'
   17594      Comply with the calling conventions defined for GCC before the
   17595      Renesas conventions were available.  This option is the default
   17596      for all targets of the SH toolchain.
   17597 
   17598 `-mnomacsave'
   17599      Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
   17600      given.
   17601 
   17602 `-mieee'
   17603 `-mno-ieee'
   17604      Control the IEEE compliance of floating-point comparisons, which
   17605      affects the handling of cases where the result of a comparison is
   17606      unordered.  By default `-mieee' is implicitly enabled.  If
   17607      `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set,
   17608      which results in faster floating-point greater-equal and
   17609      less-equal comparisons.  The implcit settings can be overridden by
   17610      specifying either `-mieee' or `-mno-ieee'.
   17611 
   17612 `-minline-ic_invalidate'
   17613      Inline code to invalidate instruction cache entries after setting
   17614      up nested function trampolines.  This option has no effect if
   17615      `-musermode' is in effect and the selected code generation option
   17616      (e.g. `-m4') does not allow the use of the `icbi' instruction.  If
   17617      the selected code generation option does not allow the use of the
   17618      `icbi' instruction, and `-musermode' is not in effect, the inlined
   17619      code manipulates the instruction cache address array directly with
   17620      an associative write.  This not only requires privileged mode at
   17621      run time, but it also fails if the cache line had been mapped via
   17622      the TLB and has become unmapped.
   17623 
   17624 `-misize'
   17625      Dump instruction size and location in the assembly code.
   17626 
   17627 `-mpadstruct'
   17628      This option is deprecated.  It pads structures to multiple of 4
   17629      bytes, which is incompatible with the SH ABI.
   17630 
   17631 `-matomic-model=MODEL'
   17632      Sets the model of atomic operations and additional parameters as a
   17633      comma separated list.  For details on the atomic built-in
   17634      functions see *note __atomic Builtins::.  The following models and
   17635      parameters are supported:
   17636 
   17637     `none'
   17638           Disable compiler generated atomic sequences and emit library
   17639           calls for atomic operations.  This is the default if the
   17640           target is not `sh-*-linux*'.
   17641 
   17642     `soft-gusa'
   17643           Generate GNU/Linux compatible gUSA software atomic sequences
   17644           for the atomic built-in functions.  The generated atomic
   17645           sequences require additional support from the
   17646           interrupt/exception handling code of the system and are only
   17647           suitable for SH3* and SH4* single-core systems.  This option
   17648           is enabled by default when the target is `sh-*-linux*' and
   17649           SH3* or SH4*.  When the target is SH4A, this option will also
   17650           partially utilize the hardware atomic instructions `movli.l'
   17651           and `movco.l' to create more efficient code, unless `strict'
   17652           is specified.
   17653 
   17654     `soft-tcb'
   17655           Generate software atomic sequences that use a variable in the
   17656           thread control block.  This is a variation of the gUSA
   17657           sequences which can also be used on SH1* and SH2* targets.
   17658           The generated atomic sequences require additional support
   17659           from the interrupt/exception handling code of the system and
   17660           are only suitable for single-core systems.  When using this
   17661           model, the `gbr-offset=' parameter has to be specified as
   17662           well.
   17663 
   17664     `soft-imask'
   17665           Generate software atomic sequences that temporarily disable
   17666           interrupts by setting `SR.IMASK = 1111'.  This model works
   17667           only when the program runs in privileged mode and is only
   17668           suitable for single-core systems.  Additional support from
   17669           the interrupt/exception handling code of the system is not
   17670           required.  This model is enabled by default when the target is
   17671           `sh-*-linux*' and SH1* or SH2*.
   17672 
   17673     `hard-llcs'
   17674           Generate hardware atomic sequences using the `movli.l' and
   17675           `movco.l' instructions only.  This is only available on SH4A
   17676           and is suitable for multi-core systems.  Since the hardware
   17677           instructions support only 32 bit atomic variables access to 8
   17678           or 16 bit variables is emulated with 32 bit accesses.  Code
   17679           compiled with this option will also be compatible with other
   17680           software atomic model interrupt/exception handling systems if
   17681           executed on an SH4A system.  Additional support from the
   17682           interrupt/exception handling code of the system is not
   17683           required for this model.
   17684 
   17685     `gbr-offset='
   17686           This parameter specifies the offset in bytes of the variable
   17687           in the thread control block structure that should be used by
   17688           the generated atomic sequences when the `soft-tcb' model has
   17689           been selected.  For other models this parameter is ignored.
   17690           The specified value must be an integer multiple of four and
   17691           in the range 0-1020.
   17692 
   17693     `strict'
   17694           This parameter prevents mixed usage of multiple atomic
   17695           models, even though they would be compatible, and will make
   17696           the compiler generate atomic sequences of the specified model
   17697           only.
   17698 
   17699 
   17700 `-mtas'
   17701      Generate the `tas.b' opcode for `__atomic_test_and_set'.  Notice
   17702      that depending on the particular hardware and software
   17703      configuration this can degrade overall performance due to the
   17704      operand cache line flushes that are implied by the `tas.b'
   17705      instruction.  On multi-core SH4A processors the `tas.b'
   17706      instruction must be used with caution since it can result in data
   17707      corruption for certain cache configurations.
   17708 
   17709 `-mspace'
   17710      Optimize for space instead of speed.  Implied by `-Os'.
   17711 
   17712 `-mprefergot'
   17713      When generating position-independent code, emit function calls
   17714      using the Global Offset Table instead of the Procedure Linkage
   17715      Table.
   17716 
   17717 `-musermode'
   17718      Don't generate privileged mode only code.  This option implies
   17719      `-mno-inline-ic_invalidate' if the inlined code would not work in
   17720      user mode.  This is the default when the target is `sh-*-linux*'.
   17721 
   17722 `-multcost=NUMBER'
   17723      Set the cost to assume for a multiply insn.
   17724 
   17725 `-mdiv=STRATEGY'
   17726      Set the division strategy to be used for integer division
   17727      operations.  For SHmedia STRATEGY can be one of:
   17728 
   17729     `fp'
   17730           Performs the operation in floating point.  This has a very
   17731           high latency, but needs only a few instructions, so it might
   17732           be a good choice if your code has enough easily-exploitable
   17733           ILP to allow the compiler to schedule the floating-point
   17734           instructions together with other instructions.  Division by
   17735           zero causes a floating-point exception.
   17736 
   17737     `inv'
   17738           Uses integer operations to calculate the inverse of the
   17739           divisor, and then multiplies the dividend with the inverse.
   17740           This strategy allows CSE and hoisting of the inverse
   17741           calculation.  Division by zero calculates an unspecified
   17742           result, but does not trap.
   17743 
   17744     `inv:minlat'
   17745           A variant of `inv' where, if no CSE or hoisting opportunities
   17746           have been found, or if the entire operation has been hoisted
   17747           to the same place, the last stages of the inverse calculation
   17748           are intertwined with the final multiply to reduce the overall
   17749           latency, at the expense of using a few more instructions, and
   17750           thus offering fewer scheduling opportunities with other code.
   17751 
   17752     `call'
   17753           Calls a library function that usually implements the
   17754           `inv:minlat' strategy.  This gives high code density for
   17755           `m5-*media-nofpu' compilations.
   17756 
   17757     `call2'
   17758           Uses a different entry point of the same library function,
   17759           where it assumes that a pointer to a lookup table has already
   17760           been set up, which exposes the pointer load to CSE and code
   17761           hoisting optimizations.
   17762 
   17763     `inv:call'
   17764     `inv:call2'
   17765     `inv:fp'
   17766           Use the `inv' algorithm for initial code generation, but if
   17767           the code stays unoptimized, revert to the `call', `call2', or
   17768           `fp' strategies, respectively.  Note that the
   17769           potentially-trapping side effect of division by zero is
   17770           carried by a separate instruction, so it is possible that all
   17771           the integer instructions are hoisted out, but the marker for
   17772           the side effect stays where it is.  A recombination to
   17773           floating-point operations or a call is not possible in that
   17774           case.
   17775 
   17776     `inv20u'
   17777     `inv20l'
   17778           Variants of the `inv:minlat' strategy.  In the case that the
   17779           inverse calculation is not separated from the multiply, they
   17780           speed up division where the dividend fits into 20 bits (plus
   17781           sign where applicable) by inserting a test to skip a number
   17782           of operations in this case; this test slows down the case of
   17783           larger dividends.  `inv20u' assumes the case of a such a
   17784           small dividend to be unlikely, and `inv20l' assumes it to be
   17785           likely.
   17786 
   17787 
   17788      For targets other than SHmedia STRATEGY can be one of:
   17789 
   17790     `call-div1'
   17791           Calls a library function that uses the single-step division
   17792           instruction `div1' to perform the operation.  Division by
   17793           zero calculates an unspecified result and does not trap.
   17794           This is the default except for SH4, SH2A and SHcompact.
   17795 
   17796     `call-fp'
   17797           Calls a library function that performs the operation in
   17798           double precision floating point.  Division by zero causes a
   17799           floating-point exception.  This is the default for SHcompact
   17800           with FPU.  Specifying this for targets that do not have a
   17801           double precision FPU will default to `call-div1'.
   17802 
   17803     `call-table'
   17804           Calls a library function that uses a lookup table for small
   17805           divisors and the `div1' instruction with case distinction for
   17806           larger divisors.  Division by zero calculates an unspecified
   17807           result and does not trap.  This is the default for SH4.
   17808           Specifying this for targets that do not have dynamic shift
   17809           instructions will default to `call-div1'.
   17810 
   17811 
   17812      When a division strategy has not been specified the default
   17813      strategy will be selected based on the current target.  For SH2A
   17814      the default strategy is to use the `divs' and `divu' instructions
   17815      instead of library function calls.
   17816 
   17817 `-maccumulate-outgoing-args'
   17818      Reserve space once for outgoing arguments in the function prologue
   17819      rather than around each call.  Generally beneficial for
   17820      performance and size.  Also needed for unwinding to avoid changing
   17821      the stack frame around conditional code.
   17822 
   17823 `-mdivsi3_libfunc=NAME'
   17824      Set the name of the library function used for 32-bit signed
   17825      division to NAME.  This only affects the name used in the `call'
   17826      and `inv:call' division strategies, and the compiler still expects
   17827      the same sets of input/output/clobbered registers as if this
   17828      option were not present.
   17829 
   17830 `-mfixed-range=REGISTER-RANGE'
   17831      Generate code treating the given register range as fixed registers.
   17832      A fixed register is one that the register allocator can not use.
   17833      This is useful when compiling kernel code.  A register range is
   17834      specified as two registers separated by a dash.  Multiple register
   17835      ranges can be specified separated by a comma.
   17836 
   17837 `-mindexed-addressing'
   17838      Enable the use of the indexed addressing mode for
   17839      SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
   17840      implement 32-bit wrap-around semantics for the indexed addressing
   17841      mode.  The architecture allows the implementation of processors
   17842      with 64-bit MMU, which the OS could use to get 32-bit addressing,
   17843      but since no current hardware implementation supports this or any
   17844      other way to make the indexed addressing mode safe to use in the
   17845      32-bit ABI, the default is `-mno-indexed-addressing'.
   17846 
   17847 `-mgettrcost=NUMBER'
   17848      Set the cost assumed for the `gettr' instruction to NUMBER.  The
   17849      default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
   17850 
   17851 `-mpt-fixed'
   17852      Assume `pt*' instructions won't trap.  This generally generates
   17853      better-scheduled code, but is unsafe on current hardware.  The
   17854      current architecture definition says that `ptabs' and `ptrel' trap
   17855      when the target anded with 3 is 3.  This has the unintentional
   17856      effect of making it unsafe to schedule these instructions before a
   17857      branch, or hoist them out of a loop.  For example,
   17858      `__do_global_ctors', a part of `libgcc' that runs constructors at
   17859      program startup, calls functions in a list which is delimited by
   17860      -1.  With the `-mpt-fixed' option, the `ptabs' is done before
   17861      testing against -1.  That means that all the constructors run a
   17862      bit more quickly, but when the loop comes to the end of the list,
   17863      the program crashes because `ptabs' loads -1 into a target
   17864      register.
   17865 
   17866      Since this option is unsafe for any hardware implementing the
   17867      current architecture specification, the default is
   17868      `-mno-pt-fixed'.  Unless specified explicitly with `-mgettrcost',
   17869      `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters
   17870      register allocation from using target registers for storing
   17871      ordinary integers.
   17872 
   17873 `-minvalid-symbols'
   17874      Assume symbols might be invalid.  Ordinary function symbols
   17875      generated by the compiler are always valid to load with
   17876      `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with
   17877      assembler and/or linker tricks it is possible to generate symbols
   17878      that cause `ptabs' or `ptrel' to trap.  This option is only
   17879      meaningful when `-mno-pt-fixed' is in effect.  It prevents
   17880      cross-basic-block CSE, hoisting and most scheduling of symbol
   17881      loads.  The default is `-mno-invalid-symbols'.
   17882 
   17883 `-mbranch-cost=NUM'
   17884      Assume NUM to be the cost for a branch instruction.  Higher numbers
   17885      make the compiler try to generate more branch-free code if
   17886      possible.  If not specified the value is selected depending on the
   17887      processor type that is being compiled for.
   17888 
   17889 `-mzdcbranch'
   17890 `-mno-zdcbranch'
   17891      Assume (do not assume) that zero displacement conditional branch
   17892      instructions `bt' and `bf' are fast.  If `-mzdcbranch' is
   17893      specified, the compiler will try to prefer zero displacement
   17894      branch code sequences.  This is enabled by default when generating
   17895      code for SH4 and SH4A.  It can be explicitly disabled by
   17896      specifying `-mno-zdcbranch'.
   17897 
   17898 `-mcbranchdi'
   17899      Enable the `cbranchdi4' instruction pattern.
   17900 
   17901 `-mcmpeqdi'
   17902      Emit the `cmpeqdi_t' instruction pattern even when `-mcbranchdi'
   17903      is in effect.
   17904 
   17905 `-mfused-madd'
   17906 `-mno-fused-madd'
   17907      Generate code that uses (does not use) the floating-point multiply
   17908      and accumulate instructions.  These instructions are generated by
   17909      default if hardware floating point is used.  The machine-dependent
   17910      `-mfused-madd' option is now mapped to the machine-independent
   17911      `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
   17912      `-ffp-contract=off'.
   17913 
   17914 `-mfsca'
   17915 `-mno-fsca'
   17916      Allow or disallow the compiler to emit the `fsca' instruction for
   17917      sine and cosine approximations.  The option `-mfsca' must be used
   17918      in combination with `-funsafe-math-optimizations'.  It is enabled
   17919      by default when generating code for SH4A.  Using `-mno-fsca'
   17920      disables sine and cosine approximations even if
   17921      `-funsafe-math-optimizations' is in effect.
   17922 
   17923 `-mfsrra'
   17924 `-mno-fsrra'
   17925      Allow or disallow the compiler to emit the `fsrra' instruction for
   17926      reciprocal square root approximations.  The option `-mfsrra' must
   17927      be used in combination with `-funsafe-math-optimizations' and
   17928      `-ffinite-math-only'.  It is enabled by default when generating
   17929      code for SH4A.  Using `-mno-fsrra' disables reciprocal square root
   17930      approximations even if `-funsafe-math-optimizations' and
   17931      `-ffinite-math-only' are in effect.
   17932 
   17933 `-mpretend-cmove'
   17934      Prefer zero-displacement conditional branches for conditional move
   17935      instruction patterns.  This can result in faster code on the SH4
   17936      processor.
   17937 
   17938 
   17939 
   17940 File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
   17941 
   17942 3.17.39 Solaris 2 Options
   17943 -------------------------
   17944 
   17945 These `-m' options are supported on Solaris 2:
   17946 
   17947 `-mimpure-text'
   17948      `-mimpure-text', used in addition to `-shared', tells the compiler
   17949      to not pass `-z text' to the linker when linking a shared object.
   17950      Using this option, you can link position-dependent code into a
   17951      shared object.
   17952 
   17953      `-mimpure-text' suppresses the "relocations remain against
   17954      allocatable but non-writable sections" linker error message.
   17955      However, the necessary relocations trigger copy-on-write, and the
   17956      shared object is not actually shared across processes.  Instead of
   17957      using `-mimpure-text', you should compile all source code with
   17958      `-fpic' or `-fPIC'.
   17959 
   17960 
   17961  These switches are supported in addition to the above on Solaris 2:
   17962 
   17963 `-pthreads'
   17964      Add support for multithreading using the POSIX threads library.
   17965      This option sets flags for both the preprocessor and linker.  This
   17966      option does not affect the thread safety of object code produced
   17967      by the compiler or that of libraries supplied with it.
   17968 
   17969 `-pthread'
   17970      This is a synonym for `-pthreads'.
   17971 
   17972 
   17973 File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
   17974 
   17975 3.17.40 SPARC Options
   17976 ---------------------
   17977 
   17978 These `-m' options are supported on the SPARC:
   17979 
   17980 `-mno-app-regs'
   17981 `-mapp-regs'
   17982      Specify `-mapp-regs' to generate output using the global registers
   17983      2 through 4, which the SPARC SVR4 ABI reserves for applications.
   17984      Like the global register 1, each global register 2 through 4 is
   17985      then treated as an allocable register that is clobbered by
   17986      function calls.  This is the default.
   17987 
   17988      To be fully SVR4 ABI-compliant at the cost of some performance
   17989      loss, specify `-mno-app-regs'.  You should compile libraries and
   17990      system software with this option.
   17991 
   17992 `-mflat'
   17993 `-mno-flat'
   17994      With `-mflat', the compiler does not generate save/restore
   17995      instructions and uses a "flat" or single register window model.
   17996      This model is compatible with the regular register window model.
   17997      The local registers and the input registers (0-5) are still
   17998      treated as "call-saved" registers and are saved on the stack as
   17999      needed.
   18000 
   18001      With `-mno-flat' (the default), the compiler generates save/restore
   18002      instructions (except for leaf functions).  This is the normal
   18003      operating mode.
   18004 
   18005 `-mfpu'
   18006 `-mhard-float'
   18007      Generate output containing floating-point instructions.  This is
   18008      the default.
   18009 
   18010 `-mno-fpu'
   18011 `-msoft-float'
   18012      Generate output containing library calls for floating point.
   18013      *Warning:* the requisite libraries are not available for all SPARC
   18014      targets.  Normally the facilities of the machine's usual C
   18015      compiler are used, but this cannot be done directly in
   18016      cross-compilation.  You must make your own arrangements to provide
   18017      suitable library functions for cross-compilation.  The embedded
   18018      targets `sparc-*-aout' and `sparclite-*-*' do provide software
   18019      floating-point support.
   18020 
   18021      `-msoft-float' changes the calling convention in the output file;
   18022      therefore, it is only useful if you compile _all_ of a program with
   18023      this option.  In particular, you need to compile `libgcc.a', the
   18024      library that comes with GCC, with `-msoft-float' in order for this
   18025      to work.
   18026 
   18027 `-mhard-quad-float'
   18028      Generate output containing quad-word (long double) floating-point
   18029      instructions.
   18030 
   18031 `-msoft-quad-float'
   18032      Generate output containing library calls for quad-word (long
   18033      double) floating-point instructions.  The functions called are
   18034      those specified in the SPARC ABI.  This is the default.
   18035 
   18036      As of this writing, there are no SPARC implementations that have
   18037      hardware support for the quad-word floating-point instructions.
   18038      They all invoke a trap handler for one of these instructions, and
   18039      then the trap handler emulates the effect of the instruction.
   18040      Because of the trap handler overhead, this is much slower than
   18041      calling the ABI library routines.  Thus the `-msoft-quad-float'
   18042      option is the default.
   18043 
   18044 `-mno-unaligned-doubles'
   18045 `-munaligned-doubles'
   18046      Assume that doubles have 8-byte alignment.  This is the default.
   18047 
   18048      With `-munaligned-doubles', GCC assumes that doubles have 8-byte
   18049      alignment only if they are contained in another type, or if they
   18050      have an absolute address.  Otherwise, it assumes they have 4-byte
   18051      alignment.  Specifying this option avoids some rare compatibility
   18052      problems with code generated by other compilers.  It is not the
   18053      default because it results in a performance loss, especially for
   18054      floating-point code.
   18055 
   18056 `-muser-mode'
   18057 `-mno-user-mode'
   18058      Do not generate code that can only run in supervisor mode.  This
   18059      is relevant only for the `casa' instruction emitted for the LEON3
   18060      processor.  The default is `-mno-user-mode'.
   18061 
   18062 `-mno-faster-structs'
   18063 `-mfaster-structs'
   18064      With `-mfaster-structs', the compiler assumes that structures
   18065      should have 8-byte alignment.  This enables the use of pairs of
   18066      `ldd' and `std' instructions for copies in structure assignment,
   18067      in place of twice as many `ld' and `st' pairs.  However, the use
   18068      of this changed alignment directly violates the SPARC ABI.  Thus,
   18069      it's intended only for use on targets where the developer
   18070      acknowledges that their resulting code is not directly in line with
   18071      the rules of the ABI.
   18072 
   18073 `-mcpu=CPU_TYPE'
   18074      Set the instruction set, register set, and instruction scheduling
   18075      parameters for machine type CPU_TYPE.  Supported values for
   18076      CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
   18077      `leon', `leon3', `sparclite', `f930', `f934', `sparclite86x',
   18078      `sparclet', `tsc701', `v9', `ultrasparc', `ultrasparc3',
   18079      `niagara', `niagara2', `niagara3' and `niagara4'.
   18080 
   18081      Native Solaris and GNU/Linux toolchains also support the value
   18082      `native', which selects the best architecture option for the host
   18083      processor.  `-mcpu=native' has no effect if GCC does not recognize
   18084      the processor.
   18085 
   18086      Default instruction scheduling parameters are used for values that
   18087      select an architecture and not an implementation.  These are `v7',
   18088      `v8', `sparclite', `sparclet', `v9'.
   18089 
   18090      Here is a list of each supported architecture and their supported
   18091      implementations.
   18092 
   18093     v7
   18094           cypress
   18095 
   18096     v8
   18097           supersparc, hypersparc, leon, leon3
   18098 
   18099     sparclite
   18100           f930, f934, sparclite86x
   18101 
   18102     sparclet
   18103           tsc701
   18104 
   18105     v9
   18106           ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
   18107 
   18108      By default (unless configured otherwise), GCC generates code for
   18109      the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
   18110      the compiler additionally optimizes it for the Cypress CY7C602
   18111      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
   18112      also appropriate for the older SPARCStation 1, 2, IPX etc.
   18113 
   18114      With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
   18115      architecture.  The only difference from V7 code is that the
   18116      compiler emits the integer multiply and integer divide
   18117      instructions which exist in SPARC-V8 but not in SPARC-V7.  With
   18118      `-mcpu=supersparc', the compiler additionally optimizes it for the
   18119      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
   18120      series.
   18121 
   18122      With `-mcpu=sparclite', GCC generates code for the SPARClite
   18123      variant of the SPARC architecture.  This adds the integer
   18124      multiply, integer divide step and scan (`ffs') instructions which
   18125      exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
   18126      compiler additionally optimizes it for the Fujitsu MB86930 chip,
   18127      which is the original SPARClite, with no FPU.  With `-mcpu=f934',
   18128      the compiler additionally optimizes it for the Fujitsu MB86934
   18129      chip, which is the more recent SPARClite with FPU.
   18130 
   18131      With `-mcpu=sparclet', GCC generates code for the SPARClet variant
   18132      of the SPARC architecture.  This adds the integer multiply,
   18133      multiply/accumulate, integer divide step and scan (`ffs')
   18134      instructions which exist in SPARClet but not in SPARC-V7.  With
   18135      `-mcpu=tsc701', the compiler additionally optimizes it for the
   18136      TEMIC SPARClet chip.
   18137 
   18138      With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
   18139      architecture.  This adds 64-bit integer and floating-point move
   18140      instructions, 3 additional floating-point condition code registers
   18141      and conditional move instructions.  With `-mcpu=ultrasparc', the
   18142      compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
   18143      chips.  With `-mcpu=ultrasparc3', the compiler additionally
   18144      optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
   18145      chips.  With `-mcpu=niagara', the compiler additionally optimizes
   18146      it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
   18147      compiler additionally optimizes it for Sun UltraSPARC T2 chips.
   18148      With `-mcpu=niagara3', the compiler additionally optimizes it for
   18149      Sun UltraSPARC T3 chips.  With `-mcpu=niagara4', the compiler
   18150      additionally optimizes it for Sun UltraSPARC T4 chips.
   18151 
   18152 `-mtune=CPU_TYPE'
   18153      Set the instruction scheduling parameters for machine type
   18154      CPU_TYPE, but do not set the instruction set or register set that
   18155      the option `-mcpu=CPU_TYPE' does.
   18156 
   18157      The same values for `-mcpu=CPU_TYPE' can be used for
   18158      `-mtune=CPU_TYPE', but the only useful values are those that
   18159      select a particular CPU implementation.  Those are `cypress',
   18160      `supersparc', `hypersparc', `leon', `leon3', `f930', `f934',
   18161      `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara',
   18162      `niagara2', `niagara3' and `niagara4'.  With native Solaris and
   18163      GNU/Linux toolchains, `native' can also be used.
   18164 
   18165 `-mv8plus'
   18166 `-mno-v8plus'
   18167      With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
   18168      difference from the V8 ABI is that the global and out registers are
   18169      considered 64 bits wide.  This is enabled by default on Solaris in
   18170      32-bit mode for all SPARC-V9 processors.
   18171 
   18172 `-mvis'
   18173 `-mno-vis'
   18174      With `-mvis', GCC generates code that takes advantage of the
   18175      UltraSPARC Visual Instruction Set extensions.  The default is
   18176      `-mno-vis'.
   18177 
   18178 `-mvis2'
   18179 `-mno-vis2'
   18180      With `-mvis2', GCC generates code that takes advantage of version
   18181      2.0 of the UltraSPARC Visual Instruction Set extensions.  The
   18182      default is `-mvis2' when targeting a cpu that supports such
   18183      instructions, such as UltraSPARC-III and later.  Setting `-mvis2'
   18184      also sets `-mvis'.
   18185 
   18186 `-mvis3'
   18187 `-mno-vis3'
   18188      With `-mvis3', GCC generates code that takes advantage of version
   18189      3.0 of the UltraSPARC Visual Instruction Set extensions.  The
   18190      default is `-mvis3' when targeting a cpu that supports such
   18191      instructions, such as niagara-3 and later.  Setting `-mvis3' also
   18192      sets `-mvis2' and `-mvis'.
   18193 
   18194 `-mcbcond'
   18195 `-mno-cbcond'
   18196      With `-mcbcond', GCC generates code that takes advantage of
   18197      compare-and-branch instructions, as defined in the Sparc
   18198      Architecture 2011.  The default is `-mcbcond' when targeting a cpu
   18199      that supports such instructions, such as niagara-4 and later.
   18200 
   18201 `-mpopc'
   18202 `-mno-popc'
   18203      With `-mpopc', GCC generates code that takes advantage of the
   18204      UltraSPARC population count instruction.  The default is `-mpopc'
   18205      when targeting a cpu that supports such instructions, such as
   18206      Niagara-2 and later.
   18207 
   18208 `-mfmaf'
   18209 `-mno-fmaf'
   18210      With `-mfmaf', GCC generates code that takes advantage of the
   18211      UltraSPARC Fused Multiply-Add Floating-point extensions.  The
   18212      default is `-mfmaf' when targeting a cpu that supports such
   18213      instructions, such as Niagara-3 and later.
   18214 
   18215 `-mfix-at697f'
   18216      Enable the documented workaround for the single erratum of the
   18217      Atmel AT697F processor (which corresponds to erratum #13 of the
   18218      AT697E processor).
   18219 
   18220 `-mfix-ut699'
   18221      Enable the documented workarounds for the floating-point errata
   18222      and the data cache nullify errata of the UT699 processor.
   18223 
   18224  These `-m' options are supported in addition to the above on SPARC-V9
   18225 processors in 64-bit environments:
   18226 
   18227 `-m32'
   18228 `-m64'
   18229      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   18230      environment sets int, long and pointer to 32 bits.  The 64-bit
   18231      environment sets int to 32 bits and long and pointer to 64 bits.
   18232 
   18233 `-mcmodel=WHICH'
   18234      Set the code model to one of
   18235 
   18236     `medlow'
   18237           The Medium/Low code model: 64-bit addresses, programs must be
   18238           linked in the low 32 bits of memory.  Programs can be
   18239           statically or dynamically linked.
   18240 
   18241     `medmid'
   18242           The Medium/Middle code model: 64-bit addresses, programs must
   18243           be linked in the low 44 bits of memory, the text and data
   18244           segments must be less than 2GB in size and the data segment
   18245           must be located within 2GB of the text segment.
   18246 
   18247     `medany'
   18248           The Medium/Anywhere code model: 64-bit addresses, programs
   18249           may be linked anywhere in memory, the text and data segments
   18250           must be less than 2GB in size and the data segment must be
   18251           located within 2GB of the text segment.
   18252 
   18253     `embmedany'
   18254           The Medium/Anywhere code model for embedded systems: 64-bit
   18255           addresses, the text and data segments must be less than 2GB in
   18256           size, both starting anywhere in memory (determined at link
   18257           time).  The global register %g4 points to the base of the
   18258           data segment.  Programs are statically linked and PIC is not
   18259           supported.
   18260 
   18261 `-mmemory-model=MEM-MODEL'
   18262      Set the memory model in force on the processor to one of
   18263 
   18264     `default'
   18265           The default memory model for the processor and operating
   18266           system.
   18267 
   18268     `rmo'
   18269           Relaxed Memory Order
   18270 
   18271     `pso'
   18272           Partial Store Order
   18273 
   18274     `tso'
   18275           Total Store Order
   18276 
   18277     `sc'
   18278           Sequential Consistency
   18279 
   18280      These memory models are formally defined in Appendix D of the
   18281      Sparc V9 architecture manual, as set in the processor's
   18282      `PSTATE.MM' field.
   18283 
   18284 `-mstack-bias'
   18285 `-mno-stack-bias'
   18286      With `-mstack-bias', GCC assumes that the stack pointer, and frame
   18287      pointer if present, are offset by -2047 which must be added back
   18288      when making stack frame references.  This is the default in 64-bit
   18289      mode.  Otherwise, assume no such offset is present.
   18290 
   18291 
   18292 File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
   18293 
   18294 3.17.41 SPU Options
   18295 -------------------
   18296 
   18297 These `-m' options are supported on the SPU:
   18298 
   18299 `-mwarn-reloc'
   18300 `-merror-reloc'
   18301      The loader for SPU does not handle dynamic relocations.  By
   18302      default, GCC gives an error when it generates code that requires a
   18303      dynamic relocation.  `-mno-error-reloc' disables the error,
   18304      `-mwarn-reloc' generates a warning instead.
   18305 
   18306 `-msafe-dma'
   18307 `-munsafe-dma'
   18308      Instructions that initiate or test completion of DMA must not be
   18309      reordered with respect to loads and stores of the memory that is
   18310      being accessed.  With `-munsafe-dma' you must use the `volatile'
   18311      keyword to protect memory accesses, but that can lead to
   18312      inefficient code in places where the memory is known to not
   18313      change.  Rather than mark the memory as volatile, you can use
   18314      `-msafe-dma' to tell the compiler to treat the DMA instructions as
   18315      potentially affecting all memory.
   18316 
   18317 `-mbranch-hints'
   18318      By default, GCC generates a branch hint instruction to avoid
   18319      pipeline stalls for always-taken or probably-taken branches.  A
   18320      hint is not generated closer than 8 instructions away from its
   18321      branch.  There is little reason to disable them, except for
   18322      debugging purposes, or to make an object a little bit smaller.
   18323 
   18324 `-msmall-mem'
   18325 `-mlarge-mem'
   18326      By default, GCC generates code assuming that addresses are never
   18327      larger than 18 bits.  With `-mlarge-mem' code is generated that
   18328      assumes a full 32-bit address.
   18329 
   18330 `-mstdmain'
   18331      By default, GCC links against startup code that assumes the
   18332      SPU-style main function interface (which has an unconventional
   18333      parameter list).  With `-mstdmain', GCC links your program against
   18334      startup code that assumes a C99-style interface to `main',
   18335      including a local copy of `argv' strings.
   18336 
   18337 `-mfixed-range=REGISTER-RANGE'
   18338      Generate code treating the given register range as fixed registers.
   18339      A fixed register is one that the register allocator cannot use.
   18340      This is useful when compiling kernel code.  A register range is
   18341      specified as two registers separated by a dash.  Multiple register
   18342      ranges can be specified separated by a comma.
   18343 
   18344 `-mea32'
   18345 `-mea64'
   18346      Compile code assuming that pointers to the PPU address space
   18347      accessed via the `__ea' named address space qualifier are either
   18348      32 or 64 bits wide.  The default is 32 bits.  As this is an
   18349      ABI-changing option, all object code in an executable must be
   18350      compiled with the same setting.
   18351 
   18352 `-maddress-space-conversion'
   18353 `-mno-address-space-conversion'
   18354      Allow/disallow treating the `__ea' address space as superset of
   18355      the generic address space.  This enables explicit type casts
   18356      between `__ea' and generic pointer as well as implicit conversions
   18357      of generic pointers to `__ea' pointers.  The default is to allow
   18358      address space pointer conversions.
   18359 
   18360 `-mcache-size=CACHE-SIZE'
   18361      This option controls the version of libgcc that the compiler links
   18362      to an executable and selects a software-managed cache for
   18363      accessing variables in the `__ea' address space with a particular
   18364      cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
   18365      `64' and `128'.  The default cache size is 64KB.
   18366 
   18367 `-matomic-updates'
   18368 `-mno-atomic-updates'
   18369      This option controls the version of libgcc that the compiler links
   18370      to an executable and selects whether atomic updates to the
   18371      software-managed cache of PPU-side variables are used.  If you use
   18372      atomic updates, changes to a PPU variable from SPU code using the
   18373      `__ea' named address space qualifier do not interfere with changes
   18374      to other PPU variables residing in the same cache line from PPU
   18375      code.  If you do not use atomic updates, such interference may
   18376      occur; however, writing back cache lines is more efficient.  The
   18377      default behavior is to use atomic updates.
   18378 
   18379 `-mdual-nops'
   18380 `-mdual-nops=N'
   18381      By default, GCC inserts nops to increase dual issue when it expects
   18382      it to increase performance.  N can be a value from 0 to 10.  A
   18383      smaller N inserts fewer nops.  10 is the default, 0 is the same as
   18384      `-mno-dual-nops'.  Disabled with `-Os'.
   18385 
   18386 `-mhint-max-nops=N'
   18387      Maximum number of nops to insert for a branch hint.  A branch hint
   18388      must be at least 8 instructions away from the branch it is
   18389      affecting.  GCC inserts up to N nops to enforce this, otherwise it
   18390      does not generate the branch hint.
   18391 
   18392 `-mhint-max-distance=N'
   18393      The encoding of the branch hint instruction limits the hint to be
   18394      within 256 instructions of the branch it is affecting.  By
   18395      default, GCC makes sure it is within 125.
   18396 
   18397 `-msafe-hints'
   18398      Work around a hardware bug that causes the SPU to stall
   18399      indefinitely.  By default, GCC inserts the `hbrp' instruction to
   18400      make sure this stall won't happen.
   18401 
   18402 
   18403 
   18404 File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
   18405 
   18406 3.17.42 Options for System V
   18407 ----------------------------
   18408 
   18409 These additional options are available on System V Release 4 for
   18410 compatibility with other compilers on those systems:
   18411 
   18412 `-G'
   18413      Create a shared object.  It is recommended that `-symbolic' or
   18414      `-shared' be used instead.
   18415 
   18416 `-Qy'
   18417      Identify the versions of each tool used by the compiler, in a
   18418      `.ident' assembler directive in the output.
   18419 
   18420 `-Qn'
   18421      Refrain from adding `.ident' directives to the output file (this is
   18422      the default).
   18423 
   18424 `-YP,DIRS'
   18425      Search the directories DIRS, and no others, for libraries
   18426      specified with `-l'.
   18427 
   18428 `-Ym,DIR'
   18429      Look in the directory DIR to find the M4 preprocessor.  The
   18430      assembler uses this option.
   18431 
   18432 
   18433 File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
   18434 
   18435 3.17.43 TILE-Gx Options
   18436 -----------------------
   18437 
   18438 These `-m' options are supported on the TILE-Gx:
   18439 
   18440 `-mcmodel=small'
   18441      Generate code for the small model.  The distance for direct calls
   18442      is limited to 500M in either direction.  PC-relative addresses are
   18443      32 bits.  Absolute addresses support the full address range.
   18444 
   18445 `-mcmodel=large'
   18446      Generate code for the large model.  There is no limitation on call
   18447      distance, pc-relative addresses, or absolute addresses.
   18448 
   18449 `-mcpu=NAME'
   18450      Selects the type of CPU to be targeted.  Currently the only
   18451      supported type is `tilegx'.
   18452 
   18453 `-m32'
   18454 `-m64'
   18455      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   18456      environment sets int, long, and pointer to 32 bits.  The 64-bit
   18457      environment sets int to 32 bits and long and pointer to 64 bits.
   18458 
   18459 
   18460 File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
   18461 
   18462 3.17.44 TILEPro Options
   18463 -----------------------
   18464 
   18465 These `-m' options are supported on the TILEPro:
   18466 
   18467 `-mcpu=NAME'
   18468      Selects the type of CPU to be targeted.  Currently the only
   18469      supported type is `tilepro'.
   18470 
   18471 `-m32'
   18472      Generate code for a 32-bit environment, which sets int, long, and
   18473      pointer to 32 bits.  This is the only supported behavior so the
   18474      flag is essentially ignored.
   18475 
   18476 
   18477 File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
   18478 
   18479 3.17.45 V850 Options
   18480 --------------------
   18481 
   18482 These `-m' options are defined for V850 implementations:
   18483 
   18484 `-mlong-calls'
   18485 `-mno-long-calls'
   18486      Treat all calls as being far away (near).  If calls are assumed to
   18487      be far away, the compiler always loads the function's address into
   18488      a register, and calls indirect through the pointer.
   18489 
   18490 `-mno-ep'
   18491 `-mep'
   18492      Do not optimize (do optimize) basic blocks that use the same index
   18493      pointer 4 or more times to copy pointer into the `ep' register, and
   18494      use the shorter `sld' and `sst' instructions.  The `-mep' option
   18495      is on by default if you optimize.
   18496 
   18497 `-mno-prolog-function'
   18498 `-mprolog-function'
   18499      Do not use (do use) external functions to save and restore
   18500      registers at the prologue and epilogue of a function.  The
   18501      external functions are slower, but use less code space if more
   18502      than one function saves the same number of registers.  The
   18503      `-mprolog-function' option is on by default if you optimize.
   18504 
   18505 `-mspace'
   18506      Try to make the code as small as possible.  At present, this just
   18507      turns on the `-mep' and `-mprolog-function' options.
   18508 
   18509 `-mtda=N'
   18510      Put static or global variables whose size is N bytes or less into
   18511      the tiny data area that register `ep' points to.  The tiny data
   18512      area can hold up to 256 bytes in total (128 bytes for byte
   18513      references).
   18514 
   18515 `-msda=N'
   18516      Put static or global variables whose size is N bytes or less into
   18517      the small data area that register `gp' points to.  The small data
   18518      area can hold up to 64 kilobytes.
   18519 
   18520 `-mzda=N'
   18521      Put static or global variables whose size is N bytes or less into
   18522      the first 32 kilobytes of memory.
   18523 
   18524 `-mv850'
   18525      Specify that the target processor is the V850.
   18526 
   18527 `-mv850e3v5'
   18528      Specify that the target processor is the V850E3V5.  The
   18529      preprocessor constant `__v850e3v5__' is defined if this option is
   18530      used.
   18531 
   18532 `-mv850e2v4'
   18533      Specify that the target processor is the V850E3V5.  This is an
   18534      alias for the `-mv850e3v5' option.
   18535 
   18536 `-mv850e2v3'
   18537      Specify that the target processor is the V850E2V3.  The
   18538      preprocessor constant `__v850e2v3__' is defined if this option is
   18539      used.
   18540 
   18541 `-mv850e2'
   18542      Specify that the target processor is the V850E2.  The preprocessor
   18543      constant `__v850e2__' is defined if this option is used.
   18544 
   18545 `-mv850e1'
   18546      Specify that the target processor is the V850E1.  The preprocessor
   18547      constants `__v850e1__' and `__v850e__' are defined if this option
   18548      is used.
   18549 
   18550 `-mv850es'
   18551      Specify that the target processor is the V850ES.  This is an alias
   18552      for the `-mv850e1' option.
   18553 
   18554 `-mv850e'
   18555      Specify that the target processor is the V850E.  The preprocessor
   18556      constant `__v850e__' is defined if this option is used.
   18557 
   18558      If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
   18559      nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default
   18560      target processor is chosen and the relevant `__v850*__'
   18561      preprocessor constant is defined.
   18562 
   18563      The preprocessor constants `__v850' and `__v851__' are always
   18564      defined, regardless of which processor variant is the target.
   18565 
   18566 `-mdisable-callt'
   18567 `-mno-disable-callt'
   18568      This option suppresses generation of the `CALLT' instruction for
   18569      the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
   18570      v850 architecture.
   18571 
   18572      This option is enabled by default when the RH850 ABI is in use
   18573      (see `-mrh850-abi'), and disabled by default when the GCC ABI is
   18574      in use.  If `CALLT' instructions are being generated then the C
   18575      preprocessor symbol `__V850_CALLT__' will be defined.
   18576 
   18577 `-mrelax'
   18578 `-mno-relax'
   18579      Pass on (or do not pass on) the `-mrelax' command line option to
   18580      the assembler.
   18581 
   18582 `-mlong-jumps'
   18583 `-mno-long-jumps'
   18584      Disable (or re-enable) the generation of PC-relative jump
   18585      instructions.
   18586 
   18587 `-msoft-float'
   18588 `-mhard-float'
   18589      Disable (or re-enable) the generation of hardware floating point
   18590      instructions.  This option is only significant when the target
   18591      architecture is `V850E2V3' or higher.  If hardware floating point
   18592      instructions are being generated then the C preprocessor symbol
   18593      `__FPU_OK__' will be defined, otherwise the symbol `__NO_FPU__'
   18594      will be defined.
   18595 
   18596 `-mloop'
   18597      Enables the use of the e3v5 LOOP instruction.  The use of this
   18598      instruction is not enabled by default when the e3v5 architecture is
   18599      selected because its use is still experimental.
   18600 
   18601 `-mrh850-abi'
   18602 `-mghs'
   18603      Enables support for the RH850 version of the V850 ABI.  This is the
   18604      default.  With this version of the ABI the following rules apply:
   18605 
   18606         * Integer sized structures and unions are returned via a memory
   18607           pointer rather than a register.
   18608 
   18609         * Large structures and unions (more than 8 bytes in size) are
   18610           passed by value.
   18611 
   18612         * Functions are aligned to 16-bit boundaries.
   18613 
   18614         * The `-m8byte-align' command line option is supported.
   18615 
   18616         * The `-mdisable-callt' command line option is enabled by
   18617           default.  The `-mno-disable-callt' command line option is not
   18618           supported.
   18619 
   18620      When this version of the ABI is enabled the C preprocessor symbol
   18621      `__V850_RH850_ABI__' is defined.
   18622 
   18623 `-mgcc-abi'
   18624      Enables support for the old GCC version of the V850 ABI.  With this
   18625      version of the ABI the following rules apply:
   18626 
   18627         * Integer sized structures and unions are returned in register
   18628           `r10'.
   18629 
   18630         * Large structures and unions (more than 8 bytes in size) are
   18631           passed by reference.
   18632 
   18633         * Functions are aligned to 32-bit boundaries, unless optimizing
   18634           for size.
   18635 
   18636         * The `-m8byte-align' command line option is not supported.
   18637 
   18638         * The `-mdisable-callt' command line option is supported but not
   18639           enabled by default.
   18640 
   18641      When this version of the ABI is enabled the C preprocessor symbol
   18642      `__V850_GCC_ABI__' is defined.
   18643 
   18644 `-m8byte-align'
   18645 `-mno-8byte-align'
   18646      Enables support for `doubles' and `long long' types to be aligned
   18647      on 8-byte boundaries.  The default is to restrict the alignment of
   18648      all objects to at most 4-bytes.  When `-m8byte-align' is in effect
   18649      the C preprocessor symbol `__V850_8BYTE_ALIGN__' will be defined.
   18650 
   18651 `-mbig-switch'
   18652      Generate code suitable for big switch tables.  Use this option
   18653      only if the assembler/linker complain about out of range branches
   18654      within a switch table.
   18655 
   18656 `-mapp-regs'
   18657      This option causes r2 and r5 to be used in the code generated by
   18658      the compiler.  This setting is the default.
   18659 
   18660 `-mno-app-regs'
   18661      This option causes r2 and r5 to be treated as fixed registers.
   18662 
   18663 
   18664 
   18665 File: gcc.info,  Node: VAX Options,  Next: VMS Options,  Prev: V850 Options,  Up: Submodel Options
   18666 
   18667 3.17.46 VAX Options
   18668 -------------------
   18669 
   18670 These `-m' options are defined for the VAX:
   18671 
   18672 `-munix'
   18673      Do not output certain jump instructions (`aobleq' and so on) that
   18674      the Unix assembler for the VAX cannot handle across long ranges.
   18675 
   18676 `-mgnu'
   18677      Do output those jump instructions, on the assumption that the GNU
   18678      assembler is being used.
   18679 
   18680 `-mg'
   18681      Output code for G-format floating-point numbers instead of
   18682      D-format.
   18683 
   18684 
   18685 File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: VAX Options,  Up: Submodel Options
   18686 
   18687 3.17.47 VMS Options
   18688 -------------------
   18689 
   18690 These `-m' options are defined for the VMS implementations:
   18691 
   18692 `-mvms-return-codes'
   18693      Return VMS condition codes from `main'. The default is to return
   18694      POSIX-style condition (e.g. error) codes.
   18695 
   18696 `-mdebug-main=PREFIX'
   18697      Flag the first routine whose name starts with PREFIX as the main
   18698      routine for the debugger.
   18699 
   18700 `-mmalloc64'
   18701      Default to 64-bit memory allocation routines.
   18702 
   18703 `-mpointer-size=SIZE'
   18704      Set the default size of pointers. Possible options for SIZE are
   18705      `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit
   18706      pointers, and `no' for supporting only 32 bit pointers.  The later
   18707      option disables `pragma pointer_size'.
   18708 
   18709 
   18710 File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VMS Options,  Up: Submodel Options
   18711 
   18712 3.17.48 VxWorks Options
   18713 -----------------------
   18714 
   18715 The options in this section are defined for all VxWorks targets.
   18716 Options specific to the target hardware are listed with the other
   18717 options for that target.
   18718 
   18719 `-mrtp'
   18720      GCC can generate code for both VxWorks kernels and real time
   18721      processes (RTPs).  This option switches from the former to the
   18722      latter.  It also defines the preprocessor macro `__RTP__'.
   18723 
   18724 `-non-static'
   18725      Link an RTP executable against shared libraries rather than static
   18726      libraries.  The options `-static' and `-shared' can also be used
   18727      for RTPs (*note Link Options::); `-static' is the default.
   18728 
   18729 `-Bstatic'
   18730 `-Bdynamic'
   18731      These options are passed down to the linker.  They are defined for
   18732      compatibility with Diab.
   18733 
   18734 `-Xbind-lazy'
   18735      Enable lazy binding of function calls.  This option is equivalent
   18736      to `-Wl,-z,now' and is defined for compatibility with Diab.
   18737 
   18738 `-Xbind-now'
   18739      Disable lazy binding of function calls.  This option is the
   18740      default and is defined for compatibility with Diab.
   18741 
   18742 
   18743 File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
   18744 
   18745 3.17.49 x86-64 Options
   18746 ----------------------
   18747 
   18748 These are listed under *Note i386 and x86-64 Options::.
   18749 
   18750 
   18751 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
   18752 
   18753 3.17.50 Xstormy16 Options
   18754 -------------------------
   18755 
   18756 These options are defined for Xstormy16:
   18757 
   18758 `-msim'
   18759      Choose startup files and linker script suitable for the simulator.
   18760 
   18761 
   18762 File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
   18763 
   18764 3.17.51 Xtensa Options
   18765 ----------------------
   18766 
   18767 These options are supported for Xtensa targets:
   18768 
   18769 `-mconst16'
   18770 `-mno-const16'
   18771      Enable or disable use of `CONST16' instructions for loading
   18772      constant values.  The `CONST16' instruction is currently not a
   18773      standard option from Tensilica.  When enabled, `CONST16'
   18774      instructions are always used in place of the standard `L32R'
   18775      instructions.  The use of `CONST16' is enabled by default only if
   18776      the `L32R' instruction is not available.
   18777 
   18778 `-mfused-madd'
   18779 `-mno-fused-madd'
   18780      Enable or disable use of fused multiply/add and multiply/subtract
   18781      instructions in the floating-point option.  This has no effect if
   18782      the floating-point option is not also enabled.  Disabling fused
   18783      multiply/add and multiply/subtract instructions forces the
   18784      compiler to use separate instructions for the multiply and
   18785      add/subtract operations.  This may be desirable in some cases
   18786      where strict IEEE 754-compliant results are required: the fused
   18787      multiply add/subtract instructions do not round the intermediate
   18788      result, thereby producing results with _more_ bits of precision
   18789      than specified by the IEEE standard.  Disabling fused multiply
   18790      add/subtract instructions also ensures that the program output is
   18791      not sensitive to the compiler's ability to combine multiply and
   18792      add/subtract operations.
   18793 
   18794 `-mserialize-volatile'
   18795 `-mno-serialize-volatile'
   18796      When this option is enabled, GCC inserts `MEMW' instructions before
   18797      `volatile' memory references to guarantee sequential consistency.
   18798      The default is `-mserialize-volatile'.  Use
   18799      `-mno-serialize-volatile' to omit the `MEMW' instructions.
   18800 
   18801 `-mforce-no-pic'
   18802      For targets, like GNU/Linux, where all user-mode Xtensa code must
   18803      be position-independent code (PIC), this option disables PIC for
   18804      compiling kernel code.
   18805 
   18806 `-mtext-section-literals'
   18807 `-mno-text-section-literals'
   18808      Control the treatment of literal pools.  The default is
   18809      `-mno-text-section-literals', which places literals in a separate
   18810      section in the output file.  This allows the literal pool to be
   18811      placed in a data RAM/ROM, and it also allows the linker to combine
   18812      literal pools from separate object files to remove redundant
   18813      literals and improve code size.  With `-mtext-section-literals',
   18814      the literals are interspersed in the text section in order to keep
   18815      them as close as possible to their references.  This may be
   18816      necessary for large assembly files.
   18817 
   18818 `-mtarget-align'
   18819 `-mno-target-align'
   18820      When this option is enabled, GCC instructs the assembler to
   18821      automatically align instructions to reduce branch penalties at the
   18822      expense of some code density.  The assembler attempts to widen
   18823      density instructions to align branch targets and the instructions
   18824      following call instructions.  If there are not enough preceding
   18825      safe density instructions to align a target, no widening is
   18826      performed.  The default is `-mtarget-align'.  These options do not
   18827      affect the treatment of auto-aligned instructions like `LOOP',
   18828      which the assembler always aligns, either by widening density
   18829      instructions or by inserting NOP instructions.
   18830 
   18831 `-mlongcalls'
   18832 `-mno-longcalls'
   18833      When this option is enabled, GCC instructs the assembler to
   18834      translate direct calls to indirect calls unless it can determine
   18835      that the target of a direct call is in the range allowed by the
   18836      call instruction.  This translation typically occurs for calls to
   18837      functions in other source files.  Specifically, the assembler
   18838      translates a direct `CALL' instruction into an `L32R' followed by
   18839      a `CALLX' instruction.  The default is `-mno-longcalls'.  This
   18840      option should be used in programs where the call target can
   18841      potentially be out of range.  This option is implemented in the
   18842      assembler, not the compiler, so the assembly code generated by GCC
   18843      still shows direct call instructions--look at the disassembled
   18844      object code to see the actual instructions.  Note that the
   18845      assembler uses an indirect call for every cross-file call, not
   18846      just those that really are out of range.
   18847 
   18848 
   18849 File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
   18850 
   18851 3.17.52 zSeries Options
   18852 -----------------------
   18853 
   18854 These are listed under *Note S/390 and zSeries Options::.
   18855 
   18856 
   18857 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
   18858 
   18859 3.18 Options for Code Generation Conventions
   18860 ============================================
   18861 
   18862 These machine-independent options control the interface conventions
   18863 used in code generation.
   18864 
   18865  Most of them have both positive and negative forms; the negative form
   18866 of `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
   18867 listed--the one that is not the default.  You can figure out the other
   18868 form by either removing `no-' or adding it.
   18869 
   18870 `-fbounds-check'
   18871      For front ends that support it, generate additional code to check
   18872      that indices used to access arrays are within the declared range.
   18873      This is currently only supported by the Java and Fortran front
   18874      ends, where this option defaults to true and false respectively.
   18875 
   18876 `-fstack-reuse=REUSE-LEVEL'
   18877      This option controls stack space reuse for user declared
   18878      local/auto variables and compiler generated temporaries.
   18879      REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables
   18880      stack reuse for all local variables and temporaries, `named_vars'
   18881      enables the reuse only for user defined local variables with
   18882      names, and `none' disables stack reuse completely. The default
   18883      value is `all'. The option is needed when the program extends the
   18884      lifetime of a scoped local variable or a compiler generated
   18885      temporary beyond the end point defined by the language.  When a
   18886      lifetime of a variable ends, and if the variable lives in memory,
   18887      the optimizing compiler has the freedom to reuse its stack space
   18888      with other temporaries or scoped local variables whose live range
   18889      does not overlap with it. Legacy code extending local lifetime
   18890      will likely to break with the stack reuse optimization.
   18891 
   18892      For example,
   18893 
   18894              int *p;
   18895              {
   18896                int local1;
   18897 
   18898                p = &local1;
   18899                local1 = 10;
   18900                ....
   18901              }
   18902              {
   18903                 int local2;
   18904                 local2 = 20;
   18905                 ...
   18906              }
   18907 
   18908              if (*p == 10)  // out of scope use of local1
   18909                {
   18910 
   18911                }
   18912 
   18913      Another example:
   18914 
   18915              struct A
   18916              {
   18917                  A(int k) : i(k), j(k) { }
   18918                  int i;
   18919                  int j;
   18920              };
   18921 
   18922              A *ap;
   18923 
   18924              void foo(const A& ar)
   18925              {
   18926                 ap = &ar;
   18927              }
   18928 
   18929              void bar()
   18930              {
   18931                 foo(A(10)); // temp object's lifetime ends when foo returns
   18932 
   18933                 {
   18934                   A a(20);
   18935                   ....
   18936                 }
   18937                 ap->i+= 10;  // ap references out of scope temp whose space
   18938                              // is reused with a. What is the value of ap->i?
   18939              }
   18940 
   18941      The lifetime of a compiler generated temporary is well defined by
   18942      the C++ standard. When a lifetime of a temporary ends, and if the
   18943      temporary lives in memory, the optimizing compiler has the freedom
   18944      to reuse its stack space with other temporaries or scoped local
   18945      variables whose live range does not overlap with it. However some
   18946      of the legacy code relies on the behavior of older compilers in
   18947      which temporaries' stack space is not reused, the aggressive stack
   18948      reuse can lead to runtime errors. This option is used to control
   18949      the temporary stack reuse optimization.
   18950 
   18951 `-ftrapv'
   18952      This option generates traps for signed overflow on addition,
   18953      subtraction, multiplication operations.
   18954 
   18955 `-fwrapv'
   18956      This option instructs the compiler to assume that signed arithmetic
   18957      overflow of addition, subtraction and multiplication wraps around
   18958      using twos-complement representation.  This flag enables some
   18959      optimizations and disables others.  This option is enabled by
   18960      default for the Java front end, as required by the Java language
   18961      specification.
   18962 
   18963 `-fexceptions'
   18964      Enable exception handling.  Generates extra code needed to
   18965      propagate exceptions.  For some targets, this implies GCC
   18966      generates frame unwind information for all functions, which can
   18967      produce significant data size overhead, although it does not
   18968      affect execution.  If you do not specify this option, GCC enables
   18969      it by default for languages like C++ that normally require
   18970      exception handling, and disables it for languages like C that do
   18971      not normally require it.  However, you may need to enable this
   18972      option when compiling C code that needs to interoperate properly
   18973      with exception handlers written in C++.  You may also wish to
   18974      disable this option if you are compiling older C++ programs that
   18975      don't use exception handling.
   18976 
   18977 `-fnon-call-exceptions'
   18978      Generate code that allows trapping instructions to throw
   18979      exceptions.  Note that this requires platform-specific runtime
   18980      support that does not exist everywhere.  Moreover, it only allows
   18981      _trapping_ instructions to throw exceptions, i.e. memory
   18982      references or floating-point instructions.  It does not allow
   18983      exceptions to be thrown from arbitrary signal handlers such as
   18984      `SIGALRM'.
   18985 
   18986 `-fdelete-dead-exceptions'
   18987      Consider that instructions that may throw exceptions but don't
   18988      otherwise contribute to the execution of the program can be
   18989      optimized away.  This option is enabled by default for the Ada
   18990      front end, as permitted by the Ada language specification.
   18991      Optimization passes that cause dead exceptions to be removed are
   18992      enabled independently at different optimization levels.
   18993 
   18994 `-funwind-tables'
   18995      Similar to `-fexceptions', except that it just generates any needed
   18996      static data, but does not affect the generated code in any other
   18997      way.  You normally do not need to enable this option; instead, a
   18998      language processor that needs this handling enables it on your
   18999      behalf.
   19000 
   19001 `-fasynchronous-unwind-tables'
   19002      Generate unwind table in DWARF 2 format, if supported by target
   19003      machine.  The table is exact at each instruction boundary, so it
   19004      can be used for stack unwinding from asynchronous events (such as
   19005      debugger or garbage collector).
   19006 
   19007 `-fpcc-struct-return'
   19008      Return "short" `struct' and `union' values in memory like longer
   19009      ones, rather than in registers.  This convention is less
   19010      efficient, but it has the advantage of allowing intercallability
   19011      between GCC-compiled files and files compiled with other
   19012      compilers, particularly the Portable C Compiler (pcc).
   19013 
   19014      The precise convention for returning structures in memory depends
   19015      on the target configuration macros.
   19016 
   19017      Short structures and unions are those whose size and alignment
   19018      match that of some integer type.
   19019 
   19020      *Warning:* code compiled with the `-fpcc-struct-return' switch is
   19021      not binary compatible with code compiled with the
   19022      `-freg-struct-return' switch.  Use it to conform to a non-default
   19023      application binary interface.
   19024 
   19025 `-freg-struct-return'
   19026      Return `struct' and `union' values in registers when possible.
   19027      This is more efficient for small structures than
   19028      `-fpcc-struct-return'.
   19029 
   19030      If you specify neither `-fpcc-struct-return' nor
   19031      `-freg-struct-return', GCC defaults to whichever convention is
   19032      standard for the target.  If there is no standard convention, GCC
   19033      defaults to `-fpcc-struct-return', except on targets where GCC is
   19034      the principal compiler.  In those cases, we can choose the
   19035      standard, and we chose the more efficient register return
   19036      alternative.
   19037 
   19038      *Warning:* code compiled with the `-freg-struct-return' switch is
   19039      not binary compatible with code compiled with the
   19040      `-fpcc-struct-return' switch.  Use it to conform to a non-default
   19041      application binary interface.
   19042 
   19043 `-fshort-enums'
   19044      Allocate to an `enum' type only as many bytes as it needs for the
   19045      declared range of possible values.  Specifically, the `enum' type
   19046      is equivalent to the smallest integer type that has enough room.
   19047 
   19048      *Warning:* the `-fshort-enums' switch causes GCC to generate code
   19049      that is not binary compatible with code generated without that
   19050      switch.  Use it to conform to a non-default application binary
   19051      interface.
   19052 
   19053 `-fshort-double'
   19054      Use the same size for `double' as for `float'.
   19055 
   19056      *Warning:* the `-fshort-double' switch causes GCC to generate code
   19057      that is not binary compatible with code generated without that
   19058      switch.  Use it to conform to a non-default application binary
   19059      interface.
   19060 
   19061 `-fshort-wchar'
   19062      Override the underlying type for `wchar_t' to be `short unsigned
   19063      int' instead of the default for the target.  This option is useful
   19064      for building programs to run under WINE.
   19065 
   19066      *Warning:* the `-fshort-wchar' switch causes GCC to generate code
   19067      that is not binary compatible with code generated without that
   19068      switch.  Use it to conform to a non-default application binary
   19069      interface.
   19070 
   19071 `-fno-common'
   19072      In C code, controls the placement of uninitialized global
   19073      variables.  Unix C compilers have traditionally permitted multiple
   19074      definitions of such variables in different compilation units by
   19075      placing the variables in a common block.  This is the behavior
   19076      specified by `-fcommon', and is the default for GCC on most
   19077      targets.  On the other hand, this behavior is not required by ISO
   19078      C, and on some targets may carry a speed or code size penalty on
   19079      variable references.  The `-fno-common' option specifies that the
   19080      compiler should place uninitialized global variables in the data
   19081      section of the object file, rather than generating them as common
   19082      blocks.  This has the effect that if the same variable is declared
   19083      (without `extern') in two different compilations, you get a
   19084      multiple-definition error when you link them.  In this case, you
   19085      must compile with `-fcommon' instead.  Compiling with
   19086      `-fno-common' is useful on targets for which it provides better
   19087      performance, or if you wish to verify that the program will work
   19088      on other systems that always treat uninitialized variable
   19089      declarations this way.
   19090 
   19091 `-fno-ident'
   19092      Ignore the `#ident' directive.
   19093 
   19094 `-finhibit-size-directive'
   19095      Don't output a `.size' assembler directive, or anything else that
   19096      would cause trouble if the function is split in the middle, and the
   19097      two halves are placed at locations far apart in memory.  This
   19098      option is used when compiling `crtstuff.c'; you should not need to
   19099      use it for anything else.
   19100 
   19101 `-fverbose-asm'
   19102      Put extra commentary information in the generated assembly code to
   19103      make it more readable.  This option is generally only of use to
   19104      those who actually need to read the generated assembly code
   19105      (perhaps while debugging the compiler itself).
   19106 
   19107      `-fno-verbose-asm', the default, causes the extra information to
   19108      be omitted and is useful when comparing two assembler files.
   19109 
   19110 `-frecord-gcc-switches'
   19111      This switch causes the command line used to invoke the compiler to
   19112      be recorded into the object file that is being created.  This
   19113      switch is only implemented on some targets and the exact format of
   19114      the recording is target and binary file format dependent, but it
   19115      usually takes the form of a section containing ASCII text.  This
   19116      switch is related to the `-fverbose-asm' switch, but that switch
   19117      only records information in the assembler output file as comments,
   19118      so it never reaches the object file.  See also
   19119      `-grecord-gcc-switches' for another way of storing compiler
   19120      options into the object file.
   19121 
   19122 `-fpic'
   19123      Generate position-independent code (PIC) suitable for use in a
   19124      shared library, if supported for the target machine.  Such code
   19125      accesses all constant addresses through a global offset table
   19126      (GOT).  The dynamic loader resolves the GOT entries when the
   19127      program starts (the dynamic loader is not part of GCC; it is part
   19128      of the operating system).  If the GOT size for the linked
   19129      executable exceeds a machine-specific maximum size, you get an
   19130      error message from the linker indicating that `-fpic' does not
   19131      work; in that case, recompile with `-fPIC' instead.  (These
   19132      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
   19133      386 has no such limit.)
   19134 
   19135      Position-independent code requires special support, and therefore
   19136      works only on certain machines.  For the 386, GCC supports PIC for
   19137      System V but not for the Sun 386i.  Code generated for the IBM
   19138      RS/6000 is always position-independent.
   19139 
   19140      When this flag is set, the macros `__pic__' and `__PIC__' are
   19141      defined to 1.
   19142 
   19143 `-fPIC'
   19144      If supported for the target machine, emit position-independent
   19145      code, suitable for dynamic linking and avoiding any limit on the
   19146      size of the global offset table.  This option makes a difference
   19147      on the m68k, PowerPC and SPARC.
   19148 
   19149      Position-independent code requires special support, and therefore
   19150      works only on certain machines.
   19151 
   19152      When this flag is set, the macros `__pic__' and `__PIC__' are
   19153      defined to 2.
   19154 
   19155 `-fpie'
   19156 `-fPIE'
   19157      These options are similar to `-fpic' and `-fPIC', but generated
   19158      position independent code can be only linked into executables.
   19159      Usually these options are used when `-pie' GCC option is used
   19160      during linking.
   19161 
   19162      `-fpie' and `-fPIE' both define the macros `__pie__' and
   19163      `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
   19164      `-fPIE'.
   19165 
   19166 `-fno-jump-tables'
   19167      Do not use jump tables for switch statements even where it would be
   19168      more efficient than other code generation strategies.  This option
   19169      is of use in conjunction with `-fpic' or `-fPIC' for building code
   19170      that forms part of a dynamic linker and cannot reference the
   19171      address of a jump table.  On some targets, jump tables do not
   19172      require a GOT and this option is not needed.
   19173 
   19174 `-ffixed-REG'
   19175      Treat the register named REG as a fixed register; generated code
   19176      should never refer to it (except perhaps as a stack pointer, frame
   19177      pointer or in some other fixed role).
   19178 
   19179      REG must be the name of a register.  The register names accepted
   19180      are machine-specific and are defined in the `REGISTER_NAMES' macro
   19181      in the machine description macro file.
   19182 
   19183      This flag does not have a negative form, because it specifies a
   19184      three-way choice.
   19185 
   19186 `-fcall-used-REG'
   19187      Treat the register named REG as an allocable register that is
   19188      clobbered by function calls.  It may be allocated for temporaries
   19189      or variables that do not live across a call.  Functions compiled
   19190      this way do not save and restore the register REG.
   19191 
   19192      It is an error to use this flag with the frame pointer or stack
   19193      pointer.  Use of this flag for other registers that have fixed
   19194      pervasive roles in the machine's execution model produces
   19195      disastrous results.
   19196 
   19197      This flag does not have a negative form, because it specifies a
   19198      three-way choice.
   19199 
   19200 `-fcall-saved-REG'
   19201      Treat the register named REG as an allocable register saved by
   19202      functions.  It may be allocated even for temporaries or variables
   19203      that live across a call.  Functions compiled this way save and
   19204      restore the register REG if they use it.
   19205 
   19206      It is an error to use this flag with the frame pointer or stack
   19207      pointer.  Use of this flag for other registers that have fixed
   19208      pervasive roles in the machine's execution model produces
   19209      disastrous results.
   19210 
   19211      A different sort of disaster results from the use of this flag for
   19212      a register in which function values may be returned.
   19213 
   19214      This flag does not have a negative form, because it specifies a
   19215      three-way choice.
   19216 
   19217 `-fpack-struct[=N]'
   19218      Without a value specified, pack all structure members together
   19219      without holes.  When a value is specified (which must be a small
   19220      power of two), pack structure members according to this value,
   19221      representing the maximum alignment (that is, objects with default
   19222      alignment requirements larger than this are output potentially
   19223      unaligned at the next fitting location.
   19224 
   19225      *Warning:* the `-fpack-struct' switch causes GCC to generate code
   19226      that is not binary compatible with code generated without that
   19227      switch.  Additionally, it makes the code suboptimal.  Use it to
   19228      conform to a non-default application binary interface.
   19229 
   19230 `-finstrument-functions'
   19231      Generate instrumentation calls for entry and exit to functions.
   19232      Just after function entry and just before function exit, the
   19233      following profiling functions are called with the address of the
   19234      current function and its call site.  (On some platforms,
   19235      `__builtin_return_address' does not work beyond the current
   19236      function, so the call site information may not be available to the
   19237      profiling functions otherwise.)
   19238 
   19239           void __cyg_profile_func_enter (void *this_fn,
   19240                                          void *call_site);
   19241           void __cyg_profile_func_exit  (void *this_fn,
   19242                                          void *call_site);
   19243 
   19244      The first argument is the address of the start of the current
   19245      function, which may be looked up exactly in the symbol table.
   19246 
   19247      This instrumentation is also done for functions expanded inline in
   19248      other functions.  The profiling calls indicate where,
   19249      conceptually, the inline function is entered and exited.  This
   19250      means that addressable versions of such functions must be
   19251      available.  If all your uses of a function are expanded inline,
   19252      this may mean an additional expansion of code size.  If you use
   19253      `extern inline' in your C code, an addressable version of such
   19254      functions must be provided.  (This is normally the case anyway,
   19255      but if you get lucky and the optimizer always expands the
   19256      functions inline, you might have gotten away without providing
   19257      static copies.)
   19258 
   19259      A function may be given the attribute `no_instrument_function', in
   19260      which case this instrumentation is not done.  This can be used, for
   19261      example, for the profiling functions listed above, high-priority
   19262      interrupt routines, and any functions from which the profiling
   19263      functions cannot safely be called (perhaps signal handlers, if the
   19264      profiling routines generate output or allocate memory).
   19265 
   19266 `-finstrument-functions-exclude-file-list=FILE,FILE,...'
   19267      Set the list of functions that are excluded from instrumentation
   19268      (see the description of `-finstrument-functions').  If the file
   19269      that contains a function definition matches with one of FILE, then
   19270      that function is not instrumented.  The match is done on
   19271      substrings: if the FILE parameter is a substring of the file name,
   19272      it is considered to be a match.
   19273 
   19274      For example:
   19275 
   19276           -finstrument-functions-exclude-file-list=/bits/stl,include/sys
   19277 
   19278      excludes any inline function defined in files whose pathnames
   19279      contain `/bits/stl' or `include/sys'.
   19280 
   19281      If, for some reason, you want to include letter `','' in one of
   19282      SYM, write `'\,''. For example,
   19283      `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
   19284      single quote surrounding the option).
   19285 
   19286 `-finstrument-functions-exclude-function-list=SYM,SYM,...'
   19287      This is similar to `-finstrument-functions-exclude-file-list', but
   19288      this option sets the list of function names to be excluded from
   19289      instrumentation.  The function name to be matched is its
   19290      user-visible name, such as `vector<int> blah(const vector<int>
   19291      &)', not the internal mangled name (e.g.,
   19292      `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
   19293      the SYM parameter is a substring of the function name, it is
   19294      considered to be a match.  For C99 and C++ extended identifiers,
   19295      the function name must be given in UTF-8, not using universal
   19296      character names.
   19297 
   19298 `-fstack-check'
   19299      Generate code to verify that you do not go beyond the boundary of
   19300      the stack.  You should specify this flag if you are running in an
   19301      environment with multiple threads, but you only rarely need to
   19302      specify it in a single-threaded environment since stack overflow
   19303      is automatically detected on nearly all systems if there is only
   19304      one stack.
   19305 
   19306      Note that this switch does not actually cause checking to be done;
   19307      the operating system or the language runtime must do that.  The
   19308      switch causes generation of code to ensure that they see the stack
   19309      being extended.
   19310 
   19311      You can additionally specify a string parameter: `no' means no
   19312      checking, `generic' means force the use of old-style checking,
   19313      `specific' means use the best checking method and is equivalent to
   19314      bare `-fstack-check'.
   19315 
   19316      Old-style checking is a generic mechanism that requires no specific
   19317      target support in the compiler but comes with the following
   19318      drawbacks:
   19319 
   19320        1. Modified allocation strategy for large objects: they are
   19321           always allocated dynamically if their size exceeds a fixed
   19322           threshold.
   19323 
   19324        2. Fixed limit on the size of the static frame of functions:
   19325           when it is topped by a particular function, stack checking is
   19326           not reliable and a warning is issued by the compiler.
   19327 
   19328        3. Inefficiency: because of both the modified allocation
   19329           strategy and the generic implementation, code performance is
   19330           hampered.
   19331 
   19332      Note that old-style stack checking is also the fallback method for
   19333      `specific' if no target support has been added in the compiler.
   19334 
   19335 `-fstack-limit-register=REG'
   19336 `-fstack-limit-symbol=SYM'
   19337 `-fno-stack-limit'
   19338      Generate code to ensure that the stack does not grow beyond a
   19339      certain value, either the value of a register or the address of a
   19340      symbol.  If a larger stack is required, a signal is raised at run
   19341      time.  For most targets, the signal is raised before the stack
   19342      overruns the boundary, so it is possible to catch the signal
   19343      without taking special precautions.
   19344 
   19345      For instance, if the stack starts at absolute address `0x80000000'
   19346      and grows downwards, you can use the flags
   19347      `-fstack-limit-symbol=__stack_limit' and
   19348      `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
   19349      of 128KB.  Note that this may only work with the GNU linker.
   19350 
   19351 `-fsplit-stack'
   19352      Generate code to automatically split the stack before it overflows.
   19353      The resulting program has a discontiguous stack which can only
   19354      overflow if the program is unable to allocate any more memory.
   19355      This is most useful when running threaded programs, as it is no
   19356      longer necessary to calculate a good stack size to use for each
   19357      thread.  This is currently only implemented for the i386 and
   19358      x86_64 back ends running GNU/Linux.
   19359 
   19360      When code compiled with `-fsplit-stack' calls code compiled
   19361      without `-fsplit-stack', there may not be much stack space
   19362      available for the latter code to run.  If compiling all code,
   19363      including library code, with `-fsplit-stack' is not an option,
   19364      then the linker can fix up these calls so that the code compiled
   19365      without `-fsplit-stack' always has a large stack.  Support for
   19366      this is implemented in the gold linker in GNU binutils release 2.21
   19367      and later.
   19368 
   19369 `-fleading-underscore'
   19370      This option and its counterpart, `-fno-leading-underscore',
   19371      forcibly change the way C symbols are represented in the object
   19372      file.  One use is to help link with legacy assembly code.
   19373 
   19374      *Warning:* the `-fleading-underscore' switch causes GCC to
   19375      generate code that is not binary compatible with code generated
   19376      without that switch.  Use it to conform to a non-default
   19377      application binary interface.  Not all targets provide complete
   19378      support for this switch.
   19379 
   19380 `-ftls-model=MODEL'
   19381      Alter the thread-local storage model to be used (*note
   19382      Thread-Local::).  The MODEL argument should be one of
   19383      `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
   19384 
   19385      The default without `-fpic' is `initial-exec'; with `-fpic' the
   19386      default is `global-dynamic'.
   19387 
   19388 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
   19389      Set the default ELF image symbol visibility to the specified
   19390      option--all symbols are marked with this unless overridden within
   19391      the code.  Using this feature can very substantially improve
   19392      linking and load times of shared object libraries, produce more
   19393      optimized code, provide near-perfect API export and prevent symbol
   19394      clashes.  It is *strongly* recommended that you use this in any
   19395      shared objects you distribute.
   19396 
   19397      Despite the nomenclature, `default' always means public; i.e.,
   19398      available to be linked against from outside the shared object.
   19399      `protected' and `internal' are pretty useless in real-world usage
   19400      so the only other commonly used option is `hidden'.  The default
   19401      if `-fvisibility' isn't specified is `default', i.e., make every
   19402      symbol public--this causes the same behavior as previous versions
   19403      of GCC.
   19404 
   19405      A good explanation of the benefits offered by ensuring ELF symbols
   19406      have the correct visibility is given by "How To Write Shared
   19407      Libraries" by Ulrich Drepper (which can be found at
   19408      `http://people.redhat.com/~drepper/')--however a superior solution
   19409      made possible by this option to marking things hidden when the
   19410      default is public is to make the default hidden and mark things
   19411      public.  This is the norm with DLLs on Windows and with
   19412      `-fvisibility=hidden' and `__attribute__
   19413      ((visibility("default")))' instead of `__declspec(dllexport)' you
   19414      get almost identical semantics with identical syntax.  This is a
   19415      great boon to those working with cross-platform projects.
   19416 
   19417      For those adding visibility support to existing code, you may find
   19418      `#pragma GCC visibility' of use.  This works by you enclosing the
   19419      declarations you wish to set visibility for with (for example)
   19420      `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
   19421      pop'.  Bear in mind that symbol visibility should be viewed *as
   19422      part of the API interface contract* and thus all new code should
   19423      always specify visibility when it is not the default; i.e.,
   19424      declarations only for use within the local DSO should *always* be
   19425      marked explicitly as hidden as so to avoid PLT indirection
   19426      overheads--making this abundantly clear also aids readability and
   19427      self-documentation of the code.  Note that due to ISO C++
   19428      specification requirements, `operator new' and `operator delete'
   19429      must always be of default visibility.
   19430 
   19431      Be aware that headers from outside your project, in particular
   19432      system headers and headers from any other library you use, may not
   19433      be expecting to be compiled with visibility other than the
   19434      default.  You may need to explicitly say `#pragma GCC visibility
   19435      push(default)' before including any such headers.
   19436 
   19437      `extern' declarations are not affected by `-fvisibility', so a lot
   19438      of code can be recompiled with `-fvisibility=hidden' with no
   19439      modifications.  However, this means that calls to `extern'
   19440      functions with no explicit visibility use the PLT, so it is more
   19441      effective to use `__attribute ((visibility))' and/or `#pragma GCC
   19442      visibility' to tell the compiler which `extern' declarations
   19443      should be treated as hidden.
   19444 
   19445      Note that `-fvisibility' does affect C++ vague linkage entities.
   19446      This means that, for instance, an exception class that is be
   19447      thrown between DSOs must be explicitly marked with default
   19448      visibility so that the `type_info' nodes are unified between the
   19449      DSOs.
   19450 
   19451      An overview of these techniques, their benefits and how to use them
   19452      is at `http://gcc.gnu.org/wiki/Visibility'.
   19453 
   19454 `-fstrict-volatile-bitfields'
   19455      This option should be used if accesses to volatile bit-fields (or
   19456      other structure fields, although the compiler usually honors those
   19457      types anyway) should use a single access of the width of the
   19458      field's type, aligned to a natural alignment if possible.  For
   19459      example, targets with memory-mapped peripheral registers might
   19460      require all such accesses to be 16 bits wide; with this flag you
   19461      can declare all peripheral bit-fields as `unsigned short'
   19462      (assuming short is 16 bits on these targets) to force GCC to use
   19463      16-bit accesses instead of, perhaps, a more efficient 32-bit
   19464      access.
   19465 
   19466      If this option is disabled, the compiler uses the most efficient
   19467      instruction.  In the previous example, that might be a 32-bit load
   19468      instruction, even though that accesses bytes that do not contain
   19469      any portion of the bit-field, or memory-mapped registers unrelated
   19470      to the one being updated.
   19471 
   19472      If the target requires strict alignment, and honoring the field
   19473      type would require violating this alignment, a warning is issued.
   19474      If the field has `packed' attribute, the access is done without
   19475      honoring the field type.  If the field doesn't have `packed'
   19476      attribute, the access is done honoring the field type.  In both
   19477      cases, GCC assumes that the user knows something about the target
   19478      hardware that it is unaware of.
   19479 
   19480      The default value of this option is determined by the application
   19481      binary interface for the target processor.
   19482 
   19483 `-fsync-libcalls'
   19484      This option controls whether any out-of-line instance of the
   19485      `__sync' family of functions may be used to implement the C++11
   19486      `__atomic' family of functions.
   19487 
   19488      The default value of this option is enabled, thus the only useful
   19489      form of the option is `-fno-sync-libcalls'.  This option is used in
   19490      the implementation of the `libatomic' runtime library.
   19491 
   19492 
   19493 
   19494 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
   19495 
   19496 3.19 Environment Variables Affecting GCC
   19497 ========================================
   19498 
   19499 This section describes several environment variables that affect how GCC
   19500 operates.  Some of them work by specifying directories or prefixes to
   19501 use when searching for various kinds of files.  Some are used to
   19502 specify other aspects of the compilation environment.
   19503 
   19504  Note that you can also specify places to search using options such as
   19505 `-B', `-I' and `-L' (*note Directory Options::).  These take precedence
   19506 over places specified using environment variables, which in turn take
   19507 precedence over those specified by the configuration of GCC.  *Note
   19508 Controlling the Compilation Driver `gcc': (gccint)Driver.
   19509 
   19510 `LANG'
   19511 `LC_CTYPE'
   19512 `LC_MESSAGES'
   19513 `LC_ALL'
   19514      These environment variables control the way that GCC uses
   19515      localization information which allows GCC to work with different
   19516      national conventions.  GCC inspects the locale categories
   19517      `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
   19518      These locale categories can be set to any value supported by your
   19519      installation.  A typical value is `en_GB.UTF-8' for English in the
   19520      United Kingdom encoded in UTF-8.
   19521 
   19522      The `LC_CTYPE' environment variable specifies character
   19523      classification.  GCC uses it to determine the character boundaries
   19524      in a string; this is needed for some multibyte encodings that
   19525      contain quote and escape characters that are otherwise interpreted
   19526      as a string end or escape.
   19527 
   19528      The `LC_MESSAGES' environment variable specifies the language to
   19529      use in diagnostic messages.
   19530 
   19531      If the `LC_ALL' environment variable is set, it overrides the value
   19532      of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
   19533      `LC_MESSAGES' default to the value of the `LANG' environment
   19534      variable.  If none of these variables are set, GCC defaults to
   19535      traditional C English behavior.
   19536 
   19537 `TMPDIR'
   19538      If `TMPDIR' is set, it specifies the directory to use for temporary
   19539      files.  GCC uses temporary files to hold the output of one stage of
   19540      compilation which is to be used as input to the next stage: for
   19541      example, the output of the preprocessor, which is the input to the
   19542      compiler proper.
   19543 
   19544 `GCC_COMPARE_DEBUG'
   19545      Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing
   19546      `-fcompare-debug' to the compiler driver.  See the documentation
   19547      of this option for more details.
   19548 
   19549 `GCC_EXEC_PREFIX'
   19550      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
   19551      names of the subprograms executed by the compiler.  No slash is
   19552      added when this prefix is combined with the name of a subprogram,
   19553      but you can specify a prefix that ends with a slash if you wish.
   19554 
   19555      If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
   19556      appropriate prefix to use based on the pathname it is invoked with.
   19557 
   19558      If GCC cannot find the subprogram using the specified prefix, it
   19559      tries looking in the usual places for the subprogram.
   19560 
   19561      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
   19562      PREFIX is the prefix to the installed compiler. In many cases
   19563      PREFIX is the value of `prefix' when you ran the `configure'
   19564      script.
   19565 
   19566      Other prefixes specified with `-B' take precedence over this
   19567      prefix.
   19568 
   19569      This prefix is also used for finding files such as `crt0.o' that
   19570      are used for linking.
   19571 
   19572      In addition, the prefix is used in an unusual way in finding the
   19573      directories to search for header files.  For each of the standard
   19574      directories whose name normally begins with `/usr/local/lib/gcc'
   19575      (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
   19576      replacing that beginning with the specified prefix to produce an
   19577      alternate directory name.  Thus, with `-Bfoo/', GCC searches
   19578      `foo/bar' just before it searches the standard directory
   19579      `/usr/local/lib/bar'.  If a standard directory begins with the
   19580      configured PREFIX then the value of PREFIX is replaced by
   19581      `GCC_EXEC_PREFIX' when looking for header files.
   19582 
   19583 `COMPILER_PATH'
   19584      The value of `COMPILER_PATH' is a colon-separated list of
   19585      directories, much like `PATH'.  GCC tries the directories thus
   19586      specified when searching for subprograms, if it can't find the
   19587      subprograms using `GCC_EXEC_PREFIX'.
   19588 
   19589 `LIBRARY_PATH'
   19590      The value of `LIBRARY_PATH' is a colon-separated list of
   19591      directories, much like `PATH'.  When configured as a native
   19592      compiler, GCC tries the directories thus specified when searching
   19593      for special linker files, if it can't find them using
   19594      `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
   19595      when searching for ordinary libraries for the `-l' option (but
   19596      directories specified with `-L' come first).
   19597 
   19598 `LANG'
   19599      This variable is used to pass locale information to the compiler.
   19600      One way in which this information is used is to determine the
   19601      character set to be used when character literals, string literals
   19602      and comments are parsed in C and C++.  When the compiler is
   19603      configured to allow multibyte characters, the following values for
   19604      `LANG' are recognized:
   19605 
   19606     `C-JIS'
   19607           Recognize JIS characters.
   19608 
   19609     `C-SJIS'
   19610           Recognize SJIS characters.
   19611 
   19612     `C-EUCJP'
   19613           Recognize EUCJP characters.
   19614 
   19615      If `LANG' is not defined, or if it has some other value, then the
   19616      compiler uses `mblen' and `mbtowc' as defined by the default
   19617      locale to recognize and translate multibyte characters.
   19618 
   19619 Some additional environment variables affect the behavior of the
   19620 preprocessor.
   19621 
   19622 `CPATH'
   19623 `C_INCLUDE_PATH'
   19624 `CPLUS_INCLUDE_PATH'
   19625 `OBJC_INCLUDE_PATH'
   19626      Each variable's value is a list of directories separated by a
   19627      special character, much like `PATH', in which to look for header
   19628      files.  The special character, `PATH_SEPARATOR', is
   19629      target-dependent and determined at GCC build time.  For Microsoft
   19630      Windows-based targets it is a semicolon, and for almost all other
   19631      targets it is a colon.
   19632 
   19633      `CPATH' specifies a list of directories to be searched as if
   19634      specified with `-I', but after any paths given with `-I' options
   19635      on the command line.  This environment variable is used regardless
   19636      of which language is being preprocessed.
   19637 
   19638      The remaining environment variables apply only when preprocessing
   19639      the particular language indicated.  Each specifies a list of
   19640      directories to be searched as if specified with `-isystem', but
   19641      after any paths given with `-isystem' options on the command line.
   19642 
   19643      In all these variables, an empty element instructs the compiler to
   19644      search its current working directory.  Empty elements can appear
   19645      at the beginning or end of a path.  For instance, if the value of
   19646      `CPATH' is `:/special/include', that has the same effect as
   19647      `-I. -I/special/include'.
   19648 
   19649 `DEPENDENCIES_OUTPUT'
   19650      If this variable is set, its value specifies how to output
   19651      dependencies for Make based on the non-system header files
   19652      processed by the compiler.  System header files are ignored in the
   19653      dependency output.
   19654 
   19655      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
   19656      which case the Make rules are written to that file, guessing the
   19657      target name from the source file name.  Or the value can have the
   19658      form `FILE TARGET', in which case the rules are written to file
   19659      FILE using TARGET as the target name.
   19660 
   19661      In other words, this environment variable is equivalent to
   19662      combining the options `-MM' and `-MF' (*note Preprocessor
   19663      Options::), with an optional `-MT' switch too.
   19664 
   19665 `SUNPRO_DEPENDENCIES'
   19666      This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
   19667      except that system header files are not ignored, so it implies
   19668      `-M' rather than `-MM'.  However, the dependence on the main input
   19669      file is omitted.  *Note Preprocessor Options::.
   19670 
   19671 
   19672 File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
   19673 
   19674 3.20 Using Precompiled Headers
   19675 ==============================
   19676 
   19677 Often large projects have many header files that are included in every
   19678 source file.  The time the compiler takes to process these header files
   19679 over and over again can account for nearly all of the time required to
   19680 build the project.  To make builds faster, GCC allows you to
   19681 "precompile" a header file.
   19682 
   19683  To create a precompiled header file, simply compile it as you would any
   19684 other file, if necessary using the `-x' option to make the driver treat
   19685 it as a C or C++ header file.  You may want to use a tool like `make'
   19686 to keep the precompiled header up-to-date when the headers it contains
   19687 change.
   19688 
   19689  A precompiled header file is searched for when `#include' is seen in
   19690 the compilation.  As it searches for the included file (*note Search
   19691 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
   19692 each directory just before it looks for the include file in that
   19693 directory.  The name searched for is the name specified in the
   19694 `#include' with `.gch' appended.  If the precompiled header file can't
   19695 be used, it is ignored.
   19696 
   19697  For instance, if you have `#include "all.h"', and you have `all.h.gch'
   19698 in the same directory as `all.h', then the precompiled header file is
   19699 used if possible, and the original header is used otherwise.
   19700 
   19701  Alternatively, you might decide to put the precompiled header file in a
   19702 directory and use `-I' to ensure that directory is searched before (or
   19703 instead of) the directory containing the original header.  Then, if you
   19704 want to check that the precompiled header file is always used, you can
   19705 put a file of the same name as the original header in this directory
   19706 containing an `#error' command.
   19707 
   19708  This also works with `-include'.  So yet another way to use
   19709 precompiled headers, good for projects not designed with precompiled
   19710 header files in mind, is to simply take most of the header files used by
   19711 a project, include them from another header file, precompile that header
   19712 file, and `-include' the precompiled header.  If the header files have
   19713 guards against multiple inclusion, they are skipped because they've
   19714 already been included (in the precompiled header).
   19715 
   19716  If you need to precompile the same header file for different
   19717 languages, targets, or compiler options, you can instead make a
   19718 _directory_ named like `all.h.gch', and put each precompiled header in
   19719 the directory, perhaps using `-o'.  It doesn't matter what you call the
   19720 files in the directory; every precompiled header in the directory is
   19721 considered.  The first precompiled header encountered in the directory
   19722 that is valid for this compilation is used; they're searched in no
   19723 particular order.
   19724 
   19725  There are many other possibilities, limited only by your imagination,
   19726 good sense, and the constraints of your build system.
   19727 
   19728  A precompiled header file can be used only when these conditions apply:
   19729 
   19730    * Only one precompiled header can be used in a particular
   19731      compilation.
   19732 
   19733    * A precompiled header can't be used once the first C token is seen.
   19734      You can have preprocessor directives before a precompiled header;
   19735      you cannot include a precompiled header from inside another header.
   19736 
   19737    * The precompiled header file must be produced for the same language
   19738      as the current compilation.  You can't use a C precompiled header
   19739      for a C++ compilation.
   19740 
   19741    * The precompiled header file must have been produced by the same
   19742      compiler binary as the current compilation is using.
   19743 
   19744    * Any macros defined before the precompiled header is included must
   19745      either be defined in the same way as when the precompiled header
   19746      was generated, or must not affect the precompiled header, which
   19747      usually means that they don't appear in the precompiled header at
   19748      all.
   19749 
   19750      The `-D' option is one way to define a macro before a precompiled
   19751      header is included; using a `#define' can also do it.  There are
   19752      also some options that define macros implicitly, like `-O' and
   19753      `-Wdeprecated'; the same rule applies to macros defined this way.
   19754 
   19755    * If debugging information is output when using the precompiled
   19756      header, using `-g' or similar, the same kind of debugging
   19757      information must have been output when building the precompiled
   19758      header.  However, a precompiled header built using `-g' can be
   19759      used in a compilation when no debugging information is being
   19760      output.
   19761 
   19762    * The same `-m' options must generally be used when building and
   19763      using the precompiled header.  *Note Submodel Options::, for any
   19764      cases where this rule is relaxed.
   19765 
   19766    * Each of the following options must be the same when building and
   19767      using the precompiled header:
   19768 
   19769           -fexceptions
   19770 
   19771    * Some other command-line options starting with `-f', `-p', or `-O'
   19772      must be defined in the same way as when the precompiled header was
   19773      generated.  At present, it's not clear which options are safe to
   19774      change and which are not; the safest choice is to use exactly the
   19775      same options when generating and using the precompiled header.
   19776      The following are known to be safe:
   19777 
   19778           -fmessage-length=  -fpreprocessed  -fsched-interblock
   19779           -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
   19780           -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
   19781           -pedantic-errors
   19782 
   19783 
   19784  For all of these except the last, the compiler automatically ignores
   19785 the precompiled header if the conditions aren't met.  If you find an
   19786 option combination that doesn't work and doesn't cause the precompiled
   19787 header to be ignored, please consider filing a bug report, see *note
   19788 Bugs::.
   19789 
   19790  If you do use differing options when generating and using the
   19791 precompiled header, the actual behavior is a mixture of the behavior
   19792 for the options.  For instance, if you use `-g' to generate the
   19793 precompiled header but not when using it, you may or may not get
   19794 debugging information for routines in the precompiled header.
   19795 
   19796 
   19797 File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
   19798 
   19799 4 C Implementation-defined behavior
   19800 ***********************************
   19801 
   19802 A conforming implementation of ISO C is required to document its choice
   19803 of behavior in each of the areas that are designated "implementation
   19804 defined".  The following lists all such areas, along with the section
   19805 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
   19806 Some areas are only implementation-defined in one version of the
   19807 standard.
   19808 
   19809  Some choices depend on the externally determined ABI for the platform
   19810 (including standard character encodings) which GCC follows; these are
   19811 listed as "determined by ABI" below.  *Note Binary Compatibility:
   19812 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
   19813 are documented in the preprocessor manual.  *Note
   19814 Implementation-defined behavior: (cpp)Implementation-defined behavior.
   19815 Some choices are made by the library and operating system (or other
   19816 environment when compiling for a freestanding environment); refer to
   19817 their documentation for details.
   19818 
   19819 * Menu:
   19820 
   19821 * Translation implementation::
   19822 * Environment implementation::
   19823 * Identifiers implementation::
   19824 * Characters implementation::
   19825 * Integers implementation::
   19826 * Floating point implementation::
   19827 * Arrays and pointers implementation::
   19828 * Hints implementation::
   19829 * Structures unions enumerations and bit-fields implementation::
   19830 * Qualifiers implementation::
   19831 * Declarators implementation::
   19832 * Statements implementation::
   19833 * Preprocessing directives implementation::
   19834 * Library functions implementation::
   19835 * Architecture implementation::
   19836 * Locale-specific behavior implementation::
   19837 
   19838 
   19839 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
   19840 
   19841 4.1 Translation
   19842 ===============
   19843 
   19844    * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
   19845      5.1.1.3).'
   19846 
   19847      Diagnostics consist of all the output sent to stderr by GCC.
   19848 
   19849    * `Whether each nonempty sequence of white-space characters other
   19850      than new-line is retained or replaced by one space character in
   19851      translation phase 3 (C90 and C99 5.1.1.2).'
   19852 
   19853      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19854      behavior.
   19855 
   19856 
   19857 
   19858 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
   19859 
   19860 4.2 Environment
   19861 ===============
   19862 
   19863 The behavior of most of these points are dependent on the implementation
   19864 of the C library, and are not defined by GCC itself.
   19865 
   19866    * `The mapping between physical source file multibyte characters and
   19867      the source character set in translation phase 1 (C90 and C99
   19868      5.1.1.2).'
   19869 
   19870      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19871      behavior.
   19872 
   19873 
   19874 
   19875 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
   19876 
   19877 4.3 Identifiers
   19878 ===============
   19879 
   19880    * `Which additional multibyte characters may appear in identifiers
   19881      and their correspondence to universal character names (C99 6.4.2).'
   19882 
   19883      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19884      behavior.
   19885 
   19886    * `The number of significant initial characters in an identifier
   19887      (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
   19888 
   19889      For internal names, all characters are significant.  For external
   19890      names, the number of significant characters are defined by the
   19891      linker; for almost all targets, all characters are significant.
   19892 
   19893    * `Whether case distinctions are significant in an identifier with
   19894      external linkage (C90 6.1.2).'
   19895 
   19896      This is a property of the linker.  C99 requires that case
   19897      distinctions are always significant in identifiers with external
   19898      linkage and systems without this property are not supported by GCC.
   19899 
   19900 
   19901 
   19902 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
   19903 
   19904 4.4 Characters
   19905 ==============
   19906 
   19907    * `The number of bits in a byte (C90 3.4, C99 3.6).'
   19908 
   19909      Determined by ABI.
   19910 
   19911    * `The values of the members of the execution character set (C90 and
   19912      C99 5.2.1).'
   19913 
   19914      Determined by ABI.
   19915 
   19916    * `The unique value of the member of the execution character set
   19917      produced for each of the standard alphabetic escape sequences (C90
   19918      and C99 5.2.2).'
   19919 
   19920      Determined by ABI.
   19921 
   19922    * `The value of a `char' object into which has been stored any
   19923      character other than a member of the basic execution character set
   19924      (C90 6.1.2.5, C99 6.2.5).'
   19925 
   19926      Determined by ABI.
   19927 
   19928    * `Which of `signed char' or `unsigned char' has the same range,
   19929      representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
   19930      6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
   19931 
   19932      Determined by ABI.  The options `-funsigned-char' and
   19933      `-fsigned-char' change the default.  *Note Options Controlling C
   19934      Dialect: C Dialect Options.
   19935 
   19936    * `The mapping of members of the source character set (in character
   19937      constants and string literals) to members of the execution
   19938      character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
   19939 
   19940      Determined by ABI.
   19941 
   19942    * `The value of an integer character constant containing more than
   19943      one character or containing a character or escape sequence that
   19944      does not map to a single-byte execution character (C90 6.1.3.4,
   19945      C99 6.4.4.4).'
   19946 
   19947      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19948      behavior.
   19949 
   19950    * `The value of a wide character constant containing more than one
   19951      multibyte character, or containing a multibyte character or escape
   19952      sequence not represented in the extended execution character set
   19953      (C90 6.1.3.4, C99 6.4.4.4).'
   19954 
   19955      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19956      behavior.
   19957 
   19958    * `The current locale used to convert a wide character constant
   19959      consisting of a single multibyte character that maps to a member
   19960      of the extended execution character set into a corresponding wide
   19961      character code (C90 6.1.3.4, C99 6.4.4.4).'
   19962 
   19963      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19964      behavior.
   19965 
   19966    * `The current locale used to convert a wide string literal into
   19967      corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
   19968 
   19969      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19970      behavior.
   19971 
   19972    * `The value of a string literal containing a multibyte character or
   19973      escape sequence not represented in the execution character set
   19974      (C90 6.1.4, C99 6.4.5).'
   19975 
   19976      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19977      behavior.
   19978 
   19979 
   19980 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
   19981 
   19982 4.5 Integers
   19983 ============
   19984 
   19985    * `Any extended integer types that exist in the implementation (C99
   19986      6.2.5).'
   19987 
   19988      GCC does not support any extended integer types.
   19989 
   19990    * `Whether signed integer types are represented using sign and
   19991      magnitude, two's complement, or one's complement, and whether the
   19992      extraordinary value is a trap representation or an ordinary value
   19993      (C99 6.2.6.2).'
   19994 
   19995      GCC supports only two's complement integer types, and all bit
   19996      patterns are ordinary values.
   19997 
   19998    * `The rank of any extended integer type relative to another extended
   19999      integer type with the same precision (C99 6.3.1.1).'
   20000 
   20001      GCC does not support any extended integer types.
   20002 
   20003    * `The result of, or the signal raised by, converting an integer to a
   20004      signed integer type when the value cannot be represented in an
   20005      object of that type (C90 6.2.1.2, C99 6.3.1.3).'
   20006 
   20007      For conversion to a type of width N, the value is reduced modulo
   20008      2^N to be within range of the type; no signal is raised.
   20009 
   20010    * `The results of some bitwise operations on signed integers (C90
   20011      6.3, C99 6.5).'
   20012 
   20013      Bitwise operators act on the representation of the value including
   20014      both the sign and value bits, where the sign bit is considered
   20015      immediately above the highest-value value bit.  Signed `>>' acts
   20016      on negative numbers by sign extension.
   20017 
   20018      GCC does not use the latitude given in C99 only to treat certain
   20019      aspects of signed `<<' as undefined, but this is subject to change.
   20020 
   20021    * `The sign of the remainder on integer division (C90 6.3.5).'
   20022 
   20023      GCC always follows the C99 requirement that the result of division
   20024      is truncated towards zero.
   20025 
   20026 
   20027 
   20028 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
   20029 
   20030 4.6 Floating point
   20031 ==================
   20032 
   20033    * `The accuracy of the floating-point operations and of the library
   20034      functions in `<math.h>' and `<complex.h>' that return
   20035      floating-point results (C90 and C99 5.2.4.2.2).'
   20036 
   20037      The accuracy is unknown.
   20038 
   20039    * `The rounding behaviors characterized by non-standard values of
   20040      `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
   20041 
   20042      GCC does not use such values.
   20043 
   20044    * `The evaluation methods characterized by non-standard negative
   20045      values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
   20046 
   20047      GCC does not use such values.
   20048 
   20049    * `The direction of rounding when an integer is converted to a
   20050      floating-point number that cannot exactly represent the original
   20051      value (C90 6.2.1.3, C99 6.3.1.4).'
   20052 
   20053      C99 Annex F is followed.
   20054 
   20055    * `The direction of rounding when a floating-point number is
   20056      converted to a narrower floating-point number (C90 6.2.1.4, C99
   20057      6.3.1.5).'
   20058 
   20059      C99 Annex F is followed.
   20060 
   20061    * `How the nearest representable value or the larger or smaller
   20062      representable value immediately adjacent to the nearest
   20063      representable value is chosen for certain floating constants (C90
   20064      6.1.3.1, C99 6.4.4.2).'
   20065 
   20066      C99 Annex F is followed.
   20067 
   20068    * `Whether and how floating expressions are contracted when not
   20069      disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
   20070 
   20071      Expressions are currently only contracted if
   20072      `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
   20073      subject to change.
   20074 
   20075    * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
   20076 
   20077      This pragma is not implemented, but the default is to "off" unless
   20078      `-frounding-math' is used in which case it is "on".
   20079 
   20080    * `Additional floating-point exceptions, rounding modes,
   20081      environments, and classifications, and their macro names (C99 7.6,
   20082      C99 7.12).'
   20083 
   20084      This is dependent on the implementation of the C library, and is
   20085      not defined by GCC itself.
   20086 
   20087    * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
   20088 
   20089      This pragma is not implemented.  Expressions are currently only
   20090      contracted if `-funsafe-math-optimizations' or `-ffast-math' are
   20091      used.  This is subject to change.
   20092 
   20093    * `Whether the "inexact" floating-point exception can be raised when
   20094      the rounded result actually does equal the mathematical result in
   20095      an IEC 60559 conformant implementation (C99 F.9).'
   20096 
   20097      This is dependent on the implementation of the C library, and is
   20098      not defined by GCC itself.
   20099 
   20100    * `Whether the "underflow" (and "inexact") floating-point exception
   20101      can be raised when a result is tiny but not inexact in an IEC
   20102      60559 conformant implementation (C99 F.9).'
   20103 
   20104      This is dependent on the implementation of the C library, and is
   20105      not defined by GCC itself.
   20106 
   20107 
   20108 
   20109 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
   20110 
   20111 4.7 Arrays and pointers
   20112 =======================
   20113 
   20114    * `The result of converting a pointer to an integer or vice versa
   20115      (C90 6.3.4, C99 6.3.2.3).'
   20116 
   20117      A cast from pointer to integer discards most-significant bits if
   20118      the pointer representation is larger than the integer type,
   20119      sign-extends(1) if the pointer representation is smaller than the
   20120      integer type, otherwise the bits are unchanged.
   20121 
   20122      A cast from integer to pointer discards most-significant bits if
   20123      the pointer representation is smaller than the integer type,
   20124      extends according to the signedness of the integer type if the
   20125      pointer representation is larger than the integer type, otherwise
   20126      the bits are unchanged.
   20127 
   20128      When casting from pointer to integer and back again, the resulting
   20129      pointer must reference the same object as the original pointer,
   20130      otherwise the behavior is undefined.  That is, one may not use
   20131      integer arithmetic to avoid the undefined behavior of pointer
   20132      arithmetic as proscribed in C99 6.5.6/8.
   20133 
   20134    * `The size of the result of subtracting two pointers to elements of
   20135      the same array (C90 6.3.6, C99 6.5.6).'
   20136 
   20137      The value is as specified in the standard and the type is
   20138      determined by the ABI.
   20139 
   20140 
   20141  ---------- Footnotes ----------
   20142 
   20143  (1) Future versions of GCC may zero-extend, or use a target-defined
   20144 `ptr_extend' pattern.  Do not rely on sign extension.
   20145 
   20146 
   20147 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
   20148 
   20149 4.8 Hints
   20150 =========
   20151 
   20152    * `The extent to which suggestions made by using the `register'
   20153      storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
   20154 
   20155      The `register' specifier affects code generation only in these
   20156      ways:
   20157 
   20158         * When used as part of the register variable extension, see
   20159           *note Explicit Reg Vars::.
   20160 
   20161         * When `-O0' is in use, the compiler allocates distinct stack
   20162           memory for all variables that do not have the `register'
   20163           storage-class specifier; if `register' is specified, the
   20164           variable may have a shorter lifespan than the code would
   20165           indicate and may never be placed in memory.
   20166 
   20167         * On some rare x86 targets, `setjmp' doesn't save the registers
   20168           in all circumstances.  In those cases, GCC doesn't allocate
   20169           any variables in registers unless they are marked `register'.
   20170 
   20171 
   20172    * `The extent to which suggestions made by using the inline function
   20173      specifier are effective (C99 6.7.4).'
   20174 
   20175      GCC will not inline any functions if the `-fno-inline' option is
   20176      used or if `-O0' is used.  Otherwise, GCC may still be unable to
   20177      inline a function for many reasons; the `-Winline' option may be
   20178      used to determine if a function has not been inlined and why not.
   20179 
   20180 
   20181 
   20182 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
   20183 
   20184 4.9 Structures, unions, enumerations, and bit-fields
   20185 ====================================================
   20186 
   20187    * `A member of a union object is accessed using a member of a
   20188      different type (C90 6.3.2.3).'
   20189 
   20190      The relevant bytes of the representation of the object are treated
   20191      as an object of the type used for the access.  *Note
   20192      Type-punning::.  This may be a trap representation.
   20193 
   20194    * `Whether a "plain" `int' bit-field is treated as a `signed int'
   20195      bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
   20196      6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
   20197 
   20198      By default it is treated as `signed int' but this may be changed
   20199      by the `-funsigned-bitfields' option.
   20200 
   20201    * `Allowable bit-field types other than `_Bool', `signed int', and
   20202      `unsigned int' (C99 6.7.2.1).'
   20203 
   20204      No other types are permitted in strictly conforming mode.
   20205 
   20206    * `Whether a bit-field can straddle a storage-unit boundary (C90
   20207      6.5.2.1, C99 6.7.2.1).'
   20208 
   20209      Determined by ABI.
   20210 
   20211    * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
   20212      C99 6.7.2.1).'
   20213 
   20214      Determined by ABI.
   20215 
   20216    * `The alignment of non-bit-field members of structures (C90
   20217      6.5.2.1, C99 6.7.2.1).'
   20218 
   20219      Determined by ABI.
   20220 
   20221    * `The integer type compatible with each enumerated type (C90
   20222      6.5.2.2, C99 6.7.2.2).'
   20223 
   20224      Normally, the type is `unsigned int' if there are no negative
   20225      values in the enumeration, otherwise `int'.  If `-fshort-enums' is
   20226      specified, then if there are negative values it is the first of
   20227      `signed char', `short' and `int' that can represent all the
   20228      values, otherwise it is the first of `unsigned char', `unsigned
   20229      short' and `unsigned int' that can represent all the values.
   20230 
   20231      On some targets, `-fshort-enums' is the default; this is
   20232      determined by the ABI.
   20233 
   20234 
   20235 
   20236 File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
   20237 
   20238 4.10 Qualifiers
   20239 ===============
   20240 
   20241    * `What constitutes an access to an object that has
   20242      volatile-qualified type (C90 6.5.3, C99 6.7.3).'
   20243 
   20244      Such an object is normally accessed by pointers and used for
   20245      accessing hardware.  In most expressions, it is intuitively
   20246      obvious what is a read and what is a write.  For example
   20247 
   20248           volatile int *dst = SOMEVALUE;
   20249           volatile int *src = SOMEOTHERVALUE;
   20250           *dst = *src;
   20251 
   20252      will cause a read of the volatile object pointed to by SRC and
   20253      store the value into the volatile object pointed to by DST.  There
   20254      is no guarantee that these reads and writes are atomic, especially
   20255      for objects larger than `int'.
   20256 
   20257      However, if the volatile storage is not being modified, and the
   20258      value of the volatile storage is not used, then the situation is
   20259      less obvious.  For example
   20260 
   20261           volatile int *src = SOMEVALUE;
   20262           *src;
   20263 
   20264      According to the C standard, such an expression is an rvalue whose
   20265      type is the unqualified version of its original type, i.e. `int'.
   20266      Whether GCC interprets this as a read of the volatile object being
   20267      pointed to or only as a request to evaluate the expression for its
   20268      side-effects depends on this type.
   20269 
   20270      If it is a scalar type, or on most targets an aggregate type whose
   20271      only member object is of a scalar type, or a union type whose
   20272      member objects are of scalar types, the expression is interpreted
   20273      by GCC as a read of the volatile object; in the other cases, the
   20274      expression is only evaluated for its side-effects.
   20275 
   20276 
   20277 
   20278 File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
   20279 
   20280 4.11 Declarators
   20281 ================
   20282 
   20283    * `The maximum number of declarators that may modify an arithmetic,
   20284      structure or union type (C90 6.5.4).'
   20285 
   20286      GCC is only limited by available memory.
   20287 
   20288 
   20289 
   20290 File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
   20291 
   20292 4.12 Statements
   20293 ===============
   20294 
   20295    * `The maximum number of `case' values in a `switch' statement (C90
   20296      6.6.4.2).'
   20297 
   20298      GCC is only limited by available memory.
   20299 
   20300 
   20301 
   20302 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
   20303 
   20304 4.13 Preprocessing directives
   20305 =============================
   20306 
   20307 *Note Implementation-defined behavior: (cpp)Implementation-defined
   20308 behavior, for details of these aspects of implementation-defined
   20309 behavior.
   20310 
   20311    * `How sequences in both forms of header names are mapped to headers
   20312      or external source file names (C90 6.1.7, C99 6.4.7).'
   20313 
   20314    * `Whether the value of a character constant in a constant expression
   20315      that controls conditional inclusion matches the value of the same
   20316      character constant in the execution character set (C90 6.8.1, C99
   20317      6.10.1).'
   20318 
   20319    * `Whether the value of a single-character character constant in a
   20320      constant expression that controls conditional inclusion may have a
   20321      negative value (C90 6.8.1, C99 6.10.1).'
   20322 
   20323    * `The places that are searched for an included `<>' delimited
   20324      header, and how the places are specified or the header is
   20325      identified (C90 6.8.2, C99 6.10.2).'
   20326 
   20327    * `How the named source file is searched for in an included `""'
   20328      delimited header (C90 6.8.2, C99 6.10.2).'
   20329 
   20330    * `The method by which preprocessing tokens (possibly resulting from
   20331      macro expansion) in a `#include' directive are combined into a
   20332      header name (C90 6.8.2, C99 6.10.2).'
   20333 
   20334    * `The nesting limit for `#include' processing (C90 6.8.2, C99
   20335      6.10.2).'
   20336 
   20337    * `Whether the `#' operator inserts a `\' character before the `\'
   20338      character that begins a universal character name in a character
   20339      constant or string literal (C99 6.10.3.2).'
   20340 
   20341    * `The behavior on each recognized non-`STDC #pragma' directive (C90
   20342      6.8.6, C99 6.10.6).'
   20343 
   20344      *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
   20345      GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
   20346      details of target-specific pragmas.
   20347 
   20348    * `The definitions for `__DATE__' and `__TIME__' when respectively,
   20349      the date and time of translation are not available (C90 6.8.8, C99
   20350      6.10.8).'
   20351 
   20352 
   20353 
   20354 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
   20355 
   20356 4.14 Library functions
   20357 ======================
   20358 
   20359 The behavior of most of these points are dependent on the implementation
   20360 of the C library, and are not defined by GCC itself.
   20361 
   20362    * `The null pointer constant to which the macro `NULL' expands (C90
   20363      7.1.6, C99 7.17).'
   20364 
   20365      In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
   20366      provide the other headers which define `NULL' and some library
   20367      implementations may use other definitions in those headers.
   20368 
   20369 
   20370 
   20371 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
   20372 
   20373 4.15 Architecture
   20374 =================
   20375 
   20376    * `The values or expressions assigned to the macros specified in the
   20377      headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
   20378      5.2.4.2, C99 7.18.2, C99 7.18.3).'
   20379 
   20380      Determined by ABI.
   20381 
   20382    * `The number, order, and encoding of bytes in any object (when not
   20383      explicitly specified in this International Standard) (C99
   20384      6.2.6.1).'
   20385 
   20386      Determined by ABI.
   20387 
   20388    * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
   20389      C99 6.5.3.4).'
   20390 
   20391      Determined by ABI.
   20392 
   20393 
   20394 
   20395 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
   20396 
   20397 4.16 Locale-specific behavior
   20398 =============================
   20399 
   20400 The behavior of these points are dependent on the implementation of the
   20401 C library, and are not defined by GCC itself.
   20402 
   20403 
   20404 File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
   20405 
   20406 5 C++ Implementation-defined behavior
   20407 *************************************
   20408 
   20409 A conforming implementation of ISO C++ is required to document its
   20410 choice of behavior in each of the areas that are designated
   20411 "implementation defined".  The following lists all such areas, along
   20412 with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
   20413 14882:2003 standards.  Some areas are only implementation-defined in
   20414 one version of the standard.
   20415 
   20416  Some choices depend on the externally determined ABI for the platform
   20417 (including standard character encodings) which GCC follows; these are
   20418 listed as "determined by ABI" below.  *Note Binary Compatibility:
   20419 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
   20420 are documented in the preprocessor manual.  *Note
   20421 Implementation-defined behavior: (cpp)Implementation-defined behavior.
   20422 Some choices are documented in the corresponding document for the C
   20423 language.  *Note C Implementation::.  Some choices are made by the
   20424 library and operating system (or other environment when compiling for a
   20425 freestanding environment); refer to their documentation for details.
   20426 
   20427 * Menu:
   20428 
   20429 * Conditionally-supported behavior::
   20430 * Exception handling::
   20431 
   20432 
   20433 File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
   20434 
   20435 5.1 Conditionally-supported behavior
   20436 ====================================
   20437 
   20438 `Each implementation shall include documentation that identifies all
   20439 conditionally-supported constructs that it does not support (C++0x
   20440 1.4).'
   20441 
   20442    * `Whether an argument of class type with a non-trivial copy
   20443      constructor or destructor can be passed to ... (C++0x 5.2.2).'
   20444 
   20445      Such argument passing is not supported.
   20446 
   20447 
   20448 
   20449 File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
   20450 
   20451 5.2 Exception handling
   20452 ======================
   20453 
   20454    * `In the situation where no matching handler is found, it is
   20455      implementation-defined whether or not the stack is unwound before
   20456      std::terminate() is called (C++98 15.5.1).'
   20457 
   20458      The stack is not unwound before std::terminate is called.
   20459 
   20460 
   20461 
   20462 File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
   20463 
   20464 6 Extensions to the C Language Family
   20465 *************************************
   20466 
   20467 GNU C provides several language features not found in ISO standard C.
   20468 (The `-pedantic' option directs GCC to print a warning message if any
   20469 of these features is used.)  To test for the availability of these
   20470 features in conditional compilation, check for a predefined macro
   20471 `__GNUC__', which is always defined under GCC.
   20472 
   20473  These extensions are available in C and Objective-C.  Most of them are
   20474 also available in C++.  *Note Extensions to the C++ Language: C++
   20475 Extensions, for extensions that apply _only_ to C++.
   20476 
   20477  Some features that are in ISO C99 but not C90 or C++ are also, as
   20478 extensions, accepted by GCC in C90 mode and in C++.
   20479 
   20480 * Menu:
   20481 
   20482 * Statement Exprs::     Putting statements and declarations inside expressions.
   20483 * Local Labels::        Labels local to a block.
   20484 * Labels as Values::    Getting pointers to labels, and computed gotos.
   20485 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
   20486 * Constructing Calls::  Dispatching a call to another function.
   20487 * Typeof::              `typeof': referring to the type of an expression.
   20488 * Conditionals::        Omitting the middle operand of a `?:' expression.
   20489 * __int128::			128-bit integers---`__int128'.
   20490 * Long Long::           Double-word integers---`long long int'.
   20491 * Complex::             Data types for complex numbers.
   20492 * Floating Types::      Additional Floating Types.
   20493 * Half-Precision::      Half-Precision Floating Point.
   20494 * Decimal Float::       Decimal Floating Types.
   20495 * Hex Floats::          Hexadecimal floating-point constants.
   20496 * Fixed-Point::         Fixed-Point Types.
   20497 * Named Address Spaces::Named address spaces.
   20498 * Zero Length::         Zero-length arrays.
   20499 * Empty Structures::    Structures with no members.
   20500 * Variable Length::     Arrays whose length is computed at run time.
   20501 * Variadic Macros::     Macros with a variable number of arguments.
   20502 * Escaped Newlines::    Slightly looser rules for escaped newlines.
   20503 * Subscripting::        Any array can be subscripted, even if not an lvalue.
   20504 * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
   20505 * Initializers::        Non-constant initializers.
   20506 * Compound Literals::   Compound literals give structures, unions
   20507                         or arrays as values.
   20508 * Designated Inits::    Labeling elements of initializers.
   20509 * Case Ranges::         `case 1 ... 9' and such.
   20510 * Cast to Union::       Casting to union type from any member of the union.
   20511 * Mixed Declarations::  Mixing declarations and code.
   20512 * Function Attributes:: Declaring that functions have no side effects,
   20513                         or that they can never return.
   20514 * Attribute Syntax::    Formal syntax for attributes.
   20515 * Function Prototypes:: Prototype declarations and old-style definitions.
   20516 * C++ Comments::        C++ comments are recognized.
   20517 * Dollar Signs::        Dollar sign is allowed in identifiers.
   20518 * Character Escapes::   `\e' stands for the character <ESC>.
   20519 * Variable Attributes:: Specifying attributes of variables.
   20520 * Type Attributes::     Specifying attributes of types.
   20521 * Alignment::           Inquiring about the alignment of a type or variable.
   20522 * Inline::              Defining inline functions (as fast as macros).
   20523 * Volatiles::           What constitutes an access to a volatile object.
   20524 * Extended Asm::        Assembler instructions with C expressions as operands.
   20525                         (With them you can define ``built-in'' functions.)
   20526 * Constraints::         Constraints for asm operands
   20527 * Asm Labels::          Specifying the assembler name to use for a C symbol.
   20528 * Explicit Reg Vars::   Defining variables residing in specified registers.
   20529 * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
   20530 * Incomplete Enums::    `enum foo;', with details to follow.
   20531 * Function Names::      Printable strings which are the name of the current
   20532                         function.
   20533 * Return Address::      Getting the return or frame address of a function.
   20534 * Vector Extensions::   Using vector instructions through built-in functions.
   20535 * Offsetof::            Special syntax for implementing `offsetof'.
   20536 * __sync Builtins::     Legacy built-in functions for atomic memory access.
   20537 * __atomic Builtins::   Atomic built-in functions with memory model.
   20538 * x86 specific memory model extensions for transactional memory:: x86 memory models.
   20539 * Object Size Checking:: Built-in functions for limited buffer overflow
   20540                         checking.
   20541 * Other Builtins::      Other built-in functions.
   20542 * Target Builtins::     Built-in functions specific to particular targets.
   20543 * Target Format Checks:: Format checks specific to particular targets.
   20544 * Pragmas::             Pragmas accepted by GCC.
   20545 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
   20546 * Thread-Local::        Per-thread variables.
   20547 * Binary constants::    Binary constants using the `0b' prefix.
   20548 
   20549 
   20550 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
   20551 
   20552 6.1 Statements and Declarations in Expressions
   20553 ==============================================
   20554 
   20555 A compound statement enclosed in parentheses may appear as an expression
   20556 in GNU C.  This allows you to use loops, switches, and local variables
   20557 within an expression.
   20558 
   20559  Recall that a compound statement is a sequence of statements surrounded
   20560 by braces; in this construct, parentheses go around the braces.  For
   20561 example:
   20562 
   20563      ({ int y = foo (); int z;
   20564         if (y > 0) z = y;
   20565         else z = - y;
   20566         z; })
   20567 
   20568 is a valid (though slightly more complex than necessary) expression for
   20569 the absolute value of `foo ()'.
   20570 
   20571  The last thing in the compound statement should be an expression
   20572 followed by a semicolon; the value of this subexpression serves as the
   20573 value of the entire construct.  (If you use some other kind of statement
   20574 last within the braces, the construct has type `void', and thus
   20575 effectively no value.)
   20576 
   20577  This feature is especially useful in making macro definitions "safe"
   20578 (so that they evaluate each operand exactly once).  For example, the
   20579 "maximum" function is commonly defined as a macro in standard C as
   20580 follows:
   20581 
   20582      #define max(a,b) ((a) > (b) ? (a) : (b))
   20583 
   20584 But this definition computes either A or B twice, with bad results if
   20585 the operand has side effects.  In GNU C, if you know the type of the
   20586 operands (here taken as `int'), you can define the macro safely as
   20587 follows:
   20588 
   20589      #define maxint(a,b) \
   20590        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
   20591 
   20592  Embedded statements are not allowed in constant expressions, such as
   20593 the value of an enumeration constant, the width of a bit-field, or the
   20594 initial value of a static variable.
   20595 
   20596  If you don't know the type of the operand, you can still do this, but
   20597 you must use `typeof' (*note Typeof::).
   20598 
   20599  In G++, the result value of a statement expression undergoes array and
   20600 function pointer decay, and is returned by value to the enclosing
   20601 expression.  For instance, if `A' is a class, then
   20602 
   20603              A a;
   20604 
   20605              ({a;}).Foo ()
   20606 
   20607 constructs a temporary `A' object to hold the result of the statement
   20608 expression, and that is used to invoke `Foo'.  Therefore the `this'
   20609 pointer observed by `Foo' is not the address of `a'.
   20610 
   20611  In a statement expression, any temporaries created within a statement
   20612 are destroyed at that statement's end.  This makes statement
   20613 expressions inside macros slightly different from function calls.  In
   20614 the latter case temporaries introduced during argument evaluation are
   20615 destroyed at the end of the statement that includes the function call.
   20616 In the statement expression case they are destroyed during the
   20617 statement expression.  For instance,
   20618 
   20619      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
   20620      template<typename T> T function(T a) { T b = a; return b + 3; }
   20621 
   20622      void foo ()
   20623      {
   20624        macro (X ());
   20625        function (X ());
   20626      }
   20627 
   20628 has different places where temporaries are destroyed.  For the `macro'
   20629 case, the temporary `X' is destroyed just after the initialization of
   20630 `b'.  In the `function' case that temporary is destroyed when the
   20631 function returns.
   20632 
   20633  These considerations mean that it is probably a bad idea to use
   20634 statement expressions of this form in header files that are designed to
   20635 work with C++.  (Note that some versions of the GNU C Library contained
   20636 header files using statement expressions that lead to precisely this
   20637 bug.)
   20638 
   20639  Jumping into a statement expression with `goto' or using a `switch'
   20640 statement outside the statement expression with a `case' or `default'
   20641 label inside the statement expression is not permitted.  Jumping into a
   20642 statement expression with a computed `goto' (*note Labels as Values::)
   20643 has undefined behavior.  Jumping out of a statement expression is
   20644 permitted, but if the statement expression is part of a larger
   20645 expression then it is unspecified which other subexpressions of that
   20646 expression have been evaluated except where the language definition
   20647 requires certain subexpressions to be evaluated before or after the
   20648 statement expression.  In any case, as with a function call, the
   20649 evaluation of a statement expression is not interleaved with the
   20650 evaluation of other parts of the containing expression.  For example,
   20651 
   20652        foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
   20653 
   20654 calls `foo' and `bar1' and does not call `baz' but may or may not call
   20655 `bar2'.  If `bar2' is called, it is called after `foo' and before
   20656 `bar1'.
   20657 
   20658 
   20659 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
   20660 
   20661 6.2 Locally Declared Labels
   20662 ===========================
   20663 
   20664 GCC allows you to declare "local labels" in any nested block scope.  A
   20665 local label is just like an ordinary label, but you can only reference
   20666 it (with a `goto' statement, or by taking its address) within the block
   20667 in which it is declared.
   20668 
   20669  A local label declaration looks like this:
   20670 
   20671      __label__ LABEL;
   20672 
   20673 or
   20674 
   20675      __label__ LABEL1, LABEL2, /* ... */;
   20676 
   20677  Local label declarations must come at the beginning of the block,
   20678 before any ordinary declarations or statements.
   20679 
   20680  The label declaration defines the label _name_, but does not define
   20681 the label itself.  You must do this in the usual way, with `LABEL:',
   20682 within the statements of the statement expression.
   20683 
   20684  The local label feature is useful for complex macros.  If a macro
   20685 contains nested loops, a `goto' can be useful for breaking out of them.
   20686 However, an ordinary label whose scope is the whole function cannot be
   20687 used: if the macro can be expanded several times in one function, the
   20688 label is multiply defined in that function.  A local label avoids this
   20689 problem.  For example:
   20690 
   20691      #define SEARCH(value, array, target)              \
   20692      do {                                              \
   20693        __label__ found;                                \
   20694        typeof (target) _SEARCH_target = (target);      \
   20695        typeof (*(array)) *_SEARCH_array = (array);     \
   20696        int i, j;                                       \
   20697        int value;                                      \
   20698        for (i = 0; i < max; i++)                       \
   20699          for (j = 0; j < max; j++)                     \
   20700            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   20701              { (value) = i; goto found; }              \
   20702        (value) = -1;                                   \
   20703       found:;                                          \
   20704      } while (0)
   20705 
   20706  This could also be written using a statement expression:
   20707 
   20708      #define SEARCH(array, target)                     \
   20709      ({                                                \
   20710        __label__ found;                                \
   20711        typeof (target) _SEARCH_target = (target);      \
   20712        typeof (*(array)) *_SEARCH_array = (array);     \
   20713        int i, j;                                       \
   20714        int value;                                      \
   20715        for (i = 0; i < max; i++)                       \
   20716          for (j = 0; j < max; j++)                     \
   20717            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   20718              { value = i; goto found; }                \
   20719        value = -1;                                     \
   20720       found:                                           \
   20721        value;                                          \
   20722      })
   20723 
   20724  Local label declarations also make the labels they declare visible to
   20725 nested functions, if there are any.  *Note Nested Functions::, for
   20726 details.
   20727 
   20728 
   20729 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
   20730 
   20731 6.3 Labels as Values
   20732 ====================
   20733 
   20734 You can get the address of a label defined in the current function (or
   20735 a containing function) with the unary operator `&&'.  The value has
   20736 type `void *'.  This value is a constant and can be used wherever a
   20737 constant of that type is valid.  For example:
   20738 
   20739      void *ptr;
   20740      /* ... */
   20741      ptr = &&foo;
   20742 
   20743  To use these values, you need to be able to jump to one.  This is done
   20744 with the computed goto statement(1), `goto *EXP;'.  For example,
   20745 
   20746      goto *ptr;
   20747 
   20748 Any expression of type `void *' is allowed.
   20749 
   20750  One way of using these constants is in initializing a static array that
   20751 serves as a jump table:
   20752 
   20753      static void *array[] = { &&foo, &&bar, &&hack };
   20754 
   20755 Then you can select a label with indexing, like this:
   20756 
   20757      goto *array[i];
   20758 
   20759 Note that this does not check whether the subscript is in bounds--array
   20760 indexing in C never does that.
   20761 
   20762  Such an array of label values serves a purpose much like that of the
   20763 `switch' statement.  The `switch' statement is cleaner, so use that
   20764 rather than an array unless the problem does not fit a `switch'
   20765 statement very well.
   20766 
   20767  Another use of label values is in an interpreter for threaded code.
   20768 The labels within the interpreter function can be stored in the
   20769 threaded code for super-fast dispatching.
   20770 
   20771  You may not use this mechanism to jump to code in a different function.
   20772 If you do that, totally unpredictable things happen.  The best way to
   20773 avoid this is to store the label address only in automatic variables and
   20774 never pass it as an argument.
   20775 
   20776  An alternate way to write the above example is
   20777 
   20778      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
   20779                                   &&hack - &&foo };
   20780      goto *(&&foo + array[i]);
   20781 
   20782 This is more friendly to code living in shared libraries, as it reduces
   20783 the number of dynamic relocations that are needed, and by consequence,
   20784 allows the data to be read-only.
   20785 
   20786  The `&&foo' expressions for the same label might have different values
   20787 if the containing function is inlined or cloned.  If a program relies
   20788 on them being always the same,
   20789 `__attribute__((__noinline__,__noclone__))' should be used to prevent
   20790 inlining and cloning.  If `&&foo' is used in a static variable
   20791 initializer, inlining and cloning is forbidden.
   20792 
   20793  ---------- Footnotes ----------
   20794 
   20795  (1) The analogous feature in Fortran is called an assigned goto, but
   20796 that name seems inappropriate in C, where one can do more than simply
   20797 store label addresses in label variables.
   20798 
   20799 
   20800 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
   20801 
   20802 6.4 Nested Functions
   20803 ====================
   20804 
   20805 A "nested function" is a function defined inside another function.
   20806 Nested functions are supported as an extension in GNU C, but are not
   20807 supported by GNU C++.
   20808 
   20809  The nested function's name is local to the block where it is defined.
   20810 For example, here we define a nested function named `square', and call
   20811 it twice:
   20812 
   20813      foo (double a, double b)
   20814      {
   20815        double square (double z) { return z * z; }
   20816 
   20817        return square (a) + square (b);
   20818      }
   20819 
   20820  The nested function can access all the variables of the containing
   20821 function that are visible at the point of its definition.  This is
   20822 called "lexical scoping".  For example, here we show a nested function
   20823 which uses an inherited variable named `offset':
   20824 
   20825      bar (int *array, int offset, int size)
   20826      {
   20827        int access (int *array, int index)
   20828          { return array[index + offset]; }
   20829        int i;
   20830        /* ... */
   20831        for (i = 0; i < size; i++)
   20832          /* ... */ access (array, i) /* ... */
   20833      }
   20834 
   20835  Nested function definitions are permitted within functions in the
   20836 places where variable definitions are allowed; that is, in any block,
   20837 mixed with the other declarations and statements in the block.
   20838 
   20839  It is possible to call the nested function from outside the scope of
   20840 its name by storing its address or passing the address to another
   20841 function:
   20842 
   20843      hack (int *array, int size)
   20844      {
   20845        void store (int index, int value)
   20846          { array[index] = value; }
   20847 
   20848        intermediate (store, size);
   20849      }
   20850 
   20851  Here, the function `intermediate' receives the address of `store' as
   20852 an argument.  If `intermediate' calls `store', the arguments given to
   20853 `store' are used to store into `array'.  But this technique works only
   20854 so long as the containing function (`hack', in this example) does not
   20855 exit.
   20856 
   20857  If you try to call the nested function through its address after the
   20858 containing function exits, all hell breaks loose.  If you try to call
   20859 it after a containing scope level exits, and if it refers to some of
   20860 the variables that are no longer in scope, you may be lucky, but it's
   20861 not wise to take the risk.  If, however, the nested function does not
   20862 refer to anything that has gone out of scope, you should be safe.
   20863 
   20864  GCC implements taking the address of a nested function using a
   20865 technique called "trampolines".  This technique was described in
   20866 `Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
   20867 Proceedings, October 17-21, 1988).
   20868 
   20869  A nested function can jump to a label inherited from a containing
   20870 function, provided the label is explicitly declared in the containing
   20871 function (*note Local Labels::).  Such a jump returns instantly to the
   20872 containing function, exiting the nested function that did the `goto'
   20873 and any intermediate functions as well.  Here is an example:
   20874 
   20875      bar (int *array, int offset, int size)
   20876      {
   20877        __label__ failure;
   20878        int access (int *array, int index)
   20879          {
   20880            if (index > size)
   20881              goto failure;
   20882            return array[index + offset];
   20883          }
   20884        int i;
   20885        /* ... */
   20886        for (i = 0; i < size; i++)
   20887          /* ... */ access (array, i) /* ... */
   20888        /* ... */
   20889        return 0;
   20890 
   20891       /* Control comes here from `access'
   20892          if it detects an error.  */
   20893       failure:
   20894        return -1;
   20895      }
   20896 
   20897  A nested function always has no linkage.  Declaring one with `extern'
   20898 or `static' is erroneous.  If you need to declare the nested function
   20899 before its definition, use `auto' (which is otherwise meaningless for
   20900 function declarations).
   20901 
   20902      bar (int *array, int offset, int size)
   20903      {
   20904        __label__ failure;
   20905        auto int access (int *, int);
   20906        /* ... */
   20907        int access (int *array, int index)
   20908          {
   20909            if (index > size)
   20910              goto failure;
   20911            return array[index + offset];
   20912          }
   20913        /* ... */
   20914      }
   20915 
   20916 
   20917 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
   20918 
   20919 6.5 Constructing Function Calls
   20920 ===============================
   20921 
   20922 Using the built-in functions described below, you can record the
   20923 arguments a function received, and call another function with the same
   20924 arguments, without knowing the number or types of the arguments.
   20925 
   20926  You can also record the return value of that function call, and later
   20927 return that value, without knowing what data type the function tried to
   20928 return (as long as your caller expects that data type).
   20929 
   20930  However, these built-in functions may interact badly with some
   20931 sophisticated features or other extensions of the language.  It is,
   20932 therefore, not recommended to use them outside very simple functions
   20933 acting as mere forwarders for their arguments.
   20934 
   20935  -- Built-in Function: void * __builtin_apply_args ()
   20936      This built-in function returns a pointer to data describing how to
   20937      perform a call with the same arguments as are passed to the
   20938      current function.
   20939 
   20940      The function saves the arg pointer register, structure value
   20941      address, and all registers that might be used to pass arguments to
   20942      a function into a block of memory allocated on the stack.  Then it
   20943      returns the address of that block.
   20944 
   20945  -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
   20946           *ARGUMENTS, size_t SIZE)
   20947      This built-in function invokes FUNCTION with a copy of the
   20948      parameters described by ARGUMENTS and SIZE.
   20949 
   20950      The value of ARGUMENTS should be the value returned by
   20951      `__builtin_apply_args'.  The argument SIZE specifies the size of
   20952      the stack argument data, in bytes.
   20953 
   20954      This function returns a pointer to data describing how to return
   20955      whatever value is returned by FUNCTION.  The data is saved in a
   20956      block of memory allocated on the stack.
   20957 
   20958      It is not always simple to compute the proper value for SIZE.  The
   20959      value is used by `__builtin_apply' to compute the amount of data
   20960      that should be pushed on the stack and copied from the incoming
   20961      argument area.
   20962 
   20963  -- Built-in Function: void __builtin_return (void *RESULT)
   20964      This built-in function returns the value described by RESULT from
   20965      the containing function.  You should specify, for RESULT, a value
   20966      returned by `__builtin_apply'.
   20967 
   20968  -- Built-in Function:  __builtin_va_arg_pack ()
   20969      This built-in function represents all anonymous arguments of an
   20970      inline function.  It can be used only in inline functions that are
   20971      always inlined, never compiled as a separate function, such as
   20972      those using `__attribute__ ((__always_inline__))' or
   20973      `__attribute__ ((__gnu_inline__))' extern inline functions.  It
   20974      must be only passed as last argument to some other function with
   20975      variable arguments.  This is useful for writing small wrapper
   20976      inlines for variable argument functions, when using preprocessor
   20977      macros is undesirable.  For example:
   20978           extern int myprintf (FILE *f, const char *format, ...);
   20979           extern inline __attribute__ ((__gnu_inline__)) int
   20980           myprintf (FILE *f, const char *format, ...)
   20981           {
   20982             int r = fprintf (f, "myprintf: ");
   20983             if (r < 0)
   20984               return r;
   20985             int s = fprintf (f, format, __builtin_va_arg_pack ());
   20986             if (s < 0)
   20987               return s;
   20988             return r + s;
   20989           }
   20990 
   20991  -- Built-in Function: size_t __builtin_va_arg_pack_len ()
   20992      This built-in function returns the number of anonymous arguments of
   20993      an inline function.  It can be used only in inline functions that
   20994      are always inlined, never compiled as a separate function, such as
   20995      those using `__attribute__ ((__always_inline__))' or
   20996      `__attribute__ ((__gnu_inline__))' extern inline functions.  For
   20997      example following does link- or run-time checking of open
   20998      arguments for optimized code:
   20999           #ifdef __OPTIMIZE__
   21000           extern inline __attribute__((__gnu_inline__)) int
   21001           myopen (const char *path, int oflag, ...)
   21002           {
   21003             if (__builtin_va_arg_pack_len () > 1)
   21004               warn_open_too_many_arguments ();
   21005 
   21006             if (__builtin_constant_p (oflag))
   21007               {
   21008                 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
   21009                   {
   21010                     warn_open_missing_mode ();
   21011                     return __open_2 (path, oflag);
   21012                   }
   21013                 return open (path, oflag, __builtin_va_arg_pack ());
   21014               }
   21015 
   21016             if (__builtin_va_arg_pack_len () < 1)
   21017               return __open_2 (path, oflag);
   21018 
   21019             return open (path, oflag, __builtin_va_arg_pack ());
   21020           }
   21021           #endif
   21022 
   21023 
   21024 File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
   21025 
   21026 6.6 Referring to a Type with `typeof'
   21027 =====================================
   21028 
   21029 Another way to refer to the type of an expression is with `typeof'.
   21030 The syntax of using of this keyword looks like `sizeof', but the
   21031 construct acts semantically like a type name defined with `typedef'.
   21032 
   21033  There are two ways of writing the argument to `typeof': with an
   21034 expression or with a type.  Here is an example with an expression:
   21035 
   21036      typeof (x[0](1))
   21037 
   21038 This assumes that `x' is an array of pointers to functions; the type
   21039 described is that of the values of the functions.
   21040 
   21041  Here is an example with a typename as the argument:
   21042 
   21043      typeof (int *)
   21044 
   21045 Here the type described is that of pointers to `int'.
   21046 
   21047  If you are writing a header file that must work when included in ISO C
   21048 programs, write `__typeof__' instead of `typeof'.  *Note Alternate
   21049 Keywords::.
   21050 
   21051  A `typeof' construct can be used anywhere a typedef name can be used.
   21052 For example, you can use it in a declaration, in a cast, or inside of
   21053 `sizeof' or `typeof'.
   21054 
   21055  The operand of `typeof' is evaluated for its side effects if and only
   21056 if it is an expression of variably modified type or the name of such a
   21057 type.
   21058 
   21059  `typeof' is often useful in conjunction with statement expressions
   21060 (*note Statement Exprs::).  Here is how the two together can be used to
   21061 define a safe "maximum" macro which operates on any arithmetic type and
   21062 evaluates each of its arguments exactly once:
   21063 
   21064      #define max(a,b) \
   21065        ({ typeof (a) _a = (a); \
   21066            typeof (b) _b = (b); \
   21067          _a > _b ? _a : _b; })
   21068 
   21069  The reason for using names that start with underscores for the local
   21070 variables is to avoid conflicts with variable names that occur within
   21071 the expressions that are substituted for `a' and `b'.  Eventually we
   21072 hope to design a new form of declaration syntax that allows you to
   21073 declare variables whose scopes start only after their initializers;
   21074 this will be a more reliable way to prevent such conflicts.
   21075 
   21076 Some more examples of the use of `typeof':
   21077 
   21078    * This declares `y' with the type of what `x' points to.
   21079 
   21080           typeof (*x) y;
   21081 
   21082    * This declares `y' as an array of such values.
   21083 
   21084           typeof (*x) y[4];
   21085 
   21086    * This declares `y' as an array of pointers to characters:
   21087 
   21088           typeof (typeof (char *)[4]) y;
   21089 
   21090      It is equivalent to the following traditional C declaration:
   21091 
   21092           char *y[4];
   21093 
   21094      To see the meaning of the declaration using `typeof', and why it
   21095      might be a useful way to write, rewrite it with these macros:
   21096 
   21097           #define pointer(T)  typeof(T *)
   21098           #define array(T, N) typeof(T [N])
   21099 
   21100      Now the declaration can be rewritten this way:
   21101 
   21102           array (pointer (char), 4) y;
   21103 
   21104      Thus, `array (pointer (char), 4)' is the type of arrays of 4
   21105      pointers to `char'.
   21106 
   21107  _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
   21108 limited extension that permitted one to write
   21109 
   21110      typedef T = EXPR;
   21111 
   21112 with the effect of declaring T to have the type of the expression EXPR.
   21113 This extension does not work with GCC 3 (versions between 3.0 and 3.2
   21114 crash; 3.2.1 and later give an error).  Code that relies on it should
   21115 be rewritten to use `typeof':
   21116 
   21117      typedef typeof(EXPR) T;
   21118 
   21119 This works with all versions of GCC.
   21120 
   21121 
   21122 File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
   21123 
   21124 6.7 Conditionals with Omitted Operands
   21125 ======================================
   21126 
   21127 The middle operand in a conditional expression may be omitted.  Then if
   21128 the first operand is nonzero, its value is the value of the conditional
   21129 expression.
   21130 
   21131  Therefore, the expression
   21132 
   21133      x ? : y
   21134 
   21135 has the value of `x' if that is nonzero; otherwise, the value of `y'.
   21136 
   21137  This example is perfectly equivalent to
   21138 
   21139      x ? x : y
   21140 
   21141 In this simple case, the ability to omit the middle operand is not
   21142 especially useful.  When it becomes useful is when the first operand
   21143 does, or may (if it is a macro argument), contain a side effect.  Then
   21144 repeating the operand in the middle would perform the side effect
   21145 twice.  Omitting the middle operand uses the value already computed
   21146 without the undesirable effects of recomputing it.
   21147 
   21148 
   21149 File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
   21150 
   21151 6.8 128-bit integers
   21152 ====================
   21153 
   21154 As an extension the integer scalar type `__int128' is supported for
   21155 targets which have an integer mode wide enough to hold 128 bits.
   21156 Simply write `__int128' for a signed 128-bit integer, or `unsigned
   21157 __int128' for an unsigned 128-bit integer.  There is no support in GCC
   21158 for expressing an integer constant of type `__int128' for targets with
   21159 `long long' integer less than 128 bits wide.
   21160 
   21161 
   21162 File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
   21163 
   21164 6.9 Double-Word Integers
   21165 ========================
   21166 
   21167 ISO C99 supports data types for integers that are at least 64 bits wide,
   21168 and as an extension GCC supports them in C90 mode and in C++.  Simply
   21169 write `long long int' for a signed integer, or `unsigned long long int'
   21170 for an unsigned integer.  To make an integer constant of type `long
   21171 long int', add the suffix `LL' to the integer.  To make an integer
   21172 constant of type `unsigned long long int', add the suffix `ULL' to the
   21173 integer.
   21174 
   21175  You can use these types in arithmetic like any other integer types.
   21176 Addition, subtraction, and bitwise boolean operations on these types
   21177 are open-coded on all types of machines.  Multiplication is open-coded
   21178 if the machine supports a fullword-to-doubleword widening multiply
   21179 instruction.  Division and shifts are open-coded only on machines that
   21180 provide special support.  The operations that are not open-coded use
   21181 special library routines that come with GCC.
   21182 
   21183  There may be pitfalls when you use `long long' types for function
   21184 arguments without function prototypes.  If a function expects type
   21185 `int' for its argument, and you pass a value of type `long long int',
   21186 confusion results because the caller and the subroutine disagree about
   21187 the number of bytes for the argument.  Likewise, if the function
   21188 expects `long long int' and you pass `int'.  The best way to avoid such
   21189 problems is to use prototypes.
   21190 
   21191 
   21192 File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
   21193 
   21194 6.10 Complex Numbers
   21195 ====================
   21196 
   21197 ISO C99 supports complex floating data types, and as an extension GCC
   21198 supports them in C90 mode and in C++.  GCC also supports complex
   21199 integer data types which are not part of ISO C99.  You can declare
   21200 complex types using the keyword `_Complex'.  As an extension, the older
   21201 GNU keyword `__complex__' is also supported.
   21202 
   21203  For example, `_Complex double x;' declares `x' as a variable whose
   21204 real part and imaginary part are both of type `double'.  `_Complex
   21205 short int y;' declares `y' to have real and imaginary parts of type
   21206 `short int'; this is not likely to be useful, but it shows that the set
   21207 of complex types is complete.
   21208 
   21209  To write a constant with a complex data type, use the suffix `i' or
   21210 `j' (either one; they are equivalent).  For example, `2.5fi' has type
   21211 `_Complex float' and `3i' has type `_Complex int'.  Such a constant
   21212 always has a pure imaginary value, but you can form any complex value
   21213 you like by adding one to a real constant.  This is a GNU extension; if
   21214 you have an ISO C99 conforming C library (such as the GNU C Library),
   21215 and want to construct complex constants of floating type, you should
   21216 include `<complex.h>' and use the macros `I' or `_Complex_I' instead.
   21217 
   21218  To extract the real part of a complex-valued expression EXP, write
   21219 `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
   21220 part.  This is a GNU extension; for values of floating type, you should
   21221 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
   21222 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
   21223 built-in functions by GCC.
   21224 
   21225  The operator `~' performs complex conjugation when used on a value
   21226 with a complex type.  This is a GNU extension; for values of floating
   21227 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
   21228 declared in `<complex.h>' and also provided as built-in functions by
   21229 GCC.
   21230 
   21231  GCC can allocate complex automatic variables in a noncontiguous
   21232 fashion; it's even possible for the real part to be in a register while
   21233 the imaginary part is on the stack (or vice versa).  Only the DWARF 2
   21234 debug info format can represent this, so use of DWARF 2 is recommended.
   21235 If you are using the stabs debug info format, GCC describes a
   21236 noncontiguous complex variable as if it were two separate variables of
   21237 noncomplex type.  If the variable's actual name is `foo', the two
   21238 fictitious variables are named `foo$real' and `foo$imag'.  You can
   21239 examine and set these two fictitious variables with your debugger.
   21240 
   21241 
   21242 File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
   21243 
   21244 6.11 Additional Floating Types
   21245 ==============================
   21246 
   21247 As an extension, GNU C supports additional floating types, `__float80'
   21248 and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode')
   21249 floating types.  Support for additional types includes the arithmetic
   21250 operators: add, subtract, multiply, divide; unary arithmetic operators;
   21251 relational operators; equality operators; and conversions to and from
   21252 integer and other floating types.  Use a suffix `w' or `W' in a literal
   21253 constant of type `__float80' and `q' or `Q' for `_float128'.  You can
   21254 declare complex types using the corresponding internal complex type,
   21255 `XCmode' for `__float80' type and `TCmode' for `__float128' type:
   21256 
   21257      typedef _Complex float __attribute__((mode(TC))) _Complex128;
   21258      typedef _Complex float __attribute__((mode(XC))) _Complex80;
   21259 
   21260  Not all targets support additional floating-point types.  `__float80'
   21261 and `__float128' types are supported on i386, x86_64 and IA-64 targets.
   21262 The `__float128' type is supported on hppa HP-UX targets.
   21263 
   21264 
   21265 File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
   21266 
   21267 6.12 Half-Precision Floating Point
   21268 ==================================
   21269 
   21270 On ARM targets, GCC supports half-precision (16-bit) floating point via
   21271 the `__fp16' type.  You must enable this type explicitly with the
   21272 `-mfp16-format' command-line option in order to use it.
   21273 
   21274  ARM supports two incompatible representations for half-precision
   21275 floating-point values.  You must choose one of the representations and
   21276 use it consistently in your program.
   21277 
   21278  Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
   21279 This format can represent normalized values in the range of 2^-14 to
   21280 65504.  There are 11 bits of significand precision, approximately 3
   21281 decimal digits.
   21282 
   21283  Specifying `-mfp16-format=alternative' selects the ARM alternative
   21284 format.  This representation is similar to the IEEE format, but does
   21285 not support infinities or NaNs.  Instead, the range of exponents is
   21286 extended, so that this format can represent normalized values in the
   21287 range of 2^-14 to 131008.
   21288 
   21289  The `__fp16' type is a storage format only.  For purposes of
   21290 arithmetic and other operations, `__fp16' values in C or C++
   21291 expressions are automatically promoted to `float'.  In addition, you
   21292 cannot declare a function with a return value or parameters of type
   21293 `__fp16'.
   21294 
   21295  Note that conversions from `double' to `__fp16' involve an
   21296 intermediate conversion to `float'.  Because of rounding, this can
   21297 sometimes produce a different result than a direct conversion.
   21298 
   21299  ARM provides hardware support for conversions between `__fp16' and
   21300 `float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
   21301 generates code using these hardware instructions if you compile with
   21302 options to select an FPU that provides them; for example,
   21303 `-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
   21304 `-mfp16-format' option to select a half-precision format.
   21305 
   21306  Language-level support for the `__fp16' data type is independent of
   21307 whether GCC generates code using hardware floating-point instructions.
   21308 In cases where hardware support is not specified, GCC implements
   21309 conversions between `__fp16' and `float' values as library calls.
   21310 
   21311 
   21312 File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
   21313 
   21314 6.13 Decimal Floating Types
   21315 ===========================
   21316 
   21317 As an extension, GNU C supports decimal floating types as defined in
   21318 the N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating
   21319 types in GCC will evolve as the draft technical report changes.
   21320 Calling conventions for any target might also change.  Not all targets
   21321 support decimal floating types.
   21322 
   21323  The decimal floating types are `_Decimal32', `_Decimal64', and
   21324 `_Decimal128'.  They use a radix of ten, unlike the floating types
   21325 `float', `double', and `long double' whose radix is not specified by
   21326 the C standard but is usually two.
   21327 
   21328  Support for decimal floating types includes the arithmetic operators
   21329 add, subtract, multiply, divide; unary arithmetic operators; relational
   21330 operators; equality operators; and conversions to and from integer and
   21331 other floating types.  Use a suffix `df' or `DF' in a literal constant
   21332 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
   21333 for `_Decimal128'.
   21334 
   21335  GCC support of decimal float as specified by the draft technical report
   21336 is incomplete:
   21337 
   21338    * When the value of a decimal floating type cannot be represented in
   21339      the integer type to which it is being converted, the result is
   21340      undefined rather than the result value specified by the draft
   21341      technical report.
   21342 
   21343    * GCC does not provide the C library functionality associated with
   21344      `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
   21345      must come from a separate C library implementation.  Because of
   21346      this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
   21347      indicate that the implementation conforms to the technical report.
   21348 
   21349  Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
   21350 the DWARF 2 debug information format.
   21351 
   21352 
   21353 File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
   21354 
   21355 6.14 Hex Floats
   21356 ===============
   21357 
   21358 ISO C99 supports floating-point numbers written not only in the usual
   21359 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
   21360 written in hexadecimal format.  As a GNU extension, GCC supports this
   21361 in C90 mode (except in some cases when strictly conforming) and in C++.
   21362 In that format the `0x' hex introducer and the `p' or `P' exponent
   21363 field are mandatory.  The exponent is a decimal number that indicates
   21364 the power of 2 by which the significant part is multiplied.  Thus
   21365 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
   21366 is the same as `1.55e1'.
   21367 
   21368  Unlike for floating-point numbers in the decimal notation the exponent
   21369 is always required in the hexadecimal notation.  Otherwise the compiler
   21370 would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
   21371 could mean `1.0f' or `1.9375' since `f' is also the extension for
   21372 floating-point constants of type `float'.
   21373 
   21374 
   21375 File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
   21376 
   21377 6.15 Fixed-Point Types
   21378 ======================
   21379 
   21380 As an extension, GNU C supports fixed-point types as defined in the
   21381 N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
   21382 will evolve as the draft technical report changes.  Calling conventions
   21383 for any target might also change.  Not all targets support fixed-point
   21384 types.
   21385 
   21386  The fixed-point types are `short _Fract', `_Fract', `long _Fract',
   21387 `long long _Fract', `unsigned short _Fract', `unsigned _Fract',
   21388 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short
   21389 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
   21390 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
   21391 long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
   21392 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
   21393 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
   21394 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
   21395 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
   21396 unsigned long _Accum', `_Sat unsigned long long _Accum'.
   21397 
   21398  Fixed-point data values contain fractional and optional integral parts.
   21399 The format of fixed-point data varies and depends on the target machine.
   21400 
   21401  Support for fixed-point types includes:
   21402    * prefix and postfix increment and decrement operators (`++', `--')
   21403 
   21404    * unary arithmetic operators (`+', `-', `!')
   21405 
   21406    * binary arithmetic operators (`+', `-', `*', `/')
   21407 
   21408    * binary shift operators (`<<', `>>')
   21409 
   21410    * relational operators (`<', `<=', `>=', `>')
   21411 
   21412    * equality operators (`==', `!=')
   21413 
   21414    * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
   21415 
   21416    * conversions to and from integer, floating-point, or fixed-point
   21417      types
   21418 
   21419  Use a suffix in a fixed-point literal constant:
   21420    * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
   21421 
   21422    * `r' or `R' for `_Fract' and `_Sat _Fract'
   21423 
   21424    * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
   21425 
   21426    * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
   21427 
   21428    * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
   21429      short _Fract'
   21430 
   21431    * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
   21432 
   21433    * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
   21434      _Fract'
   21435 
   21436    * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
   21437      unsigned long long _Fract'
   21438 
   21439    * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
   21440 
   21441    * `k' or `K' for `_Accum' and `_Sat _Accum'
   21442 
   21443    * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
   21444 
   21445    * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
   21446 
   21447    * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
   21448      short _Accum'
   21449 
   21450    * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
   21451 
   21452    * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
   21453      _Accum'
   21454 
   21455    * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
   21456      unsigned long long _Accum'
   21457 
   21458  GCC support of fixed-point types as specified by the draft technical
   21459 report is incomplete:
   21460 
   21461    * Pragmas to control overflow and rounding behaviors are not
   21462      implemented.
   21463 
   21464  Fixed-point types are supported by the DWARF 2 debug information
   21465 format.
   21466 
   21467 
   21468 File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
   21469 
   21470 6.16 Named Address Spaces
   21471 =========================
   21472 
   21473 As an extension, GNU C supports named address spaces as defined in the
   21474 N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
   21475 GCC will evolve as the draft technical report changes.  Calling
   21476 conventions for any target might also change.  At present, only the
   21477 AVR, SPU, M32C, and RL78 targets support address spaces other than the
   21478 generic address space.
   21479 
   21480  Address space identifiers may be used exactly like any other C type
   21481 qualifier (e.g., `const' or `volatile').  See the N1275 document for
   21482 more details.
   21483 
   21484 6.16.1 AVR Named Address Spaces
   21485 -------------------------------
   21486 
   21487 On the AVR target, there are several address spaces that can be used in
   21488 order to put read-only data into the flash memory and access that data
   21489 by means of the special instructions `LPM' or `ELPM' needed to read
   21490 from flash.
   21491 
   21492  Per default, any data including read-only data is located in RAM (the
   21493 generic address space) so that non-generic address spaces are needed to
   21494 locate read-only data in flash memory _and_ to generate the right
   21495 instructions to access this data without using (inline) assembler code.
   21496 
   21497 `__flash'
   21498      The `__flash' qualifier locates data in the `.progmem.data'
   21499      section. Data is read using the `LPM' instruction. Pointers to
   21500      this address space are 16 bits wide.
   21501 
   21502 `__flash1'
   21503 `__flash2'
   21504 `__flash3'
   21505 `__flash4'
   21506 `__flash5'
   21507      These are 16-bit address spaces locating data in section
   21508      `.progmemN.data' where N refers to address space `__flashN'.  The
   21509      compiler sets the `RAMPZ' segment register appropriately before
   21510      reading data by means of the `ELPM' instruction.
   21511 
   21512 `__memx'
   21513      This is a 24-bit address space that linearizes flash and RAM: If
   21514      the high bit of the address is set, data is read from RAM using
   21515      the lower two bytes as RAM address.  If the high bit of the
   21516      address is clear, data is read from flash with `RAMPZ' set
   21517      according to the high byte of the address.  *Note
   21518      `__builtin_avr_flash_segment': AVR Built-in Functions.
   21519 
   21520      Objects in this address space are located in `.progmemx.data'.
   21521 
   21522  Example
   21523 
   21524      char my_read (const __flash char ** p)
   21525      {
   21526          /* p is a pointer to RAM that points to a pointer to flash.
   21527             The first indirection of p reads that flash pointer
   21528             from RAM and the second indirection reads a char from this
   21529             flash address.  */
   21530 
   21531          return **p;
   21532      }
   21533 
   21534      /* Locate array[] in flash memory */
   21535      const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
   21536 
   21537      int i = 1;
   21538 
   21539      int main (void)
   21540      {
   21541         /* Return 17 by reading from flash memory */
   21542         return array[array[i]];
   21543      }
   21544 
   21545 For each named address space supported by avr-gcc there is an equally
   21546 named but uppercase built-in macro defined.  The purpose is to
   21547 facilitate testing if respective address space support is available or
   21548 not:
   21549 
   21550      #ifdef __FLASH
   21551      const __flash int var = 1;
   21552 
   21553      int read_var (void)
   21554      {
   21555          return var;
   21556      }
   21557      #else
   21558      #include <avr/pgmspace.h> /* From AVR-LibC */
   21559 
   21560      const int var PROGMEM = 1;
   21561 
   21562      int read_var (void)
   21563      {
   21564          return (int) pgm_read_word (&var);
   21565      }
   21566      #endif /* __FLASH */
   21567 
   21568 Notice that attribute *note `progmem': AVR Variable Attributes.
   21569 locates data in flash but accesses to these data read from generic
   21570 address space, i.e.  from RAM, so that you need special accessors like
   21571 `pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
   21572 together with attribute `progmem'.
   21573 
   21574 Limitations and caveats
   21575 
   21576    * Reading across the 64 KiB section boundary of the `__flash' or
   21577      `__flashN' address spaces shows undefined behavior. The only
   21578      address space that supports reading across the 64 KiB flash
   21579      segment boundaries is `__memx'.
   21580 
   21581    * If you use one of the `__flashN' address spaces you must arrange
   21582      your linker script to locate the `.progmemN.data' sections
   21583      according to your needs.
   21584 
   21585    * Any data or pointers to the non-generic address spaces must be
   21586      qualified as `const', i.e. as read-only data.  This still applies
   21587      if the data in one of these address spaces like software version
   21588      number or calibration lookup table are intended to be changed
   21589      after load time by, say, a boot loader. In this case the right
   21590      qualification is `const' `volatile' so that the compiler must not
   21591      optimize away known values or insert them as immediates into
   21592      operands of instructions.
   21593 
   21594    * The following code initializes a variable `pfoo' located in static
   21595      storage with a 24-bit address:
   21596           extern const __memx char foo;
   21597           const __memx void *pfoo = &foo;
   21598 
   21599      Such code requires at least binutils 2.23, see
   21600      PR13503 (http://sourceware.org/PR13503).
   21601 
   21602 
   21603 6.16.2 M32C Named Address Spaces
   21604 --------------------------------
   21605 
   21606 On the M32C target, with the R8C and M16C CPU variants, variables
   21607 qualified with `__far' are accessed using 32-bit addresses in order to
   21608 access memory beyond the first 64 Ki bytes.  If `__far' is used with
   21609 the M32CM or M32C CPU variants, it has no effect.
   21610 
   21611 6.16.3 RL78 Named Address Spaces
   21612 --------------------------------
   21613 
   21614 On the RL78 target, variables qualified with `__far' are accessed with
   21615 32-bit pointers (20-bit addresses) rather than the default 16-bit
   21616 addresses.  Non-far variables are assumed to appear in the topmost
   21617 64 KiB of the address space.
   21618 
   21619 6.16.4 SPU Named Address Spaces
   21620 -------------------------------
   21621 
   21622 On the SPU target variables may be declared as belonging to another
   21623 address space by qualifying the type with the `__ea' address space
   21624 identifier:
   21625 
   21626      extern int __ea i;
   21627 
   21628 The compiler generates special code to access the variable `i'.  It may
   21629 use runtime library support, or generate special machine instructions
   21630 to access that address space.
   21631 
   21632 
   21633 File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
   21634 
   21635 6.17 Arrays of Length Zero
   21636 ==========================
   21637 
   21638 Zero-length arrays are allowed in GNU C.  They are very useful as the
   21639 last element of a structure that is really a header for a
   21640 variable-length object:
   21641 
   21642      struct line {
   21643        int length;
   21644        char contents[0];
   21645      };
   21646 
   21647      struct line *thisline = (struct line *)
   21648        malloc (sizeof (struct line) + this_length);
   21649      thisline->length = this_length;
   21650 
   21651  In ISO C90, you would have to give `contents' a length of 1, which
   21652 means either you waste space or complicate the argument to `malloc'.
   21653 
   21654  In ISO C99, you would use a "flexible array member", which is slightly
   21655 different in syntax and semantics:
   21656 
   21657    * Flexible array members are written as `contents[]' without the `0'.
   21658 
   21659    * Flexible array members have incomplete type, and so the `sizeof'
   21660      operator may not be applied.  As a quirk of the original
   21661      implementation of zero-length arrays, `sizeof' evaluates to zero.
   21662 
   21663    * Flexible array members may only appear as the last member of a
   21664      `struct' that is otherwise non-empty.
   21665 
   21666    * A structure containing a flexible array member, or a union
   21667      containing such a structure (possibly recursively), may not be a
   21668      member of a structure or an element of an array.  (However, these
   21669      uses are permitted by GCC as extensions.)
   21670 
   21671  GCC versions before 3.0 allowed zero-length arrays to be statically
   21672 initialized, as if they were flexible arrays.  In addition to those
   21673 cases that were useful, it also allowed initializations in situations
   21674 that would corrupt later data.  Non-empty initialization of zero-length
   21675 arrays is now treated like any case where there are more initializer
   21676 elements than the array holds, in that a suitable warning about "excess
   21677 elements in array" is given, and the excess elements (all of them, in
   21678 this case) are ignored.
   21679 
   21680  Instead GCC allows static initialization of flexible array members.
   21681 This is equivalent to defining a new structure containing the original
   21682 structure followed by an array of sufficient size to contain the data.
   21683 E.g. in the following, `f1' is constructed as if it were declared like
   21684 `f2'.
   21685 
   21686      struct f1 {
   21687        int x; int y[];
   21688      } f1 = { 1, { 2, 3, 4 } };
   21689 
   21690      struct f2 {
   21691        struct f1 f1; int data[3];
   21692      } f2 = { { 1 }, { 2, 3, 4 } };
   21693 
   21694 The convenience of this extension is that `f1' has the desired type,
   21695 eliminating the need to consistently refer to `f2.f1'.
   21696 
   21697  This has symmetry with normal static arrays, in that an array of
   21698 unknown size is also written with `[]'.
   21699 
   21700  Of course, this extension only makes sense if the extra data comes at
   21701 the end of a top-level object, as otherwise we would be overwriting
   21702 data at subsequent offsets.  To avoid undue complication and confusion
   21703 with initialization of deeply nested arrays, we simply disallow any
   21704 non-empty initialization except when the structure is the top-level
   21705 object.  For example:
   21706 
   21707      struct foo { int x; int y[]; };
   21708      struct bar { struct foo z; };
   21709 
   21710      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
   21711      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
   21712      struct bar c = { { 1, { } } };            // Valid.
   21713      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
   21714 
   21715 
   21716 File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
   21717 
   21718 6.18 Structures With No Members
   21719 ===============================
   21720 
   21721 GCC permits a C structure to have no members:
   21722 
   21723      struct empty {
   21724      };
   21725 
   21726  The structure has size zero.  In C++, empty structures are part of the
   21727 language.  G++ treats empty structures as if they had a single member
   21728 of type `char'.
   21729 
   21730 
   21731 File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
   21732 
   21733 6.19 Arrays of Variable Length
   21734 ==============================
   21735 
   21736 Variable-length automatic arrays are allowed in ISO C99, and as an
   21737 extension GCC accepts them in C90 mode and in C++.  These arrays are
   21738 declared like any other automatic arrays, but with a length that is not
   21739 a constant expression.  The storage is allocated at the point of
   21740 declaration and deallocated when the block scope containing the
   21741 declaration exits.  For example:
   21742 
   21743      FILE *
   21744      concat_fopen (char *s1, char *s2, char *mode)
   21745      {
   21746        char str[strlen (s1) + strlen (s2) + 1];
   21747        strcpy (str, s1);
   21748        strcat (str, s2);
   21749        return fopen (str, mode);
   21750      }
   21751 
   21752  Jumping or breaking out of the scope of the array name deallocates the
   21753 storage.  Jumping into the scope is not allowed; you get an error
   21754 message for it.
   21755 
   21756  You can use the function `alloca' to get an effect much like
   21757 variable-length arrays.  The function `alloca' is available in many
   21758 other C implementations (but not in all).  On the other hand,
   21759 variable-length arrays are more elegant.
   21760 
   21761  There are other differences between these two methods.  Space allocated
   21762 with `alloca' exists until the containing _function_ returns.  The
   21763 space for a variable-length array is deallocated as soon as the array
   21764 name's scope ends.  (If you use both variable-length arrays and
   21765 `alloca' in the same function, deallocation of a variable-length array
   21766 also deallocates anything more recently allocated with `alloca'.)
   21767 
   21768  You can also use variable-length arrays as arguments to functions:
   21769 
   21770      struct entry
   21771      tester (int len, char data[len][len])
   21772      {
   21773        /* ... */
   21774      }
   21775 
   21776  The length of an array is computed once when the storage is allocated
   21777 and is remembered for the scope of the array in case you access it with
   21778 `sizeof'.
   21779 
   21780  If you want to pass the array first and the length afterward, you can
   21781 use a forward declaration in the parameter list--another GNU extension.
   21782 
   21783      struct entry
   21784      tester (int len; char data[len][len], int len)
   21785      {
   21786        /* ... */
   21787      }
   21788 
   21789  The `int len' before the semicolon is a "parameter forward
   21790 declaration", and it serves the purpose of making the name `len' known
   21791 when the declaration of `data' is parsed.
   21792 
   21793  You can write any number of such parameter forward declarations in the
   21794 parameter list.  They can be separated by commas or semicolons, but the
   21795 last one must end with a semicolon, which is followed by the "real"
   21796 parameter declarations.  Each forward declaration must match a "real"
   21797 declaration in parameter name and data type.  ISO C99 does not support
   21798 parameter forward declarations.
   21799 
   21800 
   21801 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
   21802 
   21803 6.20 Macros with a Variable Number of Arguments.
   21804 ================================================
   21805 
   21806 In the ISO C standard of 1999, a macro can be declared to accept a
   21807 variable number of arguments much as a function can.  The syntax for
   21808 defining the macro is similar to that of a function.  Here is an
   21809 example:
   21810 
   21811      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
   21812 
   21813 Here `...' is a "variable argument".  In the invocation of such a
   21814 macro, it represents the zero or more tokens until the closing
   21815 parenthesis that ends the invocation, including any commas.  This set of
   21816 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
   21817 it appears.  See the CPP manual for more information.
   21818 
   21819  GCC has long supported variadic macros, and used a different syntax
   21820 that allowed you to give a name to the variable arguments just like any
   21821 other argument.  Here is an example:
   21822 
   21823      #define debug(format, args...) fprintf (stderr, format, args)
   21824 
   21825 This is in all ways equivalent to the ISO C example above, but arguably
   21826 more readable and descriptive.
   21827 
   21828  GNU CPP has two further variadic macro extensions, and permits them to
   21829 be used with either of the above forms of macro definition.
   21830 
   21831  In standard C, you are not allowed to leave the variable argument out
   21832 entirely; but you are allowed to pass an empty argument.  For example,
   21833 this invocation is invalid in ISO C, because there is no comma after
   21834 the string:
   21835 
   21836      debug ("A message")
   21837 
   21838  GNU CPP permits you to completely omit the variable arguments in this
   21839 way.  In the above examples, the compiler would complain, though since
   21840 the expansion of the macro still has the extra comma after the format
   21841 string.
   21842 
   21843  To help solve this problem, CPP behaves specially for variable
   21844 arguments used with the token paste operator, `##'.  If instead you
   21845 write
   21846 
   21847      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
   21848 
   21849 and if the variable arguments are omitted or empty, the `##' operator
   21850 causes the preprocessor to remove the comma before it.  If you do
   21851 provide some variable arguments in your macro invocation, GNU CPP does
   21852 not complain about the paste operation and instead places the variable
   21853 arguments after the comma.  Just like any other pasted macro argument,
   21854 these arguments are not macro expanded.
   21855 
   21856 
   21857 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
   21858 
   21859 6.21 Slightly Looser Rules for Escaped Newlines
   21860 ===============================================
   21861 
   21862 Recently, the preprocessor has relaxed its treatment of escaped
   21863 newlines.  Previously, the newline had to immediately follow a
   21864 backslash.  The current implementation allows whitespace in the form of
   21865 spaces, horizontal and vertical tabs, and form feeds between the
   21866 backslash and the subsequent newline.  The preprocessor issues a
   21867 warning, but treats it as a valid escaped newline and combines the two
   21868 lines to form a single logical line.  This works within comments and
   21869 tokens, as well as between tokens.  Comments are _not_ treated as
   21870 whitespace for the purposes of this relaxation, since they have not yet
   21871 been replaced with spaces.
   21872 
   21873 
   21874 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
   21875 
   21876 6.22 Non-Lvalue Arrays May Have Subscripts
   21877 ==========================================
   21878 
   21879 In ISO C99, arrays that are not lvalues still decay to pointers, and
   21880 may be subscripted, although they may not be modified or used after the
   21881 next sequence point and the unary `&' operator may not be applied to
   21882 them.  As an extension, GNU C allows such arrays to be subscripted in
   21883 C90 mode, though otherwise they do not decay to pointers outside C99
   21884 mode.  For example, this is valid in GNU C though not valid in C90:
   21885 
   21886      struct foo {int a[4];};
   21887 
   21888      struct foo f();
   21889 
   21890      bar (int index)
   21891      {
   21892        return f().a[index];
   21893      }
   21894 
   21895 
   21896 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
   21897 
   21898 6.23 Arithmetic on `void'- and Function-Pointers
   21899 ================================================
   21900 
   21901 In GNU C, addition and subtraction operations are supported on pointers
   21902 to `void' and on pointers to functions.  This is done by treating the
   21903 size of a `void' or of a function as 1.
   21904 
   21905  A consequence of this is that `sizeof' is also allowed on `void' and
   21906 on function types, and returns 1.
   21907 
   21908  The option `-Wpointer-arith' requests a warning if these extensions
   21909 are used.
   21910 
   21911 
   21912 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
   21913 
   21914 6.24 Non-Constant Initializers
   21915 ==============================
   21916 
   21917 As in standard C++ and ISO C99, the elements of an aggregate
   21918 initializer for an automatic variable are not required to be constant
   21919 expressions in GNU C.  Here is an example of an initializer with
   21920 run-time varying elements:
   21921 
   21922      foo (float f, float g)
   21923      {
   21924        float beat_freqs[2] = { f-g, f+g };
   21925        /* ... */
   21926      }
   21927 
   21928 
   21929 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
   21930 
   21931 6.25 Compound Literals
   21932 ======================
   21933 
   21934 ISO C99 supports compound literals.  A compound literal looks like a
   21935 cast containing an initializer.  Its value is an object of the type
   21936 specified in the cast, containing the elements specified in the
   21937 initializer; it is an lvalue.  As an extension, GCC supports compound
   21938 literals in C90 mode and in C++, though the semantics are somewhat
   21939 different in C++.
   21940 
   21941  Usually, the specified type is a structure.  Assume that `struct foo'
   21942 and `structure' are declared as shown:
   21943 
   21944      struct foo {int a; char b[2];} structure;
   21945 
   21946 Here is an example of constructing a `struct foo' with a compound
   21947 literal:
   21948 
   21949      structure = ((struct foo) {x + y, 'a', 0});
   21950 
   21951 This is equivalent to writing the following:
   21952 
   21953      {
   21954        struct foo temp = {x + y, 'a', 0};
   21955        structure = temp;
   21956      }
   21957 
   21958  You can also construct an array, though this is dangerous in C++, as
   21959 explained below.  If all the elements of the compound literal are (made
   21960 up of) simple constant expressions, suitable for use in initializers of
   21961 objects of static storage duration, then the compound literal can be
   21962 coerced to a pointer to its first element and used in such an
   21963 initializer, as shown here:
   21964 
   21965      char **foo = (char *[]) { "x", "y", "z" };
   21966 
   21967  Compound literals for scalar types and union types are also allowed,
   21968 but then the compound literal is equivalent to a cast.
   21969 
   21970  As a GNU extension, GCC allows initialization of objects with static
   21971 storage duration by compound literals (which is not possible in ISO
   21972 C99, because the initializer is not a constant).  It is handled as if
   21973 the object is initialized only with the bracket enclosed list if the
   21974 types of the compound literal and the object match.  The initializer
   21975 list of the compound literal must be constant.  If the object being
   21976 initialized has array type of unknown size, the size is determined by
   21977 compound literal size.
   21978 
   21979      static struct foo x = (struct foo) {1, 'a', 'b'};
   21980      static int y[] = (int []) {1, 2, 3};
   21981      static int z[] = (int [3]) {1};
   21982 
   21983 The above lines are equivalent to the following:
   21984      static struct foo x = {1, 'a', 'b'};
   21985      static int y[] = {1, 2, 3};
   21986      static int z[] = {1, 0, 0};
   21987 
   21988  In C, a compound literal designates an unnamed object with static or
   21989 automatic storage duration.  In C++, a compound literal designates a
   21990 temporary object, which only lives until the end of its
   21991 full-expression.  As a result, well-defined C code that takes the
   21992 address of a subobject of a compound literal can be undefined in C++.
   21993 For instance, if the array compound literal example above appeared
   21994 inside a function, any subsequent use of `foo' in C++ has undefined
   21995 behavior because the lifetime of the array ends after the declaration
   21996 of `foo'.  As a result, the C++ compiler now rejects the conversion of
   21997 a temporary array to a pointer.
   21998 
   21999  As an optimization, the C++ compiler sometimes gives array compound
   22000 literals longer lifetimes: when the array either appears outside a
   22001 function or has const-qualified type.  If `foo' and its initializer had
   22002 elements of `char *const' type rather than `char *', or if `foo' were a
   22003 global variable, the array would have static storage duration.  But it
   22004 is probably safest just to avoid the use of array compound literals in
   22005 code compiled as C++.
   22006 
   22007 
   22008 File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
   22009 
   22010 6.26 Designated Initializers
   22011 ============================
   22012 
   22013 Standard C90 requires the elements of an initializer to appear in a
   22014 fixed order, the same as the order of the elements in the array or
   22015 structure being initialized.
   22016 
   22017  In ISO C99 you can give the elements in any order, specifying the array
   22018 indices or structure field names they apply to, and GNU C allows this as
   22019 an extension in C90 mode as well.  This extension is not implemented in
   22020 GNU C++.
   22021 
   22022  To specify an array index, write `[INDEX] =' before the element value.
   22023 For example,
   22024 
   22025      int a[6] = { [4] = 29, [2] = 15 };
   22026 
   22027 is equivalent to
   22028 
   22029      int a[6] = { 0, 0, 15, 0, 29, 0 };
   22030 
   22031 The index values must be constant expressions, even if the array being
   22032 initialized is automatic.
   22033 
   22034  An alternative syntax for this that has been obsolete since GCC 2.5 but
   22035 GCC still accepts is to write `[INDEX]' before the element value, with
   22036 no `='.
   22037 
   22038  To initialize a range of elements to the same value, write `[FIRST ...
   22039 LAST] = VALUE'.  This is a GNU extension.  For example,
   22040 
   22041      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
   22042 
   22043 If the value in it has side-effects, the side-effects happen only once,
   22044 not for each initialized field by the range initializer.
   22045 
   22046 Note that the length of the array is the highest value specified plus
   22047 one.
   22048 
   22049  In a structure initializer, specify the name of a field to initialize
   22050 with `.FIELDNAME =' before the element value.  For example, given the
   22051 following structure,
   22052 
   22053      struct point { int x, y; };
   22054 
   22055 the following initialization
   22056 
   22057      struct point p = { .y = yvalue, .x = xvalue };
   22058 
   22059 is equivalent to
   22060 
   22061      struct point p = { xvalue, yvalue };
   22062 
   22063  Another syntax that has the same meaning, obsolete since GCC 2.5, is
   22064 `FIELDNAME:', as shown here:
   22065 
   22066      struct point p = { y: yvalue, x: xvalue };
   22067 
   22068  The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
   22069 also use a designator (or the obsolete colon syntax) when initializing
   22070 a union, to specify which element of the union should be used.  For
   22071 example,
   22072 
   22073      union foo { int i; double d; };
   22074 
   22075      union foo f = { .d = 4 };
   22076 
   22077 converts 4 to a `double' to store it in the union using the second
   22078 element.  By contrast, casting 4 to type `union foo' stores it into the
   22079 union as the integer `i', since it is an integer.  (*Note Cast to
   22080 Union::.)
   22081 
   22082  You can combine this technique of naming elements with ordinary C
   22083 initialization of successive elements.  Each initializer element that
   22084 does not have a designator applies to the next consecutive element of
   22085 the array or structure.  For example,
   22086 
   22087      int a[6] = { [1] = v1, v2, [4] = v4 };
   22088 
   22089 is equivalent to
   22090 
   22091      int a[6] = { 0, v1, v2, 0, v4, 0 };
   22092 
   22093  Labeling the elements of an array initializer is especially useful
   22094 when the indices are characters or belong to an `enum' type.  For
   22095 example:
   22096 
   22097      int whitespace[256]
   22098        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
   22099            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
   22100 
   22101  You can also write a series of `.FIELDNAME' and `[INDEX]' designators
   22102 before an `=' to specify a nested subobject to initialize; the list is
   22103 taken relative to the subobject corresponding to the closest
   22104 surrounding brace pair.  For example, with the `struct point'
   22105 declaration above:
   22106 
   22107      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
   22108 
   22109 If the same field is initialized multiple times, it has the value from
   22110 the last initialization.  If any such overridden initialization has
   22111 side-effect, it is unspecified whether the side-effect happens or not.
   22112 Currently, GCC discards them and issues a warning.
   22113 
   22114 
   22115 File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
   22116 
   22117 6.27 Case Ranges
   22118 ================
   22119 
   22120 You can specify a range of consecutive values in a single `case' label,
   22121 like this:
   22122 
   22123      case LOW ... HIGH:
   22124 
   22125 This has the same effect as the proper number of individual `case'
   22126 labels, one for each integer value from LOW to HIGH, inclusive.
   22127 
   22128  This feature is especially useful for ranges of ASCII character codes:
   22129 
   22130      case 'A' ... 'Z':
   22131 
   22132  *Be careful:* Write spaces around the `...', for otherwise it may be
   22133 parsed wrong when you use it with integer values.  For example, write
   22134 this:
   22135 
   22136      case 1 ... 5:
   22137 
   22138 rather than this:
   22139 
   22140      case 1...5:
   22141 
   22142 
   22143 File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
   22144 
   22145 6.28 Cast to a Union Type
   22146 =========================
   22147 
   22148 A cast to union type is similar to other casts, except that the type
   22149 specified is a union type.  You can specify the type either with `union
   22150 TAG' or with a typedef name.  A cast to union is actually a
   22151 constructor, not a cast, and hence does not yield an lvalue like normal
   22152 casts.  (*Note Compound Literals::.)
   22153 
   22154  The types that may be cast to the union type are those of the members
   22155 of the union.  Thus, given the following union and variables:
   22156 
   22157      union foo { int i; double d; };
   22158      int x;
   22159      double y;
   22160 
   22161 both `x' and `y' can be cast to type `union foo'.
   22162 
   22163  Using the cast as the right-hand side of an assignment to a variable of
   22164 union type is equivalent to storing in a member of the union:
   22165 
   22166      union foo u;
   22167      /* ... */
   22168      u = (union foo) x  ==  u.i = x
   22169      u = (union foo) y  ==  u.d = y
   22170 
   22171  You can also use the union cast as a function argument:
   22172 
   22173      void hack (union foo);
   22174      /* ... */
   22175      hack ((union foo) x);
   22176 
   22177 
   22178 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
   22179 
   22180 6.29 Mixed Declarations and Code
   22181 ================================
   22182 
   22183 ISO C99 and ISO C++ allow declarations and code to be freely mixed
   22184 within compound statements.  As an extension, GNU C also allows this in
   22185 C90 mode.  For example, you could do:
   22186 
   22187      int i;
   22188      /* ... */
   22189      i++;
   22190      int j = i + 2;
   22191 
   22192  Each identifier is visible from where it is declared until the end of
   22193 the enclosing block.
   22194 
   22195 
   22196 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
   22197 
   22198 6.30 Declaring Attributes of Functions
   22199 ======================================
   22200 
   22201 In GNU C, you declare certain things about functions called in your
   22202 program which help the compiler optimize function calls and check your
   22203 code more carefully.
   22204 
   22205  The keyword `__attribute__' allows you to specify special attributes
   22206 when making a declaration.  This keyword is followed by an attribute
   22207 specification inside double parentheses.  The following attributes are
   22208 currently defined for functions on all targets: `aligned',
   22209 `alloc_size', `noreturn', `returns_twice', `noinline', `noclone',
   22210 `always_inline', `flatten', `pure', `const', `nothrow', `sentinel',
   22211 `format', `format_arg', `no_instrument_function', `no_split_stack',
   22212 `section', `constructor', `destructor', `used', `unused', `deprecated',
   22213 `weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
   22214 `gnu_inline', `externally_visible', `hot', `cold', `artificial',
   22215 `no_sanitize_address', `no_address_safety_analysis', `error' and
   22216 `warning'.  Several other attributes are defined for functions on
   22217 particular target systems.  Other attributes, including `section' are
   22218 supported for variables declarations (*note Variable Attributes::) and
   22219 for types (*note Type Attributes::).
   22220 
   22221  GCC plugins may provide their own attributes.
   22222 
   22223  You may also specify attributes with `__' preceding and following each
   22224 keyword.  This allows you to use them in header files without being
   22225 concerned about a possible macro of the same name.  For example, you
   22226 may use `__noreturn__' instead of `noreturn'.
   22227 
   22228  *Note Attribute Syntax::, for details of the exact syntax for using
   22229 attributes.
   22230 
   22231 `alias ("TARGET")'
   22232      The `alias' attribute causes the declaration to be emitted as an
   22233      alias for another symbol, which must be specified.  For instance,
   22234 
   22235           void __f () { /* Do something. */; }
   22236           void f () __attribute__ ((weak, alias ("__f")));
   22237 
   22238      defines `f' to be a weak alias for `__f'.  In C++, the mangled
   22239      name for the target must be used.  It is an error if `__f' is not
   22240      defined in the same translation unit.
   22241 
   22242      Not all target machines support this attribute.
   22243 
   22244 `aligned (ALIGNMENT)'
   22245      This attribute specifies a minimum alignment for the function,
   22246      measured in bytes.
   22247 
   22248      You cannot use this attribute to decrease the alignment of a
   22249      function, only to increase it.  However, when you explicitly
   22250      specify a function alignment this overrides the effect of the
   22251      `-falign-functions' (*note Optimize Options::) option for this
   22252      function.
   22253 
   22254      Note that the effectiveness of `aligned' attributes may be limited
   22255      by inherent limitations in your linker.  On many systems, the
   22256      linker is only able to arrange for functions to be aligned up to a
   22257      certain maximum alignment.  (For some linkers, the maximum
   22258      supported alignment may be very very small.)  See your linker
   22259      documentation for further information.
   22260 
   22261      The `aligned' attribute can also be used for variables and fields
   22262      (*note Variable Attributes::.)
   22263 
   22264 `alloc_size'
   22265      The `alloc_size' attribute is used to tell the compiler that the
   22266      function return value points to memory, where the size is given by
   22267      one or two of the functions parameters.  GCC uses this information
   22268      to improve the correctness of `__builtin_object_size'.
   22269 
   22270      The function parameter(s) denoting the allocated size are
   22271      specified by one or two integer arguments supplied to the
   22272      attribute.  The allocated size is either the value of the single
   22273      function argument specified or the product of the two function
   22274      arguments specified.  Argument numbering starts at one.
   22275 
   22276      For instance,
   22277 
   22278           void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
   22279           void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
   22280 
   22281      declares that `my_calloc' returns memory of the size given by the
   22282      product of parameter 1 and 2 and that `my_realloc' returns memory
   22283      of the size given by parameter 2.
   22284 
   22285 `always_inline'
   22286      Generally, functions are not inlined unless optimization is
   22287      specified.  For functions declared inline, this attribute inlines
   22288      the function even if no optimization level is specified.
   22289 
   22290 `gnu_inline'
   22291      This attribute should be used with a function that is also declared
   22292      with the `inline' keyword.  It directs GCC to treat the function
   22293      as if it were defined in gnu90 mode even when compiling in C99 or
   22294      gnu99 mode.
   22295 
   22296      If the function is declared `extern', then this definition of the
   22297      function is used only for inlining.  In no case is the function
   22298      compiled as a standalone function, not even if you take its address
   22299      explicitly.  Such an address becomes an external reference, as if
   22300      you had only declared the function, and had not defined it.  This
   22301      has almost the effect of a macro.  The way to use this is to put a
   22302      function definition in a header file with this attribute, and put
   22303      another copy of the function, without `extern', in a library file.
   22304      The definition in the header file causes most calls to the
   22305      function to be inlined.  If any uses of the function remain, they
   22306      refer to the single copy in the library.  Note that the two
   22307      definitions of the functions need not be precisely the same,
   22308      although if they do not have the same effect your program may
   22309      behave oddly.
   22310 
   22311      In C, if the function is neither `extern' nor `static', then the
   22312      function is compiled as a standalone function, as well as being
   22313      inlined where possible.
   22314 
   22315      This is how GCC traditionally handled functions declared `inline'.
   22316      Since ISO C99 specifies a different semantics for `inline', this
   22317      function attribute is provided as a transition measure and as a
   22318      useful feature in its own right.  This attribute is available in
   22319      GCC 4.1.3 and later.  It is available if either of the
   22320      preprocessor macros `__GNUC_GNU_INLINE__' or
   22321      `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
   22322      As Fast As a Macro: Inline.
   22323 
   22324      In C++, this attribute does not depend on `extern' in any way, but
   22325      it still requires the `inline' keyword to enable its special
   22326      behavior.
   22327 
   22328 `artificial'
   22329      This attribute is useful for small inline wrappers that if possible
   22330      should appear during debugging as a unit.  Depending on the debug
   22331      info format it either means marking the function as artificial or
   22332      using the caller location for all instructions within the inlined
   22333      body.
   22334 
   22335 `bank_switch'
   22336      When added to an interrupt handler with the M32C port, causes the
   22337      prologue and epilogue to use bank switching to preserve the
   22338      registers rather than saving them on the stack.
   22339 
   22340 `flatten'
   22341      Generally, inlining into a function is limited.  For a function
   22342      marked with this attribute, every call inside this function is
   22343      inlined, if possible.  Whether the function itself is considered
   22344      for inlining depends on its size and the current inlining
   22345      parameters.
   22346 
   22347 `error ("MESSAGE")'
   22348      If this attribute is used on a function declaration and a call to
   22349      such a function is not eliminated through dead code elimination or
   22350      other optimizations, an error that includes MESSAGE is diagnosed.
   22351      This is useful for compile-time checking, especially together with
   22352      `__builtin_constant_p' and inline functions where checking the
   22353      inline function arguments is not possible through `extern char
   22354      [(condition) ? 1 : -1];' tricks.  While it is possible to leave
   22355      the function undefined and thus invoke a link failure, when using
   22356      this attribute the problem is diagnosed earlier and with exact
   22357      location of the call even in presence of inline functions or when
   22358      not emitting debugging information.
   22359 
   22360 `warning ("MESSAGE")'
   22361      If this attribute is used on a function declaration and a call to
   22362      such a function is not eliminated through dead code elimination or
   22363      other optimizations, a warning that includes MESSAGE is diagnosed.
   22364      This is useful for compile-time checking, especially together with
   22365      `__builtin_constant_p' and inline functions.  While it is possible
   22366      to define the function with a message in `.gnu.warning*' section,
   22367      when using this attribute the problem is diagnosed earlier and
   22368      with exact location of the call even in presence of inline
   22369      functions or when not emitting debugging information.
   22370 
   22371 `cdecl'
   22372      On the Intel 386, the `cdecl' attribute causes the compiler to
   22373      assume that the calling function pops off the stack space used to
   22374      pass arguments.  This is useful to override the effects of the
   22375      `-mrtd' switch.
   22376 
   22377 `const'
   22378      Many functions do not examine any values except their arguments,
   22379      and have no effects except the return value.  Basically this is
   22380      just slightly more strict class than the `pure' attribute below,
   22381      since function is not allowed to read global memory.
   22382 
   22383      Note that a function that has pointer arguments and examines the
   22384      data pointed to must _not_ be declared `const'.  Likewise, a
   22385      function that calls a non-`const' function usually must not be
   22386      `const'.  It does not make sense for a `const' function to return
   22387      `void'.
   22388 
   22389      The attribute `const' is not implemented in GCC versions earlier
   22390      than 2.5.  An alternative way to declare that a function has no
   22391      side effects, which works in the current version and in some older
   22392      versions, is as follows:
   22393 
   22394           typedef int intfn ();
   22395 
   22396           extern const intfn square;
   22397 
   22398      This approach does not work in GNU C++ from 2.6.0 on, since the
   22399      language specifies that the `const' must be attached to the return
   22400      value.
   22401 
   22402 `constructor'
   22403 `destructor'
   22404 `constructor (PRIORITY)'
   22405 `destructor (PRIORITY)'
   22406      The `constructor' attribute causes the function to be called
   22407      automatically before execution enters `main ()'.  Similarly, the
   22408      `destructor' attribute causes the function to be called
   22409      automatically after `main ()' completes or `exit ()' is called.
   22410      Functions with these attributes are useful for initializing data
   22411      that is used implicitly during the execution of the program.
   22412 
   22413      You may provide an optional integer priority to control the order
   22414      in which constructor and destructor functions are run.  A
   22415      constructor with a smaller priority number runs before a
   22416      constructor with a larger priority number; the opposite
   22417      relationship holds for destructors.  So, if you have a constructor
   22418      that allocates a resource and a destructor that deallocates the
   22419      same resource, both functions typically have the same priority.
   22420      The priorities for constructor and destructor functions are the
   22421      same as those specified for namespace-scope C++ objects (*note C++
   22422      Attributes::).
   22423 
   22424      These attributes are not currently implemented for Objective-C.
   22425 
   22426 `deprecated'
   22427 `deprecated (MSG)'
   22428      The `deprecated' attribute results in a warning if the function is
   22429      used anywhere in the source file.  This is useful when identifying
   22430      functions that are expected to be removed in a future version of a
   22431      program.  The warning also includes the location of the declaration
   22432      of the deprecated function, to enable users to easily find further
   22433      information about why the function is deprecated, or what they
   22434      should do instead.  Note that the warnings only occurs for uses:
   22435 
   22436           int old_fn () __attribute__ ((deprecated));
   22437           int old_fn ();
   22438           int (*fn_ptr)() = old_fn;
   22439 
   22440      results in a warning on line 3 but not line 2.  The optional MSG
   22441      argument, which must be a string, is printed in the warning if
   22442      present.
   22443 
   22444      The `deprecated' attribute can also be used for variables and
   22445      types (*note Variable Attributes::, *note Type Attributes::.)
   22446 
   22447 `disinterrupt'
   22448      On Epiphany and MeP targets, this attribute causes the compiler to
   22449      emit instructions to disable interrupts for the duration of the
   22450      given function.
   22451 
   22452 `dllexport'
   22453      On Microsoft Windows targets and Symbian OS targets the
   22454      `dllexport' attribute causes the compiler to provide a global
   22455      pointer to a pointer in a DLL, so that it can be referenced with
   22456      the `dllimport' attribute.  On Microsoft Windows targets, the
   22457      pointer name is formed by combining `_imp__' and the function or
   22458      variable name.
   22459 
   22460      You can use `__declspec(dllexport)' as a synonym for
   22461      `__attribute__ ((dllexport))' for compatibility with other
   22462      compilers.
   22463 
   22464      On systems that support the `visibility' attribute, this attribute
   22465      also implies "default" visibility.  It is an error to explicitly
   22466      specify any other visibility.
   22467 
   22468      In previous versions of GCC, the `dllexport' attribute was ignored
   22469      for inlined functions, unless the `-fkeep-inline-functions' flag
   22470      had been used.  The default behavior now is to emit all dllexported
   22471      inline functions; however, this can cause object file-size bloat,
   22472      in which case the old behavior can be restored by using
   22473      `-fno-keep-inline-dllexport'.
   22474 
   22475      The attribute is also ignored for undefined symbols.
   22476 
   22477      When applied to C++ classes, the attribute marks defined
   22478      non-inlined member functions and static data members as exports.
   22479      Static consts initialized in-class are not marked unless they are
   22480      also defined out-of-class.
   22481 
   22482      For Microsoft Windows targets there are alternative methods for
   22483      including the symbol in the DLL's export table such as using a
   22484      `.def' file with an `EXPORTS' section or, with GNU ld, using the
   22485      `--export-all' linker flag.
   22486 
   22487 `dllimport'
   22488      On Microsoft Windows and Symbian OS targets, the `dllimport'
   22489      attribute causes the compiler to reference a function or variable
   22490      via a global pointer to a pointer that is set up by the DLL
   22491      exporting the symbol.  The attribute implies `extern'.  On
   22492      Microsoft Windows targets, the pointer name is formed by combining
   22493      `_imp__' and the function or variable name.
   22494 
   22495      You can use `__declspec(dllimport)' as a synonym for
   22496      `__attribute__ ((dllimport))' for compatibility with other
   22497      compilers.
   22498 
   22499      On systems that support the `visibility' attribute, this attribute
   22500      also implies "default" visibility.  It is an error to explicitly
   22501      specify any other visibility.
   22502 
   22503      Currently, the attribute is ignored for inlined functions.  If the
   22504      attribute is applied to a symbol _definition_, an error is
   22505      reported.  If a symbol previously declared `dllimport' is later
   22506      defined, the attribute is ignored in subsequent references, and a
   22507      warning is emitted.  The attribute is also overridden by a
   22508      subsequent declaration as `dllexport'.
   22509 
   22510      When applied to C++ classes, the attribute marks non-inlined
   22511      member functions and static data members as imports.  However, the
   22512      attribute is ignored for virtual methods to allow creation of
   22513      vtables using thunks.
   22514 
   22515      On the SH Symbian OS target the `dllimport' attribute also has
   22516      another affect--it can cause the vtable and run-time type
   22517      information for a class to be exported.  This happens when the
   22518      class has a dllimported constructor or a non-inline, non-pure
   22519      virtual function and, for either of those two conditions, the
   22520      class also has an inline constructor or destructor and has a key
   22521      function that is defined in the current translation unit.
   22522 
   22523      For Microsoft Windows targets the use of the `dllimport' attribute
   22524      on functions is not necessary, but provides a small performance
   22525      benefit by eliminating a thunk in the DLL.  The use of the
   22526      `dllimport' attribute on imported variables was required on older
   22527      versions of the GNU linker, but can now be avoided by passing the
   22528      `--enable-auto-import' switch to the GNU linker.  As with
   22529      functions, using the attribute for a variable eliminates a thunk in
   22530      the DLL.
   22531 
   22532      One drawback to using this attribute is that a pointer to a
   22533      _variable_ marked as `dllimport' cannot be used as a constant
   22534      address. However, a pointer to a _function_ with the `dllimport'
   22535      attribute can be used as a constant initializer; in this case, the
   22536      address of a stub function in the import lib is referenced.  On
   22537      Microsoft Windows targets, the attribute can be disabled for
   22538      functions by setting the `-mnop-fun-dllimport' flag.
   22539 
   22540 `eightbit_data'
   22541      Use this attribute on the H8/300, H8/300H, and H8S to indicate
   22542      that the specified variable should be placed into the eight-bit
   22543      data section.  The compiler generates more efficient code for
   22544      certain operations on data in the eight-bit data area.  Note the
   22545      eight-bit data area is limited to 256 bytes of data.
   22546 
   22547      You must use GAS and GLD from GNU binutils version 2.7 or later for
   22548      this attribute to work correctly.
   22549 
   22550 `exception_handler'
   22551      Use this attribute on the Blackfin to indicate that the specified
   22552      function is an exception handler.  The compiler generates function
   22553      entry and exit sequences suitable for use in an exception handler
   22554      when this attribute is present.
   22555 
   22556 `externally_visible'
   22557      This attribute, attached to a global variable or function,
   22558      nullifies the effect of the `-fwhole-program' command-line option,
   22559      so the object remains visible outside the current compilation unit.
   22560 
   22561      If `-fwhole-program' is used together with `-flto' and `gold' is
   22562      used as the linker plugin, `externally_visible' attributes are
   22563      automatically added to functions (not variable yet due to a
   22564      current `gold' issue) that are accessed outside of LTO objects
   22565      according to resolution file produced by `gold'.  For other
   22566      linkers that cannot generate resolution file, explicit
   22567      `externally_visible' attributes are still necessary.
   22568 
   22569 `far'
   22570      On 68HC11 and 68HC12 the `far' attribute causes the compiler to
   22571      use a calling convention that takes care of switching memory banks
   22572      when entering and leaving a function.  This calling convention is
   22573      also the default when using the `-mlong-calls' option.
   22574 
   22575      On 68HC12 the compiler uses the `call' and `rtc' instructions to
   22576      call and return from a function.
   22577 
   22578      On 68HC11 the compiler generates a sequence of instructions to
   22579      invoke a board-specific routine to switch the memory bank and call
   22580      the real function.  The board-specific routine simulates a `call'.
   22581      At the end of a function, it jumps to a board-specific routine
   22582      instead of using `rts'.  The board-specific return routine
   22583      simulates the `rtc'.
   22584 
   22585      On MeP targets this causes the compiler to use a calling convention
   22586      that assumes the called function is too far away for the built-in
   22587      addressing modes.
   22588 
   22589 `fast_interrupt'
   22590      Use this attribute on the M32C and RX ports to indicate that the
   22591      specified function is a fast interrupt handler.  This is just like
   22592      the `interrupt' attribute, except that `freit' is used to return
   22593      instead of `reit'.
   22594 
   22595 `fastcall'
   22596      On the Intel 386, the `fastcall' attribute causes the compiler to
   22597      pass the first argument (if of integral type) in the register ECX
   22598      and the second argument (if of integral type) in the register EDX.
   22599      Subsequent and other typed arguments are passed on the stack.  The
   22600      called function pops the arguments off the stack.  If the number
   22601      of arguments is variable all arguments are pushed on the stack.
   22602 
   22603 `thiscall'
   22604      On the Intel 386, the `thiscall' attribute causes the compiler to
   22605      pass the first argument (if of integral type) in the register ECX.
   22606      Subsequent and other typed arguments are passed on the stack. The
   22607      called function pops the arguments off the stack.  If the number
   22608      of arguments is variable all arguments are pushed on the stack.
   22609      The `thiscall' attribute is intended for C++ non-static member
   22610      functions.  As a GCC extension, this calling convention can be
   22611      used for C functions and for static member methods.
   22612 
   22613 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
   22614      The `format' attribute specifies that a function takes `printf',
   22615      `scanf', `strftime' or `strfmon' style arguments that should be
   22616      type-checked against a format string.  For example, the
   22617      declaration:
   22618 
   22619           extern int
   22620           my_printf (void *my_object, const char *my_format, ...)
   22621                 __attribute__ ((format (printf, 2, 3)));
   22622 
   22623      causes the compiler to check the arguments in calls to `my_printf'
   22624      for consistency with the `printf' style format string argument
   22625      `my_format'.
   22626 
   22627      The parameter ARCHETYPE determines how the format string is
   22628      interpreted, and should be `printf', `scanf', `strftime',
   22629      `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
   22630      also use `__printf__', `__scanf__', `__strftime__' or
   22631      `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
   22632      `ms_strftime' are also present.  ARCHETYPE values such as `printf'
   22633      refer to the formats accepted by the system's C runtime library,
   22634      while values prefixed with `gnu_' always refer to the formats
   22635      accepted by the GNU C Library.  On Microsoft Windows targets,
   22636      values prefixed with `ms_' refer to the formats accepted by the
   22637      `msvcrt.dll' library.  The parameter STRING-INDEX specifies which
   22638      argument is the format string argument (starting from 1), while
   22639      FIRST-TO-CHECK is the number of the first argument to check
   22640      against the format string.  For functions where the arguments are
   22641      not available to be checked (such as `vprintf'), specify the third
   22642      parameter as zero.  In this case the compiler only checks the
   22643      format string for consistency.  For `strftime' formats, the third
   22644      parameter is required to be zero.  Since non-static C++ methods
   22645      have an implicit `this' argument, the arguments of such methods
   22646      should be counted from two, not one, when giving values for
   22647      STRING-INDEX and FIRST-TO-CHECK.
   22648 
   22649      In the example above, the format string (`my_format') is the second
   22650      argument of the function `my_print', and the arguments to check
   22651      start with the third argument, so the correct parameters for the
   22652      format attribute are 2 and 3.
   22653 
   22654      The `format' attribute allows you to identify your own functions
   22655      that take format strings as arguments, so that GCC can check the
   22656      calls to these functions for errors.  The compiler always (unless
   22657      `-ffreestanding' or `-fno-builtin' is used) checks formats for the
   22658      standard library functions `printf', `fprintf', `sprintf',
   22659      `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
   22660      `vsprintf' whenever such warnings are requested (using
   22661      `-Wformat'), so there is no need to modify the header file
   22662      `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
   22663      `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
   22664      strictly conforming C standard modes, the X/Open function
   22665      `strfmon' is also checked as are `printf_unlocked' and
   22666      `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
   22667      Dialect Options.
   22668 
   22669      For Objective-C dialects, `NSString' (or `__NSString__') is
   22670      recognized in the same context.  Declarations including these
   22671      format attributes are parsed for correct syntax, however the
   22672      result of checking of such format strings is not yet defined, and
   22673      is not carried out by this version of the compiler.
   22674 
   22675      The target may also provide additional types of format checks.
   22676      *Note Format Checks Specific to Particular Target Machines: Target
   22677      Format Checks.
   22678 
   22679 `format_arg (STRING-INDEX)'
   22680      The `format_arg' attribute specifies that a function takes a format
   22681      string for a `printf', `scanf', `strftime' or `strfmon' style
   22682      function and modifies it (for example, to translate it into
   22683      another language), so the result can be passed to a `printf',
   22684      `scanf', `strftime' or `strfmon' style function (with the
   22685      remaining arguments to the format function the same as they would
   22686      have been for the unmodified string).  For example, the
   22687      declaration:
   22688 
   22689           extern char *
   22690           my_dgettext (char *my_domain, const char *my_format)
   22691                 __attribute__ ((format_arg (2)));
   22692 
   22693      causes the compiler to check the arguments in calls to a `printf',
   22694      `scanf', `strftime' or `strfmon' type function, whose format
   22695      string argument is a call to the `my_dgettext' function, for
   22696      consistency with the format string argument `my_format'.  If the
   22697      `format_arg' attribute had not been specified, all the compiler
   22698      could tell in such calls to format functions would be that the
   22699      format string argument is not constant; this would generate a
   22700      warning when `-Wformat-nonliteral' is used, but the calls could
   22701      not be checked without the attribute.
   22702 
   22703      The parameter STRING-INDEX specifies which argument is the format
   22704      string argument (starting from one).  Since non-static C++ methods
   22705      have an implicit `this' argument, the arguments of such methods
   22706      should be counted from two.
   22707 
   22708      The `format_arg' attribute allows you to identify your own
   22709      functions that modify format strings, so that GCC can check the
   22710      calls to `printf', `scanf', `strftime' or `strfmon' type function
   22711      whose operands are a call to one of your own function.  The
   22712      compiler always treats `gettext', `dgettext', and `dcgettext' in
   22713      this manner except when strict ISO C support is requested by
   22714      `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
   22715      `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
   22716      Dialect Options.
   22717 
   22718      For Objective-C dialects, the `format-arg' attribute may refer to
   22719      an `NSString' reference for compatibility with the `format'
   22720      attribute above.
   22721 
   22722      The target may also allow additional types in `format-arg'
   22723      attributes.  *Note Format Checks Specific to Particular Target
   22724      Machines: Target Format Checks.
   22725 
   22726 `function_vector'
   22727      Use this attribute on the H8/300, H8/300H, and H8S to indicate
   22728      that the specified function should be called through the function
   22729      vector.  Calling a function through the function vector reduces
   22730      code size, however; the function vector has a limited size
   22731      (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
   22732      and H8S) and shares space with the interrupt vector.
   22733 
   22734      On SH2A targets, this attribute declares a function to be called
   22735      using the TBR relative addressing mode.  The argument to this
   22736      attribute is the entry number of the same function in a vector
   22737      table containing all the TBR relative addressable functions.  For
   22738      correct operation the TBR must be setup accordingly to point to
   22739      the start of the vector table before any functions with this
   22740      attribute are invoked.  Usually a good place to do the
   22741      initialization is the startup routine.  The TBR relative vector
   22742      table can have at max 256 function entries.  The jumps to these
   22743      functions are generated using a SH2A specific, non delayed branch
   22744      instruction JSR/N @(disp8,TBR).  You must use GAS and GLD from GNU
   22745      binutils version 2.7 or later for this attribute to work correctly.
   22746 
   22747      Please refer the example of M16C target, to see the use of this
   22748      attribute while declaring a function,
   22749 
   22750      In an application, for a function being called once, this attribute
   22751      saves at least 8 bytes of code; and if other successive calls are
   22752      being made to the same function, it saves 2 bytes of code per each
   22753      of these calls.
   22754 
   22755      On M16C/M32C targets, the `function_vector' attribute declares a
   22756      special page subroutine call function. Use of this attribute
   22757      reduces the code size by 2 bytes for each call generated to the
   22758      subroutine. The argument to the attribute is the vector number
   22759      entry from the special page vector table which contains the 16
   22760      low-order bits of the subroutine's entry address. Each vector
   22761      table has special page number (18 to 255) that is used in `jsrs'
   22762      instructions.  Jump addresses of the routines are generated by
   22763      adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
   22764      M32C targets), to the 2-byte addresses set in the vector table.
   22765      Therefore you need to ensure that all the special page vector
   22766      routines should get mapped within the address range 0x0F0000 to
   22767      0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
   22768 
   22769      In the following example 2 bytes are saved for each call to
   22770      function `foo'.
   22771 
   22772           void foo (void) __attribute__((function_vector(0x18)));
   22773           void foo (void)
   22774           {
   22775           }
   22776 
   22777           void bar (void)
   22778           {
   22779               foo();
   22780           }
   22781 
   22782      If functions are defined in one file and are called in another
   22783      file, then be sure to write this declaration in both files.
   22784 
   22785      This attribute is ignored for R8C target.
   22786 
   22787 `ifunc ("RESOLVER")'
   22788      The `ifunc' attribute is used to mark a function as an indirect
   22789      function using the STT_GNU_IFUNC symbol type extension to the ELF
   22790      standard.  This allows the resolution of the symbol value to be
   22791      determined dynamically at load time, and an optimized version of
   22792      the routine can be selected for the particular processor or other
   22793      system characteristics determined then.  To use this attribute,
   22794      first define the implementation functions available, and a
   22795      resolver function that returns a pointer to the selected
   22796      implementation function.  The implementation functions'
   22797      declarations must match the API of the function being implemented,
   22798      the resolver's declaration is be a function returning pointer to
   22799      void function returning void:
   22800 
   22801           void *my_memcpy (void *dst, const void *src, size_t len)
   22802           {
   22803             ...
   22804           }
   22805 
   22806           static void (*resolve_memcpy (void)) (void)
   22807           {
   22808             return my_memcpy; // we'll just always select this routine
   22809           }
   22810 
   22811      The exported header file declaring the function the user calls
   22812      would contain:
   22813 
   22814           extern void *memcpy (void *, const void *, size_t);
   22815 
   22816      allowing the user to call this as a regular function, unaware of
   22817      the implementation.  Finally, the indirect function needs to be
   22818      defined in the same translation unit as the resolver function:
   22819 
   22820           void *memcpy (void *, const void *, size_t)
   22821                __attribute__ ((ifunc ("resolve_memcpy")));
   22822 
   22823      Indirect functions cannot be weak, and require a recent binutils
   22824      (at least version 2.20.1), and GNU C library (at least version
   22825      2.11.1).
   22826 
   22827 `interrupt'
   22828      Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D,
   22829      m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the
   22830      specified function is an interrupt handler.  The compiler
   22831      generates function entry and exit sequences suitable for use in an
   22832      interrupt handler when this attribute is present.  With Epiphany
   22833      targets it may also generate a special section with code to
   22834      initialize the interrupt vector table.
   22835 
   22836      Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
   22837      MicroBlaze, and SH processors can be specified via the
   22838      `interrupt_handler' attribute.
   22839 
   22840      Note, on the AVR, the hardware globally disables interrupts when an
   22841      interrupt is executed.  The first instruction of an interrupt
   22842      handler declared with this attribute is a `SEI' instruction to
   22843      re-enable interrupts.  See also the `signal' function attribute
   22844      that does not insert a `SEI' instruction.  If both `signal' and
   22845      `interrupt' are specified for the same function, `signal' is
   22846      silently ignored.
   22847 
   22848      Note, for the ARM, you can specify the kind of interrupt to be
   22849      handled by adding an optional parameter to the interrupt attribute
   22850      like this:
   22851 
   22852           void f () __attribute__ ((interrupt ("IRQ")));
   22853 
   22854      Permissible values for this parameter are: `IRQ', `FIQ', `SWI',
   22855      `ABORT' and `UNDEF'.
   22856 
   22857      On ARMv7-M the interrupt type is ignored, and the attribute means
   22858      the function may be called with a word-aligned stack pointer.
   22859 
   22860      On Epiphany targets one or more optional parameters can be added
   22861      like this:
   22862 
   22863           void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
   22864 
   22865      Permissible values for these parameters are: `reset',
   22866      `software_exception', `page_miss', `timer0', `timer1', `message',
   22867      `dma0', `dma1', `wand' and `swi'.  Multiple parameters indicate
   22868      that multiple entries in the interrupt vector table should be
   22869      initialized for this function, i.e. for each parameter NAME, a
   22870      jump to the function is emitted in the section ivt_entry_NAME.
   22871      The parameter(s) may be omitted entirely, in which case no
   22872      interrupt vector table entry is provided.
   22873 
   22874      Note, on Epiphany targets, interrupts are enabled inside the
   22875      function unless the `disinterrupt' attribute is also specified.
   22876 
   22877      On Epiphany targets, you can also use the following attribute to
   22878      modify the behavior of an interrupt handler:
   22879     `forwarder_section'
   22880           The interrupt handler may be in external memory which cannot
   22881           be reached by a branch instruction, so generate a local
   22882           memory trampoline to transfer control.  The single parameter
   22883           identifies the section where the trampoline is placed.
   22884 
   22885      The following examples are all valid uses of these attributes on
   22886      Epiphany targets:
   22887           void __attribute__ ((interrupt)) universal_handler ();
   22888           void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
   22889           void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
   22890           void __attribute__ ((interrupt ("timer0"), disinterrupt))
   22891             fast_timer_handler ();
   22892           void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
   22893             external_dma_handler ();
   22894 
   22895      On MIPS targets, you can use the following attributes to modify
   22896      the behavior of an interrupt handler:
   22897     `use_shadow_register_set'
   22898           Assume that the handler uses a shadow register set, instead of
   22899           the main general-purpose registers.
   22900 
   22901     `keep_interrupts_masked'
   22902           Keep interrupts masked for the whole function.  Without this
   22903           attribute, GCC tries to reenable interrupts for as much of
   22904           the function as it can.
   22905 
   22906     `use_debug_exception_return'
   22907           Return using the `deret' instruction.  Interrupt handlers
   22908           that don't have this attribute return using `eret' instead.
   22909 
   22910      You can use any combination of these attributes, as shown below:
   22911           void __attribute__ ((interrupt)) v0 ();
   22912           void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
   22913           void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
   22914           void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
   22915           void __attribute__ ((interrupt, use_shadow_register_set,
   22916                                keep_interrupts_masked)) v4 ();
   22917           void __attribute__ ((interrupt, use_shadow_register_set,
   22918                                use_debug_exception_return)) v5 ();
   22919           void __attribute__ ((interrupt, keep_interrupts_masked,
   22920                                use_debug_exception_return)) v6 ();
   22921           void __attribute__ ((interrupt, use_shadow_register_set,
   22922                                keep_interrupts_masked,
   22923                                use_debug_exception_return)) v7 ();
   22924 
   22925      On RL78, use `brk_interrupt' instead of `interrupt' for handlers
   22926      intended to be used with the `BRK' opcode (i.e. those that must
   22927      end with `RETB' instead of `RETI').
   22928 
   22929 `interrupt_handler'
   22930      Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
   22931      and SH to indicate that the specified function is an interrupt
   22932      handler.  The compiler generates function entry and exit sequences
   22933      suitable for use in an interrupt handler when this attribute is
   22934      present.
   22935 
   22936 `interrupt_thread'
   22937      Use this attribute on fido, a subarchitecture of the m68k, to
   22938      indicate that the specified function is an interrupt handler that
   22939      is designed to run as a thread.  The compiler omits generate
   22940      prologue/epilogue sequences and replaces the return instruction
   22941      with a `sleep' instruction.  This attribute is available only on
   22942      fido.
   22943 
   22944 `isr'
   22945      Use this attribute on ARM to write Interrupt Service Routines.
   22946      This is an alias to the `interrupt' attribute above.
   22947 
   22948 `kspisusp'
   22949      When used together with `interrupt_handler', `exception_handler'
   22950      or `nmi_handler', code is generated to load the stack pointer from
   22951      the USP register in the function prologue.
   22952 
   22953 `l1_text'
   22954      This attribute specifies a function to be placed into L1
   22955      Instruction SRAM. The function is put into a specific section
   22956      named `.l1.text'.  With `-mfdpic', function calls with a such
   22957      function as the callee or caller uses inlined PLT.
   22958 
   22959 `l2'
   22960      On the Blackfin, this attribute specifies a function to be placed
   22961      into L2 SRAM. The function is put into a specific section named
   22962      `.l1.text'. With `-mfdpic', callers of such functions use an
   22963      inlined PLT.
   22964 
   22965 `leaf'
   22966      Calls to external functions with this attribute must return to the
   22967      current compilation unit only by return or by exception handling.
   22968      In particular, leaf functions are not allowed to call callback
   22969      function passed to it from the current compilation unit or
   22970      directly call functions exported by the unit or longjmp into the
   22971      unit.  Leaf function might still call functions from other
   22972      compilation units and thus they are not necessarily leaf in the
   22973      sense that they contain no function calls at all.
   22974 
   22975      The attribute is intended for library functions to improve
   22976      dataflow analysis.  The compiler takes the hint that any data not
   22977      escaping the current compilation unit can not be used or modified
   22978      by the leaf function.  For example, the `sin' function is a leaf
   22979      function, but `qsort' is not.
   22980 
   22981      Note that leaf functions might invoke signals and signal handlers
   22982      might be defined in the current compilation unit and use static
   22983      variables.  The only compliant way to write such a signal handler
   22984      is to declare such variables `volatile'.
   22985 
   22986      The attribute has no effect on functions defined within the
   22987      current compilation unit.  This is to allow easy merging of
   22988      multiple compilation units into one, for example, by using the
   22989      link-time optimization.  For this reason the attribute is not
   22990      allowed on types to annotate indirect calls.
   22991 
   22992 `long_call/short_call'
   22993      This attribute specifies how a particular function is called on
   22994      ARM and Epiphany.  Both attributes override the `-mlong-calls'
   22995      (*note ARM Options::) command-line switch and `#pragma long_calls'
   22996      settings.  The `long_call' attribute indicates that the function
   22997      might be far away from the call site and require a different (more
   22998      expensive) calling sequence.   The `short_call' attribute always
   22999      places the offset to the function from the call site into the `BL'
   23000      instruction directly.
   23001 
   23002 `longcall/shortcall'
   23003      On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
   23004      indicates that the function might be far away from the call site
   23005      and require a different (more expensive) calling sequence.  The
   23006      `shortcall' attribute indicates that the function is always close
   23007      enough for the shorter calling sequence to be used.  These
   23008      attributes override both the `-mlongcall' switch and, on the
   23009      RS/6000 and PowerPC, the `#pragma longcall' setting.
   23010 
   23011      *Note RS/6000 and PowerPC Options::, for more information on
   23012      whether long calls are necessary.
   23013 
   23014 `long_call/near/far'
   23015      These attributes specify how a particular function is called on
   23016      MIPS.  The attributes override the `-mlong-calls' (*note MIPS
   23017      Options::) command-line switch.  The `long_call' and `far'
   23018      attributes are synonyms, and cause the compiler to always call the
   23019      function by first loading its address into a register, and then
   23020      using the contents of that register.  The `near' attribute has the
   23021      opposite effect; it specifies that non-PIC calls should be made
   23022      using the more efficient `jal' instruction.
   23023 
   23024 `malloc'
   23025      The `malloc' attribute is used to tell the compiler that a function
   23026      may be treated as if any non-`NULL' pointer it returns cannot
   23027      alias any other pointer valid when the function returns and that
   23028      the memory has undefined content.  This often improves
   23029      optimization.  Standard functions with this property include
   23030      `malloc' and `calloc'.  `realloc'-like functions do not have this
   23031      property as the memory pointed to does not have undefined content.
   23032 
   23033 `mips16/nomips16'
   23034      On MIPS targets, you can use the `mips16' and `nomips16' function
   23035      attributes to locally select or turn off MIPS16 code generation.
   23036      A function with the `mips16' attribute is emitted as MIPS16 code,
   23037      while MIPS16 code generation is disabled for functions with the
   23038      `nomips16' attribute.  These attributes override the `-mips16' and
   23039      `-mno-mips16' options on the command line (*note MIPS Options::).
   23040 
   23041      When compiling files containing mixed MIPS16 and non-MIPS16 code,
   23042      the preprocessor symbol `__mips16' reflects the setting on the
   23043      command line, not that within individual functions.  Mixed MIPS16
   23044      and non-MIPS16 code may interact badly with some GCC extensions
   23045      such as `__builtin_apply' (*note Constructing Calls::).
   23046 
   23047 `model (MODEL-NAME)'
   23048      On the M32R/D, use this attribute to set the addressability of an
   23049      object, and of the code generated for a function.  The identifier
   23050      MODEL-NAME is one of `small', `medium', or `large', representing
   23051      each of the code models.
   23052 
   23053      Small model objects live in the lower 16MB of memory (so that their
   23054      addresses can be loaded with the `ld24' instruction), and are
   23055      callable with the `bl' instruction.
   23056 
   23057      Medium model objects may live anywhere in the 32-bit address space
   23058      (the compiler generates `seth/add3' instructions to load their
   23059      addresses), and are callable with the `bl' instruction.
   23060 
   23061      Large model objects may live anywhere in the 32-bit address space
   23062      (the compiler generates `seth/add3' instructions to load their
   23063      addresses), and may not be reachable with the `bl' instruction
   23064      (the compiler generates the much slower `seth/add3/jl' instruction
   23065      sequence).
   23066 
   23067      On IA-64, use this attribute to set the addressability of an
   23068      object.  At present, the only supported identifier for MODEL-NAME
   23069      is `small', indicating addressability via "small" (22-bit)
   23070      addresses (so that their addresses can be loaded with the `addl'
   23071      instruction).  Caveat: such addressing is by definition not
   23072      position independent and hence this attribute must not be used for
   23073      objects defined by shared libraries.
   23074 
   23075 `ms_abi/sysv_abi'
   23076      On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI
   23077      attribute to indicate which calling convention should be used for
   23078      a function.  The `ms_abi' attribute tells the compiler to use the
   23079      Microsoft ABI, while the `sysv_abi' attribute tells the compiler
   23080      to use the ABI used on GNU/Linux and other systems.  The default
   23081      is to use the Microsoft ABI when targeting Windows.  On all other
   23082      systems, the default is the x86/AMD ABI.
   23083 
   23084      Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets
   23085      currently requires the `-maccumulate-outgoing-args' option.
   23086 
   23087 `callee_pop_aggregate_return (NUMBER)'
   23088      On 32-bit i?86-*-* targets, you can use this attribute to control
   23089      how aggregates are returned in memory.  If the caller is
   23090      responsible for popping the hidden pointer together with the rest
   23091      of the arguments, specify NUMBER equal to zero.  If callee is
   23092      responsible for popping the hidden pointer, specify NUMBER equal
   23093      to one.
   23094 
   23095      The default i386 ABI assumes that the callee pops the stack for
   23096      hidden pointer.  However, on 32-bit i386 Microsoft Windows targets,
   23097      the compiler assumes that the caller pops the stack for hidden
   23098      pointer.
   23099 
   23100 `ms_hook_prologue'
   23101      On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets,
   23102      you can use this function attribute to make GCC generate the
   23103      "hot-patching" function prologue used in Win32 API functions in
   23104      Microsoft Windows XP Service Pack 2 and newer.
   23105 
   23106 `hotpatch [(PROLOGUE-HALFWORDS)]'
   23107      On S/390 System z targets, you can use this function attribute to
   23108      make GCC generate a "hot-patching" function prologue.  The
   23109      `hotpatch' has no effect on funtions that are explicitly inline.
   23110      If the `-mhotpatch' or `-mno-hotpatch' command-line option is used
   23111      at the same time, the `hotpatch' attribute takes precedence.  If
   23112      an argument is given, the maximum allowed value is 1000000.
   23113 
   23114 `naked'
   23115      Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
   23116      indicate that the specified function does not need
   23117      prologue/epilogue sequences generated by the compiler.  It is up
   23118      to the programmer to provide these sequences. The only statements
   23119      that can be safely included in naked functions are `asm'
   23120      statements that do not have operands.  All other statements,
   23121      including declarations of local variables, `if' statements, and so
   23122      forth, should be avoided.  Naked functions should be used to
   23123      implement the body of an assembly function, while allowing the
   23124      compiler to construct the requisite function declaration for the
   23125      assembler.
   23126 
   23127 `near'
   23128      On 68HC11 and 68HC12 the `near' attribute causes the compiler to
   23129      use the normal calling convention based on `jsr' and `rts'.  This
   23130      attribute can be used to cancel the effect of the `-mlong-calls'
   23131      option.
   23132 
   23133      On MeP targets this attribute causes the compiler to assume the
   23134      called function is close enough to use the normal calling
   23135      convention, overriding the `-mtf' command-line option.
   23136 
   23137 `nesting'
   23138      Use this attribute together with `interrupt_handler',
   23139      `exception_handler' or `nmi_handler' to indicate that the function
   23140      entry code should enable nested interrupts or exceptions.
   23141 
   23142 `nmi_handler'
   23143      Use this attribute on the Blackfin to indicate that the specified
   23144      function is an NMI handler.  The compiler generates function entry
   23145      and exit sequences suitable for use in an NMI handler when this
   23146      attribute is present.
   23147 
   23148 `no_instrument_function'
   23149      If `-finstrument-functions' is given, profiling function calls are
   23150      generated at entry and exit of most user-compiled functions.
   23151      Functions with this attribute are not so instrumented.
   23152 
   23153 `no_split_stack'
   23154      If `-fsplit-stack' is given, functions have a small prologue which
   23155      decides whether to split the stack.  Functions with the
   23156      `no_split_stack' attribute do not have that prologue, and thus may
   23157      run with only a small amount of stack space available.
   23158 
   23159 `noinline'
   23160      This function attribute prevents a function from being considered
   23161      for inlining.  If the function does not have side-effects, there
   23162      are optimizations other than inlining that cause function calls to
   23163      be optimized away, although the function call is live.  To keep
   23164      such calls from being optimized away, put
   23165           asm ("");
   23166 
   23167      (*note Extended Asm::) in the called function, to serve as a
   23168      special side-effect.
   23169 
   23170 `noclone'
   23171      This function attribute prevents a function from being considered
   23172      for cloning--a mechanism that produces specialized copies of
   23173      functions and which is (currently) performed by interprocedural
   23174      constant propagation.
   23175 
   23176 `nonnull (ARG-INDEX, ...)'
   23177      The `nonnull' attribute specifies that some function parameters
   23178      should be non-null pointers.  For instance, the declaration:
   23179 
   23180           extern void *
   23181           my_memcpy (void *dest, const void *src, size_t len)
   23182                   __attribute__((nonnull (1, 2)));
   23183 
   23184      causes the compiler to check that, in calls to `my_memcpy',
   23185      arguments DEST and SRC are non-null.  If the compiler determines
   23186      that a null pointer is passed in an argument slot marked as
   23187      non-null, and the `-Wnonnull' option is enabled, a warning is
   23188      issued.  The compiler may also choose to make optimizations based
   23189      on the knowledge that certain function arguments will never be
   23190      null.
   23191 
   23192      If no argument index list is given to the `nonnull' attribute, all
   23193      pointer arguments are marked as non-null.  To illustrate, the
   23194      following declaration is equivalent to the previous example:
   23195 
   23196           extern void *
   23197           my_memcpy (void *dest, const void *src, size_t len)
   23198                   __attribute__((nonnull));
   23199 
   23200 `noreturn'
   23201      A few standard library functions, such as `abort' and `exit',
   23202      cannot return.  GCC knows this automatically.  Some programs define
   23203      their own functions that never return.  You can declare them
   23204      `noreturn' to tell the compiler this fact.  For example,
   23205 
   23206           void fatal () __attribute__ ((noreturn));
   23207 
   23208           void
   23209           fatal (/* ... */)
   23210           {
   23211             /* ... */ /* Print error message. */ /* ... */
   23212             exit (1);
   23213           }
   23214 
   23215      The `noreturn' keyword tells the compiler to assume that `fatal'
   23216      cannot return.  It can then optimize without regard to what would
   23217      happen if `fatal' ever did return.  This makes slightly better
   23218      code.  More importantly, it helps avoid spurious warnings of
   23219      uninitialized variables.
   23220 
   23221      The `noreturn' keyword does not affect the exceptional path when
   23222      that applies: a `noreturn'-marked function may still return to the
   23223      caller by throwing an exception or calling `longjmp'.
   23224 
   23225      Do not assume that registers saved by the calling function are
   23226      restored before calling the `noreturn' function.
   23227 
   23228      It does not make sense for a `noreturn' function to have a return
   23229      type other than `void'.
   23230 
   23231      The attribute `noreturn' is not implemented in GCC versions
   23232      earlier than 2.5.  An alternative way to declare that a function
   23233      does not return, which works in the current version and in some
   23234      older versions, is as follows:
   23235 
   23236           typedef void voidfn ();
   23237 
   23238           volatile voidfn fatal;
   23239 
   23240      This approach does not work in GNU C++.
   23241 
   23242 `nothrow'
   23243      The `nothrow' attribute is used to inform the compiler that a
   23244      function cannot throw an exception.  For example, most functions in
   23245      the standard C library can be guaranteed not to throw an exception
   23246      with the notable exceptions of `qsort' and `bsearch' that take
   23247      function pointer arguments.  The `nothrow' attribute is not
   23248      implemented in GCC versions earlier than 3.3.
   23249 
   23250 `nosave_low_regs'
   23251      Use this attribute on SH targets to indicate that an
   23252      `interrupt_handler' function should not save and restore registers
   23253      R0..R7.  This can be used on SH3* and SH4* targets that have a
   23254      second R0..R7 register bank for non-reentrant interrupt handlers.
   23255 
   23256 `optimize'
   23257      The `optimize' attribute is used to specify that a function is to
   23258      be compiled with different optimization options than specified on
   23259      the command line.  Arguments can either be numbers or strings.
   23260      Numbers are assumed to be an optimization level.  Strings that
   23261      begin with `O' are assumed to be an optimization option, while
   23262      other options are assumed to be used with a `-f' prefix.  You can
   23263      also use the `#pragma GCC optimize' pragma to set the optimization
   23264      options that affect more than one function.  *Note Function
   23265      Specific Option Pragmas::, for details about the `#pragma GCC
   23266      optimize' pragma.
   23267 
   23268      This can be used for instance to have frequently-executed functions
   23269      compiled with more aggressive optimization options that produce
   23270      faster and larger code, while other functions can be compiled with
   23271      less aggressive options.
   23272 
   23273 `OS_main/OS_task'
   23274      On AVR, functions with the `OS_main' or `OS_task' attribute do not
   23275      save/restore any call-saved register in their prologue/epilogue.
   23276 
   23277      The `OS_main' attribute can be used when there _is guarantee_ that
   23278      interrupts are disabled at the time when the function is entered.
   23279      This saves resources when the stack pointer has to be changed to
   23280      set up a frame for local variables.
   23281 
   23282      The `OS_task' attribute can be used when there is _no guarantee_
   23283      that interrupts are disabled at that time when the function is
   23284      entered like for, e.g. task functions in a multi-threading
   23285      operating system. In that case, changing the stack pointer
   23286      register is guarded by save/clear/restore of the global interrupt
   23287      enable flag.
   23288 
   23289      The differences to the `naked' function attribute are:
   23290         * `naked' functions do not have a return instruction whereas
   23291           `OS_main' and `OS_task' functions have a `RET' or `RETI'
   23292           return instruction.
   23293 
   23294         * `naked' functions do not set up a frame for local variables
   23295           or a frame pointer whereas `OS_main' and `OS_task' do this as
   23296           needed.
   23297 
   23298 `pcs'
   23299      The `pcs' attribute can be used to control the calling convention
   23300      used for a function on ARM.  The attribute takes an argument that
   23301      specifies the calling convention to use.
   23302 
   23303      When compiling using the AAPCS ABI (or a variant of it) then valid
   23304      values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In order
   23305      to use a variant other than `"aapcs"' then the compiler must be
   23306      permitted to use the appropriate co-processor registers (i.e., the
   23307      VFP registers must be available in order to use `"aapcs-vfp"').
   23308      For example,
   23309 
   23310           /* Argument passed in r0, and result returned in r0+r1.  */
   23311           double f2d (float) __attribute__((pcs("aapcs")));
   23312 
   23313      Variadic functions always use the `"aapcs"' calling convention and
   23314      the compiler rejects attempts to specify an alternative.
   23315 
   23316 `pure'
   23317      Many functions have no effects except the return value and their
   23318      return value depends only on the parameters and/or global
   23319      variables.  Such a function can be subject to common subexpression
   23320      elimination and loop optimization just as an arithmetic operator
   23321      would be.  These functions should be declared with the attribute
   23322      `pure'.  For example,
   23323 
   23324           int square (int) __attribute__ ((pure));
   23325 
   23326      says that the hypothetical function `square' is safe to call fewer
   23327      times than the program says.
   23328 
   23329      Some of common examples of pure functions are `strlen' or `memcmp'.
   23330      Interesting non-pure functions are functions with infinite loops
   23331      or those depending on volatile memory or other system resource,
   23332      that may change between two consecutive calls (such as `feof' in a
   23333      multithreading environment).
   23334 
   23335      The attribute `pure' is not implemented in GCC versions earlier
   23336      than 2.96.
   23337 
   23338 `hot'
   23339      The `hot' attribute on a function is used to inform the compiler
   23340      that the function is a hot spot of the compiled program.  The
   23341      function is optimized more aggressively and on many target it is
   23342      placed into special subsection of the text section so all hot
   23343      functions appears close together improving locality.
   23344 
   23345      When profile feedback is available, via `-fprofile-use', hot
   23346      functions are automatically detected and this attribute is ignored.
   23347 
   23348      The `hot' attribute on functions is not implemented in GCC versions
   23349      earlier than 4.3.
   23350 
   23351      The `hot' attribute on a label is used to inform the compiler that
   23352      path following the label are more likely than paths that are not so
   23353      annotated.  This attribute is used in cases where
   23354      `__builtin_expect' cannot be used, for instance with computed goto
   23355      or `asm goto'.
   23356 
   23357      The `hot' attribute on labels is not implemented in GCC versions
   23358      earlier than 4.8.
   23359 
   23360 `cold'
   23361      The `cold' attribute on functions is used to inform the compiler
   23362      that the function is unlikely to be executed.  The function is
   23363      optimized for size rather than speed and on many targets it is
   23364      placed into special subsection of the text section so all cold
   23365      functions appears close together improving code locality of
   23366      non-cold parts of program.  The paths leading to call of cold
   23367      functions within code are marked as unlikely by the branch
   23368      prediction mechanism.  It is thus useful to mark functions used to
   23369      handle unlikely conditions, such as `perror', as cold to improve
   23370      optimization of hot functions that do call marked functions in
   23371      rare occasions.
   23372 
   23373      When profile feedback is available, via `-fprofile-use', cold
   23374      functions are automatically detected and this attribute is ignored.
   23375 
   23376      The `cold' attribute on functions is not implemented in GCC
   23377      versions earlier than 4.3.
   23378 
   23379      The `cold' attribute on labels is used to inform the compiler that
   23380      the path following the label is unlikely to be executed.  This
   23381      attribute is used in cases where `__builtin_expect' cannot be
   23382      used, for instance with computed goto or `asm goto'.
   23383 
   23384      The `cold' attribute on labels is not implemented in GCC versions
   23385      earlier than 4.8.
   23386 
   23387 `no_sanitize_address'
   23388 `no_address_safety_analysis'
   23389      The `no_sanitize_address' attribute on functions is used to inform
   23390      the compiler that it should not instrument memory accesses in the
   23391      function when compiling with the `-fsanitize=address' option.  The
   23392      `no_address_safety_analysis' is a deprecated alias of the
   23393      `no_sanitize_address' attribute, new code should use
   23394      `no_sanitize_address'.
   23395 
   23396 `regparm (NUMBER)'
   23397      On the Intel 386, the `regparm' attribute causes the compiler to
   23398      pass arguments number one to NUMBER if they are of integral type
   23399      in registers EAX, EDX, and ECX instead of on the stack.  Functions
   23400      that take a variable number of arguments continue to be passed all
   23401      of their arguments on the stack.
   23402 
   23403      Beware that on some ELF systems this attribute is unsuitable for
   23404      global functions in shared libraries with lazy binding (which is
   23405      the default).  Lazy binding sends the first call via resolving
   23406      code in the loader, which might assume EAX, EDX and ECX can be
   23407      clobbered, as per the standard calling conventions.  Solaris 8 is
   23408      affected by this.  Systems with the GNU C Library version 2.1 or
   23409      higher and FreeBSD are believed to be safe since the loaders there
   23410      save EAX, EDX and ECX.  (Lazy binding can be disabled with the
   23411      linker or the loader if desired, to avoid the problem.)
   23412 
   23413 `sseregparm'
   23414      On the Intel 386 with SSE support, the `sseregparm' attribute
   23415      causes the compiler to pass up to 3 floating-point arguments in
   23416      SSE registers instead of on the stack.  Functions that take a
   23417      variable number of arguments continue to pass all of their
   23418      floating-point arguments on the stack.
   23419 
   23420 `force_align_arg_pointer'
   23421      On the Intel x86, the `force_align_arg_pointer' attribute may be
   23422      applied to individual function definitions, generating an alternate
   23423      prologue and epilogue that realigns the run-time stack if
   23424      necessary.  This supports mixing legacy codes that run with a
   23425      4-byte aligned stack with modern codes that keep a 16-byte stack
   23426      for SSE compatibility.
   23427 
   23428 `renesas'
   23429      On SH targets this attribute specifies that the function or struct
   23430      follows the Renesas ABI.
   23431 
   23432 `resbank'
   23433      On the SH2A target, this attribute enables the high-speed register
   23434      saving and restoration using a register bank for
   23435      `interrupt_handler' routines.  Saving to the bank is performed
   23436      automatically after the CPU accepts an interrupt that uses a
   23437      register bank.
   23438 
   23439      The nineteen 32-bit registers comprising general register R0 to
   23440      R14, control register GBR, and system registers MACH, MACL, and PR
   23441      and the vector table address offset are saved into a register
   23442      bank.  Register banks are stacked in first-in last-out (FILO)
   23443      sequence.  Restoration from the bank is executed by issuing a
   23444      RESBANK instruction.
   23445 
   23446 `returns_twice'
   23447      The `returns_twice' attribute tells the compiler that a function
   23448      may return more than one time.  The compiler ensures that all
   23449      registers are dead before calling such a function and emits a
   23450      warning about the variables that may be clobbered after the second
   23451      return from the function.  Examples of such functions are `setjmp'
   23452      and `vfork'.  The `longjmp'-like counterpart of such function, if
   23453      any, might need to be marked with the `noreturn' attribute.
   23454 
   23455 `saveall'
   23456      Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
   23457      indicate that all registers except the stack pointer should be
   23458      saved in the prologue regardless of whether they are used or not.
   23459 
   23460 `save_volatiles'
   23461      Use this attribute on the MicroBlaze to indicate that the function
   23462      is an interrupt handler.  All volatile registers (in addition to
   23463      non-volatile registers) are saved in the function prologue.  If
   23464      the function is a leaf function, only volatiles used by the
   23465      function are saved.  A normal function return is generated instead
   23466      of a return from interrupt.
   23467 
   23468 `section ("SECTION-NAME")'
   23469      Normally, the compiler places the code it generates in the `text'
   23470      section.  Sometimes, however, you need additional sections, or you
   23471      need certain particular functions to appear in special sections.
   23472      The `section' attribute specifies that a function lives in a
   23473      particular section.  For example, the declaration:
   23474 
   23475           extern void foobar (void) __attribute__ ((section ("bar")));
   23476 
   23477      puts the function `foobar' in the `bar' section.
   23478 
   23479      Some file formats do not support arbitrary sections so the
   23480      `section' attribute is not available on all platforms.  If you
   23481      need to map the entire contents of a module to a particular
   23482      section, consider using the facilities of the linker instead.
   23483 
   23484 `sentinel'
   23485      This function attribute ensures that a parameter in a function
   23486      call is an explicit `NULL'.  The attribute is only valid on
   23487      variadic functions.  By default, the sentinel is located at
   23488      position zero, the last parameter of the function call.  If an
   23489      optional integer position argument P is supplied to the attribute,
   23490      the sentinel must be located at position P counting backwards from
   23491      the end of the argument list.
   23492 
   23493           __attribute__ ((sentinel))
   23494           is equivalent to
   23495           __attribute__ ((sentinel(0)))
   23496 
   23497      The attribute is automatically set with a position of 0 for the
   23498      built-in functions `execl' and `execlp'.  The built-in function
   23499      `execle' has the attribute set with a position of 1.
   23500 
   23501      A valid `NULL' in this context is defined as zero with any pointer
   23502      type.  If your system defines the `NULL' macro with an integer type
   23503      then you need to add an explicit cast.  GCC replaces `stddef.h'
   23504      with a copy that redefines NULL appropriately.
   23505 
   23506      The warnings for missing or incorrect sentinels are enabled with
   23507      `-Wformat'.
   23508 
   23509 `short_call'
   23510      See `long_call/short_call'.
   23511 
   23512 `shortcall'
   23513      See `longcall/shortcall'.
   23514 
   23515 `signal'
   23516      Use this attribute on the AVR to indicate that the specified
   23517      function is an interrupt handler.  The compiler generates function
   23518      entry and exit sequences suitable for use in an interrupt handler
   23519      when this attribute is present.
   23520 
   23521      See also the `interrupt' function attribute.
   23522 
   23523      The AVR hardware globally disables interrupts when an interrupt is
   23524      executed.  Interrupt handler functions defined with the `signal'
   23525      attribute do not re-enable interrupts.  It is save to enable
   23526      interrupts in a `signal' handler.  This "save" only applies to the
   23527      code generated by the compiler and not to the IRQ layout of the
   23528      application which is responsibility of the application.
   23529 
   23530      If both `signal' and `interrupt' are specified for the same
   23531      function, `signal' is silently ignored.
   23532 
   23533 `sp_switch'
   23534      Use this attribute on the SH to indicate an `interrupt_handler'
   23535      function should switch to an alternate stack.  It expects a string
   23536      argument that names a global variable holding the address of the
   23537      alternate stack.
   23538 
   23539           void *alt_stack;
   23540           void f () __attribute__ ((interrupt_handler,
   23541                                     sp_switch ("alt_stack")));
   23542 
   23543 `stdcall'
   23544      On the Intel 386, the `stdcall' attribute causes the compiler to
   23545      assume that the called function pops off the stack space used to
   23546      pass arguments, unless it takes a variable number of arguments.
   23547 
   23548 `syscall_linkage'
   23549      This attribute is used to modify the IA-64 calling convention by
   23550      marking all input registers as live at all function exits.  This
   23551      makes it possible to restart a system call after an interrupt
   23552      without having to save/restore the input registers.  This also
   23553      prevents kernel data from leaking into application code.
   23554 
   23555 `target'
   23556      The `target' attribute is used to specify that a function is to be
   23557      compiled with different target options than specified on the
   23558      command line.  This can be used for instance to have functions
   23559      compiled with a different ISA (instruction set architecture) than
   23560      the default.  You can also use the `#pragma GCC target' pragma to
   23561      set more than one function to be compiled with specific target
   23562      options.  *Note Function Specific Option Pragmas::, for details
   23563      about the `#pragma GCC target' pragma.
   23564 
   23565      For instance on a 386, you could compile one function with
   23566      `target("sse4.1,arch=core2")' and another with
   23567      `target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
   23568      the first function with `-msse4.1' and `-march=core2' options, and
   23569      the second function with `-msse4a' and `-march=amdfam10' options.
   23570      It is up to the user to make sure that a function is only invoked
   23571      on a machine that supports the particular ISA it is compiled for
   23572      (for example by using `cpuid' on 386 to determine what feature
   23573      bits and architecture family are used).
   23574 
   23575           int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
   23576           int sse3_func (void) __attribute__ ((__target__ ("sse3")));
   23577 
   23578      On the 386, the following options are allowed:
   23579 
   23580     `abm'
   23581     `no-abm'
   23582           Enable/disable the generation of the advanced bit
   23583           instructions.
   23584 
   23585     `aes'
   23586     `no-aes'
   23587           Enable/disable the generation of the AES instructions.
   23588 
   23589     `default'
   23590           *Note Function Multiversioning::, where it is used to specify
   23591           the default function version.
   23592 
   23593     `mmx'
   23594     `no-mmx'
   23595           Enable/disable the generation of the MMX instructions.
   23596 
   23597     `pclmul'
   23598     `no-pclmul'
   23599           Enable/disable the generation of the PCLMUL instructions.
   23600 
   23601     `popcnt'
   23602     `no-popcnt'
   23603           Enable/disable the generation of the POPCNT instruction.
   23604 
   23605     `sse'
   23606     `no-sse'
   23607           Enable/disable the generation of the SSE instructions.
   23608 
   23609     `sse2'
   23610     `no-sse2'
   23611           Enable/disable the generation of the SSE2 instructions.
   23612 
   23613     `sse3'
   23614     `no-sse3'
   23615           Enable/disable the generation of the SSE3 instructions.
   23616 
   23617     `sse4'
   23618     `no-sse4'
   23619           Enable/disable the generation of the SSE4 instructions (both
   23620           SSE4.1 and SSE4.2).
   23621 
   23622     `sse4.1'
   23623     `no-sse4.1'
   23624           Enable/disable the generation of the sse4.1 instructions.
   23625 
   23626     `sse4.2'
   23627     `no-sse4.2'
   23628           Enable/disable the generation of the sse4.2 instructions.
   23629 
   23630     `sse4a'
   23631     `no-sse4a'
   23632           Enable/disable the generation of the SSE4A instructions.
   23633 
   23634     `fma4'
   23635     `no-fma4'
   23636           Enable/disable the generation of the FMA4 instructions.
   23637 
   23638     `xop'
   23639     `no-xop'
   23640           Enable/disable the generation of the XOP instructions.
   23641 
   23642     `lwp'
   23643     `no-lwp'
   23644           Enable/disable the generation of the LWP instructions.
   23645 
   23646     `ssse3'
   23647     `no-ssse3'
   23648           Enable/disable the generation of the SSSE3 instructions.
   23649 
   23650     `cld'
   23651     `no-cld'
   23652           Enable/disable the generation of the CLD before string moves.
   23653 
   23654     `fancy-math-387'
   23655     `no-fancy-math-387'
   23656           Enable/disable the generation of the `sin', `cos', and `sqrt'
   23657           instructions on the 387 floating-point unit.
   23658 
   23659     `fused-madd'
   23660     `no-fused-madd'
   23661           Enable/disable the generation of the fused multiply/add
   23662           instructions.
   23663 
   23664     `ieee-fp'
   23665     `no-ieee-fp'
   23666           Enable/disable the generation of floating point that depends
   23667           on IEEE arithmetic.
   23668 
   23669     `inline-all-stringops'
   23670     `no-inline-all-stringops'
   23671           Enable/disable inlining of string operations.
   23672 
   23673     `inline-stringops-dynamically'
   23674     `no-inline-stringops-dynamically'
   23675           Enable/disable the generation of the inline code to do small
   23676           string operations and calling the library routines for large
   23677           operations.
   23678 
   23679     `align-stringops'
   23680     `no-align-stringops'
   23681           Do/do not align destination of inlined string operations.
   23682 
   23683     `recip'
   23684     `no-recip'
   23685           Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
   23686           RSQRTPS instructions followed an additional Newton-Raphson
   23687           step instead of doing a floating-point division.
   23688 
   23689     `arch=ARCH'
   23690           Specify the architecture to generate code for in compiling
   23691           the function.
   23692 
   23693     `tune=TUNE'
   23694           Specify the architecture to tune for in compiling the
   23695           function.
   23696 
   23697     `fpmath=FPMATH'
   23698           Specify which floating-point unit to use.  The
   23699           `target("fpmath=sse,387")' option must be specified as
   23700           `target("fpmath=sse+387")' because the comma would separate
   23701           different options.
   23702 
   23703      On the PowerPC, the following options are allowed:
   23704 
   23705     `altivec'
   23706     `no-altivec'
   23707           Generate code that uses (does not use) AltiVec instructions.
   23708           In 32-bit code, you cannot enable AltiVec instructions unless
   23709           `-mabi=altivec' is used on the command line.
   23710 
   23711     `cmpb'
   23712     `no-cmpb'
   23713           Generate code that uses (does not use) the compare bytes
   23714           instruction implemented on the POWER6 processor and other
   23715           processors that support the PowerPC V2.05 architecture.
   23716 
   23717     `dlmzb'
   23718     `no-dlmzb'
   23719           Generate code that uses (does not use) the string-search
   23720           `dlmzb' instruction on the IBM 405, 440, 464 and 476
   23721           processors.  This instruction is generated by default when
   23722           targeting those processors.
   23723 
   23724     `fprnd'
   23725     `no-fprnd'
   23726           Generate code that uses (does not use) the FP round to integer
   23727           instructions implemented on the POWER5+ processor and other
   23728           processors that support the PowerPC V2.03 architecture.
   23729 
   23730     `hard-dfp'
   23731     `no-hard-dfp'
   23732           Generate code that uses (does not use) the decimal
   23733           floating-point instructions implemented on some POWER
   23734           processors.
   23735 
   23736     `isel'
   23737     `no-isel'
   23738           Generate code that uses (does not use) ISEL instruction.
   23739 
   23740     `mfcrf'
   23741     `no-mfcrf'
   23742           Generate code that uses (does not use) the move from condition
   23743           register field instruction implemented on the POWER4
   23744           processor and other processors that support the PowerPC V2.01
   23745           architecture.
   23746 
   23747     `mfpgpr'
   23748     `no-mfpgpr'
   23749           Generate code that uses (does not use) the FP move to/from
   23750           general purpose register instructions implemented on the
   23751           POWER6X processor and other processors that support the
   23752           extended PowerPC V2.05 architecture.
   23753 
   23754     `mulhw'
   23755     `no-mulhw'
   23756           Generate code that uses (does not use) the half-word multiply
   23757           and multiply-accumulate instructions on the IBM 405, 440, 464
   23758           and 476 processors.  These instructions are generated by
   23759           default when targeting those processors.
   23760 
   23761     `multiple'
   23762     `no-multiple'
   23763           Generate code that uses (does not use) the load multiple word
   23764           instructions and the store multiple word instructions.
   23765 
   23766     `update'
   23767     `no-update'
   23768           Generate code that uses (does not use) the load or store
   23769           instructions that update the base register to the address of
   23770           the calculated memory location.
   23771 
   23772     `popcntb'
   23773     `no-popcntb'
   23774           Generate code that uses (does not use) the popcount and
   23775           double-precision FP reciprocal estimate instruction
   23776           implemented on the POWER5 processor and other processors that
   23777           support the PowerPC V2.02 architecture.
   23778 
   23779     `popcntd'
   23780     `no-popcntd'
   23781           Generate code that uses (does not use) the popcount
   23782           instruction implemented on the POWER7 processor and other
   23783           processors that support the PowerPC V2.06 architecture.
   23784 
   23785     `powerpc-gfxopt'
   23786     `no-powerpc-gfxopt'
   23787           Generate code that uses (does not use) the optional PowerPC
   23788           architecture instructions in the Graphics group, including
   23789           floating-point select.
   23790 
   23791     `powerpc-gpopt'
   23792     `no-powerpc-gpopt'
   23793           Generate code that uses (does not use) the optional PowerPC
   23794           architecture instructions in the General Purpose group,
   23795           including floating-point square root.
   23796 
   23797     `recip-precision'
   23798     `no-recip-precision'
   23799           Assume (do not assume) that the reciprocal estimate
   23800           instructions provide higher-precision estimates than is
   23801           mandated by the powerpc ABI.
   23802 
   23803     `string'
   23804     `no-string'
   23805           Generate code that uses (does not use) the load string
   23806           instructions and the store string word instructions to save
   23807           multiple registers and do small block moves.
   23808 
   23809     `vsx'
   23810     `no-vsx'
   23811           Generate code that uses (does not use) vector/scalar (VSX)
   23812           instructions, and also enable the use of built-in functions
   23813           that allow more direct access to the VSX instruction set.  In
   23814           32-bit code, you cannot enable VSX or AltiVec instructions
   23815           unless `-mabi=altivec' is used on the command line.
   23816 
   23817     `friz'
   23818     `no-friz'
   23819           Generate (do not generate) the `friz' instruction when the
   23820           `-funsafe-math-optimizations' option is used to optimize
   23821           rounding a floating-point value to 64-bit integer and back to
   23822           floating point.  The `friz' instruction does not return the
   23823           same value if the floating-point number is too large to fit
   23824           in an integer.
   23825 
   23826     `avoid-indexed-addresses'
   23827     `no-avoid-indexed-addresses'
   23828           Generate code that tries to avoid (not avoid) the use of
   23829           indexed load or store instructions.
   23830 
   23831     `paired'
   23832     `no-paired'
   23833           Generate code that uses (does not use) the generation of
   23834           PAIRED simd instructions.
   23835 
   23836     `longcall'
   23837     `no-longcall'
   23838           Generate code that assumes (does not assume) that all calls
   23839           are far away so that a longer more expensive calling sequence
   23840           is required.
   23841 
   23842     `cpu=CPU'
   23843           Specify the architecture to generate code for when compiling
   23844           the function.  If you select the `target("cpu=power7")'
   23845           attribute when generating 32-bit code, VSX and AltiVec
   23846           instructions are not generated unless you use the
   23847           `-mabi=altivec' option on the command line.
   23848 
   23849     `tune=TUNE'
   23850           Specify the architecture to tune for when compiling the
   23851           function.  If you do not specify the `target("tune=TUNE")'
   23852           attribute and you do specify the `target("cpu=CPU")'
   23853           attribute, compilation tunes for the CPU architecture, and
   23854           not the default tuning specified on the command line.
   23855 
   23856      On the 386/x86_64 and PowerPC back ends, you can use either
   23857      multiple strings to specify multiple options, or you can separate
   23858      the option with a comma (`,').
   23859 
   23860      On the 386/x86_64 and PowerPC back ends, the inliner does not
   23861      inline a function that has different target options than the
   23862      caller, unless the callee has a subset of the target options of
   23863      the caller.  For example a function declared with `target("sse3")'
   23864      can inline a function with `target("sse2")', since `-msse3'
   23865      implies `-msse2'.
   23866 
   23867      The `target' attribute is not implemented in GCC versions earlier
   23868      than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends.
   23869      It is not currently implemented for other back ends.
   23870 
   23871 `tiny_data'
   23872      Use this attribute on the H8/300H and H8S to indicate that the
   23873      specified variable should be placed into the tiny data section.
   23874      The compiler generates more efficient code for loads and stores on
   23875      data in the tiny data section.  Note the tiny data area is limited
   23876      to slightly under 32KB of data.
   23877 
   23878 `trap_exit'
   23879      Use this attribute on the SH for an `interrupt_handler' to return
   23880      using `trapa' instead of `rte'.  This attribute expects an integer
   23881      argument specifying the trap number to be used.
   23882 
   23883 `trapa_handler'
   23884      On SH targets this function attribute is similar to
   23885      `interrupt_handler' but it does not save and restore all registers.
   23886 
   23887 `unused'
   23888      This attribute, attached to a function, means that the function is
   23889      meant to be possibly unused.  GCC does not produce a warning for
   23890      this function.
   23891 
   23892 `used'
   23893      This attribute, attached to a function, means that code must be
   23894      emitted for the function even if it appears that the function is
   23895      not referenced.  This is useful, for example, when the function is
   23896      referenced only in inline assembly.
   23897 
   23898      When applied to a member function of a C++ class template, the
   23899      attribute also means that the function is instantiated if the
   23900      class itself is instantiated.
   23901 
   23902 `version_id'
   23903      This IA-64 HP-UX attribute, attached to a global variable or
   23904      function, renames a symbol to contain a version string, thus
   23905      allowing for function level versioning.  HP-UX system header files
   23906      may use version level functioning for some system calls.
   23907 
   23908           extern int foo () __attribute__((version_id ("20040821")));
   23909 
   23910      Calls to FOO are mapped to calls to FOO{20040821}.
   23911 
   23912 `visibility ("VISIBILITY_TYPE")'
   23913      This attribute affects the linkage of the declaration to which it
   23914      is attached.  There are four supported VISIBILITY_TYPE values:
   23915      default, hidden, protected or internal visibility.
   23916 
   23917           void __attribute__ ((visibility ("protected")))
   23918           f () { /* Do something. */; }
   23919           int i __attribute__ ((visibility ("hidden")));
   23920 
   23921      The possible values of VISIBILITY_TYPE correspond to the
   23922      visibility settings in the ELF gABI.
   23923 
   23924     "default"
   23925           Default visibility is the normal case for the object file
   23926           format.  This value is available for the visibility attribute
   23927           to override other options that may change the assumed
   23928           visibility of entities.
   23929 
   23930           On ELF, default visibility means that the declaration is
   23931           visible to other modules and, in shared libraries, means that
   23932           the declared entity may be overridden.
   23933 
   23934           On Darwin, default visibility means that the declaration is
   23935           visible to other modules.
   23936 
   23937           Default visibility corresponds to "external linkage" in the
   23938           language.
   23939 
   23940     "hidden"
   23941           Hidden visibility indicates that the entity declared has a new
   23942           form of linkage, which we call "hidden linkage".  Two
   23943           declarations of an object with hidden linkage refer to the
   23944           same object if they are in the same shared object.
   23945 
   23946     "internal"
   23947           Internal visibility is like hidden visibility, but with
   23948           additional processor specific semantics.  Unless otherwise
   23949           specified by the psABI, GCC defines internal visibility to
   23950           mean that a function is _never_ called from another module.
   23951           Compare this with hidden functions which, while they cannot
   23952           be referenced directly by other modules, can be referenced
   23953           indirectly via function pointers.  By indicating that a
   23954           function cannot be called from outside the module, GCC may
   23955           for instance omit the load of a PIC register since it is known
   23956           that the calling function loaded the correct value.
   23957 
   23958     "protected"
   23959           Protected visibility is like default visibility except that it
   23960           indicates that references within the defining module bind to
   23961           the definition in that module.  That is, the declared entity
   23962           cannot be overridden by another module.
   23963 
   23964 
   23965      All visibilities are supported on many, but not all, ELF targets
   23966      (supported when the assembler supports the `.visibility'
   23967      pseudo-op).  Default visibility is supported everywhere.  Hidden
   23968      visibility is supported on Darwin targets.
   23969 
   23970      The visibility attribute should be applied only to declarations
   23971      that would otherwise have external linkage.  The attribute should
   23972      be applied consistently, so that the same entity should not be
   23973      declared with different settings of the attribute.
   23974 
   23975      In C++, the visibility attribute applies to types as well as
   23976      functions and objects, because in C++ types have linkage.  A class
   23977      must not have greater visibility than its non-static data member
   23978      types and bases, and class members default to the visibility of
   23979      their class.  Also, a declaration without explicit visibility is
   23980      limited to the visibility of its type.
   23981 
   23982      In C++, you can mark member functions and static member variables
   23983      of a class with the visibility attribute.  This is useful if you
   23984      know a particular method or static member variable should only be
   23985      used from one shared object; then you can mark it hidden while the
   23986      rest of the class has default visibility.  Care must be taken to
   23987      avoid breaking the One Definition Rule; for example, it is usually
   23988      not useful to mark an inline method as hidden without marking the
   23989      whole class as hidden.
   23990 
   23991      A C++ namespace declaration can also have the visibility attribute.
   23992      This attribute applies only to the particular namespace body, not
   23993      to other definitions of the same namespace; it is equivalent to
   23994      using `#pragma GCC visibility' before and after the namespace
   23995      definition (*note Visibility Pragmas::).
   23996 
   23997      In C++, if a template argument has limited visibility, this
   23998      restriction is implicitly propagated to the template instantiation.
   23999      Otherwise, template instantiations and specializations default to
   24000      the visibility of their template.
   24001 
   24002      If both the template and enclosing class have explicit visibility,
   24003      the visibility from the template is used.
   24004 
   24005 `vliw'
   24006      On MeP, the `vliw' attribute tells the compiler to emit
   24007      instructions in VLIW mode instead of core mode.  Note that this
   24008      attribute is not allowed unless a VLIW coprocessor has been
   24009      configured and enabled through command-line options.
   24010 
   24011 `warn_unused_result'
   24012      The `warn_unused_result' attribute causes a warning to be emitted
   24013      if a caller of the function with this attribute does not use its
   24014      return value.  This is useful for functions where not checking the
   24015      result is either a security problem or always a bug, such as
   24016      `realloc'.
   24017 
   24018           int fn () __attribute__ ((warn_unused_result));
   24019           int foo ()
   24020           {
   24021             if (fn () < 0) return -1;
   24022             fn ();
   24023             return 0;
   24024           }
   24025 
   24026      results in warning on line 5.
   24027 
   24028 `weak'
   24029      The `weak' attribute causes the declaration to be emitted as a weak
   24030      symbol rather than a global.  This is primarily useful in defining
   24031      library functions that can be overridden in user code, though it
   24032      can also be used with non-function declarations.  Weak symbols are
   24033      supported for ELF targets, and also for a.out targets when using
   24034      the GNU assembler and linker.
   24035 
   24036 `weakref'
   24037 `weakref ("TARGET")'
   24038      The `weakref' attribute marks a declaration as a weak reference.
   24039      Without arguments, it should be accompanied by an `alias' attribute
   24040      naming the target symbol.  Optionally, the TARGET may be given as
   24041      an argument to `weakref' itself.  In either case, `weakref'
   24042      implicitly marks the declaration as `weak'.  Without a TARGET,
   24043      given as an argument to `weakref' or to `alias', `weakref' is
   24044      equivalent to `weak'.
   24045 
   24046           static int x() __attribute__ ((weakref ("y")));
   24047           /* is equivalent to... */
   24048           static int x() __attribute__ ((weak, weakref, alias ("y")));
   24049           /* and to... */
   24050           static int x() __attribute__ ((weakref));
   24051           static int x() __attribute__ ((alias ("y")));
   24052 
   24053      A weak reference is an alias that does not by itself require a
   24054      definition to be given for the target symbol.  If the target
   24055      symbol is only referenced through weak references, then it becomes
   24056      a `weak' undefined symbol.  If it is directly referenced, however,
   24057      then such strong references prevail, and a definition is required
   24058      for the symbol, not necessarily in the same translation unit.
   24059 
   24060      The effect is equivalent to moving all references to the alias to a
   24061      separate translation unit, renaming the alias to the aliased
   24062      symbol, declaring it as weak, compiling the two separate
   24063      translation units and performing a reloadable link on them.
   24064 
   24065      At present, a declaration to which `weakref' is attached can only
   24066      be `static'.
   24067 
   24068 
   24069  You can specify multiple attributes in a declaration by separating them
   24070 by commas within the double parentheses or by immediately following an
   24071 attribute declaration with another attribute declaration.
   24072 
   24073  Some people object to the `__attribute__' feature, suggesting that ISO
   24074 C's `#pragma' should be used instead.  At the time `__attribute__' was
   24075 designed, there were two reasons for not doing this.
   24076 
   24077   1. It is impossible to generate `#pragma' commands from a macro.
   24078 
   24079   2. There is no telling what the same `#pragma' might mean in another
   24080      compiler.
   24081 
   24082  These two reasons applied to almost any application that might have
   24083 been proposed for `#pragma'.  It was basically a mistake to use
   24084 `#pragma' for _anything_.
   24085 
   24086  The ISO C99 standard includes `_Pragma', which now allows pragmas to
   24087 be generated from macros.  In addition, a `#pragma GCC' namespace is
   24088 now in use for GCC-specific pragmas.  However, it has been found
   24089 convenient to use `__attribute__' to achieve a natural attachment of
   24090 attributes to their corresponding declarations, whereas `#pragma GCC'
   24091 is of use for constructs that do not naturally form part of the
   24092 grammar.  *Note Pragmas Accepted by GCC: Pragmas.
   24093 
   24094 
   24095 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
   24096 
   24097 6.31 Attribute Syntax
   24098 =====================
   24099 
   24100 This section describes the syntax with which `__attribute__' may be
   24101 used, and the constructs to which attribute specifiers bind, for the C
   24102 language.  Some details may vary for C++ and Objective-C.  Because of
   24103 infelicities in the grammar for attributes, some forms described here
   24104 may not be successfully parsed in all cases.
   24105 
   24106  There are some problems with the semantics of attributes in C++.  For
   24107 example, there are no manglings for attributes, although they may affect
   24108 code generation, so problems may arise when attributed types are used in
   24109 conjunction with templates or overloading.  Similarly, `typeid' does
   24110 not distinguish between types with different attributes.  Support for
   24111 attributes in C++ may be restricted in future to attributes on
   24112 declarations only, but not on nested declarators.
   24113 
   24114  *Note Function Attributes::, for details of the semantics of attributes
   24115 applying to functions.  *Note Variable Attributes::, for details of the
   24116 semantics of attributes applying to variables.  *Note Type Attributes::,
   24117 for details of the semantics of attributes applying to structure, union
   24118 and enumerated types.
   24119 
   24120  An "attribute specifier" is of the form `__attribute__
   24121 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
   24122 comma-separated sequence of "attributes", where each attribute is one
   24123 of the following:
   24124 
   24125    * Empty.  Empty attributes are ignored.
   24126 
   24127    * A word (which may be an identifier such as `unused', or a reserved
   24128      word such as `const').
   24129 
   24130    * A word, followed by, in parentheses, parameters for the attribute.
   24131      These parameters take one of the following forms:
   24132 
   24133         * An identifier.  For example, `mode' attributes use this form.
   24134 
   24135         * An identifier followed by a comma and a non-empty
   24136           comma-separated list of expressions.  For example, `format'
   24137           attributes use this form.
   24138 
   24139         * A possibly empty comma-separated list of expressions.  For
   24140           example, `format_arg' attributes use this form with the list
   24141           being a single integer constant expression, and `alias'
   24142           attributes use this form with the list being a single string
   24143           constant.
   24144 
   24145  An "attribute specifier list" is a sequence of one or more attribute
   24146 specifiers, not separated by any other tokens.
   24147 
   24148  In GNU C, an attribute specifier list may appear after the colon
   24149 following a label, other than a `case' or `default' label.  The only
   24150 attribute it makes sense to use after a label is `unused'.  This
   24151 feature is intended for program-generated code that may contain unused
   24152 labels, but which is compiled with `-Wall'.  It is not normally
   24153 appropriate to use in it human-written code, though it could be useful
   24154 in cases where the code that jumps to the label is contained within an
   24155 `#ifdef' conditional.  GNU C++ only permits attributes on labels if the
   24156 attribute specifier is immediately followed by a semicolon (i.e., the
   24157 label applies to an empty statement).  If the semicolon is missing, C++
   24158 label attributes are ambiguous, as it is permissible for a declaration,
   24159 which could begin with an attribute list, to be labelled in C++.
   24160 Declarations cannot be labelled in C90 or C99, so the ambiguity does
   24161 not arise there.
   24162 
   24163  An attribute specifier list may appear as part of a `struct', `union'
   24164 or `enum' specifier.  It may go either immediately after the `struct',
   24165 `union' or `enum' keyword, or after the closing brace.  The former
   24166 syntax is preferred.  Where attribute specifiers follow the closing
   24167 brace, they are considered to relate to the structure, union or
   24168 enumerated type defined, not to any enclosing declaration the type
   24169 specifier appears in, and the type defined is not complete until after
   24170 the attribute specifiers.
   24171 
   24172  Otherwise, an attribute specifier appears as part of a declaration,
   24173 counting declarations of unnamed parameters and type names, and relates
   24174 to that declaration (which may be nested in another declaration, for
   24175 example in the case of a parameter declaration), or to a particular
   24176 declarator within a declaration.  Where an attribute specifier is
   24177 applied to a parameter declared as a function or an array, it should
   24178 apply to the function or array rather than the pointer to which the
   24179 parameter is implicitly converted, but this is not yet correctly
   24180 implemented.
   24181 
   24182  Any list of specifiers and qualifiers at the start of a declaration may
   24183 contain attribute specifiers, whether or not such a list may in that
   24184 context contain storage class specifiers.  (Some attributes, however,
   24185 are essentially in the nature of storage class specifiers, and only make
   24186 sense where storage class specifiers may be used; for example,
   24187 `section'.)  There is one necessary limitation to this syntax: the
   24188 first old-style parameter declaration in a function definition cannot
   24189 begin with an attribute specifier, because such an attribute applies to
   24190 the function instead by syntax described below (which, however, is not
   24191 yet implemented in this case).  In some other cases, attribute
   24192 specifiers are permitted by this grammar but not yet supported by the
   24193 compiler.  All attribute specifiers in this place relate to the
   24194 declaration as a whole.  In the obsolescent usage where a type of `int'
   24195 is implied by the absence of type specifiers, such a list of specifiers
   24196 and qualifiers may be an attribute specifier list with no other
   24197 specifiers or qualifiers.
   24198 
   24199  At present, the first parameter in a function prototype must have some
   24200 type specifier that is not an attribute specifier; this resolves an
   24201 ambiguity in the interpretation of `void f(int (__attribute__((foo))
   24202 x))', but is subject to change.  At present, if the parentheses of a
   24203 function declarator contain only attributes then those attributes are
   24204 ignored, rather than yielding an error or warning or implying a single
   24205 parameter of type int, but this is subject to change.
   24206 
   24207  An attribute specifier list may appear immediately before a declarator
   24208 (other than the first) in a comma-separated list of declarators in a
   24209 declaration of more than one identifier using a single list of
   24210 specifiers and qualifiers.  Such attribute specifiers apply only to the
   24211 identifier before whose declarator they appear.  For example, in
   24212 
   24213      __attribute__((noreturn)) void d0 (void),
   24214          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
   24215           d2 (void)
   24216 
   24217 the `noreturn' attribute applies to all the functions declared; the
   24218 `format' attribute only applies to `d1'.
   24219 
   24220  An attribute specifier list may appear immediately before the comma,
   24221 `=' or semicolon terminating the declaration of an identifier other
   24222 than a function definition.  Such attribute specifiers apply to the
   24223 declared object or function.  Where an assembler name for an object or
   24224 function is specified (*note Asm Labels::), the attribute must follow
   24225 the `asm' specification.
   24226 
   24227  An attribute specifier list may, in future, be permitted to appear
   24228 after the declarator in a function definition (before any old-style
   24229 parameter declarations or the function body).
   24230 
   24231  Attribute specifiers may be mixed with type qualifiers appearing inside
   24232 the `[]' of a parameter array declarator, in the C99 construct by which
   24233 such qualifiers are applied to the pointer to which the array is
   24234 implicitly converted.  Such attribute specifiers apply to the pointer,
   24235 not to the array, but at present this is not implemented and they are
   24236 ignored.
   24237 
   24238  An attribute specifier list may appear at the start of a nested
   24239 declarator.  At present, there are some limitations in this usage: the
   24240 attributes correctly apply to the declarator, but for most individual
   24241 attributes the semantics this implies are not implemented.  When
   24242 attribute specifiers follow the `*' of a pointer declarator, they may
   24243 be mixed with any type qualifiers present.  The following describes the
   24244 formal semantics of this syntax.  It makes the most sense if you are
   24245 familiar with the formal specification of declarators in the ISO C
   24246 standard.
   24247 
   24248  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
   24249 where `T' contains declaration specifiers that specify a type TYPE
   24250 (such as `int') and `D1' is a declarator that contains an identifier
   24251 IDENT.  The type specified for IDENT for derived declarators whose type
   24252 does not include an attribute specifier is as in the ISO C standard.
   24253 
   24254  If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
   24255 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
   24256 TYPE" for IDENT, then `T D1' specifies the type
   24257 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
   24258 
   24259  If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
   24260 D', and the declaration `T D' specifies the type
   24261 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
   24262 the type "DERIVED-DECLARATOR-TYPE-LIST
   24263 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
   24264 
   24265  For example,
   24266 
   24267      void (__attribute__((noreturn)) ****f) (void);
   24268 
   24269 specifies the type "pointer to pointer to pointer to pointer to
   24270 non-returning function returning `void'".  As another example,
   24271 
   24272      char *__attribute__((aligned(8))) *f;
   24273 
   24274 specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
   24275 again that this does not work with most attributes; for example, the
   24276 usage of `aligned' and `noreturn' attributes given above is not yet
   24277 supported.
   24278 
   24279  For compatibility with existing code written for compiler versions that
   24280 did not implement attributes on nested declarators, some laxity is
   24281 allowed in the placing of attributes.  If an attribute that only applies
   24282 to types is applied to a declaration, it is treated as applying to the
   24283 type of that declaration.  If an attribute that only applies to
   24284 declarations is applied to the type of a declaration, it is treated as
   24285 applying to that declaration; and, for compatibility with code placing
   24286 the attributes immediately before the identifier declared, such an
   24287 attribute applied to a function return type is treated as applying to
   24288 the function type, and such an attribute applied to an array element
   24289 type is treated as applying to the array type.  If an attribute that
   24290 only applies to function types is applied to a pointer-to-function
   24291 type, it is treated as applying to the pointer target type; if such an
   24292 attribute is applied to a function return type that is not a
   24293 pointer-to-function type, it is treated as applying to the function
   24294 type.
   24295 
   24296 
   24297 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
   24298 
   24299 6.32 Prototypes and Old-Style Function Definitions
   24300 ==================================================
   24301 
   24302 GNU C extends ISO C to allow a function prototype to override a later
   24303 old-style non-prototype definition.  Consider the following example:
   24304 
   24305      /* Use prototypes unless the compiler is old-fashioned.  */
   24306      #ifdef __STDC__
   24307      #define P(x) x
   24308      #else
   24309      #define P(x) ()
   24310      #endif
   24311 
   24312      /* Prototype function declaration.  */
   24313      int isroot P((uid_t));
   24314 
   24315      /* Old-style function definition.  */
   24316      int
   24317      isroot (x)   /* ??? lossage here ??? */
   24318           uid_t x;
   24319      {
   24320        return x == 0;
   24321      }
   24322 
   24323  Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
   24324 this example, because subword arguments in old-style non-prototype
   24325 definitions are promoted.  Therefore in this example the function
   24326 definition's argument is really an `int', which does not match the
   24327 prototype argument type of `short'.
   24328 
   24329  This restriction of ISO C makes it hard to write code that is portable
   24330 to traditional C compilers, because the programmer does not know
   24331 whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
   24332 cases like these GNU C allows a prototype to override a later old-style
   24333 definition.  More precisely, in GNU C, a function prototype argument
   24334 type overrides the argument type specified by a later old-style
   24335 definition if the former type is the same as the latter type before
   24336 promotion.  Thus in GNU C the above example is equivalent to the
   24337 following:
   24338 
   24339      int isroot (uid_t);
   24340 
   24341      int
   24342      isroot (uid_t x)
   24343      {
   24344        return x == 0;
   24345      }
   24346 
   24347 GNU C++ does not support old-style function definitions, so this
   24348 extension is irrelevant.
   24349 
   24350 
   24351 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
   24352 
   24353 6.33 C++ Style Comments
   24354 =======================
   24355 
   24356 In GNU C, you may use C++ style comments, which start with `//' and
   24357 continue until the end of the line.  Many other C implementations allow
   24358 such comments, and they are included in the 1999 C standard.  However,
   24359 C++ style comments are not recognized if you specify an `-std' option
   24360 specifying a version of ISO C before C99, or `-ansi' (equivalent to
   24361 `-std=c90').
   24362 
   24363 
   24364 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
   24365 
   24366 6.34 Dollar Signs in Identifier Names
   24367 =====================================
   24368 
   24369 In GNU C, you may normally use dollar signs in identifier names.  This
   24370 is because many traditional C implementations allow such identifiers.
   24371 However, dollar signs in identifiers are not supported on a few target
   24372 machines, typically because the target assembler does not allow them.
   24373 
   24374 
   24375 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
   24376 
   24377 6.35 The Character <ESC> in Constants
   24378 =====================================
   24379 
   24380 You can use the sequence `\e' in a string or character constant to
   24381 stand for the ASCII character <ESC>.
   24382 
   24383 
   24384 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
   24385 
   24386 6.36 Specifying Attributes of Variables
   24387 =======================================
   24388 
   24389 The keyword `__attribute__' allows you to specify special attributes of
   24390 variables or structure fields.  This keyword is followed by an
   24391 attribute specification inside double parentheses.  Some attributes are
   24392 currently defined generically for variables.  Other attributes are
   24393 defined for variables on particular target systems.  Other attributes
   24394 are available for functions (*note Function Attributes::) and for types
   24395 (*note Type Attributes::).  Other front ends might define more
   24396 attributes (*note Extensions to the C++ Language: C++ Extensions.).
   24397 
   24398  You may also specify attributes with `__' preceding and following each
   24399 keyword.  This allows you to use them in header files without being
   24400 concerned about a possible macro of the same name.  For example, you
   24401 may use `__aligned__' instead of `aligned'.
   24402 
   24403  *Note Attribute Syntax::, for details of the exact syntax for using
   24404 attributes.
   24405 
   24406 `aligned (ALIGNMENT)'
   24407      This attribute specifies a minimum alignment for the variable or
   24408      structure field, measured in bytes.  For example, the declaration:
   24409 
   24410           int x __attribute__ ((aligned (16))) = 0;
   24411 
   24412      causes the compiler to allocate the global variable `x' on a
   24413      16-byte boundary.  On a 68040, this could be used in conjunction
   24414      with an `asm' expression to access the `move16' instruction which
   24415      requires 16-byte aligned operands.
   24416 
   24417      You can also specify the alignment of structure fields.  For
   24418      example, to create a double-word aligned `int' pair, you could
   24419      write:
   24420 
   24421           struct foo { int x[2] __attribute__ ((aligned (8))); };
   24422 
   24423      This is an alternative to creating a union with a `double' member,
   24424      which forces the union to be double-word aligned.
   24425 
   24426      As in the preceding examples, you can explicitly specify the
   24427      alignment (in bytes) that you wish the compiler to use for a given
   24428      variable or structure field.  Alternatively, you can leave out the
   24429      alignment factor and just ask the compiler to align a variable or
   24430      field to the default alignment for the target architecture you are
   24431      compiling for.  The default alignment is sufficient for all scalar
   24432      types, but may not be enough for all vector types on a target that
   24433      supports vector operations.  The default alignment is fixed for a
   24434      particular target ABI.
   24435 
   24436      GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__',
   24437      which is the largest alignment ever used for any data type on the
   24438      target machine you are compiling for.  For example, you could
   24439      write:
   24440 
   24441           short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
   24442 
   24443      The compiler automatically sets the alignment for the declared
   24444      variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
   24445      often make copy operations more efficient, because the compiler can
   24446      use whatever instructions copy the biggest chunks of memory when
   24447      performing copies to or from the variables or fields that you have
   24448      aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
   24449      may change depending on command-line options.
   24450 
   24451      When used on a struct, or struct member, the `aligned' attribute
   24452      can only increase the alignment; in order to decrease it, the
   24453      `packed' attribute must be specified as well.  When used as part
   24454      of a typedef, the `aligned' attribute can both increase and
   24455      decrease alignment, and specifying the `packed' attribute
   24456      generates a warning.
   24457 
   24458      Note that the effectiveness of `aligned' attributes may be limited
   24459      by inherent limitations in your linker.  On many systems, the
   24460      linker is only able to arrange for variables to be aligned up to a
   24461      certain maximum alignment.  (For some linkers, the maximum
   24462      supported alignment may be very very small.)  If your linker is
   24463      only able to align variables up to a maximum of 8-byte alignment,
   24464      then specifying `aligned(16)' in an `__attribute__' still only
   24465      provides you with 8-byte alignment.  See your linker documentation
   24466      for further information.
   24467 
   24468      The `aligned' attribute can also be used for functions (*note
   24469      Function Attributes::.)
   24470 
   24471 `cleanup (CLEANUP_FUNCTION)'
   24472      The `cleanup' attribute runs a function when the variable goes out
   24473      of scope.  This attribute can only be applied to auto function
   24474      scope variables; it may not be applied to parameters or variables
   24475      with static storage duration.  The function must take one
   24476      parameter, a pointer to a type compatible with the variable.  The
   24477      return value of the function (if any) is ignored.
   24478 
   24479      If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
   24480      the stack unwinding that happens during the processing of the
   24481      exception.  Note that the `cleanup' attribute does not allow the
   24482      exception to be caught, only to perform an action.  It is
   24483      undefined what happens if CLEANUP_FUNCTION does not return
   24484      normally.
   24485 
   24486 `common'
   24487 `nocommon'
   24488      The `common' attribute requests GCC to place a variable in
   24489      "common" storage.  The `nocommon' attribute requests the
   24490      opposite--to allocate space for it directly.
   24491 
   24492      These attributes override the default chosen by the `-fno-common'
   24493      and `-fcommon' flags respectively.
   24494 
   24495 `deprecated'
   24496 `deprecated (MSG)'
   24497      The `deprecated' attribute results in a warning if the variable is
   24498      used anywhere in the source file.  This is useful when identifying
   24499      variables that are expected to be removed in a future version of a
   24500      program.  The warning also includes the location of the declaration
   24501      of the deprecated variable, to enable users to easily find further
   24502      information about why the variable is deprecated, or what they
   24503      should do instead.  Note that the warning only occurs for uses:
   24504 
   24505           extern int old_var __attribute__ ((deprecated));
   24506           extern int old_var;
   24507           int new_fn () { return old_var; }
   24508 
   24509      results in a warning on line 3 but not line 2.  The optional MSG
   24510      argument, which must be a string, is printed in the warning if
   24511      present.
   24512 
   24513      The `deprecated' attribute can also be used for functions and
   24514      types (*note Function Attributes::, *note Type Attributes::.)
   24515 
   24516 `mode (MODE)'
   24517      This attribute specifies the data type for the
   24518      declaration--whichever type corresponds to the mode MODE.  This in
   24519      effect lets you request an integer or floating-point type
   24520      according to its width.
   24521 
   24522      You may also specify a mode of `byte' or `__byte__' to indicate
   24523      the mode corresponding to a one-byte integer, `word' or `__word__'
   24524      for the mode of a one-word integer, and `pointer' or `__pointer__'
   24525      for the mode used to represent pointers.
   24526 
   24527 `packed'
   24528      The `packed' attribute specifies that a variable or structure field
   24529      should have the smallest possible alignment--one byte for a
   24530      variable, and one bit for a field, unless you specify a larger
   24531      value with the `aligned' attribute.
   24532 
   24533      Here is a structure in which the field `x' is packed, so that it
   24534      immediately follows `a':
   24535 
   24536           struct foo
   24537           {
   24538             char a;
   24539             int x[2] __attribute__ ((packed));
   24540           };
   24541 
   24542      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
   24543      attribute on bit-fields of type `char'.  This has been fixed in
   24544      GCC 4.4 but the change can lead to differences in the structure
   24545      layout.  See the documentation of `-Wpacked-bitfield-compat' for
   24546      more information.
   24547 
   24548 `section ("SECTION-NAME")'
   24549      Normally, the compiler places the objects it generates in sections
   24550      like `data' and `bss'.  Sometimes, however, you need additional
   24551      sections, or you need certain particular variables to appear in
   24552      special sections, for example to map to special hardware.  The
   24553      `section' attribute specifies that a variable (or function) lives
   24554      in a particular section.  For example, this small program uses
   24555      several specific section names:
   24556 
   24557           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
   24558           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
   24559           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
   24560           int init_data __attribute__ ((section ("INITDATA")));
   24561 
   24562           main()
   24563           {
   24564             /* Initialize stack pointer */
   24565             init_sp (stack + sizeof (stack));
   24566 
   24567             /* Initialize initialized data */
   24568             memcpy (&init_data, &data, &edata - &data);
   24569 
   24570             /* Turn on the serial ports */
   24571             init_duart (&a);
   24572             init_duart (&b);
   24573           }
   24574 
   24575      Use the `section' attribute with _global_ variables and not
   24576      _local_ variables, as shown in the example.
   24577 
   24578      You may use the `section' attribute with initialized or
   24579      uninitialized global variables but the linker requires each object
   24580      be defined once, with the exception that uninitialized variables
   24581      tentatively go in the `common' (or `bss') section and can be
   24582      multiply "defined".  Using the `section' attribute changes what
   24583      section the variable goes into and may cause the linker to issue
   24584      an error if an uninitialized variable has multiple definitions.
   24585      You can force a variable to be initialized with the `-fno-common'
   24586      flag or the `nocommon' attribute.
   24587 
   24588      Some file formats do not support arbitrary sections so the
   24589      `section' attribute is not available on all platforms.  If you
   24590      need to map the entire contents of a module to a particular
   24591      section, consider using the facilities of the linker instead.
   24592 
   24593 `shared'
   24594      On Microsoft Windows, in addition to putting variable definitions
   24595      in a named section, the section can also be shared among all
   24596      running copies of an executable or DLL.  For example, this small
   24597      program defines shared data by putting it in a named section
   24598      `shared' and marking the section shareable:
   24599 
   24600           int foo __attribute__((section ("shared"), shared)) = 0;
   24601 
   24602           int
   24603           main()
   24604           {
   24605             /* Read and write foo.  All running
   24606                copies see the same value.  */
   24607             return 0;
   24608           }
   24609 
   24610      You may only use the `shared' attribute along with `section'
   24611      attribute with a fully-initialized global definition because of
   24612      the way linkers work.  See `section' attribute for more
   24613      information.
   24614 
   24615      The `shared' attribute is only available on Microsoft Windows.
   24616 
   24617 `tls_model ("TLS_MODEL")'
   24618      The `tls_model' attribute sets thread-local storage model (*note
   24619      Thread-Local::) of a particular `__thread' variable, overriding
   24620      `-ftls-model=' command-line switch on a per-variable basis.  The
   24621      TLS_MODEL argument should be one of `global-dynamic',
   24622      `local-dynamic', `initial-exec' or `local-exec'.
   24623 
   24624      Not all targets support this attribute.
   24625 
   24626 `unused'
   24627      This attribute, attached to a variable, means that the variable is
   24628      meant to be possibly unused.  GCC does not produce a warning for
   24629      this variable.
   24630 
   24631 `used'
   24632      This attribute, attached to a variable, means that the variable
   24633      must be emitted even if it appears that the variable is not
   24634      referenced.
   24635 
   24636      When applied to a static data member of a C++ class template, the
   24637      attribute also means that the member is instantiated if the class
   24638      itself is instantiated.
   24639 
   24640 `vector_size (BYTES)'
   24641      This attribute specifies the vector size for the variable,
   24642      measured in bytes.  For example, the declaration:
   24643 
   24644           int foo __attribute__ ((vector_size (16)));
   24645 
   24646      causes the compiler to set the mode for `foo', to be 16 bytes,
   24647      divided into `int' sized units.  Assuming a 32-bit int (a vector of
   24648      4 units of 4 bytes), the corresponding mode of `foo' is V4SI.
   24649 
   24650      This attribute is only applicable to integral and float scalars,
   24651      although arrays, pointers, and function return values are allowed
   24652      in conjunction with this construct.
   24653 
   24654      Aggregates with this attribute are invalid, even if they are of
   24655      the same size as a corresponding scalar.  For example, the
   24656      declaration:
   24657 
   24658           struct S { int a; };
   24659           struct S  __attribute__ ((vector_size (16))) foo;
   24660 
   24661      is invalid even if the size of the structure is the same as the
   24662      size of the `int'.
   24663 
   24664 `selectany'
   24665      The `selectany' attribute causes an initialized global variable to
   24666      have link-once semantics.  When multiple definitions of the
   24667      variable are encountered by the linker, the first is selected and
   24668      the remainder are discarded.  Following usage by the Microsoft
   24669      compiler, the linker is told _not_ to warn about size or content
   24670      differences of the multiple definitions.
   24671 
   24672      Although the primary usage of this attribute is for POD types, the
   24673      attribute can also be applied to global C++ objects that are
   24674      initialized by a constructor.  In this case, the static
   24675      initialization and destruction code for the object is emitted in
   24676      each translation defining the object, but the calls to the
   24677      constructor and destructor are protected by a link-once guard
   24678      variable.
   24679 
   24680      The `selectany' attribute is only available on Microsoft Windows
   24681      targets.  You can use `__declspec (selectany)' as a synonym for
   24682      `__attribute__ ((selectany))' for compatibility with other
   24683      compilers.
   24684 
   24685 `weak'
   24686      The `weak' attribute is described in *note Function Attributes::.
   24687 
   24688 `dllimport'
   24689      The `dllimport' attribute is described in *note Function
   24690      Attributes::.
   24691 
   24692 `dllexport'
   24693      The `dllexport' attribute is described in *note Function
   24694      Attributes::.
   24695 
   24696 
   24697 6.36.1 AVR Variable Attributes
   24698 ------------------------------
   24699 
   24700 `progmem'
   24701      The `progmem' attribute is used on the AVR to place read-only data
   24702      in the non-volatile program memory (flash). The `progmem'
   24703      attribute accomplishes this by putting respective variables into a
   24704      section whose name starts with `.progmem'.
   24705 
   24706      This attribute works similar to the `section' attribute but adds
   24707      additional checking. Notice that just like the `section'
   24708      attribute, `progmem' affects the location of the data but not how
   24709      this data is accessed.
   24710 
   24711      In order to read data located with the `progmem' attribute
   24712      (inline) assembler must be used.
   24713           /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
   24714           #include <avr/pgmspace.h>
   24715 
   24716           /* Locate var in flash memory */
   24717           const int var[2] PROGMEM = { 1, 2 };
   24718 
   24719           int read_var (int i)
   24720           {
   24721               /* Access var[] by accessor macro from avr/pgmspace.h */
   24722               return (int) pgm_read_word (& var[i]);
   24723           }
   24724 
   24725      AVR is a Harvard architecture processor and data and read-only data
   24726      normally resides in the data memory (RAM).
   24727 
   24728      See also the *note AVR Named Address Spaces:: section for an
   24729      alternate way to locate and access data in flash memory.
   24730 
   24731 6.36.2 Blackfin Variable Attributes
   24732 -----------------------------------
   24733 
   24734 Three attributes are currently defined for the Blackfin.
   24735 
   24736 `l1_data'
   24737 `l1_data_A'
   24738 `l1_data_B'
   24739      Use these attributes on the Blackfin to place the variable into L1
   24740      Data SRAM.  Variables with `l1_data' attribute are put into the
   24741      specific section named `.l1.data'. Those with `l1_data_A'
   24742      attribute are put into the specific section named `.l1.data.A'.
   24743      Those with `l1_data_B' attribute are put into the specific section
   24744      named `.l1.data.B'.
   24745 
   24746 `l2'
   24747      Use this attribute on the Blackfin to place the variable into L2
   24748      SRAM.  Variables with `l2' attribute are put into the specific
   24749      section named `.l2.data'.
   24750 
   24751 6.36.3 M32R/D Variable Attributes
   24752 ---------------------------------
   24753 
   24754 One attribute is currently defined for the M32R/D.
   24755 
   24756 `model (MODEL-NAME)'
   24757      Use this attribute on the M32R/D to set the addressability of an
   24758      object.  The identifier MODEL-NAME is one of `small', `medium', or
   24759      `large', representing each of the code models.
   24760 
   24761      Small model objects live in the lower 16MB of memory (so that their
   24762      addresses can be loaded with the `ld24' instruction).
   24763 
   24764      Medium and large model objects may live anywhere in the 32-bit
   24765      address space (the compiler generates `seth/add3' instructions to
   24766      load their addresses).
   24767 
   24768 6.36.4 MeP Variable Attributes
   24769 ------------------------------
   24770 
   24771 The MeP target has a number of addressing modes and busses.  The `near'
   24772 space spans the standard memory space's first 16 megabytes (24 bits).
   24773 The `far' space spans the entire 32-bit memory space.  The `based'
   24774 space is a 128-byte region in the memory space that is addressed
   24775 relative to the `$tp' register.  The `tiny' space is a 65536-byte
   24776 region relative to the `$gp' register.  In addition to these memory
   24777 regions, the MeP target has a separate 16-bit control bus which is
   24778 specified with `cb' attributes.
   24779 
   24780 `based'
   24781      Any variable with the `based' attribute is assigned to the
   24782      `.based' section, and is accessed with relative to the `$tp'
   24783      register.
   24784 
   24785 `tiny'
   24786      Likewise, the `tiny' attribute assigned variables to the `.tiny'
   24787      section, relative to the `$gp' register.
   24788 
   24789 `near'
   24790      Variables with the `near' attribute are assumed to have addresses
   24791      that fit in a 24-bit addressing mode.  This is the default for
   24792      large variables (`-mtiny=4' is the default) but this attribute can
   24793      override `-mtiny=' for small variables, or override `-ml'.
   24794 
   24795 `far'
   24796      Variables with the `far' attribute are addressed using a full
   24797      32-bit address.  Since this covers the entire memory space, this
   24798      allows modules to make no assumptions about where variables might
   24799      be stored.
   24800 
   24801 `io'
   24802 `io (ADDR)'
   24803      Variables with the `io' attribute are used to address
   24804      memory-mapped peripherals.  If an address is specified, the
   24805      variable is assigned that address, else it is not assigned an
   24806      address (it is assumed some other module assigns an address).
   24807      Example:
   24808 
   24809           int timer_count __attribute__((io(0x123)));
   24810 
   24811 `cb'
   24812 `cb (ADDR)'
   24813      Variables with the `cb' attribute are used to access the control
   24814      bus, using special instructions.  `addr' indicates the control bus
   24815      address.  Example:
   24816 
   24817           int cpu_clock __attribute__((cb(0x123)));
   24818 
   24819 
   24820 6.36.5 i386 Variable Attributes
   24821 -------------------------------
   24822 
   24823 Two attributes are currently defined for i386 configurations:
   24824 `ms_struct' and `gcc_struct'
   24825 
   24826 `ms_struct'
   24827 `gcc_struct'
   24828      If `packed' is used on a structure, or if bit-fields are used, it
   24829      may be that the Microsoft ABI lays out the structure differently
   24830      than the way GCC normally does.  Particularly when moving packed
   24831      data between functions compiled with GCC and the native Microsoft
   24832      compiler (either via function call or as data in a file), it may
   24833      be necessary to access either format.
   24834 
   24835      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
   24836      Windows X86 compilers to match the native Microsoft compiler.
   24837 
   24838      The Microsoft structure layout algorithm is fairly simple with the
   24839      exception of the bit-field packing.  The padding and alignment of
   24840      members of structures and whether a bit-field can straddle a
   24841      storage-unit boundary are determine by these rules:
   24842 
   24843        1. Structure members are stored sequentially in the order in
   24844           which they are declared: the first member has the lowest
   24845           memory address and the last member the highest.
   24846 
   24847        2. Every data object has an alignment requirement.  The
   24848           alignment requirement for all data except structures, unions,
   24849           and arrays is either the size of the object or the current
   24850           packing size (specified with either the `aligned' attribute
   24851           or the `pack' pragma), whichever is less.  For structures,
   24852           unions, and arrays, the alignment requirement is the largest
   24853           alignment requirement of its members.  Every object is
   24854           allocated an offset so that:
   24855 
   24856                offset % alignment_requirement == 0
   24857 
   24858        3. Adjacent bit-fields are packed into the same 1-, 2-, or
   24859           4-byte allocation unit if the integral types are the same
   24860           size and if the next bit-field fits into the current
   24861           allocation unit without crossing the boundary imposed by the
   24862           common alignment requirements of the bit-fields.
   24863 
   24864      MSVC interprets zero-length bit-fields in the following ways:
   24865 
   24866        1. If a zero-length bit-field is inserted between two bit-fields
   24867           that are normally coalesced, the bit-fields are not coalesced.
   24868 
   24869           For example:
   24870 
   24871                struct
   24872                 {
   24873                   unsigned long bf_1 : 12;
   24874                   unsigned long : 0;
   24875                   unsigned long bf_2 : 12;
   24876                 } t1;
   24877 
   24878           The size of `t1' is 8 bytes with the zero-length bit-field.
   24879           If the zero-length bit-field were removed, `t1''s size would
   24880           be 4 bytes.
   24881 
   24882        2. If a zero-length bit-field is inserted after a bit-field,
   24883           `foo', and the alignment of the zero-length bit-field is
   24884           greater than the member that follows it, `bar', `bar' is
   24885           aligned as the type of the zero-length bit-field.
   24886 
   24887           For example:
   24888 
   24889                struct
   24890                 {
   24891                   char foo : 4;
   24892                   short : 0;
   24893                   char bar;
   24894                 } t2;
   24895 
   24896                struct
   24897                 {
   24898                   char foo : 4;
   24899                   short : 0;
   24900                   double bar;
   24901                 } t3;
   24902 
   24903           For `t2', `bar' is placed at offset 2, rather than offset 1.
   24904           Accordingly, the size of `t2' is 4.  For `t3', the zero-length
   24905           bit-field does not affect the alignment of `bar' or, as a
   24906           result, the size of the structure.
   24907 
   24908           Taking this into account, it is important to note the
   24909           following:
   24910 
   24911             1. If a zero-length bit-field follows a normal bit-field,
   24912                the type of the zero-length bit-field may affect the
   24913                alignment of the structure as whole. For example, `t2'
   24914                has a size of 4 bytes, since the zero-length bit-field
   24915                follows a normal bit-field, and is of type short.
   24916 
   24917             2. Even if a zero-length bit-field is not followed by a
   24918                normal bit-field, it may still affect the alignment of
   24919                the structure:
   24920 
   24921                     struct
   24922                      {
   24923                        char foo : 6;
   24924                        long : 0;
   24925                      } t4;
   24926 
   24927                Here, `t4' takes up 4 bytes.
   24928 
   24929        3. Zero-length bit-fields following non-bit-field members are
   24930           ignored:
   24931 
   24932                struct
   24933                 {
   24934                   char foo;
   24935                   long : 0;
   24936                   char bar;
   24937                 } t5;
   24938 
   24939           Here, `t5' takes up 2 bytes.
   24940 
   24941 6.36.6 PowerPC Variable Attributes
   24942 ----------------------------------
   24943 
   24944 Three attributes currently are defined for PowerPC configurations:
   24945 `altivec', `ms_struct' and `gcc_struct'.
   24946 
   24947  For full documentation of the struct attributes please see the
   24948 documentation in *note i386 Variable Attributes::.
   24949 
   24950  For documentation of `altivec' attribute please see the documentation
   24951 in *note PowerPC Type Attributes::.
   24952 
   24953 6.36.7 SPU Variable Attributes
   24954 ------------------------------
   24955 
   24956 The SPU supports the `spu_vector' attribute for variables.  For
   24957 documentation of this attribute please see the documentation in *note
   24958 SPU Type Attributes::.
   24959 
   24960 6.36.8 Xstormy16 Variable Attributes
   24961 ------------------------------------
   24962 
   24963 One attribute is currently defined for xstormy16 configurations:
   24964 `below100'.
   24965 
   24966 `below100'
   24967      If a variable has the `below100' attribute (`BELOW100' is allowed
   24968      also), GCC places the variable in the first 0x100 bytes of memory
   24969      and use special opcodes to access it.  Such variables are placed
   24970      in either the `.bss_below100' section or the `.data_below100'
   24971      section.
   24972 
   24973 
   24974 
   24975 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
   24976 
   24977 6.37 Specifying Attributes of Types
   24978 ===================================
   24979 
   24980 The keyword `__attribute__' allows you to specify special attributes of
   24981 `struct' and `union' types when you define such types.  This keyword is
   24982 followed by an attribute specification inside double parentheses.
   24983 Seven attributes are currently defined for types: `aligned', `packed',
   24984 `transparent_union', `unused', `deprecated', `visibility', and
   24985 `may_alias'.  Other attributes are defined for functions (*note
   24986 Function Attributes::) and for variables (*note Variable Attributes::).
   24987 
   24988  You may also specify any one of these attributes with `__' preceding
   24989 and following its keyword.  This allows you to use these attributes in
   24990 header files without being concerned about a possible macro of the same
   24991 name.  For example, you may use `__aligned__' instead of `aligned'.
   24992 
   24993  You may specify type attributes in an enum, struct or union type
   24994 declaration or definition, or for other types in a `typedef'
   24995 declaration.
   24996 
   24997  For an enum, struct or union type, you may specify attributes either
   24998 between the enum, struct or union tag and the name of the type, or just
   24999 past the closing curly brace of the _definition_.  The former syntax is
   25000 preferred.
   25001 
   25002  *Note Attribute Syntax::, for details of the exact syntax for using
   25003 attributes.
   25004 
   25005 `aligned (ALIGNMENT)'
   25006      This attribute specifies a minimum alignment (in bytes) for
   25007      variables of the specified type.  For example, the declarations:
   25008 
   25009           struct S { short f[3]; } __attribute__ ((aligned (8)));
   25010           typedef int more_aligned_int __attribute__ ((aligned (8)));
   25011 
   25012      force the compiler to ensure (as far as it can) that each variable
   25013      whose type is `struct S' or `more_aligned_int' is allocated and
   25014      aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
   25015      variables of type `struct S' aligned to 8-byte boundaries allows
   25016      the compiler to use the `ldd' and `std' (doubleword load and
   25017      store) instructions when copying one variable of type `struct S' to
   25018      another, thus improving run-time efficiency.
   25019 
   25020      Note that the alignment of any given `struct' or `union' type is
   25021      required by the ISO C standard to be at least a perfect multiple of
   25022      the lowest common multiple of the alignments of all of the members
   25023      of the `struct' or `union' in question.  This means that you _can_
   25024      effectively adjust the alignment of a `struct' or `union' type by
   25025      attaching an `aligned' attribute to any one of the members of such
   25026      a type, but the notation illustrated in the example above is a
   25027      more obvious, intuitive, and readable way to request the compiler
   25028      to adjust the alignment of an entire `struct' or `union' type.
   25029 
   25030      As in the preceding example, you can explicitly specify the
   25031      alignment (in bytes) that you wish the compiler to use for a given
   25032      `struct' or `union' type.  Alternatively, you can leave out the
   25033      alignment factor and just ask the compiler to align a type to the
   25034      maximum useful alignment for the target machine you are compiling
   25035      for.  For example, you could write:
   25036 
   25037           struct S { short f[3]; } __attribute__ ((aligned));
   25038 
   25039      Whenever you leave out the alignment factor in an `aligned'
   25040      attribute specification, the compiler automatically sets the
   25041      alignment for the type to the largest alignment that is ever used
   25042      for any data type on the target machine you are compiling for.
   25043      Doing this can often make copy operations more efficient, because
   25044      the compiler can use whatever instructions copy the biggest chunks
   25045      of memory when performing copies to or from the variables that
   25046      have types that you have aligned this way.
   25047 
   25048      In the example above, if the size of each `short' is 2 bytes, then
   25049      the size of the entire `struct S' type is 6 bytes.  The smallest
   25050      power of two that is greater than or equal to that is 8, so the
   25051      compiler sets the alignment for the entire `struct S' type to 8
   25052      bytes.
   25053 
   25054      Note that although you can ask the compiler to select a
   25055      time-efficient alignment for a given type and then declare only
   25056      individual stand-alone objects of that type, the compiler's
   25057      ability to select a time-efficient alignment is primarily useful
   25058      only when you plan to create arrays of variables having the
   25059      relevant (efficiently aligned) type.  If you declare or use arrays
   25060      of variables of an efficiently-aligned type, then it is likely
   25061      that your program also does pointer arithmetic (or subscripting,
   25062      which amounts to the same thing) on pointers to the relevant type,
   25063      and the code that the compiler generates for these pointer
   25064      arithmetic operations is often more efficient for
   25065      efficiently-aligned types than for other types.
   25066 
   25067      The `aligned' attribute can only increase the alignment; but you
   25068      can decrease it by specifying `packed' as well.  See below.
   25069 
   25070      Note that the effectiveness of `aligned' attributes may be limited
   25071      by inherent limitations in your linker.  On many systems, the
   25072      linker is only able to arrange for variables to be aligned up to a
   25073      certain maximum alignment.  (For some linkers, the maximum
   25074      supported alignment may be very very small.)  If your linker is
   25075      only able to align variables up to a maximum of 8-byte alignment,
   25076      then specifying `aligned(16)' in an `__attribute__' still only
   25077      provides you with 8-byte alignment.  See your linker documentation
   25078      for further information.
   25079 
   25080 `packed'
   25081      This attribute, attached to `struct' or `union' type definition,
   25082      specifies that each member (other than zero-width bit-fields) of
   25083      the structure or union is placed to minimize the memory required.
   25084      When attached to an `enum' definition, it indicates that the
   25085      smallest integral type should be used.
   25086 
   25087      Specifying this attribute for `struct' and `union' types is
   25088      equivalent to specifying the `packed' attribute on each of the
   25089      structure or union members.  Specifying the `-fshort-enums' flag
   25090      on the line is equivalent to specifying the `packed' attribute on
   25091      all `enum' definitions.
   25092 
   25093      In the following example `struct my_packed_struct''s members are
   25094      packed closely together, but the internal layout of its `s' member
   25095      is not packed--to do that, `struct my_unpacked_struct' needs to be
   25096      packed too.
   25097 
   25098           struct my_unpacked_struct
   25099            {
   25100               char c;
   25101               int i;
   25102            };
   25103 
   25104           struct __attribute__ ((__packed__)) my_packed_struct
   25105             {
   25106                char c;
   25107                int  i;
   25108                struct my_unpacked_struct s;
   25109             };
   25110 
   25111      You may only specify this attribute on the definition of an `enum',
   25112      `struct' or `union', not on a `typedef' that does not also define
   25113      the enumerated type, structure or union.
   25114 
   25115 `transparent_union'
   25116      This attribute, attached to a `union' type definition, indicates
   25117      that any function parameter having that union type causes calls to
   25118      that function to be treated in a special way.
   25119 
   25120      First, the argument corresponding to a transparent union type can
   25121      be of any type in the union; no cast is required.  Also, if the
   25122      union contains a pointer type, the corresponding argument can be a
   25123      null pointer constant or a void pointer expression; and if the
   25124      union contains a void pointer type, the corresponding argument can
   25125      be any pointer expression.  If the union member type is a pointer,
   25126      qualifiers like `const' on the referenced type must be respected,
   25127      just as with normal pointer conversions.
   25128 
   25129      Second, the argument is passed to the function using the calling
   25130      conventions of the first member of the transparent union, not the
   25131      calling conventions of the union itself.  All members of the union
   25132      must have the same machine representation; this is necessary for
   25133      this argument passing to work properly.
   25134 
   25135      Transparent unions are designed for library functions that have
   25136      multiple interfaces for compatibility reasons.  For example,
   25137      suppose the `wait' function must accept either a value of type
   25138      `int *' to comply with POSIX, or a value of type `union wait *' to
   25139      comply with the 4.1BSD interface.  If `wait''s parameter were
   25140      `void *', `wait' would accept both kinds of arguments, but it
   25141      would also accept any other pointer type and this would make
   25142      argument type checking less useful.  Instead, `<sys/wait.h>' might
   25143      define the interface as follows:
   25144 
   25145           typedef union __attribute__ ((__transparent_union__))
   25146             {
   25147               int *__ip;
   25148               union wait *__up;
   25149             } wait_status_ptr_t;
   25150 
   25151           pid_t wait (wait_status_ptr_t);
   25152 
   25153      This interface allows either `int *' or `union wait *' arguments
   25154      to be passed, using the `int *' calling convention.  The program
   25155      can call `wait' with arguments of either type:
   25156 
   25157           int w1 () { int w; return wait (&w); }
   25158           int w2 () { union wait w; return wait (&w); }
   25159 
   25160      With this interface, `wait''s implementation might look like this:
   25161 
   25162           pid_t wait (wait_status_ptr_t p)
   25163           {
   25164             return waitpid (-1, p.__ip, 0);
   25165           }
   25166 
   25167 `unused'
   25168      When attached to a type (including a `union' or a `struct'), this
   25169      attribute means that variables of that type are meant to appear
   25170      possibly unused.  GCC does not produce a warning for any variables
   25171      of that type, even if the variable appears to do nothing.  This is
   25172      often the case with lock or thread classes, which are usually
   25173      defined and then not referenced, but contain constructors and
   25174      destructors that have nontrivial bookkeeping functions.
   25175 
   25176 `deprecated'
   25177 `deprecated (MSG)'
   25178      The `deprecated' attribute results in a warning if the type is
   25179      used anywhere in the source file.  This is useful when identifying
   25180      types that are expected to be removed in a future version of a
   25181      program.  If possible, the warning also includes the location of
   25182      the declaration of the deprecated type, to enable users to easily
   25183      find further information about why the type is deprecated, or what
   25184      they should do instead.  Note that the warnings only occur for
   25185      uses and then only if the type is being applied to an identifier
   25186      that itself is not being declared as deprecated.
   25187 
   25188           typedef int T1 __attribute__ ((deprecated));
   25189           T1 x;
   25190           typedef T1 T2;
   25191           T2 y;
   25192           typedef T1 T3 __attribute__ ((deprecated));
   25193           T3 z __attribute__ ((deprecated));
   25194 
   25195      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
   25196      warning is issued for line 4 because T2 is not explicitly
   25197      deprecated.  Line 5 has no warning because T3 is explicitly
   25198      deprecated.  Similarly for line 6.  The optional MSG argument,
   25199      which must be a string, is printed in the warning if present.
   25200 
   25201      The `deprecated' attribute can also be used for functions and
   25202      variables (*note Function Attributes::, *note Variable
   25203      Attributes::.)
   25204 
   25205 `may_alias'
   25206      Accesses through pointers to types with this attribute are not
   25207      subject to type-based alias analysis, but are instead assumed to
   25208      be able to alias any other type of objects.  In the context of
   25209      section 6.5 paragraph 7 of the C99 standard, an lvalue expression
   25210      dereferencing such a pointer is treated like having a character
   25211      type.  See `-fstrict-aliasing' for more information on aliasing
   25212      issues.  This extension exists to support some vector APIs, in
   25213      which pointers to one vector type are permitted to alias pointers
   25214      to a different vector type.
   25215 
   25216      Note that an object of a type with this attribute does not have any
   25217      special semantics.
   25218 
   25219      Example of use:
   25220 
   25221           typedef short __attribute__((__may_alias__)) short_a;
   25222 
   25223           int
   25224           main (void)
   25225           {
   25226             int a = 0x12345678;
   25227             short_a *b = (short_a *) &a;
   25228 
   25229             b[1] = 0;
   25230 
   25231             if (a == 0x12345678)
   25232               abort();
   25233 
   25234             exit(0);
   25235           }
   25236 
   25237      If you replaced `short_a' with `short' in the variable
   25238      declaration, the above program would abort when compiled with
   25239      `-fstrict-aliasing', which is on by default at `-O2' or above in
   25240      recent GCC versions.
   25241 
   25242 `visibility'
   25243      In C++, attribute visibility (*note Function Attributes::) can
   25244      also be applied to class, struct, union and enum types.  Unlike
   25245      other type attributes, the attribute must appear between the
   25246      initial keyword and the name of the type; it cannot appear after
   25247      the body of the type.
   25248 
   25249      Note that the type visibility is applied to vague linkage entities
   25250      associated with the class (vtable, typeinfo node, etc.).  In
   25251      particular, if a class is thrown as an exception in one shared
   25252      object and caught in another, the class must have default
   25253      visibility.  Otherwise the two shared objects are unable to use
   25254      the same typeinfo node and exception handling will break.
   25255 
   25256 
   25257  To specify multiple attributes, separate them by commas within the
   25258 double parentheses: for example, `__attribute__ ((aligned (16),
   25259 packed))'.
   25260 
   25261 6.37.1 ARM Type Attributes
   25262 --------------------------
   25263 
   25264 On those ARM targets that support `dllimport' (such as Symbian OS), you
   25265 can use the `notshared' attribute to indicate that the virtual table
   25266 and other similar data for a class should not be exported from a DLL.
   25267 For example:
   25268 
   25269      class __declspec(notshared) C {
   25270      public:
   25271        __declspec(dllimport) C();
   25272        virtual void f();
   25273      }
   25274 
   25275      __declspec(dllexport)
   25276      C::C() {}
   25277 
   25278 In this code, `C::C' is exported from the current DLL, but the virtual
   25279 table for `C' is not exported.  (You can use `__attribute__' instead of
   25280 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
   25281 
   25282 6.37.2 MeP Type Attributes
   25283 --------------------------
   25284 
   25285 Many of the MeP variable attributes may be applied to types as well.
   25286 Specifically, the `based', `tiny', `near', and `far' attributes may be
   25287 applied to either.  The `io' and `cb' attributes may not be applied to
   25288 types.
   25289 
   25290 6.37.3 i386 Type Attributes
   25291 ---------------------------
   25292 
   25293 Two attributes are currently defined for i386 configurations:
   25294 `ms_struct' and `gcc_struct'.
   25295 
   25296 `ms_struct'
   25297 `gcc_struct'
   25298      If `packed' is used on a structure, or if bit-fields are used it
   25299      may be that the Microsoft ABI packs them differently than GCC
   25300      normally packs them.  Particularly when moving packed data between
   25301      functions compiled with GCC and the native Microsoft compiler
   25302      (either via function call or as data in a file), it may be
   25303      necessary to access either format.
   25304 
   25305      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
   25306      Windows X86 compilers to match the native Microsoft compiler.
   25307 
   25308 6.37.4 PowerPC Type Attributes
   25309 ------------------------------
   25310 
   25311 Three attributes currently are defined for PowerPC configurations:
   25312 `altivec', `ms_struct' and `gcc_struct'.
   25313 
   25314  For full documentation of the `ms_struct' and `gcc_struct' attributes
   25315 please see the documentation in *note i386 Type Attributes::.
   25316 
   25317  The `altivec' attribute allows one to declare AltiVec vector data
   25318 types supported by the AltiVec Programming Interface Manual.  The
   25319 attribute requires an argument to specify one of three vector types:
   25320 `vector__', `pixel__' (always followed by unsigned short), and `bool__'
   25321 (always followed by unsigned).
   25322 
   25323      __attribute__((altivec(vector__)))
   25324      __attribute__((altivec(pixel__))) unsigned short
   25325      __attribute__((altivec(bool__))) unsigned
   25326 
   25327  These attributes mainly are intended to support the `__vector',
   25328 `__pixel', and `__bool' AltiVec keywords.
   25329 
   25330 6.37.5 SPU Type Attributes
   25331 --------------------------
   25332 
   25333 The SPU supports the `spu_vector' attribute for types.  This attribute
   25334 allows one to declare vector data types supported by the
   25335 Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
   25336 to support the `__vector' keyword.
   25337 
   25338 
   25339 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
   25340 
   25341 6.38 Inquiring on Alignment of Types or Variables
   25342 =================================================
   25343 
   25344 The keyword `__alignof__' allows you to inquire about how an object is
   25345 aligned, or the minimum alignment usually required by a type.  Its
   25346 syntax is just like `sizeof'.
   25347 
   25348  For example, if the target machine requires a `double' value to be
   25349 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
   25350 is true on many RISC machines.  On more traditional machine designs,
   25351 `__alignof__ (double)' is 4 or even 2.
   25352 
   25353  Some machines never actually require alignment; they allow reference
   25354 to any data type even at an odd address.  For these machines,
   25355 `__alignof__' reports the smallest alignment that GCC gives the data
   25356 type, usually as mandated by the target ABI.
   25357 
   25358  If the operand of `__alignof__' is an lvalue rather than a type, its
   25359 value is the required alignment for its type, taking into account any
   25360 minimum alignment specified with GCC's `__attribute__' extension (*note
   25361 Variable Attributes::).  For example, after this declaration:
   25362 
   25363      struct foo { int x; char y; } foo1;
   25364 
   25365 the value of `__alignof__ (foo1.y)' is 1, even though its actual
   25366 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
   25367 
   25368  It is an error to ask for the alignment of an incomplete type.
   25369 
   25370 
   25371 File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
   25372 
   25373 6.39 An Inline Function is As Fast As a Macro
   25374 =============================================
   25375 
   25376 By declaring a function inline, you can direct GCC to make calls to
   25377 that function faster.  One way GCC can achieve this is to integrate
   25378 that function's code into the code for its callers.  This makes
   25379 execution faster by eliminating the function-call overhead; in
   25380 addition, if any of the actual argument values are constant, their
   25381 known values may permit simplifications at compile time so that not all
   25382 of the inline function's code needs to be included.  The effect on code
   25383 size is less predictable; object code may be larger or smaller with
   25384 function inlining, depending on the particular case.  You can also
   25385 direct GCC to try to integrate all "simple enough" functions into their
   25386 callers with the option `-finline-functions'.
   25387 
   25388  GCC implements three different semantics of declaring a function
   25389 inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
   25390 `gnu_inline' attribute is present on all inline declarations, another
   25391 when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without
   25392 `-fgnu89-inline'), and the third is used when compiling C++.
   25393 
   25394  To declare a function inline, use the `inline' keyword in its
   25395 declaration, like this:
   25396 
   25397      static inline int
   25398      inc (int *a)
   25399      {
   25400        return (*a)++;
   25401      }
   25402 
   25403  If you are writing a header file to be included in ISO C90 programs,
   25404 write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
   25405 
   25406  The three types of inlining behave similarly in two important cases:
   25407 when the `inline' keyword is used on a `static' function, like the
   25408 example above, and when a function is first declared without using the
   25409 `inline' keyword and then is defined with `inline', like this:
   25410 
   25411      extern int inc (int *a);
   25412      inline int
   25413      inc (int *a)
   25414      {
   25415        return (*a)++;
   25416      }
   25417 
   25418  In both of these common cases, the program behaves the same as if you
   25419 had not used the `inline' keyword, except for its speed.
   25420 
   25421  When a function is both inline and `static', if all calls to the
   25422 function are integrated into the caller, and the function's address is
   25423 never used, then the function's own assembler code is never referenced.
   25424 In this case, GCC does not actually output assembler code for the
   25425 function, unless you specify the option `-fkeep-inline-functions'.
   25426 Some calls cannot be integrated for various reasons (in particular,
   25427 calls that precede the function's definition cannot be integrated, and
   25428 neither can recursive calls within the definition).  If there is a
   25429 nonintegrated call, then the function is compiled to assembler code as
   25430 usual.  The function must also be compiled as usual if the program
   25431 refers to its address, because that can't be inlined.
   25432 
   25433  Note that certain usages in a function definition can make it
   25434 unsuitable for inline substitution.  Among these usages are: variadic
   25435 functions, use of `alloca', use of variable-length data types (*note
   25436 Variable Length::), use of computed goto (*note Labels as Values::),
   25437 use of nonlocal goto, and nested functions (*note Nested Functions::).
   25438 Using `-Winline' warns when a function marked `inline' could not be
   25439 substituted, and gives the reason for the failure.
   25440 
   25441  As required by ISO C++, GCC considers member functions defined within
   25442 the body of a class to be marked inline even if they are not explicitly
   25443 declared with the `inline' keyword.  You can override this with
   25444 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++
   25445 Dialect Options.
   25446 
   25447  GCC does not inline any functions when not optimizing unless you
   25448 specify the `always_inline' attribute for the function, like this:
   25449 
   25450      /* Prototype.  */
   25451      inline void foo (const char) __attribute__((always_inline));
   25452 
   25453  The remainder of this section is specific to GNU C90 inlining.
   25454 
   25455  When an inline function is not `static', then the compiler must assume
   25456 that there may be calls from other source files; since a global symbol
   25457 can be defined only once in any program, the function must not be
   25458 defined in the other source files, so the calls therein cannot be
   25459 integrated.  Therefore, a non-`static' inline function is always
   25460 compiled on its own in the usual fashion.
   25461 
   25462  If you specify both `inline' and `extern' in the function definition,
   25463 then the definition is used only for inlining.  In no case is the
   25464 function compiled on its own, not even if you refer to its address
   25465 explicitly.  Such an address becomes an external reference, as if you
   25466 had only declared the function, and had not defined it.
   25467 
   25468  This combination of `inline' and `extern' has almost the effect of a
   25469 macro.  The way to use it is to put a function definition in a header
   25470 file with these keywords, and put another copy of the definition
   25471 (lacking `inline' and `extern') in a library file.  The definition in
   25472 the header file causes most calls to the function to be inlined.  If
   25473 any uses of the function remain, they refer to the single copy in the
   25474 library.
   25475 
   25476 
   25477 File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
   25478 
   25479 6.40 When is a Volatile Object Accessed?
   25480 ========================================
   25481 
   25482 C has the concept of volatile objects.  These are normally accessed by
   25483 pointers and used for accessing hardware or inter-thread communication.
   25484 The standard encourages compilers to refrain from optimizations
   25485 concerning accesses to volatile objects, but leaves it implementation
   25486 defined as to what constitutes a volatile access.  The minimum
   25487 requirement is that at a sequence point all previous accesses to
   25488 volatile objects have stabilized and no subsequent accesses have
   25489 occurred.  Thus an implementation is free to reorder and combine
   25490 volatile accesses that occur between sequence points, but cannot do so
   25491 for accesses across a sequence point.  The use of volatile does not
   25492 allow you to violate the restriction on updating objects multiple times
   25493 between two sequence points.
   25494 
   25495  Accesses to non-volatile objects are not ordered with respect to
   25496 volatile accesses.  You cannot use a volatile object as a memory
   25497 barrier to order a sequence of writes to non-volatile memory.  For
   25498 instance:
   25499 
   25500      int *ptr = SOMETHING;
   25501      volatile int vobj;
   25502      *ptr = SOMETHING;
   25503      vobj = 1;
   25504 
   25505 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
   25506 write to *PTR occurs by the time the update of VOBJ happens.  If you
   25507 need this guarantee, you must use a stronger memory barrier such as:
   25508 
   25509      int *ptr = SOMETHING;
   25510      volatile int vobj;
   25511      *ptr = SOMETHING;
   25512      asm volatile ("" : : : "memory");
   25513      vobj = 1;
   25514 
   25515  A scalar volatile object is read when it is accessed in a void context:
   25516 
   25517      volatile int *src = SOMEVALUE;
   25518      *src;
   25519 
   25520  Such expressions are rvalues, and GCC implements this as a read of the
   25521 volatile object being pointed to.
   25522 
   25523  Assignments are also expressions and have an rvalue.  However when
   25524 assigning to a scalar volatile, the volatile object is not reread,
   25525 regardless of whether the assignment expression's rvalue is used or
   25526 not.  If the assignment's rvalue is used, the value is that assigned to
   25527 the volatile object.  For instance, there is no read of VOBJ in all the
   25528 following cases:
   25529 
   25530      int obj;
   25531      volatile int vobj;
   25532      vobj = SOMETHING;
   25533      obj = vobj = SOMETHING;
   25534      obj ? vobj = ONETHING : vobj = ANOTHERTHING;
   25535      obj = (SOMETHING, vobj = ANOTHERTHING);
   25536 
   25537  If you need to read the volatile object after an assignment has
   25538 occurred, you must use a separate expression with an intervening
   25539 sequence point.
   25540 
   25541  As bit-fields are not individually addressable, volatile bit-fields may
   25542 be implicitly read when written to, or when adjacent bit-fields are
   25543 accessed.  Bit-field operations may be optimized such that adjacent
   25544 bit-fields are only partially accessed, if they straddle a storage unit
   25545 boundary.  For these reasons it is unwise to use volatile bit-fields to
   25546 access hardware.
   25547 
   25548 
   25549 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
   25550 
   25551 6.41 Assembler Instructions with C Expression Operands
   25552 ======================================================
   25553 
   25554 In an assembler instruction using `asm', you can specify the operands
   25555 of the instruction using C expressions.  This means you need not guess
   25556 which registers or memory locations contain the data you want to use.
   25557 
   25558  You must specify an assembler instruction template much like what
   25559 appears in a machine description, plus an operand constraint string for
   25560 each operand.
   25561 
   25562  For example, here is how to use the 68881's `fsinx' instruction:
   25563 
   25564      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
   25565 
   25566 Here `angle' is the C expression for the input operand while `result'
   25567 is that of the output operand.  Each has `"f"' as its operand
   25568 constraint, saying that a floating-point register is required.  The `='
   25569 in `=f' indicates that the operand is an output; all output operands'
   25570 constraints must use `='.  The constraints use the same language used
   25571 in the machine description (*note Constraints::).
   25572 
   25573  Each operand is described by an operand-constraint string followed by
   25574 the C expression in parentheses.  A colon separates the assembler
   25575 template from the first output operand and another separates the last
   25576 output operand from the first input, if any.  Commas separate the
   25577 operands within each group.  The total number of operands is currently
   25578 limited to 30; this limitation may be lifted in some future version of
   25579 GCC.
   25580 
   25581  If there are no output operands but there are input operands, you must
   25582 place two consecutive colons surrounding the place where the output
   25583 operands would go.
   25584 
   25585  As of GCC version 3.1, it is also possible to specify input and output
   25586 operands using symbolic names which can be referenced within the
   25587 assembler code.  These names are specified inside square brackets
   25588 preceding the constraint string, and can be referenced inside the
   25589 assembler code using `%[NAME]' instead of a percentage sign followed by
   25590 the operand number.  Using named operands the above example could look
   25591 like:
   25592 
   25593      asm ("fsinx %[angle],%[output]"
   25594           : [output] "=f" (result)
   25595           : [angle] "f" (angle));
   25596 
   25597 Note that the symbolic operand names have no relation whatsoever to
   25598 other C identifiers.  You may use any name you like, even those of
   25599 existing C symbols, but you must ensure that no two operands within the
   25600 same assembler construct use the same symbolic name.
   25601 
   25602  Output operand expressions must be lvalues; the compiler can check
   25603 this.  The input operands need not be lvalues.  The compiler cannot
   25604 check whether the operands have data types that are reasonable for the
   25605 instruction being executed.  It does not parse the assembler instruction
   25606 template and does not know what it means or even whether it is valid
   25607 assembler input.  The extended `asm' feature is most often used for
   25608 machine instructions the compiler itself does not know exist.  If the
   25609 output expression cannot be directly addressed (for example, it is a
   25610 bit-field), your constraint must allow a register.  In that case, GCC
   25611 uses the register as the output of the `asm', and then stores that
   25612 register into the output.
   25613 
   25614  The ordinary output operands must be write-only; GCC assumes that the
   25615 values in these operands before the instruction are dead and need not
   25616 be generated.  Extended asm supports input-output or read-write
   25617 operands.  Use the constraint character `+' to indicate such an operand
   25618 and list it with the output operands.
   25619 
   25620  You may, as an alternative, logically split its function into two
   25621 separate operands, one input operand and one write-only output operand.
   25622 The connection between them is expressed by constraints that say they
   25623 need to be in the same location when the instruction executes.  You can
   25624 use the same C expression for both operands, or different expressions.
   25625 For example, here we write the (fictitious) `combine' instruction with
   25626 `bar' as its read-only source operand and `foo' as its read-write
   25627 destination:
   25628 
   25629      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
   25630 
   25631 The constraint `"0"' for operand 1 says that it must occupy the same
   25632 location as operand 0.  A number in constraint is allowed only in an
   25633 input operand and it must refer to an output operand.
   25634 
   25635  Only a number in the constraint can guarantee that one operand is in
   25636 the same place as another.  The mere fact that `foo' is the value of
   25637 both operands is not enough to guarantee that they are in the same
   25638 place in the generated assembler code.  The following does not work
   25639 reliably:
   25640 
   25641      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
   25642 
   25643  Various optimizations or reloading could cause operands 0 and 1 to be
   25644 in different registers; GCC knows no reason not to do so.  For example,
   25645 the compiler might find a copy of the value of `foo' in one register and
   25646 use it for operand 1, but generate the output operand 0 in a different
   25647 register (copying it afterward to `foo''s own address).  Of course,
   25648 since the register for operand 1 is not even mentioned in the assembler
   25649 code, the result will not work, but GCC can't tell that.
   25650 
   25651  As of GCC version 3.1, one may write `[NAME]' instead of the operand
   25652 number for a matching constraint.  For example:
   25653 
   25654      asm ("cmoveq %1,%2,%[result]"
   25655           : [result] "=r"(result)
   25656           : "r" (test), "r"(new), "[result]"(old));
   25657 
   25658  Sometimes you need to make an `asm' operand be a specific register,
   25659 but there's no matching constraint letter for that register _by
   25660 itself_.  To force the operand into that register, use a local variable
   25661 for the operand and specify the register in the variable declaration.
   25662 *Note Explicit Reg Vars::.  Then for the `asm' operand, use any
   25663 register constraint letter that matches the register:
   25664 
   25665      register int *p1 asm ("r0") = ...;
   25666      register int *p2 asm ("r1") = ...;
   25667      register int *result asm ("r0");
   25668      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   25669 
   25670  In the above example, beware that a register that is call-clobbered by
   25671 the target ABI will be overwritten by any function call in the
   25672 assignment, including library calls for arithmetic operators.  Also a
   25673 register may be clobbered when generating some operations, like
   25674 variable shift, memory copy or memory move on x86.  Assuming it is a
   25675 call-clobbered register, this may happen to `r0' above by the
   25676 assignment to `p2'.  If you have to use such a register, use temporary
   25677 variables for expressions between the register assignment and use:
   25678 
   25679      int t1 = ...;
   25680      register int *p1 asm ("r0") = ...;
   25681      register int *p2 asm ("r1") = t1;
   25682      register int *result asm ("r0");
   25683      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   25684 
   25685  Some instructions clobber specific hard registers.  To describe this,
   25686 write a third colon after the input operands, followed by the names of
   25687 the clobbered hard registers (given as strings).  Here is a realistic
   25688 example for the VAX:
   25689 
   25690      asm volatile ("movc3 %0,%1,%2"
   25691                    : /* no outputs */
   25692                    : "g" (from), "g" (to), "g" (count)
   25693                    : "r0", "r1", "r2", "r3", "r4", "r5");
   25694 
   25695  You may not write a clobber description in a way that overlaps with an
   25696 input or output operand.  For example, you may not have an operand
   25697 describing a register class with one member if you mention that register
   25698 in the clobber list.  Variables declared to live in specific registers
   25699 (*note Explicit Reg Vars::), and used as asm input or output operands
   25700 must have no part mentioned in the clobber description.  There is no
   25701 way for you to specify that an input operand is modified without also
   25702 specifying it as an output operand.  Note that if all the output
   25703 operands you specify are for this purpose (and hence unused), you then
   25704 also need to specify `volatile' for the `asm' construct, as described
   25705 below, to prevent GCC from deleting the `asm' statement as unused.
   25706 
   25707  If you refer to a particular hardware register from the assembler code,
   25708 you probably have to list the register after the third colon to tell
   25709 the compiler the register's value is modified.  In some assemblers, the
   25710 register names begin with `%'; to produce one `%' in the assembler
   25711 code, you must write `%%' in the input.
   25712 
   25713  If your assembler instruction can alter the condition code register,
   25714 add `cc' to the list of clobbered registers.  GCC on some machines
   25715 represents the condition codes as a specific hardware register; `cc'
   25716 serves to name this register.  On other machines, the condition code is
   25717 handled differently, and specifying `cc' has no effect.  But it is
   25718 valid no matter what the machine.
   25719 
   25720  If your assembler instructions access memory in an unpredictable
   25721 fashion, add `memory' to the list of clobbered registers.  This causes
   25722 GCC to not keep memory values cached in registers across the assembler
   25723 instruction and not optimize stores or loads to that memory.  You also
   25724 should add the `volatile' keyword if the memory affected is not listed
   25725 in the inputs or outputs of the `asm', as the `memory' clobber does not
   25726 count as a side-effect of the `asm'.  If you know how large the
   25727 accessed memory is, you can add it as input or output but if this is
   25728 not known, you should add `memory'.  As an example, if you access ten
   25729 bytes of a string, you can use a memory input like:
   25730 
   25731      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
   25732 
   25733  Note that in the following example the memory input is necessary,
   25734 otherwise GCC might optimize the store to `x' away:
   25735      int foo ()
   25736      {
   25737        int x = 42;
   25738        int *y = &x;
   25739        int result;
   25740        asm ("magic stuff accessing an 'int' pointed to by '%1'"
   25741             : "=&d" (r) : "a" (y), "m" (*y));
   25742        return result;
   25743      }
   25744 
   25745  You can put multiple assembler instructions together in a single `asm'
   25746 template, separated by the characters normally used in assembly code
   25747 for the system.  A combination that works in most places is a newline
   25748 to break the line, plus a tab character to move to the instruction field
   25749 (written as `\n\t').  Sometimes semicolons can be used, if the
   25750 assembler allows semicolons as a line-breaking character.  Note that
   25751 some assembler dialects use semicolons to start a comment.  The input
   25752 operands are guaranteed not to use any of the clobbered registers, and
   25753 neither do the output operands' addresses, so you can read and write
   25754 the clobbered registers as many times as you like.  Here is an example
   25755 of multiple instructions in a template; it assumes the subroutine
   25756 `_foo' accepts arguments in registers 9 and 10:
   25757 
   25758      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
   25759           : /* no outputs */
   25760           : "g" (from), "g" (to)
   25761           : "r9", "r10");
   25762 
   25763  Unless an output operand has the `&' constraint modifier, GCC may
   25764 allocate it in the same register as an unrelated input operand, on the
   25765 assumption the inputs are consumed before the outputs are produced.
   25766 This assumption may be false if the assembler code actually consists of
   25767 more than one instruction.  In such a case, use `&' for each output
   25768 operand that may not overlap an input.  *Note Modifiers::.
   25769 
   25770  If you want to test the condition code produced by an assembler
   25771 instruction, you must include a branch and a label in the `asm'
   25772 construct, as follows:
   25773 
   25774      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
   25775           : "g" (result)
   25776           : "g" (input));
   25777 
   25778 This assumes your assembler supports local labels, as the GNU assembler
   25779 and most Unix assemblers do.
   25780 
   25781  Speaking of labels, jumps from one `asm' to another are not supported.
   25782 The compiler's optimizers do not know about these jumps, and therefore
   25783 they cannot take account of them when deciding how to optimize.  *Note
   25784 Extended asm with goto::.
   25785 
   25786  Usually the most convenient way to use these `asm' instructions is to
   25787 encapsulate them in macros that look like functions.  For example,
   25788 
   25789      #define sin(x)       \
   25790      ({ double __value, __arg = (x);   \
   25791         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
   25792         __value; })
   25793 
   25794 Here the variable `__arg' is used to make sure that the instruction
   25795 operates on a proper `double' value, and to accept only those arguments
   25796 `x' that can convert automatically to a `double'.
   25797 
   25798  Another way to make sure the instruction operates on the correct data
   25799 type is to use a cast in the `asm'.  This is different from using a
   25800 variable `__arg' in that it converts more different types.  For
   25801 example, if the desired type is `int', casting the argument to `int'
   25802 accepts a pointer with no complaint, while assigning the argument to an
   25803 `int' variable named `__arg' warns about using a pointer unless the
   25804 caller explicitly casts it.
   25805 
   25806  If an `asm' has output operands, GCC assumes for optimization purposes
   25807 the instruction has no side effects except to change the output
   25808 operands.  This does not mean instructions with a side effect cannot be
   25809 used, but you must be careful, because the compiler may eliminate them
   25810 if the output operands aren't used, or move them out of loops, or
   25811 replace two with one if they constitute a common subexpression.  Also,
   25812 if your instruction does have a side effect on a variable that otherwise
   25813 appears not to change, the old value of the variable may be reused later
   25814 if it happens to be found in a register.
   25815 
   25816  You can prevent an `asm' instruction from being deleted by writing the
   25817 keyword `volatile' after the `asm'.  For example:
   25818 
   25819      #define get_and_set_priority(new)              \
   25820      ({ int __old;                                  \
   25821         asm volatile ("get_and_set_priority %0, %1" \
   25822                       : "=g" (__old) : "g" (new));  \
   25823         __old; })
   25824 
   25825 The `volatile' keyword indicates that the instruction has important
   25826 side-effects.  GCC does not delete a volatile `asm' if it is reachable.
   25827 (The instruction can still be deleted if GCC can prove that control
   25828 flow never reaches the location of the instruction.)  Note that even a
   25829 volatile `asm' instruction can be moved relative to other code,
   25830 including across jump instructions.  For example, on many targets there
   25831 is a system register that can be set to control the rounding mode of
   25832 floating-point operations.  You might try setting it with a volatile
   25833 `asm', like this PowerPC example:
   25834 
   25835             asm volatile("mtfsf 255,%0" : : "f" (fpenv));
   25836             sum = x + y;
   25837 
   25838 This does not work reliably, as the compiler may move the addition back
   25839 before the volatile `asm'.  To make it work you need to add an
   25840 artificial dependency to the `asm' referencing a variable in the code
   25841 you don't want moved, for example:
   25842 
   25843          asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
   25844          sum = x + y;
   25845 
   25846  Similarly, you can't expect a sequence of volatile `asm' instructions
   25847 to remain perfectly consecutive.  If you want consecutive output, use a
   25848 single `asm'.  Also, GCC performs some optimizations across a volatile
   25849 `asm' instruction; GCC does not "forget everything" when it encounters
   25850 a volatile `asm' instruction the way some other compilers do.
   25851 
   25852  An `asm' instruction without any output operands is treated
   25853 identically to a volatile `asm' instruction.
   25854 
   25855  It is a natural idea to look for a way to give access to the condition
   25856 code left by the assembler instruction.  However, when we attempted to
   25857 implement this, we found no way to make it work reliably.  The problem
   25858 is that output operands might need reloading, which result in
   25859 additional following "store" instructions.  On most machines, these
   25860 instructions alter the condition code before there is time to test it.
   25861 This problem doesn't arise for ordinary "test" and "compare"
   25862 instructions because they don't have any output operands.
   25863 
   25864  For reasons similar to those described above, it is not possible to
   25865 give an assembler instruction access to the condition code left by
   25866 previous instructions.
   25867 
   25868  As of GCC version 4.5, `asm goto' may be used to have the assembly
   25869 jump to one or more C labels.  In this form, a fifth section after the
   25870 clobber list contains a list of all C labels to which the assembly may
   25871 jump.  Each label operand is implicitly self-named.  The `asm' is also
   25872 assumed to fall through to the next statement.
   25873 
   25874  This form of `asm' is restricted to not have outputs.  This is due to
   25875 a internal restriction in the compiler that control transfer
   25876 instructions cannot have outputs.  This restriction on `asm goto' may
   25877 be lifted in some future version of the compiler.  In the meantime,
   25878 `asm goto' may include a memory clobber, and so leave outputs in memory.
   25879 
   25880      int frob(int x)
   25881      {
   25882        int y;
   25883        asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
   25884                  : : "r"(x), "r"(&y) : "r5", "memory" : error);
   25885        return y;
   25886       error:
   25887        return -1;
   25888      }
   25889 
   25890 In this (inefficient) example, the `frob' instruction sets the carry
   25891 bit to indicate an error.  The `jc' instruction detects this and
   25892 branches to the `error' label.  Finally, the output of the `frob'
   25893 instruction (`%r5') is stored into the memory for variable `y', which
   25894 is later read by the `return' statement.
   25895 
   25896      void doit(void)
   25897      {
   25898        int i = 0;
   25899        asm goto ("mfsr %%r1, 123; jmp %%r1;"
   25900                  ".pushsection doit_table;"
   25901                  ".long %l0, %l1, %l2, %l3;"
   25902                  ".popsection"
   25903                  : : : "r1" : label1, label2, label3, label4);
   25904        __builtin_unreachable ();
   25905 
   25906       label1:
   25907        f1();
   25908        return;
   25909       label2:
   25910        f2();
   25911        return;
   25912       label3:
   25913        i = 1;
   25914       label4:
   25915        f3(i);
   25916      }
   25917 
   25918 In this (also inefficient) example, the `mfsr' instruction reads an
   25919 address from some out-of-band machine register, and the following `jmp'
   25920 instruction branches to that address.  The address read by the `mfsr'
   25921 instruction is assumed to have been previously set via some
   25922 application-specific mechanism to be one of the four values stored in
   25923 the `doit_table' section.  Finally, the `asm' is followed by a call to
   25924 `__builtin_unreachable' to indicate that the `asm' does not in fact
   25925 fall through.
   25926 
   25927      #define TRACE1(NUM)                         \
   25928        do {                                      \
   25929          asm goto ("0: nop;"                     \
   25930                    ".pushsection trace_table;"   \
   25931                    ".long 0b, %l0;"              \
   25932                    ".popsection"                 \
   25933                    : : : : trace#NUM);           \
   25934          if (0) { trace#NUM: trace(); }          \
   25935        } while (0)
   25936      #define TRACE  TRACE1(__COUNTER__)
   25937 
   25938 In this example (which in fact inspired the `asm goto' feature) we want
   25939 on rare occasions to call the `trace' function; on other occasions we'd
   25940 like to keep the overhead to the absolute minimum.  The normal code
   25941 path consists of a single `nop' instruction.  However, we record the
   25942 address of this `nop' together with the address of a label that calls
   25943 the `trace' function.  This allows the `nop' instruction to be patched
   25944 at run time to be an unconditional branch to the stored label.  It is
   25945 assumed that an optimizing compiler moves the labeled block out of
   25946 line, to optimize the fall through path from the `asm'.
   25947 
   25948  If you are writing a header file that should be includable in ISO C
   25949 programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
   25950 
   25951 6.41.1 Size of an `asm'
   25952 -----------------------
   25953 
   25954 Some targets require that GCC track the size of each instruction used in
   25955 order to generate correct code.  Because the final length of an `asm'
   25956 is only known by the assembler, GCC must make an estimate as to how big
   25957 it will be.  The estimate is formed by counting the number of
   25958 statements in the pattern of the `asm' and multiplying that by the
   25959 length of the longest instruction on that processor.  Statements in the
   25960 `asm' are identified by newline characters and whatever statement
   25961 separator characters are supported by the assembler; on most processors
   25962 this is the `;' character.
   25963 
   25964  Normally, GCC's estimate is perfectly adequate to ensure that correct
   25965 code is generated, but it is possible to confuse the compiler if you use
   25966 pseudo instructions or assembler macros that expand into multiple real
   25967 instructions or if you use assembler directives that expand to more
   25968 space in the object file than is needed for a single instruction.  If
   25969 this happens then the assembler produces a diagnostic saying that a
   25970 label is unreachable.
   25971 
   25972 6.41.2 i386 floating-point asm operands
   25973 ---------------------------------------
   25974 
   25975 On i386 targets, there are several rules on the usage of stack-like
   25976 registers in the operands of an `asm'.  These rules apply only to the
   25977 operands that are stack-like registers:
   25978 
   25979   1. Given a set of input registers that die in an `asm', it is
   25980      necessary to know which are implicitly popped by the `asm', and
   25981      which must be explicitly popped by GCC.
   25982 
   25983      An input register that is implicitly popped by the `asm' must be
   25984      explicitly clobbered, unless it is constrained to match an output
   25985      operand.
   25986 
   25987   2. For any input register that is implicitly popped by an `asm', it is
   25988      necessary to know how to adjust the stack to compensate for the
   25989      pop.  If any non-popped input is closer to the top of the
   25990      reg-stack than the implicitly popped register, it would not be
   25991      possible to know what the stack looked like--it's not clear how
   25992      the rest of the stack "slides up".
   25993 
   25994      All implicitly popped input registers must be closer to the top of
   25995      the reg-stack than any input that is not implicitly popped.
   25996 
   25997      It is possible that if an input dies in an `asm', the compiler
   25998      might use the input register for an output reload.  Consider this
   25999      example:
   26000 
   26001           asm ("foo" : "=t" (a) : "f" (b));
   26002 
   26003      This code says that input `b' is not popped by the `asm', and that
   26004      the `asm' pushes a result onto the reg-stack, i.e., the stack is
   26005      one deeper after the `asm' than it was before.  But, it is
   26006      possible that reload may think that it can use the same register
   26007      for both the input and the output.
   26008 
   26009      To prevent this from happening, if any input operand uses the `f'
   26010      constraint, all output register constraints must use the `&'
   26011      early-clobber modifier.
   26012 
   26013      The example above would be correctly written as:
   26014 
   26015           asm ("foo" : "=&t" (a) : "f" (b));
   26016 
   26017   3. Some operands need to be in particular places on the stack.  All
   26018      output operands fall in this category--GCC has no other way to
   26019      know which registers the outputs appear in unless you indicate
   26020      this in the constraints.
   26021 
   26022      Output operands must specifically indicate which register an output
   26023      appears in after an `asm'.  `=f' is not allowed: the operand
   26024      constraints must select a class with a single register.
   26025 
   26026   4. Output operands may not be "inserted" between existing stack
   26027      registers.  Since no 387 opcode uses a read/write operand, all
   26028      output operands are dead before the `asm', and are pushed by the
   26029      `asm'.  It makes no sense to push anywhere but the top of the
   26030      reg-stack.
   26031 
   26032      Output operands must start at the top of the reg-stack: output
   26033      operands may not "skip" a register.
   26034 
   26035   5. Some `asm' statements may need extra stack space for internal
   26036      calculations.  This can be guaranteed by clobbering stack registers
   26037      unrelated to the inputs and outputs.
   26038 
   26039 
   26040  Here are a couple of reasonable `asm's to want to write.  This `asm'
   26041 takes one input, which is internally popped, and produces two outputs.
   26042 
   26043      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
   26044 
   26045 This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode,
   26046 and replaces them with one output.  The `st(1)' clobber is necessary
   26047 for the compiler to know that `fyl2xp1' pops both inputs.
   26048 
   26049      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
   26050 
   26051 
   26052 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
   26053 
   26054 6.42 Constraints for `asm' Operands
   26055 ===================================
   26056 
   26057 Here are specific details on what constraint letters you can use with
   26058 `asm' operands.  Constraints can say whether an operand may be in a
   26059 register, and which kinds of register; whether the operand can be a
   26060 memory reference, and which kinds of address; whether the operand may
   26061 be an immediate constant, and which possible values it may have.
   26062 Constraints can also require two operands to match.  Side-effects
   26063 aren't allowed in operands of inline `asm', unless `<' or `>'
   26064 constraints are used, because there is no guarantee that the
   26065 side-effects will happen exactly once in an instruction that can update
   26066 the addressing register.
   26067 
   26068 * Menu:
   26069 
   26070 * Simple Constraints::  Basic use of constraints.
   26071 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
   26072 * Modifiers::           More precise control over effects of constraints.
   26073 * Machine Constraints:: Special constraints for some particular machines.
   26074 
   26075 
   26076 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
   26077 
   26078 6.42.1 Simple Constraints
   26079 -------------------------
   26080 
   26081 The simplest kind of constraint is a string full of letters, each of
   26082 which describes one kind of operand that is permitted.  Here are the
   26083 letters that are allowed:
   26084 
   26085 whitespace
   26086      Whitespace characters are ignored and can be inserted at any
   26087      position except the first.  This enables each alternative for
   26088      different operands to be visually aligned in the machine
   26089      description even if they have different number of constraints and
   26090      modifiers.
   26091 
   26092 `m'
   26093      A memory operand is allowed, with any kind of address that the
   26094      machine supports in general.  Note that the letter used for the
   26095      general memory constraint can be re-defined by a back end using
   26096      the `TARGET_MEM_CONSTRAINT' macro.
   26097 
   26098 `o'
   26099      A memory operand is allowed, but only if the address is
   26100      "offsettable".  This means that adding a small integer (actually,
   26101      the width in bytes of the operand, as determined by its machine
   26102      mode) may be added to the address and the result is also a valid
   26103      memory address.
   26104 
   26105      For example, an address which is constant is offsettable; so is an
   26106      address that is the sum of a register and a constant (as long as a
   26107      slightly larger constant is also within the range of
   26108      address-offsets supported by the machine); but an autoincrement or
   26109      autodecrement address is not offsettable.  More complicated
   26110      indirect/indexed addresses may or may not be offsettable depending
   26111      on the other addressing modes that the machine supports.
   26112 
   26113      Note that in an output operand which can be matched by another
   26114      operand, the constraint letter `o' is valid only when accompanied
   26115      by both `<' (if the target machine has predecrement addressing)
   26116      and `>' (if the target machine has preincrement addressing).
   26117 
   26118 `V'
   26119      A memory operand that is not offsettable.  In other words,
   26120      anything that would fit the `m' constraint but not the `o'
   26121      constraint.
   26122 
   26123 `<'
   26124      A memory operand with autodecrement addressing (either
   26125      predecrement or postdecrement) is allowed.  In inline `asm' this
   26126      constraint is only allowed if the operand is used exactly once in
   26127      an instruction that can handle the side-effects.  Not using an
   26128      operand with `<' in constraint string in the inline `asm' pattern
   26129      at all or using it in multiple instructions isn't valid, because
   26130      the side-effects wouldn't be performed or would be performed more
   26131      than once.  Furthermore, on some targets the operand with `<' in
   26132      constraint string must be accompanied by special instruction
   26133      suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
   26134      IA-64.
   26135 
   26136 `>'
   26137      A memory operand with autoincrement addressing (either
   26138      preincrement or postincrement) is allowed.  In inline `asm' the
   26139      same restrictions as for `<' apply.
   26140 
   26141 `r'
   26142      A register operand is allowed provided that it is in a general
   26143      register.
   26144 
   26145 `i'
   26146      An immediate integer operand (one with constant value) is allowed.
   26147      This includes symbolic constants whose values will be known only at
   26148      assembly time or later.
   26149 
   26150 `n'
   26151      An immediate integer operand with a known numeric value is allowed.
   26152      Many systems cannot support assembly-time constants for operands
   26153      less than a word wide.  Constraints for these operands should use
   26154      `n' rather than `i'.
   26155 
   26156 `I', `J', `K', ... `P'
   26157      Other letters in the range `I' through `P' may be defined in a
   26158      machine-dependent fashion to permit immediate integer operands with
   26159      explicit integer values in specified ranges.  For example, on the
   26160      68000, `I' is defined to stand for the range of values 1 to 8.
   26161      This is the range permitted as a shift count in the shift
   26162      instructions.
   26163 
   26164 `E'
   26165      An immediate floating operand (expression code `const_double') is
   26166      allowed, but only if the target floating point format is the same
   26167      as that of the host machine (on which the compiler is running).
   26168 
   26169 `F'
   26170      An immediate floating operand (expression code `const_double' or
   26171      `const_vector') is allowed.
   26172 
   26173 `G', `H'
   26174      `G' and `H' may be defined in a machine-dependent fashion to
   26175      permit immediate floating operands in particular ranges of values.
   26176 
   26177 `s'
   26178      An immediate integer operand whose value is not an explicit
   26179      integer is allowed.
   26180 
   26181      This might appear strange; if an insn allows a constant operand
   26182      with a value not known at compile time, it certainly must allow
   26183      any known value.  So why use `s' instead of `i'?  Sometimes it
   26184      allows better code to be generated.
   26185 
   26186      For example, on the 68000 in a fullword instruction it is possible
   26187      to use an immediate operand; but if the immediate value is between
   26188      -128 and 127, better code results from loading the value into a
   26189      register and using the register.  This is because the load into
   26190      the register can be done with a `moveq' instruction.  We arrange
   26191      for this to happen by defining the letter `K' to mean "any integer
   26192      outside the range -128 to 127", and then specifying `Ks' in the
   26193      operand constraints.
   26194 
   26195 `g'
   26196      Any register, memory or immediate integer operand is allowed,
   26197      except for registers that are not general registers.
   26198 
   26199 `X'
   26200      Any operand whatsoever is allowed.
   26201 
   26202 `0', `1', `2', ... `9'
   26203      An operand that matches the specified operand number is allowed.
   26204      If a digit is used together with letters within the same
   26205      alternative, the digit should come last.
   26206 
   26207      This number is allowed to be more than a single digit.  If multiple
   26208      digits are encountered consecutively, they are interpreted as a
   26209      single decimal integer.  There is scant chance for ambiguity,
   26210      since to-date it has never been desirable that `10' be interpreted
   26211      as matching either operand 1 _or_ operand 0.  Should this be
   26212      desired, one can use multiple alternatives instead.
   26213 
   26214      This is called a "matching constraint" and what it really means is
   26215      that the assembler has only a single operand that fills two roles
   26216      which `asm' distinguishes.  For example, an add instruction uses
   26217      two input operands and an output operand, but on most CISC
   26218      machines an add instruction really has only two operands, one of
   26219      them an input-output operand:
   26220 
   26221           addl #35,r12
   26222 
   26223      Matching constraints are used in these circumstances.  More
   26224      precisely, the two operands that match must include one input-only
   26225      operand and one output-only operand.  Moreover, the digit must be a
   26226      smaller number than the number of the operand that uses it in the
   26227      constraint.
   26228 
   26229 `p'
   26230      An operand that is a valid memory address is allowed.  This is for
   26231      "load address" and "push address" instructions.
   26232 
   26233      `p' in the constraint must be accompanied by `address_operand' as
   26234      the predicate in the `match_operand'.  This predicate interprets
   26235      the mode specified in the `match_operand' as the mode of the memory
   26236      reference for which the address would be valid.
   26237 
   26238 OTHER-LETTERS
   26239      Other letters can be defined in machine-dependent fashion to stand
   26240      for particular classes of registers or other arbitrary operand
   26241      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
   26242      for data, address and floating point registers.
   26243 
   26244 
   26245 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
   26246 
   26247 6.42.2 Multiple Alternative Constraints
   26248 ---------------------------------------
   26249 
   26250 Sometimes a single instruction has multiple alternative sets of possible
   26251 operands.  For example, on the 68000, a logical-or instruction can
   26252 combine register or an immediate value into memory, or it can combine
   26253 any kind of operand into a register; but it cannot combine one memory
   26254 location into another.
   26255 
   26256  These constraints are represented as multiple alternatives.  An
   26257 alternative can be described by a series of letters for each operand.
   26258 The overall constraint for an operand is made from the letters for this
   26259 operand from the first alternative, a comma, the letters for this
   26260 operand from the second alternative, a comma, and so on until the last
   26261 alternative.
   26262 
   26263  If all the operands fit any one alternative, the instruction is valid.
   26264 Otherwise, for each alternative, the compiler counts how many
   26265 instructions must be added to copy the operands so that that
   26266 alternative applies.  The alternative requiring the least copying is
   26267 chosen.  If two alternatives need the same amount of copying, the one
   26268 that comes first is chosen.  These choices can be altered with the `?'
   26269 and `!' characters:
   26270 
   26271 `?'
   26272      Disparage slightly the alternative that the `?' appears in, as a
   26273      choice when no alternative applies exactly.  The compiler regards
   26274      this alternative as one unit more costly for each `?' that appears
   26275      in it.
   26276 
   26277 `!'
   26278      Disparage severely the alternative that the `!' appears in.  This
   26279      alternative can still be used if it fits without reloading, but if
   26280      reloading is needed, some other alternative will be used.
   26281 
   26282 
   26283 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
   26284 
   26285 6.42.3 Constraint Modifier Characters
   26286 -------------------------------------
   26287 
   26288 Here are constraint modifier characters.
   26289 
   26290 `='
   26291      Means that this operand is write-only for this instruction: the
   26292      previous value is discarded and replaced by output data.
   26293 
   26294 `+'
   26295      Means that this operand is both read and written by the
   26296      instruction.
   26297 
   26298      When the compiler fixes up the operands to satisfy the constraints,
   26299      it needs to know which operands are inputs to the instruction and
   26300      which are outputs from it.  `=' identifies an output; `+'
   26301      identifies an operand that is both input and output; all other
   26302      operands are assumed to be input only.
   26303 
   26304      If you specify `=' or `+' in a constraint, you put it in the first
   26305      character of the constraint string.
   26306 
   26307 `&'
   26308      Means (in a particular alternative) that this operand is an
   26309      "earlyclobber" operand, which is modified before the instruction is
   26310      finished using the input operands.  Therefore, this operand may
   26311      not lie in a register that is used as an input operand or as part
   26312      of any memory address.
   26313 
   26314      `&' applies only to the alternative in which it is written.  In
   26315      constraints with multiple alternatives, sometimes one alternative
   26316      requires `&' while others do not.  See, for example, the `movdf'
   26317      insn of the 68000.
   26318 
   26319      An input operand can be tied to an earlyclobber operand if its only
   26320      use as an input occurs before the early result is written.  Adding
   26321      alternatives of this form often allows GCC to produce better code
   26322      when only some of the inputs can be affected by the earlyclobber.
   26323      See, for example, the `mulsi3' insn of the ARM.
   26324 
   26325      `&' does not obviate the need to write `='.
   26326 
   26327 `%'
   26328      Declares the instruction to be commutative for this operand and the
   26329      following operand.  This means that the compiler may interchange
   26330      the two operands if that is the cheapest way to make all operands
   26331      fit the constraints.  GCC can only handle one commutative pair in
   26332      an asm; if you use more, the compiler may fail.  Note that you
   26333      need not use the modifier if the two alternatives are strictly
   26334      identical; this would only waste time in the reload pass.  The
   26335      modifier is not operational after register allocation, so the
   26336      result of `define_peephole2' and `define_split's performed after
   26337      reload cannot rely on `%' to make the intended insn match.
   26338 
   26339 `#'
   26340      Says that all following characters, up to the next comma, are to be
   26341      ignored as a constraint.  They are significant only for choosing
   26342      register preferences.
   26343 
   26344 `*'
   26345      Says that the following character should be ignored when choosing
   26346      register preferences.  `*' has no effect on the meaning of the
   26347      constraint as a constraint, and no effect on reloading.  For LRA
   26348      `*' additionally disparages slightly the alternative if the
   26349      following character matches the operand.
   26350 
   26351 
   26352 
   26353 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
   26354 
   26355 6.42.4 Constraints for Particular Machines
   26356 ------------------------------------------
   26357 
   26358 Whenever possible, you should use the general-purpose constraint letters
   26359 in `asm' arguments, since they will convey meaning more readily to
   26360 people reading your code.  Failing that, use the constraint letters
   26361 that usually have very similar meanings across architectures.  The most
   26362 commonly used constraints are `m' and `r' (for memory and
   26363 general-purpose registers respectively; *note Simple Constraints::), and
   26364 `I', usually the letter indicating the most common immediate-constant
   26365 format.
   26366 
   26367  Each architecture defines additional constraints.  These constraints
   26368 are used by the compiler itself for instruction generation, as well as
   26369 for `asm' statements; therefore, some of the constraints are not
   26370 particularly useful for `asm'.  Here is a summary of some of the
   26371 machine-dependent constraints available on some particular machines; it
   26372 includes both constraints that are useful for `asm' and constraints
   26373 that aren't.  The compiler source file mentioned in the table heading
   26374 for each architecture is the definitive reference for the meanings of
   26375 that architecture's constraints.
   26376 
   26377 _AArch64 family--`config/aarch64/constraints.md'_
   26378 
   26379     `k'
   26380           The stack pointer register (`SP')
   26381 
   26382     `w'
   26383           Floating point or SIMD vector register
   26384 
   26385     `I'
   26386           Integer constant that is valid as an immediate operand in an
   26387           `ADD' instruction
   26388 
   26389     `J'
   26390           Integer constant that is valid as an immediate operand in a
   26391           `SUB' instruction (once negated)
   26392 
   26393     `K'
   26394           Integer constant that can be used with a 32-bit logical
   26395           instruction
   26396 
   26397     `L'
   26398           Integer constant that can be used with a 64-bit logical
   26399           instruction
   26400 
   26401     `M'
   26402           Integer constant that is valid as an immediate operand in a
   26403           32-bit `MOV' pseudo instruction. The `MOV' may be assembled
   26404           to one of several different machine instructions depending on
   26405           the value
   26406 
   26407     `N'
   26408           Integer constant that is valid as an immediate operand in a
   26409           64-bit `MOV' pseudo instruction
   26410 
   26411     `S'
   26412           An absolute symbolic address or a label reference
   26413 
   26414     `Y'
   26415           Floating point constant zero
   26416 
   26417     `Z'
   26418           Integer constant zero
   26419 
   26420     `Usa'
   26421           An absolute symbolic address
   26422 
   26423     `Ush'
   26424           The high part (bits 12 and upwards) of the pc-relative
   26425           address of a symbol within 4GB of the instruction
   26426 
   26427     `Q'
   26428           A memory address which uses a single base register with no
   26429           offset
   26430 
   26431     `Ump'
   26432           A memory address suitable for a load/store pair instruction
   26433           in SI, DI, SF and DF modes
   26434 
   26435 
   26436 _ARM family--`config/arm/constraints.md'_
   26437 
   26438     `w'
   26439           VFP floating-point register
   26440 
   26441     `G'
   26442           The floating-point constant 0.0
   26443 
   26444     `I'
   26445           Integer that is valid as an immediate operand in a data
   26446           processing instruction.  That is, an integer in the range 0
   26447           to 255 rotated by a multiple of 2
   26448 
   26449     `J'
   26450           Integer in the range -4095 to 4095
   26451 
   26452     `K'
   26453           Integer that satisfies constraint `I' when inverted (ones
   26454           complement)
   26455 
   26456     `L'
   26457           Integer that satisfies constraint `I' when negated (twos
   26458           complement)
   26459 
   26460     `M'
   26461           Integer in the range 0 to 32
   26462 
   26463     `Q'
   26464           A memory reference where the exact address is in a single
   26465           register (``m'' is preferable for `asm' statements)
   26466 
   26467     `R'
   26468           An item in the constant pool
   26469 
   26470     `S'
   26471           A symbol in the text segment of the current file
   26472 
   26473     `Uv'
   26474           A memory reference suitable for VFP load/store insns
   26475           (reg+constant offset)
   26476 
   26477     `Uy'
   26478           A memory reference suitable for iWMMXt load/store
   26479           instructions.
   26480 
   26481     `Uq'
   26482           A memory reference suitable for the ARMv4 ldrsb instruction.
   26483 
   26484 _AVR family--`config/avr/constraints.md'_
   26485 
   26486     `l'
   26487           Registers from r0 to r15
   26488 
   26489     `a'
   26490           Registers from r16 to r23
   26491 
   26492     `d'
   26493           Registers from r16 to r31
   26494 
   26495     `w'
   26496           Registers from r24 to r31.  These registers can be used in
   26497           `adiw' command
   26498 
   26499     `e'
   26500           Pointer register (r26-r31)
   26501 
   26502     `b'
   26503           Base pointer register (r28-r31)
   26504 
   26505     `q'
   26506           Stack pointer register (SPH:SPL)
   26507 
   26508     `t'
   26509           Temporary register r0
   26510 
   26511     `x'
   26512           Register pair X (r27:r26)
   26513 
   26514     `y'
   26515           Register pair Y (r29:r28)
   26516 
   26517     `z'
   26518           Register pair Z (r31:r30)
   26519 
   26520     `I'
   26521           Constant greater than -1, less than 64
   26522 
   26523     `J'
   26524           Constant greater than -64, less than 1
   26525 
   26526     `K'
   26527           Constant integer 2
   26528 
   26529     `L'
   26530           Constant integer 0
   26531 
   26532     `M'
   26533           Constant that fits in 8 bits
   26534 
   26535     `N'
   26536           Constant integer -1
   26537 
   26538     `O'
   26539           Constant integer 8, 16, or 24
   26540 
   26541     `P'
   26542           Constant integer 1
   26543 
   26544     `G'
   26545           A floating point constant 0.0
   26546 
   26547     `Q'
   26548           A memory address based on Y or Z pointer with displacement.
   26549 
   26550 _Epiphany--`config/epiphany/constraints.md'_
   26551 
   26552     `U16'
   26553           An unsigned 16-bit constant.
   26554 
   26555     `K'
   26556           An unsigned 5-bit constant.
   26557 
   26558     `L'
   26559           A signed 11-bit constant.
   26560 
   26561     `Cm1'
   26562           A signed 11-bit constant added to -1.  Can only match when
   26563           the `-m1reg-REG' option is active.
   26564 
   26565     `Cl1'
   26566           Left-shift of -1, i.e., a bit mask with a block of leading
   26567           ones, the rest being a block of trailing zeroes.  Can only
   26568           match when the `-m1reg-REG' option is active.
   26569 
   26570     `Cr1'
   26571           Right-shift of -1, i.e., a bit mask with a trailing block of
   26572           ones, the rest being zeroes.  Or to put it another way, one
   26573           less than a power of two.  Can only match when the
   26574           `-m1reg-REG' option is active.
   26575 
   26576     `Cal'
   26577           Constant for arithmetic/logical operations.  This is like
   26578           `i', except that for position independent code, no symbols /
   26579           expressions needing relocations are allowed.
   26580 
   26581     `Csy'
   26582           Symbolic constant for call/jump instruction.
   26583 
   26584     `Rcs'
   26585           The register class usable in short insns.  This is a register
   26586           class constraint, and can thus drive register allocation.
   26587           This constraint won't match unless `-mprefer-short-insn-regs'
   26588           is in effect.
   26589 
   26590     `Rsc'
   26591           The the register class of registers that can be used to hold a
   26592           sibcall call address.  I.e., a caller-saved register.
   26593 
   26594     `Rct'
   26595           Core control register class.
   26596 
   26597     `Rgs'
   26598           The register group usable in short insns.  This constraint
   26599           does not use a register class, so that it only passively
   26600           matches suitable registers, and doesn't drive register
   26601           allocation.
   26602 
   26603     `Rra'
   26604           Matches the return address if it can be replaced with the
   26605           link register.
   26606 
   26607     `Rcc'
   26608           Matches the integer condition code register.
   26609 
   26610     `Sra'
   26611           Matches the return address if it is in a stack slot.
   26612 
   26613     `Cfm'
   26614           Matches control register values to switch fp mode, which are
   26615           encapsulated in `UNSPEC_FP_MODE'.
   26616 
   26617 _CR16 Architecture--`config/cr16/cr16.h'_
   26618 
   26619     `b'
   26620           Registers from r0 to r14 (registers without stack pointer)
   26621 
   26622     `t'
   26623           Register from r0 to r11 (all 16-bit registers)
   26624 
   26625     `p'
   26626           Register from r12 to r15 (all 32-bit registers)
   26627 
   26628     `I'
   26629           Signed constant that fits in 4 bits
   26630 
   26631     `J'
   26632           Signed constant that fits in 5 bits
   26633 
   26634     `K'
   26635           Signed constant that fits in 6 bits
   26636 
   26637     `L'
   26638           Unsigned constant that fits in 4 bits
   26639 
   26640     `M'
   26641           Signed constant that fits in 32 bits
   26642 
   26643     `N'
   26644           Check for 64 bits wide constants for add/sub instructions
   26645 
   26646     `G'
   26647           Floating point constant that is legal for store immediate
   26648 
   26649 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
   26650 
   26651     `a'
   26652           General register 1
   26653 
   26654     `f'
   26655           Floating point register
   26656 
   26657     `q'
   26658           Shift amount register
   26659 
   26660     `x'
   26661           Floating point register (deprecated)
   26662 
   26663     `y'
   26664           Upper floating point register (32-bit), floating point
   26665           register (64-bit)
   26666 
   26667     `Z'
   26668           Any register
   26669 
   26670     `I'
   26671           Signed 11-bit integer constant
   26672 
   26673     `J'
   26674           Signed 14-bit integer constant
   26675 
   26676     `K'
   26677           Integer constant that can be deposited with a `zdepi'
   26678           instruction
   26679 
   26680     `L'
   26681           Signed 5-bit integer constant
   26682 
   26683     `M'
   26684           Integer constant 0
   26685 
   26686     `N'
   26687           Integer constant that can be loaded with a `ldil' instruction
   26688 
   26689     `O'
   26690           Integer constant whose value plus one is a power of 2
   26691 
   26692     `P'
   26693           Integer constant that can be used for `and' operations in
   26694           `depi' and `extru' instructions
   26695 
   26696     `S'
   26697           Integer constant 31
   26698 
   26699     `U'
   26700           Integer constant 63
   26701 
   26702     `G'
   26703           Floating-point constant 0.0
   26704 
   26705     `A'
   26706           A `lo_sum' data-linkage-table memory operand
   26707 
   26708     `Q'
   26709           A memory operand that can be used as the destination operand
   26710           of an integer store instruction
   26711 
   26712     `R'
   26713           A scaled or unscaled indexed memory operand
   26714 
   26715     `T'
   26716           A memory operand for floating-point loads and stores
   26717 
   26718     `W'
   26719           A register indirect memory operand
   26720 
   26721 _picoChip family--`picochip.h'_
   26722 
   26723     `k'
   26724           Stack register.
   26725 
   26726     `f'
   26727           Pointer register.  A register which can be used to access
   26728           memory without supplying an offset.  Any other register can
   26729           be used to access memory, but will need a constant offset.
   26730           In the case of the offset being zero, it is more efficient to
   26731           use a pointer register, since this reduces code size.
   26732 
   26733     `t'
   26734           A twin register.  A register which may be paired with an
   26735           adjacent register to create a 32-bit register.
   26736 
   26737     `a'
   26738           Any absolute memory address (e.g., symbolic constant, symbolic
   26739           constant + offset).
   26740 
   26741     `I'
   26742           4-bit signed integer.
   26743 
   26744     `J'
   26745           4-bit unsigned integer.
   26746 
   26747     `K'
   26748           8-bit signed integer.
   26749 
   26750     `M'
   26751           Any constant whose absolute value is no greater than 4-bits.
   26752 
   26753     `N'
   26754           10-bit signed integer
   26755 
   26756     `O'
   26757           16-bit signed integer.
   26758 
   26759 
   26760 _PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
   26761 
   26762     `b'
   26763           Address base register
   26764 
   26765     `d'
   26766           Floating point register (containing 64-bit value)
   26767 
   26768     `f'
   26769           Floating point register (containing 32-bit value)
   26770 
   26771     `v'
   26772           Altivec vector register
   26773 
   26774     `wa'
   26775           Any VSX register if the -mvsx option was used or NO_REGS.
   26776 
   26777     `wd'
   26778           VSX vector register to hold vector double data or NO_REGS.
   26779 
   26780     `wf'
   26781           VSX vector register to hold vector float data or NO_REGS.
   26782 
   26783     `wg'
   26784           If `-mmfpgpr' was used, a floating point register or NO_REGS.
   26785 
   26786     `wl'
   26787           Floating point register if the LFIWAX instruction is enabled
   26788           or NO_REGS.
   26789 
   26790     `wm'
   26791           VSX register if direct move instructions are enabled, or
   26792           NO_REGS.
   26793 
   26794     `wn'
   26795           No register (NO_REGS).
   26796 
   26797     `wr'
   26798           General purpose register if 64-bit instructions are enabled
   26799           or NO_REGS.
   26800 
   26801     `ws'
   26802           VSX vector register to hold scalar double values or NO_REGS.
   26803 
   26804     `wt'
   26805           VSX vector register to hold 128 bit integer or NO_REGS.
   26806 
   26807     `wu'
   26808           Altivec register to use for float/32-bit int loads/stores  or
   26809           NO_REGS.
   26810 
   26811     `wv'
   26812           Altivec register to use for double loads/stores  or NO_REGS.
   26813 
   26814     `ww'
   26815           FP or VSX register to perform float operations under `-mvsx'
   26816           or NO_REGS.
   26817 
   26818     `wx'
   26819           Floating point register if the STFIWX instruction is enabled
   26820           or NO_REGS.
   26821 
   26822     `wy'
   26823           VSX vector register to hold scalar float values or NO_REGS.
   26824 
   26825     `wz'
   26826           Floating point register if the LFIWZX instruction is enabled
   26827           or NO_REGS.
   26828 
   26829     `wQ'
   26830           A memory address that will work with the `lq' and `stq'
   26831           instructions.
   26832 
   26833     `h'
   26834           `MQ', `CTR', or `LINK' register
   26835 
   26836     `q'
   26837           `MQ' register
   26838 
   26839     `c'
   26840           `CTR' register
   26841 
   26842     `l'
   26843           `LINK' register
   26844 
   26845     `x'
   26846           `CR' register (condition register) number 0
   26847 
   26848     `y'
   26849           `CR' register (condition register)
   26850 
   26851     `z'
   26852           `XER[CA]' carry bit (part of the XER register)
   26853 
   26854     `I'
   26855           Signed 16-bit constant
   26856 
   26857     `J'
   26858           Unsigned 16-bit constant shifted left 16 bits (use `L'
   26859           instead for `SImode' constants)
   26860 
   26861     `K'
   26862           Unsigned 16-bit constant
   26863 
   26864     `L'
   26865           Signed 16-bit constant shifted left 16 bits
   26866 
   26867     `M'
   26868           Constant larger than 31
   26869 
   26870     `N'
   26871           Exact power of 2
   26872 
   26873     `O'
   26874           Zero
   26875 
   26876     `P'
   26877           Constant whose negation is a signed 16-bit constant
   26878 
   26879     `G'
   26880           Floating point constant that can be loaded into a register
   26881           with one instruction per word
   26882 
   26883     `H'
   26884           Integer/Floating point constant that can be loaded into a
   26885           register using three instructions
   26886 
   26887     `m'
   26888           Memory operand.  Normally, `m' does not allow addresses that
   26889           update the base register.  If `<' or `>' constraint is also
   26890           used, they are allowed and therefore on PowerPC targets in
   26891           that case it is only safe to use `m<>' in an `asm' statement
   26892           if that `asm' statement accesses the operand exactly once.
   26893           The `asm' statement must also use `%U<OPNO>' as a placeholder
   26894           for the "update" flag in the corresponding load or store
   26895           instruction.  For example:
   26896 
   26897                asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
   26898 
   26899           is correct but:
   26900 
   26901                asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
   26902 
   26903           is not.
   26904 
   26905     `es'
   26906           A "stable" memory operand; that is, one which does not
   26907           include any automodification of the base register.  This used
   26908           to be useful when `m' allowed automodification of the base
   26909           register, but as those are now only allowed when `<' or `>'
   26910           is used, `es' is basically the same as `m' without `<' and
   26911           `>'.
   26912 
   26913     `Q'
   26914           Memory operand that is an offset from a register (it is
   26915           usually better to use `m' or `es' in `asm' statements)
   26916 
   26917     `Z'
   26918           Memory operand that is an indexed or indirect from a register
   26919           (it is usually better to use `m' or `es' in `asm' statements)
   26920 
   26921     `R'
   26922           AIX TOC entry
   26923 
   26924     `a'
   26925           Address operand that is an indexed or indirect from a
   26926           register (`p' is preferable for `asm' statements)
   26927 
   26928     `S'
   26929           Constant suitable as a 64-bit mask operand
   26930 
   26931     `T'
   26932           Constant suitable as a 32-bit mask operand
   26933 
   26934     `U'
   26935           System V Release 4 small data area reference
   26936 
   26937     `t'
   26938           AND masks that can be performed by two rldic{l, r}
   26939           instructions
   26940 
   26941     `W'
   26942           Vector constant that does not require memory
   26943 
   26944     `j'
   26945           Vector constant that is all zeros.
   26946 
   26947 
   26948 _Intel 386--`config/i386/constraints.md'_
   26949 
   26950     `R'
   26951           Legacy register--the eight integer registers available on all
   26952           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
   26953 
   26954     `q'
   26955           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
   26956           `c', and `d'; in 64-bit mode, any integer register.
   26957 
   26958     `Q'
   26959           Any register accessible as `Rh': `a', `b', `c', and `d'.
   26960 
   26961     `a'
   26962           The `a' register.
   26963 
   26964     `b'
   26965           The `b' register.
   26966 
   26967     `c'
   26968           The `c' register.
   26969 
   26970     `d'
   26971           The `d' register.
   26972 
   26973     `S'
   26974           The `si' register.
   26975 
   26976     `D'
   26977           The `di' register.
   26978 
   26979     `A'
   26980           The `a' and `d' registers.  This class is used for
   26981           instructions that return double word results in the `ax:dx'
   26982           register pair.  Single word values will be allocated either
   26983           in `ax' or `dx'.  For example on i386 the following
   26984           implements `rdtsc':
   26985 
   26986                unsigned long long rdtsc (void)
   26987                {
   26988                  unsigned long long tick;
   26989                  __asm__ __volatile__("rdtsc":"=A"(tick));
   26990                  return tick;
   26991                }
   26992 
   26993           This is not correct on x86_64 as it would allocate tick in
   26994           either `ax' or `dx'.  You have to use the following variant
   26995           instead:
   26996 
   26997                unsigned long long rdtsc (void)
   26998                {
   26999                  unsigned int tickl, tickh;
   27000                  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
   27001                  return ((unsigned long long)tickh << 32)|tickl;
   27002                }
   27003 
   27004     `f'
   27005           Any 80387 floating-point (stack) register.
   27006 
   27007     `t'
   27008           Top of 80387 floating-point stack (`%st(0)').
   27009 
   27010     `u'
   27011           Second from top of 80387 floating-point stack (`%st(1)').
   27012 
   27013     `y'
   27014           Any MMX register.
   27015 
   27016     `x'
   27017           Any SSE register.
   27018 
   27019     `Yz'
   27020           First SSE register (`%xmm0').
   27021 
   27022     `I'
   27023           Integer constant in the range 0 ... 31, for 32-bit shifts.
   27024 
   27025     `J'
   27026           Integer constant in the range 0 ... 63, for 64-bit shifts.
   27027 
   27028     `K'
   27029           Signed 8-bit integer constant.
   27030 
   27031     `L'
   27032           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
   27033 
   27034     `M'
   27035           0, 1, 2, or 3 (shifts for the `lea' instruction).
   27036 
   27037     `N'
   27038           Unsigned 8-bit integer constant (for `in' and `out'
   27039           instructions).
   27040 
   27041     `G'
   27042           Standard 80387 floating point constant.
   27043 
   27044     `C'
   27045           Standard SSE floating point constant.
   27046 
   27047     `e'
   27048           32-bit signed integer constant, or a symbolic reference known
   27049           to fit that range (for immediate operands in sign-extending
   27050           x86-64 instructions).
   27051 
   27052     `Z'
   27053           32-bit unsigned integer constant, or a symbolic reference
   27054           known to fit that range (for immediate operands in
   27055           zero-extending x86-64 instructions).
   27056 
   27057 
   27058 _Intel IA-64--`config/ia64/ia64.h'_
   27059 
   27060     `a'
   27061           General register `r0' to `r3' for `addl' instruction
   27062 
   27063     `b'
   27064           Branch register
   27065 
   27066     `c'
   27067           Predicate register (`c' as in "conditional")
   27068 
   27069     `d'
   27070           Application register residing in M-unit
   27071 
   27072     `e'
   27073           Application register residing in I-unit
   27074 
   27075     `f'
   27076           Floating-point register
   27077 
   27078     `m'
   27079           Memory operand.  If used together with `<' or `>', the
   27080           operand can have postincrement and postdecrement which
   27081           require printing with `%Pn' on IA-64.
   27082 
   27083     `G'
   27084           Floating-point constant 0.0 or 1.0
   27085 
   27086     `I'
   27087           14-bit signed integer constant
   27088 
   27089     `J'
   27090           22-bit signed integer constant
   27091 
   27092     `K'
   27093           8-bit signed integer constant for logical instructions
   27094 
   27095     `L'
   27096           8-bit adjusted signed integer constant for compare pseudo-ops
   27097 
   27098     `M'
   27099           6-bit unsigned integer constant for shift counts
   27100 
   27101     `N'
   27102           9-bit signed integer constant for load and store
   27103           postincrements
   27104 
   27105     `O'
   27106           The constant zero
   27107 
   27108     `P'
   27109           0 or -1 for `dep' instruction
   27110 
   27111     `Q'
   27112           Non-volatile memory for floating-point loads and stores
   27113 
   27114     `R'
   27115           Integer constant in the range 1 to 4 for `shladd' instruction
   27116 
   27117     `S'
   27118           Memory operand except postincrement and postdecrement.  This
   27119           is now roughly the same as `m' when not used together with `<'
   27120           or `>'.
   27121 
   27122 _FRV--`config/frv/frv.h'_
   27123 
   27124     `a'
   27125           Register in the class `ACC_REGS' (`acc0' to `acc7').
   27126 
   27127     `b'
   27128           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
   27129 
   27130     `c'
   27131           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
   27132           to `icc3').
   27133 
   27134     `d'
   27135           Register in the class `GPR_REGS' (`gr0' to `gr63').
   27136 
   27137     `e'
   27138           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
   27139           registers are excluded not in the class but through the use
   27140           of a machine mode larger than 4 bytes.
   27141 
   27142     `f'
   27143           Register in the class `FPR_REGS' (`fr0' to `fr63').
   27144 
   27145     `h'
   27146           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
   27147           registers are excluded not in the class but through the use
   27148           of a machine mode larger than 4 bytes.
   27149 
   27150     `l'
   27151           Register in the class `LR_REG' (the `lr' register).
   27152 
   27153     `q'
   27154           Register in the class `QUAD_REGS' (`gr2' to `gr63').
   27155           Register numbers not divisible by 4 are excluded not in the
   27156           class but through the use of a machine mode larger than 8
   27157           bytes.
   27158 
   27159     `t'
   27160           Register in the class `ICC_REGS' (`icc0' to `icc3').
   27161 
   27162     `u'
   27163           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
   27164 
   27165     `v'
   27166           Register in the class `ICR_REGS' (`cc4' to `cc7').
   27167 
   27168     `w'
   27169           Register in the class `FCR_REGS' (`cc0' to `cc3').
   27170 
   27171     `x'
   27172           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
   27173           Register numbers not divisible by 4 are excluded not in the
   27174           class but through the use of a machine mode larger than 8
   27175           bytes.
   27176 
   27177     `z'
   27178           Register in the class `SPR_REGS' (`lcr' and `lr').
   27179 
   27180     `A'
   27181           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
   27182 
   27183     `B'
   27184           Register in the class `ACCG_REGS' (`accg0' to `accg7').
   27185 
   27186     `C'
   27187           Register in the class `CR_REGS' (`cc0' to `cc7').
   27188 
   27189     `G'
   27190           Floating point constant zero
   27191 
   27192     `I'
   27193           6-bit signed integer constant
   27194 
   27195     `J'
   27196           10-bit signed integer constant
   27197 
   27198     `L'
   27199           16-bit signed integer constant
   27200 
   27201     `M'
   27202           16-bit unsigned integer constant
   27203 
   27204     `N'
   27205           12-bit signed integer constant that is negative--i.e. in the
   27206           range of -2048 to -1
   27207 
   27208     `O'
   27209           Constant zero
   27210 
   27211     `P'
   27212           12-bit signed integer constant that is greater than
   27213           zero--i.e. in the range of 1 to 2047.
   27214 
   27215 
   27216 _Blackfin family--`config/bfin/constraints.md'_
   27217 
   27218     `a'
   27219           P register
   27220 
   27221     `d'
   27222           D register
   27223 
   27224     `z'
   27225           A call clobbered P register.
   27226 
   27227     `qN'
   27228           A single register.  If N is in the range 0 to 7, the
   27229           corresponding D register.  If it is `A', then the register P0.
   27230 
   27231     `D'
   27232           Even-numbered D register
   27233 
   27234     `W'
   27235           Odd-numbered D register
   27236 
   27237     `e'
   27238           Accumulator register.
   27239 
   27240     `A'
   27241           Even-numbered accumulator register.
   27242 
   27243     `B'
   27244           Odd-numbered accumulator register.
   27245 
   27246     `b'
   27247           I register
   27248 
   27249     `v'
   27250           B register
   27251 
   27252     `f'
   27253           M register
   27254 
   27255     `c'
   27256           Registers used for circular buffering, i.e. I, B, or L
   27257           registers.
   27258 
   27259     `C'
   27260           The CC register.
   27261 
   27262     `t'
   27263           LT0 or LT1.
   27264 
   27265     `k'
   27266           LC0 or LC1.
   27267 
   27268     `u'
   27269           LB0 or LB1.
   27270 
   27271     `x'
   27272           Any D, P, B, M, I or L register.
   27273 
   27274     `y'
   27275           Additional registers typically used only in prologues and
   27276           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
   27277           USP.
   27278 
   27279     `w'
   27280           Any register except accumulators or CC.
   27281 
   27282     `Ksh'
   27283           Signed 16 bit integer (in the range -32768 to 32767)
   27284 
   27285     `Kuh'
   27286           Unsigned 16 bit integer (in the range 0 to 65535)
   27287 
   27288     `Ks7'
   27289           Signed 7 bit integer (in the range -64 to 63)
   27290 
   27291     `Ku7'
   27292           Unsigned 7 bit integer (in the range 0 to 127)
   27293 
   27294     `Ku5'
   27295           Unsigned 5 bit integer (in the range 0 to 31)
   27296 
   27297     `Ks4'
   27298           Signed 4 bit integer (in the range -8 to 7)
   27299 
   27300     `Ks3'
   27301           Signed 3 bit integer (in the range -3 to 4)
   27302 
   27303     `Ku3'
   27304           Unsigned 3 bit integer (in the range 0 to 7)
   27305 
   27306     `PN'
   27307           Constant N, where N is a single-digit constant in the range 0
   27308           to 4.
   27309 
   27310     `PA'
   27311           An integer equal to one of the MACFLAG_XXX constants that is
   27312           suitable for use with either accumulator.
   27313 
   27314     `PB'
   27315           An integer equal to one of the MACFLAG_XXX constants that is
   27316           suitable for use only with accumulator A1.
   27317 
   27318     `M1'
   27319           Constant 255.
   27320 
   27321     `M2'
   27322           Constant 65535.
   27323 
   27324     `J'
   27325           An integer constant with exactly a single bit set.
   27326 
   27327     `L'
   27328           An integer constant with all bits set except exactly one.
   27329 
   27330     `H'
   27331 
   27332     `Q'
   27333           Any SYMBOL_REF.
   27334 
   27335 _M32C--`config/m32c/m32c.c'_
   27336 
   27337     `Rsp'
   27338     `Rfb'
   27339     `Rsb'
   27340           `$sp', `$fb', `$sb'.
   27341 
   27342     `Rcr'
   27343           Any control register, when they're 16 bits wide (nothing if
   27344           control registers are 24 bits wide)
   27345 
   27346     `Rcl'
   27347           Any control register, when they're 24 bits wide.
   27348 
   27349     `R0w'
   27350     `R1w'
   27351     `R2w'
   27352     `R3w'
   27353           $r0, $r1, $r2, $r3.
   27354 
   27355     `R02'
   27356           $r0 or $r2, or $r2r0 for 32 bit values.
   27357 
   27358     `R13'
   27359           $r1 or $r3, or $r3r1 for 32 bit values.
   27360 
   27361     `Rdi'
   27362           A register that can hold a 64 bit value.
   27363 
   27364     `Rhl'
   27365           $r0 or $r1 (registers with addressable high/low bytes)
   27366 
   27367     `R23'
   27368           $r2 or $r3
   27369 
   27370     `Raa'
   27371           Address registers
   27372 
   27373     `Raw'
   27374           Address registers when they're 16 bits wide.
   27375 
   27376     `Ral'
   27377           Address registers when they're 24 bits wide.
   27378 
   27379     `Rqi'
   27380           Registers that can hold QI values.
   27381 
   27382     `Rad'
   27383           Registers that can be used with displacements ($a0, $a1, $sb).
   27384 
   27385     `Rsi'
   27386           Registers that can hold 32 bit values.
   27387 
   27388     `Rhi'
   27389           Registers that can hold 16 bit values.
   27390 
   27391     `Rhc'
   27392           Registers chat can hold 16 bit values, including all control
   27393           registers.
   27394 
   27395     `Rra'
   27396           $r0 through R1, plus $a0 and $a1.
   27397 
   27398     `Rfl'
   27399           The flags register.
   27400 
   27401     `Rmm'
   27402           The memory-based pseudo-registers $mem0 through $mem15.
   27403 
   27404     `Rpi'
   27405           Registers that can hold pointers (16 bit registers for r8c,
   27406           m16c; 24 bit registers for m32cm, m32c).
   27407 
   27408     `Rpa'
   27409           Matches multiple registers in a PARALLEL to form a larger
   27410           register.  Used to match function return values.
   27411 
   27412     `Is3'
   27413           -8 ... 7
   27414 
   27415     `IS1'
   27416           -128 ... 127
   27417 
   27418     `IS2'
   27419           -32768 ... 32767
   27420 
   27421     `IU2'
   27422           0 ... 65535
   27423 
   27424     `In4'
   27425           -8 ... -1 or 1 ... 8
   27426 
   27427     `In5'
   27428           -16 ... -1 or 1 ... 16
   27429 
   27430     `In6'
   27431           -32 ... -1 or 1 ... 32
   27432 
   27433     `IM2'
   27434           -65536 ... -1
   27435 
   27436     `Ilb'
   27437           An 8 bit value with exactly one bit set.
   27438 
   27439     `Ilw'
   27440           A 16 bit value with exactly one bit set.
   27441 
   27442     `Sd'
   27443           The common src/dest memory addressing modes.
   27444 
   27445     `Sa'
   27446           Memory addressed using $a0 or $a1.
   27447 
   27448     `Si'
   27449           Memory addressed with immediate addresses.
   27450 
   27451     `Ss'
   27452           Memory addressed using the stack pointer ($sp).
   27453 
   27454     `Sf'
   27455           Memory addressed using the frame base register ($fb).
   27456 
   27457     `Ss'
   27458           Memory addressed using the small base register ($sb).
   27459 
   27460     `S1'
   27461           $r1h
   27462 
   27463 _MeP--`config/mep/constraints.md'_
   27464 
   27465     `a'
   27466           The $sp register.
   27467 
   27468     `b'
   27469           The $tp register.
   27470 
   27471     `c'
   27472           Any control register.
   27473 
   27474     `d'
   27475           Either the $hi or the $lo register.
   27476 
   27477     `em'
   27478           Coprocessor registers that can be directly loaded ($c0-$c15).
   27479 
   27480     `ex'
   27481           Coprocessor registers that can be moved to each other.
   27482 
   27483     `er'
   27484           Coprocessor registers that can be moved to core registers.
   27485 
   27486     `h'
   27487           The $hi register.
   27488 
   27489     `j'
   27490           The $rpc register.
   27491 
   27492     `l'
   27493           The $lo register.
   27494 
   27495     `t'
   27496           Registers which can be used in $tp-relative addressing.
   27497 
   27498     `v'
   27499           The $gp register.
   27500 
   27501     `x'
   27502           The coprocessor registers.
   27503 
   27504     `y'
   27505           The coprocessor control registers.
   27506 
   27507     `z'
   27508           The $0 register.
   27509 
   27510     `A'
   27511           User-defined register set A.
   27512 
   27513     `B'
   27514           User-defined register set B.
   27515 
   27516     `C'
   27517           User-defined register set C.
   27518 
   27519     `D'
   27520           User-defined register set D.
   27521 
   27522     `I'
   27523           Offsets for $gp-rel addressing.
   27524 
   27525     `J'
   27526           Constants that can be used directly with boolean insns.
   27527 
   27528     `K'
   27529           Constants that can be moved directly to registers.
   27530 
   27531     `L'
   27532           Small constants that can be added to registers.
   27533 
   27534     `M'
   27535           Long shift counts.
   27536 
   27537     `N'
   27538           Small constants that can be compared to registers.
   27539 
   27540     `O'
   27541           Constants that can be loaded into the top half of registers.
   27542 
   27543     `S'
   27544           Signed 8-bit immediates.
   27545 
   27546     `T'
   27547           Symbols encoded for $tp-rel or $gp-rel addressing.
   27548 
   27549     `U'
   27550           Non-constant addresses for loading/saving coprocessor
   27551           registers.
   27552 
   27553     `W'
   27554           The top half of a symbol's value.
   27555 
   27556     `Y'
   27557           A register indirect address without offset.
   27558 
   27559     `Z'
   27560           Symbolic references to the control bus.
   27561 
   27562 
   27563 _MicroBlaze--`config/microblaze/constraints.md'_
   27564 
   27565     `d'
   27566           A general register (`r0' to `r31').
   27567 
   27568     `z'
   27569           A status register (`rmsr', `$fcc1' to `$fcc7').
   27570 
   27571 
   27572 _MIPS--`config/mips/constraints.md'_
   27573 
   27574     `d'
   27575           An address register.  This is equivalent to `r' unless
   27576           generating MIPS16 code.
   27577 
   27578     `f'
   27579           A floating-point register (if available).
   27580 
   27581     `h'
   27582           Formerly the `hi' register.  This constraint is no longer
   27583           supported.
   27584 
   27585     `l'
   27586           The `lo' register.  Use this register to store values that are
   27587           no bigger than a word.
   27588 
   27589     `x'
   27590           The concatenated `hi' and `lo' registers.  Use this register
   27591           to store doubleword values.
   27592 
   27593     `c'
   27594           A register suitable for use in an indirect jump.  This will
   27595           always be `$25' for `-mabicalls'.
   27596 
   27597     `v'
   27598           Register `$3'.  Do not use this constraint in new code; it is
   27599           retained only for compatibility with glibc.
   27600 
   27601     `y'
   27602           Equivalent to `r'; retained for backwards compatibility.
   27603 
   27604     `z'
   27605           A floating-point condition code register.
   27606 
   27607     `I'
   27608           A signed 16-bit constant (for arithmetic instructions).
   27609 
   27610     `J'
   27611           Integer zero.
   27612 
   27613     `K'
   27614           An unsigned 16-bit constant (for logic instructions).
   27615 
   27616     `L'
   27617           A signed 32-bit constant in which the lower 16 bits are zero.
   27618           Such constants can be loaded using `lui'.
   27619 
   27620     `M'
   27621           A constant that cannot be loaded using `lui', `addiu' or
   27622           `ori'.
   27623 
   27624     `N'
   27625           A constant in the range -65535 to -1 (inclusive).
   27626 
   27627     `O'
   27628           A signed 15-bit constant.
   27629 
   27630     `P'
   27631           A constant in the range 1 to 65535 (inclusive).
   27632 
   27633     `G'
   27634           Floating-point zero.
   27635 
   27636     `R'
   27637           An address that can be used in a non-macro load or store.
   27638 
   27639 _Motorola 680x0--`config/m68k/constraints.md'_
   27640 
   27641     `a'
   27642           Address register
   27643 
   27644     `d'
   27645           Data register
   27646 
   27647     `f'
   27648           68881 floating-point register, if available
   27649 
   27650     `I'
   27651           Integer in the range 1 to 8
   27652 
   27653     `J'
   27654           16-bit signed number
   27655 
   27656     `K'
   27657           Signed number whose magnitude is greater than 0x80
   27658 
   27659     `L'
   27660           Integer in the range -8 to -1
   27661 
   27662     `M'
   27663           Signed number whose magnitude is greater than 0x100
   27664 
   27665     `N'
   27666           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
   27667 
   27668     `O'
   27669           16 (for rotate using swap)
   27670 
   27671     `P'
   27672           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
   27673 
   27674     `R'
   27675           Numbers that mov3q can handle
   27676 
   27677     `G'
   27678           Floating point constant that is not a 68881 constant
   27679 
   27680     `S'
   27681           Operands that satisfy 'm' when -mpcrel is in effect
   27682 
   27683     `T'
   27684           Operands that satisfy 's' when -mpcrel is not in effect
   27685 
   27686     `Q'
   27687           Address register indirect addressing mode
   27688 
   27689     `U'
   27690           Register offset addressing
   27691 
   27692     `W'
   27693           const_call_operand
   27694 
   27695     `Cs'
   27696           symbol_ref or const
   27697 
   27698     `Ci'
   27699           const_int
   27700 
   27701     `C0'
   27702           const_int 0
   27703 
   27704     `Cj'
   27705           Range of signed numbers that don't fit in 16 bits
   27706 
   27707     `Cmvq'
   27708           Integers valid for mvq
   27709 
   27710     `Capsw'
   27711           Integers valid for a moveq followed by a swap
   27712 
   27713     `Cmvz'
   27714           Integers valid for mvz
   27715 
   27716     `Cmvs'
   27717           Integers valid for mvs
   27718 
   27719     `Ap'
   27720           push_operand
   27721 
   27722     `Ac'
   27723           Non-register operands allowed in clr
   27724 
   27725 
   27726 _Moxie--`config/moxie/constraints.md'_
   27727 
   27728     `A'
   27729           An absolute address
   27730 
   27731     `B'
   27732           An offset address
   27733 
   27734     `W'
   27735           A register indirect memory operand
   27736 
   27737     `I'
   27738           A constant in the range of 0 to 255.
   27739 
   27740     `N'
   27741           A constant in the range of 0 to -255.
   27742 
   27743 
   27744 _PDP-11--`config/pdp11/constraints.md'_
   27745 
   27746     `a'
   27747           Floating point registers AC0 through AC3.  These can be
   27748           loaded from/to memory with a single instruction.
   27749 
   27750     `d'
   27751           Odd numbered general registers (R1, R3, R5).  These are used
   27752           for 16-bit multiply operations.
   27753 
   27754     `f'
   27755           Any of the floating point registers (AC0 through AC5).
   27756 
   27757     `G'
   27758           Floating point constant 0.
   27759 
   27760     `I'
   27761           An integer constant that fits in 16 bits.
   27762 
   27763     `J'
   27764           An integer constant whose low order 16 bits are zero.
   27765 
   27766     `K'
   27767           An integer constant that does not meet the constraints for
   27768           codes `I' or `J'.
   27769 
   27770     `L'
   27771           The integer constant 1.
   27772 
   27773     `M'
   27774           The integer constant -1.
   27775 
   27776     `N'
   27777           The integer constant 0.
   27778 
   27779     `O'
   27780           Integer constants -4 through -1 and 1 through 4; shifts by
   27781           these amounts are handled as multiple single-bit shifts
   27782           rather than a single variable-length shift.
   27783 
   27784     `Q'
   27785           A memory reference which requires an additional word (address
   27786           or offset) after the opcode.
   27787 
   27788     `R'
   27789           A memory reference that is encoded within the opcode.
   27790 
   27791 
   27792 _RL78--`config/rl78/constraints.md'_
   27793 
   27794     `Int3'
   27795           An integer constant in the range 1 ... 7.
   27796 
   27797     `Int8'
   27798           An integer constant in the range 0 ... 255.
   27799 
   27800     `J'
   27801           An integer constant in the range -255 ... 0
   27802 
   27803     `K'
   27804           The integer constant 1.
   27805 
   27806     `L'
   27807           The integer constant -1.
   27808 
   27809     `M'
   27810           The integer constant 0.
   27811 
   27812     `N'
   27813           The integer constant 2.
   27814 
   27815     `O'
   27816           The integer constant -2.
   27817 
   27818     `P'
   27819           An integer constant in the range 1 ... 15.
   27820 
   27821     `Qbi'
   27822           The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
   27823 
   27824     `Qsc'
   27825           The synthetic compare types-gt, lt, ge, and le.
   27826 
   27827     `Wab'
   27828           A memory reference with an absolute address.
   27829 
   27830     `Wbc'
   27831           A memory reference using `BC' as a base register, with an
   27832           optional offset.
   27833 
   27834     `Wca'
   27835           A memory reference using `AX', `BC', `DE', or `HL' for the
   27836           address, for calls.
   27837 
   27838     `Wcv'
   27839           A memory reference using any 16-bit register pair for the
   27840           address, for calls.
   27841 
   27842     `Wd2'
   27843           A memory reference using `DE' as a base register, with an
   27844           optional offset.
   27845 
   27846     `Wde'
   27847           A memory reference using `DE' as a base register, without any
   27848           offset.
   27849 
   27850     `Wfr'
   27851           Any memory reference to an address in the far address space.
   27852 
   27853     `Wh1'
   27854           A memory reference using `HL' as a base register, with an
   27855           optional one-byte offset.
   27856 
   27857     `Whb'
   27858           A memory reference using `HL' as a base register, with `B' or
   27859           `C' as the index register.
   27860 
   27861     `Whl'
   27862           A memory reference using `HL' as a base register, without any
   27863           offset.
   27864 
   27865     `Ws1'
   27866           A memory reference using `SP' as a base register, with an
   27867           optional one-byte offset.
   27868 
   27869     `Y'
   27870           Any memory reference to an address in the near address space.
   27871 
   27872     `A'
   27873           The `AX' register.
   27874 
   27875     `B'
   27876           The `BC' register.
   27877 
   27878     `D'
   27879           The `DE' register.
   27880 
   27881     `R'
   27882           `A' through `L' registers.
   27883 
   27884     `S'
   27885           The `SP' register.
   27886 
   27887     `T'
   27888           The `HL' register.
   27889 
   27890     `Z08W'
   27891           The 16-bit `R8' register.
   27892 
   27893     `Z10W'
   27894           The 16-bit `R10' register.
   27895 
   27896     `Zint'
   27897           The registers reserved for interrupts (`R24' to `R31').
   27898 
   27899     `a'
   27900           The `A' register.
   27901 
   27902     `b'
   27903           The `B' register.
   27904 
   27905     `c'
   27906           The `C' register.
   27907 
   27908     `d'
   27909           The `D' register.
   27910 
   27911     `e'
   27912           The `E' register.
   27913 
   27914     `h'
   27915           The `H' register.
   27916 
   27917     `l'
   27918           The `L' register.
   27919 
   27920     `v'
   27921           The virtual registers.
   27922 
   27923     `w'
   27924           The `PSW' register.
   27925 
   27926     `x'
   27927           The `X' register.
   27928 
   27929 
   27930 _RX--`config/rx/constraints.md'_
   27931 
   27932     `Q'
   27933           An address which does not involve register indirect
   27934           addressing or pre/post increment/decrement addressing.
   27935 
   27936     `Symbol'
   27937           A symbol reference.
   27938 
   27939     `Int08'
   27940           A constant in the range -256 to 255, inclusive.
   27941 
   27942     `Sint08'
   27943           A constant in the range -128 to 127, inclusive.
   27944 
   27945     `Sint16'
   27946           A constant in the range -32768 to 32767, inclusive.
   27947 
   27948     `Sint24'
   27949           A constant in the range -8388608 to 8388607, inclusive.
   27950 
   27951     `Uint04'
   27952           A constant in the range 0 to 15, inclusive.
   27953 
   27954 
   27955 _SPARC--`config/sparc/sparc.h'_
   27956 
   27957     `f'
   27958           Floating-point register on the SPARC-V8 architecture and
   27959           lower floating-point register on the SPARC-V9 architecture.
   27960 
   27961     `e'
   27962           Floating-point register.  It is equivalent to `f' on the
   27963           SPARC-V8 architecture and contains both lower and upper
   27964           floating-point registers on the SPARC-V9 architecture.
   27965 
   27966     `c'
   27967           Floating-point condition code register.
   27968 
   27969     `d'
   27970           Lower floating-point register.  It is only valid on the
   27971           SPARC-V9 architecture when the Visual Instruction Set is
   27972           available.
   27973 
   27974     `b'
   27975           Floating-point register.  It is only valid on the SPARC-V9
   27976           architecture when the Visual Instruction Set is available.
   27977 
   27978     `h'
   27979           64-bit global or out register for the SPARC-V8+ architecture.
   27980 
   27981     `C'
   27982           The constant all-ones, for floating-point.
   27983 
   27984     `A'
   27985           Signed 5-bit constant
   27986 
   27987     `D'
   27988           A vector constant
   27989 
   27990     `I'
   27991           Signed 13-bit constant
   27992 
   27993     `J'
   27994           Zero
   27995 
   27996     `K'
   27997           32-bit constant with the low 12 bits clear (a constant that
   27998           can be loaded with the `sethi' instruction)
   27999 
   28000     `L'
   28001           A constant in the range supported by `movcc' instructions
   28002           (11-bit signed immediate)
   28003 
   28004     `M'
   28005           A constant in the range supported by `movrcc' instructions
   28006           (10-bit signed immediate)
   28007 
   28008     `N'
   28009           Same as `K', except that it verifies that bits that are not
   28010           in the lower 32-bit range are all zero.  Must be used instead
   28011           of `K' for modes wider than `SImode'
   28012 
   28013     `O'
   28014           The constant 4096
   28015 
   28016     `G'
   28017           Floating-point zero
   28018 
   28019     `H'
   28020           Signed 13-bit constant, sign-extended to 32 or 64 bits
   28021 
   28022     `P'
   28023           The constant -1
   28024 
   28025     `Q'
   28026           Floating-point constant whose integral representation can be
   28027           moved into an integer register using a single sethi
   28028           instruction
   28029 
   28030     `R'
   28031           Floating-point constant whose integral representation can be
   28032           moved into an integer register using a single mov instruction
   28033 
   28034     `S'
   28035           Floating-point constant whose integral representation can be
   28036           moved into an integer register using a high/lo_sum
   28037           instruction sequence
   28038 
   28039     `T'
   28040           Memory address aligned to an 8-byte boundary
   28041 
   28042     `U'
   28043           Even register
   28044 
   28045     `W'
   28046           Memory address for `e' constraint registers
   28047 
   28048     `w'
   28049           Memory address with only a base register
   28050 
   28051     `Y'
   28052           Vector zero
   28053 
   28054 
   28055 _SPU--`config/spu/spu.h'_
   28056 
   28057     `a'
   28058           An immediate which can be loaded with the il/ila/ilh/ilhu
   28059           instructions.  const_int is treated as a 64 bit value.
   28060 
   28061     `c'
   28062           An immediate for and/xor/or instructions.  const_int is
   28063           treated as a 64 bit value.
   28064 
   28065     `d'
   28066           An immediate for the `iohl' instruction.  const_int is
   28067           treated as a 64 bit value.
   28068 
   28069     `f'
   28070           An immediate which can be loaded with `fsmbi'.
   28071 
   28072     `A'
   28073           An immediate which can be loaded with the il/ila/ilh/ilhu
   28074           instructions.  const_int is treated as a 32 bit value.
   28075 
   28076     `B'
   28077           An immediate for most arithmetic instructions.  const_int is
   28078           treated as a 32 bit value.
   28079 
   28080     `C'
   28081           An immediate for and/xor/or instructions.  const_int is
   28082           treated as a 32 bit value.
   28083 
   28084     `D'
   28085           An immediate for the `iohl' instruction.  const_int is
   28086           treated as a 32 bit value.
   28087 
   28088     `I'
   28089           A constant in the range [-64, 63] for shift/rotate
   28090           instructions.
   28091 
   28092     `J'
   28093           An unsigned 7-bit constant for conversion/nop/channel
   28094           instructions.
   28095 
   28096     `K'
   28097           A signed 10-bit constant for most arithmetic instructions.
   28098 
   28099     `M'
   28100           A signed 16 bit immediate for `stop'.
   28101 
   28102     `N'
   28103           An unsigned 16-bit constant for `iohl' and `fsmbi'.
   28104 
   28105     `O'
   28106           An unsigned 7-bit constant whose 3 least significant bits are
   28107           0.
   28108 
   28109     `P'
   28110           An unsigned 3-bit constant for 16-byte rotates and shifts
   28111 
   28112     `R'
   28113           Call operand, reg, for indirect calls
   28114 
   28115     `S'
   28116           Call operand, symbol, for relative calls.
   28117 
   28118     `T'
   28119           Call operand, const_int, for absolute calls.
   28120 
   28121     `U'
   28122           An immediate which can be loaded with the il/ila/ilh/ilhu
   28123           instructions.  const_int is sign extended to 128 bit.
   28124 
   28125     `W'
   28126           An immediate for shift and rotate instructions.  const_int is
   28127           treated as a 32 bit value.
   28128 
   28129     `Y'
   28130           An immediate for and/xor/or instructions.  const_int is sign
   28131           extended as a 128 bit.
   28132 
   28133     `Z'
   28134           An immediate for the `iohl' instruction.  const_int is sign
   28135           extended to 128 bit.
   28136 
   28137 
   28138 _S/390 and zSeries--`config/s390/s390.h'_
   28139 
   28140     `a'
   28141           Address register (general purpose register except r0)
   28142 
   28143     `c'
   28144           Condition code register
   28145 
   28146     `d'
   28147           Data register (arbitrary general purpose register)
   28148 
   28149     `f'
   28150           Floating-point register
   28151 
   28152     `I'
   28153           Unsigned 8-bit constant (0-255)
   28154 
   28155     `J'
   28156           Unsigned 12-bit constant (0-4095)
   28157 
   28158     `K'
   28159           Signed 16-bit constant (-32768-32767)
   28160 
   28161     `L'
   28162           Value appropriate as displacement.
   28163          `(0..4095)'
   28164                for short displacement
   28165 
   28166          `(-524288..524287)'
   28167                for long displacement
   28168 
   28169     `M'
   28170           Constant integer with a value of 0x7fffffff.
   28171 
   28172     `N'
   28173           Multiple letter constraint followed by 4 parameter letters.
   28174          `0..9:'
   28175                number of the part counting from most to least
   28176                significant
   28177 
   28178          `H,Q:'
   28179                mode of the part
   28180 
   28181          `D,S,H:'
   28182                mode of the containing operand
   28183 
   28184          `0,F:'
   28185                value of the other parts (F--all bits set)
   28186           The constraint matches if the specified part of a constant
   28187           has a value different from its other parts.
   28188 
   28189     `Q'
   28190           Memory reference without index register and with short
   28191           displacement.
   28192 
   28193     `R'
   28194           Memory reference with index register and short displacement.
   28195 
   28196     `S'
   28197           Memory reference without index register but with long
   28198           displacement.
   28199 
   28200     `T'
   28201           Memory reference with index register and long displacement.
   28202 
   28203     `U'
   28204           Pointer with short displacement.
   28205 
   28206     `W'
   28207           Pointer with long displacement.
   28208 
   28209     `Y'
   28210           Shift count operand.
   28211 
   28212 
   28213 _Score family--`config/score/score.h'_
   28214 
   28215     `d'
   28216           Registers from r0 to r32.
   28217 
   28218     `e'
   28219           Registers from r0 to r16.
   28220 
   28221     `t'
   28222           r8--r11 or r22--r27 registers.
   28223 
   28224     `h'
   28225           hi register.
   28226 
   28227     `l'
   28228           lo register.
   28229 
   28230     `x'
   28231           hi + lo register.
   28232 
   28233     `q'
   28234           cnt register.
   28235 
   28236     `y'
   28237           lcb register.
   28238 
   28239     `z'
   28240           scb register.
   28241 
   28242     `a'
   28243           cnt + lcb + scb register.
   28244 
   28245     `c'
   28246           cr0--cr15 register.
   28247 
   28248     `b'
   28249           cp1 registers.
   28250 
   28251     `f'
   28252           cp2 registers.
   28253 
   28254     `i'
   28255           cp3 registers.
   28256 
   28257     `j'
   28258           cp1 + cp2 + cp3 registers.
   28259 
   28260     `I'
   28261           High 16-bit constant (32-bit constant with 16 LSBs zero).
   28262 
   28263     `J'
   28264           Unsigned 5 bit integer (in the range 0 to 31).
   28265 
   28266     `K'
   28267           Unsigned 16 bit integer (in the range 0 to 65535).
   28268 
   28269     `L'
   28270           Signed 16 bit integer (in the range -32768 to 32767).
   28271 
   28272     `M'
   28273           Unsigned 14 bit integer (in the range 0 to 16383).
   28274 
   28275     `N'
   28276           Signed 14 bit integer (in the range -8192 to 8191).
   28277 
   28278     `Z'
   28279           Any SYMBOL_REF.
   28280 
   28281 _Xstormy16--`config/stormy16/stormy16.h'_
   28282 
   28283     `a'
   28284           Register r0.
   28285 
   28286     `b'
   28287           Register r1.
   28288 
   28289     `c'
   28290           Register r2.
   28291 
   28292     `d'
   28293           Register r8.
   28294 
   28295     `e'
   28296           Registers r0 through r7.
   28297 
   28298     `t'
   28299           Registers r0 and r1.
   28300 
   28301     `y'
   28302           The carry register.
   28303 
   28304     `z'
   28305           Registers r8 and r9.
   28306 
   28307     `I'
   28308           A constant between 0 and 3 inclusive.
   28309 
   28310     `J'
   28311           A constant that has exactly one bit set.
   28312 
   28313     `K'
   28314           A constant that has exactly one bit clear.
   28315 
   28316     `L'
   28317           A constant between 0 and 255 inclusive.
   28318 
   28319     `M'
   28320           A constant between -255 and 0 inclusive.
   28321 
   28322     `N'
   28323           A constant between -3 and 0 inclusive.
   28324 
   28325     `O'
   28326           A constant between 1 and 4 inclusive.
   28327 
   28328     `P'
   28329           A constant between -4 and -1 inclusive.
   28330 
   28331     `Q'
   28332           A memory reference that is a stack push.
   28333 
   28334     `R'
   28335           A memory reference that is a stack pop.
   28336 
   28337     `S'
   28338           A memory reference that refers to a constant address of known
   28339           value.
   28340 
   28341     `T'
   28342           The register indicated by Rx (not implemented yet).
   28343 
   28344     `U'
   28345           A constant that is not between 2 and 15 inclusive.
   28346 
   28347     `Z'
   28348           The constant 0.
   28349 
   28350 
   28351 _TI C6X family--`config/c6x/constraints.md'_
   28352 
   28353     `a'
   28354           Register file A (A0-A31).
   28355 
   28356     `b'
   28357           Register file B (B0-B31).
   28358 
   28359     `A'
   28360           Predicate registers in register file A (A0-A2 on C64X and
   28361           higher, A1 and A2 otherwise).
   28362 
   28363     `B'
   28364           Predicate registers in register file B (B0-B2).
   28365 
   28366     `C'
   28367           A call-used register in register file B (B0-B9, B16-B31).
   28368 
   28369     `Da'
   28370           Register file A, excluding predicate registers (A3-A31, plus
   28371           A0 if not C64X or higher).
   28372 
   28373     `Db'
   28374           Register file B, excluding predicate registers (B3-B31).
   28375 
   28376     `Iu4'
   28377           Integer constant in the range 0 ... 15.
   28378 
   28379     `Iu5'
   28380           Integer constant in the range 0 ... 31.
   28381 
   28382     `In5'
   28383           Integer constant in the range -31 ... 0.
   28384 
   28385     `Is5'
   28386           Integer constant in the range -16 ... 15.
   28387 
   28388     `I5x'
   28389           Integer constant that can be the operand of an ADDA or a SUBA
   28390           insn.
   28391 
   28392     `IuB'
   28393           Integer constant in the range 0 ... 65535.
   28394 
   28395     `IsB'
   28396           Integer constant in the range -32768 ... 32767.
   28397 
   28398     `IsC'
   28399           Integer constant in the range -2^20 ... 2^20 - 1.
   28400 
   28401     `Jc'
   28402           Integer constant that is a valid mask for the clr instruction.
   28403 
   28404     `Js'
   28405           Integer constant that is a valid mask for the set instruction.
   28406 
   28407     `Q'
   28408           Memory location with A base register.
   28409 
   28410     `R'
   28411           Memory location with B base register.
   28412 
   28413     `Z'
   28414           Register B14 (aka DP).
   28415 
   28416 
   28417 _TILE-Gx--`config/tilegx/constraints.md'_
   28418 
   28419     `R00'
   28420     `R01'
   28421     `R02'
   28422     `R03'
   28423     `R04'
   28424     `R05'
   28425     `R06'
   28426     `R07'
   28427     `R08'
   28428     `R09'
   28429     `R10'
   28430           Each of these represents a register constraint for an
   28431           individual register, from r0 to r10.
   28432 
   28433     `I'
   28434           Signed 8-bit integer constant.
   28435 
   28436     `J'
   28437           Signed 16-bit integer constant.
   28438 
   28439     `K'
   28440           Unsigned 16-bit integer constant.
   28441 
   28442     `L'
   28443           Integer constant that fits in one signed byte when
   28444           incremented by one (-129 ... 126).
   28445 
   28446     `m'
   28447           Memory operand.  If used together with `<' or `>', the
   28448           operand can have postincrement which requires printing with
   28449           `%In' and `%in' on TILE-Gx.  For example:
   28450 
   28451                asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
   28452 
   28453     `M'
   28454           A bit mask suitable for the BFINS instruction.
   28455 
   28456     `N'
   28457           Integer constant that is a byte tiled out eight times.
   28458 
   28459     `O'
   28460           The integer zero constant.
   28461 
   28462     `P'
   28463           Integer constant that is a sign-extended byte tiled out as
   28464           four shorts.
   28465 
   28466     `Q'
   28467           Integer constant that fits in one signed byte when incremented
   28468           (-129 ... 126), but excluding -1.
   28469 
   28470     `S'
   28471           Integer constant that has all 1 bits consecutive and starting
   28472           at bit 0.
   28473 
   28474     `T'
   28475           A 16-bit fragment of a got, tls, or pc-relative reference.
   28476 
   28477     `U'
   28478           Memory operand except postincrement.  This is roughly the
   28479           same as `m' when not used together with `<' or `>'.
   28480 
   28481     `W'
   28482           An 8-element vector constant with identical elements.
   28483 
   28484     `Y'
   28485           A 4-element vector constant with identical elements.
   28486 
   28487     `Z0'
   28488           The integer constant 0xffffffff.
   28489 
   28490     `Z1'
   28491           The integer constant 0xffffffff00000000.
   28492 
   28493 
   28494 _TILEPro--`config/tilepro/constraints.md'_
   28495 
   28496     `R00'
   28497     `R01'
   28498     `R02'
   28499     `R03'
   28500     `R04'
   28501     `R05'
   28502     `R06'
   28503     `R07'
   28504     `R08'
   28505     `R09'
   28506     `R10'
   28507           Each of these represents a register constraint for an
   28508           individual register, from r0 to r10.
   28509 
   28510     `I'
   28511           Signed 8-bit integer constant.
   28512 
   28513     `J'
   28514           Signed 16-bit integer constant.
   28515 
   28516     `K'
   28517           Nonzero integer constant with low 16 bits zero.
   28518 
   28519     `L'
   28520           Integer constant that fits in one signed byte when
   28521           incremented by one (-129 ... 126).
   28522 
   28523     `m'
   28524           Memory operand.  If used together with `<' or `>', the
   28525           operand can have postincrement which requires printing with
   28526           `%In' and `%in' on TILEPro.  For example:
   28527 
   28528                asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
   28529 
   28530     `M'
   28531           A bit mask suitable for the MM instruction.
   28532 
   28533     `N'
   28534           Integer constant that is a byte tiled out four times.
   28535 
   28536     `O'
   28537           The integer zero constant.
   28538 
   28539     `P'
   28540           Integer constant that is a sign-extended byte tiled out as
   28541           two shorts.
   28542 
   28543     `Q'
   28544           Integer constant that fits in one signed byte when incremented
   28545           (-129 ... 126), but excluding -1.
   28546 
   28547     `T'
   28548           A symbolic operand, or a 16-bit fragment of a got, tls, or
   28549           pc-relative reference.
   28550 
   28551     `U'
   28552           Memory operand except postincrement.  This is roughly the
   28553           same as `m' when not used together with `<' or `>'.
   28554 
   28555     `W'
   28556           A 4-element vector constant with identical elements.
   28557 
   28558     `Y'
   28559           A 2-element vector constant with identical elements.
   28560 
   28561 
   28562 _Xtensa--`config/xtensa/constraints.md'_
   28563 
   28564     `a'
   28565           General-purpose 32-bit register
   28566 
   28567     `b'
   28568           One-bit boolean register
   28569 
   28570     `A'
   28571           MAC16 40-bit accumulator register
   28572 
   28573     `I'
   28574           Signed 12-bit integer constant, for use in MOVI instructions
   28575 
   28576     `J'
   28577           Signed 8-bit integer constant, for use in ADDI instructions
   28578 
   28579     `K'
   28580           Integer constant valid for BccI instructions
   28581 
   28582     `L'
   28583           Unsigned constant valid for BccUI instructions
   28584 
   28585 
   28586 
   28587 
   28588 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
   28589 
   28590 6.43 Controlling Names Used in Assembler Code
   28591 =============================================
   28592 
   28593 You can specify the name to be used in the assembler code for a C
   28594 function or variable by writing the `asm' (or `__asm__') keyword after
   28595 the declarator as follows:
   28596 
   28597      int foo asm ("myfoo") = 2;
   28598 
   28599 This specifies that the name to be used for the variable `foo' in the
   28600 assembler code should be `myfoo' rather than the usual `_foo'.
   28601 
   28602  On systems where an underscore is normally prepended to the name of a C
   28603 function or variable, this feature allows you to define names for the
   28604 linker that do not start with an underscore.
   28605 
   28606  It does not make sense to use this feature with a non-static local
   28607 variable since such variables do not have assembler names.  If you are
   28608 trying to put the variable in a particular register, see *note Explicit
   28609 Reg Vars::.  GCC presently accepts such code with a warning, but will
   28610 probably be changed to issue an error, rather than a warning, in the
   28611 future.
   28612 
   28613  You cannot use `asm' in this way in a function _definition_; but you
   28614 can get the same effect by writing a declaration for the function
   28615 before its definition and putting `asm' there, like this:
   28616 
   28617      extern func () asm ("FUNC");
   28618 
   28619      func (x, y)
   28620           int x, y;
   28621      /* ... */
   28622 
   28623  It is up to you to make sure that the assembler names you choose do not
   28624 conflict with any other assembler symbols.  Also, you must not use a
   28625 register name; that would produce completely invalid assembler code.
   28626 GCC does not as yet have the ability to store static variables in
   28627 registers.  Perhaps that will be added.
   28628 
   28629 
   28630 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
   28631 
   28632 6.44 Variables in Specified Registers
   28633 =====================================
   28634 
   28635 GNU C allows you to put a few global variables into specified hardware
   28636 registers.  You can also specify the register in which an ordinary
   28637 register variable should be allocated.
   28638 
   28639    * Global register variables reserve registers throughout the program.
   28640      This may be useful in programs such as programming language
   28641      interpreters that have a couple of global variables that are
   28642      accessed very often.
   28643 
   28644    * Local register variables in specific registers do not reserve the
   28645      registers, except at the point where they are used as input or
   28646      output operands in an `asm' statement and the `asm' statement
   28647      itself is not deleted.  The compiler's data flow analysis is
   28648      capable of determining where the specified registers contain live
   28649      values, and where they are available for other uses.  Stores into
   28650      local register variables may be deleted when they appear to be
   28651      dead according to dataflow analysis.  References to local register
   28652      variables may be deleted or moved or simplified.
   28653 
   28654      These local variables are sometimes convenient for use with the
   28655      extended `asm' feature (*note Extended Asm::), if you want to
   28656      write one output of the assembler instruction directly into a
   28657      particular register.  (This works provided the register you
   28658      specify fits the constraints specified for that operand in the
   28659      `asm'.)
   28660 
   28661 * Menu:
   28662 
   28663 * Global Reg Vars::
   28664 * Local Reg Vars::
   28665 
   28666 
   28667 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
   28668 
   28669 6.44.1 Defining Global Register Variables
   28670 -----------------------------------------
   28671 
   28672 You can define a global register variable in GNU C like this:
   28673 
   28674      register int *foo asm ("a5");
   28675 
   28676 Here `a5' is the name of the register that should be used.  Choose a
   28677 register that is normally saved and restored by function calls on your
   28678 machine, so that library routines will not clobber it.
   28679 
   28680  Naturally the register name is cpu-dependent, so you need to
   28681 conditionalize your program according to cpu type.  The register `a5'
   28682 is a good choice on a 68000 for a variable of pointer type.  On
   28683 machines with register windows, be sure to choose a "global" register
   28684 that is not affected magically by the function call mechanism.
   28685 
   28686  In addition, different operating systems on the same CPU may differ in
   28687 how they name the registers; then you need additional conditionals.  For
   28688 example, some 68000 operating systems call this register `%a5'.
   28689 
   28690  Eventually there may be a way of asking the compiler to choose a
   28691 register automatically, but first we need to figure out how it should
   28692 choose and how to enable you to guide the choice.  No solution is
   28693 evident.
   28694 
   28695  Defining a global register variable in a certain register reserves that
   28696 register entirely for this use, at least within the current compilation.
   28697 The register is not allocated for any other purpose in the functions in
   28698 the current compilation, and is not saved and restored by these
   28699 functions.  Stores into this register are never deleted even if they
   28700 appear to be dead, but references may be deleted or moved or simplified.
   28701 
   28702  It is not safe to access the global register variables from signal
   28703 handlers, or from more than one thread of control, because the system
   28704 library routines may temporarily use the register for other things
   28705 (unless you recompile them specially for the task at hand).
   28706 
   28707  It is not safe for one function that uses a global register variable to
   28708 call another such function `foo' by way of a third function `lose' that
   28709 is compiled without knowledge of this variable (i.e. in a different
   28710 source file in which the variable isn't declared).  This is because
   28711 `lose' might save the register and put some other value there.  For
   28712 example, you can't expect a global register variable to be available in
   28713 the comparison-function that you pass to `qsort', since `qsort' might
   28714 have put something else in that register.  (If you are prepared to
   28715 recompile `qsort' with the same global register variable, you can solve
   28716 this problem.)
   28717 
   28718  If you want to recompile `qsort' or other source files that do not
   28719 actually use your global register variable, so that they do not use that
   28720 register for any other purpose, then it suffices to specify the compiler
   28721 option `-ffixed-REG'.  You need not actually add a global register
   28722 declaration to their source code.
   28723 
   28724  A function that can alter the value of a global register variable
   28725 cannot safely be called from a function compiled without this variable,
   28726 because it could clobber the value the caller expects to find there on
   28727 return.  Therefore, the function that is the entry point into the part
   28728 of the program that uses the global register variable must explicitly
   28729 save and restore the value that belongs to its caller.
   28730 
   28731  On most machines, `longjmp' restores to each global register variable
   28732 the value it had at the time of the `setjmp'.  On some machines,
   28733 however, `longjmp' does not change the value of global register
   28734 variables.  To be portable, the function that called `setjmp' should
   28735 make other arrangements to save the values of the global register
   28736 variables, and to restore them in a `longjmp'.  This way, the same
   28737 thing happens regardless of what `longjmp' does.
   28738 
   28739  All global register variable declarations must precede all function
   28740 definitions.  If such a declaration could appear after function
   28741 definitions, the declaration would be too late to prevent the register
   28742 from being used for other purposes in the preceding functions.
   28743 
   28744  Global register variables may not have initial values, because an
   28745 executable file has no means to supply initial contents for a register.
   28746 
   28747  On the SPARC, there are reports that g3 ... g7 are suitable registers,
   28748 but certain library functions, such as `getwd', as well as the
   28749 subroutines for division and remainder, modify g3 and g4.  g1 and g2
   28750 are local temporaries.
   28751 
   28752  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
   28753 course, it does not do to use more than a few of those.
   28754 
   28755 
   28756 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
   28757 
   28758 6.44.2 Specifying Registers for Local Variables
   28759 -----------------------------------------------
   28760 
   28761 You can define a local register variable with a specified register like
   28762 this:
   28763 
   28764      register int *foo asm ("a5");
   28765 
   28766 Here `a5' is the name of the register that should be used.  Note that
   28767 this is the same syntax used for defining global register variables,
   28768 but for a local variable it appears within a function.
   28769 
   28770  Naturally the register name is cpu-dependent, but this is not a
   28771 problem, since specific registers are most often useful with explicit
   28772 assembler instructions (*note Extended Asm::).  Both of these things
   28773 generally require that you conditionalize your program according to cpu
   28774 type.
   28775 
   28776  In addition, operating systems on one type of cpu may differ in how
   28777 they name the registers; then you need additional conditionals.  For
   28778 example, some 68000 operating systems call this register `%a5'.
   28779 
   28780  Defining such a register variable does not reserve the register; it
   28781 remains available for other uses in places where flow control determines
   28782 the variable's value is not live.
   28783 
   28784  This option does not guarantee that GCC generates code that has this
   28785 variable in the register you specify at all times.  You may not code an
   28786 explicit reference to this register in the _assembler instruction
   28787 template_ part of an `asm' statement and assume it always refers to
   28788 this variable.  However, using the variable as an `asm' _operand_
   28789 guarantees that the specified register is used for the operand.
   28790 
   28791  Stores into local register variables may be deleted when they appear
   28792 to be dead according to dataflow analysis.  References to local
   28793 register variables may be deleted or moved or simplified.
   28794 
   28795  As for global register variables, it's recommended that you choose a
   28796 register that is normally saved and restored by function calls on your
   28797 machine, so that library routines will not clobber it.  A common
   28798 pitfall is to initialize multiple call-clobbered registers with
   28799 arbitrary expressions, where a function call or library call for an
   28800 arithmetic operator overwrites a register value from a previous
   28801 assignment, for example `r0' below:
   28802      register int *p1 asm ("r0") = ...;
   28803      register int *p2 asm ("r1") = ...;
   28804 
   28805 In those cases, a solution is to use a temporary variable for each
   28806 arbitrary expression.   *Note Example of asm with clobbered asm reg::.
   28807 
   28808 
   28809 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
   28810 
   28811 6.45 Alternate Keywords
   28812 =======================
   28813 
   28814 `-ansi' and the various `-std' options disable certain keywords.  This
   28815 causes trouble when you want to use GNU C extensions, or a
   28816 general-purpose header file that should be usable by all programs,
   28817 including ISO C programs.  The keywords `asm', `typeof' and `inline'
   28818 are not available in programs compiled with `-ansi' or `-std' (although
   28819 `inline' can be used in a program compiled with `-std=c99' or
   28820 `-std=c11').  The ISO C99 keyword `restrict' is only available when
   28821 `-std=gnu99' (which will eventually be the default) or `-std=c99' (or
   28822 the equivalent `-std=iso9899:1999'), or an option for a later standard
   28823 version, is used.
   28824 
   28825  The way to solve these problems is to put `__' at the beginning and
   28826 end of each problematical keyword.  For example, use `__asm__' instead
   28827 of `asm', and `__inline__' instead of `inline'.
   28828 
   28829  Other C compilers won't accept these alternative keywords; if you want
   28830 to compile with another compiler, you can define the alternate keywords
   28831 as macros to replace them with the customary keywords.  It looks like
   28832 this:
   28833 
   28834      #ifndef __GNUC__
   28835      #define __asm__ asm
   28836      #endif
   28837 
   28838  `-pedantic' and other options cause warnings for many GNU C extensions.
   28839 You can prevent such warnings within one expression by writing
   28840 `__extension__' before the expression.  `__extension__' has no effect
   28841 aside from this.
   28842 
   28843 
   28844 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
   28845 
   28846 6.46 Incomplete `enum' Types
   28847 ============================
   28848 
   28849 You can define an `enum' tag without specifying its possible values.
   28850 This results in an incomplete type, much like what you get if you write
   28851 `struct foo' without describing the elements.  A later declaration that
   28852 does specify the possible values completes the type.
   28853 
   28854  You can't allocate variables or storage using the type while it is
   28855 incomplete.  However, you can work with pointers to that type.
   28856 
   28857  This extension may not be very useful, but it makes the handling of
   28858 `enum' more consistent with the way `struct' and `union' are handled.
   28859 
   28860  This extension is not supported by GNU C++.
   28861 
   28862 
   28863 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
   28864 
   28865 6.47 Function Names as Strings
   28866 ==============================
   28867 
   28868 GCC provides three magic variables that hold the name of the current
   28869 function, as a string.  The first of these is `__func__', which is part
   28870 of the C99 standard:
   28871 
   28872  The identifier `__func__' is implicitly declared by the translator as
   28873 if, immediately following the opening brace of each function
   28874 definition, the declaration
   28875 
   28876      static const char __func__[] = "function-name";
   28877 
   28878 appeared, where function-name is the name of the lexically-enclosing
   28879 function.  This name is the unadorned name of the function.
   28880 
   28881  `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
   28882 recognize only this name.  However, it is not standardized.  For
   28883 maximum portability, we recommend you use `__func__', but provide a
   28884 fallback definition with the preprocessor:
   28885 
   28886      #if __STDC_VERSION__ < 199901L
   28887      # if __GNUC__ >= 2
   28888      #  define __func__ __FUNCTION__
   28889      # else
   28890      #  define __func__ "<unknown>"
   28891      # endif
   28892      #endif
   28893 
   28894  In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
   28895 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
   28896 the function as well as its bare name.  For example, this program:
   28897 
   28898      extern "C" {
   28899      extern int printf (char *, ...);
   28900      }
   28901 
   28902      class a {
   28903       public:
   28904        void sub (int i)
   28905          {
   28906            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
   28907            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
   28908          }
   28909      };
   28910 
   28911      int
   28912      main (void)
   28913      {
   28914        a ax;
   28915        ax.sub (0);
   28916        return 0;
   28917      }
   28918 
   28919 gives this output:
   28920 
   28921      __FUNCTION__ = sub
   28922      __PRETTY_FUNCTION__ = void a::sub(int)
   28923 
   28924  These identifiers are not preprocessor macros.  In GCC 3.3 and
   28925 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
   28926 treated as string literals; they could be used to initialize `char'
   28927 arrays, and they could be concatenated with other string literals.  GCC
   28928 3.4 and later treat them as variables, like `__func__'.  In C++,
   28929 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
   28930 
   28931 
   28932 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
   28933 
   28934 6.48 Getting the Return or Frame Address of a Function
   28935 ======================================================
   28936 
   28937 These functions may be used to get information about the callers of a
   28938 function.
   28939 
   28940  -- Built-in Function: void * __builtin_return_address (unsigned int
   28941           LEVEL)
   28942      This function returns the return address of the current function,
   28943      or of one of its callers.  The LEVEL argument is number of frames
   28944      to scan up the call stack.  A value of `0' yields the return
   28945      address of the current function, a value of `1' yields the return
   28946      address of the caller of the current function, and so forth.  When
   28947      inlining the expected behavior is that the function returns the
   28948      address of the function that is returned to.  To work around this
   28949      behavior use the `noinline' function attribute.
   28950 
   28951      The LEVEL argument must be a constant integer.
   28952 
   28953      On some machines it may be impossible to determine the return
   28954      address of any function other than the current one; in such cases,
   28955      or when the top of the stack has been reached, this function
   28956      returns `0' or a random value.  In addition,
   28957      `__builtin_frame_address' may be used to determine if the top of
   28958      the stack has been reached.
   28959 
   28960      Additional post-processing of the returned value may be needed, see
   28961      `__builtin_extract_return_addr'.
   28962 
   28963      This function should only be used with a nonzero argument for
   28964      debugging purposes.
   28965 
   28966  -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
   28967      The address as returned by `__builtin_return_address' may have to
   28968      be fed through this function to get the actual encoded address.
   28969      For example, on the 31-bit S/390 platform the highest bit has to
   28970      be masked out, or on SPARC platforms an offset has to be added for
   28971      the true next instruction to be executed.
   28972 
   28973      If no fixup is needed, this function simply passes through ADDR.
   28974 
   28975  -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
   28976      This function does the reverse of `__builtin_extract_return_addr'.
   28977 
   28978  -- Built-in Function: void * __builtin_frame_address (unsigned int
   28979           LEVEL)
   28980      This function is similar to `__builtin_return_address', but it
   28981      returns the address of the function frame rather than the return
   28982      address of the function.  Calling `__builtin_frame_address' with a
   28983      value of `0' yields the frame address of the current function, a
   28984      value of `1' yields the frame address of the caller of the current
   28985      function, and so forth.
   28986 
   28987      The frame is the area on the stack that holds local variables and
   28988      saved registers.  The frame address is normally the address of the
   28989      first word pushed on to the stack by the function.  However, the
   28990      exact definition depends upon the processor and the calling
   28991      convention.  If the processor has a dedicated frame pointer
   28992      register, and the function has a frame, then
   28993      `__builtin_frame_address' returns the value of the frame pointer
   28994      register.
   28995 
   28996      On some machines it may be impossible to determine the frame
   28997      address of any function other than the current one; in such cases,
   28998      or when the top of the stack has been reached, this function
   28999      returns `0' if the first frame pointer is properly initialized by
   29000      the startup code.
   29001 
   29002      This function should only be used with a nonzero argument for
   29003      debugging purposes.
   29004 
   29005 
   29006 File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
   29007 
   29008 6.49 Using Vector Instructions through Built-in Functions
   29009 =========================================================
   29010 
   29011 On some targets, the instruction set contains SIMD vector instructions
   29012 which operate on multiple values contained in one large register at the
   29013 same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
   29014 can be used this way.
   29015 
   29016  The first step in using these extensions is to provide the necessary
   29017 data types.  This should be done using an appropriate `typedef':
   29018 
   29019      typedef int v4si __attribute__ ((vector_size (16)));
   29020 
   29021 The `int' type specifies the base type, while the attribute specifies
   29022 the vector size for the variable, measured in bytes.  For example, the
   29023 declaration above causes the compiler to set the mode for the `v4si'
   29024 type to be 16 bytes wide and divided into `int' sized units.  For a
   29025 32-bit `int' this means a vector of 4 units of 4 bytes, and the
   29026 corresponding mode of `foo' is V4SI.
   29027 
   29028  The `vector_size' attribute is only applicable to integral and float
   29029 scalars, although arrays, pointers, and function return values are
   29030 allowed in conjunction with this construct. Only sizes that are a power
   29031 of two are currently allowed.
   29032 
   29033  All the basic integer types can be used as base types, both as signed
   29034 and as unsigned: `char', `short', `int', `long', `long long'.  In
   29035 addition, `float' and `double' can be used to build floating-point
   29036 vector types.
   29037 
   29038  Specifying a combination that is not valid for the current architecture
   29039 causes GCC to synthesize the instructions using a narrower mode.  For
   29040 example, if you specify a variable of type `V4SI' and your architecture
   29041 does not allow for this specific SIMD type, GCC produces code that uses
   29042 4 `SIs'.
   29043 
   29044  The types defined in this manner can be used with a subset of normal C
   29045 operations.  Currently, GCC allows using the following operators on
   29046 these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
   29047 
   29048  The operations behave like C++ `valarrays'.  Addition is defined as
   29049 the addition of the corresponding elements of the operands.  For
   29050 example, in the code below, each of the 4 elements in A is added to the
   29051 corresponding 4 elements in B and the resulting vector is stored in C.
   29052 
   29053      typedef int v4si __attribute__ ((vector_size (16)));
   29054 
   29055      v4si a, b, c;
   29056 
   29057      c = a + b;
   29058 
   29059  Subtraction, multiplication, division, and the logical operations
   29060 operate in a similar manner.  Likewise, the result of using the unary
   29061 minus or complement operators on a vector type is a vector whose
   29062 elements are the negative or complemented values of the corresponding
   29063 elements in the operand.
   29064 
   29065  It is possible to use shifting operators `<<', `>>' on integer-type
   29066 vectors. The operation is defined as following: `{a0, a1, ..., an} >>
   29067 {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
   29068 operands must have the same number of elements.
   29069 
   29070  For convenience, it is allowed to use a binary vector operation where
   29071 one operand is a scalar. In that case the compiler transforms the
   29072 scalar operand into a vector where each element is the scalar from the
   29073 operation. The transformation happens only if the scalar could be
   29074 safely converted to the vector-element type.  Consider the following
   29075 code.
   29076 
   29077      typedef int v4si __attribute__ ((vector_size (16)));
   29078 
   29079      v4si a, b, c;
   29080      long l;
   29081 
   29082      a = b + 1;    /* a = b + {1,1,1,1}; */
   29083      a = 2 * b;    /* a = {2,2,2,2} * b; */
   29084 
   29085      a = l + a;    /* Error, cannot convert long to int. */
   29086 
   29087  Vectors can be subscripted as if the vector were an array with the
   29088 same number of elements and base type.  Out of bound accesses invoke
   29089 undefined behavior at run time.  Warnings for out of bound accesses for
   29090 vector subscription can be enabled with `-Warray-bounds'.
   29091 
   29092  Vector comparison is supported with standard comparison operators:
   29093 `==, !=, <, <=, >, >='. Comparison operands can be vector expressions
   29094 of integer-type or real-type. Comparison between integer-type vectors
   29095 and real-type vectors are not supported.  The result of the comparison
   29096 is a vector of the same width and number of elements as the comparison
   29097 operands with a signed integral element type.
   29098 
   29099  Vectors are compared element-wise producing 0 when comparison is false
   29100 and -1 (constant of the appropriate type where all bits are set)
   29101 otherwise. Consider the following example.
   29102 
   29103      typedef int v4si __attribute__ ((vector_size (16)));
   29104 
   29105      v4si a = {1,2,3,4};
   29106      v4si b = {3,2,1,4};
   29107      v4si c;
   29108 
   29109      c = a >  b;     /* The result would be {0, 0,-1, 0}  */
   29110      c = a == b;     /* The result would be {0,-1, 0,-1}  */
   29111 
   29112  Vector shuffling is available using functions `__builtin_shuffle (vec,
   29113 mask)' and `__builtin_shuffle (vec0, vec1, mask)'.  Both functions
   29114 construct a permutation of elements from one or two vectors and return
   29115 a vector of the same type as the input vector(s).  The MASK is an
   29116 integral vector with the same width (W) and element count (N) as the
   29117 output vector.
   29118 
   29119  The elements of the input vectors are numbered in memory ordering of
   29120 VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
   29121 considered modulo N in the single-operand case and modulo 2*N in the
   29122 two-operand case.
   29123 
   29124  Consider the following example,
   29125 
   29126      typedef int v4si __attribute__ ((vector_size (16)));
   29127 
   29128      v4si a = {1,2,3,4};
   29129      v4si b = {5,6,7,8};
   29130      v4si mask1 = {0,1,1,3};
   29131      v4si mask2 = {0,4,2,5};
   29132      v4si res;
   29133 
   29134      res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
   29135      res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
   29136 
   29137  Note that `__builtin_shuffle' is intentionally semantically compatible
   29138 with the OpenCL `shuffle' and `shuffle2' functions.
   29139 
   29140  You can declare variables and use them in function calls and returns,
   29141 as well as in assignments and some casts.  You can specify a vector
   29142 type as a return type for a function.  Vector types can also be used as
   29143 function arguments.  It is possible to cast from one vector type to
   29144 another, provided they are of the same size (in fact, you can also cast
   29145 vectors to and from other datatypes of the same size).
   29146 
   29147  You cannot operate between vectors of different lengths or different
   29148 signedness without a cast.
   29149 
   29150 
   29151 File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
   29152 
   29153 6.50 Offsetof
   29154 =============
   29155 
   29156 GCC implements for both C and C++ a syntactic extension to implement
   29157 the `offsetof' macro.
   29158 
   29159      primary:
   29160              "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
   29161 
   29162      offsetof_member_designator:
   29163                `identifier'
   29164              | offsetof_member_designator "." `identifier'
   29165              | offsetof_member_designator "[" `expr' "]"
   29166 
   29167  This extension is sufficient such that
   29168 
   29169      #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
   29170 
   29171 is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
   29172 dependent.  In either case, MEMBER may consist of a single identifier,
   29173 or a sequence of member accesses and array references.
   29174 
   29175 
   29176 File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
   29177 
   29178 6.51 Legacy __sync Built-in Functions for Atomic Memory Access
   29179 ==============================================================
   29180 
   29181 The following built-in functions are intended to be compatible with
   29182 those described in the `Intel Itanium Processor-specific Application
   29183 Binary Interface', section 7.4.  As such, they depart from the normal
   29184 GCC practice of using the `__builtin_' prefix, and further that they
   29185 are overloaded such that they work on multiple types.
   29186 
   29187  The definition given in the Intel documentation allows only for the
   29188 use of the types `int', `long', `long long' as well as their unsigned
   29189 counterparts.  GCC allows any integral scalar or pointer type that is
   29190 1, 2, 4 or 8 bytes in length.
   29191 
   29192  Not all operations are supported by all target processors.  If a
   29193 particular operation cannot be implemented on the target processor, a
   29194 warning is generated and a call an external function is generated.  The
   29195 external function carries the same name as the built-in version, with
   29196 an additional suffix `_N' where N is the size of the data type.
   29197 
   29198  In most cases, these built-in functions are considered a "full
   29199 barrier".  That is, no memory operand is moved across the operation,
   29200 either forward or backward.  Further, instructions are issued as
   29201 necessary to prevent the processor from speculating loads across the
   29202 operation and from queuing stores after the operation.
   29203 
   29204  All of the routines are described in the Intel documentation to take
   29205 "an optional list of variables protected by the memory barrier".  It's
   29206 not clear what is meant by that; it could mean that _only_ the
   29207 following variables are protected, or it could mean that these variables
   29208 should in addition be protected.  At present GCC ignores this list and
   29209 protects all variables that are globally accessible.  If in the future
   29210 we make some use of this list, an empty list will continue to mean all
   29211 globally accessible variables.
   29212 
   29213 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
   29214 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
   29215 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
   29216 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
   29217 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
   29218 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
   29219      These built-in functions perform the operation suggested by the
   29220      name, and returns the value that had previously been in memory.
   29221      That is,
   29222 
   29223           { tmp = *ptr; *ptr OP= value; return tmp; }
   29224           { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
   29225 
   29226      _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as
   29227      `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'.
   29228 
   29229 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
   29230 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
   29231 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
   29232 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
   29233 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
   29234 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
   29235      These built-in functions perform the operation suggested by the
   29236      name, and return the new value.  That is,
   29237 
   29238           { *ptr OP= value; return *ptr; }
   29239           { *ptr = ~(*ptr & value); return *ptr; }   // nand
   29240 
   29241      _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as
   29242      `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'.
   29243 
   29244 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
   29245 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
   29246      These built-in functions perform an atomic compare and swap.  That
   29247      is, if the current value of `*PTR' is OLDVAL, then write NEWVAL
   29248      into `*PTR'.
   29249 
   29250      The "bool" version returns true if the comparison is successful and
   29251      NEWVAL is written.  The "val" version returns the contents of
   29252      `*PTR' before the operation.
   29253 
   29254 `__sync_synchronize (...)'
   29255      This built-in function issues a full memory barrier.
   29256 
   29257 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
   29258      This built-in function, as described by Intel, is not a
   29259      traditional test-and-set operation, but rather an atomic exchange
   29260      operation.  It writes VALUE into `*PTR', and returns the previous
   29261      contents of `*PTR'.
   29262 
   29263      Many targets have only minimal support for such locks, and do not
   29264      support a full exchange operation.  In this case, a target may
   29265      support reduced functionality here by which the _only_ valid value
   29266      to store is the immediate constant 1.  The exact value actually
   29267      stored in `*PTR' is implementation defined.
   29268 
   29269      This built-in function is not a full barrier, but rather an
   29270      "acquire barrier".  This means that references after the operation
   29271      cannot move to (or be speculated to) before the operation, but
   29272      previous memory stores may not be globally visible yet, and
   29273      previous memory loads may not yet be satisfied.
   29274 
   29275 `void __sync_lock_release (TYPE *ptr, ...)'
   29276      This built-in function releases the lock acquired by
   29277      `__sync_lock_test_and_set'.  Normally this means writing the
   29278      constant 0 to `*PTR'.
   29279 
   29280      This built-in function is not a full barrier, but rather a
   29281      "release barrier".  This means that all previous memory stores are
   29282      globally visible, and all previous memory loads have been
   29283      satisfied, but following memory reads are not prevented from being
   29284      speculated to before the barrier.
   29285 
   29286 
   29287 File: gcc.info,  Node: __atomic Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __sync Builtins,  Up: C Extensions
   29288 
   29289 6.52 Built-in functions for memory model aware atomic operations
   29290 ================================================================
   29291 
   29292 The following built-in functions approximately match the requirements
   29293 for C++11 memory model. Many are similar to the `__sync' prefixed
   29294 built-in functions, but all also have a memory model parameter.  These
   29295 are all identified by being prefixed with `__atomic', and most are
   29296 overloaded such that they work with multiple types.
   29297 
   29298  GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
   29299 bytes in length. 16-byte integral types are also allowed if `__int128'
   29300 (*note __int128::) is supported by the architecture.
   29301 
   29302  Target architectures are encouraged to provide their own patterns for
   29303 each of these built-in functions.  If no target is provided, the
   29304 original non-memory model set of `__sync' atomic built-in functions are
   29305 utilized, along with any required synchronization fences surrounding it
   29306 in order to achieve the proper behavior.  Execution in this case is
   29307 subject to the same restrictions as those built-in functions.
   29308 
   29309  If there is no pattern or mechanism to provide a lock free instruction
   29310 sequence, a call is made to an external routine with the same parameters
   29311 to be resolved at run time.
   29312 
   29313  The four non-arithmetic functions (load, store, exchange, and
   29314 compare_exchange) all have a generic version as well.  This generic
   29315 version works on any data type.  If the data type size maps to one of
   29316 the integral sizes that may have lock free support, the generic version
   29317 utilizes the lock free built-in function.  Otherwise an external call
   29318 is left to be resolved at run time.  This external call is the same
   29319 format with the addition of a `size_t' parameter inserted as the first
   29320 parameter indicating the size of the object being pointed to.  All
   29321 objects must be the same size.
   29322 
   29323  There are 6 different memory models that can be specified.  These map
   29324 to the same names in the C++11 standard.  Refer there or to the GCC
   29325 wiki on atomic synchronization
   29326 (http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
   29327 definitions.  These memory models integrate both barriers to code
   29328 motion as well as synchronization requirements with other threads.
   29329 These are listed in approximately ascending order of strength. It is
   29330 also possible to use target specific flags for memory model flags, like
   29331 Hardware Lock Elision.
   29332 
   29333 `__ATOMIC_RELAXED'
   29334      No barriers or synchronization.
   29335 
   29336 `__ATOMIC_CONSUME'
   29337      Data dependency only for both barrier and synchronization with
   29338      another thread.
   29339 
   29340 `__ATOMIC_ACQUIRE'
   29341      Barrier to hoisting of code and synchronizes with release (or
   29342      stronger) semantic stores from another thread.
   29343 
   29344 `__ATOMIC_RELEASE'
   29345      Barrier to sinking of code and synchronizes with acquire (or
   29346      stronger) semantic loads from another thread.
   29347 
   29348 `__ATOMIC_ACQ_REL'
   29349      Full barrier in both directions and synchronizes with acquire
   29350      loads and release stores in another thread.
   29351 
   29352 `__ATOMIC_SEQ_CST'
   29353      Full barrier in both directions and synchronizes with acquire
   29354      loads and release stores in all threads.
   29355 
   29356  When implementing patterns for these built-in functions, the memory
   29357 model parameter can be ignored as long as the pattern implements the
   29358 most restrictive `__ATOMIC_SEQ_CST' model.  Any of the other memory
   29359 models execute correctly with this memory model but they may not
   29360 execute as efficiently as they could with a more appropriate
   29361 implementation of the relaxed requirements.
   29362 
   29363  Note that the C++11 standard allows for the memory model parameter to
   29364 be determined at run time rather than at compile time.  These built-in
   29365 functions map any run-time value to `__ATOMIC_SEQ_CST' rather than
   29366 invoke a runtime library call or inline a switch statement.  This is
   29367 standard compliant, safe, and the simplest approach for now.
   29368 
   29369  The memory model parameter is a signed int, but only the lower 8 bits
   29370 are reserved for the memory model.  The remainder of the signed int is
   29371 reserved for future use and should be 0.  Use of the predefined atomic
   29372 values ensures proper usage.
   29373 
   29374  -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
   29375      This built-in function implements an atomic load operation.  It
   29376      returns the contents of `*PTR'.
   29377 
   29378      The valid memory model variants are `__ATOMIC_RELAXED',
   29379      `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'.
   29380 
   29381 
   29382  -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
   29383           memmodel)
   29384      This is the generic version of an atomic load.  It returns the
   29385      contents of `*PTR' in `*RET'.
   29386 
   29387 
   29388  -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
   29389           memmodel)
   29390      This built-in function implements an atomic store operation.  It
   29391      writes `VAL' into `*PTR'.
   29392 
   29393      The valid memory model variants are `__ATOMIC_RELAXED',
   29394      `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
   29395 
   29396 
   29397  -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
   29398           memmodel)
   29399      This is the generic version of an atomic store.  It stores the
   29400      value of `*VAL' into `*PTR'.
   29401 
   29402 
   29403  -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
   29404           int memmodel)
   29405      This built-in function implements an atomic exchange operation.
   29406      It writes VAL into `*PTR', and returns the previous contents of
   29407      `*PTR'.
   29408 
   29409      The valid memory model variants are `__ATOMIC_RELAXED',
   29410      `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and
   29411      `__ATOMIC_ACQ_REL'.
   29412 
   29413 
   29414  -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
   29415           TYPE *ret, int memmodel)
   29416      This is the generic version of an atomic exchange.  It stores the
   29417      contents of `*VAL' into `*PTR'. The original value of `*PTR' is
   29418      copied into `*RET'.
   29419 
   29420 
   29421  -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr,
   29422           TYPE *expected, TYPE desired, bool weak, int
   29423           success_memmodel, int failure_memmodel)
   29424      This built-in function implements an atomic compare and exchange
   29425      operation.  This compares the contents of `*PTR' with the contents
   29426      of `*EXPECTED' and if equal, writes DESIRED into `*PTR'.  If they
   29427      are not equal, the current contents of `*PTR' is written into
   29428      `*EXPECTED'.  WEAK is true for weak compare_exchange, and false
   29429      for the strong variation.  Many targets only offer the strong
   29430      variation and ignore the parameter.  When in doubt, use the strong
   29431      variation.
   29432 
   29433      True is returned if DESIRED is written into `*PTR' and the
   29434      execution is considered to conform to the memory model specified
   29435      by SUCCESS_MEMMODEL.  There are no restrictions on what memory
   29436      model can be used here.
   29437 
   29438      False is returned otherwise, and the execution is considered to
   29439      conform to FAILURE_MEMMODEL. This memory model cannot be
   29440      `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'.  It also cannot be a
   29441      stronger model than that specified by SUCCESS_MEMMODEL.
   29442 
   29443 
   29444  -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
   29445           *expected, TYPE *desired, bool weak, int success_memmodel,
   29446           int failure_memmodel)
   29447      This built-in function implements the generic version of
   29448      `__atomic_compare_exchange'.  The function is virtually identical
   29449      to `__atomic_compare_exchange_n', except the desired value is also
   29450      a pointer.
   29451 
   29452 
   29453  -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val,
   29454           int memmodel)
   29455  -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val,
   29456           int memmodel)
   29457  -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val,
   29458           int memmodel)
   29459  -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val,
   29460           int memmodel)
   29461  -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
   29462           memmodel)
   29463  -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
   29464           int memmodel)
   29465      These built-in functions perform the operation suggested by the
   29466      name, and return the result of the operation. That is,
   29467 
   29468           { *ptr OP= val; return *ptr; }
   29469 
   29470      All memory models are valid.
   29471 
   29472 
   29473  -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val,
   29474           int memmodel)
   29475  -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val,
   29476           int memmodel)
   29477  -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val,
   29478           int memmodel)
   29479  -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val,
   29480           int memmodel)
   29481  -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
   29482           memmodel)
   29483  -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
   29484           int memmodel)
   29485      These built-in functions perform the operation suggested by the
   29486      name, and return the value that had previously been in `*PTR'.
   29487      That is,
   29488 
   29489           { tmp = *ptr; *ptr OP= val; return tmp; }
   29490 
   29491      All memory models are valid.
   29492 
   29493 
   29494  -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
   29495           memmodel)
   29496      This built-in function performs an atomic test-and-set operation on
   29497      the byte at `*PTR'.  The byte is set to some implementation
   29498      defined nonzero "set" value and the return value is `true' if and
   29499      only if the previous contents were "set".  It should be only used
   29500      for operands of type `bool' or `char'. For other types only part
   29501      of the value may be set.
   29502 
   29503      All memory models are valid.
   29504 
   29505 
   29506  -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
   29507      This built-in function performs an atomic clear operation on
   29508      `*PTR'.  After the operation, `*PTR' contains 0.  It should be
   29509      only used for operands of type `bool' or `char' and in conjunction
   29510      with `__atomic_test_and_set'.  For other types it may only clear
   29511      partially. If the type is not `bool' prefer using `__atomic_store'.
   29512 
   29513      The valid memory model variants are `__ATOMIC_RELAXED',
   29514      `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
   29515 
   29516 
   29517  -- Built-in Function: void __atomic_thread_fence (int memmodel)
   29518      This built-in function acts as a synchronization fence between
   29519      threads based on the specified memory model.
   29520 
   29521      All memory orders are valid.
   29522 
   29523 
   29524  -- Built-in Function: void __atomic_signal_fence (int memmodel)
   29525      This built-in function acts as a synchronization fence between a
   29526      thread and signal handlers based in the same thread.
   29527 
   29528      All memory orders are valid.
   29529 
   29530 
   29531  -- Built-in Function: bool __atomic_always_lock_free (size_t size,
   29532           void *ptr)
   29533      This built-in function returns true if objects of SIZE bytes always
   29534      generate lock free atomic instructions for the target architecture.
   29535      SIZE must resolve to a compile-time constant and the result also
   29536      resolves to a compile-time constant.
   29537 
   29538      PTR is an optional pointer to the object that may be used to
   29539      determine alignment.  A value of 0 indicates typical alignment
   29540      should be used.  The compiler may also ignore this parameter.
   29541 
   29542           if (_atomic_always_lock_free (sizeof (long long), 0))
   29543 
   29544 
   29545  -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
   29546           *ptr)
   29547      This built-in function returns true if objects of SIZE bytes always
   29548      generate lock free atomic instructions for the target
   29549      architecture.  If it is not known to be lock free a call is made
   29550      to a runtime routine named `__atomic_is_lock_free'.
   29551 
   29552      PTR is an optional pointer to the object that may be used to
   29553      determine alignment.  A value of 0 indicates typical alignment
   29554      should be used.  The compiler may also ignore this parameter.
   29555 
   29556 
   29557 File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: __atomic Builtins,  Up: C Extensions
   29558 
   29559 6.53 x86 specific memory model extensions for transactional memory
   29560 ==================================================================
   29561 
   29562 The i386 architecture supports additional memory ordering flags to mark
   29563 lock critical sections for hardware lock elision.  These must be
   29564 specified in addition to an existing memory model to atomic intrinsics.
   29565 
   29566 `__ATOMIC_HLE_ACQUIRE'
   29567      Start lock elision on a lock variable.  Memory model must be
   29568      `__ATOMIC_ACQUIRE' or stronger.
   29569 
   29570 `__ATOMIC_HLE_RELEASE'
   29571      End lock elision on a lock variable.  Memory model must be
   29572      `__ATOMIC_RELEASE' or stronger.
   29573 
   29574  When a lock acquire fails it is required for good performance to abort
   29575 the transaction quickly. This can be done with a `_mm_pause'
   29576 
   29577      #include <immintrin.h> // For _mm_pause
   29578 
   29579      int lockvar;
   29580 
   29581      /* Acquire lock with lock elision */
   29582      while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
   29583          _mm_pause(); /* Abort failed transaction */
   29584      ...
   29585      /* Free lock with lock elision */
   29586      __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
   29587 
   29588 
   29589 File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
   29590 
   29591 6.54 Object Size Checking Built-in Functions
   29592 ============================================
   29593 
   29594 GCC implements a limited buffer overflow protection mechanism that can
   29595 prevent some buffer overflow attacks.
   29596 
   29597  -- Built-in Function: size_t __builtin_object_size (void * PTR, int
   29598           TYPE)
   29599      is a built-in construct that returns a constant number of bytes
   29600      from PTR to the end of the object PTR pointer points to (if known
   29601      at compile time).  `__builtin_object_size' never evaluates its
   29602      arguments for side-effects.  If there are any side-effects in
   29603      them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
   29604      for TYPE 2 or 3.  If there are multiple objects PTR can point to
   29605      and all of them are known at compile time, the returned number is
   29606      the maximum of remaining byte counts in those objects if TYPE & 2
   29607      is 0 and minimum if nonzero.  If it is not possible to determine
   29608      which objects PTR points to at compile time,
   29609      `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
   29610      1 and `(size_t) 0' for TYPE 2 or 3.
   29611 
   29612      TYPE is an integer constant from 0 to 3.  If the least significant
   29613      bit is clear, objects are whole variables, if it is set, a closest
   29614      surrounding subobject is considered the object a pointer points to.
   29615      The second bit determines if maximum or minimum of remaining bytes
   29616      is computed.
   29617 
   29618           struct V { char buf1[10]; int b; char buf2[10]; } var;
   29619           char *p = &var.buf1[1], *q = &var.b;
   29620 
   29621           /* Here the object p points to is var.  */
   29622           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
   29623           /* The subobject p points to is var.buf1.  */
   29624           assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
   29625           /* The object q points to is var.  */
   29626           assert (__builtin_object_size (q, 0)
   29627                   == (char *) (&var + 1) - (char *) &var.b);
   29628           /* The subobject q points to is var.b.  */
   29629           assert (__builtin_object_size (q, 1) == sizeof (var.b));
   29630 
   29631  There are built-in functions added for many common string operation
   29632 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
   29633 provided.  This built-in has an additional last argument, which is the
   29634 number of bytes remaining in object the DEST argument points to or
   29635 `(size_t) -1' if the size is not known.
   29636 
   29637  The built-in functions are optimized into the normal string functions
   29638 like `memcpy' if the last argument is `(size_t) -1' or if it is known
   29639 at compile time that the destination object will not be overflown.  If
   29640 the compiler can determine at compile time the object will be always
   29641 overflown, it issues a warning.
   29642 
   29643  The intended use can be e.g.
   29644 
   29645      #undef memcpy
   29646      #define bos0(dest) __builtin_object_size (dest, 0)
   29647      #define memcpy(dest, src, n) \
   29648        __builtin___memcpy_chk (dest, src, n, bos0 (dest))
   29649 
   29650      char *volatile p;
   29651      char buf[10];
   29652      /* It is unknown what object p points to, so this is optimized
   29653         into plain memcpy - no checking is possible.  */
   29654      memcpy (p, "abcde", n);
   29655      /* Destination is known and length too.  It is known at compile
   29656         time there will be no overflow.  */
   29657      memcpy (&buf[5], "abcde", 5);
   29658      /* Destination is known, but the length is not known at compile time.
   29659         This will result in __memcpy_chk call that can check for overflow
   29660         at run time.  */
   29661      memcpy (&buf[5], "abcde", n);
   29662      /* Destination is known and it is known at compile time there will
   29663         be overflow.  There will be a warning and __memcpy_chk call that
   29664         will abort the program at run time.  */
   29665      memcpy (&buf[6], "abcde", 5);
   29666 
   29667  Such built-in functions are provided for `memcpy', `mempcpy',
   29668 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
   29669 `strncat'.
   29670 
   29671  There are also checking built-in functions for formatted output
   29672 functions.
   29673      int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
   29674      int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   29675                                    const char *fmt, ...);
   29676      int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
   29677                                    va_list ap);
   29678      int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   29679                                     const char *fmt, va_list ap);
   29680 
   29681  The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
   29682 functions and can contain implementation specific flags on what
   29683 additional security measures the checking function might take, such as
   29684 handling `%n' differently.
   29685 
   29686  The OS argument is the object size S points to, like in the other
   29687 built-in functions.  There is a small difference in the behavior
   29688 though, if OS is `(size_t) -1', the built-in functions are optimized
   29689 into the non-checking functions only if FLAG is 0, otherwise the
   29690 checking function is called with OS argument set to `(size_t) -1'.
   29691 
   29692  In addition to this, there are checking built-in functions
   29693 `__builtin___printf_chk', `__builtin___vprintf_chk',
   29694 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
   29695 just one additional argument, FLAG, right before format string FMT.  If
   29696 the compiler is able to optimize them to `fputc' etc. functions, it
   29697 does, otherwise the checking function is called and the FLAG argument
   29698 passed to it.
   29699 
   29700 
   29701 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
   29702 
   29703 6.55 Other Built-in Functions Provided by GCC
   29704 =============================================
   29705 
   29706 GCC provides a large number of built-in functions other than the ones
   29707 mentioned above.  Some of these are for internal use in the processing
   29708 of exceptions or variable-length argument lists and are not documented
   29709 here because they may change from time to time; we do not recommend
   29710 general use of these functions.
   29711 
   29712  The remaining functions are provided for optimization purposes.
   29713 
   29714  GCC includes built-in versions of many of the functions in the standard
   29715 C library.  The versions prefixed with `__builtin_' are always treated
   29716 as having the same meaning as the C library function even if you
   29717 specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
   29718 these functions are only optimized in certain cases; if they are not
   29719 optimized in a particular case, a call to the library function is
   29720 emitted.
   29721 
   29722  Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
   29723 `-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero',
   29724 `dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
   29725 `exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
   29726 `gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
   29727 `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
   29728 `jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
   29729 `pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
   29730 `scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
   29731 `signbitd64', `signbitd128', `significandf', `significandl',
   29732 `significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
   29733 `strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
   29734 `y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
   29735 handled as built-in functions.  All these functions have corresponding
   29736 versions prefixed with `__builtin_', which may be used even in strict
   29737 C90 mode.
   29738 
   29739  The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
   29740 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
   29741 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
   29742 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
   29743 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
   29744 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
   29745 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
   29746 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
   29747 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
   29748 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
   29749 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
   29750 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
   29751 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
   29752 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
   29753 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
   29754 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
   29755 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
   29756 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
   29757 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
   29758 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
   29759 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
   29760 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
   29761 `remainderf', `remainderl', `remainder', `remquof', `remquol',
   29762 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
   29763 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
   29764 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
   29765 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
   29766 functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
   29767 
   29768  There are also built-in versions of the ISO C99 functions `acosf',
   29769 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
   29770 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
   29771 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
   29772 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
   29773 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
   29774 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
   29775 recognized in any mode since ISO C90 reserves these names for the
   29776 purpose to which ISO C99 puts them.  All these functions have
   29777 corresponding versions prefixed with `__builtin_'.
   29778 
   29779  The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
   29780 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
   29781 `iswxdigit', `towlower' and `towupper' are handled as built-in functions
   29782 except in strict ISO C90 mode (`-ansi' or `-std=c90').
   29783 
   29784  The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
   29785 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
   29786 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
   29787 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
   29788 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
   29789 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
   29790 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
   29791 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
   29792 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
   29793 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
   29794 `vsprintf' are all recognized as built-in functions unless
   29795 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
   29796 for an individual function).  All of these functions have corresponding
   29797 versions prefixed with `__builtin_'.
   29798 
   29799  GCC provides built-in versions of the ISO C99 floating-point comparison
   29800 macros that avoid raising exceptions for unordered operands.  They have
   29801 the same names as the standard macros ( `isgreater', `isgreaterequal',
   29802 `isless', `islessequal', `islessgreater', and `isunordered') , with
   29803 `__builtin_' prefixed.  We intend for a library implementor to be able
   29804 to simply `#define' each standard macro to its built-in equivalent.  In
   29805 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
   29806 and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
   29807 and `isnan' built-in functions appear both with and without the
   29808 `__builtin_' prefix.
   29809 
   29810  -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
   29811      You can use the built-in function `__builtin_types_compatible_p' to
   29812      determine whether two types are the same.
   29813 
   29814      This built-in function returns 1 if the unqualified versions of the
   29815      types TYPE1 and TYPE2 (which are types, not expressions) are
   29816      compatible, 0 otherwise.  The result of this built-in function can
   29817      be used in integer constant expressions.
   29818 
   29819      This built-in function ignores top level qualifiers (e.g., `const',
   29820      `volatile').  For example, `int' is equivalent to `const int'.
   29821 
   29822      The type `int[]' and `int[5]' are compatible.  On the other hand,
   29823      `int' and `char *' are not compatible, even if the size of their
   29824      types, on the particular architecture are the same.  Also, the
   29825      amount of pointer indirection is taken into account when
   29826      determining similarity.  Consequently, `short *' is not similar to
   29827      `short **'.  Furthermore, two types that are typedefed are
   29828      considered compatible if their underlying types are compatible.
   29829 
   29830      An `enum' type is not considered to be compatible with another
   29831      `enum' type even if both are compatible with the same integer
   29832      type; this is what the C standard specifies.  For example, `enum
   29833      {foo, bar}' is not similar to `enum {hot, dog}'.
   29834 
   29835      You typically use this function in code whose execution varies
   29836      depending on the arguments' types.  For example:
   29837 
   29838           #define foo(x)                                                  \
   29839             ({                                                           \
   29840               typeof (x) tmp = (x);                                       \
   29841               if (__builtin_types_compatible_p (typeof (x), long double)) \
   29842                 tmp = foo_long_double (tmp);                              \
   29843               else if (__builtin_types_compatible_p (typeof (x), double)) \
   29844                 tmp = foo_double (tmp);                                   \
   29845               else if (__builtin_types_compatible_p (typeof (x), float))  \
   29846                 tmp = foo_float (tmp);                                    \
   29847               else                                                        \
   29848                 abort ();                                                 \
   29849               tmp;                                                        \
   29850             })
   29851 
   29852      _Note:_ This construct is only available for C.
   29853 
   29854 
   29855  -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
   29856           EXP2)
   29857      You can use the built-in function `__builtin_choose_expr' to
   29858      evaluate code depending on the value of a constant expression.
   29859      This built-in function returns EXP1 if CONST_EXP, which is an
   29860      integer constant expression, is nonzero.  Otherwise it returns
   29861      EXP2.
   29862 
   29863      This built-in function is analogous to the `? :' operator in C,
   29864      except that the expression returned has its type unaltered by
   29865      promotion rules.  Also, the built-in function does not evaluate
   29866      the expression that is not chosen.  For example, if CONST_EXP
   29867      evaluates to true, EXP2 is not evaluated even if it has
   29868      side-effects.
   29869 
   29870      This built-in function can return an lvalue if the chosen argument
   29871      is an lvalue.
   29872 
   29873      If EXP1 is returned, the return type is the same as EXP1's type.
   29874      Similarly, if EXP2 is returned, its return type is the same as
   29875      EXP2.
   29876 
   29877      Example:
   29878 
   29879           #define foo(x)                                                    \
   29880             __builtin_choose_expr (                                         \
   29881               __builtin_types_compatible_p (typeof (x), double),            \
   29882               foo_double (x),                                               \
   29883               __builtin_choose_expr (                                       \
   29884                 __builtin_types_compatible_p (typeof (x), float),           \
   29885                 foo_float (x),                                              \
   29886                 /* The void expression results in a compile-time error  \
   29887                    when assigning the result to something.  */          \
   29888                 (void)0))
   29889 
   29890      _Note:_ This construct is only available for C.  Furthermore, the
   29891      unused expression (EXP1 or EXP2 depending on the value of
   29892      CONST_EXP) may still generate syntax errors.  This may change in
   29893      future revisions.
   29894 
   29895 
   29896  -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
   29897      The built-in function `__builtin_complex' is provided for use in
   29898      implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'.
   29899      REAL and IMAG must have the same type, a real binary
   29900      floating-point type, and the result has the corresponding complex
   29901      type with real and imaginary parts REAL and IMAG.  Unlike `REAL +
   29902      I * IMAG', this works even when infinities, NaNs and negative
   29903      zeros are involved.
   29904 
   29905 
   29906  -- Built-in Function: int __builtin_constant_p (EXP)
   29907      You can use the built-in function `__builtin_constant_p' to
   29908      determine if a value is known to be constant at compile time and
   29909      hence that GCC can perform constant-folding on expressions
   29910      involving that value.  The argument of the function is the value
   29911      to test.  The function returns the integer 1 if the argument is
   29912      known to be a compile-time constant and 0 if it is not known to be
   29913      a compile-time constant.  A return of 0 does not indicate that the
   29914      value is _not_ a constant, but merely that GCC cannot prove it is
   29915      a constant with the specified value of the `-O' option.
   29916 
   29917      You typically use this function in an embedded application where
   29918      memory is a critical resource.  If you have some complex
   29919      calculation, you may want it to be folded if it involves
   29920      constants, but need to call a function if it does not.  For
   29921      example:
   29922 
   29923           #define Scale_Value(X)      \
   29924             (__builtin_constant_p (X) \
   29925             ? ((X) * SCALE + OFFSET) : Scale (X))
   29926 
   29927      You may use this built-in function in either a macro or an inline
   29928      function.  However, if you use it in an inlined function and pass
   29929      an argument of the function as the argument to the built-in, GCC
   29930      never returns 1 when you call the inline function with a string
   29931      constant or compound literal (*note Compound Literals::) and does
   29932      not return 1 when you pass a constant numeric value to the inline
   29933      function unless you specify the `-O' option.
   29934 
   29935      You may also use `__builtin_constant_p' in initializers for static
   29936      data.  For instance, you can write
   29937 
   29938           static const int table[] = {
   29939              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
   29940              /* ... */
   29941           };
   29942 
   29943      This is an acceptable initializer even if EXPRESSION is not a
   29944      constant expression, including the case where
   29945      `__builtin_constant_p' returns 1 because EXPRESSION can be folded
   29946      to a constant but EXPRESSION contains operands that are not
   29947      otherwise permitted in a static initializer (for example, `0 &&
   29948      foo ()').  GCC must be more conservative about evaluating the
   29949      built-in in this case, because it has no opportunity to perform
   29950      optimization.
   29951 
   29952      Previous versions of GCC did not accept this built-in in data
   29953      initializers.  The earliest version where it is completely safe is
   29954      3.0.1.
   29955 
   29956  -- Built-in Function: long __builtin_expect (long EXP, long C)
   29957      You may use `__builtin_expect' to provide the compiler with branch
   29958      prediction information.  In general, you should prefer to use
   29959      actual profile feedback for this (`-fprofile-arcs'), as
   29960      programmers are notoriously bad at predicting how their programs
   29961      actually perform.  However, there are applications in which this
   29962      data is hard to collect.
   29963 
   29964      The return value is the value of EXP, which should be an integral
   29965      expression.  The semantics of the built-in are that it is expected
   29966      that EXP == C.  For example:
   29967 
   29968           if (__builtin_expect (x, 0))
   29969             foo ();
   29970 
   29971      indicates that we do not expect to call `foo', since we expect `x'
   29972      to be zero.  Since you are limited to integral expressions for
   29973      EXP, you should use constructions such as
   29974 
   29975           if (__builtin_expect (ptr != NULL, 1))
   29976             foo (*ptr);
   29977 
   29978      when testing pointer or floating-point values.
   29979 
   29980  -- Built-in Function: void __builtin_trap (void)
   29981      This function causes the program to exit abnormally.  GCC
   29982      implements this function by using a target-dependent mechanism
   29983      (such as intentionally executing an illegal instruction) or by
   29984      calling `abort'.  The mechanism used may vary from release to
   29985      release so you should not rely on any particular implementation.
   29986 
   29987  -- Built-in Function: void __builtin_unreachable (void)
   29988      If control flow reaches the point of the `__builtin_unreachable',
   29989      the program is undefined.  It is useful in situations where the
   29990      compiler cannot deduce the unreachability of the code.
   29991 
   29992      One such case is immediately following an `asm' statement that
   29993      either never terminates, or one that transfers control elsewhere
   29994      and never returns.  In this example, without the
   29995      `__builtin_unreachable', GCC issues a warning that control reaches
   29996      the end of a non-void function.  It also generates code to return
   29997      after the `asm'.
   29998 
   29999           int f (int c, int v)
   30000           {
   30001             if (c)
   30002               {
   30003                 return v;
   30004               }
   30005             else
   30006               {
   30007                 asm("jmp error_handler");
   30008                 __builtin_unreachable ();
   30009               }
   30010           }
   30011 
   30012      Because the `asm' statement unconditionally transfers control out
   30013      of the function, control never reaches the end of the function
   30014      body.  The `__builtin_unreachable' is in fact unreachable and
   30015      communicates this fact to the compiler.
   30016 
   30017      Another use for `__builtin_unreachable' is following a call a
   30018      function that never returns but that is not declared
   30019      `__attribute__((noreturn))', as in this example:
   30020 
   30021           void function_that_never_returns (void);
   30022 
   30023           int g (int c)
   30024           {
   30025             if (c)
   30026               {
   30027                 return 1;
   30028               }
   30029             else
   30030               {
   30031                 function_that_never_returns ();
   30032                 __builtin_unreachable ();
   30033               }
   30034           }
   30035 
   30036 
   30037  -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
   30038           size_t ALIGN, ...)
   30039      This function returns its first argument, and allows the compiler
   30040      to assume that the returned pointer is at least ALIGN bytes
   30041      aligned.  This built-in can have either two or three arguments, if
   30042      it has three, the third argument should have integer type, and if
   30043      it is nonzero means misalignment offset.  For example:
   30044 
   30045           void *x = __builtin_assume_aligned (arg, 16);
   30046 
   30047      means that the compiler can assume `x', set to `arg', is at least
   30048      16-byte aligned, while:
   30049 
   30050           void *x = __builtin_assume_aligned (arg, 32, 8);
   30051 
   30052      means that the compiler can assume for `x', set to `arg', that
   30053      `(char *) x - 8' is 32-byte aligned.
   30054 
   30055  -- Built-in Function: int __builtin_LINE ()
   30056      This function is the equivalent to the preprocessor `__LINE__'
   30057      macro and returns the line number of the invocation of the
   30058      built-in.
   30059 
   30060  -- Built-in Function: int __builtin_FUNCTION ()
   30061      This function is the equivalent to the preprocessor `__FUNCTION__'
   30062      macro and returns the function name the invocation of the built-in
   30063      is in.
   30064 
   30065  -- Built-in Function: int __builtin_FILE ()
   30066      This function is the equivalent to the preprocessor `__FILE__'
   30067      macro and returns the file name the invocation of the built-in is
   30068      in.
   30069 
   30070  -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
   30071           *END)
   30072      This function is used to flush the processor's instruction cache
   30073      for the region of memory between BEGIN inclusive and END
   30074      exclusive.  Some targets require that the instruction cache be
   30075      flushed, after modifying memory containing code, in order to obtain
   30076      deterministic behavior.
   30077 
   30078      If the target does not require instruction cache flushes,
   30079      `__builtin___clear_cache' has no effect.  Otherwise either
   30080      instructions are emitted in-line to clear the instruction cache or
   30081      a call to the `__clear_cache' function in libgcc is made.
   30082 
   30083  -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
   30084      This function is used to minimize cache-miss latency by moving
   30085      data into a cache before it is accessed.  You can insert calls to
   30086      `__builtin_prefetch' into code for which you know addresses of
   30087      data in memory that is likely to be accessed soon.  If the target
   30088      supports them, data prefetch instructions are generated.  If the
   30089      prefetch is done early enough before the access then the data will
   30090      be in the cache by the time it is accessed.
   30091 
   30092      The value of ADDR is the address of the memory to prefetch.  There
   30093      are two optional arguments, RW and LOCALITY.  The value of RW is a
   30094      compile-time constant one or zero; one means that the prefetch is
   30095      preparing for a write to the memory address and zero, the default,
   30096      means that the prefetch is preparing for a read.  The value
   30097      LOCALITY must be a compile-time constant integer between zero and
   30098      three.  A value of zero means that the data has no temporal
   30099      locality, so it need not be left in the cache after the access.  A
   30100      value of three means that the data has a high degree of temporal
   30101      locality and should be left in all levels of cache possible.
   30102      Values of one and two mean, respectively, a low or moderate degree
   30103      of temporal locality.  The default is three.
   30104 
   30105           for (i = 0; i < n; i++)
   30106             {
   30107               a[i] = a[i] + b[i];
   30108               __builtin_prefetch (&a[i+j], 1, 1);
   30109               __builtin_prefetch (&b[i+j], 0, 1);
   30110               /* ... */
   30111             }
   30112 
   30113      Data prefetch does not generate faults if ADDR is invalid, but the
   30114      address expression itself must be valid.  For example, a prefetch
   30115      of `p->next' does not fault if `p->next' is not a valid address,
   30116      but evaluation faults if `p' is not a valid address.
   30117 
   30118      If the target does not support data prefetch, the address
   30119      expression is evaluated if it includes side effects but no other
   30120      code is generated and GCC does not issue a warning.
   30121 
   30122  -- Built-in Function: double __builtin_huge_val (void)
   30123      Returns a positive infinity, if supported by the floating-point
   30124      format, else `DBL_MAX'.  This function is suitable for
   30125      implementing the ISO C macro `HUGE_VAL'.
   30126 
   30127  -- Built-in Function: float __builtin_huge_valf (void)
   30128      Similar to `__builtin_huge_val', except the return type is `float'.
   30129 
   30130  -- Built-in Function: long double __builtin_huge_vall (void)
   30131      Similar to `__builtin_huge_val', except the return type is `long
   30132      double'.
   30133 
   30134  -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
   30135           int, ...)
   30136      This built-in implements the C99 fpclassify functionality.  The
   30137      first five int arguments should be the target library's notion of
   30138      the possible FP classes and are used for return values.  They must
   30139      be constant values and they must appear in this order: `FP_NAN',
   30140      `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
   30141      ellipsis is for exactly one floating-point value to classify.  GCC
   30142      treats the last argument as type-generic, which means it does not
   30143      do default promotion from float to double.
   30144 
   30145  -- Built-in Function: double __builtin_inf (void)
   30146      Similar to `__builtin_huge_val', except a warning is generated if
   30147      the target floating-point format does not support infinities.
   30148 
   30149  -- Built-in Function: _Decimal32 __builtin_infd32 (void)
   30150      Similar to `__builtin_inf', except the return type is `_Decimal32'.
   30151 
   30152  -- Built-in Function: _Decimal64 __builtin_infd64 (void)
   30153      Similar to `__builtin_inf', except the return type is `_Decimal64'.
   30154 
   30155  -- Built-in Function: _Decimal128 __builtin_infd128 (void)
   30156      Similar to `__builtin_inf', except the return type is
   30157      `_Decimal128'.
   30158 
   30159  -- Built-in Function: float __builtin_inff (void)
   30160      Similar to `__builtin_inf', except the return type is `float'.
   30161      This function is suitable for implementing the ISO C99 macro
   30162      `INFINITY'.
   30163 
   30164  -- Built-in Function: long double __builtin_infl (void)
   30165      Similar to `__builtin_inf', except the return type is `long
   30166      double'.
   30167 
   30168  -- Built-in Function: int __builtin_isinf_sign (...)
   30169      Similar to `isinf', except the return value is negative for an
   30170      argument of `-Inf'.  Note while the parameter list is an ellipsis,
   30171      this function only accepts exactly one floating-point argument.
   30172      GCC treats this parameter as type-generic, which means it does not
   30173      do default promotion from float to double.
   30174 
   30175  -- Built-in Function: double __builtin_nan (const char *str)
   30176      This is an implementation of the ISO C99 function `nan'.
   30177 
   30178      Since ISO C99 defines this function in terms of `strtod', which we
   30179      do not implement, a description of the parsing is in order.  The
   30180      string is parsed as by `strtol'; that is, the base is recognized by
   30181      leading `0' or `0x' prefixes.  The number parsed is placed in the
   30182      significand such that the least significant bit of the number is
   30183      at the least significant bit of the significand.  The number is
   30184      truncated to fit the significand field provided.  The significand
   30185      is forced to be a quiet NaN.
   30186 
   30187      This function, if given a string literal all of which would have
   30188      been consumed by `strtol', is evaluated early enough that it is
   30189      considered a compile-time constant.
   30190 
   30191  -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
   30192      Similar to `__builtin_nan', except the return type is `_Decimal32'.
   30193 
   30194  -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
   30195      Similar to `__builtin_nan', except the return type is `_Decimal64'.
   30196 
   30197  -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
   30198      Similar to `__builtin_nan', except the return type is
   30199      `_Decimal128'.
   30200 
   30201  -- Built-in Function: float __builtin_nanf (const char *str)
   30202      Similar to `__builtin_nan', except the return type is `float'.
   30203 
   30204  -- Built-in Function: long double __builtin_nanl (const char *str)
   30205      Similar to `__builtin_nan', except the return type is `long
   30206      double'.
   30207 
   30208  -- Built-in Function: double __builtin_nans (const char *str)
   30209      Similar to `__builtin_nan', except the significand is forced to be
   30210      a signaling NaN.  The `nans' function is proposed by WG14 N965.
   30211 
   30212  -- Built-in Function: float __builtin_nansf (const char *str)
   30213      Similar to `__builtin_nans', except the return type is `float'.
   30214 
   30215  -- Built-in Function: long double __builtin_nansl (const char *str)
   30216      Similar to `__builtin_nans', except the return type is `long
   30217      double'.
   30218 
   30219  -- Built-in Function: int __builtin_ffs (unsigned int x)
   30220      Returns one plus the index of the least significant 1-bit of X, or
   30221      if X is zero, returns zero.
   30222 
   30223  -- Built-in Function: int __builtin_clz (unsigned int x)
   30224      Returns the number of leading 0-bits in X, starting at the most
   30225      significant bit position.  If X is 0, the result is undefined.
   30226 
   30227  -- Built-in Function: int __builtin_ctz (unsigned int x)
   30228      Returns the number of trailing 0-bits in X, starting at the least
   30229      significant bit position.  If X is 0, the result is undefined.
   30230 
   30231  -- Built-in Function: int __builtin_clrsb (int x)
   30232      Returns the number of leading redundant sign bits in X, i.e. the
   30233      number of bits following the most significant bit that are
   30234      identical to it.  There are no special cases for 0 or other values.
   30235 
   30236  -- Built-in Function: int __builtin_popcount (unsigned int x)
   30237      Returns the number of 1-bits in X.
   30238 
   30239  -- Built-in Function: int __builtin_parity (unsigned int x)
   30240      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
   30241 
   30242  -- Built-in Function: int __builtin_ffsl (unsigned long)
   30243      Similar to `__builtin_ffs', except the argument type is `unsigned
   30244      long'.
   30245 
   30246  -- Built-in Function: int __builtin_clzl (unsigned long)
   30247      Similar to `__builtin_clz', except the argument type is `unsigned
   30248      long'.
   30249 
   30250  -- Built-in Function: int __builtin_ctzl (unsigned long)
   30251      Similar to `__builtin_ctz', except the argument type is `unsigned
   30252      long'.
   30253 
   30254  -- Built-in Function: int __builtin_clrsbl (long)
   30255      Similar to `__builtin_clrsb', except the argument type is `long'.
   30256 
   30257  -- Built-in Function: int __builtin_popcountl (unsigned long)
   30258      Similar to `__builtin_popcount', except the argument type is
   30259      `unsigned long'.
   30260 
   30261  -- Built-in Function: int __builtin_parityl (unsigned long)
   30262      Similar to `__builtin_parity', except the argument type is
   30263      `unsigned long'.
   30264 
   30265  -- Built-in Function: int __builtin_ffsll (unsigned long long)
   30266      Similar to `__builtin_ffs', except the argument type is `unsigned
   30267      long long'.
   30268 
   30269  -- Built-in Function: int __builtin_clzll (unsigned long long)
   30270      Similar to `__builtin_clz', except the argument type is `unsigned
   30271      long long'.
   30272 
   30273  -- Built-in Function: int __builtin_ctzll (unsigned long long)
   30274      Similar to `__builtin_ctz', except the argument type is `unsigned
   30275      long long'.
   30276 
   30277  -- Built-in Function: int __builtin_clrsbll (long long)
   30278      Similar to `__builtin_clrsb', except the argument type is `long
   30279      long'.
   30280 
   30281  -- Built-in Function: int __builtin_popcountll (unsigned long long)
   30282      Similar to `__builtin_popcount', except the argument type is
   30283      `unsigned long long'.
   30284 
   30285  -- Built-in Function: int __builtin_parityll (unsigned long long)
   30286      Similar to `__builtin_parity', except the argument type is
   30287      `unsigned long long'.
   30288 
   30289  -- Built-in Function: double __builtin_powi (double, int)
   30290      Returns the first argument raised to the power of the second.
   30291      Unlike the `pow' function no guarantees about precision and
   30292      rounding are made.
   30293 
   30294  -- Built-in Function: float __builtin_powif (float, int)
   30295      Similar to `__builtin_powi', except the argument and return types
   30296      are `float'.
   30297 
   30298  -- Built-in Function: long double __builtin_powil (long double, int)
   30299      Similar to `__builtin_powi', except the argument and return types
   30300      are `long double'.
   30301 
   30302  -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
   30303      Returns X with the order of the bytes reversed; for example,
   30304      `0xaabb' becomes `0xbbaa'.  Byte here always means exactly 8 bits.
   30305 
   30306  -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
   30307      Similar to `__builtin_bswap16', except the argument and return
   30308      types are 32 bit.
   30309 
   30310  -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
   30311      Similar to `__builtin_bswap32', except the argument and return
   30312      types are 64 bit.
   30313 
   30314 
   30315 File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
   30316 
   30317 6.56 Built-in Functions Specific to Particular Target Machines
   30318 ==============================================================
   30319 
   30320 On some target machines, GCC supports many built-in functions specific
   30321 to those machines.  Generally these generate calls to specific machine
   30322 instructions, but allow the compiler to schedule those calls.
   30323 
   30324 * Menu:
   30325 
   30326 * Alpha Built-in Functions::
   30327 * ARM iWMMXt Built-in Functions::
   30328 * ARM NEON Intrinsics::
   30329 * AVR Built-in Functions::
   30330 * Blackfin Built-in Functions::
   30331 * FR-V Built-in Functions::
   30332 * X86 Built-in Functions::
   30333 * X86 transactional memory intrinsics::
   30334 * MIPS DSP Built-in Functions::
   30335 * MIPS Paired-Single Support::
   30336 * MIPS Loongson Built-in Functions::
   30337 * Other MIPS Built-in Functions::
   30338 * picoChip Built-in Functions::
   30339 * PowerPC Built-in Functions::
   30340 * PowerPC AltiVec/VSX Built-in Functions::
   30341 * PowerPC Hardware Transactional Memory Built-in Functions::
   30342 * RX Built-in Functions::
   30343 * S/390 System z Built-in Functions::
   30344 * SH Built-in Functions::
   30345 * SPARC VIS Built-in Functions::
   30346 * SPU Built-in Functions::
   30347 * TI C6X Built-in Functions::
   30348 * TILE-Gx Built-in Functions::
   30349 * TILEPro Built-in Functions::
   30350 
   30351 
   30352 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   30353 
   30354 6.56.1 Alpha Built-in Functions
   30355 -------------------------------
   30356 
   30357 These built-in functions are available for the Alpha family of
   30358 processors, depending on the command-line switches used.
   30359 
   30360  The following built-in functions are always available.  They all
   30361 generate the machine instruction that is part of the name.
   30362 
   30363      long __builtin_alpha_implver (void)
   30364      long __builtin_alpha_rpcc (void)
   30365      long __builtin_alpha_amask (long)
   30366      long __builtin_alpha_cmpbge (long, long)
   30367      long __builtin_alpha_extbl (long, long)
   30368      long __builtin_alpha_extwl (long, long)
   30369      long __builtin_alpha_extll (long, long)
   30370      long __builtin_alpha_extql (long, long)
   30371      long __builtin_alpha_extwh (long, long)
   30372      long __builtin_alpha_extlh (long, long)
   30373      long __builtin_alpha_extqh (long, long)
   30374      long __builtin_alpha_insbl (long, long)
   30375      long __builtin_alpha_inswl (long, long)
   30376      long __builtin_alpha_insll (long, long)
   30377      long __builtin_alpha_insql (long, long)
   30378      long __builtin_alpha_inswh (long, long)
   30379      long __builtin_alpha_inslh (long, long)
   30380      long __builtin_alpha_insqh (long, long)
   30381      long __builtin_alpha_mskbl (long, long)
   30382      long __builtin_alpha_mskwl (long, long)
   30383      long __builtin_alpha_mskll (long, long)
   30384      long __builtin_alpha_mskql (long, long)
   30385      long __builtin_alpha_mskwh (long, long)
   30386      long __builtin_alpha_msklh (long, long)
   30387      long __builtin_alpha_mskqh (long, long)
   30388      long __builtin_alpha_umulh (long, long)
   30389      long __builtin_alpha_zap (long, long)
   30390      long __builtin_alpha_zapnot (long, long)
   30391 
   30392  The following built-in functions are always with `-mmax' or
   30393 `-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
   30394 machine instruction that is part of the name.
   30395 
   30396      long __builtin_alpha_pklb (long)
   30397      long __builtin_alpha_pkwb (long)
   30398      long __builtin_alpha_unpkbl (long)
   30399      long __builtin_alpha_unpkbw (long)
   30400      long __builtin_alpha_minub8 (long, long)
   30401      long __builtin_alpha_minsb8 (long, long)
   30402      long __builtin_alpha_minuw4 (long, long)
   30403      long __builtin_alpha_minsw4 (long, long)
   30404      long __builtin_alpha_maxub8 (long, long)
   30405      long __builtin_alpha_maxsb8 (long, long)
   30406      long __builtin_alpha_maxuw4 (long, long)
   30407      long __builtin_alpha_maxsw4 (long, long)
   30408      long __builtin_alpha_perr (long, long)
   30409 
   30410  The following built-in functions are always with `-mcix' or
   30411 `-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
   30412 machine instruction that is part of the name.
   30413 
   30414      long __builtin_alpha_cttz (long)
   30415      long __builtin_alpha_ctlz (long)
   30416      long __builtin_alpha_ctpop (long)
   30417 
   30418  The following built-in functions are available on systems that use the
   30419 OSF/1 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL
   30420 calls, but when invoked with `-mtls-kernel', they invoke `rdval' and
   30421 `wrval'.
   30422 
   30423      void *__builtin_thread_pointer (void)
   30424      void __builtin_set_thread_pointer (void *)
   30425 
   30426 
   30427 File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
   30428 
   30429 6.56.2 ARM iWMMXt Built-in Functions
   30430 ------------------------------------
   30431 
   30432 These built-in functions are available for the ARM family of processors
   30433 when the `-mcpu=iwmmxt' switch is used:
   30434 
   30435      typedef int v2si __attribute__ ((vector_size (8)));
   30436      typedef short v4hi __attribute__ ((vector_size (8)));
   30437      typedef char v8qi __attribute__ ((vector_size (8)));
   30438 
   30439      int __builtin_arm_getwcgr0 (void)
   30440      void __builtin_arm_setwcgr0 (int)
   30441      int __builtin_arm_getwcgr1 (void)
   30442      void __builtin_arm_setwcgr1 (int)
   30443      int __builtin_arm_getwcgr2 (void)
   30444      void __builtin_arm_setwcgr2 (int)
   30445      int __builtin_arm_getwcgr3 (void)
   30446      void __builtin_arm_setwcgr3 (int)
   30447      int __builtin_arm_textrmsb (v8qi, int)
   30448      int __builtin_arm_textrmsh (v4hi, int)
   30449      int __builtin_arm_textrmsw (v2si, int)
   30450      int __builtin_arm_textrmub (v8qi, int)
   30451      int __builtin_arm_textrmuh (v4hi, int)
   30452      int __builtin_arm_textrmuw (v2si, int)
   30453      v8qi __builtin_arm_tinsrb (v8qi, int, int)
   30454      v4hi __builtin_arm_tinsrh (v4hi, int, int)
   30455      v2si __builtin_arm_tinsrw (v2si, int, int)
   30456      long long __builtin_arm_tmia (long long, int, int)
   30457      long long __builtin_arm_tmiabb (long long, int, int)
   30458      long long __builtin_arm_tmiabt (long long, int, int)
   30459      long long __builtin_arm_tmiaph (long long, int, int)
   30460      long long __builtin_arm_tmiatb (long long, int, int)
   30461      long long __builtin_arm_tmiatt (long long, int, int)
   30462      int __builtin_arm_tmovmskb (v8qi)
   30463      int __builtin_arm_tmovmskh (v4hi)
   30464      int __builtin_arm_tmovmskw (v2si)
   30465      long long __builtin_arm_waccb (v8qi)
   30466      long long __builtin_arm_wacch (v4hi)
   30467      long long __builtin_arm_waccw (v2si)
   30468      v8qi __builtin_arm_waddb (v8qi, v8qi)
   30469      v8qi __builtin_arm_waddbss (v8qi, v8qi)
   30470      v8qi __builtin_arm_waddbus (v8qi, v8qi)
   30471      v4hi __builtin_arm_waddh (v4hi, v4hi)
   30472      v4hi __builtin_arm_waddhss (v4hi, v4hi)
   30473      v4hi __builtin_arm_waddhus (v4hi, v4hi)
   30474      v2si __builtin_arm_waddw (v2si, v2si)
   30475      v2si __builtin_arm_waddwss (v2si, v2si)
   30476      v2si __builtin_arm_waddwus (v2si, v2si)
   30477      v8qi __builtin_arm_walign (v8qi, v8qi, int)
   30478      long long __builtin_arm_wand(long long, long long)
   30479      long long __builtin_arm_wandn (long long, long long)
   30480      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
   30481      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
   30482      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
   30483      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
   30484      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
   30485      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
   30486      v2si __builtin_arm_wcmpeqw (v2si, v2si)
   30487      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
   30488      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
   30489      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
   30490      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
   30491      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
   30492      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
   30493      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
   30494      long long __builtin_arm_wmacsz (v4hi, v4hi)
   30495      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
   30496      long long __builtin_arm_wmacuz (v4hi, v4hi)
   30497      v4hi __builtin_arm_wmadds (v4hi, v4hi)
   30498      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
   30499      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
   30500      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
   30501      v2si __builtin_arm_wmaxsw (v2si, v2si)
   30502      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
   30503      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
   30504      v2si __builtin_arm_wmaxuw (v2si, v2si)
   30505      v8qi __builtin_arm_wminsb (v8qi, v8qi)
   30506      v4hi __builtin_arm_wminsh (v4hi, v4hi)
   30507      v2si __builtin_arm_wminsw (v2si, v2si)
   30508      v8qi __builtin_arm_wminub (v8qi, v8qi)
   30509      v4hi __builtin_arm_wminuh (v4hi, v4hi)
   30510      v2si __builtin_arm_wminuw (v2si, v2si)
   30511      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
   30512      v4hi __builtin_arm_wmulul (v4hi, v4hi)
   30513      v4hi __builtin_arm_wmulum (v4hi, v4hi)
   30514      long long __builtin_arm_wor (long long, long long)
   30515      v2si __builtin_arm_wpackdss (long long, long long)
   30516      v2si __builtin_arm_wpackdus (long long, long long)
   30517      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
   30518      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
   30519      v4hi __builtin_arm_wpackwss (v2si, v2si)
   30520      v4hi __builtin_arm_wpackwus (v2si, v2si)
   30521      long long __builtin_arm_wrord (long long, long long)
   30522      long long __builtin_arm_wrordi (long long, int)
   30523      v4hi __builtin_arm_wrorh (v4hi, long long)
   30524      v4hi __builtin_arm_wrorhi (v4hi, int)
   30525      v2si __builtin_arm_wrorw (v2si, long long)
   30526      v2si __builtin_arm_wrorwi (v2si, int)
   30527      v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
   30528      v2si __builtin_arm_wsadbz (v8qi, v8qi)
   30529      v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
   30530      v2si __builtin_arm_wsadhz (v4hi, v4hi)
   30531      v4hi __builtin_arm_wshufh (v4hi, int)
   30532      long long __builtin_arm_wslld (long long, long long)
   30533      long long __builtin_arm_wslldi (long long, int)
   30534      v4hi __builtin_arm_wsllh (v4hi, long long)
   30535      v4hi __builtin_arm_wsllhi (v4hi, int)
   30536      v2si __builtin_arm_wsllw (v2si, long long)
   30537      v2si __builtin_arm_wsllwi (v2si, int)
   30538      long long __builtin_arm_wsrad (long long, long long)
   30539      long long __builtin_arm_wsradi (long long, int)
   30540      v4hi __builtin_arm_wsrah (v4hi, long long)
   30541      v4hi __builtin_arm_wsrahi (v4hi, int)
   30542      v2si __builtin_arm_wsraw (v2si, long long)
   30543      v2si __builtin_arm_wsrawi (v2si, int)
   30544      long long __builtin_arm_wsrld (long long, long long)
   30545      long long __builtin_arm_wsrldi (long long, int)
   30546      v4hi __builtin_arm_wsrlh (v4hi, long long)
   30547      v4hi __builtin_arm_wsrlhi (v4hi, int)
   30548      v2si __builtin_arm_wsrlw (v2si, long long)
   30549      v2si __builtin_arm_wsrlwi (v2si, int)
   30550      v8qi __builtin_arm_wsubb (v8qi, v8qi)
   30551      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
   30552      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
   30553      v4hi __builtin_arm_wsubh (v4hi, v4hi)
   30554      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
   30555      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
   30556      v2si __builtin_arm_wsubw (v2si, v2si)
   30557      v2si __builtin_arm_wsubwss (v2si, v2si)
   30558      v2si __builtin_arm_wsubwus (v2si, v2si)
   30559      v4hi __builtin_arm_wunpckehsb (v8qi)
   30560      v2si __builtin_arm_wunpckehsh (v4hi)
   30561      long long __builtin_arm_wunpckehsw (v2si)
   30562      v4hi __builtin_arm_wunpckehub (v8qi)
   30563      v2si __builtin_arm_wunpckehuh (v4hi)
   30564      long long __builtin_arm_wunpckehuw (v2si)
   30565      v4hi __builtin_arm_wunpckelsb (v8qi)
   30566      v2si __builtin_arm_wunpckelsh (v4hi)
   30567      long long __builtin_arm_wunpckelsw (v2si)
   30568      v4hi __builtin_arm_wunpckelub (v8qi)
   30569      v2si __builtin_arm_wunpckeluh (v4hi)
   30570      long long __builtin_arm_wunpckeluw (v2si)
   30571      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
   30572      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
   30573      v2si __builtin_arm_wunpckihw (v2si, v2si)
   30574      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
   30575      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
   30576      v2si __builtin_arm_wunpckilw (v2si, v2si)
   30577      long long __builtin_arm_wxor (long long, long long)
   30578      long long __builtin_arm_wzero ()
   30579 
   30580 
   30581 File: gcc.info,  Node: ARM NEON Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   30582 
   30583 6.56.3 ARM NEON Intrinsics
   30584 --------------------------
   30585 
   30586 These built-in intrinsics for the ARM Advanced SIMD extension are
   30587 available when the `-mfpu=neon' switch is used:
   30588 
   30589 6.56.3.1 Addition
   30590 .................
   30591 
   30592    * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
   30593      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
   30594 
   30595    * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
   30596      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
   30597 
   30598    * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
   30599      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
   30600 
   30601    * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
   30602      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
   30603 
   30604    * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
   30605      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
   30606 
   30607    * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
   30608      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
   30609 
   30610    * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
   30611      _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
   30612 
   30613    * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
   30614 
   30615    * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
   30616 
   30617    * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
   30618      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
   30619 
   30620    * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
   30621      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
   30622 
   30623    * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
   30624      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
   30625 
   30626    * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
   30627      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
   30628 
   30629    * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
   30630      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
   30631 
   30632    * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
   30633      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
   30634 
   30635    * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
   30636      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
   30637 
   30638    * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
   30639      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
   30640 
   30641    * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
   30642      _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
   30643 
   30644    * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
   30645      _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
   30646 
   30647    * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
   30648      _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
   30649 
   30650    * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
   30651      _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
   30652 
   30653    * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
   30654      _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
   30655 
   30656    * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
   30657      _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
   30658 
   30659    * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
   30660      _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
   30661 
   30662    * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
   30663      _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
   30664 
   30665    * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
   30666      _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
   30667 
   30668    * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
   30669      _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
   30670 
   30671    * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
   30672      _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
   30673 
   30674    * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
   30675      _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
   30676 
   30677    * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
   30678      _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
   30679 
   30680    * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
   30681      _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
   30682 
   30683    * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
   30684      _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
   30685 
   30686    * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
   30687      _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
   30688 
   30689    * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
   30690      _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
   30691 
   30692    * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
   30693      _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
   30694 
   30695    * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
   30696      _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
   30697 
   30698    * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
   30699      _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
   30700 
   30701    * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
   30702      _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
   30703 
   30704    * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
   30705      _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
   30706 
   30707    * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
   30708      _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
   30709 
   30710    * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
   30711      _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
   30712 
   30713    * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
   30714      _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
   30715 
   30716    * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
   30717      _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
   30718 
   30719    * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
   30720      _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
   30721 
   30722    * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
   30723      _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
   30724 
   30725    * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
   30726      _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
   30727 
   30728    * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
   30729      _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
   30730 
   30731    * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
   30732      _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
   30733 
   30734    * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
   30735      _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
   30736 
   30737    * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
   30738      _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
   30739 
   30740    * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
   30741      _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
   30742 
   30743    * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
   30744      _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
   30745 
   30746    * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
   30747      _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
   30748 
   30749    * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
   30750      _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
   30751 
   30752    * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
   30753      _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
   30754 
   30755    * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
   30756      _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
   30757 
   30758    * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
   30759      _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
   30760 
   30761    * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
   30762      _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
   30763 
   30764    * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
   30765      _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
   30766 
   30767    * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
   30768      _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
   30769 
   30770    * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
   30771      _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
   30772 
   30773    * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
   30774      _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
   30775 
   30776    * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
   30777      _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
   30778 
   30779    * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
   30780      _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
   30781 
   30782    * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
   30783      _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
   30784 
   30785    * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
   30786      _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
   30787 
   30788    * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
   30789      _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
   30790 
   30791    * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
   30792      _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
   30793 
   30794    * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
   30795      _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
   30796 
   30797    * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
   30798      _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
   30799 
   30800    * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
   30801      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
   30802 
   30803    * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
   30804      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
   30805 
   30806    * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
   30807      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
   30808 
   30809    * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
   30810      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
   30811 
   30812    * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
   30813      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
   30814 
   30815    * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
   30816      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
   30817 
   30818    * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
   30819      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
   30820 
   30821    * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
   30822      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
   30823 
   30824    * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
   30825      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
   30826 
   30827    * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
   30828      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
   30829 
   30830    * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
   30831      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
   30832 
   30833    * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
   30834      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
   30835 
   30836 6.56.3.2 Multiplication
   30837 .......................
   30838 
   30839    * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
   30840      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
   30841 
   30842    * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
   30843      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
   30844 
   30845    * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
   30846      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
   30847 
   30848    * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
   30849      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
   30850 
   30851    * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
   30852      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
   30853 
   30854    * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
   30855      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
   30856 
   30857    * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
   30858      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
   30859 
   30860    * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
   30861      _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
   30862 
   30863    * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
   30864      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
   30865 
   30866    * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
   30867      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
   30868 
   30869    * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
   30870      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
   30871 
   30872    * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
   30873      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
   30874 
   30875    * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
   30876      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
   30877 
   30878    * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
   30879      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
   30880 
   30881    * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
   30882      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
   30883 
   30884    * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
   30885      _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
   30886 
   30887    * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
   30888      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
   30889 
   30890    * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
   30891      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
   30892 
   30893    * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
   30894      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
   30895 
   30896    * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
   30897      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
   30898 
   30899    * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
   30900      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
   30901 
   30902    * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
   30903      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
   30904 
   30905    * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
   30906      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
   30907 
   30908    * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
   30909      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
   30910 
   30911    * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
   30912      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
   30913 
   30914    * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
   30915      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
   30916 
   30917    * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
   30918      _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
   30919 
   30920    * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
   30921      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
   30922 
   30923    * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
   30924      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
   30925 
   30926    * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
   30927      _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
   30928 
   30929    * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
   30930      _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
   30931 
   30932    * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
   30933      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
   30934 
   30935    * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
   30936      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
   30937 
   30938 6.56.3.3 Multiply-accumulate
   30939 ............................
   30940 
   30941    * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   30942      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
   30943 
   30944    * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   30945      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
   30946 
   30947    * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   30948      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
   30949 
   30950    * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
   30951      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
   30952 
   30953    * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
   30954      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
   30955 
   30956    * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
   30957      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
   30958 
   30959    * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
   30960      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
   30961 
   30962    * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   30963      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
   30964 
   30965    * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   30966      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
   30967 
   30968    * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   30969      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
   30970 
   30971    * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   30972      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
   30973 
   30974    * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   30975      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
   30976 
   30977    * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   30978      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
   30979 
   30980    * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
   30981      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
   30982 
   30983    * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   30984      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
   30985 
   30986    * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   30987      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
   30988 
   30989    * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   30990      _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
   30991 
   30992    * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   30993      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
   30994 
   30995    * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   30996      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
   30997 
   30998    * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
   30999      _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
   31000 
   31001    * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   31002      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
   31003 
   31004    * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   31005      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
   31006 
   31007 6.56.3.4 Multiply-subtract
   31008 ..........................
   31009 
   31010    * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   31011      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
   31012 
   31013    * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   31014      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
   31015 
   31016    * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   31017      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
   31018 
   31019    * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
   31020      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
   31021 
   31022    * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
   31023      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
   31024 
   31025    * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
   31026      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
   31027 
   31028    * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
   31029      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
   31030 
   31031    * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   31032      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
   31033 
   31034    * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   31035      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
   31036 
   31037    * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   31038      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
   31039 
   31040    * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
   31041      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
   31042 
   31043    * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
   31044      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
   31045 
   31046    * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
   31047      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
   31048 
   31049    * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
   31050      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
   31051 
   31052    * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   31053      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
   31054 
   31055    * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   31056      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
   31057 
   31058    * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   31059      _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
   31060 
   31061    * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   31062      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
   31063 
   31064    * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   31065      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
   31066 
   31067    * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
   31068      _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
   31069 
   31070    * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   31071      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
   31072 
   31073    * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   31074      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
   31075 
   31076 6.56.3.5 Fused-multiply-accumulate
   31077 ..................................
   31078 
   31079    * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
   31080      _Form of expected instruction(s):_ `vfma.f32 D0, D0, D0'
   31081 
   31082    * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
   31083      _Form of expected instruction(s):_ `vfma.f32 Q0, Q0, Q0'
   31084 
   31085 6.56.3.6 Fused-multiply-subtract
   31086 ................................
   31087 
   31088    * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
   31089      _Form of expected instruction(s):_ `vfms.f32 D0, D0, D0'
   31090 
   31091    * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
   31092      _Form of expected instruction(s):_ `vfms.f32 Q0, Q0, Q0'
   31093 
   31094 6.56.3.7 Round to integral (to nearest, ties to even)
   31095 .....................................................
   31096 
   31097    * float32x2_t vrndn_f32 (float32x2_t)
   31098      _Form of expected instruction(s):_ `vrintn.f32 D0, D0'
   31099 
   31100    * float32x4_t vrndqn_f32 (float32x4_t)
   31101      _Form of expected instruction(s):_ `vrintn.f32 Q0, Q0'
   31102 
   31103 6.56.3.8 Round to integral (to nearest, ties away from zero)
   31104 ............................................................
   31105 
   31106    * float32x2_t vrnda_f32 (float32x2_t)
   31107      _Form of expected instruction(s):_ `vrinta.f32 D0, D0'
   31108 
   31109    * float32x4_t vrndqa_f32 (float32x4_t)
   31110      _Form of expected instruction(s):_ `vrinta.f32 Q0, Q0'
   31111 
   31112 6.56.3.9 Round to integral (towards +Inf)
   31113 .........................................
   31114 
   31115    * float32x2_t vrndp_f32 (float32x2_t)
   31116      _Form of expected instruction(s):_ `vrintp.f32 D0, D0'
   31117 
   31118    * float32x4_t vrndqp_f32 (float32x4_t)
   31119      _Form of expected instruction(s):_ `vrintp.f32 Q0, Q0'
   31120 
   31121 6.56.3.10 Round to integral (towards -Inf)
   31122 ..........................................
   31123 
   31124    * float32x2_t vrndm_f32 (float32x2_t)
   31125      _Form of expected instruction(s):_ `vrintm.f32 D0, D0'
   31126 
   31127    * float32x4_t vrndqm_f32 (float32x4_t)
   31128      _Form of expected instruction(s):_ `vrintm.f32 Q0, Q0'
   31129 
   31130 6.56.3.11 Round to integral (towards 0)
   31131 .......................................
   31132 
   31133    * float32x2_t vrnd_f32 (float32x2_t)
   31134      _Form of expected instruction(s):_ `vrintz.f32 D0, D0'
   31135 
   31136    * float32x4_t vrndq_f32 (float32x4_t)
   31137      _Form of expected instruction(s):_ `vrintz.f32 Q0, Q0'
   31138 
   31139 6.56.3.12 Subtraction
   31140 .....................
   31141 
   31142    * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
   31143      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
   31144 
   31145    * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
   31146      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
   31147 
   31148    * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
   31149      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
   31150 
   31151    * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
   31152      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
   31153 
   31154    * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
   31155      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
   31156 
   31157    * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
   31158      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
   31159 
   31160    * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
   31161      _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
   31162 
   31163    * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
   31164 
   31165    * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
   31166 
   31167    * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
   31168      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
   31169 
   31170    * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
   31171      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
   31172 
   31173    * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
   31174      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
   31175 
   31176    * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
   31177      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
   31178 
   31179    * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
   31180      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
   31181 
   31182    * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
   31183      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
   31184 
   31185    * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
   31186      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
   31187 
   31188    * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
   31189      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
   31190 
   31191    * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
   31192      _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
   31193 
   31194    * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
   31195      _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
   31196 
   31197    * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
   31198      _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
   31199 
   31200    * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
   31201      _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
   31202 
   31203    * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
   31204      _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
   31205 
   31206    * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
   31207      _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
   31208 
   31209    * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
   31210      _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
   31211 
   31212    * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
   31213      _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
   31214 
   31215    * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
   31216      _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
   31217 
   31218    * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
   31219      _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
   31220 
   31221    * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
   31222      _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
   31223 
   31224    * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
   31225      _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
   31226 
   31227    * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
   31228      _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
   31229 
   31230    * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
   31231      _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
   31232 
   31233    * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
   31234      _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
   31235 
   31236    * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
   31237      _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
   31238 
   31239    * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
   31240      _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
   31241 
   31242    * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
   31243      _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
   31244 
   31245    * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
   31246      _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
   31247 
   31248    * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
   31249      _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
   31250 
   31251    * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
   31252      _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
   31253 
   31254    * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
   31255      _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
   31256 
   31257    * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
   31258      _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
   31259 
   31260    * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
   31261      _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
   31262 
   31263    * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
   31264      _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
   31265 
   31266    * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
   31267      _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
   31268 
   31269    * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
   31270      _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
   31271 
   31272    * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
   31273      _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
   31274 
   31275    * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
   31276      _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
   31277 
   31278    * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
   31279      _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
   31280 
   31281    * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
   31282      _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
   31283 
   31284    * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
   31285      _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
   31286 
   31287    * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
   31288      _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
   31289 
   31290    * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
   31291      _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
   31292 
   31293    * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
   31294      _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
   31295 
   31296    * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
   31297      _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
   31298 
   31299    * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
   31300      _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
   31301 
   31302    * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
   31303      _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
   31304 
   31305    * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
   31306      _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
   31307 
   31308    * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
   31309      _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
   31310 
   31311    * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
   31312      _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
   31313 
   31314    * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
   31315      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
   31316 
   31317    * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
   31318      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
   31319 
   31320    * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
   31321      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
   31322 
   31323    * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
   31324      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
   31325 
   31326    * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
   31327      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
   31328 
   31329    * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
   31330      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
   31331 
   31332    * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
   31333      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
   31334 
   31335    * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
   31336      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
   31337 
   31338    * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
   31339      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
   31340 
   31341    * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
   31342      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
   31343 
   31344    * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
   31345      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
   31346 
   31347    * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
   31348      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
   31349 
   31350 6.56.3.13 Comparison (equal-to)
   31351 ...............................
   31352 
   31353    * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
   31354      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
   31355 
   31356    * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
   31357      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
   31358 
   31359    * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
   31360      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   31361 
   31362    * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
   31363      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
   31364 
   31365    * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
   31366      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
   31367 
   31368    * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
   31369      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   31370 
   31371    * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
   31372      _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
   31373 
   31374    * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
   31375      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   31376 
   31377    * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
   31378      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
   31379 
   31380    * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
   31381      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
   31382 
   31383    * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
   31384      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   31385 
   31386    * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
   31387      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
   31388 
   31389    * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
   31390      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
   31391 
   31392    * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
   31393      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   31394 
   31395    * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
   31396      _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
   31397 
   31398    * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
   31399      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   31400 
   31401 6.56.3.14 Comparison (greater-than-or-equal-to)
   31402 ...............................................
   31403 
   31404    * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
   31405      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
   31406 
   31407    * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
   31408      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
   31409 
   31410    * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
   31411      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
   31412 
   31413    * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
   31414      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
   31415 
   31416    * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
   31417      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
   31418 
   31419    * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
   31420      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
   31421 
   31422    * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
   31423      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
   31424 
   31425    * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
   31426      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
   31427 
   31428    * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
   31429      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
   31430 
   31431    * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
   31432      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
   31433 
   31434    * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
   31435      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
   31436 
   31437    * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
   31438      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
   31439 
   31440    * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
   31441      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
   31442 
   31443    * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
   31444      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
   31445 
   31446 6.56.3.15 Comparison (less-than-or-equal-to)
   31447 ............................................
   31448 
   31449    * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
   31450      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
   31451 
   31452    * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
   31453      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
   31454 
   31455    * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
   31456      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
   31457 
   31458    * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
   31459      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
   31460 
   31461    * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
   31462      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
   31463 
   31464    * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
   31465      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
   31466 
   31467    * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
   31468      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
   31469 
   31470    * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
   31471      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
   31472 
   31473    * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
   31474      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
   31475 
   31476    * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
   31477      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
   31478 
   31479    * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
   31480      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
   31481 
   31482    * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
   31483      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
   31484 
   31485    * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
   31486      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
   31487 
   31488    * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
   31489      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
   31490 
   31491 6.56.3.16 Comparison (greater-than)
   31492 ...................................
   31493 
   31494    * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
   31495      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
   31496 
   31497    * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
   31498      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
   31499 
   31500    * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
   31501      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
   31502 
   31503    * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
   31504      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
   31505 
   31506    * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
   31507      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
   31508 
   31509    * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
   31510      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
   31511 
   31512    * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
   31513      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
   31514 
   31515    * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
   31516      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
   31517 
   31518    * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
   31519      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
   31520 
   31521    * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
   31522      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
   31523 
   31524    * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
   31525      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
   31526 
   31527    * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
   31528      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
   31529 
   31530    * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
   31531      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
   31532 
   31533    * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
   31534      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
   31535 
   31536 6.56.3.17 Comparison (less-than)
   31537 ................................
   31538 
   31539    * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
   31540      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
   31541 
   31542    * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
   31543      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
   31544 
   31545    * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
   31546      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
   31547 
   31548    * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
   31549      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
   31550 
   31551    * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
   31552      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
   31553 
   31554    * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
   31555      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
   31556 
   31557    * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
   31558      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
   31559 
   31560    * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
   31561      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
   31562 
   31563    * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
   31564      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
   31565 
   31566    * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
   31567      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
   31568 
   31569    * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
   31570      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
   31571 
   31572    * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
   31573      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
   31574 
   31575    * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
   31576      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
   31577 
   31578    * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
   31579      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
   31580 
   31581 6.56.3.18 Comparison (absolute greater-than-or-equal-to)
   31582 ........................................................
   31583 
   31584    * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
   31585      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
   31586 
   31587    * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
   31588      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
   31589 
   31590 6.56.3.19 Comparison (absolute less-than-or-equal-to)
   31591 .....................................................
   31592 
   31593    * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
   31594      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
   31595 
   31596    * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
   31597      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
   31598 
   31599 6.56.3.20 Comparison (absolute greater-than)
   31600 ............................................
   31601 
   31602    * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
   31603      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
   31604 
   31605    * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
   31606      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
   31607 
   31608 6.56.3.21 Comparison (absolute less-than)
   31609 .........................................
   31610 
   31611    * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
   31612      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
   31613 
   31614    * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
   31615      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
   31616 
   31617 6.56.3.22 Test bits
   31618 ...................
   31619 
   31620    * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
   31621      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
   31622 
   31623    * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
   31624      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
   31625 
   31626    * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
   31627      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   31628 
   31629    * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
   31630      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
   31631 
   31632    * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
   31633      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
   31634 
   31635    * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
   31636      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   31637 
   31638    * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
   31639      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   31640 
   31641    * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
   31642      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
   31643 
   31644    * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
   31645      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
   31646 
   31647    * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
   31648      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   31649 
   31650    * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
   31651      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
   31652 
   31653    * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
   31654      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
   31655 
   31656    * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
   31657      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   31658 
   31659    * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
   31660      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   31661 
   31662 6.56.3.23 Absolute difference
   31663 .............................
   31664 
   31665    * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
   31666      _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
   31667 
   31668    * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
   31669      _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
   31670 
   31671    * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
   31672      _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
   31673 
   31674    * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
   31675      _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
   31676 
   31677    * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
   31678      _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
   31679 
   31680    * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
   31681      _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
   31682 
   31683    * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
   31684      _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
   31685 
   31686    * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
   31687      _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
   31688 
   31689    * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
   31690      _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
   31691 
   31692    * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
   31693      _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
   31694 
   31695    * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
   31696      _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
   31697 
   31698    * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
   31699      _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
   31700 
   31701    * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
   31702      _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
   31703 
   31704    * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
   31705      _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
   31706 
   31707    * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
   31708      _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
   31709 
   31710    * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
   31711      _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
   31712 
   31713    * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
   31714      _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
   31715 
   31716    * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
   31717      _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
   31718 
   31719    * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
   31720      _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
   31721 
   31722    * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
   31723      _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
   31724 
   31725 6.56.3.24 Absolute difference and accumulate
   31726 ............................................
   31727 
   31728    * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   31729      _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
   31730 
   31731    * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   31732      _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
   31733 
   31734    * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   31735      _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
   31736 
   31737    * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
   31738      _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
   31739 
   31740    * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
   31741      _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
   31742 
   31743    * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
   31744      _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
   31745 
   31746    * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   31747      _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
   31748 
   31749    * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   31750      _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
   31751 
   31752    * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   31753      _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
   31754 
   31755    * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   31756      _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
   31757 
   31758    * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   31759      _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
   31760 
   31761    * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   31762      _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
   31763 
   31764    * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   31765      _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
   31766 
   31767    * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   31768      _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
   31769 
   31770    * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   31771      _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
   31772 
   31773    * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
   31774      _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
   31775 
   31776    * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
   31777      _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
   31778 
   31779    * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
   31780      _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
   31781 
   31782 6.56.3.25 Maximum
   31783 .................
   31784 
   31785    * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
   31786      _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
   31787 
   31788    * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
   31789      _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
   31790 
   31791    * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
   31792      _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
   31793 
   31794    * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
   31795      _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
   31796 
   31797    * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
   31798      _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
   31799 
   31800    * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
   31801      _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
   31802 
   31803    * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
   31804      _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
   31805 
   31806    * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
   31807      _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
   31808 
   31809    * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
   31810      _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
   31811 
   31812    * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
   31813      _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
   31814 
   31815    * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
   31816      _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
   31817 
   31818    * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
   31819      _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
   31820 
   31821    * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
   31822      _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
   31823 
   31824    * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
   31825      _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
   31826 
   31827 6.56.3.26 Minimum
   31828 .................
   31829 
   31830    * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
   31831      _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
   31832 
   31833    * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
   31834      _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
   31835 
   31836    * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
   31837      _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
   31838 
   31839    * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
   31840      _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
   31841 
   31842    * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
   31843      _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
   31844 
   31845    * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
   31846      _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
   31847 
   31848    * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
   31849      _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
   31850 
   31851    * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
   31852      _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
   31853 
   31854    * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
   31855      _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
   31856 
   31857    * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
   31858      _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
   31859 
   31860    * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
   31861      _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
   31862 
   31863    * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
   31864      _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
   31865 
   31866    * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
   31867      _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
   31868 
   31869    * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
   31870      _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
   31871 
   31872 6.56.3.27 Pairwise add
   31873 ......................
   31874 
   31875    * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
   31876      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
   31877 
   31878    * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
   31879      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
   31880 
   31881    * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
   31882      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
   31883 
   31884    * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
   31885      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
   31886 
   31887    * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
   31888      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
   31889 
   31890    * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
   31891      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
   31892 
   31893    * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
   31894      _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
   31895 
   31896    * uint64x1_t vpaddl_u32 (uint32x2_t)
   31897      _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
   31898 
   31899    * uint32x2_t vpaddl_u16 (uint16x4_t)
   31900      _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
   31901 
   31902    * uint16x4_t vpaddl_u8 (uint8x8_t)
   31903      _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
   31904 
   31905    * int64x1_t vpaddl_s32 (int32x2_t)
   31906      _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
   31907 
   31908    * int32x2_t vpaddl_s16 (int16x4_t)
   31909      _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
   31910 
   31911    * int16x4_t vpaddl_s8 (int8x8_t)
   31912      _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
   31913 
   31914    * uint64x2_t vpaddlq_u32 (uint32x4_t)
   31915      _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
   31916 
   31917    * uint32x4_t vpaddlq_u16 (uint16x8_t)
   31918      _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
   31919 
   31920    * uint16x8_t vpaddlq_u8 (uint8x16_t)
   31921      _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
   31922 
   31923    * int64x2_t vpaddlq_s32 (int32x4_t)
   31924      _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
   31925 
   31926    * int32x4_t vpaddlq_s16 (int16x8_t)
   31927      _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
   31928 
   31929    * int16x8_t vpaddlq_s8 (int8x16_t)
   31930      _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
   31931 
   31932 6.56.3.28 Pairwise add, single_opcode widen and accumulate
   31933 ..........................................................
   31934 
   31935    * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
   31936      _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
   31937 
   31938    * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
   31939      _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
   31940 
   31941    * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
   31942      _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
   31943 
   31944    * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
   31945      _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
   31946 
   31947    * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
   31948      _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
   31949 
   31950    * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
   31951      _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
   31952 
   31953    * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
   31954      _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
   31955 
   31956    * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
   31957      _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
   31958 
   31959    * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
   31960      _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
   31961 
   31962    * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
   31963      _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
   31964 
   31965    * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
   31966      _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
   31967 
   31968    * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
   31969      _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
   31970 
   31971 6.56.3.29 Folding maximum
   31972 .........................
   31973 
   31974    * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
   31975      _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
   31976 
   31977    * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
   31978      _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
   31979 
   31980    * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
   31981      _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
   31982 
   31983    * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
   31984      _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
   31985 
   31986    * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
   31987      _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
   31988 
   31989    * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
   31990      _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
   31991 
   31992    * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
   31993      _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
   31994 
   31995 6.56.3.30 Folding minimum
   31996 .........................
   31997 
   31998    * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
   31999      _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
   32000 
   32001    * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
   32002      _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
   32003 
   32004    * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
   32005      _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
   32006 
   32007    * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
   32008      _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
   32009 
   32010    * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
   32011      _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
   32012 
   32013    * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
   32014      _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
   32015 
   32016    * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
   32017      _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
   32018 
   32019 6.56.3.31 Reciprocal step
   32020 .........................
   32021 
   32022    * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
   32023      _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
   32024 
   32025    * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
   32026      _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
   32027 
   32028    * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
   32029      _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
   32030 
   32031    * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
   32032      _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
   32033 
   32034 6.56.3.32 Vector shift left
   32035 ...........................
   32036 
   32037    * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
   32038      _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
   32039 
   32040    * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
   32041      _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
   32042 
   32043    * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
   32044      _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
   32045 
   32046    * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
   32047      _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
   32048 
   32049    * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
   32050      _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
   32051 
   32052    * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
   32053      _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
   32054 
   32055    * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
   32056      _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
   32057 
   32058    * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
   32059      _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
   32060 
   32061    * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
   32062      _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
   32063 
   32064    * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
   32065      _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
   32066 
   32067    * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
   32068      _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
   32069 
   32070    * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
   32071      _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
   32072 
   32073    * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
   32074      _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
   32075 
   32076    * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
   32077      _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
   32078 
   32079    * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
   32080      _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
   32081 
   32082    * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
   32083      _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
   32084 
   32085    * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
   32086      _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
   32087 
   32088    * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
   32089      _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
   32090 
   32091    * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
   32092      _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
   32093 
   32094    * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
   32095      _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
   32096 
   32097    * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
   32098      _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
   32099 
   32100    * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
   32101      _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
   32102 
   32103    * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
   32104      _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
   32105 
   32106    * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
   32107      _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
   32108 
   32109    * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
   32110      _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
   32111 
   32112    * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
   32113      _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
   32114 
   32115    * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
   32116      _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
   32117 
   32118    * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
   32119      _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
   32120 
   32121    * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
   32122      _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
   32123 
   32124    * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
   32125      _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
   32126 
   32127    * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
   32128      _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
   32129 
   32130    * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
   32131      _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
   32132 
   32133    * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
   32134      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
   32135 
   32136    * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
   32137      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
   32138 
   32139    * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
   32140      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
   32141 
   32142    * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
   32143      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
   32144 
   32145    * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
   32146      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
   32147 
   32148    * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
   32149      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
   32150 
   32151    * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
   32152      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
   32153 
   32154    * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
   32155      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
   32156 
   32157    * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
   32158      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
   32159 
   32160    * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
   32161      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
   32162 
   32163    * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
   32164      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
   32165 
   32166    * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
   32167      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
   32168 
   32169    * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
   32170      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
   32171 
   32172    * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
   32173      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
   32174 
   32175    * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
   32176      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
   32177 
   32178    * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
   32179      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
   32180 
   32181    * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
   32182      _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
   32183 
   32184    * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
   32185      _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
   32186 
   32187    * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
   32188      _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
   32189 
   32190    * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
   32191      _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
   32192 
   32193    * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
   32194      _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
   32195 
   32196    * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
   32197      _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
   32198 
   32199    * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
   32200      _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
   32201 
   32202    * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
   32203      _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
   32204 
   32205    * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
   32206      _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
   32207 
   32208    * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
   32209      _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
   32210 
   32211    * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
   32212      _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
   32213 
   32214    * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
   32215      _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
   32216 
   32217    * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
   32218      _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
   32219 
   32220    * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
   32221      _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
   32222 
   32223    * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
   32224      _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
   32225 
   32226    * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
   32227      _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
   32228 
   32229 6.56.3.33 Vector shift left by constant
   32230 .......................................
   32231 
   32232    * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
   32233      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
   32234 
   32235    * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
   32236      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
   32237 
   32238    * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
   32239      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
   32240 
   32241    * int32x2_t vshl_n_s32 (int32x2_t, const int)
   32242      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
   32243 
   32244    * int16x4_t vshl_n_s16 (int16x4_t, const int)
   32245      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
   32246 
   32247    * int8x8_t vshl_n_s8 (int8x8_t, const int)
   32248      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
   32249 
   32250    * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
   32251      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
   32252 
   32253    * int64x1_t vshl_n_s64 (int64x1_t, const int)
   32254      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
   32255 
   32256    * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
   32257      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
   32258 
   32259    * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
   32260      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
   32261 
   32262    * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
   32263      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
   32264 
   32265    * int32x4_t vshlq_n_s32 (int32x4_t, const int)
   32266      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
   32267 
   32268    * int16x8_t vshlq_n_s16 (int16x8_t, const int)
   32269      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
   32270 
   32271    * int8x16_t vshlq_n_s8 (int8x16_t, const int)
   32272      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
   32273 
   32274    * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
   32275      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
   32276 
   32277    * int64x2_t vshlq_n_s64 (int64x2_t, const int)
   32278      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
   32279 
   32280    * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
   32281      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
   32282 
   32283    * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
   32284      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
   32285 
   32286    * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
   32287      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
   32288 
   32289    * int32x2_t vqshl_n_s32 (int32x2_t, const int)
   32290      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
   32291 
   32292    * int16x4_t vqshl_n_s16 (int16x4_t, const int)
   32293      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
   32294 
   32295    * int8x8_t vqshl_n_s8 (int8x8_t, const int)
   32296      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
   32297 
   32298    * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
   32299      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
   32300 
   32301    * int64x1_t vqshl_n_s64 (int64x1_t, const int)
   32302      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
   32303 
   32304    * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
   32305      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
   32306 
   32307    * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
   32308      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
   32309 
   32310    * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
   32311      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
   32312 
   32313    * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
   32314      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
   32315 
   32316    * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
   32317      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
   32318 
   32319    * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
   32320      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
   32321 
   32322    * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
   32323      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
   32324 
   32325    * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
   32326      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
   32327 
   32328    * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
   32329      _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
   32330 
   32331    * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
   32332      _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
   32333 
   32334    * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
   32335      _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
   32336 
   32337    * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
   32338      _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
   32339 
   32340    * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
   32341      _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
   32342 
   32343    * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
   32344      _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
   32345 
   32346    * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
   32347      _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
   32348 
   32349    * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
   32350      _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
   32351 
   32352    * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
   32353      _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
   32354 
   32355    * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
   32356      _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
   32357 
   32358    * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
   32359      _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
   32360 
   32361    * int64x2_t vshll_n_s32 (int32x2_t, const int)
   32362      _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
   32363 
   32364    * int32x4_t vshll_n_s16 (int16x4_t, const int)
   32365      _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
   32366 
   32367    * int16x8_t vshll_n_s8 (int8x8_t, const int)
   32368      _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
   32369 
   32370 6.56.3.34 Vector shift right by constant
   32371 ........................................
   32372 
   32373    * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
   32374      _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
   32375 
   32376    * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
   32377      _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
   32378 
   32379    * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
   32380      _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
   32381 
   32382    * int32x2_t vshr_n_s32 (int32x2_t, const int)
   32383      _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
   32384 
   32385    * int16x4_t vshr_n_s16 (int16x4_t, const int)
   32386      _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
   32387 
   32388    * int8x8_t vshr_n_s8 (int8x8_t, const int)
   32389      _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
   32390 
   32391    * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
   32392      _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
   32393 
   32394    * int64x1_t vshr_n_s64 (int64x1_t, const int)
   32395      _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
   32396 
   32397    * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
   32398      _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
   32399 
   32400    * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
   32401      _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
   32402 
   32403    * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
   32404      _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
   32405 
   32406    * int32x4_t vshrq_n_s32 (int32x4_t, const int)
   32407      _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
   32408 
   32409    * int16x8_t vshrq_n_s16 (int16x8_t, const int)
   32410      _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
   32411 
   32412    * int8x16_t vshrq_n_s8 (int8x16_t, const int)
   32413      _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
   32414 
   32415    * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
   32416      _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
   32417 
   32418    * int64x2_t vshrq_n_s64 (int64x2_t, const int)
   32419      _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
   32420 
   32421    * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
   32422      _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
   32423 
   32424    * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
   32425      _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
   32426 
   32427    * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
   32428      _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
   32429 
   32430    * int32x2_t vrshr_n_s32 (int32x2_t, const int)
   32431      _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
   32432 
   32433    * int16x4_t vrshr_n_s16 (int16x4_t, const int)
   32434      _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
   32435 
   32436    * int8x8_t vrshr_n_s8 (int8x8_t, const int)
   32437      _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
   32438 
   32439    * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
   32440      _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
   32441 
   32442    * int64x1_t vrshr_n_s64 (int64x1_t, const int)
   32443      _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
   32444 
   32445    * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
   32446      _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
   32447 
   32448    * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
   32449      _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
   32450 
   32451    * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
   32452      _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
   32453 
   32454    * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
   32455      _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
   32456 
   32457    * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
   32458      _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
   32459 
   32460    * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
   32461      _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
   32462 
   32463    * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
   32464      _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
   32465 
   32466    * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
   32467      _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
   32468 
   32469    * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
   32470      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
   32471 
   32472    * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
   32473      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
   32474 
   32475    * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
   32476      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
   32477 
   32478    * int32x2_t vshrn_n_s64 (int64x2_t, const int)
   32479      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
   32480 
   32481    * int16x4_t vshrn_n_s32 (int32x4_t, const int)
   32482      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
   32483 
   32484    * int8x8_t vshrn_n_s16 (int16x8_t, const int)
   32485      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
   32486 
   32487    * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
   32488      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
   32489 
   32490    * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
   32491      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
   32492 
   32493    * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
   32494      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
   32495 
   32496    * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
   32497      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
   32498 
   32499    * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
   32500      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
   32501 
   32502    * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
   32503      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
   32504 
   32505    * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
   32506      _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
   32507 
   32508    * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
   32509      _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
   32510 
   32511    * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
   32512      _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
   32513 
   32514    * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
   32515      _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
   32516 
   32517    * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
   32518      _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
   32519 
   32520    * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
   32521      _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
   32522 
   32523    * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
   32524      _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
   32525 
   32526    * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
   32527      _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
   32528 
   32529    * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
   32530      _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
   32531 
   32532    * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
   32533      _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
   32534 
   32535    * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
   32536      _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
   32537 
   32538    * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
   32539      _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
   32540 
   32541    * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
   32542      _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
   32543 
   32544    * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
   32545      _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
   32546 
   32547    * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
   32548      _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
   32549 
   32550    * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
   32551      _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
   32552 
   32553    * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
   32554      _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
   32555 
   32556    * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
   32557      _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
   32558 
   32559 6.56.3.35 Vector shift right by constant and accumulate
   32560 .......................................................
   32561 
   32562    * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   32563      _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
   32564 
   32565    * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   32566      _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
   32567 
   32568    * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   32569      _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
   32570 
   32571    * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
   32572      _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
   32573 
   32574    * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
   32575      _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
   32576 
   32577    * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
   32578      _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
   32579 
   32580    * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   32581      _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
   32582 
   32583    * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
   32584      _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
   32585 
   32586    * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32587      _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
   32588 
   32589    * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32590      _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
   32591 
   32592    * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32593      _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
   32594 
   32595    * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
   32596      _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
   32597 
   32598    * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
   32599      _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
   32600 
   32601    * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
   32602      _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
   32603 
   32604    * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32605      _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
   32606 
   32607    * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
   32608      _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
   32609 
   32610    * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   32611      _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
   32612 
   32613    * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   32614      _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
   32615 
   32616    * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   32617      _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
   32618 
   32619    * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
   32620      _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
   32621 
   32622    * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
   32623      _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
   32624 
   32625    * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
   32626      _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
   32627 
   32628    * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   32629      _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
   32630 
   32631    * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
   32632      _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
   32633 
   32634    * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32635      _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
   32636 
   32637    * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32638      _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
   32639 
   32640    * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32641      _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
   32642 
   32643    * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
   32644      _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
   32645 
   32646    * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
   32647      _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
   32648 
   32649    * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
   32650      _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
   32651 
   32652    * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32653      _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
   32654 
   32655    * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
   32656      _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
   32657 
   32658 6.56.3.36 Vector shift right and insert
   32659 .......................................
   32660 
   32661    * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
   32662      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
   32663 
   32664    * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
   32665      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   32666 
   32667    * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
   32668      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   32669 
   32670    * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
   32671      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
   32672 
   32673    * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
   32674      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   32675 
   32676    * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
   32677      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   32678 
   32679    * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
   32680      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
   32681 
   32682    * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
   32683      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
   32684 
   32685    * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
   32686      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   32687 
   32688    * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
   32689      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   32690 
   32691    * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32692      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
   32693 
   32694    * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32695      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   32696 
   32697    * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32698      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   32699 
   32700    * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
   32701      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
   32702 
   32703    * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
   32704      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   32705 
   32706    * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
   32707      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   32708 
   32709    * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32710      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
   32711 
   32712    * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
   32713      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
   32714 
   32715    * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
   32716      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   32717 
   32718    * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
   32719      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   32720 
   32721 6.56.3.37 Vector shift left and insert
   32722 ......................................
   32723 
   32724    * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
   32725      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
   32726 
   32727    * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
   32728      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   32729 
   32730    * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
   32731      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   32732 
   32733    * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
   32734      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
   32735 
   32736    * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
   32737      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   32738 
   32739    * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
   32740      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   32741 
   32742    * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
   32743      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
   32744 
   32745    * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
   32746      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
   32747 
   32748    * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
   32749      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   32750 
   32751    * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
   32752      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   32753 
   32754    * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32755      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
   32756 
   32757    * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32758      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   32759 
   32760    * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32761      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   32762 
   32763    * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
   32764      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
   32765 
   32766    * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
   32767      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   32768 
   32769    * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
   32770      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   32771 
   32772    * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32773      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
   32774 
   32775    * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
   32776      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
   32777 
   32778    * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
   32779      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   32780 
   32781    * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
   32782      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   32783 
   32784 6.56.3.38 Absolute value
   32785 ........................
   32786 
   32787    * float32x2_t vabs_f32 (float32x2_t)
   32788      _Form of expected instruction(s):_ `vabs.f32 D0, D0'
   32789 
   32790    * int32x2_t vabs_s32 (int32x2_t)
   32791      _Form of expected instruction(s):_ `vabs.s32 D0, D0'
   32792 
   32793    * int16x4_t vabs_s16 (int16x4_t)
   32794      _Form of expected instruction(s):_ `vabs.s16 D0, D0'
   32795 
   32796    * int8x8_t vabs_s8 (int8x8_t)
   32797      _Form of expected instruction(s):_ `vabs.s8 D0, D0'
   32798 
   32799    * float32x4_t vabsq_f32 (float32x4_t)
   32800      _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
   32801 
   32802    * int32x4_t vabsq_s32 (int32x4_t)
   32803      _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
   32804 
   32805    * int16x8_t vabsq_s16 (int16x8_t)
   32806      _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
   32807 
   32808    * int8x16_t vabsq_s8 (int8x16_t)
   32809      _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
   32810 
   32811    * int32x2_t vqabs_s32 (int32x2_t)
   32812      _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
   32813 
   32814    * int16x4_t vqabs_s16 (int16x4_t)
   32815      _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
   32816 
   32817    * int8x8_t vqabs_s8 (int8x8_t)
   32818      _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
   32819 
   32820    * int32x4_t vqabsq_s32 (int32x4_t)
   32821      _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
   32822 
   32823    * int16x8_t vqabsq_s16 (int16x8_t)
   32824      _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
   32825 
   32826    * int8x16_t vqabsq_s8 (int8x16_t)
   32827      _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
   32828 
   32829 6.56.3.39 Negation
   32830 ..................
   32831 
   32832    * float32x2_t vneg_f32 (float32x2_t)
   32833      _Form of expected instruction(s):_ `vneg.f32 D0, D0'
   32834 
   32835    * int32x2_t vneg_s32 (int32x2_t)
   32836      _Form of expected instruction(s):_ `vneg.s32 D0, D0'
   32837 
   32838    * int16x4_t vneg_s16 (int16x4_t)
   32839      _Form of expected instruction(s):_ `vneg.s16 D0, D0'
   32840 
   32841    * int8x8_t vneg_s8 (int8x8_t)
   32842      _Form of expected instruction(s):_ `vneg.s8 D0, D0'
   32843 
   32844    * float32x4_t vnegq_f32 (float32x4_t)
   32845      _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
   32846 
   32847    * int32x4_t vnegq_s32 (int32x4_t)
   32848      _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
   32849 
   32850    * int16x8_t vnegq_s16 (int16x8_t)
   32851      _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
   32852 
   32853    * int8x16_t vnegq_s8 (int8x16_t)
   32854      _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
   32855 
   32856    * int32x2_t vqneg_s32 (int32x2_t)
   32857      _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
   32858 
   32859    * int16x4_t vqneg_s16 (int16x4_t)
   32860      _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
   32861 
   32862    * int8x8_t vqneg_s8 (int8x8_t)
   32863      _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
   32864 
   32865    * int32x4_t vqnegq_s32 (int32x4_t)
   32866      _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
   32867 
   32868    * int16x8_t vqnegq_s16 (int16x8_t)
   32869      _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
   32870 
   32871    * int8x16_t vqnegq_s8 (int8x16_t)
   32872      _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
   32873 
   32874 6.56.3.40 Bitwise not
   32875 .....................
   32876 
   32877    * uint32x2_t vmvn_u32 (uint32x2_t)
   32878      _Form of expected instruction(s):_ `vmvn D0, D0'
   32879 
   32880    * uint16x4_t vmvn_u16 (uint16x4_t)
   32881      _Form of expected instruction(s):_ `vmvn D0, D0'
   32882 
   32883    * uint8x8_t vmvn_u8 (uint8x8_t)
   32884      _Form of expected instruction(s):_ `vmvn D0, D0'
   32885 
   32886    * int32x2_t vmvn_s32 (int32x2_t)
   32887      _Form of expected instruction(s):_ `vmvn D0, D0'
   32888 
   32889    * int16x4_t vmvn_s16 (int16x4_t)
   32890      _Form of expected instruction(s):_ `vmvn D0, D0'
   32891 
   32892    * int8x8_t vmvn_s8 (int8x8_t)
   32893      _Form of expected instruction(s):_ `vmvn D0, D0'
   32894 
   32895    * poly8x8_t vmvn_p8 (poly8x8_t)
   32896      _Form of expected instruction(s):_ `vmvn D0, D0'
   32897 
   32898    * uint32x4_t vmvnq_u32 (uint32x4_t)
   32899      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32900 
   32901    * uint16x8_t vmvnq_u16 (uint16x8_t)
   32902      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32903 
   32904    * uint8x16_t vmvnq_u8 (uint8x16_t)
   32905      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32906 
   32907    * int32x4_t vmvnq_s32 (int32x4_t)
   32908      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32909 
   32910    * int16x8_t vmvnq_s16 (int16x8_t)
   32911      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32912 
   32913    * int8x16_t vmvnq_s8 (int8x16_t)
   32914      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32915 
   32916    * poly8x16_t vmvnq_p8 (poly8x16_t)
   32917      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   32918 
   32919 6.56.3.41 Count leading sign bits
   32920 .................................
   32921 
   32922    * int32x2_t vcls_s32 (int32x2_t)
   32923      _Form of expected instruction(s):_ `vcls.s32 D0, D0'
   32924 
   32925    * int16x4_t vcls_s16 (int16x4_t)
   32926      _Form of expected instruction(s):_ `vcls.s16 D0, D0'
   32927 
   32928    * int8x8_t vcls_s8 (int8x8_t)
   32929      _Form of expected instruction(s):_ `vcls.s8 D0, D0'
   32930 
   32931    * int32x4_t vclsq_s32 (int32x4_t)
   32932      _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
   32933 
   32934    * int16x8_t vclsq_s16 (int16x8_t)
   32935      _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
   32936 
   32937    * int8x16_t vclsq_s8 (int8x16_t)
   32938      _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
   32939 
   32940 6.56.3.42 Count leading zeros
   32941 .............................
   32942 
   32943    * uint32x2_t vclz_u32 (uint32x2_t)
   32944      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
   32945 
   32946    * uint16x4_t vclz_u16 (uint16x4_t)
   32947      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
   32948 
   32949    * uint8x8_t vclz_u8 (uint8x8_t)
   32950      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
   32951 
   32952    * int32x2_t vclz_s32 (int32x2_t)
   32953      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
   32954 
   32955    * int16x4_t vclz_s16 (int16x4_t)
   32956      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
   32957 
   32958    * int8x8_t vclz_s8 (int8x8_t)
   32959      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
   32960 
   32961    * uint32x4_t vclzq_u32 (uint32x4_t)
   32962      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
   32963 
   32964    * uint16x8_t vclzq_u16 (uint16x8_t)
   32965      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
   32966 
   32967    * uint8x16_t vclzq_u8 (uint8x16_t)
   32968      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
   32969 
   32970    * int32x4_t vclzq_s32 (int32x4_t)
   32971      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
   32972 
   32973    * int16x8_t vclzq_s16 (int16x8_t)
   32974      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
   32975 
   32976    * int8x16_t vclzq_s8 (int8x16_t)
   32977      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
   32978 
   32979 6.56.3.43 Count number of set bits
   32980 ..................................
   32981 
   32982    * uint8x8_t vcnt_u8 (uint8x8_t)
   32983      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   32984 
   32985    * int8x8_t vcnt_s8 (int8x8_t)
   32986      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   32987 
   32988    * poly8x8_t vcnt_p8 (poly8x8_t)
   32989      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   32990 
   32991    * uint8x16_t vcntq_u8 (uint8x16_t)
   32992      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   32993 
   32994    * int8x16_t vcntq_s8 (int8x16_t)
   32995      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   32996 
   32997    * poly8x16_t vcntq_p8 (poly8x16_t)
   32998      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   32999 
   33000 6.56.3.44 Reciprocal estimate
   33001 .............................
   33002 
   33003    * float32x2_t vrecpe_f32 (float32x2_t)
   33004      _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
   33005 
   33006    * uint32x2_t vrecpe_u32 (uint32x2_t)
   33007      _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
   33008 
   33009    * float32x4_t vrecpeq_f32 (float32x4_t)
   33010      _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
   33011 
   33012    * uint32x4_t vrecpeq_u32 (uint32x4_t)
   33013      _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
   33014 
   33015 6.56.3.45 Reciprocal square-root estimate
   33016 .........................................
   33017 
   33018    * float32x2_t vrsqrte_f32 (float32x2_t)
   33019      _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
   33020 
   33021    * uint32x2_t vrsqrte_u32 (uint32x2_t)
   33022      _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
   33023 
   33024    * float32x4_t vrsqrteq_f32 (float32x4_t)
   33025      _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
   33026 
   33027    * uint32x4_t vrsqrteq_u32 (uint32x4_t)
   33028      _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
   33029 
   33030 6.56.3.46 Get lanes from a vector
   33031 .................................
   33032 
   33033    * uint32_t vget_lane_u32 (uint32x2_t, const int)
   33034      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   33035 
   33036    * uint16_t vget_lane_u16 (uint16x4_t, const int)
   33037      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   33038 
   33039    * uint8_t vget_lane_u8 (uint8x8_t, const int)
   33040      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   33041 
   33042    * int32_t vget_lane_s32 (int32x2_t, const int)
   33043      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   33044 
   33045    * int16_t vget_lane_s16 (int16x4_t, const int)
   33046      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
   33047 
   33048    * int8_t vget_lane_s8 (int8x8_t, const int)
   33049      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
   33050 
   33051    * float32_t vget_lane_f32 (float32x2_t, const int)
   33052      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   33053 
   33054    * poly16_t vget_lane_p16 (poly16x4_t, const int)
   33055      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   33056 
   33057    * poly8_t vget_lane_p8 (poly8x8_t, const int)
   33058      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   33059 
   33060    * uint64_t vget_lane_u64 (uint64x1_t, const int)
   33061 
   33062    * int64_t vget_lane_s64 (int64x1_t, const int)
   33063 
   33064    * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
   33065      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   33066 
   33067    * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
   33068      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   33069 
   33070    * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
   33071      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   33072 
   33073    * int32_t vgetq_lane_s32 (int32x4_t, const int)
   33074      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   33075 
   33076    * int16_t vgetq_lane_s16 (int16x8_t, const int)
   33077      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
   33078 
   33079    * int8_t vgetq_lane_s8 (int8x16_t, const int)
   33080      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
   33081 
   33082    * float32_t vgetq_lane_f32 (float32x4_t, const int)
   33083      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   33084 
   33085    * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
   33086      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   33087 
   33088    * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
   33089      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   33090 
   33091    * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
   33092      _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
   33093      R0, R0, D0'
   33094 
   33095    * int64_t vgetq_lane_s64 (int64x2_t, const int)
   33096      _Form of expected instruction(s):_ `vmov R0, R0, D0' _or_ `fmrrd
   33097      R0, R0, D0'
   33098 
   33099 6.56.3.47 Set lanes in a vector
   33100 ...............................
   33101 
   33102    * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
   33103      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   33104 
   33105    * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
   33106      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   33107 
   33108    * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
   33109      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   33110 
   33111    * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
   33112      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   33113 
   33114    * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
   33115      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   33116 
   33117    * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
   33118      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   33119 
   33120    * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
   33121      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   33122 
   33123    * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
   33124      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   33125 
   33126    * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
   33127      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   33128 
   33129    * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
   33130 
   33131    * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
   33132 
   33133    * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
   33134      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   33135 
   33136    * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
   33137      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   33138 
   33139    * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
   33140      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   33141 
   33142    * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
   33143      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   33144 
   33145    * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
   33146      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   33147 
   33148    * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
   33149      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   33150 
   33151    * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
   33152      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   33153 
   33154    * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
   33155      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   33156 
   33157    * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
   33158      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   33159 
   33160    * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
   33161      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   33162 
   33163    * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
   33164      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   33165 
   33166 6.56.3.48 Create vector from literal bit pattern
   33167 ................................................
   33168 
   33169    * uint32x2_t vcreate_u32 (uint64_t)
   33170 
   33171    * uint16x4_t vcreate_u16 (uint64_t)
   33172 
   33173    * uint8x8_t vcreate_u8 (uint64_t)
   33174 
   33175    * int32x2_t vcreate_s32 (uint64_t)
   33176 
   33177    * int16x4_t vcreate_s16 (uint64_t)
   33178 
   33179    * int8x8_t vcreate_s8 (uint64_t)
   33180 
   33181    * uint64x1_t vcreate_u64 (uint64_t)
   33182 
   33183    * int64x1_t vcreate_s64 (uint64_t)
   33184 
   33185    * float32x2_t vcreate_f32 (uint64_t)
   33186 
   33187    * poly16x4_t vcreate_p16 (uint64_t)
   33188 
   33189    * poly8x8_t vcreate_p8 (uint64_t)
   33190 
   33191 6.56.3.49 Set all lanes to the same value
   33192 .........................................
   33193 
   33194    * uint32x2_t vdup_n_u32 (uint32_t)
   33195      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   33196 
   33197    * uint16x4_t vdup_n_u16 (uint16_t)
   33198      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   33199 
   33200    * uint8x8_t vdup_n_u8 (uint8_t)
   33201      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   33202 
   33203    * int32x2_t vdup_n_s32 (int32_t)
   33204      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   33205 
   33206    * int16x4_t vdup_n_s16 (int16_t)
   33207      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   33208 
   33209    * int8x8_t vdup_n_s8 (int8_t)
   33210      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   33211 
   33212    * float32x2_t vdup_n_f32 (float32_t)
   33213      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   33214 
   33215    * poly16x4_t vdup_n_p16 (poly16_t)
   33216      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   33217 
   33218    * poly8x8_t vdup_n_p8 (poly8_t)
   33219      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   33220 
   33221    * uint64x1_t vdup_n_u64 (uint64_t)
   33222 
   33223    * int64x1_t vdup_n_s64 (int64_t)
   33224 
   33225    * uint32x4_t vdupq_n_u32 (uint32_t)
   33226      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   33227 
   33228    * uint16x8_t vdupq_n_u16 (uint16_t)
   33229      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   33230 
   33231    * uint8x16_t vdupq_n_u8 (uint8_t)
   33232      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   33233 
   33234    * int32x4_t vdupq_n_s32 (int32_t)
   33235      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   33236 
   33237    * int16x8_t vdupq_n_s16 (int16_t)
   33238      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   33239 
   33240    * int8x16_t vdupq_n_s8 (int8_t)
   33241      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   33242 
   33243    * float32x4_t vdupq_n_f32 (float32_t)
   33244      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   33245 
   33246    * poly16x8_t vdupq_n_p16 (poly16_t)
   33247      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   33248 
   33249    * poly8x16_t vdupq_n_p8 (poly8_t)
   33250      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   33251 
   33252    * uint64x2_t vdupq_n_u64 (uint64_t)
   33253 
   33254    * int64x2_t vdupq_n_s64 (int64_t)
   33255 
   33256    * uint32x2_t vmov_n_u32 (uint32_t)
   33257      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   33258 
   33259    * uint16x4_t vmov_n_u16 (uint16_t)
   33260      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   33261 
   33262    * uint8x8_t vmov_n_u8 (uint8_t)
   33263      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   33264 
   33265    * int32x2_t vmov_n_s32 (int32_t)
   33266      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   33267 
   33268    * int16x4_t vmov_n_s16 (int16_t)
   33269      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   33270 
   33271    * int8x8_t vmov_n_s8 (int8_t)
   33272      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   33273 
   33274    * float32x2_t vmov_n_f32 (float32_t)
   33275      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   33276 
   33277    * poly16x4_t vmov_n_p16 (poly16_t)
   33278      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   33279 
   33280    * poly8x8_t vmov_n_p8 (poly8_t)
   33281      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   33282 
   33283    * uint64x1_t vmov_n_u64 (uint64_t)
   33284 
   33285    * int64x1_t vmov_n_s64 (int64_t)
   33286 
   33287    * uint32x4_t vmovq_n_u32 (uint32_t)
   33288      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   33289 
   33290    * uint16x8_t vmovq_n_u16 (uint16_t)
   33291      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   33292 
   33293    * uint8x16_t vmovq_n_u8 (uint8_t)
   33294      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   33295 
   33296    * int32x4_t vmovq_n_s32 (int32_t)
   33297      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   33298 
   33299    * int16x8_t vmovq_n_s16 (int16_t)
   33300      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   33301 
   33302    * int8x16_t vmovq_n_s8 (int8_t)
   33303      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   33304 
   33305    * float32x4_t vmovq_n_f32 (float32_t)
   33306      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   33307 
   33308    * poly16x8_t vmovq_n_p16 (poly16_t)
   33309      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   33310 
   33311    * poly8x16_t vmovq_n_p8 (poly8_t)
   33312      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   33313 
   33314    * uint64x2_t vmovq_n_u64 (uint64_t)
   33315 
   33316    * int64x2_t vmovq_n_s64 (int64_t)
   33317 
   33318    * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
   33319      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   33320 
   33321    * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
   33322      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   33323 
   33324    * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
   33325      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   33326 
   33327    * int32x2_t vdup_lane_s32 (int32x2_t, const int)
   33328      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   33329 
   33330    * int16x4_t vdup_lane_s16 (int16x4_t, const int)
   33331      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   33332 
   33333    * int8x8_t vdup_lane_s8 (int8x8_t, const int)
   33334      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   33335 
   33336    * float32x2_t vdup_lane_f32 (float32x2_t, const int)
   33337      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   33338 
   33339    * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
   33340      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   33341 
   33342    * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
   33343      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   33344 
   33345    * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
   33346 
   33347    * int64x1_t vdup_lane_s64 (int64x1_t, const int)
   33348 
   33349    * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
   33350      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   33351 
   33352    * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
   33353      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   33354 
   33355    * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
   33356      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   33357 
   33358    * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
   33359      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   33360 
   33361    * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
   33362      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   33363 
   33364    * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
   33365      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   33366 
   33367    * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
   33368      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   33369 
   33370    * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
   33371      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   33372 
   33373    * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
   33374      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   33375 
   33376    * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
   33377 
   33378    * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
   33379 
   33380 6.56.3.50 Combining vectors
   33381 ...........................
   33382 
   33383    * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
   33384 
   33385    * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
   33386 
   33387    * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
   33388 
   33389    * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
   33390 
   33391    * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
   33392 
   33393    * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
   33394 
   33395    * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
   33396 
   33397    * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
   33398 
   33399    * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
   33400 
   33401    * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
   33402 
   33403    * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
   33404 
   33405 6.56.3.51 Splitting vectors
   33406 ...........................
   33407 
   33408    * uint32x2_t vget_high_u32 (uint32x4_t)
   33409 
   33410    * uint16x4_t vget_high_u16 (uint16x8_t)
   33411 
   33412    * uint8x8_t vget_high_u8 (uint8x16_t)
   33413 
   33414    * int32x2_t vget_high_s32 (int32x4_t)
   33415 
   33416    * int16x4_t vget_high_s16 (int16x8_t)
   33417 
   33418    * int8x8_t vget_high_s8 (int8x16_t)
   33419 
   33420    * uint64x1_t vget_high_u64 (uint64x2_t)
   33421 
   33422    * int64x1_t vget_high_s64 (int64x2_t)
   33423 
   33424    * float32x2_t vget_high_f32 (float32x4_t)
   33425 
   33426    * poly16x4_t vget_high_p16 (poly16x8_t)
   33427 
   33428    * poly8x8_t vget_high_p8 (poly8x16_t)
   33429 
   33430    * uint32x2_t vget_low_u32 (uint32x4_t)
   33431      _Form of expected instruction(s):_ `vmov D0, D0'
   33432 
   33433    * uint16x4_t vget_low_u16 (uint16x8_t)
   33434      _Form of expected instruction(s):_ `vmov D0, D0'
   33435 
   33436    * uint8x8_t vget_low_u8 (uint8x16_t)
   33437      _Form of expected instruction(s):_ `vmov D0, D0'
   33438 
   33439    * int32x2_t vget_low_s32 (int32x4_t)
   33440      _Form of expected instruction(s):_ `vmov D0, D0'
   33441 
   33442    * int16x4_t vget_low_s16 (int16x8_t)
   33443      _Form of expected instruction(s):_ `vmov D0, D0'
   33444 
   33445    * int8x8_t vget_low_s8 (int8x16_t)
   33446      _Form of expected instruction(s):_ `vmov D0, D0'
   33447 
   33448    * float32x2_t vget_low_f32 (float32x4_t)
   33449      _Form of expected instruction(s):_ `vmov D0, D0'
   33450 
   33451    * poly16x4_t vget_low_p16 (poly16x8_t)
   33452      _Form of expected instruction(s):_ `vmov D0, D0'
   33453 
   33454    * poly8x8_t vget_low_p8 (poly8x16_t)
   33455      _Form of expected instruction(s):_ `vmov D0, D0'
   33456 
   33457    * uint64x1_t vget_low_u64 (uint64x2_t)
   33458 
   33459    * int64x1_t vget_low_s64 (int64x2_t)
   33460 
   33461 6.56.3.52 Conversions
   33462 .....................
   33463 
   33464    * float32x2_t vcvt_f32_u32 (uint32x2_t)
   33465      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
   33466 
   33467    * float32x2_t vcvt_f32_s32 (int32x2_t)
   33468      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
   33469 
   33470    * uint32x2_t vcvt_u32_f32 (float32x2_t)
   33471      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
   33472 
   33473    * int32x2_t vcvt_s32_f32 (float32x2_t)
   33474      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
   33475 
   33476    * float32x4_t vcvtq_f32_u32 (uint32x4_t)
   33477      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
   33478 
   33479    * float32x4_t vcvtq_f32_s32 (int32x4_t)
   33480      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
   33481 
   33482    * uint32x4_t vcvtq_u32_f32 (float32x4_t)
   33483      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
   33484 
   33485    * int32x4_t vcvtq_s32_f32 (float32x4_t)
   33486      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
   33487 
   33488    * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
   33489      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
   33490 
   33491    * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
   33492      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
   33493 
   33494    * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
   33495      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
   33496 
   33497    * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
   33498      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
   33499 
   33500    * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
   33501      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
   33502 
   33503    * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
   33504      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
   33505 
   33506    * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
   33507      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
   33508 
   33509    * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
   33510      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
   33511 
   33512 6.56.3.53 Move, single_opcode narrowing
   33513 .......................................
   33514 
   33515    * uint32x2_t vmovn_u64 (uint64x2_t)
   33516      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
   33517 
   33518    * uint16x4_t vmovn_u32 (uint32x4_t)
   33519      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
   33520 
   33521    * uint8x8_t vmovn_u16 (uint16x8_t)
   33522      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
   33523 
   33524    * int32x2_t vmovn_s64 (int64x2_t)
   33525      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
   33526 
   33527    * int16x4_t vmovn_s32 (int32x4_t)
   33528      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
   33529 
   33530    * int8x8_t vmovn_s16 (int16x8_t)
   33531      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
   33532 
   33533    * uint32x2_t vqmovn_u64 (uint64x2_t)
   33534      _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
   33535 
   33536    * uint16x4_t vqmovn_u32 (uint32x4_t)
   33537      _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
   33538 
   33539    * uint8x8_t vqmovn_u16 (uint16x8_t)
   33540      _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
   33541 
   33542    * int32x2_t vqmovn_s64 (int64x2_t)
   33543      _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
   33544 
   33545    * int16x4_t vqmovn_s32 (int32x4_t)
   33546      _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
   33547 
   33548    * int8x8_t vqmovn_s16 (int16x8_t)
   33549      _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
   33550 
   33551    * uint32x2_t vqmovun_s64 (int64x2_t)
   33552      _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
   33553 
   33554    * uint16x4_t vqmovun_s32 (int32x4_t)
   33555      _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
   33556 
   33557    * uint8x8_t vqmovun_s16 (int16x8_t)
   33558      _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
   33559 
   33560 6.56.3.54 Move, single_opcode long
   33561 ..................................
   33562 
   33563    * uint64x2_t vmovl_u32 (uint32x2_t)
   33564      _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
   33565 
   33566    * uint32x4_t vmovl_u16 (uint16x4_t)
   33567      _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
   33568 
   33569    * uint16x8_t vmovl_u8 (uint8x8_t)
   33570      _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
   33571 
   33572    * int64x2_t vmovl_s32 (int32x2_t)
   33573      _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
   33574 
   33575    * int32x4_t vmovl_s16 (int16x4_t)
   33576      _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
   33577 
   33578    * int16x8_t vmovl_s8 (int8x8_t)
   33579      _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
   33580 
   33581 6.56.3.55 Table lookup
   33582 ......................
   33583 
   33584    * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
   33585      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   33586 
   33587    * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
   33588      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   33589 
   33590    * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
   33591      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   33592 
   33593    * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
   33594      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   33595 
   33596    * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
   33597      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   33598 
   33599    * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
   33600      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   33601 
   33602    * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
   33603      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   33604 
   33605    * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
   33606      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   33607 
   33608    * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
   33609      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   33610 
   33611    * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
   33612      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   33613      D0'
   33614 
   33615    * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
   33616      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   33617      D0'
   33618 
   33619    * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
   33620      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   33621      D0'
   33622 
   33623 6.56.3.56 Extended table lookup
   33624 ...............................
   33625 
   33626    * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
   33627      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   33628 
   33629    * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
   33630      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   33631 
   33632    * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   33633      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   33634 
   33635    * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
   33636      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   33637 
   33638    * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
   33639      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   33640 
   33641    * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
   33642      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   33643 
   33644    * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
   33645      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   33646 
   33647    * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
   33648      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   33649 
   33650    * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
   33651      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   33652 
   33653    * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
   33654      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   33655      D0'
   33656 
   33657    * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
   33658      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   33659      D0'
   33660 
   33661    * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
   33662      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   33663      D0'
   33664 
   33665 6.56.3.57 Multiply, lane
   33666 ........................
   33667 
   33668    * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
   33669      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
   33670 
   33671    * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
   33672      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   33673 
   33674    * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
   33675      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   33676 
   33677    * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
   33678      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   33679 
   33680    * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
   33681      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   33682 
   33683    * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
   33684      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
   33685 
   33686    * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
   33687      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   33688 
   33689    * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
   33690      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   33691 
   33692    * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
   33693      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   33694 
   33695    * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
   33696      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   33697 
   33698 6.56.3.58 Long multiply, lane
   33699 .............................
   33700 
   33701    * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
   33702      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
   33703 
   33704    * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
   33705      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
   33706 
   33707    * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
   33708      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
   33709 
   33710    * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
   33711      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
   33712 
   33713 6.56.3.59 Saturating doubling long multiply, lane
   33714 .................................................
   33715 
   33716    * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
   33717      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
   33718 
   33719    * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
   33720      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
   33721 
   33722 6.56.3.60 Saturating doubling multiply high, lane
   33723 .................................................
   33724 
   33725    * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   33726      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
   33727 
   33728    * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   33729      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
   33730 
   33731    * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   33732      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
   33733 
   33734    * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   33735      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
   33736 
   33737    * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   33738      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
   33739 
   33740    * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   33741      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
   33742 
   33743    * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   33744      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
   33745 
   33746    * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   33747      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
   33748 
   33749 6.56.3.61 Multiply-accumulate, lane
   33750 ...................................
   33751 
   33752    * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   33753      const int)
   33754      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
   33755 
   33756    * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
   33757      const int)
   33758      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   33759 
   33760    * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
   33761      const int)
   33762      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   33763 
   33764    * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   33765      int)
   33766      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   33767 
   33768    * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   33769      int)
   33770      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   33771 
   33772    * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   33773      const int)
   33774      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
   33775 
   33776    * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   33777      const int)
   33778      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   33779 
   33780    * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   33781      const int)
   33782      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   33783 
   33784    * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   33785      int)
   33786      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   33787 
   33788    * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   33789      int)
   33790      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   33791 
   33792    * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   33793      const int)
   33794      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
   33795 
   33796    * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   33797      const int)
   33798      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
   33799 
   33800    * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33801      int)
   33802      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
   33803 
   33804    * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33805      int)
   33806      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
   33807 
   33808    * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33809      int)
   33810      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
   33811 
   33812    * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33813      int)
   33814      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
   33815 
   33816 6.56.3.62 Multiply-subtract, lane
   33817 .................................
   33818 
   33819    * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   33820      const int)
   33821      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
   33822 
   33823    * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
   33824      const int)
   33825      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   33826 
   33827    * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
   33828      const int)
   33829      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   33830 
   33831    * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   33832      int)
   33833      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   33834 
   33835    * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   33836      int)
   33837      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   33838 
   33839    * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   33840      const int)
   33841      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
   33842 
   33843    * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   33844      const int)
   33845      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   33846 
   33847    * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   33848      const int)
   33849      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   33850 
   33851    * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   33852      int)
   33853      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   33854 
   33855    * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   33856      int)
   33857      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   33858 
   33859    * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   33860      const int)
   33861      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
   33862 
   33863    * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   33864      const int)
   33865      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
   33866 
   33867    * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33868      int)
   33869      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
   33870 
   33871    * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33872      int)
   33873      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
   33874 
   33875    * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33876      int)
   33877      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
   33878 
   33879    * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33880      int)
   33881      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
   33882 
   33883 6.56.3.63 Vector multiply by scalar
   33884 ...................................
   33885 
   33886    * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
   33887      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
   33888 
   33889    * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
   33890      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   33891 
   33892    * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
   33893      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   33894 
   33895    * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
   33896      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   33897 
   33898    * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
   33899      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   33900 
   33901    * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
   33902      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
   33903 
   33904    * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
   33905      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   33906 
   33907    * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
   33908      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   33909 
   33910    * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
   33911      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   33912 
   33913    * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
   33914      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   33915 
   33916 6.56.3.64 Vector long multiply by scalar
   33917 ........................................
   33918 
   33919    * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
   33920      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
   33921 
   33922    * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
   33923      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
   33924 
   33925    * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
   33926      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
   33927 
   33928    * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
   33929      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
   33930 
   33931 6.56.3.65 Vector saturating doubling long multiply by scalar
   33932 ............................................................
   33933 
   33934    * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
   33935      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
   33936 
   33937    * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
   33938      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
   33939 
   33940 6.56.3.66 Vector saturating doubling multiply high by scalar
   33941 ............................................................
   33942 
   33943    * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
   33944      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
   33945 
   33946    * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
   33947      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
   33948 
   33949    * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
   33950      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
   33951 
   33952    * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
   33953      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
   33954 
   33955    * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
   33956      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
   33957 
   33958    * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
   33959      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
   33960 
   33961    * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
   33962      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
   33963 
   33964    * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
   33965      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
   33966 
   33967 6.56.3.67 Vector multiply-accumulate by scalar
   33968 ..............................................
   33969 
   33970    * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
   33971      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
   33972 
   33973    * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   33974      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   33975 
   33976    * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   33977      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   33978 
   33979    * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
   33980      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   33981 
   33982    * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
   33983      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   33984 
   33985    * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
   33986      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
   33987 
   33988    * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   33989      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   33990 
   33991    * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   33992      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   33993 
   33994    * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
   33995      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   33996 
   33997    * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
   33998      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   33999 
   34000    * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   34001      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
   34002 
   34003    * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   34004      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
   34005 
   34006    * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   34007      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
   34008 
   34009    * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   34010      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
   34011 
   34012    * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   34013      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
   34014 
   34015    * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   34016      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
   34017 
   34018 6.56.3.68 Vector multiply-subtract by scalar
   34019 ............................................
   34020 
   34021    * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
   34022      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
   34023 
   34024    * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   34025      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   34026 
   34027    * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   34028      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   34029 
   34030    * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
   34031      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   34032 
   34033    * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
   34034      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   34035 
   34036    * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
   34037      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
   34038 
   34039    * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   34040      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   34041 
   34042    * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   34043      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   34044 
   34045    * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
   34046      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   34047 
   34048    * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
   34049      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   34050 
   34051    * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   34052      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
   34053 
   34054    * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   34055      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
   34056 
   34057    * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   34058      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
   34059 
   34060    * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   34061      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
   34062 
   34063    * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   34064      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
   34065 
   34066    * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   34067      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
   34068 
   34069 6.56.3.69 Vector extract
   34070 ........................
   34071 
   34072    * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
   34073      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   34074 
   34075    * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
   34076      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   34077 
   34078    * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
   34079      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   34080 
   34081    * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
   34082      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   34083 
   34084    * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
   34085      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   34086 
   34087    * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
   34088      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   34089 
   34090    * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
   34091      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
   34092 
   34093    * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
   34094      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
   34095 
   34096    * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
   34097      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   34098 
   34099    * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
   34100      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   34101 
   34102    * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
   34103      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   34104 
   34105    * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
   34106      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   34107 
   34108    * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
   34109      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   34110 
   34111    * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
   34112      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   34113 
   34114    * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
   34115      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   34116 
   34117    * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
   34118      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   34119 
   34120    * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
   34121      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   34122 
   34123    * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
   34124      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
   34125 
   34126    * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
   34127      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
   34128 
   34129    * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
   34130      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   34131 
   34132    * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
   34133      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   34134 
   34135    * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
   34136      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   34137 
   34138 6.56.3.70 Reverse elements
   34139 ..........................
   34140 
   34141    * uint32x2_t vrev64_u32 (uint32x2_t)
   34142      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   34143 
   34144    * uint16x4_t vrev64_u16 (uint16x4_t)
   34145      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   34146 
   34147    * uint8x8_t vrev64_u8 (uint8x8_t)
   34148      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   34149 
   34150    * int32x2_t vrev64_s32 (int32x2_t)
   34151      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   34152 
   34153    * int16x4_t vrev64_s16 (int16x4_t)
   34154      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   34155 
   34156    * int8x8_t vrev64_s8 (int8x8_t)
   34157      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   34158 
   34159    * float32x2_t vrev64_f32 (float32x2_t)
   34160      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   34161 
   34162    * poly16x4_t vrev64_p16 (poly16x4_t)
   34163      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   34164 
   34165    * poly8x8_t vrev64_p8 (poly8x8_t)
   34166      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   34167 
   34168    * uint32x4_t vrev64q_u32 (uint32x4_t)
   34169      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   34170 
   34171    * uint16x8_t vrev64q_u16 (uint16x8_t)
   34172      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   34173 
   34174    * uint8x16_t vrev64q_u8 (uint8x16_t)
   34175      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   34176 
   34177    * int32x4_t vrev64q_s32 (int32x4_t)
   34178      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   34179 
   34180    * int16x8_t vrev64q_s16 (int16x8_t)
   34181      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   34182 
   34183    * int8x16_t vrev64q_s8 (int8x16_t)
   34184      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   34185 
   34186    * float32x4_t vrev64q_f32 (float32x4_t)
   34187      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   34188 
   34189    * poly16x8_t vrev64q_p16 (poly16x8_t)
   34190      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   34191 
   34192    * poly8x16_t vrev64q_p8 (poly8x16_t)
   34193      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   34194 
   34195    * uint16x4_t vrev32_u16 (uint16x4_t)
   34196      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   34197 
   34198    * int16x4_t vrev32_s16 (int16x4_t)
   34199      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   34200 
   34201    * uint8x8_t vrev32_u8 (uint8x8_t)
   34202      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   34203 
   34204    * int8x8_t vrev32_s8 (int8x8_t)
   34205      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   34206 
   34207    * poly16x4_t vrev32_p16 (poly16x4_t)
   34208      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   34209 
   34210    * poly8x8_t vrev32_p8 (poly8x8_t)
   34211      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   34212 
   34213    * uint16x8_t vrev32q_u16 (uint16x8_t)
   34214      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   34215 
   34216    * int16x8_t vrev32q_s16 (int16x8_t)
   34217      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   34218 
   34219    * uint8x16_t vrev32q_u8 (uint8x16_t)
   34220      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   34221 
   34222    * int8x16_t vrev32q_s8 (int8x16_t)
   34223      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   34224 
   34225    * poly16x8_t vrev32q_p16 (poly16x8_t)
   34226      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   34227 
   34228    * poly8x16_t vrev32q_p8 (poly8x16_t)
   34229      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   34230 
   34231    * uint8x8_t vrev16_u8 (uint8x8_t)
   34232      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   34233 
   34234    * int8x8_t vrev16_s8 (int8x8_t)
   34235      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   34236 
   34237    * poly8x8_t vrev16_p8 (poly8x8_t)
   34238      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   34239 
   34240    * uint8x16_t vrev16q_u8 (uint8x16_t)
   34241      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   34242 
   34243    * int8x16_t vrev16q_s8 (int8x16_t)
   34244      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   34245 
   34246    * poly8x16_t vrev16q_p8 (poly8x16_t)
   34247      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   34248 
   34249 6.56.3.71 Bit selection
   34250 .......................
   34251 
   34252    * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   34253      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34254      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34255 
   34256    * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   34257      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34258      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34259 
   34260    * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   34261      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34262      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34263 
   34264    * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
   34265      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34266      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34267 
   34268    * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
   34269      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34270      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34271 
   34272    * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
   34273      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34274      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34275 
   34276    * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
   34277      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34278      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34279 
   34280    * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
   34281      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34282      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34283 
   34284    * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
   34285      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34286      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34287 
   34288    * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
   34289      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34290      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34291 
   34292    * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
   34293      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   34294      D0, D0, D0' _or_ `vbif D0, D0, D0'
   34295 
   34296    * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   34297      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34298      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34299 
   34300    * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   34301      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34302      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34303 
   34304    * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   34305      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34306      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34307 
   34308    * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
   34309      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34310      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34311 
   34312    * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
   34313      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34314      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34315 
   34316    * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
   34317      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34318      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34319 
   34320    * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
   34321      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34322      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34323 
   34324    * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
   34325      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34326      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34327 
   34328    * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
   34329      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34330      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34331 
   34332    * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
   34333      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34334      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34335 
   34336    * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
   34337      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   34338      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   34339 
   34340 6.56.3.72 Transpose elements
   34341 ............................
   34342 
   34343    * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
   34344      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   34345 
   34346    * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
   34347      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   34348 
   34349    * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
   34350      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   34351 
   34352    * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
   34353      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   34354 
   34355    * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
   34356      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   34357 
   34358    * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
   34359      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   34360 
   34361    * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
   34362      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34363 
   34364    * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
   34365      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34366 
   34367    * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
   34368      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34369 
   34370    * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
   34371      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   34372 
   34373    * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
   34374      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   34375 
   34376    * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
   34377      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   34378 
   34379    * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
   34380      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   34381 
   34382    * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
   34383      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   34384 
   34385    * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
   34386      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   34387 
   34388    * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
   34389      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   34390 
   34391    * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
   34392      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   34393 
   34394    * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
   34395      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   34396 
   34397 6.56.3.73 Zip elements
   34398 ......................
   34399 
   34400    * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
   34401      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   34402 
   34403    * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
   34404      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   34405 
   34406    * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
   34407      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   34408 
   34409    * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
   34410      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   34411 
   34412    * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
   34413      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   34414 
   34415    * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
   34416      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   34417 
   34418    * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
   34419      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34420 
   34421    * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
   34422      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34423 
   34424    * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
   34425      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34426 
   34427    * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
   34428      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   34429 
   34430    * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
   34431      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   34432 
   34433    * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
   34434      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   34435 
   34436    * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
   34437      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   34438 
   34439    * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
   34440      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   34441 
   34442    * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
   34443      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   34444 
   34445    * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
   34446      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   34447 
   34448    * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
   34449      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   34450 
   34451    * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
   34452      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   34453 
   34454 6.56.3.74 Unzip elements
   34455 ........................
   34456 
   34457    * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
   34458      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34459 
   34460    * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
   34461      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   34462 
   34463    * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
   34464      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   34465 
   34466    * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
   34467      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34468 
   34469    * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
   34470      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   34471 
   34472    * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
   34473      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   34474 
   34475    * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
   34476      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   34477 
   34478    * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
   34479      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   34480 
   34481    * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
   34482      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   34483 
   34484    * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
   34485      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   34486 
   34487    * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
   34488      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   34489 
   34490    * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
   34491      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   34492 
   34493    * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
   34494      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   34495 
   34496    * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
   34497      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   34498 
   34499    * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
   34500      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   34501 
   34502    * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
   34503      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   34504 
   34505    * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
   34506      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   34507 
   34508    * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
   34509      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   34510 
   34511 6.56.3.75 Element/structure loads, VLD1 variants
   34512 ................................................
   34513 
   34514    * uint32x2_t vld1_u32 (const uint32_t *)
   34515      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   34516 
   34517    * uint16x4_t vld1_u16 (const uint16_t *)
   34518      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   34519 
   34520    * uint8x8_t vld1_u8 (const uint8_t *)
   34521      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   34522 
   34523    * int32x2_t vld1_s32 (const int32_t *)
   34524      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   34525 
   34526    * int16x4_t vld1_s16 (const int16_t *)
   34527      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   34528 
   34529    * int8x8_t vld1_s8 (const int8_t *)
   34530      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   34531 
   34532    * uint64x1_t vld1_u64 (const uint64_t *)
   34533      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34534 
   34535    * int64x1_t vld1_s64 (const int64_t *)
   34536      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34537 
   34538    * float32x2_t vld1_f32 (const float32_t *)
   34539      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   34540 
   34541    * poly16x4_t vld1_p16 (const poly16_t *)
   34542      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   34543 
   34544    * poly8x8_t vld1_p8 (const poly8_t *)
   34545      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   34546 
   34547    * uint32x4_t vld1q_u32 (const uint32_t *)
   34548      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   34549 
   34550    * uint16x8_t vld1q_u16 (const uint16_t *)
   34551      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   34552 
   34553    * uint8x16_t vld1q_u8 (const uint8_t *)
   34554      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   34555 
   34556    * int32x4_t vld1q_s32 (const int32_t *)
   34557      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   34558 
   34559    * int16x8_t vld1q_s16 (const int16_t *)
   34560      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   34561 
   34562    * int8x16_t vld1q_s8 (const int8_t *)
   34563      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   34564 
   34565    * uint64x2_t vld1q_u64 (const uint64_t *)
   34566      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   34567 
   34568    * int64x2_t vld1q_s64 (const int64_t *)
   34569      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   34570 
   34571    * float32x4_t vld1q_f32 (const float32_t *)
   34572      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   34573 
   34574    * poly16x8_t vld1q_p16 (const poly16_t *)
   34575      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   34576 
   34577    * poly8x16_t vld1q_p8 (const poly8_t *)
   34578      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   34579 
   34580    * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
   34581      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   34582 
   34583    * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
   34584      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   34585 
   34586    * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
   34587      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   34588 
   34589    * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
   34590      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   34591 
   34592    * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
   34593      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   34594 
   34595    * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
   34596      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   34597 
   34598    * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
   34599      int)
   34600      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   34601 
   34602    * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
   34603      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   34604 
   34605    * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
   34606      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   34607 
   34608    * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
   34609      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34610 
   34611    * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
   34612      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34613 
   34614    * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
   34615      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   34616 
   34617    * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
   34618      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   34619 
   34620    * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
   34621      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   34622 
   34623    * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
   34624      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   34625 
   34626    * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
   34627      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   34628 
   34629    * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
   34630      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   34631 
   34632    * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
   34633      int)
   34634      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   34635 
   34636    * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
   34637      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   34638 
   34639    * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
   34640      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   34641 
   34642    * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
   34643      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34644 
   34645    * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
   34646      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34647 
   34648    * uint32x2_t vld1_dup_u32 (const uint32_t *)
   34649      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   34650 
   34651    * uint16x4_t vld1_dup_u16 (const uint16_t *)
   34652      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   34653 
   34654    * uint8x8_t vld1_dup_u8 (const uint8_t *)
   34655      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   34656 
   34657    * int32x2_t vld1_dup_s32 (const int32_t *)
   34658      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   34659 
   34660    * int16x4_t vld1_dup_s16 (const int16_t *)
   34661      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   34662 
   34663    * int8x8_t vld1_dup_s8 (const int8_t *)
   34664      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   34665 
   34666    * float32x2_t vld1_dup_f32 (const float32_t *)
   34667      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   34668 
   34669    * poly16x4_t vld1_dup_p16 (const poly16_t *)
   34670      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   34671 
   34672    * poly8x8_t vld1_dup_p8 (const poly8_t *)
   34673      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   34674 
   34675    * uint64x1_t vld1_dup_u64 (const uint64_t *)
   34676      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34677 
   34678    * int64x1_t vld1_dup_s64 (const int64_t *)
   34679      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34680 
   34681    * uint32x4_t vld1q_dup_u32 (const uint32_t *)
   34682      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   34683 
   34684    * uint16x8_t vld1q_dup_u16 (const uint16_t *)
   34685      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   34686 
   34687    * uint8x16_t vld1q_dup_u8 (const uint8_t *)
   34688      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   34689 
   34690    * int32x4_t vld1q_dup_s32 (const int32_t *)
   34691      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   34692 
   34693    * int16x8_t vld1q_dup_s16 (const int16_t *)
   34694      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   34695 
   34696    * int8x16_t vld1q_dup_s8 (const int8_t *)
   34697      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   34698 
   34699    * float32x4_t vld1q_dup_f32 (const float32_t *)
   34700      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   34701 
   34702    * poly16x8_t vld1q_dup_p16 (const poly16_t *)
   34703      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   34704 
   34705    * poly8x16_t vld1q_dup_p8 (const poly8_t *)
   34706      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   34707 
   34708    * uint64x2_t vld1q_dup_u64 (const uint64_t *)
   34709      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34710 
   34711    * int64x2_t vld1q_dup_s64 (const int64_t *)
   34712      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   34713 
   34714 6.56.3.76 Element/structure stores, VST1 variants
   34715 .................................................
   34716 
   34717    * void vst1_u32 (uint32_t *, uint32x2_t)
   34718      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   34719 
   34720    * void vst1_u16 (uint16_t *, uint16x4_t)
   34721      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   34722 
   34723    * void vst1_u8 (uint8_t *, uint8x8_t)
   34724      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   34725 
   34726    * void vst1_s32 (int32_t *, int32x2_t)
   34727      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   34728 
   34729    * void vst1_s16 (int16_t *, int16x4_t)
   34730      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   34731 
   34732    * void vst1_s8 (int8_t *, int8x8_t)
   34733      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   34734 
   34735    * void vst1_u64 (uint64_t *, uint64x1_t)
   34736      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   34737 
   34738    * void vst1_s64 (int64_t *, int64x1_t)
   34739      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   34740 
   34741    * void vst1_f32 (float32_t *, float32x2_t)
   34742      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   34743 
   34744    * void vst1_p16 (poly16_t *, poly16x4_t)
   34745      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   34746 
   34747    * void vst1_p8 (poly8_t *, poly8x8_t)
   34748      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   34749 
   34750    * void vst1q_u32 (uint32_t *, uint32x4_t)
   34751      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   34752 
   34753    * void vst1q_u16 (uint16_t *, uint16x8_t)
   34754      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   34755 
   34756    * void vst1q_u8 (uint8_t *, uint8x16_t)
   34757      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   34758 
   34759    * void vst1q_s32 (int32_t *, int32x4_t)
   34760      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   34761 
   34762    * void vst1q_s16 (int16_t *, int16x8_t)
   34763      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   34764 
   34765    * void vst1q_s8 (int8_t *, int8x16_t)
   34766      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   34767 
   34768    * void vst1q_u64 (uint64_t *, uint64x2_t)
   34769      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   34770 
   34771    * void vst1q_s64 (int64_t *, int64x2_t)
   34772      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   34773 
   34774    * void vst1q_f32 (float32_t *, float32x4_t)
   34775      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   34776 
   34777    * void vst1q_p16 (poly16_t *, poly16x8_t)
   34778      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   34779 
   34780    * void vst1q_p8 (poly8_t *, poly8x16_t)
   34781      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   34782 
   34783    * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
   34784      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   34785 
   34786    * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
   34787      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   34788 
   34789    * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
   34790      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   34791 
   34792    * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
   34793      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   34794 
   34795    * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
   34796      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   34797 
   34798    * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
   34799      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   34800 
   34801    * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
   34802      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   34803 
   34804    * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
   34805      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   34806 
   34807    * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
   34808      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   34809 
   34810    * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
   34811      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   34812 
   34813    * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
   34814      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   34815 
   34816    * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
   34817      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   34818 
   34819    * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
   34820      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   34821 
   34822    * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
   34823      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   34824 
   34825    * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
   34826      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   34827 
   34828    * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
   34829      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   34830 
   34831    * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
   34832      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   34833 
   34834    * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
   34835      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   34836 
   34837    * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
   34838      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   34839 
   34840    * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
   34841      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   34842 
   34843    * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
   34844      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   34845 
   34846    * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
   34847      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   34848 
   34849 6.56.3.77 Element/structure loads, VLD2 variants
   34850 ................................................
   34851 
   34852    * uint32x2x2_t vld2_u32 (const uint32_t *)
   34853      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   34854 
   34855    * uint16x4x2_t vld2_u16 (const uint16_t *)
   34856      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   34857 
   34858    * uint8x8x2_t vld2_u8 (const uint8_t *)
   34859      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   34860 
   34861    * int32x2x2_t vld2_s32 (const int32_t *)
   34862      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   34863 
   34864    * int16x4x2_t vld2_s16 (const int16_t *)
   34865      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   34866 
   34867    * int8x8x2_t vld2_s8 (const int8_t *)
   34868      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   34869 
   34870    * float32x2x2_t vld2_f32 (const float32_t *)
   34871      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   34872 
   34873    * poly16x4x2_t vld2_p16 (const poly16_t *)
   34874      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   34875 
   34876    * poly8x8x2_t vld2_p8 (const poly8_t *)
   34877      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   34878 
   34879    * uint64x1x2_t vld2_u64 (const uint64_t *)
   34880      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   34881 
   34882    * int64x1x2_t vld2_s64 (const int64_t *)
   34883      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   34884 
   34885    * uint32x4x2_t vld2q_u32 (const uint32_t *)
   34886      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   34887 
   34888    * uint16x8x2_t vld2q_u16 (const uint16_t *)
   34889      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   34890 
   34891    * uint8x16x2_t vld2q_u8 (const uint8_t *)
   34892      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   34893 
   34894    * int32x4x2_t vld2q_s32 (const int32_t *)
   34895      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   34896 
   34897    * int16x8x2_t vld2q_s16 (const int16_t *)
   34898      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   34899 
   34900    * int8x16x2_t vld2q_s8 (const int8_t *)
   34901      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   34902 
   34903    * float32x4x2_t vld2q_f32 (const float32_t *)
   34904      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   34905 
   34906    * poly16x8x2_t vld2q_p16 (const poly16_t *)
   34907      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   34908 
   34909    * poly8x16x2_t vld2q_p8 (const poly8_t *)
   34910      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   34911 
   34912    * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
   34913      int)
   34914      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   34915 
   34916    * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
   34917      int)
   34918      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   34919 
   34920    * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
   34921      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   34922 
   34923    * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
   34924      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   34925 
   34926    * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
   34927      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   34928 
   34929    * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
   34930      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   34931 
   34932    * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
   34933      const int)
   34934      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   34935 
   34936    * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
   34937      int)
   34938      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   34939 
   34940    * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
   34941      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   34942 
   34943    * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
   34944      int)
   34945      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   34946 
   34947    * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
   34948      int)
   34949      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   34950 
   34951    * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
   34952      int)
   34953      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   34954 
   34955    * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
   34956      int)
   34957      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   34958 
   34959    * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
   34960      const int)
   34961      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   34962 
   34963    * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
   34964      int)
   34965      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   34966 
   34967    * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
   34968      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   34969 
   34970    * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
   34971      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   34972 
   34973    * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
   34974      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   34975 
   34976    * int32x2x2_t vld2_dup_s32 (const int32_t *)
   34977      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   34978 
   34979    * int16x4x2_t vld2_dup_s16 (const int16_t *)
   34980      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   34981 
   34982    * int8x8x2_t vld2_dup_s8 (const int8_t *)
   34983      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   34984 
   34985    * float32x2x2_t vld2_dup_f32 (const float32_t *)
   34986      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   34987 
   34988    * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
   34989      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   34990 
   34991    * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
   34992      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   34993 
   34994    * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
   34995      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   34996 
   34997    * int64x1x2_t vld2_dup_s64 (const int64_t *)
   34998      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   34999 
   35000 6.56.3.78 Element/structure stores, VST2 variants
   35001 .................................................
   35002 
   35003    * void vst2_u32 (uint32_t *, uint32x2x2_t)
   35004      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   35005 
   35006    * void vst2_u16 (uint16_t *, uint16x4x2_t)
   35007      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   35008 
   35009    * void vst2_u8 (uint8_t *, uint8x8x2_t)
   35010      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   35011 
   35012    * void vst2_s32 (int32_t *, int32x2x2_t)
   35013      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   35014 
   35015    * void vst2_s16 (int16_t *, int16x4x2_t)
   35016      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   35017 
   35018    * void vst2_s8 (int8_t *, int8x8x2_t)
   35019      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   35020 
   35021    * void vst2_f32 (float32_t *, float32x2x2_t)
   35022      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   35023 
   35024    * void vst2_p16 (poly16_t *, poly16x4x2_t)
   35025      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   35026 
   35027    * void vst2_p8 (poly8_t *, poly8x8x2_t)
   35028      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   35029 
   35030    * void vst2_u64 (uint64_t *, uint64x1x2_t)
   35031      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   35032 
   35033    * void vst2_s64 (int64_t *, int64x1x2_t)
   35034      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   35035 
   35036    * void vst2q_u32 (uint32_t *, uint32x4x2_t)
   35037      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   35038 
   35039    * void vst2q_u16 (uint16_t *, uint16x8x2_t)
   35040      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   35041 
   35042    * void vst2q_u8 (uint8_t *, uint8x16x2_t)
   35043      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   35044 
   35045    * void vst2q_s32 (int32_t *, int32x4x2_t)
   35046      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   35047 
   35048    * void vst2q_s16 (int16_t *, int16x8x2_t)
   35049      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   35050 
   35051    * void vst2q_s8 (int8_t *, int8x16x2_t)
   35052      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   35053 
   35054    * void vst2q_f32 (float32_t *, float32x4x2_t)
   35055      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   35056 
   35057    * void vst2q_p16 (poly16_t *, poly16x8x2_t)
   35058      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   35059 
   35060    * void vst2q_p8 (poly8_t *, poly8x16x2_t)
   35061      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   35062 
   35063    * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
   35064      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   35065 
   35066    * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
   35067      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   35068 
   35069    * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
   35070      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   35071 
   35072    * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
   35073      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   35074 
   35075    * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
   35076      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   35077 
   35078    * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
   35079      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   35080 
   35081    * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
   35082      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   35083 
   35084    * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
   35085      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   35086 
   35087    * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
   35088      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   35089 
   35090    * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
   35091      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   35092 
   35093    * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
   35094      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   35095 
   35096    * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
   35097      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   35098 
   35099    * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
   35100      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   35101 
   35102    * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
   35103      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   35104 
   35105    * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
   35106      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   35107 
   35108 6.56.3.79 Element/structure loads, VLD3 variants
   35109 ................................................
   35110 
   35111    * uint32x2x3_t vld3_u32 (const uint32_t *)
   35112      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   35113 
   35114    * uint16x4x3_t vld3_u16 (const uint16_t *)
   35115      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   35116 
   35117    * uint8x8x3_t vld3_u8 (const uint8_t *)
   35118      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   35119 
   35120    * int32x2x3_t vld3_s32 (const int32_t *)
   35121      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   35122 
   35123    * int16x4x3_t vld3_s16 (const int16_t *)
   35124      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   35125 
   35126    * int8x8x3_t vld3_s8 (const int8_t *)
   35127      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   35128 
   35129    * float32x2x3_t vld3_f32 (const float32_t *)
   35130      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   35131 
   35132    * poly16x4x3_t vld3_p16 (const poly16_t *)
   35133      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   35134 
   35135    * poly8x8x3_t vld3_p8 (const poly8_t *)
   35136      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   35137 
   35138    * uint64x1x3_t vld3_u64 (const uint64_t *)
   35139      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   35140 
   35141    * int64x1x3_t vld3_s64 (const int64_t *)
   35142      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   35143 
   35144    * uint32x4x3_t vld3q_u32 (const uint32_t *)
   35145      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   35146 
   35147    * uint16x8x3_t vld3q_u16 (const uint16_t *)
   35148      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   35149 
   35150    * uint8x16x3_t vld3q_u8 (const uint8_t *)
   35151      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   35152 
   35153    * int32x4x3_t vld3q_s32 (const int32_t *)
   35154      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   35155 
   35156    * int16x8x3_t vld3q_s16 (const int16_t *)
   35157      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   35158 
   35159    * int8x16x3_t vld3q_s8 (const int8_t *)
   35160      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   35161 
   35162    * float32x4x3_t vld3q_f32 (const float32_t *)
   35163      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   35164 
   35165    * poly16x8x3_t vld3q_p16 (const poly16_t *)
   35166      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   35167 
   35168    * poly8x16x3_t vld3q_p8 (const poly8_t *)
   35169      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   35170 
   35171    * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
   35172      int)
   35173      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   35174      [R0]'
   35175 
   35176    * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
   35177      int)
   35178      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   35179      [R0]'
   35180 
   35181    * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
   35182      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   35183      [R0]'
   35184 
   35185    * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
   35186      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   35187      [R0]'
   35188 
   35189    * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
   35190      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   35191      [R0]'
   35192 
   35193    * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
   35194      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   35195      [R0]'
   35196 
   35197    * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
   35198      const int)
   35199      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   35200      [R0]'
   35201 
   35202    * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
   35203      int)
   35204      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   35205      [R0]'
   35206 
   35207    * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
   35208      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   35209      [R0]'
   35210 
   35211    * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
   35212      int)
   35213      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   35214      [R0]'
   35215 
   35216    * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
   35217      int)
   35218      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   35219      [R0]'
   35220 
   35221    * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
   35222      int)
   35223      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   35224      [R0]'
   35225 
   35226    * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
   35227      int)
   35228      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   35229      [R0]'
   35230 
   35231    * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
   35232      const int)
   35233      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   35234      [R0]'
   35235 
   35236    * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
   35237      int)
   35238      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   35239      [R0]'
   35240 
   35241    * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
   35242      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   35243      [R0]'
   35244 
   35245    * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
   35246      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   35247      [R0]'
   35248 
   35249    * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
   35250      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   35251      [R0]'
   35252 
   35253    * int32x2x3_t vld3_dup_s32 (const int32_t *)
   35254      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   35255      [R0]'
   35256 
   35257    * int16x4x3_t vld3_dup_s16 (const int16_t *)
   35258      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   35259      [R0]'
   35260 
   35261    * int8x8x3_t vld3_dup_s8 (const int8_t *)
   35262      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   35263      [R0]'
   35264 
   35265    * float32x2x3_t vld3_dup_f32 (const float32_t *)
   35266      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   35267      [R0]'
   35268 
   35269    * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
   35270      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   35271      [R0]'
   35272 
   35273    * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
   35274      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   35275      [R0]'
   35276 
   35277    * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
   35278      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   35279 
   35280    * int64x1x3_t vld3_dup_s64 (const int64_t *)
   35281      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   35282 
   35283 6.56.3.80 Element/structure stores, VST3 variants
   35284 .................................................
   35285 
   35286    * void vst3_u32 (uint32_t *, uint32x2x3_t)
   35287      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   35288 
   35289    * void vst3_u16 (uint16_t *, uint16x4x3_t)
   35290      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   35291 
   35292    * void vst3_u8 (uint8_t *, uint8x8x3_t)
   35293      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   35294 
   35295    * void vst3_s32 (int32_t *, int32x2x3_t)
   35296      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   35297 
   35298    * void vst3_s16 (int16_t *, int16x4x3_t)
   35299      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   35300 
   35301    * void vst3_s8 (int8_t *, int8x8x3_t)
   35302      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   35303 
   35304    * void vst3_f32 (float32_t *, float32x2x3_t)
   35305      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   35306 
   35307    * void vst3_p16 (poly16_t *, poly16x4x3_t)
   35308      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   35309 
   35310    * void vst3_p8 (poly8_t *, poly8x8x3_t)
   35311      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   35312 
   35313    * void vst3_u64 (uint64_t *, uint64x1x3_t)
   35314      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   35315 
   35316    * void vst3_s64 (int64_t *, int64x1x3_t)
   35317      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   35318 
   35319    * void vst3q_u32 (uint32_t *, uint32x4x3_t)
   35320      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   35321 
   35322    * void vst3q_u16 (uint16_t *, uint16x8x3_t)
   35323      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   35324 
   35325    * void vst3q_u8 (uint8_t *, uint8x16x3_t)
   35326      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   35327 
   35328    * void vst3q_s32 (int32_t *, int32x4x3_t)
   35329      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   35330 
   35331    * void vst3q_s16 (int16_t *, int16x8x3_t)
   35332      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   35333 
   35334    * void vst3q_s8 (int8_t *, int8x16x3_t)
   35335      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   35336 
   35337    * void vst3q_f32 (float32_t *, float32x4x3_t)
   35338      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   35339 
   35340    * void vst3q_p16 (poly16_t *, poly16x8x3_t)
   35341      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   35342 
   35343    * void vst3q_p8 (poly8_t *, poly8x16x3_t)
   35344      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   35345 
   35346    * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
   35347      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   35348      [R0]'
   35349 
   35350    * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
   35351      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   35352      [R0]'
   35353 
   35354    * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
   35355      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   35356      [R0]'
   35357 
   35358    * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
   35359      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   35360      [R0]'
   35361 
   35362    * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
   35363      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   35364      [R0]'
   35365 
   35366    * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
   35367      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   35368      [R0]'
   35369 
   35370    * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
   35371      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   35372      [R0]'
   35373 
   35374    * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
   35375      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   35376      [R0]'
   35377 
   35378    * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
   35379      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   35380      [R0]'
   35381 
   35382    * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
   35383      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   35384      [R0]'
   35385 
   35386    * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
   35387      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   35388      [R0]'
   35389 
   35390    * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
   35391      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   35392      [R0]'
   35393 
   35394    * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
   35395      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   35396      [R0]'
   35397 
   35398    * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
   35399      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   35400      [R0]'
   35401 
   35402    * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
   35403      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   35404      [R0]'
   35405 
   35406 6.56.3.81 Element/structure loads, VLD4 variants
   35407 ................................................
   35408 
   35409    * uint32x2x4_t vld4_u32 (const uint32_t *)
   35410      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   35411 
   35412    * uint16x4x4_t vld4_u16 (const uint16_t *)
   35413      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   35414 
   35415    * uint8x8x4_t vld4_u8 (const uint8_t *)
   35416      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   35417 
   35418    * int32x2x4_t vld4_s32 (const int32_t *)
   35419      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   35420 
   35421    * int16x4x4_t vld4_s16 (const int16_t *)
   35422      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   35423 
   35424    * int8x8x4_t vld4_s8 (const int8_t *)
   35425      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   35426 
   35427    * float32x2x4_t vld4_f32 (const float32_t *)
   35428      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   35429 
   35430    * poly16x4x4_t vld4_p16 (const poly16_t *)
   35431      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   35432 
   35433    * poly8x8x4_t vld4_p8 (const poly8_t *)
   35434      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   35435 
   35436    * uint64x1x4_t vld4_u64 (const uint64_t *)
   35437      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   35438 
   35439    * int64x1x4_t vld4_s64 (const int64_t *)
   35440      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   35441 
   35442    * uint32x4x4_t vld4q_u32 (const uint32_t *)
   35443      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   35444 
   35445    * uint16x8x4_t vld4q_u16 (const uint16_t *)
   35446      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   35447 
   35448    * uint8x16x4_t vld4q_u8 (const uint8_t *)
   35449      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   35450 
   35451    * int32x4x4_t vld4q_s32 (const int32_t *)
   35452      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   35453 
   35454    * int16x8x4_t vld4q_s16 (const int16_t *)
   35455      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   35456 
   35457    * int8x16x4_t vld4q_s8 (const int8_t *)
   35458      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   35459 
   35460    * float32x4x4_t vld4q_f32 (const float32_t *)
   35461      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   35462 
   35463    * poly16x8x4_t vld4q_p16 (const poly16_t *)
   35464      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   35465 
   35466    * poly8x16x4_t vld4q_p8 (const poly8_t *)
   35467      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   35468 
   35469    * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
   35470      int)
   35471      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   35472      D3[0]}, [R0]'
   35473 
   35474    * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
   35475      int)
   35476      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   35477      D3[0]}, [R0]'
   35478 
   35479    * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
   35480      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   35481      D3[0]}, [R0]'
   35482 
   35483    * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
   35484      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   35485      D3[0]}, [R0]'
   35486 
   35487    * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
   35488      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   35489      D3[0]}, [R0]'
   35490 
   35491    * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
   35492      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   35493      D3[0]}, [R0]'
   35494 
   35495    * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
   35496      const int)
   35497      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   35498      D3[0]}, [R0]'
   35499 
   35500    * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
   35501      int)
   35502      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   35503      D3[0]}, [R0]'
   35504 
   35505    * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
   35506      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   35507      D3[0]}, [R0]'
   35508 
   35509    * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
   35510      int)
   35511      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   35512      D3[0]}, [R0]'
   35513 
   35514    * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
   35515      int)
   35516      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   35517      D3[0]}, [R0]'
   35518 
   35519    * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
   35520      int)
   35521      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   35522      D3[0]}, [R0]'
   35523 
   35524    * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
   35525      int)
   35526      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   35527      D3[0]}, [R0]'
   35528 
   35529    * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
   35530      const int)
   35531      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   35532      D3[0]}, [R0]'
   35533 
   35534    * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
   35535      int)
   35536      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   35537      D3[0]}, [R0]'
   35538 
   35539    * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
   35540      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   35541      D3[]}, [R0]'
   35542 
   35543    * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
   35544      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   35545      D3[]}, [R0]'
   35546 
   35547    * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
   35548      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   35549      D3[]}, [R0]'
   35550 
   35551    * int32x2x4_t vld4_dup_s32 (const int32_t *)
   35552      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   35553      D3[]}, [R0]'
   35554 
   35555    * int16x4x4_t vld4_dup_s16 (const int16_t *)
   35556      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   35557      D3[]}, [R0]'
   35558 
   35559    * int8x8x4_t vld4_dup_s8 (const int8_t *)
   35560      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   35561      D3[]}, [R0]'
   35562 
   35563    * float32x2x4_t vld4_dup_f32 (const float32_t *)
   35564      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   35565      D3[]}, [R0]'
   35566 
   35567    * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
   35568      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   35569      D3[]}, [R0]'
   35570 
   35571    * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
   35572      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   35573      D3[]}, [R0]'
   35574 
   35575    * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
   35576      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   35577 
   35578    * int64x1x4_t vld4_dup_s64 (const int64_t *)
   35579      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   35580 
   35581 6.56.3.82 Element/structure stores, VST4 variants
   35582 .................................................
   35583 
   35584    * void vst4_u32 (uint32_t *, uint32x2x4_t)
   35585      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   35586 
   35587    * void vst4_u16 (uint16_t *, uint16x4x4_t)
   35588      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   35589 
   35590    * void vst4_u8 (uint8_t *, uint8x8x4_t)
   35591      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   35592 
   35593    * void vst4_s32 (int32_t *, int32x2x4_t)
   35594      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   35595 
   35596    * void vst4_s16 (int16_t *, int16x4x4_t)
   35597      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   35598 
   35599    * void vst4_s8 (int8_t *, int8x8x4_t)
   35600      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   35601 
   35602    * void vst4_f32 (float32_t *, float32x2x4_t)
   35603      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   35604 
   35605    * void vst4_p16 (poly16_t *, poly16x4x4_t)
   35606      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   35607 
   35608    * void vst4_p8 (poly8_t *, poly8x8x4_t)
   35609      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   35610 
   35611    * void vst4_u64 (uint64_t *, uint64x1x4_t)
   35612      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   35613 
   35614    * void vst4_s64 (int64_t *, int64x1x4_t)
   35615      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   35616 
   35617    * void vst4q_u32 (uint32_t *, uint32x4x4_t)
   35618      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   35619 
   35620    * void vst4q_u16 (uint16_t *, uint16x8x4_t)
   35621      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   35622 
   35623    * void vst4q_u8 (uint8_t *, uint8x16x4_t)
   35624      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   35625 
   35626    * void vst4q_s32 (int32_t *, int32x4x4_t)
   35627      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   35628 
   35629    * void vst4q_s16 (int16_t *, int16x8x4_t)
   35630      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   35631 
   35632    * void vst4q_s8 (int8_t *, int8x16x4_t)
   35633      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   35634 
   35635    * void vst4q_f32 (float32_t *, float32x4x4_t)
   35636      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   35637 
   35638    * void vst4q_p16 (poly16_t *, poly16x8x4_t)
   35639      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   35640 
   35641    * void vst4q_p8 (poly8_t *, poly8x16x4_t)
   35642      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   35643 
   35644    * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
   35645      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   35646      D3[0]}, [R0]'
   35647 
   35648    * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
   35649      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   35650      D3[0]}, [R0]'
   35651 
   35652    * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
   35653      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   35654      D3[0]}, [R0]'
   35655 
   35656    * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
   35657      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   35658      D3[0]}, [R0]'
   35659 
   35660    * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
   35661      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   35662      D3[0]}, [R0]'
   35663 
   35664    * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
   35665      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   35666      D3[0]}, [R0]'
   35667 
   35668    * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
   35669      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   35670      D3[0]}, [R0]'
   35671 
   35672    * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
   35673      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   35674      D3[0]}, [R0]'
   35675 
   35676    * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
   35677      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   35678      D3[0]}, [R0]'
   35679 
   35680    * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
   35681      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   35682      D3[0]}, [R0]'
   35683 
   35684    * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
   35685      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   35686      D3[0]}, [R0]'
   35687 
   35688    * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
   35689      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   35690      D3[0]}, [R0]'
   35691 
   35692    * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
   35693      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   35694      D3[0]}, [R0]'
   35695 
   35696    * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
   35697      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   35698      D3[0]}, [R0]'
   35699 
   35700    * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
   35701      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   35702      D3[0]}, [R0]'
   35703 
   35704 6.56.3.83 Logical operations (AND)
   35705 ..................................
   35706 
   35707    * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
   35708      _Form of expected instruction(s):_ `vand D0, D0, D0'
   35709 
   35710    * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
   35711      _Form of expected instruction(s):_ `vand D0, D0, D0'
   35712 
   35713    * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
   35714      _Form of expected instruction(s):_ `vand D0, D0, D0'
   35715 
   35716    * int32x2_t vand_s32 (int32x2_t, int32x2_t)
   35717      _Form of expected instruction(s):_ `vand D0, D0, D0'
   35718 
   35719    * int16x4_t vand_s16 (int16x4_t, int16x4_t)
   35720      _Form of expected instruction(s):_ `vand D0, D0, D0'
   35721 
   35722    * int8x8_t vand_s8 (int8x8_t, int8x8_t)
   35723      _Form of expected instruction(s):_ `vand D0, D0, D0'
   35724 
   35725    * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
   35726 
   35727    * int64x1_t vand_s64 (int64x1_t, int64x1_t)
   35728 
   35729    * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
   35730      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35731 
   35732    * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
   35733      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35734 
   35735    * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
   35736      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35737 
   35738    * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
   35739      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35740 
   35741    * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
   35742      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35743 
   35744    * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
   35745      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35746 
   35747    * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
   35748      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35749 
   35750    * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
   35751      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   35752 
   35753 6.56.3.84 Logical operations (OR)
   35754 .................................
   35755 
   35756    * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
   35757      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   35758 
   35759    * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
   35760      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   35761 
   35762    * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
   35763      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   35764 
   35765    * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
   35766      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   35767 
   35768    * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
   35769      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   35770 
   35771    * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
   35772      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   35773 
   35774    * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
   35775 
   35776    * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
   35777 
   35778    * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
   35779      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35780 
   35781    * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
   35782      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35783 
   35784    * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
   35785      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35786 
   35787    * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
   35788      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35789 
   35790    * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
   35791      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35792 
   35793    * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
   35794      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35795 
   35796    * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
   35797      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35798 
   35799    * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
   35800      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   35801 
   35802 6.56.3.85 Logical operations (exclusive OR)
   35803 ...........................................
   35804 
   35805    * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
   35806      _Form of expected instruction(s):_ `veor D0, D0, D0'
   35807 
   35808    * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
   35809      _Form of expected instruction(s):_ `veor D0, D0, D0'
   35810 
   35811    * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
   35812      _Form of expected instruction(s):_ `veor D0, D0, D0'
   35813 
   35814    * int32x2_t veor_s32 (int32x2_t, int32x2_t)
   35815      _Form of expected instruction(s):_ `veor D0, D0, D0'
   35816 
   35817    * int16x4_t veor_s16 (int16x4_t, int16x4_t)
   35818      _Form of expected instruction(s):_ `veor D0, D0, D0'
   35819 
   35820    * int8x8_t veor_s8 (int8x8_t, int8x8_t)
   35821      _Form of expected instruction(s):_ `veor D0, D0, D0'
   35822 
   35823    * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
   35824 
   35825    * int64x1_t veor_s64 (int64x1_t, int64x1_t)
   35826 
   35827    * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
   35828      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35829 
   35830    * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
   35831      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35832 
   35833    * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
   35834      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35835 
   35836    * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
   35837      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35838 
   35839    * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
   35840      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35841 
   35842    * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
   35843      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35844 
   35845    * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
   35846      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35847 
   35848    * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
   35849      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   35850 
   35851 6.56.3.86 Logical operations (AND-NOT)
   35852 ......................................
   35853 
   35854    * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
   35855      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   35856 
   35857    * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
   35858      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   35859 
   35860    * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
   35861      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   35862 
   35863    * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
   35864      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   35865 
   35866    * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
   35867      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   35868 
   35869    * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
   35870      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   35871 
   35872    * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
   35873 
   35874    * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
   35875 
   35876    * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
   35877      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35878 
   35879    * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
   35880      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35881 
   35882    * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
   35883      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35884 
   35885    * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
   35886      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35887 
   35888    * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
   35889      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35890 
   35891    * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
   35892      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35893 
   35894    * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
   35895      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35896 
   35897    * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
   35898      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   35899 
   35900 6.56.3.87 Logical operations (OR-NOT)
   35901 .....................................
   35902 
   35903    * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
   35904      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   35905 
   35906    * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
   35907      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   35908 
   35909    * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
   35910      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   35911 
   35912    * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
   35913      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   35914 
   35915    * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
   35916      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   35917 
   35918    * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
   35919      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   35920 
   35921    * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
   35922 
   35923    * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
   35924 
   35925    * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
   35926      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35927 
   35928    * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
   35929      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35930 
   35931    * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
   35932      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35933 
   35934    * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
   35935      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35936 
   35937    * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
   35938      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35939 
   35940    * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
   35941      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35942 
   35943    * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
   35944      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35945 
   35946    * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
   35947      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   35948 
   35949 6.56.3.88 Reinterpret casts
   35950 ...........................
   35951 
   35952    * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
   35953 
   35954    * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
   35955 
   35956    * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
   35957 
   35958    * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
   35959 
   35960    * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
   35961 
   35962    * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
   35963 
   35964    * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
   35965 
   35966    * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
   35967 
   35968    * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
   35969 
   35970    * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
   35971 
   35972    * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
   35973 
   35974    * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
   35975 
   35976    * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
   35977 
   35978    * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
   35979 
   35980    * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
   35981 
   35982    * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
   35983 
   35984    * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
   35985 
   35986    * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
   35987 
   35988    * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
   35989 
   35990    * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
   35991 
   35992    * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
   35993 
   35994    * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
   35995 
   35996    * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
   35997 
   35998    * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
   35999 
   36000    * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
   36001 
   36002    * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
   36003 
   36004    * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
   36005 
   36006    * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
   36007 
   36008    * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
   36009 
   36010    * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
   36011 
   36012    * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
   36013 
   36014    * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
   36015 
   36016    * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
   36017 
   36018    * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
   36019 
   36020    * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
   36021 
   36022    * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
   36023 
   36024    * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
   36025 
   36026    * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
   36027 
   36028    * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
   36029 
   36030    * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
   36031 
   36032    * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
   36033 
   36034    * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
   36035 
   36036    * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
   36037 
   36038    * float32x2_t vreinterpret_f32_s32 (int32x2_t)
   36039 
   36040    * float32x2_t vreinterpret_f32_s16 (int16x4_t)
   36041 
   36042    * float32x2_t vreinterpret_f32_s8 (int8x8_t)
   36043 
   36044    * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
   36045 
   36046    * float32x2_t vreinterpret_f32_s64 (int64x1_t)
   36047 
   36048    * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
   36049 
   36050    * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
   36051 
   36052    * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
   36053 
   36054    * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
   36055 
   36056    * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
   36057 
   36058    * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
   36059 
   36060    * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
   36061 
   36062    * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
   36063 
   36064    * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
   36065 
   36066    * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
   36067 
   36068    * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
   36069 
   36070    * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
   36071 
   36072    * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
   36073 
   36074    * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
   36075 
   36076    * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
   36077 
   36078    * int64x1_t vreinterpret_s64_s32 (int32x2_t)
   36079 
   36080    * int64x1_t vreinterpret_s64_s16 (int16x4_t)
   36081 
   36082    * int64x1_t vreinterpret_s64_s8 (int8x8_t)
   36083 
   36084    * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
   36085 
   36086    * int64x1_t vreinterpret_s64_f32 (float32x2_t)
   36087 
   36088    * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
   36089 
   36090    * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
   36091 
   36092    * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
   36093 
   36094    * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
   36095 
   36096    * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
   36097 
   36098    * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
   36099 
   36100    * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
   36101 
   36102    * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
   36103 
   36104    * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
   36105 
   36106    * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
   36107 
   36108    * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
   36109 
   36110    * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
   36111 
   36112    * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
   36113 
   36114    * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
   36115 
   36116    * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
   36117 
   36118    * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
   36119 
   36120    * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
   36121 
   36122    * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
   36123 
   36124    * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
   36125 
   36126    * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
   36127 
   36128    * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
   36129 
   36130    * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
   36131 
   36132    * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
   36133 
   36134    * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
   36135 
   36136    * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
   36137 
   36138    * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
   36139 
   36140    * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
   36141 
   36142    * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
   36143 
   36144    * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
   36145 
   36146    * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
   36147 
   36148    * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
   36149 
   36150    * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
   36151 
   36152    * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
   36153 
   36154    * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
   36155 
   36156    * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
   36157 
   36158    * int8x8_t vreinterpret_s8_s32 (int32x2_t)
   36159 
   36160    * int8x8_t vreinterpret_s8_s16 (int16x4_t)
   36161 
   36162    * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
   36163 
   36164    * int8x8_t vreinterpret_s8_s64 (int64x1_t)
   36165 
   36166    * int8x8_t vreinterpret_s8_f32 (float32x2_t)
   36167 
   36168    * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
   36169 
   36170    * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
   36171 
   36172    * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
   36173 
   36174    * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
   36175 
   36176    * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
   36177 
   36178    * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
   36179 
   36180    * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
   36181 
   36182    * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
   36183 
   36184    * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
   36185 
   36186    * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
   36187 
   36188    * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
   36189 
   36190    * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
   36191 
   36192    * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
   36193 
   36194    * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
   36195 
   36196    * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
   36197 
   36198    * int16x4_t vreinterpret_s16_s32 (int32x2_t)
   36199 
   36200    * int16x4_t vreinterpret_s16_s8 (int8x8_t)
   36201 
   36202    * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
   36203 
   36204    * int16x4_t vreinterpret_s16_s64 (int64x1_t)
   36205 
   36206    * int16x4_t vreinterpret_s16_f32 (float32x2_t)
   36207 
   36208    * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
   36209 
   36210    * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
   36211 
   36212    * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
   36213 
   36214    * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
   36215 
   36216    * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
   36217 
   36218    * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
   36219 
   36220    * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
   36221 
   36222    * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
   36223 
   36224    * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
   36225 
   36226    * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
   36227 
   36228    * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
   36229 
   36230    * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
   36231 
   36232    * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
   36233 
   36234    * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
   36235 
   36236    * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
   36237 
   36238    * int32x2_t vreinterpret_s32_s16 (int16x4_t)
   36239 
   36240    * int32x2_t vreinterpret_s32_s8 (int8x8_t)
   36241 
   36242    * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
   36243 
   36244    * int32x2_t vreinterpret_s32_s64 (int64x1_t)
   36245 
   36246    * int32x2_t vreinterpret_s32_f32 (float32x2_t)
   36247 
   36248    * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
   36249 
   36250    * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
   36251 
   36252    * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
   36253 
   36254    * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
   36255 
   36256    * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
   36257 
   36258    * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
   36259 
   36260    * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
   36261 
   36262    * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
   36263 
   36264    * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
   36265 
   36266    * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
   36267 
   36268    * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
   36269 
   36270    * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
   36271 
   36272    * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
   36273 
   36274    * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
   36275 
   36276    * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
   36277 
   36278    * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
   36279 
   36280    * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
   36281 
   36282    * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
   36283 
   36284    * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
   36285 
   36286    * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
   36287 
   36288    * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
   36289 
   36290    * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
   36291 
   36292    * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
   36293 
   36294    * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
   36295 
   36296    * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
   36297 
   36298    * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
   36299 
   36300    * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
   36301 
   36302    * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
   36303 
   36304    * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
   36305 
   36306    * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
   36307 
   36308    * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
   36309 
   36310    * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
   36311 
   36312    * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
   36313 
   36314    * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
   36315 
   36316    * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
   36317 
   36318    * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
   36319 
   36320    * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
   36321 
   36322    * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
   36323 
   36324    * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
   36325 
   36326    * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
   36327 
   36328    * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
   36329 
   36330    * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
   36331 
   36332    * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
   36333 
   36334    * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
   36335 
   36336    * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
   36337 
   36338    * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
   36339 
   36340    * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
   36341 
   36342    * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
   36343 
   36344    * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
   36345 
   36346    * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
   36347 
   36348    * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
   36349 
   36350    * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
   36351 
   36352    * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
   36353 
   36354    * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
   36355 
   36356    * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
   36357 
   36358    * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
   36359 
   36360    * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
   36361 
   36362    * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
   36363 
   36364    * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
   36365 
   36366    * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
   36367 
   36368    * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
   36369 
   36370    * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
   36371 
   36372    * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
   36373 
   36374    * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
   36375 
   36376    * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
   36377 
   36378    * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
   36379 
   36380    * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
   36381 
   36382    * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
   36383 
   36384    * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
   36385 
   36386    * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
   36387 
   36388    * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
   36389 
   36390    * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
   36391 
   36392 
   36393 File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
   36394 
   36395 6.56.4 AVR Built-in Functions
   36396 -----------------------------
   36397 
   36398 For each built-in function for AVR, there is an equally named,
   36399 uppercase built-in macro defined. That way users can easily query if or
   36400 if not a specific built-in is implemented or not. For example, if
   36401 `__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is
   36402 defined to `1' and undefined otherwise.
   36403 
   36404  The following built-in functions map to the respective machine
   36405 instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul',
   36406 `fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as
   36407 library call if no hardware multiplier is available.
   36408 
   36409      void __builtin_avr_nop (void)
   36410      void __builtin_avr_sei (void)
   36411      void __builtin_avr_cli (void)
   36412      void __builtin_avr_sleep (void)
   36413      void __builtin_avr_wdr (void)
   36414      unsigned char __builtin_avr_swap (unsigned char)
   36415      unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
   36416      int __builtin_avr_fmuls (char, char)
   36417      int __builtin_avr_fmulsu (char, unsigned char)
   36418 
   36419  In order to delay execution for a specific number of cycles, GCC
   36420 implements
   36421      void __builtin_avr_delay_cycles (unsigned long ticks)
   36422 
   36423 `ticks' is the number of ticks to delay execution. Note that this
   36424 built-in does not take into account the effect of interrupts that might
   36425 increase delay time. `ticks' must be a compile-time integer constant;
   36426 delays with a variable number of cycles are not supported.
   36427 
   36428      char __builtin_avr_flash_segment (const __memx void*)
   36429 
   36430 This built-in takes a byte address to the 24-bit *note address space:
   36431 AVR Named Address Spaces. `__memx' and returns the number of the flash
   36432 segment (the 64 KiB chunk) where the address points to.  Counting
   36433 starts at `0'.  If the address does not point to flash memory, return
   36434 `-1'.
   36435 
   36436      unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
   36437 
   36438 Insert bits from BITS into VAL and return the resulting value. The
   36439 nibbles of MAP determine how the insertion is performed: Let X be the
   36440 N-th nibble of MAP
   36441   1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
   36442 
   36443   2. If X is in the range 0...7, then the N-th result bit is set to the
   36444      X-th bit of BITS
   36445 
   36446   3. If X is in the range 8...`0xe', then the N-th result bit is
   36447      undefined.
   36448 
   36449 One typical use case for this built-in is adjusting input and output
   36450 values to non-contiguous port layouts. Some examples:
   36451 
   36452      // same as val, bits is unused
   36453      __builtin_avr_insert_bits (0xffffffff, bits, val)
   36454 
   36455      // same as bits, val is unused
   36456      __builtin_avr_insert_bits (0x76543210, bits, val)
   36457 
   36458      // same as rotating bits by 4
   36459      __builtin_avr_insert_bits (0x32107654, bits, 0)
   36460 
   36461      // high nibble of result is the high nibble of val
   36462      // low nibble of result is the low nibble of bits
   36463      __builtin_avr_insert_bits (0xffff3210, bits, val)
   36464 
   36465      // reverse the bit order of bits
   36466      __builtin_avr_insert_bits (0x01234567, bits, 0)
   36467 
   36468 
   36469 File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
   36470 
   36471 6.56.5 Blackfin Built-in Functions
   36472 ----------------------------------
   36473 
   36474 Currently, there are two Blackfin-specific built-in functions.  These
   36475 are used for generating `CSYNC' and `SSYNC' machine insns without using
   36476 inline assembly; by using these built-in functions the compiler can
   36477 automatically add workarounds for hardware errata involving these
   36478 instructions.  These functions are named as follows:
   36479 
   36480      void __builtin_bfin_csync (void)
   36481      void __builtin_bfin_ssync (void)
   36482 
   36483 
   36484 File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
   36485 
   36486 6.56.6 FR-V Built-in Functions
   36487 ------------------------------
   36488 
   36489 GCC provides many FR-V-specific built-in functions.  In general, these
   36490 functions are intended to be compatible with those described by `FR-V
   36491 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
   36492 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of
   36493 which pass 128-bit values by pointer rather than by value.
   36494 
   36495  Most of the functions are named after specific FR-V instructions.
   36496 Such functions are said to be "directly mapped" and are summarized here
   36497 in tabular form.
   36498 
   36499 * Menu:
   36500 
   36501 * Argument Types::
   36502 * Directly-mapped Integer Functions::
   36503 * Directly-mapped Media Functions::
   36504 * Raw read/write Functions::
   36505 * Other Built-in Functions::
   36506 
   36507 
   36508 File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   36509 
   36510 6.56.6.1 Argument Types
   36511 .......................
   36512 
   36513 The arguments to the built-in functions can be divided into three
   36514 groups: register numbers, compile-time constants and run-time values.
   36515 In order to make this classification clear at a glance, the arguments
   36516 and return values are given the following pseudo types:
   36517 
   36518 Pseudo type    Real C type            Constant?   Description
   36519 `uh'           `unsigned short'       No          an unsigned halfword
   36520 `uw1'          `unsigned int'         No          an unsigned word
   36521 `sw1'          `int'                  No          a signed word
   36522 `uw2'          `unsigned long long'   No          an unsigned doubleword
   36523 `sw2'          `long long'            No          a signed doubleword
   36524 `const'        `int'                  Yes         an integer constant
   36525 `acc'          `int'                  Yes         an ACC register number
   36526 `iacc'         `int'                  Yes         an IACC register number
   36527 
   36528  These pseudo types are not defined by GCC, they are simply a notational
   36529 convenience used in this manual.
   36530 
   36531  Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
   36532 run time.  They correspond to register operands in the underlying FR-V
   36533 instructions.
   36534 
   36535  `const' arguments represent immediate operands in the underlying FR-V
   36536 instructions.  They must be compile-time constants.
   36537 
   36538  `acc' arguments are evaluated at compile time and specify the number
   36539 of an accumulator register.  For example, an `acc' argument of 2
   36540 selects the ACC2 register.
   36541 
   36542  `iacc' arguments are similar to `acc' arguments but specify the number
   36543 of an IACC register.  See *note Other Built-in Functions:: for more
   36544 details.
   36545 
   36546 
   36547 File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
   36548 
   36549 6.56.6.2 Directly-mapped Integer Functions
   36550 ..........................................
   36551 
   36552 The functions listed below map directly to FR-V I-type instructions.
   36553 
   36554 Function prototype               Example usage           Assembly output
   36555 `sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
   36556 `sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
   36557 `sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
   36558 `sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
   36559 `void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
   36560 `void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
   36561 `void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
   36562 `sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
   36563 `sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
   36564 `uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
   36565 
   36566 
   36567 File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   36568 
   36569 6.56.6.3 Directly-mapped Media Functions
   36570 ........................................
   36571 
   36572 The functions listed below map directly to FR-V M-type instructions.
   36573 
   36574 Function prototype               Example usage           Assembly output
   36575 `uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
   36576 `void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
   36577 `sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
   36578 `uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
   36579 `uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
   36580 `void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
   36581 `uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
   36582 `uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
   36583 `void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
   36584 `void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
   36585 `void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
   36586 `uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
   36587 `uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
   36588 `uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
   36589 `uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
   36590 `void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
   36591 `void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
   36592 `void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
   36593 `void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
   36594 `uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
   36595 `uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
   36596 `void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
   36597 `void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
   36598 `uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
   36599 `uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
   36600 `uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
   36601 `void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
   36602 `void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
   36603 `uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
   36604 `uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
   36605 `uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
   36606 `sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
   36607 `uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
   36608 `sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
   36609 `uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
   36610 `sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
   36611 `uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
   36612 `void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
   36613 `void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
   36614 `void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
   36615 `void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
   36616 `void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
   36617 `void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
   36618 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
   36619 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
   36620 `uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
   36621 `uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
   36622 `uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
   36623 `sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
   36624 `uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
   36625 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
   36626 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
   36627 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
   36628 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
   36629 `sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
   36630 `sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
   36631 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
   36632 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
   36633 `void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
   36634 sw2)'                                                    
   36635 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
   36636 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
   36637 `void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
   36638 sw2)'                                                    
   36639 `void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
   36640 uw2)'                                                    
   36641 `sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
   36642 `uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
   36643 `sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
   36644 `sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
   36645 `uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
   36646 `void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
   36647 sw2)'                                                    
   36648 `void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
   36649 sw2)'                                                    
   36650 `uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
   36651 `uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
   36652 `uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
   36653 `uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
   36654 `sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
   36655 `uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
   36656 `uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
   36657 `sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
   36658 `uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
   36659 `void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
   36660 `sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
   36661 `uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
   36662 `void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
   36663 `uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
   36664 `uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
   36665 `void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
   36666 `void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
   36667 `uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
   36668 
   36669 
   36670 File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
   36671 
   36672 6.56.6.4 Raw read/write Functions
   36673 .................................
   36674 
   36675 This sections describes built-in functions related to read and write
   36676 instructions to access memory.  These functions generate `membar'
   36677 instructions to flush the I/O load and stores where appropriate, as
   36678 described in Fujitsu's manual described above.
   36679 
   36680 `unsigned char __builtin_read8 (void *DATA)'
   36681 
   36682 `unsigned short __builtin_read16 (void *DATA)'
   36683 
   36684 `unsigned long __builtin_read32 (void *DATA)'
   36685 
   36686 `unsigned long long __builtin_read64 (void *DATA)'
   36687 
   36688 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
   36689 
   36690 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
   36691 
   36692 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
   36693 
   36694 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
   36695 
   36696 
   36697 File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
   36698 
   36699 6.56.6.5 Other Built-in Functions
   36700 .................................
   36701 
   36702 This section describes built-in functions that are not named after a
   36703 specific FR-V instruction.
   36704 
   36705 `sw2 __IACCreadll (iacc REG)'
   36706      Return the full 64-bit value of IACC0.  The REG argument is
   36707      reserved for future expansion and must be 0.
   36708 
   36709 `sw1 __IACCreadl (iacc REG)'
   36710      Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
   36711      Other values of REG are rejected as invalid.
   36712 
   36713 `void __IACCsetll (iacc REG, sw2 X)'
   36714      Set the full 64-bit value of IACC0 to X.  The REG argument is
   36715      reserved for future expansion and must be 0.
   36716 
   36717 `void __IACCsetl (iacc REG, sw1 X)'
   36718      Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
   36719      values of REG are rejected as invalid.
   36720 
   36721 `void __data_prefetch0 (const void *X)'
   36722      Use the `dcpl' instruction to load the contents of address X into
   36723      the data cache.
   36724 
   36725 `void __data_prefetch (const void *X)'
   36726      Use the `nldub' instruction to load the contents of address X into
   36727      the data cache.  The instruction is issued in slot I1.
   36728 
   36729 
   36730 File: gcc.info,  Node: X86 Built-in Functions,  Next: X86 transactional memory intrinsics,  Prev: FR-V Built-in Functions,  Up: Target Builtins
   36731 
   36732 6.56.7 X86 Built-in Functions
   36733 -----------------------------
   36734 
   36735 These built-in functions are available for the i386 and x86-64 family
   36736 of computers, depending on the command-line switches used.
   36737 
   36738  If you specify command-line switches such as `-msse', the compiler
   36739 could use the extended instruction sets even if the built-ins are not
   36740 used explicitly in the program.  For this reason, applications that
   36741 perform run-time CPU detection must compile separate files for each
   36742 supported architecture, using the appropriate flags.  In particular,
   36743 the file containing the CPU detection code should be compiled without
   36744 these options.
   36745 
   36746  The following machine modes are available for use with MMX built-in
   36747 functions (*note Vector Extensions::): `V2SI' for a vector of two
   36748 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
   36749 `V8QI' for a vector of eight 8-bit integers.  Some of the built-in
   36750 functions operate on MMX registers as a whole 64-bit entity, these use
   36751 `V1DI' as their mode.
   36752 
   36753  If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
   36754 of two 32-bit floating-point values.
   36755 
   36756  If SSE extensions are enabled, `V4SF' is used for a vector of four
   36757 32-bit floating-point values.  Some instructions use a vector of four
   36758 32-bit integers, these use `V4SI'.  Finally, some instructions operate
   36759 on an entire vector register, interpreting it as a 128-bit integer,
   36760 these use mode `TI'.
   36761 
   36762  In 64-bit mode, the x86-64 family of processors uses additional
   36763 built-in functions for efficient use of `TF' (`__float128') 128-bit
   36764 floating point and `TC' 128-bit complex floating-point values.
   36765 
   36766  The following floating-point built-in functions are available in 64-bit
   36767 mode.  All of them implement the function that is part of the name.
   36768 
   36769      __float128 __builtin_fabsq (__float128)
   36770      __float128 __builtin_copysignq (__float128, __float128)
   36771 
   36772  The following built-in function is always available.
   36773 
   36774 `void __builtin_ia32_pause (void)'
   36775      Generates the `pause' machine instruction with a compiler memory
   36776      barrier.
   36777 
   36778  The following floating-point built-in functions are made available in
   36779 the 64-bit mode.
   36780 
   36781 `__float128 __builtin_infq (void)'
   36782      Similar to `__builtin_inf', except the return type is `__float128'.  
   36783 
   36784 `__float128 __builtin_huge_valq (void)'
   36785      Similar to `__builtin_huge_val', except the return type is
   36786      `__float128'.  
   36787 
   36788  The following built-in functions are always available and can be used
   36789 to check the target platform type.
   36790 
   36791  -- Built-in Function: void __builtin_cpu_init (void)
   36792      This function runs the CPU detection code to check the type of CPU
   36793      and the features supported.  This built-in function needs to be
   36794      invoked along with the built-in functions to check CPU type and
   36795      features, `__builtin_cpu_is' and `__builtin_cpu_supports', only
   36796      when used in a function that is executed before any constructors
   36797      are called.  The CPU detection code is automatically executed in a
   36798      very high priority constructor.
   36799 
   36800      For example, this function has to be used in `ifunc' resolvers that
   36801      check for CPU type using the built-in functions `__builtin_cpu_is'
   36802      and `__builtin_cpu_supports', or in constructors on targets that
   36803      don't support constructor priority.
   36804 
   36805           static void (*resolve_memcpy (void)) (void)
   36806           {
   36807             // ifunc resolvers fire before constructors, explicitly call the init
   36808             // function.
   36809             __builtin_cpu_init ();
   36810             if (__builtin_cpu_supports ("ssse3"))
   36811               return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
   36812             else
   36813               return default_memcpy;
   36814           }
   36815 
   36816           void *memcpy (void *, const void *, size_t)
   36817                __attribute__ ((ifunc ("resolve_memcpy")));
   36818 
   36819 
   36820  -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
   36821      This function returns a positive integer if the run-time CPU is of
   36822      type CPUNAME and returns `0' otherwise. The following CPU names
   36823      can be detected:
   36824 
   36825     `intel'
   36826           Intel CPU.
   36827 
   36828     `atom'
   36829           Intel Atom CPU.
   36830 
   36831     `core2'
   36832           Intel Core 2 CPU.
   36833 
   36834     `corei7'
   36835           Intel Core i7 CPU.
   36836 
   36837     `nehalem'
   36838           Intel Core i7 Nehalem CPU.
   36839 
   36840     `westmere'
   36841           Intel Core i7 Westmere CPU.
   36842 
   36843     `sandybridge'
   36844           Intel Core i7 Sandy Bridge CPU.
   36845 
   36846     `amd'
   36847           AMD CPU.
   36848 
   36849     `amdfam10h'
   36850           AMD Family 10h CPU.
   36851 
   36852     `barcelona'
   36853           AMD Family 10h Barcelona CPU.
   36854 
   36855     `shanghai'
   36856           AMD Family 10h Shanghai CPU.
   36857 
   36858     `istanbul'
   36859           AMD Family 10h Istanbul CPU.
   36860 
   36861     `btver1'
   36862           AMD Family 14h CPU.
   36863 
   36864     `amdfam15h'
   36865           AMD Family 15h CPU.
   36866 
   36867     `bdver1'
   36868           AMD Family 15h Bulldozer version 1.
   36869 
   36870     `bdver2'
   36871           AMD Family 15h Bulldozer version 2.
   36872 
   36873     `bdver3'
   36874           AMD Family 15h Bulldozer version 3.
   36875 
   36876     `btver2'
   36877           AMD Family 16h CPU.
   36878 
   36879      Here is an example:
   36880           if (__builtin_cpu_is ("corei7"))
   36881             {
   36882                do_corei7 (); // Core i7 specific implementation.
   36883             }
   36884           else
   36885             {
   36886                do_generic (); // Generic implementation.
   36887             }
   36888 
   36889  -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
   36890      This function returns a positive integer if the run-time CPU
   36891      supports FEATURE and returns `0' otherwise. The following features
   36892      can be detected:
   36893 
   36894     `cmov'
   36895           CMOV instruction.
   36896 
   36897     `mmx'
   36898           MMX instructions.
   36899 
   36900     `popcnt'
   36901           POPCNT instruction.
   36902 
   36903     `sse'
   36904           SSE instructions.
   36905 
   36906     `sse2'
   36907           SSE2 instructions.
   36908 
   36909     `sse3'
   36910           SSE3 instructions.
   36911 
   36912     `ssse3'
   36913           SSSE3 instructions.
   36914 
   36915     `sse4.1'
   36916           SSE4.1 instructions.
   36917 
   36918     `sse4.2'
   36919           SSE4.2 instructions.
   36920 
   36921     `avx'
   36922           AVX instructions.
   36923 
   36924     `avx2'
   36925           AVX2 instructions.
   36926 
   36927      Here is an example:
   36928           if (__builtin_cpu_supports ("popcnt"))
   36929             {
   36930                asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
   36931             }
   36932           else
   36933             {
   36934                count = generic_countbits (n); //generic implementation.
   36935             }
   36936 
   36937  The following built-in functions are made available by `-mmmx'.  All
   36938 of them generate the machine instruction that is part of the name.
   36939 
   36940      v8qi __builtin_ia32_paddb (v8qi, v8qi)
   36941      v4hi __builtin_ia32_paddw (v4hi, v4hi)
   36942      v2si __builtin_ia32_paddd (v2si, v2si)
   36943      v8qi __builtin_ia32_psubb (v8qi, v8qi)
   36944      v4hi __builtin_ia32_psubw (v4hi, v4hi)
   36945      v2si __builtin_ia32_psubd (v2si, v2si)
   36946      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
   36947      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
   36948      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
   36949      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
   36950      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
   36951      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
   36952      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
   36953      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
   36954      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
   36955      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
   36956      di __builtin_ia32_pand (di, di)
   36957      di __builtin_ia32_pandn (di,di)
   36958      di __builtin_ia32_por (di, di)
   36959      di __builtin_ia32_pxor (di, di)
   36960      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
   36961      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
   36962      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
   36963      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
   36964      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
   36965      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
   36966      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
   36967      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
   36968      v2si __builtin_ia32_punpckhdq (v2si, v2si)
   36969      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
   36970      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
   36971      v2si __builtin_ia32_punpckldq (v2si, v2si)
   36972      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
   36973      v4hi __builtin_ia32_packssdw (v2si, v2si)
   36974      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
   36975 
   36976      v4hi __builtin_ia32_psllw (v4hi, v4hi)
   36977      v2si __builtin_ia32_pslld (v2si, v2si)
   36978      v1di __builtin_ia32_psllq (v1di, v1di)
   36979      v4hi __builtin_ia32_psrlw (v4hi, v4hi)
   36980      v2si __builtin_ia32_psrld (v2si, v2si)
   36981      v1di __builtin_ia32_psrlq (v1di, v1di)
   36982      v4hi __builtin_ia32_psraw (v4hi, v4hi)
   36983      v2si __builtin_ia32_psrad (v2si, v2si)
   36984      v4hi __builtin_ia32_psllwi (v4hi, int)
   36985      v2si __builtin_ia32_pslldi (v2si, int)
   36986      v1di __builtin_ia32_psllqi (v1di, int)
   36987      v4hi __builtin_ia32_psrlwi (v4hi, int)
   36988      v2si __builtin_ia32_psrldi (v2si, int)
   36989      v1di __builtin_ia32_psrlqi (v1di, int)
   36990      v4hi __builtin_ia32_psrawi (v4hi, int)
   36991      v2si __builtin_ia32_psradi (v2si, int)
   36992 
   36993  The following built-in functions are made available either with
   36994 `-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
   36995 of them generate the machine instruction that is part of the name.
   36996 
   36997      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
   36998      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
   36999      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
   37000      v1di __builtin_ia32_psadbw (v8qi, v8qi)
   37001      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
   37002      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
   37003      v8qi __builtin_ia32_pminub (v8qi, v8qi)
   37004      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
   37005      int __builtin_ia32_pextrw (v4hi, int)
   37006      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
   37007      int __builtin_ia32_pmovmskb (v8qi)
   37008      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
   37009      void __builtin_ia32_movntq (di *, di)
   37010      void __builtin_ia32_sfence (void)
   37011 
   37012  The following built-in functions are available when `-msse' is used.
   37013 All of them generate the machine instruction that is part of the name.
   37014 
   37015      int __builtin_ia32_comieq (v4sf, v4sf)
   37016      int __builtin_ia32_comineq (v4sf, v4sf)
   37017      int __builtin_ia32_comilt (v4sf, v4sf)
   37018      int __builtin_ia32_comile (v4sf, v4sf)
   37019      int __builtin_ia32_comigt (v4sf, v4sf)
   37020      int __builtin_ia32_comige (v4sf, v4sf)
   37021      int __builtin_ia32_ucomieq (v4sf, v4sf)
   37022      int __builtin_ia32_ucomineq (v4sf, v4sf)
   37023      int __builtin_ia32_ucomilt (v4sf, v4sf)
   37024      int __builtin_ia32_ucomile (v4sf, v4sf)
   37025      int __builtin_ia32_ucomigt (v4sf, v4sf)
   37026      int __builtin_ia32_ucomige (v4sf, v4sf)
   37027      v4sf __builtin_ia32_addps (v4sf, v4sf)
   37028      v4sf __builtin_ia32_subps (v4sf, v4sf)
   37029      v4sf __builtin_ia32_mulps (v4sf, v4sf)
   37030      v4sf __builtin_ia32_divps (v4sf, v4sf)
   37031      v4sf __builtin_ia32_addss (v4sf, v4sf)
   37032      v4sf __builtin_ia32_subss (v4sf, v4sf)
   37033      v4sf __builtin_ia32_mulss (v4sf, v4sf)
   37034      v4sf __builtin_ia32_divss (v4sf, v4sf)
   37035      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
   37036      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
   37037      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
   37038      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
   37039      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
   37040      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
   37041      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
   37042      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
   37043      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
   37044      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
   37045      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
   37046      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
   37047      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
   37048      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
   37049      v4si __builtin_ia32_cmpless (v4sf, v4sf)
   37050      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
   37051      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
   37052      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
   37053      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
   37054      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
   37055      v4sf __builtin_ia32_maxps (v4sf, v4sf)
   37056      v4sf __builtin_ia32_maxss (v4sf, v4sf)
   37057      v4sf __builtin_ia32_minps (v4sf, v4sf)
   37058      v4sf __builtin_ia32_minss (v4sf, v4sf)
   37059      v4sf __builtin_ia32_andps (v4sf, v4sf)
   37060      v4sf __builtin_ia32_andnps (v4sf, v4sf)
   37061      v4sf __builtin_ia32_orps (v4sf, v4sf)
   37062      v4sf __builtin_ia32_xorps (v4sf, v4sf)
   37063      v4sf __builtin_ia32_movss (v4sf, v4sf)
   37064      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
   37065      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
   37066      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
   37067      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
   37068      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
   37069      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
   37070      v2si __builtin_ia32_cvtps2pi (v4sf)
   37071      int __builtin_ia32_cvtss2si (v4sf)
   37072      v2si __builtin_ia32_cvttps2pi (v4sf)
   37073      int __builtin_ia32_cvttss2si (v4sf)
   37074      v4sf __builtin_ia32_rcpps (v4sf)
   37075      v4sf __builtin_ia32_rsqrtps (v4sf)
   37076      v4sf __builtin_ia32_sqrtps (v4sf)
   37077      v4sf __builtin_ia32_rcpss (v4sf)
   37078      v4sf __builtin_ia32_rsqrtss (v4sf)
   37079      v4sf __builtin_ia32_sqrtss (v4sf)
   37080      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
   37081      void __builtin_ia32_movntps (float *, v4sf)
   37082      int __builtin_ia32_movmskps (v4sf)
   37083 
   37084  The following built-in functions are available when `-msse' is used.
   37085 
   37086 `v4sf __builtin_ia32_loadaps (float *)'
   37087      Generates the `movaps' machine instruction as a load from memory.
   37088 
   37089 `void __builtin_ia32_storeaps (float *, v4sf)'
   37090      Generates the `movaps' machine instruction as a store to memory.
   37091 
   37092 `v4sf __builtin_ia32_loadups (float *)'
   37093      Generates the `movups' machine instruction as a load from memory.
   37094 
   37095 `void __builtin_ia32_storeups (float *, v4sf)'
   37096      Generates the `movups' machine instruction as a store to memory.
   37097 
   37098 `v4sf __builtin_ia32_loadsss (float *)'
   37099      Generates the `movss' machine instruction as a load from memory.
   37100 
   37101 `void __builtin_ia32_storess (float *, v4sf)'
   37102      Generates the `movss' machine instruction as a store to memory.
   37103 
   37104 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
   37105      Generates the `movhps' machine instruction as a load from memory.
   37106 
   37107 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
   37108      Generates the `movlps' machine instruction as a load from memory
   37109 
   37110 `void __builtin_ia32_storehps (v2sf *, v4sf)'
   37111      Generates the `movhps' machine instruction as a store to memory.
   37112 
   37113 `void __builtin_ia32_storelps (v2sf *, v4sf)'
   37114      Generates the `movlps' machine instruction as a store to memory.
   37115 
   37116  The following built-in functions are available when `-msse2' is used.
   37117 All of them generate the machine instruction that is part of the name.
   37118 
   37119      int __builtin_ia32_comisdeq (v2df, v2df)
   37120      int __builtin_ia32_comisdlt (v2df, v2df)
   37121      int __builtin_ia32_comisdle (v2df, v2df)
   37122      int __builtin_ia32_comisdgt (v2df, v2df)
   37123      int __builtin_ia32_comisdge (v2df, v2df)
   37124      int __builtin_ia32_comisdneq (v2df, v2df)
   37125      int __builtin_ia32_ucomisdeq (v2df, v2df)
   37126      int __builtin_ia32_ucomisdlt (v2df, v2df)
   37127      int __builtin_ia32_ucomisdle (v2df, v2df)
   37128      int __builtin_ia32_ucomisdgt (v2df, v2df)
   37129      int __builtin_ia32_ucomisdge (v2df, v2df)
   37130      int __builtin_ia32_ucomisdneq (v2df, v2df)
   37131      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
   37132      v2df __builtin_ia32_cmpltpd (v2df, v2df)
   37133      v2df __builtin_ia32_cmplepd (v2df, v2df)
   37134      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
   37135      v2df __builtin_ia32_cmpgepd (v2df, v2df)
   37136      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
   37137      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
   37138      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
   37139      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
   37140      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
   37141      v2df __builtin_ia32_cmpngepd (v2df, v2df)
   37142      v2df __builtin_ia32_cmpordpd (v2df, v2df)
   37143      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
   37144      v2df __builtin_ia32_cmpltsd (v2df, v2df)
   37145      v2df __builtin_ia32_cmplesd (v2df, v2df)
   37146      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
   37147      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
   37148      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
   37149      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
   37150      v2df __builtin_ia32_cmpordsd (v2df, v2df)
   37151      v2di __builtin_ia32_paddq (v2di, v2di)
   37152      v2di __builtin_ia32_psubq (v2di, v2di)
   37153      v2df __builtin_ia32_addpd (v2df, v2df)
   37154      v2df __builtin_ia32_subpd (v2df, v2df)
   37155      v2df __builtin_ia32_mulpd (v2df, v2df)
   37156      v2df __builtin_ia32_divpd (v2df, v2df)
   37157      v2df __builtin_ia32_addsd (v2df, v2df)
   37158      v2df __builtin_ia32_subsd (v2df, v2df)
   37159      v2df __builtin_ia32_mulsd (v2df, v2df)
   37160      v2df __builtin_ia32_divsd (v2df, v2df)
   37161      v2df __builtin_ia32_minpd (v2df, v2df)
   37162      v2df __builtin_ia32_maxpd (v2df, v2df)
   37163      v2df __builtin_ia32_minsd (v2df, v2df)
   37164      v2df __builtin_ia32_maxsd (v2df, v2df)
   37165      v2df __builtin_ia32_andpd (v2df, v2df)
   37166      v2df __builtin_ia32_andnpd (v2df, v2df)
   37167      v2df __builtin_ia32_orpd (v2df, v2df)
   37168      v2df __builtin_ia32_xorpd (v2df, v2df)
   37169      v2df __builtin_ia32_movsd (v2df, v2df)
   37170      v2df __builtin_ia32_unpckhpd (v2df, v2df)
   37171      v2df __builtin_ia32_unpcklpd (v2df, v2df)
   37172      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
   37173      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
   37174      v4si __builtin_ia32_paddd128 (v4si, v4si)
   37175      v2di __builtin_ia32_paddq128 (v2di, v2di)
   37176      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
   37177      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
   37178      v4si __builtin_ia32_psubd128 (v4si, v4si)
   37179      v2di __builtin_ia32_psubq128 (v2di, v2di)
   37180      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
   37181      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
   37182      v2di __builtin_ia32_pand128 (v2di, v2di)
   37183      v2di __builtin_ia32_pandn128 (v2di, v2di)
   37184      v2di __builtin_ia32_por128 (v2di, v2di)
   37185      v2di __builtin_ia32_pxor128 (v2di, v2di)
   37186      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
   37187      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
   37188      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
   37189      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
   37190      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
   37191      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
   37192      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
   37193      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
   37194      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
   37195      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
   37196      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
   37197      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
   37198      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
   37199      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
   37200      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
   37201      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
   37202      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
   37203      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
   37204      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
   37205      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
   37206      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
   37207      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
   37208      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
   37209      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
   37210      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
   37211      v2df __builtin_ia32_loadupd (double *)
   37212      void __builtin_ia32_storeupd (double *, v2df)
   37213      v2df __builtin_ia32_loadhpd (v2df, double const *)
   37214      v2df __builtin_ia32_loadlpd (v2df, double const *)
   37215      int __builtin_ia32_movmskpd (v2df)
   37216      int __builtin_ia32_pmovmskb128 (v16qi)
   37217      void __builtin_ia32_movnti (int *, int)
   37218      void __builtin_ia32_movnti64 (long long int *, long long int)
   37219      void __builtin_ia32_movntpd (double *, v2df)
   37220      void __builtin_ia32_movntdq (v2df *, v2df)
   37221      v4si __builtin_ia32_pshufd (v4si, int)
   37222      v8hi __builtin_ia32_pshuflw (v8hi, int)
   37223      v8hi __builtin_ia32_pshufhw (v8hi, int)
   37224      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
   37225      v2df __builtin_ia32_sqrtpd (v2df)
   37226      v2df __builtin_ia32_sqrtsd (v2df)
   37227      v2df __builtin_ia32_shufpd (v2df, v2df, int)
   37228      v2df __builtin_ia32_cvtdq2pd (v4si)
   37229      v4sf __builtin_ia32_cvtdq2ps (v4si)
   37230      v4si __builtin_ia32_cvtpd2dq (v2df)
   37231      v2si __builtin_ia32_cvtpd2pi (v2df)
   37232      v4sf __builtin_ia32_cvtpd2ps (v2df)
   37233      v4si __builtin_ia32_cvttpd2dq (v2df)
   37234      v2si __builtin_ia32_cvttpd2pi (v2df)
   37235      v2df __builtin_ia32_cvtpi2pd (v2si)
   37236      int __builtin_ia32_cvtsd2si (v2df)
   37237      int __builtin_ia32_cvttsd2si (v2df)
   37238      long long __builtin_ia32_cvtsd2si64 (v2df)
   37239      long long __builtin_ia32_cvttsd2si64 (v2df)
   37240      v4si __builtin_ia32_cvtps2dq (v4sf)
   37241      v2df __builtin_ia32_cvtps2pd (v4sf)
   37242      v4si __builtin_ia32_cvttps2dq (v4sf)
   37243      v2df __builtin_ia32_cvtsi2sd (v2df, int)
   37244      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
   37245      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
   37246      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
   37247      void __builtin_ia32_clflush (const void *)
   37248      void __builtin_ia32_lfence (void)
   37249      void __builtin_ia32_mfence (void)
   37250      v16qi __builtin_ia32_loaddqu (const char *)
   37251      void __builtin_ia32_storedqu (char *, v16qi)
   37252      v1di __builtin_ia32_pmuludq (v2si, v2si)
   37253      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
   37254      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
   37255      v4si __builtin_ia32_pslld128 (v4si, v4si)
   37256      v2di __builtin_ia32_psllq128 (v2di, v2di)
   37257      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
   37258      v4si __builtin_ia32_psrld128 (v4si, v4si)
   37259      v2di __builtin_ia32_psrlq128 (v2di, v2di)
   37260      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
   37261      v4si __builtin_ia32_psrad128 (v4si, v4si)
   37262      v2di __builtin_ia32_pslldqi128 (v2di, int)
   37263      v8hi __builtin_ia32_psllwi128 (v8hi, int)
   37264      v4si __builtin_ia32_pslldi128 (v4si, int)
   37265      v2di __builtin_ia32_psllqi128 (v2di, int)
   37266      v2di __builtin_ia32_psrldqi128 (v2di, int)
   37267      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
   37268      v4si __builtin_ia32_psrldi128 (v4si, int)
   37269      v2di __builtin_ia32_psrlqi128 (v2di, int)
   37270      v8hi __builtin_ia32_psrawi128 (v8hi, int)
   37271      v4si __builtin_ia32_psradi128 (v4si, int)
   37272      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
   37273      v2di __builtin_ia32_movq128 (v2di)
   37274 
   37275  The following built-in functions are available when `-msse3' is used.
   37276 All of them generate the machine instruction that is part of the name.
   37277 
   37278      v2df __builtin_ia32_addsubpd (v2df, v2df)
   37279      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
   37280      v2df __builtin_ia32_haddpd (v2df, v2df)
   37281      v4sf __builtin_ia32_haddps (v4sf, v4sf)
   37282      v2df __builtin_ia32_hsubpd (v2df, v2df)
   37283      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
   37284      v16qi __builtin_ia32_lddqu (char const *)
   37285      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
   37286      v2df __builtin_ia32_movddup (v2df)
   37287      v4sf __builtin_ia32_movshdup (v4sf)
   37288      v4sf __builtin_ia32_movsldup (v4sf)
   37289      void __builtin_ia32_mwait (unsigned int, unsigned int)
   37290 
   37291  The following built-in functions are available when `-msse3' is used.
   37292 
   37293 `v2df __builtin_ia32_loadddup (double const *)'
   37294      Generates the `movddup' machine instruction as a load from memory.
   37295 
   37296  The following built-in functions are available when `-mssse3' is used.
   37297 All of them generate the machine instruction that is part of the name
   37298 with MMX registers.
   37299 
   37300      v2si __builtin_ia32_phaddd (v2si, v2si)
   37301      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
   37302      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
   37303      v2si __builtin_ia32_phsubd (v2si, v2si)
   37304      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
   37305      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
   37306      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
   37307      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
   37308      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
   37309      v8qi __builtin_ia32_psignb (v8qi, v8qi)
   37310      v2si __builtin_ia32_psignd (v2si, v2si)
   37311      v4hi __builtin_ia32_psignw (v4hi, v4hi)
   37312      v1di __builtin_ia32_palignr (v1di, v1di, int)
   37313      v8qi __builtin_ia32_pabsb (v8qi)
   37314      v2si __builtin_ia32_pabsd (v2si)
   37315      v4hi __builtin_ia32_pabsw (v4hi)
   37316 
   37317  The following built-in functions are available when `-mssse3' is used.
   37318 All of them generate the machine instruction that is part of the name
   37319 with SSE registers.
   37320 
   37321      v4si __builtin_ia32_phaddd128 (v4si, v4si)
   37322      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
   37323      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
   37324      v4si __builtin_ia32_phsubd128 (v4si, v4si)
   37325      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
   37326      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
   37327      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
   37328      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
   37329      v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
   37330      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
   37331      v4si __builtin_ia32_psignd128 (v4si, v4si)
   37332      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
   37333      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
   37334      v16qi __builtin_ia32_pabsb128 (v16qi)
   37335      v4si __builtin_ia32_pabsd128 (v4si)
   37336      v8hi __builtin_ia32_pabsw128 (v8hi)
   37337 
   37338  The following built-in functions are available when `-msse4.1' is
   37339 used.  All of them generate the machine instruction that is part of the
   37340 name.
   37341 
   37342      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
   37343      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
   37344      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
   37345      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
   37346      v2df __builtin_ia32_dppd (v2df, v2df, const int)
   37347      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
   37348      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
   37349      v2di __builtin_ia32_movntdqa (v2di *);
   37350      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
   37351      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
   37352      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
   37353      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
   37354      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
   37355      v8hi __builtin_ia32_phminposuw128 (v8hi)
   37356      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
   37357      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
   37358      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
   37359      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
   37360      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
   37361      v4si __builtin_ia32_pminsd128 (v4si, v4si)
   37362      v4si __builtin_ia32_pminud128 (v4si, v4si)
   37363      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
   37364      v4si __builtin_ia32_pmovsxbd128 (v16qi)
   37365      v2di __builtin_ia32_pmovsxbq128 (v16qi)
   37366      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
   37367      v2di __builtin_ia32_pmovsxdq128 (v4si)
   37368      v4si __builtin_ia32_pmovsxwd128 (v8hi)
   37369      v2di __builtin_ia32_pmovsxwq128 (v8hi)
   37370      v4si __builtin_ia32_pmovzxbd128 (v16qi)
   37371      v2di __builtin_ia32_pmovzxbq128 (v16qi)
   37372      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
   37373      v2di __builtin_ia32_pmovzxdq128 (v4si)
   37374      v4si __builtin_ia32_pmovzxwd128 (v8hi)
   37375      v2di __builtin_ia32_pmovzxwq128 (v8hi)
   37376      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
   37377      v4si __builtin_ia32_pmulld128 (v4si, v4si)
   37378      int __builtin_ia32_ptestc128 (v2di, v2di)
   37379      int __builtin_ia32_ptestnzc128 (v2di, v2di)
   37380      int __builtin_ia32_ptestz128 (v2di, v2di)
   37381      v2df __builtin_ia32_roundpd (v2df, const int)
   37382      v4sf __builtin_ia32_roundps (v4sf, const int)
   37383      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
   37384      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
   37385 
   37386  The following built-in functions are available when `-msse4.1' is used.
   37387 
   37388 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
   37389      Generates the `insertps' machine instruction.
   37390 
   37391 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
   37392      Generates the `pextrb' machine instruction.
   37393 
   37394 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
   37395      Generates the `pinsrb' machine instruction.
   37396 
   37397 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
   37398      Generates the `pinsrd' machine instruction.
   37399 
   37400 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
   37401      Generates the `pinsrq' machine instruction in 64bit mode.
   37402 
   37403  The following built-in functions are changed to generate new SSE4.1
   37404 instructions when `-msse4.1' is used.
   37405 
   37406 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
   37407      Generates the `extractps' machine instruction.
   37408 
   37409 `int __builtin_ia32_vec_ext_v4si (v4si, const int)'
   37410      Generates the `pextrd' machine instruction.
   37411 
   37412 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
   37413      Generates the `pextrq' machine instruction in 64bit mode.
   37414 
   37415  The following built-in functions are available when `-msse4.2' is
   37416 used.  All of them generate the machine instruction that is part of the
   37417 name.
   37418 
   37419      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
   37420      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
   37421      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
   37422      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
   37423      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
   37424      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
   37425      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
   37426      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
   37427      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
   37428      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
   37429      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
   37430      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
   37431      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
   37432      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
   37433      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
   37434 
   37435  The following built-in functions are available when `-msse4.2' is used.
   37436 
   37437 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
   37438      Generates the `crc32b' machine instruction.
   37439 
   37440 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
   37441      Generates the `crc32w' machine instruction.
   37442 
   37443 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
   37444      Generates the `crc32l' machine instruction.
   37445 
   37446 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
   37447      Generates the `crc32q' machine instruction.
   37448 
   37449  The following built-in functions are changed to generate new SSE4.2
   37450 instructions when `-msse4.2' is used.
   37451 
   37452 `int __builtin_popcount (unsigned int)'
   37453      Generates the `popcntl' machine instruction.
   37454 
   37455 `int __builtin_popcountl (unsigned long)'
   37456      Generates the `popcntl' or `popcntq' machine instruction,
   37457      depending on the size of `unsigned long'.
   37458 
   37459 `int __builtin_popcountll (unsigned long long)'
   37460      Generates the `popcntq' machine instruction.
   37461 
   37462  The following built-in functions are available when `-mavx' is used.
   37463 All of them generate the machine instruction that is part of the name.
   37464 
   37465      v4df __builtin_ia32_addpd256 (v4df,v4df)
   37466      v8sf __builtin_ia32_addps256 (v8sf,v8sf)
   37467      v4df __builtin_ia32_addsubpd256 (v4df,v4df)
   37468      v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
   37469      v4df __builtin_ia32_andnpd256 (v4df,v4df)
   37470      v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
   37471      v4df __builtin_ia32_andpd256 (v4df,v4df)
   37472      v8sf __builtin_ia32_andps256 (v8sf,v8sf)
   37473      v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
   37474      v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
   37475      v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
   37476      v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
   37477      v2df __builtin_ia32_cmppd (v2df,v2df,int)
   37478      v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
   37479      v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
   37480      v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
   37481      v2df __builtin_ia32_cmpsd (v2df,v2df,int)
   37482      v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
   37483      v4df __builtin_ia32_cvtdq2pd256 (v4si)
   37484      v8sf __builtin_ia32_cvtdq2ps256 (v8si)
   37485      v4si __builtin_ia32_cvtpd2dq256 (v4df)
   37486      v4sf __builtin_ia32_cvtpd2ps256 (v4df)
   37487      v8si __builtin_ia32_cvtps2dq256 (v8sf)
   37488      v4df __builtin_ia32_cvtps2pd256 (v4sf)
   37489      v4si __builtin_ia32_cvttpd2dq256 (v4df)
   37490      v8si __builtin_ia32_cvttps2dq256 (v8sf)
   37491      v4df __builtin_ia32_divpd256 (v4df,v4df)
   37492      v8sf __builtin_ia32_divps256 (v8sf,v8sf)
   37493      v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
   37494      v4df __builtin_ia32_haddpd256 (v4df,v4df)
   37495      v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
   37496      v4df __builtin_ia32_hsubpd256 (v4df,v4df)
   37497      v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
   37498      v32qi __builtin_ia32_lddqu256 (pcchar)
   37499      v32qi __builtin_ia32_loaddqu256 (pcchar)
   37500      v4df __builtin_ia32_loadupd256 (pcdouble)
   37501      v8sf __builtin_ia32_loadups256 (pcfloat)
   37502      v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
   37503      v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
   37504      v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
   37505      v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
   37506      void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
   37507      void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
   37508      void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
   37509      void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
   37510      v4df __builtin_ia32_maxpd256 (v4df,v4df)
   37511      v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
   37512      v4df __builtin_ia32_minpd256 (v4df,v4df)
   37513      v8sf __builtin_ia32_minps256 (v8sf,v8sf)
   37514      v4df __builtin_ia32_movddup256 (v4df)
   37515      int __builtin_ia32_movmskpd256 (v4df)
   37516      int __builtin_ia32_movmskps256 (v8sf)
   37517      v8sf __builtin_ia32_movshdup256 (v8sf)
   37518      v8sf __builtin_ia32_movsldup256 (v8sf)
   37519      v4df __builtin_ia32_mulpd256 (v4df,v4df)
   37520      v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
   37521      v4df __builtin_ia32_orpd256 (v4df,v4df)
   37522      v8sf __builtin_ia32_orps256 (v8sf,v8sf)
   37523      v2df __builtin_ia32_pd_pd256 (v4df)
   37524      v4df __builtin_ia32_pd256_pd (v2df)
   37525      v4sf __builtin_ia32_ps_ps256 (v8sf)
   37526      v8sf __builtin_ia32_ps256_ps (v4sf)
   37527      int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
   37528      int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
   37529      int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
   37530      v8sf __builtin_ia32_rcpps256 (v8sf)
   37531      v4df __builtin_ia32_roundpd256 (v4df,int)
   37532      v8sf __builtin_ia32_roundps256 (v8sf,int)
   37533      v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
   37534      v8sf __builtin_ia32_rsqrtps256 (v8sf)
   37535      v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
   37536      v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
   37537      v4si __builtin_ia32_si_si256 (v8si)
   37538      v8si __builtin_ia32_si256_si (v4si)
   37539      v4df __builtin_ia32_sqrtpd256 (v4df)
   37540      v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
   37541      v8sf __builtin_ia32_sqrtps256 (v8sf)
   37542      void __builtin_ia32_storedqu256 (pchar,v32qi)
   37543      void __builtin_ia32_storeupd256 (pdouble,v4df)
   37544      void __builtin_ia32_storeups256 (pfloat,v8sf)
   37545      v4df __builtin_ia32_subpd256 (v4df,v4df)
   37546      v8sf __builtin_ia32_subps256 (v8sf,v8sf)
   37547      v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
   37548      v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
   37549      v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
   37550      v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
   37551      v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
   37552      v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
   37553      v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
   37554      v4sf __builtin_ia32_vbroadcastss (pcfloat)
   37555      v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
   37556      v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
   37557      v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
   37558      v4si __builtin_ia32_vextractf128_si256 (v8si,int)
   37559      v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
   37560      v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
   37561      v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
   37562      v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
   37563      v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
   37564      v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
   37565      v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
   37566      v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
   37567      v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
   37568      v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
   37569      v2df __builtin_ia32_vpermilpd (v2df,int)
   37570      v4df __builtin_ia32_vpermilpd256 (v4df,int)
   37571      v4sf __builtin_ia32_vpermilps (v4sf,int)
   37572      v8sf __builtin_ia32_vpermilps256 (v8sf,int)
   37573      v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
   37574      v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
   37575      v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
   37576      v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
   37577      int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
   37578      int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
   37579      int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
   37580      int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
   37581      int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
   37582      int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
   37583      int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
   37584      int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
   37585      int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
   37586      int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
   37587      int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
   37588      int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
   37589      void __builtin_ia32_vzeroall (void)
   37590      void __builtin_ia32_vzeroupper (void)
   37591      v4df __builtin_ia32_xorpd256 (v4df,v4df)
   37592      v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
   37593 
   37594  The following built-in functions are available when `-mavx2' is used.
   37595 All of them generate the machine instruction that is part of the name.
   37596 
   37597      v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
   37598      v32qi __builtin_ia32_pabsb256 (v32qi)
   37599      v16hi __builtin_ia32_pabsw256 (v16hi)
   37600      v8si __builtin_ia32_pabsd256 (v8si)
   37601      v16hi __builtin_ia32_packssdw256 (v8si,v8si)
   37602      v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
   37603      v16hi __builtin_ia32_packusdw256 (v8si,v8si)
   37604      v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
   37605      v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
   37606      v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
   37607      v8si __builtin_ia32_paddd256 (v8si,v8si)
   37608      v4di __builtin_ia32_paddq256 (v4di,v4di)
   37609      v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
   37610      v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
   37611      v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
   37612      v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
   37613      v4di __builtin_ia32_palignr256 (v4di,v4di,int)
   37614      v4di __builtin_ia32_andsi256 (v4di,v4di)
   37615      v4di __builtin_ia32_andnotsi256 (v4di,v4di)
   37616      v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
   37617      v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
   37618      v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
   37619      v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
   37620      v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
   37621      v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
   37622      v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
   37623      v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
   37624      v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
   37625      v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
   37626      v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
   37627      v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
   37628      v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
   37629      v8si __builtin_ia32_phaddd256 (v8si,v8si)
   37630      v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
   37631      v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
   37632      v8si __builtin_ia32_phsubd256 (v8si,v8si)
   37633      v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
   37634      v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
   37635      v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
   37636      v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
   37637      v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
   37638      v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
   37639      v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
   37640      v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
   37641      v8si __builtin_ia32_pmaxud256 (v8si,v8si)
   37642      v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
   37643      v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
   37644      v8si __builtin_ia32_pminsd256 (v8si,v8si)
   37645      v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
   37646      v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
   37647      v8si __builtin_ia32_pminud256 (v8si,v8si)
   37648      int __builtin_ia32_pmovmskb256 (v32qi)
   37649      v16hi __builtin_ia32_pmovsxbw256 (v16qi)
   37650      v8si __builtin_ia32_pmovsxbd256 (v16qi)
   37651      v4di __builtin_ia32_pmovsxbq256 (v16qi)
   37652      v8si __builtin_ia32_pmovsxwd256 (v8hi)
   37653      v4di __builtin_ia32_pmovsxwq256 (v8hi)
   37654      v4di __builtin_ia32_pmovsxdq256 (v4si)
   37655      v16hi __builtin_ia32_pmovzxbw256 (v16qi)
   37656      v8si __builtin_ia32_pmovzxbd256 (v16qi)
   37657      v4di __builtin_ia32_pmovzxbq256 (v16qi)
   37658      v8si __builtin_ia32_pmovzxwd256 (v8hi)
   37659      v4di __builtin_ia32_pmovzxwq256 (v8hi)
   37660      v4di __builtin_ia32_pmovzxdq256 (v4si)
   37661      v4di __builtin_ia32_pmuldq256 (v8si,v8si)
   37662      v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
   37663      v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
   37664      v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
   37665      v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
   37666      v8si __builtin_ia32_pmulld256 (v8si,v8si)
   37667      v4di __builtin_ia32_pmuludq256 (v8si,v8si)
   37668      v4di __builtin_ia32_por256 (v4di,v4di)
   37669      v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
   37670      v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
   37671      v8si __builtin_ia32_pshufd256 (v8si,int)
   37672      v16hi __builtin_ia32_pshufhw256 (v16hi,int)
   37673      v16hi __builtin_ia32_pshuflw256 (v16hi,int)
   37674      v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
   37675      v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
   37676      v8si __builtin_ia32_psignd256 (v8si,v8si)
   37677      v4di __builtin_ia32_pslldqi256 (v4di,int)
   37678      v16hi __builtin_ia32_psllwi256 (16hi,int)
   37679      v16hi __builtin_ia32_psllw256(v16hi,v8hi)
   37680      v8si __builtin_ia32_pslldi256 (v8si,int)
   37681      v8si __builtin_ia32_pslld256(v8si,v4si)
   37682      v4di __builtin_ia32_psllqi256 (v4di,int)
   37683      v4di __builtin_ia32_psllq256(v4di,v2di)
   37684      v16hi __builtin_ia32_psrawi256 (v16hi,int)
   37685      v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
   37686      v8si __builtin_ia32_psradi256 (v8si,int)
   37687      v8si __builtin_ia32_psrad256 (v8si,v4si)
   37688      v4di __builtin_ia32_psrldqi256 (v4di, int)
   37689      v16hi __builtin_ia32_psrlwi256 (v16hi,int)
   37690      v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
   37691      v8si __builtin_ia32_psrldi256 (v8si,int)
   37692      v8si __builtin_ia32_psrld256 (v8si,v4si)
   37693      v4di __builtin_ia32_psrlqi256 (v4di,int)
   37694      v4di __builtin_ia32_psrlq256(v4di,v2di)
   37695      v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
   37696      v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
   37697      v8si __builtin_ia32_psubd256 (v8si,v8si)
   37698      v4di __builtin_ia32_psubq256 (v4di,v4di)
   37699      v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
   37700      v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
   37701      v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
   37702      v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
   37703      v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
   37704      v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
   37705      v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
   37706      v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
   37707      v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
   37708      v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
   37709      v8si __builtin_ia32_punpckldq256 (v8si,v8si)
   37710      v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
   37711      v4di __builtin_ia32_pxor256 (v4di,v4di)
   37712      v4di __builtin_ia32_movntdqa256 (pv4di)
   37713      v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
   37714      v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
   37715      v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
   37716      v4di __builtin_ia32_vbroadcastsi256 (v2di)
   37717      v4si __builtin_ia32_pblendd128 (v4si,v4si)
   37718      v8si __builtin_ia32_pblendd256 (v8si,v8si)
   37719      v32qi __builtin_ia32_pbroadcastb256 (v16qi)
   37720      v16hi __builtin_ia32_pbroadcastw256 (v8hi)
   37721      v8si __builtin_ia32_pbroadcastd256 (v4si)
   37722      v4di __builtin_ia32_pbroadcastq256 (v2di)
   37723      v16qi __builtin_ia32_pbroadcastb128 (v16qi)
   37724      v8hi __builtin_ia32_pbroadcastw128 (v8hi)
   37725      v4si __builtin_ia32_pbroadcastd128 (v4si)
   37726      v2di __builtin_ia32_pbroadcastq128 (v2di)
   37727      v8si __builtin_ia32_permvarsi256 (v8si,v8si)
   37728      v4df __builtin_ia32_permdf256 (v4df,int)
   37729      v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
   37730      v4di __builtin_ia32_permdi256 (v4di,int)
   37731      v4di __builtin_ia32_permti256 (v4di,v4di,int)
   37732      v4di __builtin_ia32_extract128i256 (v4di,int)
   37733      v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
   37734      v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
   37735      v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
   37736      v4si __builtin_ia32_maskloadd (pcv4si,v4si)
   37737      v2di __builtin_ia32_maskloadq (pcv2di,v2di)
   37738      void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
   37739      void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
   37740      void __builtin_ia32_maskstored (pv4si,v4si,v4si)
   37741      void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
   37742      v8si __builtin_ia32_psllv8si (v8si,v8si)
   37743      v4si __builtin_ia32_psllv4si (v4si,v4si)
   37744      v4di __builtin_ia32_psllv4di (v4di,v4di)
   37745      v2di __builtin_ia32_psllv2di (v2di,v2di)
   37746      v8si __builtin_ia32_psrav8si (v8si,v8si)
   37747      v4si __builtin_ia32_psrav4si (v4si,v4si)
   37748      v8si __builtin_ia32_psrlv8si (v8si,v8si)
   37749      v4si __builtin_ia32_psrlv4si (v4si,v4si)
   37750      v4di __builtin_ia32_psrlv4di (v4di,v4di)
   37751      v2di __builtin_ia32_psrlv2di (v2di,v2di)
   37752      v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
   37753      v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
   37754      v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
   37755      v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
   37756      v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
   37757      v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
   37758      v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
   37759      v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
   37760      v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
   37761      v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
   37762      v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
   37763      v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
   37764      v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
   37765      v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
   37766      v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
   37767      v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
   37768 
   37769  The following built-in functions are available when `-maes' is used.
   37770 All of them generate the machine instruction that is part of the name.
   37771 
   37772      v2di __builtin_ia32_aesenc128 (v2di, v2di)
   37773      v2di __builtin_ia32_aesenclast128 (v2di, v2di)
   37774      v2di __builtin_ia32_aesdec128 (v2di, v2di)
   37775      v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
   37776      v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
   37777      v2di __builtin_ia32_aesimc128 (v2di)
   37778 
   37779  The following built-in function is available when `-mpclmul' is used.
   37780 
   37781 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
   37782      Generates the `pclmulqdq' machine instruction.
   37783 
   37784  The following built-in function is available when `-mfsgsbase' is
   37785 used.  All of them generate the machine instruction that is part of the
   37786 name.
   37787 
   37788      unsigned int __builtin_ia32_rdfsbase32 (void)
   37789      unsigned long long __builtin_ia32_rdfsbase64 (void)
   37790      unsigned int __builtin_ia32_rdgsbase32 (void)
   37791      unsigned long long __builtin_ia32_rdgsbase64 (void)
   37792      void _writefsbase_u32 (unsigned int)
   37793      void _writefsbase_u64 (unsigned long long)
   37794      void _writegsbase_u32 (unsigned int)
   37795      void _writegsbase_u64 (unsigned long long)
   37796 
   37797  The following built-in function is available when `-mrdrnd' is used.
   37798 All of them generate the machine instruction that is part of the name.
   37799 
   37800      unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
   37801      unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
   37802      unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
   37803 
   37804  The following built-in functions are available when `-msse4a' is used.
   37805 All of them generate the machine instruction that is part of the name.
   37806 
   37807      void __builtin_ia32_movntsd (double *, v2df)
   37808      void __builtin_ia32_movntss (float *, v4sf)
   37809      v2di __builtin_ia32_extrq  (v2di, v16qi)
   37810      v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
   37811      v2di __builtin_ia32_insertq (v2di, v2di)
   37812      v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
   37813 
   37814  The following built-in functions are available when `-mxop' is used.
   37815      v2df __builtin_ia32_vfrczpd (v2df)
   37816      v4sf __builtin_ia32_vfrczps (v4sf)
   37817      v2df __builtin_ia32_vfrczsd (v2df, v2df)
   37818      v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
   37819      v4df __builtin_ia32_vfrczpd256 (v4df)
   37820      v8sf __builtin_ia32_vfrczps256 (v8sf)
   37821      v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
   37822      v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
   37823      v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
   37824      v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
   37825      v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
   37826      v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
   37827      v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
   37828      v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
   37829      v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
   37830      v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
   37831      v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
   37832      v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
   37833      v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
   37834      v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
   37835      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
   37836      v4si __builtin_ia32_vpcomeqd (v4si, v4si)
   37837      v2di __builtin_ia32_vpcomeqq (v2di, v2di)
   37838      v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
   37839      v4si __builtin_ia32_vpcomequd (v4si, v4si)
   37840      v2di __builtin_ia32_vpcomequq (v2di, v2di)
   37841      v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
   37842      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
   37843      v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
   37844      v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
   37845      v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
   37846      v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
   37847      v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
   37848      v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
   37849      v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
   37850      v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
   37851      v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
   37852      v4si __builtin_ia32_vpcomged (v4si, v4si)
   37853      v2di __builtin_ia32_vpcomgeq (v2di, v2di)
   37854      v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
   37855      v4si __builtin_ia32_vpcomgeud (v4si, v4si)
   37856      v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
   37857      v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
   37858      v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
   37859      v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
   37860      v4si __builtin_ia32_vpcomgtd (v4si, v4si)
   37861      v2di __builtin_ia32_vpcomgtq (v2di, v2di)
   37862      v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
   37863      v4si __builtin_ia32_vpcomgtud (v4si, v4si)
   37864      v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
   37865      v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
   37866      v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
   37867      v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
   37868      v4si __builtin_ia32_vpcomled (v4si, v4si)
   37869      v2di __builtin_ia32_vpcomleq (v2di, v2di)
   37870      v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
   37871      v4si __builtin_ia32_vpcomleud (v4si, v4si)
   37872      v2di __builtin_ia32_vpcomleuq (v2di, v2di)
   37873      v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
   37874      v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
   37875      v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
   37876      v4si __builtin_ia32_vpcomltd (v4si, v4si)
   37877      v2di __builtin_ia32_vpcomltq (v2di, v2di)
   37878      v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
   37879      v4si __builtin_ia32_vpcomltud (v4si, v4si)
   37880      v2di __builtin_ia32_vpcomltuq (v2di, v2di)
   37881      v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
   37882      v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
   37883      v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
   37884      v4si __builtin_ia32_vpcomned (v4si, v4si)
   37885      v2di __builtin_ia32_vpcomneq (v2di, v2di)
   37886      v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
   37887      v4si __builtin_ia32_vpcomneud (v4si, v4si)
   37888      v2di __builtin_ia32_vpcomneuq (v2di, v2di)
   37889      v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
   37890      v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
   37891      v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
   37892      v4si __builtin_ia32_vpcomtrued (v4si, v4si)
   37893      v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
   37894      v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
   37895      v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
   37896      v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
   37897      v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
   37898      v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
   37899      v4si __builtin_ia32_vphaddbd (v16qi)
   37900      v2di __builtin_ia32_vphaddbq (v16qi)
   37901      v8hi __builtin_ia32_vphaddbw (v16qi)
   37902      v2di __builtin_ia32_vphadddq (v4si)
   37903      v4si __builtin_ia32_vphaddubd (v16qi)
   37904      v2di __builtin_ia32_vphaddubq (v16qi)
   37905      v8hi __builtin_ia32_vphaddubw (v16qi)
   37906      v2di __builtin_ia32_vphaddudq (v4si)
   37907      v4si __builtin_ia32_vphadduwd (v8hi)
   37908      v2di __builtin_ia32_vphadduwq (v8hi)
   37909      v4si __builtin_ia32_vphaddwd (v8hi)
   37910      v2di __builtin_ia32_vphaddwq (v8hi)
   37911      v8hi __builtin_ia32_vphsubbw (v16qi)
   37912      v2di __builtin_ia32_vphsubdq (v4si)
   37913      v4si __builtin_ia32_vphsubwd (v8hi)
   37914      v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
   37915      v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
   37916      v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
   37917      v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
   37918      v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
   37919      v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
   37920      v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
   37921      v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
   37922      v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
   37923      v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
   37924      v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
   37925      v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
   37926      v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
   37927      v16qi __builtin_ia32_vprotb (v16qi, v16qi)
   37928      v4si __builtin_ia32_vprotd (v4si, v4si)
   37929      v2di __builtin_ia32_vprotq (v2di, v2di)
   37930      v8hi __builtin_ia32_vprotw (v8hi, v8hi)
   37931      v16qi __builtin_ia32_vpshab (v16qi, v16qi)
   37932      v4si __builtin_ia32_vpshad (v4si, v4si)
   37933      v2di __builtin_ia32_vpshaq (v2di, v2di)
   37934      v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
   37935      v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
   37936      v4si __builtin_ia32_vpshld (v4si, v4si)
   37937      v2di __builtin_ia32_vpshlq (v2di, v2di)
   37938      v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
   37939 
   37940  The following built-in functions are available when `-mfma4' is used.
   37941 All of them generate the machine instruction that is part of the name
   37942 with MMX registers.
   37943 
   37944      v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
   37945      v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
   37946      v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
   37947      v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
   37948      v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
   37949      v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
   37950      v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
   37951      v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
   37952      v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
   37953      v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
   37954      v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
   37955      v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
   37956      v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
   37957      v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
   37958      v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
   37959      v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
   37960      v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
   37961      v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
   37962      v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
   37963      v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
   37964      v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
   37965      v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
   37966      v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
   37967      v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
   37968      v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
   37969      v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
   37970      v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
   37971      v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
   37972      v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
   37973      v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
   37974      v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
   37975      v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
   37976 
   37977  The following built-in functions are available when `-mlwp' is used.
   37978 
   37979      void __builtin_ia32_llwpcb16 (void *);
   37980      void __builtin_ia32_llwpcb32 (void *);
   37981      void __builtin_ia32_llwpcb64 (void *);
   37982      void * __builtin_ia32_llwpcb16 (void);
   37983      void * __builtin_ia32_llwpcb32 (void);
   37984      void * __builtin_ia32_llwpcb64 (void);
   37985      void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
   37986      void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
   37987      void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
   37988      unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
   37989      unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
   37990      unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
   37991 
   37992  The following built-in functions are available when `-mbmi' is used.
   37993 All of them generate the machine instruction that is part of the name.
   37994      unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
   37995      unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
   37996 
   37997  The following built-in functions are available when `-mbmi2' is used.
   37998 All of them generate the machine instruction that is part of the name.
   37999      unsigned int _bzhi_u32 (unsigned int, unsigned int)
   38000      unsigned int _pdep_u32 (unsigned int, unsigned int)
   38001      unsigned int _pext_u32 (unsigned int, unsigned int)
   38002      unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
   38003      unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
   38004      unsigned long long _pext_u64 (unsigned long long, unsigned long long)
   38005 
   38006  The following built-in functions are available when `-mlzcnt' is used.
   38007 All of them generate the machine instruction that is part of the name.
   38008      unsigned short __builtin_ia32_lzcnt_16(unsigned short);
   38009      unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
   38010      unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
   38011 
   38012  The following built-in functions are available when `-mtbm' is used.
   38013 Both of them generate the immediate form of the bextr machine
   38014 instruction.
   38015      unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
   38016      unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
   38017 
   38018  The following built-in functions are available when `-m3dnow' is used.
   38019 All of them generate the machine instruction that is part of the name.
   38020 
   38021      void __builtin_ia32_femms (void)
   38022      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
   38023      v2si __builtin_ia32_pf2id (v2sf)
   38024      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
   38025      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
   38026      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
   38027      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
   38028      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
   38029      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
   38030      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
   38031      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
   38032      v2sf __builtin_ia32_pfrcp (v2sf)
   38033      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
   38034      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
   38035      v2sf __builtin_ia32_pfrsqrt (v2sf)
   38036      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
   38037      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
   38038      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
   38039      v2sf __builtin_ia32_pi2fd (v2si)
   38040      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
   38041 
   38042  The following built-in functions are available when both `-m3dnow' and
   38043 `-march=athlon' are used.  All of them generate the machine instruction
   38044 that is part of the name.
   38045 
   38046      v2si __builtin_ia32_pf2iw (v2sf)
   38047      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
   38048      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
   38049      v2sf __builtin_ia32_pi2fw (v2si)
   38050      v2sf __builtin_ia32_pswapdsf (v2sf)
   38051      v2si __builtin_ia32_pswapdsi (v2si)
   38052 
   38053  The following built-in functions are available when `-mrtm' is used
   38054 They are used for restricted transactional memory. These are the
   38055 internal low level functions. Normally the functions in *note X86
   38056 transactional memory intrinsics:: should be used instead.
   38057 
   38058      int __builtin_ia32_xbegin ()
   38059      void __builtin_ia32_xend ()
   38060      void __builtin_ia32_xabort (status)
   38061      int __builtin_ia32_xtest ()
   38062 
   38063 
   38064 File: gcc.info,  Node: X86 transactional memory intrinsics,  Next: MIPS DSP Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
   38065 
   38066 6.56.8 X86 transaction memory intrinsics
   38067 ----------------------------------------
   38068 
   38069 Hardware transactional memory intrinsics for i386. These allow to use
   38070 memory transactions with RTM (Restricted Transactional Memory).  For
   38071 using HLE (Hardware Lock Elision) see *note x86 specific memory model
   38072 extensions for transactional memory:: instead.  This support is enabled
   38073 with the `-mrtm' option.
   38074 
   38075  A memory transaction commits all changes to memory in an atomic way,
   38076 as visible to other threads. If the transaction fails it is rolled back
   38077 and all side effects discarded.
   38078 
   38079  Generally there is no guarantee that a memory transaction ever suceeds
   38080 and suitable fallback code always needs to be supplied.
   38081 
   38082  -- RTM Function: unsigned _xbegin ()
   38083      Start a RTM (Restricted Transactional Memory) transaction.
   38084      Returns _XBEGIN_STARTED when the transaction started successfully
   38085      (note this is not 0, so the constant has to be explicitely
   38086      tested). When the transaction aborts all side effects are undone
   38087      and an abort code is returned. There is no guarantee any
   38088      transaction ever succeeds, so there always needs to be a valid
   38089      tested fallback path.
   38090 
   38091      #include <immintrin.h>
   38092 
   38093      if ((status = _xbegin ()) == _XBEGIN_STARTED) {
   38094          ... transaction code...
   38095          _xend ();
   38096      } else {
   38097          ... non transactional fallback path...
   38098      }
   38099 
   38100  Valid abort status bits (when the value is not `_XBEGIN_STARTED') are:
   38101 
   38102 `_XABORT_EXPLICIT'
   38103      Transaction explicitely aborted with `_xabort'. The parameter
   38104      passed to `_xabort' is available with `_XABORT_CODE(status)'
   38105 
   38106 `_XABORT_RETRY'
   38107      Transaction retry is possible.
   38108 
   38109 `_XABORT_CONFLICT'
   38110      Transaction abort due to a memory conflict with another thread
   38111 
   38112 `_XABORT_CAPACITY'
   38113      Transaction abort due to the transaction using too much memory
   38114 
   38115 `_XABORT_DEBUG'
   38116      Transaction abort due to a debug trap
   38117 
   38118 `_XABORT_NESTED'
   38119      Transaction abort in a inner nested transaction
   38120 
   38121  -- RTM Function: void _xend ()
   38122      Commit the current transaction. When no transaction is active this
   38123      will fault. All memory side effects of the transactions will
   38124      become visible to other threads in an atomic matter.
   38125 
   38126  -- RTM Function: int _xtest ()
   38127      Return a value not zero when a transaction is currently active,
   38128      otherwise 0.
   38129 
   38130  -- RTM Function: void _xabort (status)
   38131      Abort the current transaction. When no transaction is active this
   38132      is a no-op.  status must be a 8bit constant, that is included in
   38133      the status code returned by `_xbegin'
   38134 
   38135 
   38136 File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 transactional memory intrinsics,  Up: Target Builtins
   38137 
   38138 6.56.9 MIPS DSP Built-in Functions
   38139 ----------------------------------
   38140 
   38141 The MIPS DSP Application-Specific Extension (ASE) includes new
   38142 instructions that are designed to improve the performance of DSP and
   38143 media applications.  It provides instructions that operate on packed
   38144 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
   38145 
   38146  GCC supports MIPS DSP operations using both the generic vector
   38147 extensions (*note Vector Extensions::) and a collection of
   38148 MIPS-specific built-in functions.  Both kinds of support are enabled by
   38149 the `-mdsp' command-line option.
   38150 
   38151  Revision 2 of the ASE was introduced in the second half of 2006.  This
   38152 revision adds extra instructions to the original ASE, but is otherwise
   38153 backwards-compatible with it.  You can select revision 2 using the
   38154 command-line option `-mdspr2'; this option implies `-mdsp'.
   38155 
   38156  The SCOUNT and POS bits of the DSP control register are global.  The
   38157 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
   38158 POS bits.  During optimization, the compiler does not delete these
   38159 instructions and it does not delete calls to functions containing these
   38160 instructions.
   38161 
   38162  At present, GCC only provides support for operations on 32-bit
   38163 vectors.  The vector type associated with 8-bit integer data is usually
   38164 called `v4i8', the vector type associated with Q7 is usually called
   38165 `v4q7', the vector type associated with 16-bit integer data is usually
   38166 called `v2i16', and the vector type associated with Q15 is usually
   38167 called `v2q15'.  They can be defined in C as follows:
   38168 
   38169      typedef signed char v4i8 __attribute__ ((vector_size(4)));
   38170      typedef signed char v4q7 __attribute__ ((vector_size(4)));
   38171      typedef short v2i16 __attribute__ ((vector_size(4)));
   38172      typedef short v2q15 __attribute__ ((vector_size(4)));
   38173 
   38174  `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
   38175 way as aggregates.  For example:
   38176 
   38177      v4i8 a = {1, 2, 3, 4};
   38178      v4i8 b;
   38179      b = (v4i8) {5, 6, 7, 8};
   38180 
   38181      v2q15 c = {0x0fcb, 0x3a75};
   38182      v2q15 d;
   38183      d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
   38184 
   38185  _Note:_ The CPU's endianness determines the order in which values are
   38186 packed.  On little-endian targets, the first value is the least
   38187 significant and the last value is the most significant.  The opposite
   38188 order applies to big-endian targets.  For example, the code above sets
   38189 the lowest byte of `a' to `1' on little-endian targets and `4' on
   38190 big-endian targets.
   38191 
   38192  _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
   38193 representation.  As shown in this example, the integer representation
   38194 of a Q7 value can be obtained by multiplying the fractional value by
   38195 `0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
   38196 The equivalent for Q31 values is to multiply by `0x1.0p31'.
   38197 
   38198  The table below lists the `v4i8' and `v2q15' operations for which
   38199 hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
   38200 `d' are `v2q15' values.
   38201 
   38202 C code                               MIPS instruction
   38203 `a + b'                              `addu.qb'
   38204 `c + d'                              `addq.ph'
   38205 `a - b'                              `subu.qb'
   38206 `c - d'                              `subq.ph'
   38207 
   38208  The table below lists the `v2i16' operation for which hardware support
   38209 exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
   38210 
   38211 C code                               MIPS instruction
   38212 `e * f'                              `mul.ph'
   38213 
   38214  It is easier to describe the DSP built-in functions if we first define
   38215 the following types:
   38216 
   38217      typedef int q31;
   38218      typedef int i32;
   38219      typedef unsigned int ui32;
   38220      typedef long long a64;
   38221 
   38222  `q31' and `i32' are actually the same as `int', but we use `q31' to
   38223 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
   38224 value.  Similarly, `a64' is the same as `long long', but we use `a64'
   38225 to indicate values that are placed in one of the four DSP accumulators
   38226 (`$ac0', `$ac1', `$ac2' or `$ac3').
   38227 
   38228  Also, some built-in functions prefer or require immediate numbers as
   38229 parameters, because the corresponding DSP instructions accept both
   38230 immediate numbers and register operands, or accept immediate numbers
   38231 only.  The immediate parameters are listed as follows.
   38232 
   38233      imm0_3: 0 to 3.
   38234      imm0_7: 0 to 7.
   38235      imm0_15: 0 to 15.
   38236      imm0_31: 0 to 31.
   38237      imm0_63: 0 to 63.
   38238      imm0_255: 0 to 255.
   38239      imm_n32_31: -32 to 31.
   38240      imm_n512_511: -512 to 511.
   38241 
   38242  The following built-in functions map directly to a particular MIPS DSP
   38243 instruction.  Please refer to the architecture specification for
   38244 details on what each instruction does.
   38245 
   38246      v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
   38247      v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
   38248      q31 __builtin_mips_addq_s_w (q31, q31)
   38249      v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
   38250      v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
   38251      v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
   38252      v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
   38253      q31 __builtin_mips_subq_s_w (q31, q31)
   38254      v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
   38255      v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
   38256      i32 __builtin_mips_addsc (i32, i32)
   38257      i32 __builtin_mips_addwc (i32, i32)
   38258      i32 __builtin_mips_modsub (i32, i32)
   38259      i32 __builtin_mips_raddu_w_qb (v4i8)
   38260      v2q15 __builtin_mips_absq_s_ph (v2q15)
   38261      q31 __builtin_mips_absq_s_w (q31)
   38262      v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
   38263      v2q15 __builtin_mips_precrq_ph_w (q31, q31)
   38264      v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
   38265      v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
   38266      q31 __builtin_mips_preceq_w_phl (v2q15)
   38267      q31 __builtin_mips_preceq_w_phr (v2q15)
   38268      v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
   38269      v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
   38270      v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
   38271      v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
   38272      v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
   38273      v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
   38274      v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
   38275      v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
   38276      v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
   38277      v4i8 __builtin_mips_shll_qb (v4i8, i32)
   38278      v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
   38279      v2q15 __builtin_mips_shll_ph (v2q15, i32)
   38280      v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
   38281      v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
   38282      q31 __builtin_mips_shll_s_w (q31, imm0_31)
   38283      q31 __builtin_mips_shll_s_w (q31, i32)
   38284      v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
   38285      v4i8 __builtin_mips_shrl_qb (v4i8, i32)
   38286      v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
   38287      v2q15 __builtin_mips_shra_ph (v2q15, i32)
   38288      v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
   38289      v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
   38290      q31 __builtin_mips_shra_r_w (q31, imm0_31)
   38291      q31 __builtin_mips_shra_r_w (q31, i32)
   38292      v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
   38293      v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
   38294      v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
   38295      q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
   38296      q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
   38297      a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
   38298      a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
   38299      a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
   38300      a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
   38301      a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
   38302      a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
   38303      a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
   38304      a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
   38305      a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
   38306      a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
   38307      a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
   38308      a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
   38309      a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
   38310      i32 __builtin_mips_bitrev (i32)
   38311      i32 __builtin_mips_insv (i32, i32)
   38312      v4i8 __builtin_mips_repl_qb (imm0_255)
   38313      v4i8 __builtin_mips_repl_qb (i32)
   38314      v2q15 __builtin_mips_repl_ph (imm_n512_511)
   38315      v2q15 __builtin_mips_repl_ph (i32)
   38316      void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
   38317      void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
   38318      void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
   38319      i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
   38320      i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
   38321      i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
   38322      void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
   38323      void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
   38324      void __builtin_mips_cmp_le_ph (v2q15, v2q15)
   38325      v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
   38326      v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
   38327      v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
   38328      i32 __builtin_mips_extr_w (a64, imm0_31)
   38329      i32 __builtin_mips_extr_w (a64, i32)
   38330      i32 __builtin_mips_extr_r_w (a64, imm0_31)
   38331      i32 __builtin_mips_extr_s_h (a64, i32)
   38332      i32 __builtin_mips_extr_rs_w (a64, imm0_31)
   38333      i32 __builtin_mips_extr_rs_w (a64, i32)
   38334      i32 __builtin_mips_extr_s_h (a64, imm0_31)
   38335      i32 __builtin_mips_extr_r_w (a64, i32)
   38336      i32 __builtin_mips_extp (a64, imm0_31)
   38337      i32 __builtin_mips_extp (a64, i32)
   38338      i32 __builtin_mips_extpdp (a64, imm0_31)
   38339      i32 __builtin_mips_extpdp (a64, i32)
   38340      a64 __builtin_mips_shilo (a64, imm_n32_31)
   38341      a64 __builtin_mips_shilo (a64, i32)
   38342      a64 __builtin_mips_mthlip (a64, i32)
   38343      void __builtin_mips_wrdsp (i32, imm0_63)
   38344      i32 __builtin_mips_rddsp (imm0_63)
   38345      i32 __builtin_mips_lbux (void *, i32)
   38346      i32 __builtin_mips_lhx (void *, i32)
   38347      i32 __builtin_mips_lwx (void *, i32)
   38348      a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
   38349      i32 __builtin_mips_bposge32 (void)
   38350      a64 __builtin_mips_madd (a64, i32, i32);
   38351      a64 __builtin_mips_maddu (a64, ui32, ui32);
   38352      a64 __builtin_mips_msub (a64, i32, i32);
   38353      a64 __builtin_mips_msubu (a64, ui32, ui32);
   38354      a64 __builtin_mips_mult (i32, i32);
   38355      a64 __builtin_mips_multu (ui32, ui32);
   38356 
   38357  The following built-in functions map directly to a particular MIPS DSP
   38358 REV 2 instruction.  Please refer to the architecture specification for
   38359 details on what each instruction does.
   38360 
   38361      v4q7 __builtin_mips_absq_s_qb (v4q7);
   38362      v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
   38363      v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
   38364      v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
   38365      v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
   38366      i32 __builtin_mips_append (i32, i32, imm0_31);
   38367      i32 __builtin_mips_balign (i32, i32, imm0_3);
   38368      i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
   38369      i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
   38370      i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
   38371      a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
   38372      a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
   38373      v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
   38374      v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
   38375      q31 __builtin_mips_mulq_rs_w (q31, q31);
   38376      v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
   38377      q31 __builtin_mips_mulq_s_w (q31, q31);
   38378      a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
   38379      v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
   38380      v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
   38381      v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
   38382      i32 __builtin_mips_prepend (i32, i32, imm0_31);
   38383      v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
   38384      v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
   38385      v4i8 __builtin_mips_shra_qb (v4i8, i32);
   38386      v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
   38387      v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
   38388      v2i16 __builtin_mips_shrl_ph (v2i16, i32);
   38389      v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
   38390      v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
   38391      v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
   38392      v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
   38393      v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
   38394      v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
   38395      q31 __builtin_mips_addqh_w (q31, q31);
   38396      q31 __builtin_mips_addqh_r_w (q31, q31);
   38397      v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
   38398      v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
   38399      q31 __builtin_mips_subqh_w (q31, q31);
   38400      q31 __builtin_mips_subqh_r_w (q31, q31);
   38401      a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
   38402      a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
   38403      a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
   38404      a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
   38405      a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
   38406      a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
   38407 
   38408 
   38409 File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
   38410 
   38411 6.56.10 MIPS Paired-Single Support
   38412 ----------------------------------
   38413 
   38414 The MIPS64 architecture includes a number of instructions that operate
   38415 on pairs of single-precision floating-point values.  Each pair is
   38416 packed into a 64-bit floating-point register, with one element being
   38417 designated the "upper half" and the other being designated the "lower
   38418 half".
   38419 
   38420  GCC supports paired-single operations using both the generic vector
   38421 extensions (*note Vector Extensions::) and a collection of
   38422 MIPS-specific built-in functions.  Both kinds of support are enabled by
   38423 the `-mpaired-single' command-line option.
   38424 
   38425  The vector type associated with paired-single values is usually called
   38426 `v2sf'.  It can be defined in C as follows:
   38427 
   38428      typedef float v2sf __attribute__ ((vector_size (8)));
   38429 
   38430  `v2sf' values are initialized in the same way as aggregates.  For
   38431 example:
   38432 
   38433      v2sf a = {1.5, 9.1};
   38434      v2sf b;
   38435      float e, f;
   38436      b = (v2sf) {e, f};
   38437 
   38438  _Note:_ The CPU's endianness determines which value is stored in the
   38439 upper half of a register and which value is stored in the lower half.
   38440 On little-endian targets, the first value is the lower one and the
   38441 second value is the upper one.  The opposite order applies to
   38442 big-endian targets.  For example, the code above sets the lower half of
   38443 `a' to `1.5' on little-endian targets and `9.1' on big-endian targets.
   38444 
   38445 
   38446 File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
   38447 
   38448 6.56.11 MIPS Loongson Built-in Functions
   38449 ----------------------------------------
   38450 
   38451 GCC provides intrinsics to access the SIMD instructions provided by the
   38452 ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
   38453 available after inclusion of the `loongson.h' header file, operate on
   38454 the following 64-bit vector types:
   38455 
   38456    * `uint8x8_t', a vector of eight unsigned 8-bit integers;
   38457 
   38458    * `uint16x4_t', a vector of four unsigned 16-bit integers;
   38459 
   38460    * `uint32x2_t', a vector of two unsigned 32-bit integers;
   38461 
   38462    * `int8x8_t', a vector of eight signed 8-bit integers;
   38463 
   38464    * `int16x4_t', a vector of four signed 16-bit integers;
   38465 
   38466    * `int32x2_t', a vector of two signed 32-bit integers.
   38467 
   38468  The intrinsics provided are listed below; each is named after the
   38469 machine instruction to which it corresponds, with suffixes added as
   38470 appropriate to distinguish intrinsics that expand to the same machine
   38471 instruction yet have different argument types.  Refer to the
   38472 architecture documentation for a description of the functionality of
   38473 each instruction.
   38474 
   38475      int16x4_t packsswh (int32x2_t s, int32x2_t t);
   38476      int8x8_t packsshb (int16x4_t s, int16x4_t t);
   38477      uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
   38478      uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
   38479      uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
   38480      uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
   38481      int32x2_t paddw_s (int32x2_t s, int32x2_t t);
   38482      int16x4_t paddh_s (int16x4_t s, int16x4_t t);
   38483      int8x8_t paddb_s (int8x8_t s, int8x8_t t);
   38484      uint64_t paddd_u (uint64_t s, uint64_t t);
   38485      int64_t paddd_s (int64_t s, int64_t t);
   38486      int16x4_t paddsh (int16x4_t s, int16x4_t t);
   38487      int8x8_t paddsb (int8x8_t s, int8x8_t t);
   38488      uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
   38489      uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
   38490      uint64_t pandn_ud (uint64_t s, uint64_t t);
   38491      uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
   38492      uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
   38493      uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
   38494      int64_t pandn_sd (int64_t s, int64_t t);
   38495      int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
   38496      int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
   38497      int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
   38498      uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
   38499      uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
   38500      uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
   38501      uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
   38502      uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
   38503      int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
   38504      int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
   38505      int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
   38506      uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
   38507      uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
   38508      uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
   38509      int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
   38510      int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
   38511      int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
   38512      uint16x4_t pextrh_u (uint16x4_t s, int field);
   38513      int16x4_t pextrh_s (int16x4_t s, int field);
   38514      uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
   38515      uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
   38516      uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
   38517      uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
   38518      int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
   38519      int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
   38520      int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
   38521      int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
   38522      int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
   38523      int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
   38524      uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
   38525      int16x4_t pminsh (int16x4_t s, int16x4_t t);
   38526      uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
   38527      uint8x8_t pmovmskb_u (uint8x8_t s);
   38528      int8x8_t pmovmskb_s (int8x8_t s);
   38529      uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
   38530      int16x4_t pmulhh (int16x4_t s, int16x4_t t);
   38531      int16x4_t pmullh (int16x4_t s, int16x4_t t);
   38532      int64_t pmuluw (uint32x2_t s, uint32x2_t t);
   38533      uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
   38534      uint16x4_t biadd (uint8x8_t s);
   38535      uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
   38536      uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
   38537      int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
   38538      uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
   38539      int16x4_t psllh_s (int16x4_t s, uint8_t amount);
   38540      uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
   38541      int32x2_t psllw_s (int32x2_t s, uint8_t amount);
   38542      uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
   38543      int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
   38544      uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
   38545      int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
   38546      uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
   38547      int16x4_t psrah_s (int16x4_t s, uint8_t amount);
   38548      uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
   38549      int32x2_t psraw_s (int32x2_t s, uint8_t amount);
   38550      uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
   38551      uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
   38552      uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
   38553      int32x2_t psubw_s (int32x2_t s, int32x2_t t);
   38554      int16x4_t psubh_s (int16x4_t s, int16x4_t t);
   38555      int8x8_t psubb_s (int8x8_t s, int8x8_t t);
   38556      uint64_t psubd_u (uint64_t s, uint64_t t);
   38557      int64_t psubd_s (int64_t s, int64_t t);
   38558      int16x4_t psubsh (int16x4_t s, int16x4_t t);
   38559      int8x8_t psubsb (int8x8_t s, int8x8_t t);
   38560      uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
   38561      uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
   38562      uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
   38563      uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
   38564      uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
   38565      int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
   38566      int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
   38567      int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
   38568      uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
   38569      uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
   38570      uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
   38571      int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
   38572      int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
   38573      int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
   38574 
   38575 * Menu:
   38576 
   38577 * Paired-Single Arithmetic::
   38578 * Paired-Single Built-in Functions::
   38579 * MIPS-3D Built-in Functions::
   38580 
   38581 
   38582 File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
   38583 
   38584 6.56.11.1 Paired-Single Arithmetic
   38585 ..................................
   38586 
   38587 The table below lists the `v2sf' operations for which hardware support
   38588 exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
   38589 value.
   38590 
   38591 C code                               MIPS instruction
   38592 `a + b'                              `add.ps'
   38593 `a - b'                              `sub.ps'
   38594 `-a'                                 `neg.ps'
   38595 `a * b'                              `mul.ps'
   38596 `a * b + c'                          `madd.ps'
   38597 `a * b - c'                          `msub.ps'
   38598 `-(a * b + c)'                       `nmadd.ps'
   38599 `-(a * b - c)'                       `nmsub.ps'
   38600 `x ? a : b'                          `movn.ps'/`movz.ps'
   38601 
   38602  Note that the multiply-accumulate instructions can be disabled using
   38603 the command-line option `-mno-fused-madd'.
   38604 
   38605 
   38606 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
   38607 
   38608 6.56.11.2 Paired-Single Built-in Functions
   38609 ..........................................
   38610 
   38611 The following paired-single functions map directly to a particular MIPS
   38612 instruction.  Please refer to the architecture specification for
   38613 details on what each instruction does.
   38614 
   38615 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
   38616      Pair lower lower (`pll.ps').
   38617 
   38618 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
   38619      Pair upper lower (`pul.ps').
   38620 
   38621 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
   38622      Pair lower upper (`plu.ps').
   38623 
   38624 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
   38625      Pair upper upper (`puu.ps').
   38626 
   38627 `v2sf __builtin_mips_cvt_ps_s (float, float)'
   38628      Convert pair to paired single (`cvt.ps.s').
   38629 
   38630 `float __builtin_mips_cvt_s_pl (v2sf)'
   38631      Convert pair lower to single (`cvt.s.pl').
   38632 
   38633 `float __builtin_mips_cvt_s_pu (v2sf)'
   38634      Convert pair upper to single (`cvt.s.pu').
   38635 
   38636 `v2sf __builtin_mips_abs_ps (v2sf)'
   38637      Absolute value (`abs.ps').
   38638 
   38639 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
   38640      Align variable (`alnv.ps').
   38641 
   38642      _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
   38643      otherwise the result is unpredictable.  Please read the
   38644      instruction description for details.
   38645 
   38646  The following multi-instruction functions are also available.  In each
   38647 case, COND can be any of the 16 floating-point conditions: `f', `un',
   38648 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
   38649 `lt', `nge', `le' or `ngt'.
   38650 
   38651 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38652 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38653      Conditional move based on floating-point comparison (`c.COND.ps',
   38654      `movt.ps'/`movf.ps').
   38655 
   38656      The `movt' functions return the value X computed by:
   38657 
   38658           c.COND.ps CC,A,B
   38659           mov.ps X,C
   38660           movt.ps X,D,CC
   38661 
   38662      The `movf' functions are similar but use `movf.ps' instead of
   38663      `movt.ps'.
   38664 
   38665 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
   38666 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
   38667      Comparison of two paired-single values (`c.COND.ps',
   38668      `bc1t'/`bc1f').
   38669 
   38670      These functions compare A and B using `c.COND.ps' and return
   38671      either the upper or lower half of the result.  For example:
   38672 
   38673           v2sf a, b;
   38674           if (__builtin_mips_upper_c_eq_ps (a, b))
   38675             upper_halves_are_equal ();
   38676           else
   38677             upper_halves_are_unequal ();
   38678 
   38679           if (__builtin_mips_lower_c_eq_ps (a, b))
   38680             lower_halves_are_equal ();
   38681           else
   38682             lower_halves_are_unequal ();
   38683 
   38684 
   38685 File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
   38686 
   38687 6.56.11.3 MIPS-3D Built-in Functions
   38688 ....................................
   38689 
   38690 The MIPS-3D Application-Specific Extension (ASE) includes additional
   38691 paired-single instructions that are designed to improve the performance
   38692 of 3D graphics operations.  Support for these instructions is controlled
   38693 by the `-mips3d' command-line option.
   38694 
   38695  The functions listed below map directly to a particular MIPS-3D
   38696 instruction.  Please refer to the architecture specification for more
   38697 details on what each instruction does.
   38698 
   38699 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
   38700      Reduction add (`addr.ps').
   38701 
   38702 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
   38703      Reduction multiply (`mulr.ps').
   38704 
   38705 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
   38706      Convert paired single to paired word (`cvt.pw.ps').
   38707 
   38708 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
   38709      Convert paired word to paired single (`cvt.ps.pw').
   38710 
   38711 `float __builtin_mips_recip1_s (float)'
   38712 `double __builtin_mips_recip1_d (double)'
   38713 `v2sf __builtin_mips_recip1_ps (v2sf)'
   38714      Reduced-precision reciprocal (sequence step 1) (`recip1.FMT').
   38715 
   38716 `float __builtin_mips_recip2_s (float, float)'
   38717 `double __builtin_mips_recip2_d (double, double)'
   38718 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
   38719      Reduced-precision reciprocal (sequence step 2) (`recip2.FMT').
   38720 
   38721 `float __builtin_mips_rsqrt1_s (float)'
   38722 `double __builtin_mips_rsqrt1_d (double)'
   38723 `v2sf __builtin_mips_rsqrt1_ps (v2sf)'
   38724      Reduced-precision reciprocal square root (sequence step 1)
   38725      (`rsqrt1.FMT').
   38726 
   38727 `float __builtin_mips_rsqrt2_s (float, float)'
   38728 `double __builtin_mips_rsqrt2_d (double, double)'
   38729 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
   38730      Reduced-precision reciprocal square root (sequence step 2)
   38731      (`rsqrt2.FMT').
   38732 
   38733  The following multi-instruction functions are also available.  In each
   38734 case, COND can be any of the 16 floating-point conditions: `f', `un',
   38735 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
   38736 `lt', `nge', `le' or `ngt'.
   38737 
   38738 `int __builtin_mips_cabs_COND_s (float A, float B)'
   38739 `int __builtin_mips_cabs_COND_d (double A, double B)'
   38740      Absolute comparison of two scalar values (`cabs.COND.FMT',
   38741      `bc1t'/`bc1f').
   38742 
   38743      These functions compare A and B using `cabs.COND.s' or
   38744      `cabs.COND.d' and return the result as a boolean value.  For
   38745      example:
   38746 
   38747           float a, b;
   38748           if (__builtin_mips_cabs_eq_s (a, b))
   38749             true ();
   38750           else
   38751             false ();
   38752 
   38753 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
   38754 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
   38755      Absolute comparison of two paired-single values (`cabs.COND.ps',
   38756      `bc1t'/`bc1f').
   38757 
   38758      These functions compare A and B using `cabs.COND.ps' and return
   38759      either the upper or lower half of the result.  For example:
   38760 
   38761           v2sf a, b;
   38762           if (__builtin_mips_upper_cabs_eq_ps (a, b))
   38763             upper_halves_are_equal ();
   38764           else
   38765             upper_halves_are_unequal ();
   38766 
   38767           if (__builtin_mips_lower_cabs_eq_ps (a, b))
   38768             lower_halves_are_equal ();
   38769           else
   38770             lower_halves_are_unequal ();
   38771 
   38772 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38773 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38774      Conditional move based on absolute comparison (`cabs.COND.ps',
   38775      `movt.ps'/`movf.ps').
   38776 
   38777      The `movt' functions return the value X computed by:
   38778 
   38779           cabs.COND.ps CC,A,B
   38780           mov.ps X,C
   38781           movt.ps X,D,CC
   38782 
   38783      The `movf' functions are similar but use `movf.ps' instead of
   38784      `movt.ps'.
   38785 
   38786 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
   38787 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
   38788 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
   38789 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
   38790      Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
   38791      `bc1any2t'/`bc1any2f').
   38792 
   38793      These functions compare A and B using `c.COND.ps' or
   38794      `cabs.COND.ps'.  The `any' forms return true if either result is
   38795      true and the `all' forms return true if both results are true.
   38796      For example:
   38797 
   38798           v2sf a, b;
   38799           if (__builtin_mips_any_c_eq_ps (a, b))
   38800             one_is_true ();
   38801           else
   38802             both_are_false ();
   38803 
   38804           if (__builtin_mips_all_c_eq_ps (a, b))
   38805             both_are_true ();
   38806           else
   38807             one_is_false ();
   38808 
   38809 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38810 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38811 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38812 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38813      Comparison of four paired-single values
   38814      (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
   38815 
   38816      These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
   38817      with B and to compare C with D.  The `any' forms return true if
   38818      any of the four results are true and the `all' forms return true
   38819      if all four results are true.  For example:
   38820 
   38821           v2sf a, b, c, d;
   38822           if (__builtin_mips_any_c_eq_4s (a, b, c, d))
   38823             some_are_true ();
   38824           else
   38825             all_are_false ();
   38826 
   38827           if (__builtin_mips_all_c_eq_4s (a, b, c, d))
   38828             all_are_true ();
   38829           else
   38830             some_are_false ();
   38831 
   38832 
   38833 File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
   38834 
   38835 6.56.12 Other MIPS Built-in Functions
   38836 -------------------------------------
   38837 
   38838 GCC provides other MIPS-specific built-in functions:
   38839 
   38840 `void __builtin_mips_cache (int OP, const volatile void *ADDR)'
   38841      Insert a `cache' instruction with operands OP and ADDR.  GCC
   38842      defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
   38843      when this function is available.
   38844 
   38845 
   38846 File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
   38847 
   38848 6.56.13 picoChip Built-in Functions
   38849 -----------------------------------
   38850 
   38851 GCC provides an interface to selected machine instructions from the
   38852 picoChip instruction set.
   38853 
   38854 `int __builtin_sbc (int VALUE)'
   38855      Sign bit count.  Return the number of consecutive bits in VALUE
   38856      that have the same value as the sign bit.  The result is the
   38857      number of leading sign bits minus one, giving the number of
   38858      redundant sign bits in VALUE.
   38859 
   38860 `int __builtin_byteswap (int VALUE)'
   38861      Byte swap.  Return the result of swapping the upper and lower
   38862      bytes of VALUE.
   38863 
   38864 `int __builtin_brev (int VALUE)'
   38865      Bit reversal.  Return the result of reversing the bits in VALUE.
   38866      Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
   38867      on.
   38868 
   38869 `int __builtin_adds (int X, int Y)'
   38870      Saturating addition.  Return the result of adding X and Y, storing
   38871      the value 32767 if the result overflows.
   38872 
   38873 `int __builtin_subs (int X, int Y)'
   38874      Saturating subtraction.  Return the result of subtracting Y from
   38875      X, storing the value -32768 if the result overflows.
   38876 
   38877 `void __builtin_halt (void)'
   38878      Halt.  The processor stops execution.  This built-in is useful for
   38879      implementing assertions.
   38880 
   38881 
   38882 
   38883 File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
   38884 
   38885 6.56.14 PowerPC Built-in Functions
   38886 ----------------------------------
   38887 
   38888 These built-in functions are available for the PowerPC family of
   38889 processors:
   38890      float __builtin_recipdivf (float, float);
   38891      float __builtin_rsqrtf (float);
   38892      double __builtin_recipdiv (double, double);
   38893      double __builtin_rsqrt (double);
   38894      uint64_t __builtin_ppc_get_timebase ();
   38895      unsigned long __builtin_ppc_mftb ();
   38896      double __builtin_unpack_longdouble (long double, int);
   38897      double __builtin_longdouble_dw0 (long double);
   38898      double __builtin_longdouble_dw1 (long double);
   38899      long double __builtin_pack_longdouble (double, double);
   38900 
   38901  The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
   38902 generate multiple instructions to implement the reciprocal sqrt
   38903 functionality using reciprocal sqrt estimate instructions.
   38904 
   38905  The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
   38906 multiple instructions to implement division using the reciprocal
   38907 estimate instructions.
   38908 
   38909  The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions
   38910 generate instructions to read the Time Base Register.  The
   38911 `__builtin_ppc_get_timebase' function may generate multiple
   38912 instructions and always returns the 64 bits of the Time Base Register.
   38913 The `__builtin_ppc_mftb' function always generates one instruction and
   38914 returns the Time Base Register value as an unsigned long, throwing away
   38915 the most significant word on 32-bit environments.
   38916 
   38917  The following built-in functions are available for the PowerPC family
   38918 of processors, starting with ISA 2.06 or later (`-mcpu=power7' or
   38919 `-mpopcntd'):
   38920      long __builtin_bpermd (long, long);
   38921      int __builtin_divwe (int, int);
   38922      int __builtin_divweo (int, int);
   38923      unsigned int __builtin_divweu (unsigned int, unsigned int);
   38924      unsigned int __builtin_divweuo (unsigned int, unsigned int);
   38925      long __builtin_divde (long, long);
   38926      long __builtin_divdeo (long, long);
   38927      unsigned long __builtin_divdeu (unsigned long, unsigned long);
   38928      unsigned long __builtin_divdeuo (unsigned long, unsigned long);
   38929      unsigned int cdtbcd (unsigned int);
   38930      unsigned int cbcdtd (unsigned int);
   38931      unsigned int addg6s (unsigned int, unsigned int);
   38932 
   38933  The `__builtin_divde', `__builtin_divdeo', `__builitin_divdeu',
   38934 `__builtin_divdeou' functions require a 64-bit environment support ISA
   38935 2.06 or later.
   38936 
   38937  The following built-in functions are available for the PowerPC family
   38938 of processors when hardware decimal floating point (`-mhard-dfp') is
   38939 available:
   38940      _Decimal64 __builtin_dxex (_Decimal64);
   38941      _Decimal128 __builtin_dxexq (_Decimal128);
   38942      _Decimal64 __builtin_ddedpd (int, _Decimal64);
   38943      _Decimal128 __builtin_ddedpdq (int, _Decimal128);
   38944      _Decimal64 __builtin_denbcd (int, _Decimal64);
   38945      _Decimal128 __builtin_denbcdq (int, _Decimal128);
   38946      _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
   38947      _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
   38948      _Decimal64 __builtin_dscli (_Decimal64, int);
   38949      _Decimal128 __builitn_dscliq (_Decimal128, int);
   38950      _Decimal64 __builtin_dscri (_Decimal64, int);
   38951      _Decimal128 __builitn_dscriq (_Decimal128, int);
   38952      unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
   38953      _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
   38954 
   38955  The following built-in functions are available for the PowerPC family
   38956 of processors when the Vector Scalar (vsx) instruction set is available:
   38957      unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
   38958      vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
   38959                                                      unsigned long long);
   38960 
   38961 
   38962 File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: PowerPC Built-in Functions,  Up: Target Builtins
   38963 
   38964 6.56.15 PowerPC AltiVec Built-in Functions
   38965 ------------------------------------------
   38966 
   38967 GCC provides an interface for the PowerPC family of processors to access
   38968 the AltiVec operations described in Motorola's AltiVec Programming
   38969 Interface Manual.  The interface is made available by including
   38970 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
   38971 supports the following vector types.
   38972 
   38973      vector unsigned char
   38974      vector signed char
   38975      vector bool char
   38976 
   38977      vector unsigned short
   38978      vector signed short
   38979      vector bool short
   38980      vector pixel
   38981 
   38982      vector unsigned int
   38983      vector signed int
   38984      vector bool int
   38985      vector float
   38986 
   38987  If `-mvsx' is used the following additional vector types are
   38988 implemented.
   38989 
   38990      vector unsigned long
   38991      vector signed long
   38992      vector double
   38993 
   38994  The long types are only implemented for 64-bit code generation, and
   38995 the long type is only used in the floating point/integer conversion
   38996 instructions.
   38997 
   38998  GCC's implementation of the high-level language interface available
   38999 from C and C++ code differs from Motorola's documentation in several
   39000 ways.
   39001 
   39002    * A vector constant is a list of constant expressions within curly
   39003      braces.
   39004 
   39005    * A vector initializer requires no cast if the vector constant is of
   39006      the same type as the variable it is initializing.
   39007 
   39008    * If `signed' or `unsigned' is omitted, the signedness of the vector
   39009      type is the default signedness of the base type.  The default
   39010      varies depending on the operating system, so a portable program
   39011      should always specify the signedness.
   39012 
   39013    * Compiling with `-maltivec' adds keywords `__vector', `vector',
   39014      `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
   39015      the context-sensitive substitution of the keywords `vector',
   39016      `pixel' and `bool' is disabled.  To use them, you must include
   39017      `<altivec.h>' instead.
   39018 
   39019    * GCC allows using a `typedef' name as the type specifier for a
   39020      vector type.
   39021 
   39022    * For C, overloaded functions are implemented with macros so the
   39023      following does not work:
   39024 
   39025             vec_add ((vector signed int){1, 2, 3, 4}, foo);
   39026 
   39027      Since `vec_add' is a macro, the vector constant in the example is
   39028      treated as four separate arguments.  Wrap the entire argument in
   39029      parentheses for this to work.
   39030 
   39031  _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
   39032 GCC uses built-in functions to achieve the functionality in the
   39033 aforementioned header file, but they are not supported and are subject
   39034 to change without notice.
   39035 
   39036  The following interfaces are supported for the generic and specific
   39037 AltiVec operations and the AltiVec predicates.  In cases where there is
   39038 a direct mapping between generic and specific operations, only the
   39039 generic names are shown here, although the specific operations can also
   39040 be used.
   39041 
   39042  Arguments that are documented as `const int' require literal integral
   39043 values within the range required for that operation.
   39044 
   39045      vector signed char vec_abs (vector signed char);
   39046      vector signed short vec_abs (vector signed short);
   39047      vector signed int vec_abs (vector signed int);
   39048      vector float vec_abs (vector float);
   39049 
   39050      vector signed char vec_abss (vector signed char);
   39051      vector signed short vec_abss (vector signed short);
   39052      vector signed int vec_abss (vector signed int);
   39053 
   39054      vector signed char vec_add (vector bool char, vector signed char);
   39055      vector signed char vec_add (vector signed char, vector bool char);
   39056      vector signed char vec_add (vector signed char, vector signed char);
   39057      vector unsigned char vec_add (vector bool char, vector unsigned char);
   39058      vector unsigned char vec_add (vector unsigned char, vector bool char);
   39059      vector unsigned char vec_add (vector unsigned char,
   39060                                    vector unsigned char);
   39061      vector signed short vec_add (vector bool short, vector signed short);
   39062      vector signed short vec_add (vector signed short, vector bool short);
   39063      vector signed short vec_add (vector signed short, vector signed short);
   39064      vector unsigned short vec_add (vector bool short,
   39065                                     vector unsigned short);
   39066      vector unsigned short vec_add (vector unsigned short,
   39067                                     vector bool short);
   39068      vector unsigned short vec_add (vector unsigned short,
   39069                                     vector unsigned short);
   39070      vector signed int vec_add (vector bool int, vector signed int);
   39071      vector signed int vec_add (vector signed int, vector bool int);
   39072      vector signed int vec_add (vector signed int, vector signed int);
   39073      vector unsigned int vec_add (vector bool int, vector unsigned int);
   39074      vector unsigned int vec_add (vector unsigned int, vector bool int);
   39075      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
   39076      vector float vec_add (vector float, vector float);
   39077 
   39078      vector float vec_vaddfp (vector float, vector float);
   39079 
   39080      vector signed int vec_vadduwm (vector bool int, vector signed int);
   39081      vector signed int vec_vadduwm (vector signed int, vector bool int);
   39082      vector signed int vec_vadduwm (vector signed int, vector signed int);
   39083      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
   39084      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
   39085      vector unsigned int vec_vadduwm (vector unsigned int,
   39086                                       vector unsigned int);
   39087 
   39088      vector signed short vec_vadduhm (vector bool short,
   39089                                       vector signed short);
   39090      vector signed short vec_vadduhm (vector signed short,
   39091                                       vector bool short);
   39092      vector signed short vec_vadduhm (vector signed short,
   39093                                       vector signed short);
   39094      vector unsigned short vec_vadduhm (vector bool short,
   39095                                         vector unsigned short);
   39096      vector unsigned short vec_vadduhm (vector unsigned short,
   39097                                         vector bool short);
   39098      vector unsigned short vec_vadduhm (vector unsigned short,
   39099                                         vector unsigned short);
   39100 
   39101      vector signed char vec_vaddubm (vector bool char, vector signed char);
   39102      vector signed char vec_vaddubm (vector signed char, vector bool char);
   39103      vector signed char vec_vaddubm (vector signed char, vector signed char);
   39104      vector unsigned char vec_vaddubm (vector bool char,
   39105                                        vector unsigned char);
   39106      vector unsigned char vec_vaddubm (vector unsigned char,
   39107                                        vector bool char);
   39108      vector unsigned char vec_vaddubm (vector unsigned char,
   39109                                        vector unsigned char);
   39110 
   39111      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
   39112 
   39113      vector unsigned char vec_adds (vector bool char, vector unsigned char);
   39114      vector unsigned char vec_adds (vector unsigned char, vector bool char);
   39115      vector unsigned char vec_adds (vector unsigned char,
   39116                                     vector unsigned char);
   39117      vector signed char vec_adds (vector bool char, vector signed char);
   39118      vector signed char vec_adds (vector signed char, vector bool char);
   39119      vector signed char vec_adds (vector signed char, vector signed char);
   39120      vector unsigned short vec_adds (vector bool short,
   39121                                      vector unsigned short);
   39122      vector unsigned short vec_adds (vector unsigned short,
   39123                                      vector bool short);
   39124      vector unsigned short vec_adds (vector unsigned short,
   39125                                      vector unsigned short);
   39126      vector signed short vec_adds (vector bool short, vector signed short);
   39127      vector signed short vec_adds (vector signed short, vector bool short);
   39128      vector signed short vec_adds (vector signed short, vector signed short);
   39129      vector unsigned int vec_adds (vector bool int, vector unsigned int);
   39130      vector unsigned int vec_adds (vector unsigned int, vector bool int);
   39131      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
   39132      vector signed int vec_adds (vector bool int, vector signed int);
   39133      vector signed int vec_adds (vector signed int, vector bool int);
   39134      vector signed int vec_adds (vector signed int, vector signed int);
   39135 
   39136      vector signed int vec_vaddsws (vector bool int, vector signed int);
   39137      vector signed int vec_vaddsws (vector signed int, vector bool int);
   39138      vector signed int vec_vaddsws (vector signed int, vector signed int);
   39139 
   39140      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
   39141      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
   39142      vector unsigned int vec_vadduws (vector unsigned int,
   39143                                       vector unsigned int);
   39144 
   39145      vector signed short vec_vaddshs (vector bool short,
   39146                                       vector signed short);
   39147      vector signed short vec_vaddshs (vector signed short,
   39148                                       vector bool short);
   39149      vector signed short vec_vaddshs (vector signed short,
   39150                                       vector signed short);
   39151 
   39152      vector unsigned short vec_vadduhs (vector bool short,
   39153                                         vector unsigned short);
   39154      vector unsigned short vec_vadduhs (vector unsigned short,
   39155                                         vector bool short);
   39156      vector unsigned short vec_vadduhs (vector unsigned short,
   39157                                         vector unsigned short);
   39158 
   39159      vector signed char vec_vaddsbs (vector bool char, vector signed char);
   39160      vector signed char vec_vaddsbs (vector signed char, vector bool char);
   39161      vector signed char vec_vaddsbs (vector signed char, vector signed char);
   39162 
   39163      vector unsigned char vec_vaddubs (vector bool char,
   39164                                        vector unsigned char);
   39165      vector unsigned char vec_vaddubs (vector unsigned char,
   39166                                        vector bool char);
   39167      vector unsigned char vec_vaddubs (vector unsigned char,
   39168                                        vector unsigned char);
   39169 
   39170      vector float vec_and (vector float, vector float);
   39171      vector float vec_and (vector float, vector bool int);
   39172      vector float vec_and (vector bool int, vector float);
   39173      vector bool int vec_and (vector bool int, vector bool int);
   39174      vector signed int vec_and (vector bool int, vector signed int);
   39175      vector signed int vec_and (vector signed int, vector bool int);
   39176      vector signed int vec_and (vector signed int, vector signed int);
   39177      vector unsigned int vec_and (vector bool int, vector unsigned int);
   39178      vector unsigned int vec_and (vector unsigned int, vector bool int);
   39179      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
   39180      vector bool short vec_and (vector bool short, vector bool short);
   39181      vector signed short vec_and (vector bool short, vector signed short);
   39182      vector signed short vec_and (vector signed short, vector bool short);
   39183      vector signed short vec_and (vector signed short, vector signed short);
   39184      vector unsigned short vec_and (vector bool short,
   39185                                     vector unsigned short);
   39186      vector unsigned short vec_and (vector unsigned short,
   39187                                     vector bool short);
   39188      vector unsigned short vec_and (vector unsigned short,
   39189                                     vector unsigned short);
   39190      vector signed char vec_and (vector bool char, vector signed char);
   39191      vector bool char vec_and (vector bool char, vector bool char);
   39192      vector signed char vec_and (vector signed char, vector bool char);
   39193      vector signed char vec_and (vector signed char, vector signed char);
   39194      vector unsigned char vec_and (vector bool char, vector unsigned char);
   39195      vector unsigned char vec_and (vector unsigned char, vector bool char);
   39196      vector unsigned char vec_and (vector unsigned char,
   39197                                    vector unsigned char);
   39198 
   39199      vector float vec_andc (vector float, vector float);
   39200      vector float vec_andc (vector float, vector bool int);
   39201      vector float vec_andc (vector bool int, vector float);
   39202      vector bool int vec_andc (vector bool int, vector bool int);
   39203      vector signed int vec_andc (vector bool int, vector signed int);
   39204      vector signed int vec_andc (vector signed int, vector bool int);
   39205      vector signed int vec_andc (vector signed int, vector signed int);
   39206      vector unsigned int vec_andc (vector bool int, vector unsigned int);
   39207      vector unsigned int vec_andc (vector unsigned int, vector bool int);
   39208      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
   39209      vector bool short vec_andc (vector bool short, vector bool short);
   39210      vector signed short vec_andc (vector bool short, vector signed short);
   39211      vector signed short vec_andc (vector signed short, vector bool short);
   39212      vector signed short vec_andc (vector signed short, vector signed short);
   39213      vector unsigned short vec_andc (vector bool short,
   39214                                      vector unsigned short);
   39215      vector unsigned short vec_andc (vector unsigned short,
   39216                                      vector bool short);
   39217      vector unsigned short vec_andc (vector unsigned short,
   39218                                      vector unsigned short);
   39219      vector signed char vec_andc (vector bool char, vector signed char);
   39220      vector bool char vec_andc (vector bool char, vector bool char);
   39221      vector signed char vec_andc (vector signed char, vector bool char);
   39222      vector signed char vec_andc (vector signed char, vector signed char);
   39223      vector unsigned char vec_andc (vector bool char, vector unsigned char);
   39224      vector unsigned char vec_andc (vector unsigned char, vector bool char);
   39225      vector unsigned char vec_andc (vector unsigned char,
   39226                                     vector unsigned char);
   39227 
   39228      vector unsigned char vec_avg (vector unsigned char,
   39229                                    vector unsigned char);
   39230      vector signed char vec_avg (vector signed char, vector signed char);
   39231      vector unsigned short vec_avg (vector unsigned short,
   39232                                     vector unsigned short);
   39233      vector signed short vec_avg (vector signed short, vector signed short);
   39234      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
   39235      vector signed int vec_avg (vector signed int, vector signed int);
   39236 
   39237      vector signed int vec_vavgsw (vector signed int, vector signed int);
   39238 
   39239      vector unsigned int vec_vavguw (vector unsigned int,
   39240                                      vector unsigned int);
   39241 
   39242      vector signed short vec_vavgsh (vector signed short,
   39243                                      vector signed short);
   39244 
   39245      vector unsigned short vec_vavguh (vector unsigned short,
   39246                                        vector unsigned short);
   39247 
   39248      vector signed char vec_vavgsb (vector signed char, vector signed char);
   39249 
   39250      vector unsigned char vec_vavgub (vector unsigned char,
   39251                                       vector unsigned char);
   39252 
   39253      vector float vec_copysign (vector float);
   39254 
   39255      vector float vec_ceil (vector float);
   39256 
   39257      vector signed int vec_cmpb (vector float, vector float);
   39258 
   39259      vector bool char vec_cmpeq (vector signed char, vector signed char);
   39260      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
   39261      vector bool short vec_cmpeq (vector signed short, vector signed short);
   39262      vector bool short vec_cmpeq (vector unsigned short,
   39263                                   vector unsigned short);
   39264      vector bool int vec_cmpeq (vector signed int, vector signed int);
   39265      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
   39266      vector bool int vec_cmpeq (vector float, vector float);
   39267 
   39268      vector bool int vec_vcmpeqfp (vector float, vector float);
   39269 
   39270      vector bool int vec_vcmpequw (vector signed int, vector signed int);
   39271      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
   39272 
   39273      vector bool short vec_vcmpequh (vector signed short,
   39274                                      vector signed short);
   39275      vector bool short vec_vcmpequh (vector unsigned short,
   39276                                      vector unsigned short);
   39277 
   39278      vector bool char vec_vcmpequb (vector signed char, vector signed char);
   39279      vector bool char vec_vcmpequb (vector unsigned char,
   39280                                     vector unsigned char);
   39281 
   39282      vector bool int vec_cmpge (vector float, vector float);
   39283 
   39284      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
   39285      vector bool char vec_cmpgt (vector signed char, vector signed char);
   39286      vector bool short vec_cmpgt (vector unsigned short,
   39287                                   vector unsigned short);
   39288      vector bool short vec_cmpgt (vector signed short, vector signed short);
   39289      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
   39290      vector bool int vec_cmpgt (vector signed int, vector signed int);
   39291      vector bool int vec_cmpgt (vector float, vector float);
   39292 
   39293      vector bool int vec_vcmpgtfp (vector float, vector float);
   39294 
   39295      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
   39296 
   39297      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
   39298 
   39299      vector bool short vec_vcmpgtsh (vector signed short,
   39300                                      vector signed short);
   39301 
   39302      vector bool short vec_vcmpgtuh (vector unsigned short,
   39303                                      vector unsigned short);
   39304 
   39305      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
   39306 
   39307      vector bool char vec_vcmpgtub (vector unsigned char,
   39308                                     vector unsigned char);
   39309 
   39310      vector bool int vec_cmple (vector float, vector float);
   39311 
   39312      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
   39313      vector bool char vec_cmplt (vector signed char, vector signed char);
   39314      vector bool short vec_cmplt (vector unsigned short,
   39315                                   vector unsigned short);
   39316      vector bool short vec_cmplt (vector signed short, vector signed short);
   39317      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
   39318      vector bool int vec_cmplt (vector signed int, vector signed int);
   39319      vector bool int vec_cmplt (vector float, vector float);
   39320 
   39321      vector float vec_ctf (vector unsigned int, const int);
   39322      vector float vec_ctf (vector signed int, const int);
   39323 
   39324      vector float vec_vcfsx (vector signed int, const int);
   39325 
   39326      vector float vec_vcfux (vector unsigned int, const int);
   39327 
   39328      vector signed int vec_cts (vector float, const int);
   39329 
   39330      vector unsigned int vec_ctu (vector float, const int);
   39331 
   39332      void vec_dss (const int);
   39333 
   39334      void vec_dssall (void);
   39335 
   39336      void vec_dst (const vector unsigned char *, int, const int);
   39337      void vec_dst (const vector signed char *, int, const int);
   39338      void vec_dst (const vector bool char *, int, const int);
   39339      void vec_dst (const vector unsigned short *, int, const int);
   39340      void vec_dst (const vector signed short *, int, const int);
   39341      void vec_dst (const vector bool short *, int, const int);
   39342      void vec_dst (const vector pixel *, int, const int);
   39343      void vec_dst (const vector unsigned int *, int, const int);
   39344      void vec_dst (const vector signed int *, int, const int);
   39345      void vec_dst (const vector bool int *, int, const int);
   39346      void vec_dst (const vector float *, int, const int);
   39347      void vec_dst (const unsigned char *, int, const int);
   39348      void vec_dst (const signed char *, int, const int);
   39349      void vec_dst (const unsigned short *, int, const int);
   39350      void vec_dst (const short *, int, const int);
   39351      void vec_dst (const unsigned int *, int, const int);
   39352      void vec_dst (const int *, int, const int);
   39353      void vec_dst (const unsigned long *, int, const int);
   39354      void vec_dst (const long *, int, const int);
   39355      void vec_dst (const float *, int, const int);
   39356 
   39357      void vec_dstst (const vector unsigned char *, int, const int);
   39358      void vec_dstst (const vector signed char *, int, const int);
   39359      void vec_dstst (const vector bool char *, int, const int);
   39360      void vec_dstst (const vector unsigned short *, int, const int);
   39361      void vec_dstst (const vector signed short *, int, const int);
   39362      void vec_dstst (const vector bool short *, int, const int);
   39363      void vec_dstst (const vector pixel *, int, const int);
   39364      void vec_dstst (const vector unsigned int *, int, const int);
   39365      void vec_dstst (const vector signed int *, int, const int);
   39366      void vec_dstst (const vector bool int *, int, const int);
   39367      void vec_dstst (const vector float *, int, const int);
   39368      void vec_dstst (const unsigned char *, int, const int);
   39369      void vec_dstst (const signed char *, int, const int);
   39370      void vec_dstst (const unsigned short *, int, const int);
   39371      void vec_dstst (const short *, int, const int);
   39372      void vec_dstst (const unsigned int *, int, const int);
   39373      void vec_dstst (const int *, int, const int);
   39374      void vec_dstst (const unsigned long *, int, const int);
   39375      void vec_dstst (const long *, int, const int);
   39376      void vec_dstst (const float *, int, const int);
   39377 
   39378      void vec_dststt (const vector unsigned char *, int, const int);
   39379      void vec_dststt (const vector signed char *, int, const int);
   39380      void vec_dststt (const vector bool char *, int, const int);
   39381      void vec_dststt (const vector unsigned short *, int, const int);
   39382      void vec_dststt (const vector signed short *, int, const int);
   39383      void vec_dststt (const vector bool short *, int, const int);
   39384      void vec_dststt (const vector pixel *, int, const int);
   39385      void vec_dststt (const vector unsigned int *, int, const int);
   39386      void vec_dststt (const vector signed int *, int, const int);
   39387      void vec_dststt (const vector bool int *, int, const int);
   39388      void vec_dststt (const vector float *, int, const int);
   39389      void vec_dststt (const unsigned char *, int, const int);
   39390      void vec_dststt (const signed char *, int, const int);
   39391      void vec_dststt (const unsigned short *, int, const int);
   39392      void vec_dststt (const short *, int, const int);
   39393      void vec_dststt (const unsigned int *, int, const int);
   39394      void vec_dststt (const int *, int, const int);
   39395      void vec_dststt (const unsigned long *, int, const int);
   39396      void vec_dststt (const long *, int, const int);
   39397      void vec_dststt (const float *, int, const int);
   39398 
   39399      void vec_dstt (const vector unsigned char *, int, const int);
   39400      void vec_dstt (const vector signed char *, int, const int);
   39401      void vec_dstt (const vector bool char *, int, const int);
   39402      void vec_dstt (const vector unsigned short *, int, const int);
   39403      void vec_dstt (const vector signed short *, int, const int);
   39404      void vec_dstt (const vector bool short *, int, const int);
   39405      void vec_dstt (const vector pixel *, int, const int);
   39406      void vec_dstt (const vector unsigned int *, int, const int);
   39407      void vec_dstt (const vector signed int *, int, const int);
   39408      void vec_dstt (const vector bool int *, int, const int);
   39409      void vec_dstt (const vector float *, int, const int);
   39410      void vec_dstt (const unsigned char *, int, const int);
   39411      void vec_dstt (const signed char *, int, const int);
   39412      void vec_dstt (const unsigned short *, int, const int);
   39413      void vec_dstt (const short *, int, const int);
   39414      void vec_dstt (const unsigned int *, int, const int);
   39415      void vec_dstt (const int *, int, const int);
   39416      void vec_dstt (const unsigned long *, int, const int);
   39417      void vec_dstt (const long *, int, const int);
   39418      void vec_dstt (const float *, int, const int);
   39419 
   39420      vector float vec_expte (vector float);
   39421 
   39422      vector float vec_floor (vector float);
   39423 
   39424      vector float vec_ld (int, const vector float *);
   39425      vector float vec_ld (int, const float *);
   39426      vector bool int vec_ld (int, const vector bool int *);
   39427      vector signed int vec_ld (int, const vector signed int *);
   39428      vector signed int vec_ld (int, const int *);
   39429      vector signed int vec_ld (int, const long *);
   39430      vector unsigned int vec_ld (int, const vector unsigned int *);
   39431      vector unsigned int vec_ld (int, const unsigned int *);
   39432      vector unsigned int vec_ld (int, const unsigned long *);
   39433      vector bool short vec_ld (int, const vector bool short *);
   39434      vector pixel vec_ld (int, const vector pixel *);
   39435      vector signed short vec_ld (int, const vector signed short *);
   39436      vector signed short vec_ld (int, const short *);
   39437      vector unsigned short vec_ld (int, const vector unsigned short *);
   39438      vector unsigned short vec_ld (int, const unsigned short *);
   39439      vector bool char vec_ld (int, const vector bool char *);
   39440      vector signed char vec_ld (int, const vector signed char *);
   39441      vector signed char vec_ld (int, const signed char *);
   39442      vector unsigned char vec_ld (int, const vector unsigned char *);
   39443      vector unsigned char vec_ld (int, const unsigned char *);
   39444 
   39445      vector signed char vec_lde (int, const signed char *);
   39446      vector unsigned char vec_lde (int, const unsigned char *);
   39447      vector signed short vec_lde (int, const short *);
   39448      vector unsigned short vec_lde (int, const unsigned short *);
   39449      vector float vec_lde (int, const float *);
   39450      vector signed int vec_lde (int, const int *);
   39451      vector unsigned int vec_lde (int, const unsigned int *);
   39452      vector signed int vec_lde (int, const long *);
   39453      vector unsigned int vec_lde (int, const unsigned long *);
   39454 
   39455      vector float vec_lvewx (int, float *);
   39456      vector signed int vec_lvewx (int, int *);
   39457      vector unsigned int vec_lvewx (int, unsigned int *);
   39458      vector signed int vec_lvewx (int, long *);
   39459      vector unsigned int vec_lvewx (int, unsigned long *);
   39460 
   39461      vector signed short vec_lvehx (int, short *);
   39462      vector unsigned short vec_lvehx (int, unsigned short *);
   39463 
   39464      vector signed char vec_lvebx (int, char *);
   39465      vector unsigned char vec_lvebx (int, unsigned char *);
   39466 
   39467      vector float vec_ldl (int, const vector float *);
   39468      vector float vec_ldl (int, const float *);
   39469      vector bool int vec_ldl (int, const vector bool int *);
   39470      vector signed int vec_ldl (int, const vector signed int *);
   39471      vector signed int vec_ldl (int, const int *);
   39472      vector signed int vec_ldl (int, const long *);
   39473      vector unsigned int vec_ldl (int, const vector unsigned int *);
   39474      vector unsigned int vec_ldl (int, const unsigned int *);
   39475      vector unsigned int vec_ldl (int, const unsigned long *);
   39476      vector bool short vec_ldl (int, const vector bool short *);
   39477      vector pixel vec_ldl (int, const vector pixel *);
   39478      vector signed short vec_ldl (int, const vector signed short *);
   39479      vector signed short vec_ldl (int, const short *);
   39480      vector unsigned short vec_ldl (int, const vector unsigned short *);
   39481      vector unsigned short vec_ldl (int, const unsigned short *);
   39482      vector bool char vec_ldl (int, const vector bool char *);
   39483      vector signed char vec_ldl (int, const vector signed char *);
   39484      vector signed char vec_ldl (int, const signed char *);
   39485      vector unsigned char vec_ldl (int, const vector unsigned char *);
   39486      vector unsigned char vec_ldl (int, const unsigned char *);
   39487 
   39488      vector float vec_loge (vector float);
   39489 
   39490      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
   39491      vector unsigned char vec_lvsl (int, const volatile signed char *);
   39492      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
   39493      vector unsigned char vec_lvsl (int, const volatile short *);
   39494      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
   39495      vector unsigned char vec_lvsl (int, const volatile int *);
   39496      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
   39497      vector unsigned char vec_lvsl (int, const volatile long *);
   39498      vector unsigned char vec_lvsl (int, const volatile float *);
   39499 
   39500      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
   39501      vector unsigned char vec_lvsr (int, const volatile signed char *);
   39502      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
   39503      vector unsigned char vec_lvsr (int, const volatile short *);
   39504      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
   39505      vector unsigned char vec_lvsr (int, const volatile int *);
   39506      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
   39507      vector unsigned char vec_lvsr (int, const volatile long *);
   39508      vector unsigned char vec_lvsr (int, const volatile float *);
   39509 
   39510      vector float vec_madd (vector float, vector float, vector float);
   39511 
   39512      vector signed short vec_madds (vector signed short,
   39513                                     vector signed short,
   39514                                     vector signed short);
   39515 
   39516      vector unsigned char vec_max (vector bool char, vector unsigned char);
   39517      vector unsigned char vec_max (vector unsigned char, vector bool char);
   39518      vector unsigned char vec_max (vector unsigned char,
   39519                                    vector unsigned char);
   39520      vector signed char vec_max (vector bool char, vector signed char);
   39521      vector signed char vec_max (vector signed char, vector bool char);
   39522      vector signed char vec_max (vector signed char, vector signed char);
   39523      vector unsigned short vec_max (vector bool short,
   39524                                     vector unsigned short);
   39525      vector unsigned short vec_max (vector unsigned short,
   39526                                     vector bool short);
   39527      vector unsigned short vec_max (vector unsigned short,
   39528                                     vector unsigned short);
   39529      vector signed short vec_max (vector bool short, vector signed short);
   39530      vector signed short vec_max (vector signed short, vector bool short);
   39531      vector signed short vec_max (vector signed short, vector signed short);
   39532      vector unsigned int vec_max (vector bool int, vector unsigned int);
   39533      vector unsigned int vec_max (vector unsigned int, vector bool int);
   39534      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
   39535      vector signed int vec_max (vector bool int, vector signed int);
   39536      vector signed int vec_max (vector signed int, vector bool int);
   39537      vector signed int vec_max (vector signed int, vector signed int);
   39538      vector float vec_max (vector float, vector float);
   39539 
   39540      vector float vec_vmaxfp (vector float, vector float);
   39541 
   39542      vector signed int vec_vmaxsw (vector bool int, vector signed int);
   39543      vector signed int vec_vmaxsw (vector signed int, vector bool int);
   39544      vector signed int vec_vmaxsw (vector signed int, vector signed int);
   39545 
   39546      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
   39547      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
   39548      vector unsigned int vec_vmaxuw (vector unsigned int,
   39549                                      vector unsigned int);
   39550 
   39551      vector signed short vec_vmaxsh (vector bool short, vector signed short);
   39552      vector signed short vec_vmaxsh (vector signed short, vector bool short);
   39553      vector signed short vec_vmaxsh (vector signed short,
   39554                                      vector signed short);
   39555 
   39556      vector unsigned short vec_vmaxuh (vector bool short,
   39557                                        vector unsigned short);
   39558      vector unsigned short vec_vmaxuh (vector unsigned short,
   39559                                        vector bool short);
   39560      vector unsigned short vec_vmaxuh (vector unsigned short,
   39561                                        vector unsigned short);
   39562 
   39563      vector signed char vec_vmaxsb (vector bool char, vector signed char);
   39564      vector signed char vec_vmaxsb (vector signed char, vector bool char);
   39565      vector signed char vec_vmaxsb (vector signed char, vector signed char);
   39566 
   39567      vector unsigned char vec_vmaxub (vector bool char,
   39568                                       vector unsigned char);
   39569      vector unsigned char vec_vmaxub (vector unsigned char,
   39570                                       vector bool char);
   39571      vector unsigned char vec_vmaxub (vector unsigned char,
   39572                                       vector unsigned char);
   39573 
   39574      vector bool char vec_mergeh (vector bool char, vector bool char);
   39575      vector signed char vec_mergeh (vector signed char, vector signed char);
   39576      vector unsigned char vec_mergeh (vector unsigned char,
   39577                                       vector unsigned char);
   39578      vector bool short vec_mergeh (vector bool short, vector bool short);
   39579      vector pixel vec_mergeh (vector pixel, vector pixel);
   39580      vector signed short vec_mergeh (vector signed short,
   39581                                      vector signed short);
   39582      vector unsigned short vec_mergeh (vector unsigned short,
   39583                                        vector unsigned short);
   39584      vector float vec_mergeh (vector float, vector float);
   39585      vector bool int vec_mergeh (vector bool int, vector bool int);
   39586      vector signed int vec_mergeh (vector signed int, vector signed int);
   39587      vector unsigned int vec_mergeh (vector unsigned int,
   39588                                      vector unsigned int);
   39589 
   39590      vector float vec_vmrghw (vector float, vector float);
   39591      vector bool int vec_vmrghw (vector bool int, vector bool int);
   39592      vector signed int vec_vmrghw (vector signed int, vector signed int);
   39593      vector unsigned int vec_vmrghw (vector unsigned int,
   39594                                      vector unsigned int);
   39595 
   39596      vector bool short vec_vmrghh (vector bool short, vector bool short);
   39597      vector signed short vec_vmrghh (vector signed short,
   39598                                      vector signed short);
   39599      vector unsigned short vec_vmrghh (vector unsigned short,
   39600                                        vector unsigned short);
   39601      vector pixel vec_vmrghh (vector pixel, vector pixel);
   39602 
   39603      vector bool char vec_vmrghb (vector bool char, vector bool char);
   39604      vector signed char vec_vmrghb (vector signed char, vector signed char);
   39605      vector unsigned char vec_vmrghb (vector unsigned char,
   39606                                       vector unsigned char);
   39607 
   39608      vector bool char vec_mergel (vector bool char, vector bool char);
   39609      vector signed char vec_mergel (vector signed char, vector signed char);
   39610      vector unsigned char vec_mergel (vector unsigned char,
   39611                                       vector unsigned char);
   39612      vector bool short vec_mergel (vector bool short, vector bool short);
   39613      vector pixel vec_mergel (vector pixel, vector pixel);
   39614      vector signed short vec_mergel (vector signed short,
   39615                                      vector signed short);
   39616      vector unsigned short vec_mergel (vector unsigned short,
   39617                                        vector unsigned short);
   39618      vector float vec_mergel (vector float, vector float);
   39619      vector bool int vec_mergel (vector bool int, vector bool int);
   39620      vector signed int vec_mergel (vector signed int, vector signed int);
   39621      vector unsigned int vec_mergel (vector unsigned int,
   39622                                      vector unsigned int);
   39623 
   39624      vector float vec_vmrglw (vector float, vector float);
   39625      vector signed int vec_vmrglw (vector signed int, vector signed int);
   39626      vector unsigned int vec_vmrglw (vector unsigned int,
   39627                                      vector unsigned int);
   39628      vector bool int vec_vmrglw (vector bool int, vector bool int);
   39629 
   39630      vector bool short vec_vmrglh (vector bool short, vector bool short);
   39631      vector signed short vec_vmrglh (vector signed short,
   39632                                      vector signed short);
   39633      vector unsigned short vec_vmrglh (vector unsigned short,
   39634                                        vector unsigned short);
   39635      vector pixel vec_vmrglh (vector pixel, vector pixel);
   39636 
   39637      vector bool char vec_vmrglb (vector bool char, vector bool char);
   39638      vector signed char vec_vmrglb (vector signed char, vector signed char);
   39639      vector unsigned char vec_vmrglb (vector unsigned char,
   39640                                       vector unsigned char);
   39641 
   39642      vector unsigned short vec_mfvscr (void);
   39643 
   39644      vector unsigned char vec_min (vector bool char, vector unsigned char);
   39645      vector unsigned char vec_min (vector unsigned char, vector bool char);
   39646      vector unsigned char vec_min (vector unsigned char,
   39647                                    vector unsigned char);
   39648      vector signed char vec_min (vector bool char, vector signed char);
   39649      vector signed char vec_min (vector signed char, vector bool char);
   39650      vector signed char vec_min (vector signed char, vector signed char);
   39651      vector unsigned short vec_min (vector bool short,
   39652                                     vector unsigned short);
   39653      vector unsigned short vec_min (vector unsigned short,
   39654                                     vector bool short);
   39655      vector unsigned short vec_min (vector unsigned short,
   39656                                     vector unsigned short);
   39657      vector signed short vec_min (vector bool short, vector signed short);
   39658      vector signed short vec_min (vector signed short, vector bool short);
   39659      vector signed short vec_min (vector signed short, vector signed short);
   39660      vector unsigned int vec_min (vector bool int, vector unsigned int);
   39661      vector unsigned int vec_min (vector unsigned int, vector bool int);
   39662      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
   39663      vector signed int vec_min (vector bool int, vector signed int);
   39664      vector signed int vec_min (vector signed int, vector bool int);
   39665      vector signed int vec_min (vector signed int, vector signed int);
   39666      vector float vec_min (vector float, vector float);
   39667 
   39668      vector float vec_vminfp (vector float, vector float);
   39669 
   39670      vector signed int vec_vminsw (vector bool int, vector signed int);
   39671      vector signed int vec_vminsw (vector signed int, vector bool int);
   39672      vector signed int vec_vminsw (vector signed int, vector signed int);
   39673 
   39674      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
   39675      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
   39676      vector unsigned int vec_vminuw (vector unsigned int,
   39677                                      vector unsigned int);
   39678 
   39679      vector signed short vec_vminsh (vector bool short, vector signed short);
   39680      vector signed short vec_vminsh (vector signed short, vector bool short);
   39681      vector signed short vec_vminsh (vector signed short,
   39682                                      vector signed short);
   39683 
   39684      vector unsigned short vec_vminuh (vector bool short,
   39685                                        vector unsigned short);
   39686      vector unsigned short vec_vminuh (vector unsigned short,
   39687                                        vector bool short);
   39688      vector unsigned short vec_vminuh (vector unsigned short,
   39689                                        vector unsigned short);
   39690 
   39691      vector signed char vec_vminsb (vector bool char, vector signed char);
   39692      vector signed char vec_vminsb (vector signed char, vector bool char);
   39693      vector signed char vec_vminsb (vector signed char, vector signed char);
   39694 
   39695      vector unsigned char vec_vminub (vector bool char,
   39696                                       vector unsigned char);
   39697      vector unsigned char vec_vminub (vector unsigned char,
   39698                                       vector bool char);
   39699      vector unsigned char vec_vminub (vector unsigned char,
   39700                                       vector unsigned char);
   39701 
   39702      vector signed short vec_mladd (vector signed short,
   39703                                     vector signed short,
   39704                                     vector signed short);
   39705      vector signed short vec_mladd (vector signed short,
   39706                                     vector unsigned short,
   39707                                     vector unsigned short);
   39708      vector signed short vec_mladd (vector unsigned short,
   39709                                     vector signed short,
   39710                                     vector signed short);
   39711      vector unsigned short vec_mladd (vector unsigned short,
   39712                                       vector unsigned short,
   39713                                       vector unsigned short);
   39714 
   39715      vector signed short vec_mradds (vector signed short,
   39716                                      vector signed short,
   39717                                      vector signed short);
   39718 
   39719      vector unsigned int vec_msum (vector unsigned char,
   39720                                    vector unsigned char,
   39721                                    vector unsigned int);
   39722      vector signed int vec_msum (vector signed char,
   39723                                  vector unsigned char,
   39724                                  vector signed int);
   39725      vector unsigned int vec_msum (vector unsigned short,
   39726                                    vector unsigned short,
   39727                                    vector unsigned int);
   39728      vector signed int vec_msum (vector signed short,
   39729                                  vector signed short,
   39730                                  vector signed int);
   39731 
   39732      vector signed int vec_vmsumshm (vector signed short,
   39733                                      vector signed short,
   39734                                      vector signed int);
   39735 
   39736      vector unsigned int vec_vmsumuhm (vector unsigned short,
   39737                                        vector unsigned short,
   39738                                        vector unsigned int);
   39739 
   39740      vector signed int vec_vmsummbm (vector signed char,
   39741                                      vector unsigned char,
   39742                                      vector signed int);
   39743 
   39744      vector unsigned int vec_vmsumubm (vector unsigned char,
   39745                                        vector unsigned char,
   39746                                        vector unsigned int);
   39747 
   39748      vector unsigned int vec_msums (vector unsigned short,
   39749                                     vector unsigned short,
   39750                                     vector unsigned int);
   39751      vector signed int vec_msums (vector signed short,
   39752                                   vector signed short,
   39753                                   vector signed int);
   39754 
   39755      vector signed int vec_vmsumshs (vector signed short,
   39756                                      vector signed short,
   39757                                      vector signed int);
   39758 
   39759      vector unsigned int vec_vmsumuhs (vector unsigned short,
   39760                                        vector unsigned short,
   39761                                        vector unsigned int);
   39762 
   39763      void vec_mtvscr (vector signed int);
   39764      void vec_mtvscr (vector unsigned int);
   39765      void vec_mtvscr (vector bool int);
   39766      void vec_mtvscr (vector signed short);
   39767      void vec_mtvscr (vector unsigned short);
   39768      void vec_mtvscr (vector bool short);
   39769      void vec_mtvscr (vector pixel);
   39770      void vec_mtvscr (vector signed char);
   39771      void vec_mtvscr (vector unsigned char);
   39772      void vec_mtvscr (vector bool char);
   39773 
   39774      vector unsigned short vec_mule (vector unsigned char,
   39775                                      vector unsigned char);
   39776      vector signed short vec_mule (vector signed char,
   39777                                    vector signed char);
   39778      vector unsigned int vec_mule (vector unsigned short,
   39779                                    vector unsigned short);
   39780      vector signed int vec_mule (vector signed short, vector signed short);
   39781 
   39782      vector signed int vec_vmulesh (vector signed short,
   39783                                     vector signed short);
   39784 
   39785      vector unsigned int vec_vmuleuh (vector unsigned short,
   39786                                       vector unsigned short);
   39787 
   39788      vector signed short vec_vmulesb (vector signed char,
   39789                                       vector signed char);
   39790 
   39791      vector unsigned short vec_vmuleub (vector unsigned char,
   39792                                        vector unsigned char);
   39793 
   39794      vector unsigned short vec_mulo (vector unsigned char,
   39795                                      vector unsigned char);
   39796      vector signed short vec_mulo (vector signed char, vector signed char);
   39797      vector unsigned int vec_mulo (vector unsigned short,
   39798                                    vector unsigned short);
   39799      vector signed int vec_mulo (vector signed short, vector signed short);
   39800 
   39801      vector signed int vec_vmulosh (vector signed short,
   39802                                     vector signed short);
   39803 
   39804      vector unsigned int vec_vmulouh (vector unsigned short,
   39805                                       vector unsigned short);
   39806 
   39807      vector signed short vec_vmulosb (vector signed char,
   39808                                       vector signed char);
   39809 
   39810      vector unsigned short vec_vmuloub (vector unsigned char,
   39811                                         vector unsigned char);
   39812 
   39813      vector float vec_nmsub (vector float, vector float, vector float);
   39814 
   39815      vector float vec_nor (vector float, vector float);
   39816      vector signed int vec_nor (vector signed int, vector signed int);
   39817      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
   39818      vector bool int vec_nor (vector bool int, vector bool int);
   39819      vector signed short vec_nor (vector signed short, vector signed short);
   39820      vector unsigned short vec_nor (vector unsigned short,
   39821                                     vector unsigned short);
   39822      vector bool short vec_nor (vector bool short, vector bool short);
   39823      vector signed char vec_nor (vector signed char, vector signed char);
   39824      vector unsigned char vec_nor (vector unsigned char,
   39825                                    vector unsigned char);
   39826      vector bool char vec_nor (vector bool char, vector bool char);
   39827 
   39828      vector float vec_or (vector float, vector float);
   39829      vector float vec_or (vector float, vector bool int);
   39830      vector float vec_or (vector bool int, vector float);
   39831      vector bool int vec_or (vector bool int, vector bool int);
   39832      vector signed int vec_or (vector bool int, vector signed int);
   39833      vector signed int vec_or (vector signed int, vector bool int);
   39834      vector signed int vec_or (vector signed int, vector signed int);
   39835      vector unsigned int vec_or (vector bool int, vector unsigned int);
   39836      vector unsigned int vec_or (vector unsigned int, vector bool int);
   39837      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
   39838      vector bool short vec_or (vector bool short, vector bool short);
   39839      vector signed short vec_or (vector bool short, vector signed short);
   39840      vector signed short vec_or (vector signed short, vector bool short);
   39841      vector signed short vec_or (vector signed short, vector signed short);
   39842      vector unsigned short vec_or (vector bool short, vector unsigned short);
   39843      vector unsigned short vec_or (vector unsigned short, vector bool short);
   39844      vector unsigned short vec_or (vector unsigned short,
   39845                                    vector unsigned short);
   39846      vector signed char vec_or (vector bool char, vector signed char);
   39847      vector bool char vec_or (vector bool char, vector bool char);
   39848      vector signed char vec_or (vector signed char, vector bool char);
   39849      vector signed char vec_or (vector signed char, vector signed char);
   39850      vector unsigned char vec_or (vector bool char, vector unsigned char);
   39851      vector unsigned char vec_or (vector unsigned char, vector bool char);
   39852      vector unsigned char vec_or (vector unsigned char,
   39853                                   vector unsigned char);
   39854 
   39855      vector signed char vec_pack (vector signed short, vector signed short);
   39856      vector unsigned char vec_pack (vector unsigned short,
   39857                                     vector unsigned short);
   39858      vector bool char vec_pack (vector bool short, vector bool short);
   39859      vector signed short vec_pack (vector signed int, vector signed int);
   39860      vector unsigned short vec_pack (vector unsigned int,
   39861                                      vector unsigned int);
   39862      vector bool short vec_pack (vector bool int, vector bool int);
   39863 
   39864      vector bool short vec_vpkuwum (vector bool int, vector bool int);
   39865      vector signed short vec_vpkuwum (vector signed int, vector signed int);
   39866      vector unsigned short vec_vpkuwum (vector unsigned int,
   39867                                         vector unsigned int);
   39868 
   39869      vector bool char vec_vpkuhum (vector bool short, vector bool short);
   39870      vector signed char vec_vpkuhum (vector signed short,
   39871                                      vector signed short);
   39872      vector unsigned char vec_vpkuhum (vector unsigned short,
   39873                                        vector unsigned short);
   39874 
   39875      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
   39876 
   39877      vector unsigned char vec_packs (vector unsigned short,
   39878                                      vector unsigned short);
   39879      vector signed char vec_packs (vector signed short, vector signed short);
   39880      vector unsigned short vec_packs (vector unsigned int,
   39881                                       vector unsigned int);
   39882      vector signed short vec_packs (vector signed int, vector signed int);
   39883 
   39884      vector signed short vec_vpkswss (vector signed int, vector signed int);
   39885 
   39886      vector unsigned short vec_vpkuwus (vector unsigned int,
   39887                                         vector unsigned int);
   39888 
   39889      vector signed char vec_vpkshss (vector signed short,
   39890                                      vector signed short);
   39891 
   39892      vector unsigned char vec_vpkuhus (vector unsigned short,
   39893                                        vector unsigned short);
   39894 
   39895      vector unsigned char vec_packsu (vector unsigned short,
   39896                                       vector unsigned short);
   39897      vector unsigned char vec_packsu (vector signed short,
   39898                                       vector signed short);
   39899      vector unsigned short vec_packsu (vector unsigned int,
   39900                                        vector unsigned int);
   39901      vector unsigned short vec_packsu (vector signed int, vector signed int);
   39902 
   39903      vector unsigned short vec_vpkswus (vector signed int,
   39904                                         vector signed int);
   39905 
   39906      vector unsigned char vec_vpkshus (vector signed short,
   39907                                        vector signed short);
   39908 
   39909      vector float vec_perm (vector float,
   39910                             vector float,
   39911                             vector unsigned char);
   39912      vector signed int vec_perm (vector signed int,
   39913                                  vector signed int,
   39914                                  vector unsigned char);
   39915      vector unsigned int vec_perm (vector unsigned int,
   39916                                    vector unsigned int,
   39917                                    vector unsigned char);
   39918      vector bool int vec_perm (vector bool int,
   39919                                vector bool int,
   39920                                vector unsigned char);
   39921      vector signed short vec_perm (vector signed short,
   39922                                    vector signed short,
   39923                                    vector unsigned char);
   39924      vector unsigned short vec_perm (vector unsigned short,
   39925                                      vector unsigned short,
   39926                                      vector unsigned char);
   39927      vector bool short vec_perm (vector bool short,
   39928                                  vector bool short,
   39929                                  vector unsigned char);
   39930      vector pixel vec_perm (vector pixel,
   39931                             vector pixel,
   39932                             vector unsigned char);
   39933      vector signed char vec_perm (vector signed char,
   39934                                   vector signed char,
   39935                                   vector unsigned char);
   39936      vector unsigned char vec_perm (vector unsigned char,
   39937                                     vector unsigned char,
   39938                                     vector unsigned char);
   39939      vector bool char vec_perm (vector bool char,
   39940                                 vector bool char,
   39941                                 vector unsigned char);
   39942 
   39943      vector float vec_re (vector float);
   39944 
   39945      vector signed char vec_rl (vector signed char,
   39946                                 vector unsigned char);
   39947      vector unsigned char vec_rl (vector unsigned char,
   39948                                   vector unsigned char);
   39949      vector signed short vec_rl (vector signed short, vector unsigned short);
   39950      vector unsigned short vec_rl (vector unsigned short,
   39951                                    vector unsigned short);
   39952      vector signed int vec_rl (vector signed int, vector unsigned int);
   39953      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
   39954 
   39955      vector signed int vec_vrlw (vector signed int, vector unsigned int);
   39956      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
   39957 
   39958      vector signed short vec_vrlh (vector signed short,
   39959                                    vector unsigned short);
   39960      vector unsigned short vec_vrlh (vector unsigned short,
   39961                                      vector unsigned short);
   39962 
   39963      vector signed char vec_vrlb (vector signed char, vector unsigned char);
   39964      vector unsigned char vec_vrlb (vector unsigned char,
   39965                                     vector unsigned char);
   39966 
   39967      vector float vec_round (vector float);
   39968 
   39969      vector float vec_recip (vector float, vector float);
   39970 
   39971      vector float vec_rsqrt (vector float);
   39972 
   39973      vector float vec_rsqrte (vector float);
   39974 
   39975      vector float vec_sel (vector float, vector float, vector bool int);
   39976      vector float vec_sel (vector float, vector float, vector unsigned int);
   39977      vector signed int vec_sel (vector signed int,
   39978                                 vector signed int,
   39979                                 vector bool int);
   39980      vector signed int vec_sel (vector signed int,
   39981                                 vector signed int,
   39982                                 vector unsigned int);
   39983      vector unsigned int vec_sel (vector unsigned int,
   39984                                   vector unsigned int,
   39985                                   vector bool int);
   39986      vector unsigned int vec_sel (vector unsigned int,
   39987                                   vector unsigned int,
   39988                                   vector unsigned int);
   39989      vector bool int vec_sel (vector bool int,
   39990                               vector bool int,
   39991                               vector bool int);
   39992      vector bool int vec_sel (vector bool int,
   39993                               vector bool int,
   39994                               vector unsigned int);
   39995      vector signed short vec_sel (vector signed short,
   39996                                   vector signed short,
   39997                                   vector bool short);
   39998      vector signed short vec_sel (vector signed short,
   39999                                   vector signed short,
   40000                                   vector unsigned short);
   40001      vector unsigned short vec_sel (vector unsigned short,
   40002                                     vector unsigned short,
   40003                                     vector bool short);
   40004      vector unsigned short vec_sel (vector unsigned short,
   40005                                     vector unsigned short,
   40006                                     vector unsigned short);
   40007      vector bool short vec_sel (vector bool short,
   40008                                 vector bool short,
   40009                                 vector bool short);
   40010      vector bool short vec_sel (vector bool short,
   40011                                 vector bool short,
   40012                                 vector unsigned short);
   40013      vector signed char vec_sel (vector signed char,
   40014                                  vector signed char,
   40015                                  vector bool char);
   40016      vector signed char vec_sel (vector signed char,
   40017                                  vector signed char,
   40018                                  vector unsigned char);
   40019      vector unsigned char vec_sel (vector unsigned char,
   40020                                    vector unsigned char,
   40021                                    vector bool char);
   40022      vector unsigned char vec_sel (vector unsigned char,
   40023                                    vector unsigned char,
   40024                                    vector unsigned char);
   40025      vector bool char vec_sel (vector bool char,
   40026                                vector bool char,
   40027                                vector bool char);
   40028      vector bool char vec_sel (vector bool char,
   40029                                vector bool char,
   40030                                vector unsigned char);
   40031 
   40032      vector signed char vec_sl (vector signed char,
   40033                                 vector unsigned char);
   40034      vector unsigned char vec_sl (vector unsigned char,
   40035                                   vector unsigned char);
   40036      vector signed short vec_sl (vector signed short, vector unsigned short);
   40037      vector unsigned short vec_sl (vector unsigned short,
   40038                                    vector unsigned short);
   40039      vector signed int vec_sl (vector signed int, vector unsigned int);
   40040      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
   40041 
   40042      vector signed int vec_vslw (vector signed int, vector unsigned int);
   40043      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
   40044 
   40045      vector signed short vec_vslh (vector signed short,
   40046                                    vector unsigned short);
   40047      vector unsigned short vec_vslh (vector unsigned short,
   40048                                      vector unsigned short);
   40049 
   40050      vector signed char vec_vslb (vector signed char, vector unsigned char);
   40051      vector unsigned char vec_vslb (vector unsigned char,
   40052                                     vector unsigned char);
   40053 
   40054      vector float vec_sld (vector float, vector float, const int);
   40055      vector signed int vec_sld (vector signed int,
   40056                                 vector signed int,
   40057                                 const int);
   40058      vector unsigned int vec_sld (vector unsigned int,
   40059                                   vector unsigned int,
   40060                                   const int);
   40061      vector bool int vec_sld (vector bool int,
   40062                               vector bool int,
   40063                               const int);
   40064      vector signed short vec_sld (vector signed short,
   40065                                   vector signed short,
   40066                                   const int);
   40067      vector unsigned short vec_sld (vector unsigned short,
   40068                                     vector unsigned short,
   40069                                     const int);
   40070      vector bool short vec_sld (vector bool short,
   40071                                 vector bool short,
   40072                                 const int);
   40073      vector pixel vec_sld (vector pixel,
   40074                            vector pixel,
   40075                            const int);
   40076      vector signed char vec_sld (vector signed char,
   40077                                  vector signed char,
   40078                                  const int);
   40079      vector unsigned char vec_sld (vector unsigned char,
   40080                                    vector unsigned char,
   40081                                    const int);
   40082      vector bool char vec_sld (vector bool char,
   40083                                vector bool char,
   40084                                const int);
   40085 
   40086      vector signed int vec_sll (vector signed int,
   40087                                 vector unsigned int);
   40088      vector signed int vec_sll (vector signed int,
   40089                                 vector unsigned short);
   40090      vector signed int vec_sll (vector signed int,
   40091                                 vector unsigned char);
   40092      vector unsigned int vec_sll (vector unsigned int,
   40093                                   vector unsigned int);
   40094      vector unsigned int vec_sll (vector unsigned int,
   40095                                   vector unsigned short);
   40096      vector unsigned int vec_sll (vector unsigned int,
   40097                                   vector unsigned char);
   40098      vector bool int vec_sll (vector bool int,
   40099                               vector unsigned int);
   40100      vector bool int vec_sll (vector bool int,
   40101                               vector unsigned short);
   40102      vector bool int vec_sll (vector bool int,
   40103                               vector unsigned char);
   40104      vector signed short vec_sll (vector signed short,
   40105                                   vector unsigned int);
   40106      vector signed short vec_sll (vector signed short,
   40107                                   vector unsigned short);
   40108      vector signed short vec_sll (vector signed short,
   40109                                   vector unsigned char);
   40110      vector unsigned short vec_sll (vector unsigned short,
   40111                                     vector unsigned int);
   40112      vector unsigned short vec_sll (vector unsigned short,
   40113                                     vector unsigned short);
   40114      vector unsigned short vec_sll (vector unsigned short,
   40115                                     vector unsigned char);
   40116      vector bool short vec_sll (vector bool short, vector unsigned int);
   40117      vector bool short vec_sll (vector bool short, vector unsigned short);
   40118      vector bool short vec_sll (vector bool short, vector unsigned char);
   40119      vector pixel vec_sll (vector pixel, vector unsigned int);
   40120      vector pixel vec_sll (vector pixel, vector unsigned short);
   40121      vector pixel vec_sll (vector pixel, vector unsigned char);
   40122      vector signed char vec_sll (vector signed char, vector unsigned int);
   40123      vector signed char vec_sll (vector signed char, vector unsigned short);
   40124      vector signed char vec_sll (vector signed char, vector unsigned char);
   40125      vector unsigned char vec_sll (vector unsigned char,
   40126                                    vector unsigned int);
   40127      vector unsigned char vec_sll (vector unsigned char,
   40128                                    vector unsigned short);
   40129      vector unsigned char vec_sll (vector unsigned char,
   40130                                    vector unsigned char);
   40131      vector bool char vec_sll (vector bool char, vector unsigned int);
   40132      vector bool char vec_sll (vector bool char, vector unsigned short);
   40133      vector bool char vec_sll (vector bool char, vector unsigned char);
   40134 
   40135      vector float vec_slo (vector float, vector signed char);
   40136      vector float vec_slo (vector float, vector unsigned char);
   40137      vector signed int vec_slo (vector signed int, vector signed char);
   40138      vector signed int vec_slo (vector signed int, vector unsigned char);
   40139      vector unsigned int vec_slo (vector unsigned int, vector signed char);
   40140      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
   40141      vector signed short vec_slo (vector signed short, vector signed char);
   40142      vector signed short vec_slo (vector signed short, vector unsigned char);
   40143      vector unsigned short vec_slo (vector unsigned short,
   40144                                     vector signed char);
   40145      vector unsigned short vec_slo (vector unsigned short,
   40146                                     vector unsigned char);
   40147      vector pixel vec_slo (vector pixel, vector signed char);
   40148      vector pixel vec_slo (vector pixel, vector unsigned char);
   40149      vector signed char vec_slo (vector signed char, vector signed char);
   40150      vector signed char vec_slo (vector signed char, vector unsigned char);
   40151      vector unsigned char vec_slo (vector unsigned char, vector signed char);
   40152      vector unsigned char vec_slo (vector unsigned char,
   40153                                    vector unsigned char);
   40154 
   40155      vector signed char vec_splat (vector signed char, const int);
   40156      vector unsigned char vec_splat (vector unsigned char, const int);
   40157      vector bool char vec_splat (vector bool char, const int);
   40158      vector signed short vec_splat (vector signed short, const int);
   40159      vector unsigned short vec_splat (vector unsigned short, const int);
   40160      vector bool short vec_splat (vector bool short, const int);
   40161      vector pixel vec_splat (vector pixel, const int);
   40162      vector float vec_splat (vector float, const int);
   40163      vector signed int vec_splat (vector signed int, const int);
   40164      vector unsigned int vec_splat (vector unsigned int, const int);
   40165      vector bool int vec_splat (vector bool int, const int);
   40166 
   40167      vector float vec_vspltw (vector float, const int);
   40168      vector signed int vec_vspltw (vector signed int, const int);
   40169      vector unsigned int vec_vspltw (vector unsigned int, const int);
   40170      vector bool int vec_vspltw (vector bool int, const int);
   40171 
   40172      vector bool short vec_vsplth (vector bool short, const int);
   40173      vector signed short vec_vsplth (vector signed short, const int);
   40174      vector unsigned short vec_vsplth (vector unsigned short, const int);
   40175      vector pixel vec_vsplth (vector pixel, const int);
   40176 
   40177      vector signed char vec_vspltb (vector signed char, const int);
   40178      vector unsigned char vec_vspltb (vector unsigned char, const int);
   40179      vector bool char vec_vspltb (vector bool char, const int);
   40180 
   40181      vector signed char vec_splat_s8 (const int);
   40182 
   40183      vector signed short vec_splat_s16 (const int);
   40184 
   40185      vector signed int vec_splat_s32 (const int);
   40186 
   40187      vector unsigned char vec_splat_u8 (const int);
   40188 
   40189      vector unsigned short vec_splat_u16 (const int);
   40190 
   40191      vector unsigned int vec_splat_u32 (const int);
   40192 
   40193      vector signed char vec_sr (vector signed char, vector unsigned char);
   40194      vector unsigned char vec_sr (vector unsigned char,
   40195                                   vector unsigned char);
   40196      vector signed short vec_sr (vector signed short,
   40197                                  vector unsigned short);
   40198      vector unsigned short vec_sr (vector unsigned short,
   40199                                    vector unsigned short);
   40200      vector signed int vec_sr (vector signed int, vector unsigned int);
   40201      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
   40202 
   40203      vector signed int vec_vsrw (vector signed int, vector unsigned int);
   40204      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
   40205 
   40206      vector signed short vec_vsrh (vector signed short,
   40207                                    vector unsigned short);
   40208      vector unsigned short vec_vsrh (vector unsigned short,
   40209                                      vector unsigned short);
   40210 
   40211      vector signed char vec_vsrb (vector signed char, vector unsigned char);
   40212      vector unsigned char vec_vsrb (vector unsigned char,
   40213                                     vector unsigned char);
   40214 
   40215      vector signed char vec_sra (vector signed char, vector unsigned char);
   40216      vector unsigned char vec_sra (vector unsigned char,
   40217                                    vector unsigned char);
   40218      vector signed short vec_sra (vector signed short,
   40219                                   vector unsigned short);
   40220      vector unsigned short vec_sra (vector unsigned short,
   40221                                     vector unsigned short);
   40222      vector signed int vec_sra (vector signed int, vector unsigned int);
   40223      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
   40224 
   40225      vector signed int vec_vsraw (vector signed int, vector unsigned int);
   40226      vector unsigned int vec_vsraw (vector unsigned int,
   40227                                     vector unsigned int);
   40228 
   40229      vector signed short vec_vsrah (vector signed short,
   40230                                     vector unsigned short);
   40231      vector unsigned short vec_vsrah (vector unsigned short,
   40232                                       vector unsigned short);
   40233 
   40234      vector signed char vec_vsrab (vector signed char, vector unsigned char);
   40235      vector unsigned char vec_vsrab (vector unsigned char,
   40236                                      vector unsigned char);
   40237 
   40238      vector signed int vec_srl (vector signed int, vector unsigned int);
   40239      vector signed int vec_srl (vector signed int, vector unsigned short);
   40240      vector signed int vec_srl (vector signed int, vector unsigned char);
   40241      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
   40242      vector unsigned int vec_srl (vector unsigned int,
   40243                                   vector unsigned short);
   40244      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
   40245      vector bool int vec_srl (vector bool int, vector unsigned int);
   40246      vector bool int vec_srl (vector bool int, vector unsigned short);
   40247      vector bool int vec_srl (vector bool int, vector unsigned char);
   40248      vector signed short vec_srl (vector signed short, vector unsigned int);
   40249      vector signed short vec_srl (vector signed short,
   40250                                   vector unsigned short);
   40251      vector signed short vec_srl (vector signed short, vector unsigned char);
   40252      vector unsigned short vec_srl (vector unsigned short,
   40253                                     vector unsigned int);
   40254      vector unsigned short vec_srl (vector unsigned short,
   40255                                     vector unsigned short);
   40256      vector unsigned short vec_srl (vector unsigned short,
   40257                                     vector unsigned char);
   40258      vector bool short vec_srl (vector bool short, vector unsigned int);
   40259      vector bool short vec_srl (vector bool short, vector unsigned short);
   40260      vector bool short vec_srl (vector bool short, vector unsigned char);
   40261      vector pixel vec_srl (vector pixel, vector unsigned int);
   40262      vector pixel vec_srl (vector pixel, vector unsigned short);
   40263      vector pixel vec_srl (vector pixel, vector unsigned char);
   40264      vector signed char vec_srl (vector signed char, vector unsigned int);
   40265      vector signed char vec_srl (vector signed char, vector unsigned short);
   40266      vector signed char vec_srl (vector signed char, vector unsigned char);
   40267      vector unsigned char vec_srl (vector unsigned char,
   40268                                    vector unsigned int);
   40269      vector unsigned char vec_srl (vector unsigned char,
   40270                                    vector unsigned short);
   40271      vector unsigned char vec_srl (vector unsigned char,
   40272                                    vector unsigned char);
   40273      vector bool char vec_srl (vector bool char, vector unsigned int);
   40274      vector bool char vec_srl (vector bool char, vector unsigned short);
   40275      vector bool char vec_srl (vector bool char, vector unsigned char);
   40276 
   40277      vector float vec_sro (vector float, vector signed char);
   40278      vector float vec_sro (vector float, vector unsigned char);
   40279      vector signed int vec_sro (vector signed int, vector signed char);
   40280      vector signed int vec_sro (vector signed int, vector unsigned char);
   40281      vector unsigned int vec_sro (vector unsigned int, vector signed char);
   40282      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
   40283      vector signed short vec_sro (vector signed short, vector signed char);
   40284      vector signed short vec_sro (vector signed short, vector unsigned char);
   40285      vector unsigned short vec_sro (vector unsigned short,
   40286                                     vector signed char);
   40287      vector unsigned short vec_sro (vector unsigned short,
   40288                                     vector unsigned char);
   40289      vector pixel vec_sro (vector pixel, vector signed char);
   40290      vector pixel vec_sro (vector pixel, vector unsigned char);
   40291      vector signed char vec_sro (vector signed char, vector signed char);
   40292      vector signed char vec_sro (vector signed char, vector unsigned char);
   40293      vector unsigned char vec_sro (vector unsigned char, vector signed char);
   40294      vector unsigned char vec_sro (vector unsigned char,
   40295                                    vector unsigned char);
   40296 
   40297      void vec_st (vector float, int, vector float *);
   40298      void vec_st (vector float, int, float *);
   40299      void vec_st (vector signed int, int, vector signed int *);
   40300      void vec_st (vector signed int, int, int *);
   40301      void vec_st (vector unsigned int, int, vector unsigned int *);
   40302      void vec_st (vector unsigned int, int, unsigned int *);
   40303      void vec_st (vector bool int, int, vector bool int *);
   40304      void vec_st (vector bool int, int, unsigned int *);
   40305      void vec_st (vector bool int, int, int *);
   40306      void vec_st (vector signed short, int, vector signed short *);
   40307      void vec_st (vector signed short, int, short *);
   40308      void vec_st (vector unsigned short, int, vector unsigned short *);
   40309      void vec_st (vector unsigned short, int, unsigned short *);
   40310      void vec_st (vector bool short, int, vector bool short *);
   40311      void vec_st (vector bool short, int, unsigned short *);
   40312      void vec_st (vector pixel, int, vector pixel *);
   40313      void vec_st (vector pixel, int, unsigned short *);
   40314      void vec_st (vector pixel, int, short *);
   40315      void vec_st (vector bool short, int, short *);
   40316      void vec_st (vector signed char, int, vector signed char *);
   40317      void vec_st (vector signed char, int, signed char *);
   40318      void vec_st (vector unsigned char, int, vector unsigned char *);
   40319      void vec_st (vector unsigned char, int, unsigned char *);
   40320      void vec_st (vector bool char, int, vector bool char *);
   40321      void vec_st (vector bool char, int, unsigned char *);
   40322      void vec_st (vector bool char, int, signed char *);
   40323 
   40324      void vec_ste (vector signed char, int, signed char *);
   40325      void vec_ste (vector unsigned char, int, unsigned char *);
   40326      void vec_ste (vector bool char, int, signed char *);
   40327      void vec_ste (vector bool char, int, unsigned char *);
   40328      void vec_ste (vector signed short, int, short *);
   40329      void vec_ste (vector unsigned short, int, unsigned short *);
   40330      void vec_ste (vector bool short, int, short *);
   40331      void vec_ste (vector bool short, int, unsigned short *);
   40332      void vec_ste (vector pixel, int, short *);
   40333      void vec_ste (vector pixel, int, unsigned short *);
   40334      void vec_ste (vector float, int, float *);
   40335      void vec_ste (vector signed int, int, int *);
   40336      void vec_ste (vector unsigned int, int, unsigned int *);
   40337      void vec_ste (vector bool int, int, int *);
   40338      void vec_ste (vector bool int, int, unsigned int *);
   40339 
   40340      void vec_stvewx (vector float, int, float *);
   40341      void vec_stvewx (vector signed int, int, int *);
   40342      void vec_stvewx (vector unsigned int, int, unsigned int *);
   40343      void vec_stvewx (vector bool int, int, int *);
   40344      void vec_stvewx (vector bool int, int, unsigned int *);
   40345 
   40346      void vec_stvehx (vector signed short, int, short *);
   40347      void vec_stvehx (vector unsigned short, int, unsigned short *);
   40348      void vec_stvehx (vector bool short, int, short *);
   40349      void vec_stvehx (vector bool short, int, unsigned short *);
   40350      void vec_stvehx (vector pixel, int, short *);
   40351      void vec_stvehx (vector pixel, int, unsigned short *);
   40352 
   40353      void vec_stvebx (vector signed char, int, signed char *);
   40354      void vec_stvebx (vector unsigned char, int, unsigned char *);
   40355      void vec_stvebx (vector bool char, int, signed char *);
   40356      void vec_stvebx (vector bool char, int, unsigned char *);
   40357 
   40358      void vec_stl (vector float, int, vector float *);
   40359      void vec_stl (vector float, int, float *);
   40360      void vec_stl (vector signed int, int, vector signed int *);
   40361      void vec_stl (vector signed int, int, int *);
   40362      void vec_stl (vector unsigned int, int, vector unsigned int *);
   40363      void vec_stl (vector unsigned int, int, unsigned int *);
   40364      void vec_stl (vector bool int, int, vector bool int *);
   40365      void vec_stl (vector bool int, int, unsigned int *);
   40366      void vec_stl (vector bool int, int, int *);
   40367      void vec_stl (vector signed short, int, vector signed short *);
   40368      void vec_stl (vector signed short, int, short *);
   40369      void vec_stl (vector unsigned short, int, vector unsigned short *);
   40370      void vec_stl (vector unsigned short, int, unsigned short *);
   40371      void vec_stl (vector bool short, int, vector bool short *);
   40372      void vec_stl (vector bool short, int, unsigned short *);
   40373      void vec_stl (vector bool short, int, short *);
   40374      void vec_stl (vector pixel, int, vector pixel *);
   40375      void vec_stl (vector pixel, int, unsigned short *);
   40376      void vec_stl (vector pixel, int, short *);
   40377      void vec_stl (vector signed char, int, vector signed char *);
   40378      void vec_stl (vector signed char, int, signed char *);
   40379      void vec_stl (vector unsigned char, int, vector unsigned char *);
   40380      void vec_stl (vector unsigned char, int, unsigned char *);
   40381      void vec_stl (vector bool char, int, vector bool char *);
   40382      void vec_stl (vector bool char, int, unsigned char *);
   40383      void vec_stl (vector bool char, int, signed char *);
   40384 
   40385      vector signed char vec_sub (vector bool char, vector signed char);
   40386      vector signed char vec_sub (vector signed char, vector bool char);
   40387      vector signed char vec_sub (vector signed char, vector signed char);
   40388      vector unsigned char vec_sub (vector bool char, vector unsigned char);
   40389      vector unsigned char vec_sub (vector unsigned char, vector bool char);
   40390      vector unsigned char vec_sub (vector unsigned char,
   40391                                    vector unsigned char);
   40392      vector signed short vec_sub (vector bool short, vector signed short);
   40393      vector signed short vec_sub (vector signed short, vector bool short);
   40394      vector signed short vec_sub (vector signed short, vector signed short);
   40395      vector unsigned short vec_sub (vector bool short,
   40396                                     vector unsigned short);
   40397      vector unsigned short vec_sub (vector unsigned short,
   40398                                     vector bool short);
   40399      vector unsigned short vec_sub (vector unsigned short,
   40400                                     vector unsigned short);
   40401      vector signed int vec_sub (vector bool int, vector signed int);
   40402      vector signed int vec_sub (vector signed int, vector bool int);
   40403      vector signed int vec_sub (vector signed int, vector signed int);
   40404      vector unsigned int vec_sub (vector bool int, vector unsigned int);
   40405      vector unsigned int vec_sub (vector unsigned int, vector bool int);
   40406      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
   40407      vector float vec_sub (vector float, vector float);
   40408 
   40409      vector float vec_vsubfp (vector float, vector float);
   40410 
   40411      vector signed int vec_vsubuwm (vector bool int, vector signed int);
   40412      vector signed int vec_vsubuwm (vector signed int, vector bool int);
   40413      vector signed int vec_vsubuwm (vector signed int, vector signed int);
   40414      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
   40415      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
   40416      vector unsigned int vec_vsubuwm (vector unsigned int,
   40417                                       vector unsigned int);
   40418 
   40419      vector signed short vec_vsubuhm (vector bool short,
   40420                                       vector signed short);
   40421      vector signed short vec_vsubuhm (vector signed short,
   40422                                       vector bool short);
   40423      vector signed short vec_vsubuhm (vector signed short,
   40424                                       vector signed short);
   40425      vector unsigned short vec_vsubuhm (vector bool short,
   40426                                         vector unsigned short);
   40427      vector unsigned short vec_vsubuhm (vector unsigned short,
   40428                                         vector bool short);
   40429      vector unsigned short vec_vsubuhm (vector unsigned short,
   40430                                         vector unsigned short);
   40431 
   40432      vector signed char vec_vsububm (vector bool char, vector signed char);
   40433      vector signed char vec_vsububm (vector signed char, vector bool char);
   40434      vector signed char vec_vsububm (vector signed char, vector signed char);
   40435      vector unsigned char vec_vsububm (vector bool char,
   40436                                        vector unsigned char);
   40437      vector unsigned char vec_vsububm (vector unsigned char,
   40438                                        vector bool char);
   40439      vector unsigned char vec_vsububm (vector unsigned char,
   40440                                        vector unsigned char);
   40441 
   40442      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
   40443 
   40444      vector unsigned char vec_subs (vector bool char, vector unsigned char);
   40445      vector unsigned char vec_subs (vector unsigned char, vector bool char);
   40446      vector unsigned char vec_subs (vector unsigned char,
   40447                                     vector unsigned char);
   40448      vector signed char vec_subs (vector bool char, vector signed char);
   40449      vector signed char vec_subs (vector signed char, vector bool char);
   40450      vector signed char vec_subs (vector signed char, vector signed char);
   40451      vector unsigned short vec_subs (vector bool short,
   40452                                      vector unsigned short);
   40453      vector unsigned short vec_subs (vector unsigned short,
   40454                                      vector bool short);
   40455      vector unsigned short vec_subs (vector unsigned short,
   40456                                      vector unsigned short);
   40457      vector signed short vec_subs (vector bool short, vector signed short);
   40458      vector signed short vec_subs (vector signed short, vector bool short);
   40459      vector signed short vec_subs (vector signed short, vector signed short);
   40460      vector unsigned int vec_subs (vector bool int, vector unsigned int);
   40461      vector unsigned int vec_subs (vector unsigned int, vector bool int);
   40462      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
   40463      vector signed int vec_subs (vector bool int, vector signed int);
   40464      vector signed int vec_subs (vector signed int, vector bool int);
   40465      vector signed int vec_subs (vector signed int, vector signed int);
   40466 
   40467      vector signed int vec_vsubsws (vector bool int, vector signed int);
   40468      vector signed int vec_vsubsws (vector signed int, vector bool int);
   40469      vector signed int vec_vsubsws (vector signed int, vector signed int);
   40470 
   40471      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
   40472      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
   40473      vector unsigned int vec_vsubuws (vector unsigned int,
   40474                                       vector unsigned int);
   40475 
   40476      vector signed short vec_vsubshs (vector bool short,
   40477                                       vector signed short);
   40478      vector signed short vec_vsubshs (vector signed short,
   40479                                       vector bool short);
   40480      vector signed short vec_vsubshs (vector signed short,
   40481                                       vector signed short);
   40482 
   40483      vector unsigned short vec_vsubuhs (vector bool short,
   40484                                         vector unsigned short);
   40485      vector unsigned short vec_vsubuhs (vector unsigned short,
   40486                                         vector bool short);
   40487      vector unsigned short vec_vsubuhs (vector unsigned short,
   40488                                         vector unsigned short);
   40489 
   40490      vector signed char vec_vsubsbs (vector bool char, vector signed char);
   40491      vector signed char vec_vsubsbs (vector signed char, vector bool char);
   40492      vector signed char vec_vsubsbs (vector signed char, vector signed char);
   40493 
   40494      vector unsigned char vec_vsububs (vector bool char,
   40495                                        vector unsigned char);
   40496      vector unsigned char vec_vsububs (vector unsigned char,
   40497                                        vector bool char);
   40498      vector unsigned char vec_vsububs (vector unsigned char,
   40499                                        vector unsigned char);
   40500 
   40501      vector unsigned int vec_sum4s (vector unsigned char,
   40502                                     vector unsigned int);
   40503      vector signed int vec_sum4s (vector signed char, vector signed int);
   40504      vector signed int vec_sum4s (vector signed short, vector signed int);
   40505 
   40506      vector signed int vec_vsum4shs (vector signed short, vector signed int);
   40507 
   40508      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
   40509 
   40510      vector unsigned int vec_vsum4ubs (vector unsigned char,
   40511                                        vector unsigned int);
   40512 
   40513      vector signed int vec_sum2s (vector signed int, vector signed int);
   40514 
   40515      vector signed int vec_sums (vector signed int, vector signed int);
   40516 
   40517      vector float vec_trunc (vector float);
   40518 
   40519      vector signed short vec_unpackh (vector signed char);
   40520      vector bool short vec_unpackh (vector bool char);
   40521      vector signed int vec_unpackh (vector signed short);
   40522      vector bool int vec_unpackh (vector bool short);
   40523      vector unsigned int vec_unpackh (vector pixel);
   40524 
   40525      vector bool int vec_vupkhsh (vector bool short);
   40526      vector signed int vec_vupkhsh (vector signed short);
   40527 
   40528      vector unsigned int vec_vupkhpx (vector pixel);
   40529 
   40530      vector bool short vec_vupkhsb (vector bool char);
   40531      vector signed short vec_vupkhsb (vector signed char);
   40532 
   40533      vector signed short vec_unpackl (vector signed char);
   40534      vector bool short vec_unpackl (vector bool char);
   40535      vector unsigned int vec_unpackl (vector pixel);
   40536      vector signed int vec_unpackl (vector signed short);
   40537      vector bool int vec_unpackl (vector bool short);
   40538 
   40539      vector unsigned int vec_vupklpx (vector pixel);
   40540 
   40541      vector bool int vec_vupklsh (vector bool short);
   40542      vector signed int vec_vupklsh (vector signed short);
   40543 
   40544      vector bool short vec_vupklsb (vector bool char);
   40545      vector signed short vec_vupklsb (vector signed char);
   40546 
   40547      vector float vec_xor (vector float, vector float);
   40548      vector float vec_xor (vector float, vector bool int);
   40549      vector float vec_xor (vector bool int, vector float);
   40550      vector bool int vec_xor (vector bool int, vector bool int);
   40551      vector signed int vec_xor (vector bool int, vector signed int);
   40552      vector signed int vec_xor (vector signed int, vector bool int);
   40553      vector signed int vec_xor (vector signed int, vector signed int);
   40554      vector unsigned int vec_xor (vector bool int, vector unsigned int);
   40555      vector unsigned int vec_xor (vector unsigned int, vector bool int);
   40556      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
   40557      vector bool short vec_xor (vector bool short, vector bool short);
   40558      vector signed short vec_xor (vector bool short, vector signed short);
   40559      vector signed short vec_xor (vector signed short, vector bool short);
   40560      vector signed short vec_xor (vector signed short, vector signed short);
   40561      vector unsigned short vec_xor (vector bool short,
   40562                                     vector unsigned short);
   40563      vector unsigned short vec_xor (vector unsigned short,
   40564                                     vector bool short);
   40565      vector unsigned short vec_xor (vector unsigned short,
   40566                                     vector unsigned short);
   40567      vector signed char vec_xor (vector bool char, vector signed char);
   40568      vector bool char vec_xor (vector bool char, vector bool char);
   40569      vector signed char vec_xor (vector signed char, vector bool char);
   40570      vector signed char vec_xor (vector signed char, vector signed char);
   40571      vector unsigned char vec_xor (vector bool char, vector unsigned char);
   40572      vector unsigned char vec_xor (vector unsigned char, vector bool char);
   40573      vector unsigned char vec_xor (vector unsigned char,
   40574                                    vector unsigned char);
   40575 
   40576      int vec_all_eq (vector signed char, vector bool char);
   40577      int vec_all_eq (vector signed char, vector signed char);
   40578      int vec_all_eq (vector unsigned char, vector bool char);
   40579      int vec_all_eq (vector unsigned char, vector unsigned char);
   40580      int vec_all_eq (vector bool char, vector bool char);
   40581      int vec_all_eq (vector bool char, vector unsigned char);
   40582      int vec_all_eq (vector bool char, vector signed char);
   40583      int vec_all_eq (vector signed short, vector bool short);
   40584      int vec_all_eq (vector signed short, vector signed short);
   40585      int vec_all_eq (vector unsigned short, vector bool short);
   40586      int vec_all_eq (vector unsigned short, vector unsigned short);
   40587      int vec_all_eq (vector bool short, vector bool short);
   40588      int vec_all_eq (vector bool short, vector unsigned short);
   40589      int vec_all_eq (vector bool short, vector signed short);
   40590      int vec_all_eq (vector pixel, vector pixel);
   40591      int vec_all_eq (vector signed int, vector bool int);
   40592      int vec_all_eq (vector signed int, vector signed int);
   40593      int vec_all_eq (vector unsigned int, vector bool int);
   40594      int vec_all_eq (vector unsigned int, vector unsigned int);
   40595      int vec_all_eq (vector bool int, vector bool int);
   40596      int vec_all_eq (vector bool int, vector unsigned int);
   40597      int vec_all_eq (vector bool int, vector signed int);
   40598      int vec_all_eq (vector float, vector float);
   40599 
   40600      int vec_all_ge (vector bool char, vector unsigned char);
   40601      int vec_all_ge (vector unsigned char, vector bool char);
   40602      int vec_all_ge (vector unsigned char, vector unsigned char);
   40603      int vec_all_ge (vector bool char, vector signed char);
   40604      int vec_all_ge (vector signed char, vector bool char);
   40605      int vec_all_ge (vector signed char, vector signed char);
   40606      int vec_all_ge (vector bool short, vector unsigned short);
   40607      int vec_all_ge (vector unsigned short, vector bool short);
   40608      int vec_all_ge (vector unsigned short, vector unsigned short);
   40609      int vec_all_ge (vector signed short, vector signed short);
   40610      int vec_all_ge (vector bool short, vector signed short);
   40611      int vec_all_ge (vector signed short, vector bool short);
   40612      int vec_all_ge (vector bool int, vector unsigned int);
   40613      int vec_all_ge (vector unsigned int, vector bool int);
   40614      int vec_all_ge (vector unsigned int, vector unsigned int);
   40615      int vec_all_ge (vector bool int, vector signed int);
   40616      int vec_all_ge (vector signed int, vector bool int);
   40617      int vec_all_ge (vector signed int, vector signed int);
   40618      int vec_all_ge (vector float, vector float);
   40619 
   40620      int vec_all_gt (vector bool char, vector unsigned char);
   40621      int vec_all_gt (vector unsigned char, vector bool char);
   40622      int vec_all_gt (vector unsigned char, vector unsigned char);
   40623      int vec_all_gt (vector bool char, vector signed char);
   40624      int vec_all_gt (vector signed char, vector bool char);
   40625      int vec_all_gt (vector signed char, vector signed char);
   40626      int vec_all_gt (vector bool short, vector unsigned short);
   40627      int vec_all_gt (vector unsigned short, vector bool short);
   40628      int vec_all_gt (vector unsigned short, vector unsigned short);
   40629      int vec_all_gt (vector bool short, vector signed short);
   40630      int vec_all_gt (vector signed short, vector bool short);
   40631      int vec_all_gt (vector signed short, vector signed short);
   40632      int vec_all_gt (vector bool int, vector unsigned int);
   40633      int vec_all_gt (vector unsigned int, vector bool int);
   40634      int vec_all_gt (vector unsigned int, vector unsigned int);
   40635      int vec_all_gt (vector bool int, vector signed int);
   40636      int vec_all_gt (vector signed int, vector bool int);
   40637      int vec_all_gt (vector signed int, vector signed int);
   40638      int vec_all_gt (vector float, vector float);
   40639 
   40640      int vec_all_in (vector float, vector float);
   40641 
   40642      int vec_all_le (vector bool char, vector unsigned char);
   40643      int vec_all_le (vector unsigned char, vector bool char);
   40644      int vec_all_le (vector unsigned char, vector unsigned char);
   40645      int vec_all_le (vector bool char, vector signed char);
   40646      int vec_all_le (vector signed char, vector bool char);
   40647      int vec_all_le (vector signed char, vector signed char);
   40648      int vec_all_le (vector bool short, vector unsigned short);
   40649      int vec_all_le (vector unsigned short, vector bool short);
   40650      int vec_all_le (vector unsigned short, vector unsigned short);
   40651      int vec_all_le (vector bool short, vector signed short);
   40652      int vec_all_le (vector signed short, vector bool short);
   40653      int vec_all_le (vector signed short, vector signed short);
   40654      int vec_all_le (vector bool int, vector unsigned int);
   40655      int vec_all_le (vector unsigned int, vector bool int);
   40656      int vec_all_le (vector unsigned int, vector unsigned int);
   40657      int vec_all_le (vector bool int, vector signed int);
   40658      int vec_all_le (vector signed int, vector bool int);
   40659      int vec_all_le (vector signed int, vector signed int);
   40660      int vec_all_le (vector float, vector float);
   40661 
   40662      int vec_all_lt (vector bool char, vector unsigned char);
   40663      int vec_all_lt (vector unsigned char, vector bool char);
   40664      int vec_all_lt (vector unsigned char, vector unsigned char);
   40665      int vec_all_lt (vector bool char, vector signed char);
   40666      int vec_all_lt (vector signed char, vector bool char);
   40667      int vec_all_lt (vector signed char, vector signed char);
   40668      int vec_all_lt (vector bool short, vector unsigned short);
   40669      int vec_all_lt (vector unsigned short, vector bool short);
   40670      int vec_all_lt (vector unsigned short, vector unsigned short);
   40671      int vec_all_lt (vector bool short, vector signed short);
   40672      int vec_all_lt (vector signed short, vector bool short);
   40673      int vec_all_lt (vector signed short, vector signed short);
   40674      int vec_all_lt (vector bool int, vector unsigned int);
   40675      int vec_all_lt (vector unsigned int, vector bool int);
   40676      int vec_all_lt (vector unsigned int, vector unsigned int);
   40677      int vec_all_lt (vector bool int, vector signed int);
   40678      int vec_all_lt (vector signed int, vector bool int);
   40679      int vec_all_lt (vector signed int, vector signed int);
   40680      int vec_all_lt (vector float, vector float);
   40681 
   40682      int vec_all_nan (vector float);
   40683 
   40684      int vec_all_ne (vector signed char, vector bool char);
   40685      int vec_all_ne (vector signed char, vector signed char);
   40686      int vec_all_ne (vector unsigned char, vector bool char);
   40687      int vec_all_ne (vector unsigned char, vector unsigned char);
   40688      int vec_all_ne (vector bool char, vector bool char);
   40689      int vec_all_ne (vector bool char, vector unsigned char);
   40690      int vec_all_ne (vector bool char, vector signed char);
   40691      int vec_all_ne (vector signed short, vector bool short);
   40692      int vec_all_ne (vector signed short, vector signed short);
   40693      int vec_all_ne (vector unsigned short, vector bool short);
   40694      int vec_all_ne (vector unsigned short, vector unsigned short);
   40695      int vec_all_ne (vector bool short, vector bool short);
   40696      int vec_all_ne (vector bool short, vector unsigned short);
   40697      int vec_all_ne (vector bool short, vector signed short);
   40698      int vec_all_ne (vector pixel, vector pixel);
   40699      int vec_all_ne (vector signed int, vector bool int);
   40700      int vec_all_ne (vector signed int, vector signed int);
   40701      int vec_all_ne (vector unsigned int, vector bool int);
   40702      int vec_all_ne (vector unsigned int, vector unsigned int);
   40703      int vec_all_ne (vector bool int, vector bool int);
   40704      int vec_all_ne (vector bool int, vector unsigned int);
   40705      int vec_all_ne (vector bool int, vector signed int);
   40706      int vec_all_ne (vector float, vector float);
   40707 
   40708      int vec_all_nge (vector float, vector float);
   40709 
   40710      int vec_all_ngt (vector float, vector float);
   40711 
   40712      int vec_all_nle (vector float, vector float);
   40713 
   40714      int vec_all_nlt (vector float, vector float);
   40715 
   40716      int vec_all_numeric (vector float);
   40717 
   40718      int vec_any_eq (vector signed char, vector bool char);
   40719      int vec_any_eq (vector signed char, vector signed char);
   40720      int vec_any_eq (vector unsigned char, vector bool char);
   40721      int vec_any_eq (vector unsigned char, vector unsigned char);
   40722      int vec_any_eq (vector bool char, vector bool char);
   40723      int vec_any_eq (vector bool char, vector unsigned char);
   40724      int vec_any_eq (vector bool char, vector signed char);
   40725      int vec_any_eq (vector signed short, vector bool short);
   40726      int vec_any_eq (vector signed short, vector signed short);
   40727      int vec_any_eq (vector unsigned short, vector bool short);
   40728      int vec_any_eq (vector unsigned short, vector unsigned short);
   40729      int vec_any_eq (vector bool short, vector bool short);
   40730      int vec_any_eq (vector bool short, vector unsigned short);
   40731      int vec_any_eq (vector bool short, vector signed short);
   40732      int vec_any_eq (vector pixel, vector pixel);
   40733      int vec_any_eq (vector signed int, vector bool int);
   40734      int vec_any_eq (vector signed int, vector signed int);
   40735      int vec_any_eq (vector unsigned int, vector bool int);
   40736      int vec_any_eq (vector unsigned int, vector unsigned int);
   40737      int vec_any_eq (vector bool int, vector bool int);
   40738      int vec_any_eq (vector bool int, vector unsigned int);
   40739      int vec_any_eq (vector bool int, vector signed int);
   40740      int vec_any_eq (vector float, vector float);
   40741 
   40742      int vec_any_ge (vector signed char, vector bool char);
   40743      int vec_any_ge (vector unsigned char, vector bool char);
   40744      int vec_any_ge (vector unsigned char, vector unsigned char);
   40745      int vec_any_ge (vector signed char, vector signed char);
   40746      int vec_any_ge (vector bool char, vector unsigned char);
   40747      int vec_any_ge (vector bool char, vector signed char);
   40748      int vec_any_ge (vector unsigned short, vector bool short);
   40749      int vec_any_ge (vector unsigned short, vector unsigned short);
   40750      int vec_any_ge (vector signed short, vector signed short);
   40751      int vec_any_ge (vector signed short, vector bool short);
   40752      int vec_any_ge (vector bool short, vector unsigned short);
   40753      int vec_any_ge (vector bool short, vector signed short);
   40754      int vec_any_ge (vector signed int, vector bool int);
   40755      int vec_any_ge (vector unsigned int, vector bool int);
   40756      int vec_any_ge (vector unsigned int, vector unsigned int);
   40757      int vec_any_ge (vector signed int, vector signed int);
   40758      int vec_any_ge (vector bool int, vector unsigned int);
   40759      int vec_any_ge (vector bool int, vector signed int);
   40760      int vec_any_ge (vector float, vector float);
   40761 
   40762      int vec_any_gt (vector bool char, vector unsigned char);
   40763      int vec_any_gt (vector unsigned char, vector bool char);
   40764      int vec_any_gt (vector unsigned char, vector unsigned char);
   40765      int vec_any_gt (vector bool char, vector signed char);
   40766      int vec_any_gt (vector signed char, vector bool char);
   40767      int vec_any_gt (vector signed char, vector signed char);
   40768      int vec_any_gt (vector bool short, vector unsigned short);
   40769      int vec_any_gt (vector unsigned short, vector bool short);
   40770      int vec_any_gt (vector unsigned short, vector unsigned short);
   40771      int vec_any_gt (vector bool short, vector signed short);
   40772      int vec_any_gt (vector signed short, vector bool short);
   40773      int vec_any_gt (vector signed short, vector signed short);
   40774      int vec_any_gt (vector bool int, vector unsigned int);
   40775      int vec_any_gt (vector unsigned int, vector bool int);
   40776      int vec_any_gt (vector unsigned int, vector unsigned int);
   40777      int vec_any_gt (vector bool int, vector signed int);
   40778      int vec_any_gt (vector signed int, vector bool int);
   40779      int vec_any_gt (vector signed int, vector signed int);
   40780      int vec_any_gt (vector float, vector float);
   40781 
   40782      int vec_any_le (vector bool char, vector unsigned char);
   40783      int vec_any_le (vector unsigned char, vector bool char);
   40784      int vec_any_le (vector unsigned char, vector unsigned char);
   40785      int vec_any_le (vector bool char, vector signed char);
   40786      int vec_any_le (vector signed char, vector bool char);
   40787      int vec_any_le (vector signed char, vector signed char);
   40788      int vec_any_le (vector bool short, vector unsigned short);
   40789      int vec_any_le (vector unsigned short, vector bool short);
   40790      int vec_any_le (vector unsigned short, vector unsigned short);
   40791      int vec_any_le (vector bool short, vector signed short);
   40792      int vec_any_le (vector signed short, vector bool short);
   40793      int vec_any_le (vector signed short, vector signed short);
   40794      int vec_any_le (vector bool int, vector unsigned int);
   40795      int vec_any_le (vector unsigned int, vector bool int);
   40796      int vec_any_le (vector unsigned int, vector unsigned int);
   40797      int vec_any_le (vector bool int, vector signed int);
   40798      int vec_any_le (vector signed int, vector bool int);
   40799      int vec_any_le (vector signed int, vector signed int);
   40800      int vec_any_le (vector float, vector float);
   40801 
   40802      int vec_any_lt (vector bool char, vector unsigned char);
   40803      int vec_any_lt (vector unsigned char, vector bool char);
   40804      int vec_any_lt (vector unsigned char, vector unsigned char);
   40805      int vec_any_lt (vector bool char, vector signed char);
   40806      int vec_any_lt (vector signed char, vector bool char);
   40807      int vec_any_lt (vector signed char, vector signed char);
   40808      int vec_any_lt (vector bool short, vector unsigned short);
   40809      int vec_any_lt (vector unsigned short, vector bool short);
   40810      int vec_any_lt (vector unsigned short, vector unsigned short);
   40811      int vec_any_lt (vector bool short, vector signed short);
   40812      int vec_any_lt (vector signed short, vector bool short);
   40813      int vec_any_lt (vector signed short, vector signed short);
   40814      int vec_any_lt (vector bool int, vector unsigned int);
   40815      int vec_any_lt (vector unsigned int, vector bool int);
   40816      int vec_any_lt (vector unsigned int, vector unsigned int);
   40817      int vec_any_lt (vector bool int, vector signed int);
   40818      int vec_any_lt (vector signed int, vector bool int);
   40819      int vec_any_lt (vector signed int, vector signed int);
   40820      int vec_any_lt (vector float, vector float);
   40821 
   40822      int vec_any_nan (vector float);
   40823 
   40824      int vec_any_ne (vector signed char, vector bool char);
   40825      int vec_any_ne (vector signed char, vector signed char);
   40826      int vec_any_ne (vector unsigned char, vector bool char);
   40827      int vec_any_ne (vector unsigned char, vector unsigned char);
   40828      int vec_any_ne (vector bool char, vector bool char);
   40829      int vec_any_ne (vector bool char, vector unsigned char);
   40830      int vec_any_ne (vector bool char, vector signed char);
   40831      int vec_any_ne (vector signed short, vector bool short);
   40832      int vec_any_ne (vector signed short, vector signed short);
   40833      int vec_any_ne (vector unsigned short, vector bool short);
   40834      int vec_any_ne (vector unsigned short, vector unsigned short);
   40835      int vec_any_ne (vector bool short, vector bool short);
   40836      int vec_any_ne (vector bool short, vector unsigned short);
   40837      int vec_any_ne (vector bool short, vector signed short);
   40838      int vec_any_ne (vector pixel, vector pixel);
   40839      int vec_any_ne (vector signed int, vector bool int);
   40840      int vec_any_ne (vector signed int, vector signed int);
   40841      int vec_any_ne (vector unsigned int, vector bool int);
   40842      int vec_any_ne (vector unsigned int, vector unsigned int);
   40843      int vec_any_ne (vector bool int, vector bool int);
   40844      int vec_any_ne (vector bool int, vector unsigned int);
   40845      int vec_any_ne (vector bool int, vector signed int);
   40846      int vec_any_ne (vector float, vector float);
   40847 
   40848      int vec_any_nge (vector float, vector float);
   40849 
   40850      int vec_any_ngt (vector float, vector float);
   40851 
   40852      int vec_any_nle (vector float, vector float);
   40853 
   40854      int vec_any_nlt (vector float, vector float);
   40855 
   40856      int vec_any_numeric (vector float);
   40857 
   40858      int vec_any_out (vector float, vector float);
   40859 
   40860  If the vector/scalar (VSX) instruction set is available, the following
   40861 additional functions are available:
   40862 
   40863      vector double vec_abs (vector double);
   40864      vector double vec_add (vector double, vector double);
   40865      vector double vec_and (vector double, vector double);
   40866      vector double vec_and (vector double, vector bool long);
   40867      vector double vec_and (vector bool long, vector double);
   40868      vector double vec_andc (vector double, vector double);
   40869      vector double vec_andc (vector double, vector bool long);
   40870      vector double vec_andc (vector bool long, vector double);
   40871      vector double vec_ceil (vector double);
   40872      vector bool long vec_cmpeq (vector double, vector double);
   40873      vector bool long vec_cmpge (vector double, vector double);
   40874      vector bool long vec_cmpgt (vector double, vector double);
   40875      vector bool long vec_cmple (vector double, vector double);
   40876      vector bool long vec_cmplt (vector double, vector double);
   40877      vector float vec_div (vector float, vector float);
   40878      vector double vec_div (vector double, vector double);
   40879      vector double vec_floor (vector double);
   40880      vector double vec_ld (int, const vector double *);
   40881      vector double vec_ld (int, const double *);
   40882      vector double vec_ldl (int, const vector double *);
   40883      vector double vec_ldl (int, const double *);
   40884      vector unsigned char vec_lvsl (int, const volatile double *);
   40885      vector unsigned char vec_lvsr (int, const volatile double *);
   40886      vector double vec_madd (vector double, vector double, vector double);
   40887      vector double vec_max (vector double, vector double);
   40888      vector double vec_min (vector double, vector double);
   40889      vector float vec_msub (vector float, vector float, vector float);
   40890      vector double vec_msub (vector double, vector double, vector double);
   40891      vector float vec_mul (vector float, vector float);
   40892      vector double vec_mul (vector double, vector double);
   40893      vector float vec_nearbyint (vector float);
   40894      vector double vec_nearbyint (vector double);
   40895      vector float vec_nmadd (vector float, vector float, vector float);
   40896      vector double vec_nmadd (vector double, vector double, vector double);
   40897      vector double vec_nmsub (vector double, vector double, vector double);
   40898      vector double vec_nor (vector double, vector double);
   40899      vector double vec_or (vector double, vector double);
   40900      vector double vec_or (vector double, vector bool long);
   40901      vector double vec_or (vector bool long, vector double);
   40902      vector double vec_perm (vector double,
   40903                              vector double,
   40904                              vector unsigned char);
   40905      vector double vec_rint (vector double);
   40906      vector double vec_recip (vector double, vector double);
   40907      vector double vec_rsqrt (vector double);
   40908      vector double vec_rsqrte (vector double);
   40909      vector double vec_sel (vector double, vector double, vector bool long);
   40910      vector double vec_sel (vector double, vector double, vector unsigned long);
   40911      vector double vec_sub (vector double, vector double);
   40912      vector float vec_sqrt (vector float);
   40913      vector double vec_sqrt (vector double);
   40914      void vec_st (vector double, int, vector double *);
   40915      void vec_st (vector double, int, double *);
   40916      vector double vec_trunc (vector double);
   40917      vector double vec_xor (vector double, vector double);
   40918      vector double vec_xor (vector double, vector bool long);
   40919      vector double vec_xor (vector bool long, vector double);
   40920      int vec_all_eq (vector double, vector double);
   40921      int vec_all_ge (vector double, vector double);
   40922      int vec_all_gt (vector double, vector double);
   40923      int vec_all_le (vector double, vector double);
   40924      int vec_all_lt (vector double, vector double);
   40925      int vec_all_nan (vector double);
   40926      int vec_all_ne (vector double, vector double);
   40927      int vec_all_nge (vector double, vector double);
   40928      int vec_all_ngt (vector double, vector double);
   40929      int vec_all_nle (vector double, vector double);
   40930      int vec_all_nlt (vector double, vector double);
   40931      int vec_all_numeric (vector double);
   40932      int vec_any_eq (vector double, vector double);
   40933      int vec_any_ge (vector double, vector double);
   40934      int vec_any_gt (vector double, vector double);
   40935      int vec_any_le (vector double, vector double);
   40936      int vec_any_lt (vector double, vector double);
   40937      int vec_any_nan (vector double);
   40938      int vec_any_ne (vector double, vector double);
   40939      int vec_any_nge (vector double, vector double);
   40940      int vec_any_ngt (vector double, vector double);
   40941      int vec_any_nle (vector double, vector double);
   40942      int vec_any_nlt (vector double, vector double);
   40943      int vec_any_numeric (vector double);
   40944 
   40945      vector double vec_vsx_ld (int, const vector double *);
   40946      vector double vec_vsx_ld (int, const double *);
   40947      vector float vec_vsx_ld (int, const vector float *);
   40948      vector float vec_vsx_ld (int, const float *);
   40949      vector bool int vec_vsx_ld (int, const vector bool int *);
   40950      vector signed int vec_vsx_ld (int, const vector signed int *);
   40951      vector signed int vec_vsx_ld (int, const int *);
   40952      vector signed int vec_vsx_ld (int, const long *);
   40953      vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
   40954      vector unsigned int vec_vsx_ld (int, const unsigned int *);
   40955      vector unsigned int vec_vsx_ld (int, const unsigned long *);
   40956      vector bool short vec_vsx_ld (int, const vector bool short *);
   40957      vector pixel vec_vsx_ld (int, const vector pixel *);
   40958      vector signed short vec_vsx_ld (int, const vector signed short *);
   40959      vector signed short vec_vsx_ld (int, const short *);
   40960      vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
   40961      vector unsigned short vec_vsx_ld (int, const unsigned short *);
   40962      vector bool char vec_vsx_ld (int, const vector bool char *);
   40963      vector signed char vec_vsx_ld (int, const vector signed char *);
   40964      vector signed char vec_vsx_ld (int, const signed char *);
   40965      vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
   40966      vector unsigned char vec_vsx_ld (int, const unsigned char *);
   40967 
   40968      void vec_vsx_st (vector double, int, vector double *);
   40969      void vec_vsx_st (vector double, int, double *);
   40970      void vec_vsx_st (vector float, int, vector float *);
   40971      void vec_vsx_st (vector float, int, float *);
   40972      void vec_vsx_st (vector signed int, int, vector signed int *);
   40973      void vec_vsx_st (vector signed int, int, int *);
   40974      void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
   40975      void vec_vsx_st (vector unsigned int, int, unsigned int *);
   40976      void vec_vsx_st (vector bool int, int, vector bool int *);
   40977      void vec_vsx_st (vector bool int, int, unsigned int *);
   40978      void vec_vsx_st (vector bool int, int, int *);
   40979      void vec_vsx_st (vector signed short, int, vector signed short *);
   40980      void vec_vsx_st (vector signed short, int, short *);
   40981      void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
   40982      void vec_vsx_st (vector unsigned short, int, unsigned short *);
   40983      void vec_vsx_st (vector bool short, int, vector bool short *);
   40984      void vec_vsx_st (vector bool short, int, unsigned short *);
   40985      void vec_vsx_st (vector pixel, int, vector pixel *);
   40986      void vec_vsx_st (vector pixel, int, unsigned short *);
   40987      void vec_vsx_st (vector pixel, int, short *);
   40988      void vec_vsx_st (vector bool short, int, short *);
   40989      void vec_vsx_st (vector signed char, int, vector signed char *);
   40990      void vec_vsx_st (vector signed char, int, signed char *);
   40991      void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
   40992      void vec_vsx_st (vector unsigned char, int, unsigned char *);
   40993      void vec_vsx_st (vector bool char, int, vector bool char *);
   40994      void vec_vsx_st (vector bool char, int, unsigned char *);
   40995      void vec_vsx_st (vector bool char, int, signed char *);
   40996 
   40997      vector double vec_xxpermdi (vector double, vector double, int);
   40998      vector float vec_xxpermdi (vector float, vector float, int);
   40999      vector long long vec_xxpermdi (vector long long, vector long long, int);
   41000      vector unsigned long long vec_xxpermdi (vector unsigned long long,
   41001                                              vector unsigned long long, int);
   41002      vector int vec_xxpermdi (vector int, vector int, int);
   41003      vector unsigned int vec_xxpermdi (vector unsigned int,
   41004                                        vector unsigned int, int);
   41005      vector short vec_xxpermdi (vector short, vector short, int);
   41006      vector unsigned short vec_xxpermdi (vector unsigned short,
   41007                                          vector unsigned short, int);
   41008      vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
   41009      vector unsigned char vec_xxpermdi (vector unsigned char,
   41010                                         vector unsigned char, int);
   41011 
   41012      vector double vec_xxsldi (vector double, vector double, int);
   41013      vector float vec_xxsldi (vector float, vector float, int);
   41014      vector long long vec_xxsldi (vector long long, vector long long, int);
   41015      vector unsigned long long vec_xxsldi (vector unsigned long long,
   41016                                            vector unsigned long long, int);
   41017      vector int vec_xxsldi (vector int, vector int, int);
   41018      vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
   41019      vector short vec_xxsldi (vector short, vector short, int);
   41020      vector unsigned short vec_xxsldi (vector unsigned short,
   41021                                        vector unsigned short, int);
   41022      vector signed char vec_xxsldi (vector signed char, vector signed char, int);
   41023      vector unsigned char vec_xxsldi (vector unsigned char,
   41024                                       vector unsigned char, int);
   41025 
   41026  Note that the `vec_ld' and `vec_st' built-in functions always generate
   41027 the AltiVec `LVX' and `STVX' instructions even if the VSX instruction
   41028 set is available.  The `vec_vsx_ld' and `vec_vsx_st' built-in functions
   41029 always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
   41030 instructions.
   41031 
   41032  If the ISA 2.07 additions to the vector/scalar (power8-vector)
   41033 instruction set is available, the following additional functions are
   41034 available for both 32-bit and 64-bit targets.  For 64-bit targets, you
   41035 can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
   41036 instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
   41037 VECTOR UNSIGNED LONG LONG.
   41038 
   41039      vector long long vec_abs (vector long long);
   41040 
   41041      vector long long vec_add (vector long long, vector long long);
   41042      vector unsigned long long vec_add (vector unsigned long long,
   41043                                         vector unsigned long long);
   41044 
   41045      int vec_all_eq (vector long long, vector long long);
   41046      int vec_all_ge (vector long long, vector long long);
   41047      int vec_all_gt (vector long long, vector long long);
   41048      int vec_all_le (vector long long, vector long long);
   41049      int vec_all_lt (vector long long, vector long long);
   41050      int vec_all_ne (vector long long, vector long long);
   41051      int vec_any_eq (vector long long, vector long long);
   41052      int vec_any_ge (vector long long, vector long long);
   41053      int vec_any_gt (vector long long, vector long long);
   41054      int vec_any_le (vector long long, vector long long);
   41055      int vec_any_lt (vector long long, vector long long);
   41056      int vec_any_ne (vector long long, vector long long);
   41057 
   41058      vector long long vec_eqv (vector long long, vector long long);
   41059      vector long long vec_eqv (vector bool long long, vector long long);
   41060      vector long long vec_eqv (vector long long, vector bool long long);
   41061      vector unsigned long long vec_eqv (vector unsigned long long,
   41062                                         vector unsigned long long);
   41063      vector unsigned long long vec_eqv (vector bool long long,
   41064                                         vector unsigned long long);
   41065      vector unsigned long long vec_eqv (vector unsigned long long,
   41066                                         vector bool long long);
   41067      vector int vec_eqv (vector int, vector int);
   41068      vector int vec_eqv (vector bool int, vector int);
   41069      vector int vec_eqv (vector int, vector bool int);
   41070      vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
   41071      vector unsigned int vec_eqv (vector bool unsigned int,
   41072                                   vector unsigned int);
   41073      vector unsigned int vec_eqv (vector unsigned int,
   41074                                   vector bool unsigned int);
   41075      vector short vec_eqv (vector short, vector short);
   41076      vector short vec_eqv (vector bool short, vector short);
   41077      vector short vec_eqv (vector short, vector bool short);
   41078      vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
   41079      vector unsigned short vec_eqv (vector bool unsigned short,
   41080                                     vector unsigned short);
   41081      vector unsigned short vec_eqv (vector unsigned short,
   41082                                     vector bool unsigned short);
   41083      vector signed char vec_eqv (vector signed char, vector signed char);
   41084      vector signed char vec_eqv (vector bool signed char, vector signed char);
   41085      vector signed char vec_eqv (vector signed char, vector bool signed char);
   41086      vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
   41087      vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
   41088      vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
   41089 
   41090      vector long long vec_max (vector long long, vector long long);
   41091      vector unsigned long long vec_max (vector unsigned long long,
   41092                                         vector unsigned long long);
   41093 
   41094      vector long long vec_min (vector long long, vector long long);
   41095      vector unsigned long long vec_min (vector unsigned long long,
   41096                                         vector unsigned long long);
   41097 
   41098      vector long long vec_nand (vector long long, vector long long);
   41099      vector long long vec_nand (vector bool long long, vector long long);
   41100      vector long long vec_nand (vector long long, vector bool long long);
   41101      vector unsigned long long vec_nand (vector unsigned long long,
   41102                                          vector unsigned long long);
   41103      vector unsigned long long vec_nand (vector bool long long,
   41104                                         vector unsigned long long);
   41105      vector unsigned long long vec_nand (vector unsigned long long,
   41106                                          vector bool long long);
   41107      vector int vec_nand (vector int, vector int);
   41108      vector int vec_nand (vector bool int, vector int);
   41109      vector int vec_nand (vector int, vector bool int);
   41110      vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
   41111      vector unsigned int vec_nand (vector bool unsigned int,
   41112                                    vector unsigned int);
   41113      vector unsigned int vec_nand (vector unsigned int,
   41114                                    vector bool unsigned int);
   41115      vector short vec_nand (vector short, vector short);
   41116      vector short vec_nand (vector bool short, vector short);
   41117      vector short vec_nand (vector short, vector bool short);
   41118      vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
   41119      vector unsigned short vec_nand (vector bool unsigned short,
   41120                                      vector unsigned short);
   41121      vector unsigned short vec_nand (vector unsigned short,
   41122                                      vector bool unsigned short);
   41123      vector signed char vec_nand (vector signed char, vector signed char);
   41124      vector signed char vec_nand (vector bool signed char, vector signed char);
   41125      vector signed char vec_nand (vector signed char, vector bool signed char);
   41126      vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
   41127      vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
   41128      vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
   41129 
   41130      vector long long vec_orc (vector long long, vector long long);
   41131      vector long long vec_orc (vector bool long long, vector long long);
   41132      vector long long vec_orc (vector long long, vector bool long long);
   41133      vector unsigned long long vec_orc (vector unsigned long long,
   41134                                         vector unsigned long long);
   41135      vector unsigned long long vec_orc (vector bool long long,
   41136                                         vector unsigned long long);
   41137      vector unsigned long long vec_orc (vector unsigned long long,
   41138                                         vector bool long long);
   41139      vector int vec_orc (vector int, vector int);
   41140      vector int vec_orc (vector bool int, vector int);
   41141      vector int vec_orc (vector int, vector bool int);
   41142      vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
   41143      vector unsigned int vec_orc (vector bool unsigned int,
   41144                                   vector unsigned int);
   41145      vector unsigned int vec_orc (vector unsigned int,
   41146                                   vector bool unsigned int);
   41147      vector short vec_orc (vector short, vector short);
   41148      vector short vec_orc (vector bool short, vector short);
   41149      vector short vec_orc (vector short, vector bool short);
   41150      vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
   41151      vector unsigned short vec_orc (vector bool unsigned short,
   41152                                     vector unsigned short);
   41153      vector unsigned short vec_orc (vector unsigned short,
   41154                                     vector bool unsigned short);
   41155      vector signed char vec_orc (vector signed char, vector signed char);
   41156      vector signed char vec_orc (vector bool signed char, vector signed char);
   41157      vector signed char vec_orc (vector signed char, vector bool signed char);
   41158      vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
   41159      vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
   41160      vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
   41161 
   41162      vector int vec_pack (vector long long, vector long long);
   41163      vector unsigned int vec_pack (vector unsigned long long,
   41164                                    vector unsigned long long);
   41165      vector bool int vec_pack (vector bool long long, vector bool long long);
   41166 
   41167      vector int vec_packs (vector long long, vector long long);
   41168      vector unsigned int vec_packs (vector unsigned long long,
   41169                                     vector unsigned long long);
   41170 
   41171      vector unsigned int vec_packsu (vector long long, vector long long);
   41172 
   41173      vector long long vec_rl (vector long long,
   41174                               vector unsigned long long);
   41175      vector long long vec_rl (vector unsigned long long,
   41176                               vector unsigned long long);
   41177 
   41178      vector long long vec_sl (vector long long, vector unsigned long long);
   41179      vector long long vec_sl (vector unsigned long long,
   41180                               vector unsigned long long);
   41181 
   41182      vector long long vec_sr (vector long long, vector unsigned long long);
   41183      vector unsigned long long char vec_sr (vector unsigned long long,
   41184                                             vector unsigned long long);
   41185 
   41186      vector long long vec_sra (vector long long, vector unsigned long long);
   41187      vector unsigned long long vec_sra (vector unsigned long long,
   41188                                         vector unsigned long long);
   41189 
   41190      vector long long vec_sub (vector long long, vector long long);
   41191      vector unsigned long long vec_sub (vector unsigned long long,
   41192                                         vector unsigned long long);
   41193 
   41194      vector long long vec_unpackh (vector int);
   41195      vector unsigned long long vec_unpackh (vector unsigned int);
   41196 
   41197      vector long long vec_unpackl (vector int);
   41198      vector unsigned long long vec_unpackl (vector unsigned int);
   41199 
   41200      vector long long vec_vaddudm (vector long long, vector long long);
   41201      vector long long vec_vaddudm (vector bool long long, vector long long);
   41202      vector long long vec_vaddudm (vector long long, vector bool long long);
   41203      vector unsigned long long vec_vaddudm (vector unsigned long long,
   41204                                             vector unsigned long long);
   41205      vector unsigned long long vec_vaddudm (vector bool unsigned long long,
   41206                                             vector unsigned long long);
   41207      vector unsigned long long vec_vaddudm (vector unsigned long long,
   41208                                             vector bool unsigned long long);
   41209 
   41210      vector long long vec_vbpermq (vector signed char, vector signed char);
   41211      vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
   41212 
   41213      vector long long vec_vclz (vector long long);
   41214      vector unsigned long long vec_vclz (vector unsigned long long);
   41215      vector int vec_vclz (vector int);
   41216      vector unsigned int vec_vclz (vector int);
   41217      vector short vec_vclz (vector short);
   41218      vector unsigned short vec_vclz (vector unsigned short);
   41219      vector signed char vec_vclz (vector signed char);
   41220      vector unsigned char vec_vclz (vector unsigned char);
   41221 
   41222      vector signed char vec_vclzb (vector signed char);
   41223      vector unsigned char vec_vclzb (vector unsigned char);
   41224 
   41225      vector long long vec_vclzd (vector long long);
   41226      vector unsigned long long vec_vclzd (vector unsigned long long);
   41227 
   41228      vector short vec_vclzh (vector short);
   41229      vector unsigned short vec_vclzh (vector unsigned short);
   41230 
   41231      vector int vec_vclzw (vector int);
   41232      vector unsigned int vec_vclzw (vector int);
   41233 
   41234      vector signed char vec_vgbbd (vector signed char);
   41235      vector unsigned char vec_vgbbd (vector unsigned char);
   41236 
   41237      vector long long vec_vmaxsd (vector long long, vector long long);
   41238 
   41239      vector unsigned long long vec_vmaxud (vector unsigned long long,
   41240                                            unsigned vector long long);
   41241 
   41242      vector long long vec_vminsd (vector long long, vector long long);
   41243 
   41244      vector unsigned long long vec_vminud (vector long long,
   41245                                            vector long long);
   41246 
   41247      vector int vec_vpksdss (vector long long, vector long long);
   41248      vector unsigned int vec_vpksdss (vector long long, vector long long);
   41249 
   41250      vector unsigned int vec_vpkudus (vector unsigned long long,
   41251                                       vector unsigned long long);
   41252 
   41253      vector int vec_vpkudum (vector long long, vector long long);
   41254      vector unsigned int vec_vpkudum (vector unsigned long long,
   41255                                       vector unsigned long long);
   41256      vector bool int vec_vpkudum (vector bool long long, vector bool long long);
   41257 
   41258      vector long long vec_vpopcnt (vector long long);
   41259      vector unsigned long long vec_vpopcnt (vector unsigned long long);
   41260      vector int vec_vpopcnt (vector int);
   41261      vector unsigned int vec_vpopcnt (vector int);
   41262      vector short vec_vpopcnt (vector short);
   41263      vector unsigned short vec_vpopcnt (vector unsigned short);
   41264      vector signed char vec_vpopcnt (vector signed char);
   41265      vector unsigned char vec_vpopcnt (vector unsigned char);
   41266 
   41267      vector signed char vec_vpopcntb (vector signed char);
   41268      vector unsigned char vec_vpopcntb (vector unsigned char);
   41269 
   41270      vector long long vec_vpopcntd (vector long long);
   41271      vector unsigned long long vec_vpopcntd (vector unsigned long long);
   41272 
   41273      vector short vec_vpopcnth (vector short);
   41274      vector unsigned short vec_vpopcnth (vector unsigned short);
   41275 
   41276      vector int vec_vpopcntw (vector int);
   41277      vector unsigned int vec_vpopcntw (vector int);
   41278 
   41279      vector long long vec_vrld (vector long long, vector unsigned long long);
   41280      vector unsigned long long vec_vrld (vector unsigned long long,
   41281                                          vector unsigned long long);
   41282 
   41283      vector long long vec_vsld (vector long long, vector unsigned long long);
   41284      vector long long vec_vsld (vector unsigned long long,
   41285                                 vector unsigned long long);
   41286 
   41287      vector long long vec_vsrad (vector long long, vector unsigned long long);
   41288      vector unsigned long long vec_vsrad (vector unsigned long long,
   41289                                           vector unsigned long long);
   41290 
   41291      vector long long vec_vsrd (vector long long, vector unsigned long long);
   41292      vector unsigned long long char vec_vsrd (vector unsigned long long,
   41293                                               vector unsigned long long);
   41294 
   41295      vector long long vec_vsubudm (vector long long, vector long long);
   41296      vector long long vec_vsubudm (vector bool long long, vector long long);
   41297      vector long long vec_vsubudm (vector long long, vector bool long long);
   41298      vector unsigned long long vec_vsubudm (vector unsigned long long,
   41299                                             vector unsigned long long);
   41300      vector unsigned long long vec_vsubudm (vector bool long long,
   41301                                             vector unsigned long long);
   41302      vector unsigned long long vec_vsubudm (vector unsigned long long,
   41303                                             vector bool long long);
   41304 
   41305      vector long long vec_vupkhsw (vector int);
   41306      vector unsigned long long vec_vupkhsw (vector unsigned int);
   41307 
   41308      vector long long vec_vupklsw (vector int);
   41309      vector unsigned long long vec_vupklsw (vector int);
   41310 
   41311  If the ISA 2.07 additions to the vector/scalar (power8-vector)
   41312 instruction set is available, the following additional functions are
   41313 available for 64-bit targets.  New vector types (VECTOR __INT128_T and
   41314 VECTOR __UINT128_T) are available to hold the __INT128_T and
   41315 __UINT128_T types to use these builtins.
   41316 
   41317  The normal vector extract, and set operations work on VECTOR
   41318 __INT128_T and VECTOR __UINT128_T types, but the index value must be 0.
   41319 
   41320      vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
   41321      vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
   41322 
   41323      vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
   41324      vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
   41325 
   41326      vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
   41327                                      vector __int128_t);
   41328      vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
   41329                                       vector __uint128_t);
   41330 
   41331      vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
   41332                                      vector __int128_t);
   41333      vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
   41334                                       vector __uint128_t);
   41335 
   41336      vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
   41337                                      vector __int128_t);
   41338      vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
   41339                                       vector __uint128_t);
   41340 
   41341      vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
   41342                                      vector __int128_t);
   41343      vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
   41344                                       vector __uint128_t);
   41345 
   41346      vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
   41347      vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
   41348 
   41349      __int128_t vec_vsubuqm (__int128_t, __int128_t);
   41350      __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
   41351 
   41352      vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
   41353      int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
   41354      int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
   41355      int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
   41356      int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
   41357      vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
   41358      int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
   41359      int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
   41360      int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
   41361      int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
   41362 
   41363  If the cryptographic instructions are enabled (`-mcrypto' or
   41364 `-mcpu=power8'), the following builtins are enabled.
   41365 
   41366      vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
   41367 
   41368      vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
   41369                                                          vector unsigned long long);
   41370 
   41371      vector unsigned long long __builtin_crypto_vcipherlast
   41372                                           (vector unsigned long long,
   41373                                            vector unsigned long long);
   41374 
   41375      vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
   41376                                                           vector unsigned long long);
   41377 
   41378      vector unsigned long long __builtin_crypto_vncipherlast
   41379                                           (vector unsigned long long,
   41380                                            vector unsigned long long);
   41381 
   41382      vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
   41383                                                      vector unsigned char,
   41384                                                      vector unsigned char);
   41385 
   41386      vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
   41387                                                       vector unsigned short,
   41388                                                       vector unsigned short);
   41389 
   41390      vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
   41391                                                     vector unsigned int,
   41392                                                     vector unsigned int);
   41393 
   41394      vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
   41395                                                           vector unsigned long long,
   41396                                                           vector unsigned long long);
   41397 
   41398      vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
   41399                                                     vector unsigned char);
   41400 
   41401      vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
   41402                                                      vector unsigned short);
   41403 
   41404      vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
   41405                                                    vector unsigned int);
   41406 
   41407      vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
   41408                                                          vector unsigned long long);
   41409 
   41410      vector unsigned long long __builtin_crypto_vshasigmad
   41411                                     (vector unsigned long long, int, int);
   41412 
   41413      vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
   41414                                                       int, int);
   41415 
   41416  The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
   41417 __BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant
   41418 integer that is 0 or 1.  The third argument to these builtin functions
   41419 must be a constant integer in the range of 0 to 15.
   41420 
   41421 
   41422 File: gcc.info,  Node: PowerPC Hardware Transactional Memory Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
   41423 
   41424 6.56.16 PowerPC Hardware Transactional Memory Built-in Functions
   41425 ----------------------------------------------------------------
   41426 
   41427 GCC provides two interfaces for accessing the Hardware Transactional
   41428 Memory (HTM) instructions available on some of the PowerPC family of
   41429 prcoessors (eg, POWER8).  The two interfaces come in a low level
   41430 interface, consisting of built-in functions specific to PowerPC and a
   41431 higher level interface consisting of inline functions that are common
   41432 between PowerPC and S/390.
   41433 
   41434 6.56.16.1 PowerPC HTM Low Level Built-in Functions
   41435 ..................................................
   41436 
   41437 The following low level built-in functions are available with `-mhtm'
   41438 or `-mcpu=CPU' where CPU is `power8' or later.  They all generate the
   41439 machine instruction that is part of the name.
   41440 
   41441  The HTM built-ins return true or false depending on their success and
   41442 their arguments match exactly the type and order of the associated
   41443 hardware instruction's operands.  Refer to the ISA manual for a
   41444 description of each instruction's operands.
   41445 
   41446      unsigned int __builtin_tbegin (unsigned int)
   41447      unsigned int __builtin_tend (unsigned int)
   41448 
   41449      unsigned int __builtin_tabort (unsigned int)
   41450      unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
   41451      unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
   41452      unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
   41453      unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
   41454 
   41455      unsigned int __builtin_tcheck (unsigned int)
   41456      unsigned int __builtin_treclaim (unsigned int)
   41457      unsigned int __builtin_trechkpt (void)
   41458      unsigned int __builtin_tsr (unsigned int)
   41459 
   41460  In addition to the above HTM built-ins, we have added built-ins for
   41461 some common extended mnemonics of the HTM instructions:
   41462 
   41463      unsigned int __builtin_tendall (void)
   41464      unsigned int __builtin_tresume (void)
   41465      unsigned int __builtin_tsuspend (void)
   41466 
   41467  The following set of built-in functions are available to gain access
   41468 to the HTM specific special purpose registers.
   41469 
   41470      unsigned long __builtin_get_texasr (void)
   41471      unsigned long __builtin_get_texasru (void)
   41472      unsigned long __builtin_get_tfhar (void)
   41473      unsigned long __builtin_get_tfiar (void)
   41474 
   41475      void __builtin_set_texasr (unsigned long);
   41476      void __builtin_set_texasru (unsigned long);
   41477      void __builtin_set_tfhar (unsigned long);
   41478      void __builtin_set_tfiar (unsigned long);
   41479 
   41480  Example usage of these low level built-in functions may look like:
   41481 
   41482      #include <htmintrin.h>
   41483 
   41484      int num_retries = 10;
   41485 
   41486      while (1)
   41487        {
   41488          if (__builtin_tbegin (0))
   41489            {
   41490              /* Transaction State Initiated.  */
   41491              if (is_locked (lock))
   41492                __builtin_tabort (0);
   41493              ... transaction code...
   41494              __builtin_tend (0);
   41495              break;
   41496            }
   41497          else
   41498            {
   41499              /* Transaction State Failed.  Use locks if the transaction
   41500                 failure is "persistent" or we've tried too many times.  */
   41501              if (num_retries-- <= 0
   41502                  || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
   41503                {
   41504                  acquire_lock (lock);
   41505                  ... non transactional fallback path...
   41506                  release_lock (lock);
   41507                  break;
   41508                }
   41509            }
   41510        }
   41511 
   41512  One final built-in function has been added that returns the value of
   41513 the 2-bit Transaction State field of the Machine Status Register (MSR)
   41514 as stored in `CR0'.
   41515 
   41516      unsigned long __builtin_ttest (void)
   41517 
   41518  This built-in can be used to determine the current transaction state
   41519 using the following code example:
   41520 
   41521      #include <htmintrin.h>
   41522 
   41523      unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
   41524 
   41525      if (tx_state == _HTM_TRANSACTIONAL)
   41526        {
   41527          /* Code to use in transactional state.  */
   41528        }
   41529      else if (tx_state == _HTM_NONTRANSACTIONAL)
   41530        {
   41531          /* Code to use in non-transactional state.  */
   41532        }
   41533      else if (tx_state == _HTM_SUSPENDED)
   41534        {
   41535          /* Code to use in transaction suspended state.  */
   41536        }
   41537 
   41538 6.56.16.2 PowerPC HTM High Level Inline Functions
   41539 .................................................
   41540 
   41541 The following high level HTM interface is made available by including
   41542 `<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is
   41543 `power8' or later.  This interface is common between PowerPC and S/390,
   41544 allowing users to write one HTM source implementation that can be
   41545 compiled and executed on either system.
   41546 
   41547      long __TM_simple_begin (void)
   41548      long __TM_begin (void* const TM_buff)
   41549      long __TM_end (void)
   41550      void __TM_abort (void)
   41551      void __TM_named_abort (unsigned char const code)
   41552      void __TM_resume (void)
   41553      void __TM_suspend (void)
   41554 
   41555      long __TM_is_user_abort (void* const TM_buff)
   41556      long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
   41557      long __TM_is_illegal (void* const TM_buff)
   41558      long __TM_is_footprint_exceeded (void* const TM_buff)
   41559      long __TM_nesting_depth (void* const TM_buff)
   41560      long __TM_is_nested_too_deep(void* const TM_buff)
   41561      long __TM_is_conflict(void* const TM_buff)
   41562      long __TM_is_failure_persistent(void* const TM_buff)
   41563      long __TM_failure_address(void* const TM_buff)
   41564      long long __TM_failure_code(void* const TM_buff)
   41565 
   41566  Using these common set of HTM inline functions, we can create a more
   41567 portable version of the HTM example in the previous section that will
   41568 work on either PowerPC or S/390:
   41569 
   41570      #include <htmxlintrin.h>
   41571 
   41572      int num_retries = 10;
   41573      TM_buff_type TM_buff;
   41574 
   41575      while (1)
   41576        {
   41577          if (__TM_begin (TM_buff))
   41578            {
   41579              /* Transaction State Initiated.  */
   41580              if (is_locked (lock))
   41581                __TM_abort ();
   41582              ... transaction code...
   41583              __TM_end ();
   41584              break;
   41585            }
   41586          else
   41587            {
   41588              /* Transaction State Failed.  Use locks if the transaction
   41589                 failure is "persistent" or we've tried too many times.  */
   41590              if (num_retries-- <= 0
   41591                  || __TM_is_failure_persistent (TM_buff))
   41592                {
   41593                  acquire_lock (lock);
   41594                  ... non transactional fallback path...
   41595                  release_lock (lock);
   41596                  break;
   41597                }
   41598            }
   41599        }
   41600 
   41601 
   41602 File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
   41603 
   41604 6.56.17 RX Built-in Functions
   41605 -----------------------------
   41606 
   41607 GCC supports some of the RX instructions which cannot be expressed in
   41608 the C programming language via the use of built-in functions.  The
   41609 following functions are supported:
   41610 
   41611  -- Built-in Function: void __builtin_rx_brk (void)
   41612      Generates the `brk' machine instruction.
   41613 
   41614  -- Built-in Function: void __builtin_rx_clrpsw (int)
   41615      Generates the `clrpsw' machine instruction to clear the specified
   41616      bit in the processor status word.
   41617 
   41618  -- Built-in Function: void __builtin_rx_int (int)
   41619      Generates the `int' machine instruction to generate an interrupt
   41620      with the specified value.
   41621 
   41622  -- Built-in Function: void __builtin_rx_machi (int, int)
   41623      Generates the `machi' machine instruction to add the result of
   41624      multiplying the top 16 bits of the two arguments into the
   41625      accumulator.
   41626 
   41627  -- Built-in Function: void __builtin_rx_maclo (int, int)
   41628      Generates the `maclo' machine instruction to add the result of
   41629      multiplying the bottom 16 bits of the two arguments into the
   41630      accumulator.
   41631 
   41632  -- Built-in Function: void __builtin_rx_mulhi (int, int)
   41633      Generates the `mulhi' machine instruction to place the result of
   41634      multiplying the top 16 bits of the two arguments into the
   41635      accumulator.
   41636 
   41637  -- Built-in Function: void __builtin_rx_mullo (int, int)
   41638      Generates the `mullo' machine instruction to place the result of
   41639      multiplying the bottom 16 bits of the two arguments into the
   41640      accumulator.
   41641 
   41642  -- Built-in Function: int __builtin_rx_mvfachi (void)
   41643      Generates the `mvfachi' machine instruction to read the top 32
   41644      bits of the accumulator.
   41645 
   41646  -- Built-in Function: int __builtin_rx_mvfacmi (void)
   41647      Generates the `mvfacmi' machine instruction to read the middle 32
   41648      bits of the accumulator.
   41649 
   41650  -- Built-in Function: int __builtin_rx_mvfc (int)
   41651      Generates the `mvfc' machine instruction which reads the control
   41652      register specified in its argument and returns its value.
   41653 
   41654  -- Built-in Function: void __builtin_rx_mvtachi (int)
   41655      Generates the `mvtachi' machine instruction to set the top 32 bits
   41656      of the accumulator.
   41657 
   41658  -- Built-in Function: void __builtin_rx_mvtaclo (int)
   41659      Generates the `mvtaclo' machine instruction to set the bottom 32
   41660      bits of the accumulator.
   41661 
   41662  -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
   41663      Generates the `mvtc' machine instruction which sets control
   41664      register number `reg' to `val'.
   41665 
   41666  -- Built-in Function: void __builtin_rx_mvtipl (int)
   41667      Generates the `mvtipl' machine instruction set the interrupt
   41668      priority level.
   41669 
   41670  -- Built-in Function: void __builtin_rx_racw (int)
   41671      Generates the `racw' machine instruction to round the accumulator
   41672      according to the specified mode.
   41673 
   41674  -- Built-in Function: int __builtin_rx_revw (int)
   41675      Generates the `revw' machine instruction which swaps the bytes in
   41676      the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
   41677      and also bits 16-23 occupy bits 24-31 and vice versa.
   41678 
   41679  -- Built-in Function: void __builtin_rx_rmpa (void)
   41680      Generates the `rmpa' machine instruction which initiates a
   41681      repeated multiply and accumulate sequence.
   41682 
   41683  -- Built-in Function: void __builtin_rx_round (float)
   41684      Generates the `round' machine instruction which returns the
   41685      floating-point argument rounded according to the current rounding
   41686      mode set in the floating-point status word register.
   41687 
   41688  -- Built-in Function: int __builtin_rx_sat (int)
   41689      Generates the `sat' machine instruction which returns the
   41690      saturated value of the argument.
   41691 
   41692  -- Built-in Function: void __builtin_rx_setpsw (int)
   41693      Generates the `setpsw' machine instruction to set the specified
   41694      bit in the processor status word.
   41695 
   41696  -- Built-in Function: void __builtin_rx_wait (void)
   41697      Generates the `wait' machine instruction.
   41698 
   41699 
   41700 File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
   41701 
   41702 6.56.18 S/390 System z Built-in Functions
   41703 -----------------------------------------
   41704 
   41705  -- Built-in Function: int __builtin_tbegin (void*)
   41706      Generates the `tbegin' machine instruction starting a
   41707      non-constraint hardware transaction.  If the parameter is non-NULL
   41708      the memory area is used to store the transaction diagnostic buffer
   41709      and will be passed as first operand to `tbegin'.  This buffer can
   41710      be defined using the `struct __htm_tdb' C struct defined in
   41711      `htmintrin.h' and must reside on a double-word boundary.  The
   41712      second tbegin operand is set to `0xff0c'. This enables
   41713      save/restore of all GPRs and disables aborts for FPR and AR
   41714      manipulations inside the transaction body.  The condition code set
   41715      by the tbegin instruction is returned as integer value.  The tbegin
   41716      instruction by definition overwrites the content of all FPRs.  The
   41717      compiler will generate code which saves and restores the FPRs.  For
   41718      soft-float code it is recommended to used the `*_nofloat' variant.
   41719      In order to prevent a TDB from being written it is required to
   41720      pass an constant zero value as parameter.  Passing the zero value
   41721      through a variable is not sufficient.  Although modifications of
   41722      access registers inside the transaction will not trigger an
   41723      transaction abort it is not supported to actually modify them.
   41724      Access registers do not get saved when entering a transaction.
   41725      They will have undefined state when reaching the abort code.
   41726 
   41727  Macros for the possible return codes of tbegin are defined in the
   41728 `htmintrin.h' header file:
   41729 
   41730 `_HTM_TBEGIN_STARTED'
   41731      `tbegin' has been executed as part of normal processing.  The
   41732      transaction body is supposed to be executed.
   41733 
   41734 `_HTM_TBEGIN_INDETERMINATE'
   41735      The transaction was aborted due to an indeterminate condition which
   41736      might be persistent.
   41737 
   41738 `_HTM_TBEGIN_TRANSIENT'
   41739      The transaction aborted due to a transient failure.  The
   41740      transaction should be re-executed in that case.
   41741 
   41742 `_HTM_TBEGIN_PERSISTENT'
   41743      The transaction aborted due to a persistent failure.  Re-execution
   41744      under same circumstances will not be productive.
   41745 
   41746  -- Macro: _HTM_FIRST_USER_ABORT_CODE
   41747      The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h'
   41748      specifies the first abort code which can be used for
   41749      `__builtin_tabort'.  Values below this threshold are reserved for
   41750      machine use.
   41751 
   41752  -- Data type: struct __htm_tdb
   41753      The `struct __htm_tdb' defined in `htmintrin.h' describes the
   41754      structure of the transaction diagnostic block as specified in the
   41755      Principles of Operation manual chapter 5-91.
   41756 
   41757  -- Built-in Function: int __builtin_tbegin_nofloat (void*)
   41758      Same as `__builtin_tbegin' but without FPR saves and restores.
   41759      Using this variant in code making use of FPRs will leave the FPRs
   41760      in undefined state when entering the transaction abort handler
   41761      code.
   41762 
   41763  -- Built-in Function: int __builtin_tbegin_retry (void*, int)
   41764      In addition to `__builtin_tbegin' a loop for transient failures is
   41765      generated.  If tbegin returns a condition code of 2 the transaction
   41766      will be retried as often as specified in the second argument.  The
   41767      perform processor assist instruction is used to tell the CPU about
   41768      the number of fails so far.
   41769 
   41770  -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
   41771      Same as `__builtin_tbegin_retry' but without FPR saves and
   41772      restores.  Using this variant in code making use of FPRs will leave
   41773      the FPRs in undefined state when entering the transaction abort
   41774      handler code.
   41775 
   41776  -- Built-in Function: void __builtin_tbeginc (void)
   41777      Generates the `tbeginc' machine instruction starting a constraint
   41778      hardware transaction.  The second operand is set to `0xff08'.
   41779 
   41780  -- Built-in Function: int __builtin_tend (void)
   41781      Generates the `tend' machine instruction finishing a transaction
   41782      and making the changes visible to other threads.  The condition
   41783      code generated by tend is returned as integer value.
   41784 
   41785  -- Built-in Function: void __builtin_tabort (int)
   41786      Generates the `tabort' machine instruction with the specified
   41787      abort code.  Abort codes from 0 through 255 are reserved and will
   41788      result in an error message.
   41789 
   41790  -- Built-in Function: void __builtin_tx_assist (int)
   41791      Generates the `ppa rX,rY,1' machine instruction.  Where the
   41792      integer parameter is loaded into rX and a value of zero is loaded
   41793      into rY.  The integer parameter specifies the number of times the
   41794      transaction repeatedly aborted.
   41795 
   41796  -- Built-in Function: int __builtin_tx_nesting_depth (void)
   41797      Generates the `etnd' machine instruction.  The current nesting
   41798      depth is returned as integer value.  For a nesting depth of 0 the
   41799      code is not executed as part of an transaction.
   41800 
   41801  -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
   41802           uint64_t)
   41803      Generates the `ntstg' machine instruction.  The second argument is
   41804      written to the first arguments location.  The store operation will
   41805      not be rolled-back in case of an transaction abort.
   41806 
   41807 
   41808 File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
   41809 
   41810 6.56.19 SH Built-in Functions
   41811 -----------------------------
   41812 
   41813 The following built-in functions are supported on the SH1, SH2, SH3 and
   41814 SH4 families of processors:
   41815 
   41816  -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
   41817      Sets the `GBR' register to the specified value PTR.  This is
   41818      usually used by system code that manages threads and execution
   41819      contexts.  The compiler normally does not generate code that
   41820      modifies the contents of `GBR' and thus the value is preserved
   41821      across function calls.  Changing the `GBR' value in user code must
   41822      be done with caution, since the compiler might use `GBR' in order
   41823      to access thread local variables.
   41824 
   41825 
   41826  -- Built-in Function: void * __builtin_thread_pointer (void)
   41827      Returns the value that is currently set in the `GBR' register.
   41828      Memory loads and stores that use the thread pointer as a base
   41829      address are turned into `GBR' based displacement loads and stores,
   41830      if possible.  For example:
   41831           struct my_tcb
   41832           {
   41833              int a, b, c, d, e;
   41834           };
   41835 
   41836           int get_tcb_value (void)
   41837           {
   41838             // Generate `mov.l @(8,gbr),r0' instruction
   41839             return ((my_tcb*)__builtin_thread_pointer ())->c;
   41840           }
   41841 
   41842 
   41843 File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
   41844 
   41845 6.56.20 SPARC VIS Built-in Functions
   41846 ------------------------------------
   41847 
   41848 GCC supports SIMD operations on the SPARC using both the generic vector
   41849 extensions (*note Vector Extensions::) as well as built-in functions for
   41850 the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
   41851 switch, the VIS extension is exposed as the following built-in
   41852 functions:
   41853 
   41854      typedef int v1si __attribute__ ((vector_size (4)));
   41855      typedef int v2si __attribute__ ((vector_size (8)));
   41856      typedef short v4hi __attribute__ ((vector_size (8)));
   41857      typedef short v2hi __attribute__ ((vector_size (4)));
   41858      typedef unsigned char v8qi __attribute__ ((vector_size (8)));
   41859      typedef unsigned char v4qi __attribute__ ((vector_size (4)));
   41860 
   41861      void __builtin_vis_write_gsr (int64_t);
   41862      int64_t __builtin_vis_read_gsr (void);
   41863 
   41864      void * __builtin_vis_alignaddr (void *, long);
   41865      void * __builtin_vis_alignaddrl (void *, long);
   41866      int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
   41867      v2si __builtin_vis_faligndatav2si (v2si, v2si);
   41868      v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
   41869      v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
   41870 
   41871      v4hi __builtin_vis_fexpand (v4qi);
   41872 
   41873      v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
   41874      v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
   41875      v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
   41876      v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
   41877      v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
   41878      v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
   41879      v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
   41880 
   41881      v4qi __builtin_vis_fpack16 (v4hi);
   41882      v8qi __builtin_vis_fpack32 (v2si, v8qi);
   41883      v2hi __builtin_vis_fpackfix (v2si);
   41884      v8qi __builtin_vis_fpmerge (v4qi, v4qi);
   41885 
   41886      int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
   41887 
   41888      long __builtin_vis_edge8 (void *, void *);
   41889      long __builtin_vis_edge8l (void *, void *);
   41890      long __builtin_vis_edge16 (void *, void *);
   41891      long __builtin_vis_edge16l (void *, void *);
   41892      long __builtin_vis_edge32 (void *, void *);
   41893      long __builtin_vis_edge32l (void *, void *);
   41894 
   41895      long __builtin_vis_fcmple16 (v4hi, v4hi);
   41896      long __builtin_vis_fcmple32 (v2si, v2si);
   41897      long __builtin_vis_fcmpne16 (v4hi, v4hi);
   41898      long __builtin_vis_fcmpne32 (v2si, v2si);
   41899      long __builtin_vis_fcmpgt16 (v4hi, v4hi);
   41900      long __builtin_vis_fcmpgt32 (v2si, v2si);
   41901      long __builtin_vis_fcmpeq16 (v4hi, v4hi);
   41902      long __builtin_vis_fcmpeq32 (v2si, v2si);
   41903 
   41904      v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
   41905      v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
   41906      v2si __builtin_vis_fpadd32 (v2si, v2si);
   41907      v1si __builtin_vis_fpadd32s (v1si, v1si);
   41908      v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
   41909      v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
   41910      v2si __builtin_vis_fpsub32 (v2si, v2si);
   41911      v1si __builtin_vis_fpsub32s (v1si, v1si);
   41912 
   41913      long __builtin_vis_array8 (long, long);
   41914      long __builtin_vis_array16 (long, long);
   41915      long __builtin_vis_array32 (long, long);
   41916 
   41917  When you use the `-mvis2' switch, the VIS version 2.0 built-in
   41918 functions also become available:
   41919 
   41920      long __builtin_vis_bmask (long, long);
   41921      int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
   41922      v2si __builtin_vis_bshufflev2si (v2si, v2si);
   41923      v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
   41924      v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
   41925 
   41926      long __builtin_vis_edge8n (void *, void *);
   41927      long __builtin_vis_edge8ln (void *, void *);
   41928      long __builtin_vis_edge16n (void *, void *);
   41929      long __builtin_vis_edge16ln (void *, void *);
   41930      long __builtin_vis_edge32n (void *, void *);
   41931      long __builtin_vis_edge32ln (void *, void *);
   41932 
   41933  When you use the `-mvis3' switch, the VIS version 3.0 built-in
   41934 functions also become available:
   41935 
   41936      void __builtin_vis_cmask8 (long);
   41937      void __builtin_vis_cmask16 (long);
   41938      void __builtin_vis_cmask32 (long);
   41939 
   41940      v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
   41941 
   41942      v4hi __builtin_vis_fsll16 (v4hi, v4hi);
   41943      v4hi __builtin_vis_fslas16 (v4hi, v4hi);
   41944      v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
   41945      v4hi __builtin_vis_fsra16 (v4hi, v4hi);
   41946      v2si __builtin_vis_fsll16 (v2si, v2si);
   41947      v2si __builtin_vis_fslas16 (v2si, v2si);
   41948      v2si __builtin_vis_fsrl16 (v2si, v2si);
   41949      v2si __builtin_vis_fsra16 (v2si, v2si);
   41950 
   41951      long __builtin_vis_pdistn (v8qi, v8qi);
   41952 
   41953      v4hi __builtin_vis_fmean16 (v4hi, v4hi);
   41954 
   41955      int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
   41956      int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
   41957 
   41958      v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
   41959      v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
   41960      v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
   41961      v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
   41962      v2si __builtin_vis_fpadds32 (v2si, v2si);
   41963      v1si __builtin_vis_fpadds32s (v1si, v1si);
   41964      v2si __builtin_vis_fpsubs32 (v2si, v2si);
   41965      v1si __builtin_vis_fpsubs32s (v1si, v1si);
   41966 
   41967      long __builtin_vis_fucmple8 (v8qi, v8qi);
   41968      long __builtin_vis_fucmpne8 (v8qi, v8qi);
   41969      long __builtin_vis_fucmpgt8 (v8qi, v8qi);
   41970      long __builtin_vis_fucmpeq8 (v8qi, v8qi);
   41971 
   41972      float __builtin_vis_fhadds (float, float);
   41973      double __builtin_vis_fhaddd (double, double);
   41974      float __builtin_vis_fhsubs (float, float);
   41975      double __builtin_vis_fhsubd (double, double);
   41976      float __builtin_vis_fnhadds (float, float);
   41977      double __builtin_vis_fnhaddd (double, double);
   41978 
   41979      int64_t __builtin_vis_umulxhi (int64_t, int64_t);
   41980      int64_t __builtin_vis_xmulx (int64_t, int64_t);
   41981      int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
   41982 
   41983 
   41984 File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
   41985 
   41986 6.56.21 SPU Built-in Functions
   41987 ------------------------------
   41988 
   41989 GCC provides extensions for the SPU processor as described in the
   41990 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
   41991 found at `http://cell.scei.co.jp/' or
   41992 `http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
   41993 differs in several ways.
   41994 
   41995    * The optional extension of specifying vector constants in
   41996      parentheses is not supported.
   41997 
   41998    * A vector initializer requires no cast if the vector constant is of
   41999      the same type as the variable it is initializing.
   42000 
   42001    * If `signed' or `unsigned' is omitted, the signedness of the vector
   42002      type is the default signedness of the base type.  The default
   42003      varies depending on the operating system, so a portable program
   42004      should always specify the signedness.
   42005 
   42006    * By default, the keyword `__vector' is added. The macro `vector' is
   42007      defined in `<spu_intrinsics.h>' and can be undefined.
   42008 
   42009    * GCC allows using a `typedef' name as the type specifier for a
   42010      vector type.
   42011 
   42012    * For C, overloaded functions are implemented with macros so the
   42013      following does not work:
   42014 
   42015             spu_add ((vector signed int){1, 2, 3, 4}, foo);
   42016 
   42017      Since `spu_add' is a macro, the vector constant in the example is
   42018      treated as four separate arguments.  Wrap the entire argument in
   42019      parentheses for this to work.
   42020 
   42021    * The extended version of `__builtin_expect' is not supported.
   42022 
   42023 
   42024  _Note:_ Only the interface described in the aforementioned
   42025 specification is supported. Internally, GCC uses built-in functions to
   42026 implement the required functionality, but these are not supported and
   42027 are subject to change without notice.
   42028 
   42029 
   42030 File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
   42031 
   42032 6.56.22 TI C6X Built-in Functions
   42033 ---------------------------------
   42034 
   42035 GCC provides intrinsics to access certain instructions of the TI C6X
   42036 processors.  These intrinsics, listed below, are available after
   42037 inclusion of the `c6x_intrinsics.h' header file.  They map directly to
   42038 C6X instructions.
   42039 
   42040 
   42041      int _sadd (int, int)
   42042      int _ssub (int, int)
   42043      int _sadd2 (int, int)
   42044      int _ssub2 (int, int)
   42045      long long _mpy2 (int, int)
   42046      long long _smpy2 (int, int)
   42047      int _add4 (int, int)
   42048      int _sub4 (int, int)
   42049      int _saddu4 (int, int)
   42050 
   42051      int _smpy (int, int)
   42052      int _smpyh (int, int)
   42053      int _smpyhl (int, int)
   42054      int _smpylh (int, int)
   42055 
   42056      int _sshl (int, int)
   42057      int _subc (int, int)
   42058 
   42059      int _avg2 (int, int)
   42060      int _avgu4 (int, int)
   42061 
   42062      int _clrr (int, int)
   42063      int _extr (int, int)
   42064      int _extru (int, int)
   42065      int _abs (int)
   42066      int _abs2 (int)
   42067 
   42068 
   42069 File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
   42070 
   42071 6.56.23 TILE-Gx Built-in Functions
   42072 ----------------------------------
   42073 
   42074 GCC provides intrinsics to access every instruction of the TILE-Gx
   42075 processor.  The intrinsics are of the form:
   42076 
   42077 
   42078      unsigned long long __insn_OP (...)
   42079 
   42080  Where OP is the name of the instruction.  Refer to the ISA manual for
   42081 the complete list of instructions.
   42082 
   42083  GCC also provides intrinsics to directly access the network registers.
   42084 The intrinsics are:
   42085 
   42086 
   42087      unsigned long long __tile_idn0_receive (void)
   42088      unsigned long long __tile_idn1_receive (void)
   42089      unsigned long long __tile_udn0_receive (void)
   42090      unsigned long long __tile_udn1_receive (void)
   42091      unsigned long long __tile_udn2_receive (void)
   42092      unsigned long long __tile_udn3_receive (void)
   42093      void __tile_idn_send (unsigned long long)
   42094      void __tile_udn_send (unsigned long long)
   42095 
   42096  The intrinsic `void __tile_network_barrier (void)' is used to
   42097 guarantee that no network operations before it are reordered with those
   42098 after it.
   42099 
   42100 
   42101 File: gcc.info,  Node: TILEPro Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
   42102 
   42103 6.56.24 TILEPro Built-in Functions
   42104 ----------------------------------
   42105 
   42106 GCC provides intrinsics to access every instruction of the TILEPro
   42107 processor.  The intrinsics are of the form:
   42108 
   42109 
   42110      unsigned __insn_OP (...)
   42111 
   42112 where OP is the name of the instruction.  Refer to the ISA manual for
   42113 the complete list of instructions.
   42114 
   42115  GCC also provides intrinsics to directly access the network registers.
   42116 The intrinsics are:
   42117 
   42118 
   42119      unsigned __tile_idn0_receive (void)
   42120      unsigned __tile_idn1_receive (void)
   42121      unsigned __tile_sn_receive (void)
   42122      unsigned __tile_udn0_receive (void)
   42123      unsigned __tile_udn1_receive (void)
   42124      unsigned __tile_udn2_receive (void)
   42125      unsigned __tile_udn3_receive (void)
   42126      void __tile_idn_send (unsigned)
   42127      void __tile_sn_send (unsigned)
   42128      void __tile_udn_send (unsigned)
   42129 
   42130  The intrinsic `void __tile_network_barrier (void)' is used to
   42131 guarantee that no network operations before it are reordered with those
   42132 after it.
   42133 
   42134 
   42135 File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
   42136 
   42137 6.57 Format Checks Specific to Particular Target Machines
   42138 =========================================================
   42139 
   42140 For some target machines, GCC supports additional options to the format
   42141 attribute (*note Declaring Attributes of Functions: Function
   42142 Attributes.).
   42143 
   42144 * Menu:
   42145 
   42146 * Solaris Format Checks::
   42147 * Darwin Format Checks::
   42148 
   42149 
   42150 File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
   42151 
   42152 6.57.1 Solaris Format Checks
   42153 ----------------------------
   42154 
   42155 Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
   42156 `cmn_err' accepts a subset of the standard `printf' conversions, and
   42157 the two-argument `%b' conversion for displaying bit-fields.  See the
   42158 Solaris man page for `cmn_err' for more information.
   42159 
   42160 
   42161 File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
   42162 
   42163 6.57.2 Darwin Format Checks
   42164 ---------------------------
   42165 
   42166 Darwin targets support the `CFString' (or `__CFString__') in the format
   42167 attribute context.  Declarations made with such attribution are parsed
   42168 for correct syntax and format argument types.  However, parsing of the
   42169 format string itself is currently undefined and is not carried out by
   42170 this version of the compiler.
   42171 
   42172  Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
   42173 may also be used as format arguments.  Note that the relevant headers
   42174 are only likely to be available on Darwin (OSX) installations.  On such
   42175 installations, the XCode and system documentation provide descriptions
   42176 of `CFString', `CFStringRefs' and associated functions.
   42177 
   42178 
   42179 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
   42180 
   42181 6.58 Pragmas Accepted by GCC
   42182 ============================
   42183 
   42184 GCC supports several types of pragmas, primarily in order to compile
   42185 code originally written for other compilers.  Note that in general we
   42186 do not recommend the use of pragmas; *Note Function Attributes::, for
   42187 further explanation.
   42188 
   42189 * Menu:
   42190 
   42191 * ARM Pragmas::
   42192 * M32C Pragmas::
   42193 * MeP Pragmas::
   42194 * RS/6000 and PowerPC Pragmas::
   42195 * Darwin Pragmas::
   42196 * Solaris Pragmas::
   42197 * Symbol-Renaming Pragmas::
   42198 * Structure-Packing Pragmas::
   42199 * Weak Pragmas::
   42200 * Diagnostic Pragmas::
   42201 * Visibility Pragmas::
   42202 * Push/Pop Macro Pragmas::
   42203 * Function Specific Option Pragmas::
   42204 
   42205 
   42206 File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
   42207 
   42208 6.58.1 ARM Pragmas
   42209 ------------------
   42210 
   42211 The ARM target defines pragmas for controlling the default addition of
   42212 `long_call' and `short_call' attributes to functions.  *Note Function
   42213 Attributes::, for information about the effects of these attributes.
   42214 
   42215 `long_calls'
   42216      Set all subsequent functions to have the `long_call' attribute.
   42217 
   42218 `no_long_calls'
   42219      Set all subsequent functions to have the `short_call' attribute.
   42220 
   42221 `long_calls_off'
   42222      Do not affect the `long_call' or `short_call' attributes of
   42223      subsequent functions.
   42224 
   42225 
   42226 File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
   42227 
   42228 6.58.2 M32C Pragmas
   42229 -------------------
   42230 
   42231 `GCC memregs NUMBER'
   42232      Overrides the command-line option `-memregs=' for the current
   42233      file.  Use with care!  This pragma must be before any function in
   42234      the file, and mixing different memregs values in different objects
   42235      may make them incompatible.  This pragma is useful when a
   42236      performance-critical function uses a memreg for temporary values,
   42237      as it may allow you to reduce the number of memregs used.
   42238 
   42239 `ADDRESS NAME ADDRESS'
   42240      For any declared symbols matching NAME, this does three things to
   42241      that symbol: it forces the symbol to be located at the given
   42242      address (a number), it forces the symbol to be volatile, and it
   42243      changes the symbol's scope to be static.  This pragma exists for
   42244      compatibility with other compilers, but note that the common
   42245      `1234H' numeric syntax is not supported (use `0x1234' instead).
   42246      Example:
   42247 
   42248           #pragma ADDRESS port3 0x103
   42249           char port3;
   42250 
   42251 
   42252 
   42253 File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
   42254 
   42255 6.58.3 MeP Pragmas
   42256 ------------------
   42257 
   42258 `custom io_volatile (on|off)'
   42259      Overrides the command-line option `-mio-volatile' for the current
   42260      file.  Note that for compatibility with future GCC releases, this
   42261      option should only be used once before any `io' variables in each
   42262      file.
   42263 
   42264 `GCC coprocessor available REGISTERS'
   42265      Specifies which coprocessor registers are available to the register
   42266      allocator.  REGISTERS may be a single register, register range
   42267      separated by ellipses, or comma-separated list of those.  Example:
   42268 
   42269           #pragma GCC coprocessor available $c0...$c10, $c28
   42270 
   42271 `GCC coprocessor call_saved REGISTERS'
   42272      Specifies which coprocessor registers are to be saved and restored
   42273      by any function using them.  REGISTERS may be a single register,
   42274      register range separated by ellipses, or comma-separated list of
   42275      those.  Example:
   42276 
   42277           #pragma GCC coprocessor call_saved $c4...$c6, $c31
   42278 
   42279 `GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
   42280      Creates and defines a register class.  These register classes can
   42281      be used by inline `asm' constructs.  REGISTERS may be a single
   42282      register, register range separated by ellipses, or comma-separated
   42283      list of those.  Example:
   42284 
   42285           #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
   42286 
   42287           asm ("cpfoo %0" : "=B" (x));
   42288 
   42289 `GCC disinterrupt NAME , NAME ...'
   42290      For the named functions, the compiler adds code to disable
   42291      interrupts for the duration of those functions.  If any functions
   42292      so named are not encountered in the source, a warning is emitted
   42293      that the pragma is not used.  Examples:
   42294 
   42295           #pragma disinterrupt foo
   42296           #pragma disinterrupt bar, grill
   42297           int foo () { ... }
   42298 
   42299 `GCC call NAME , NAME ...'
   42300      For the named functions, the compiler always uses a
   42301      register-indirect call model when calling the named functions.
   42302      Examples:
   42303 
   42304           extern int foo ();
   42305           #pragma call foo
   42306 
   42307 
   42308 
   42309 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
   42310 
   42311 6.58.4 RS/6000 and PowerPC Pragmas
   42312 ----------------------------------
   42313 
   42314 The RS/6000 and PowerPC targets define one pragma for controlling
   42315 whether or not the `longcall' attribute is added to function
   42316 declarations by default.  This pragma overrides the `-mlongcall'
   42317 option, but not the `longcall' and `shortcall' attributes.  *Note
   42318 RS/6000 and PowerPC Options::, for more information about when long
   42319 calls are and are not necessary.
   42320 
   42321 `longcall (1)'
   42322      Apply the `longcall' attribute to all subsequent function
   42323      declarations.
   42324 
   42325 `longcall (0)'
   42326      Do not apply the `longcall' attribute to subsequent function
   42327      declarations.
   42328 
   42329 
   42330 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
   42331 
   42332 6.58.5 Darwin Pragmas
   42333 ---------------------
   42334 
   42335 The following pragmas are available for all architectures running the
   42336 Darwin operating system.  These are useful for compatibility with other
   42337 Mac OS compilers.
   42338 
   42339 `mark TOKENS...'
   42340      This pragma is accepted, but has no effect.
   42341 
   42342 `options align=ALIGNMENT'
   42343      This pragma sets the alignment of fields in structures.  The
   42344      values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
   42345      `power', to emulate PowerPC alignment.  Uses of this pragma nest
   42346      properly; to restore the previous setting, use `reset' for the
   42347      ALIGNMENT.
   42348 
   42349 `segment TOKENS...'
   42350      This pragma is accepted, but has no effect.
   42351 
   42352 `unused (VAR [, VAR]...)'
   42353      This pragma declares variables to be possibly unused.  GCC does not
   42354      produce warnings for the listed variables.  The effect is similar
   42355      to that of the `unused' attribute, except that this pragma may
   42356      appear anywhere within the variables' scopes.
   42357 
   42358 
   42359 File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
   42360 
   42361 6.58.6 Solaris Pragmas
   42362 ----------------------
   42363 
   42364 The Solaris target supports `#pragma redefine_extname' (*note
   42365 Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
   42366 directives for compatibility with the system compiler.
   42367 
   42368 `align ALIGNMENT (VARIABLE [, VARIABLE]...)'
   42369      Increase the minimum alignment of each VARIABLE to ALIGNMENT.
   42370      This is the same as GCC's `aligned' attribute *note Variable
   42371      Attributes::).  Macro expansion occurs on the arguments to this
   42372      pragma when compiling C and Objective-C.  It does not currently
   42373      occur when compiling C++, but this is a bug which may be fixed in
   42374      a future release.
   42375 
   42376 `fini (FUNCTION [, FUNCTION]...)'
   42377      This pragma causes each listed FUNCTION to be called after main,
   42378      or during shared module unloading, by adding a call to the `.fini'
   42379      section.
   42380 
   42381 `init (FUNCTION [, FUNCTION]...)'
   42382      This pragma causes each listed FUNCTION to be called during
   42383      initialization (before `main') or during shared module loading, by
   42384      adding a call to the `.init' section.
   42385 
   42386 
   42387 
   42388 File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
   42389 
   42390 6.58.7 Symbol-Renaming Pragmas
   42391 ------------------------------
   42392 
   42393 For compatibility with the Solaris system headers, GCC supports two
   42394 `#pragma' directives that change the name used in assembly for a given
   42395 declaration. To get this effect on all platforms supported by GCC, use
   42396 the asm labels extension (*note Asm Labels::).
   42397 
   42398 `redefine_extname OLDNAME NEWNAME'
   42399      This pragma gives the C function OLDNAME the assembly symbol
   42400      NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is
   42401      defined if this pragma is available (currently on all platforms).
   42402 
   42403  This pragma and the asm labels extension interact in a complicated
   42404 manner.  Here are some corner cases you may want to be aware of.
   42405 
   42406   1. Both pragmas silently apply only to declarations with external
   42407      linkage.  Asm labels do not have this restriction.
   42408 
   42409   2. In C++, both pragmas silently apply only to declarations with "C"
   42410      linkage.  Again, asm labels do not have this restriction.
   42411 
   42412   3. If any of the three ways of changing the assembly name of a
   42413      declaration is applied to a declaration whose assembly name has
   42414      already been determined (either by a previous use of one of these
   42415      features, or because the compiler needed the assembly name in
   42416      order to generate code), and the new name is different, a warning
   42417      issues and the name does not change.
   42418 
   42419   4. The OLDNAME used by `#pragma redefine_extname' is always the
   42420      C-language name.
   42421 
   42422 
   42423 File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
   42424 
   42425 6.58.8 Structure-Packing Pragmas
   42426 --------------------------------
   42427 
   42428 For compatibility with Microsoft Windows compilers, GCC supports a set
   42429 of `#pragma' directives that change the maximum alignment of members of
   42430 structures (other than zero-width bit-fields), unions, and classes
   42431 subsequently defined. The N value below always is required to be a
   42432 small power of two and specifies the new alignment in bytes.
   42433 
   42434   1. `#pragma pack(N)' simply sets the new alignment.
   42435 
   42436   2. `#pragma pack()' sets the alignment to the one that was in effect
   42437      when compilation started (see also command-line option
   42438      `-fpack-struct[=N]' *note Code Gen Options::).
   42439 
   42440   3. `#pragma pack(push[,N])' pushes the current alignment setting on
   42441      an internal stack and then optionally sets the new alignment.
   42442 
   42443   4. `#pragma pack(pop)' restores the alignment setting to the one
   42444      saved at the top of the internal stack (and removes that stack
   42445      entry).  Note that `#pragma pack([N])' does not influence this
   42446      internal stack; thus it is possible to have `#pragma pack(push)'
   42447      followed by multiple `#pragma pack(N)' instances and finalized by
   42448      a single `#pragma pack(pop)'.
   42449 
   42450  Some targets, e.g. i386 and PowerPC, support the `ms_struct' `#pragma'
   42451 which lays out a structure as the documented `__attribute__
   42452 ((ms_struct))'.
   42453   1. `#pragma ms_struct on' turns on the layout for structures declared.
   42454 
   42455   2. `#pragma ms_struct off' turns off the layout for structures
   42456      declared.
   42457 
   42458   3. `#pragma ms_struct reset' goes back to the default layout.
   42459 
   42460 
   42461 File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
   42462 
   42463 6.58.9 Weak Pragmas
   42464 -------------------
   42465 
   42466 For compatibility with SVR4, GCC supports a set of `#pragma' directives
   42467 for declaring symbols to be weak, and defining weak aliases.
   42468 
   42469 `#pragma weak SYMBOL'
   42470      This pragma declares SYMBOL to be weak, as if the declaration had
   42471      the attribute of the same name.  The pragma may appear before or
   42472      after the declaration of SYMBOL.  It is not an error for SYMBOL to
   42473      never be defined at all.
   42474 
   42475 `#pragma weak SYMBOL1 = SYMBOL2'
   42476      This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
   42477      an error if SYMBOL2 is not defined in the current translation unit.
   42478 
   42479 
   42480 File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
   42481 
   42482 6.58.10 Diagnostic Pragmas
   42483 --------------------------
   42484 
   42485 GCC allows the user to selectively enable or disable certain types of
   42486 diagnostics, and change the kind of the diagnostic.  For example, a
   42487 project's policy might require that all sources compile with `-Werror'
   42488 but certain files might have exceptions allowing specific types of
   42489 warnings.  Or, a project might selectively enable diagnostics and treat
   42490 them as errors depending on which preprocessor macros are defined.
   42491 
   42492 `#pragma GCC diagnostic KIND OPTION'
   42493      Modifies the disposition of a diagnostic.  Note that not all
   42494      diagnostics are modifiable; at the moment only warnings (normally
   42495      controlled by `-W...') can be controlled, and not all of them.
   42496      Use `-fdiagnostics-show-option' to determine which diagnostics are
   42497      controllable and which option controls them.
   42498 
   42499      KIND is `error' to treat this diagnostic as an error, `warning' to
   42500      treat it like a warning (even if `-Werror' is in effect), or
   42501      `ignored' if the diagnostic is to be ignored.  OPTION is a double
   42502      quoted string that matches the command-line option.
   42503 
   42504           #pragma GCC diagnostic warning "-Wformat"
   42505           #pragma GCC diagnostic error "-Wformat"
   42506           #pragma GCC diagnostic ignored "-Wformat"
   42507 
   42508      Note that these pragmas override any command-line options.  GCC
   42509      keeps track of the location of each pragma, and issues diagnostics
   42510      according to the state as of that point in the source file.  Thus,
   42511      pragmas occurring after a line do not affect diagnostics caused by
   42512      that line.
   42513 
   42514 `#pragma GCC diagnostic push'
   42515 `#pragma GCC diagnostic pop'
   42516      Causes GCC to remember the state of the diagnostics as of each
   42517      `push', and restore to that point at each `pop'.  If a `pop' has
   42518      no matching `push', the command-line options are restored.
   42519 
   42520           #pragma GCC diagnostic error "-Wuninitialized"
   42521             foo(a);                       /* error is given for this one */
   42522           #pragma GCC diagnostic push
   42523           #pragma GCC diagnostic ignored "-Wuninitialized"
   42524             foo(b);                       /* no diagnostic for this one */
   42525           #pragma GCC diagnostic pop
   42526             foo(c);                       /* error is given for this one */
   42527           #pragma GCC diagnostic pop
   42528             foo(d);                       /* depends on command-line options */
   42529 
   42530 
   42531  GCC also offers a simple mechanism for printing messages during
   42532 compilation.
   42533 
   42534 `#pragma message STRING'
   42535      Prints STRING as a compiler message on compilation.  The message
   42536      is informational only, and is neither a compilation warning nor an
   42537      error.
   42538 
   42539           #pragma message "Compiling " __FILE__ "..."
   42540 
   42541      STRING may be parenthesized, and is printed with location
   42542      information.  For example,
   42543 
   42544           #define DO_PRAGMA(x) _Pragma (#x)
   42545           #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
   42546 
   42547           TODO(Remember to fix this)
   42548 
   42549      prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
   42550      fix this'.
   42551 
   42552 
   42553 
   42554 File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
   42555 
   42556 6.58.11 Visibility Pragmas
   42557 --------------------------
   42558 
   42559 `#pragma GCC visibility push(VISIBILITY)'
   42560 `#pragma GCC visibility pop'
   42561      This pragma allows the user to set the visibility for multiple
   42562      declarations without having to give each a visibility attribute
   42563      *Note Function Attributes::, for more information about visibility
   42564      and the attribute syntax.
   42565 
   42566      In C++, `#pragma GCC visibility' affects only namespace-scope
   42567      declarations.  Class members and template specializations are not
   42568      affected; if you want to override the visibility for a particular
   42569      member or instantiation, you must use an attribute.
   42570 
   42571 
   42572 
   42573 File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
   42574 
   42575 6.58.12 Push/Pop Macro Pragmas
   42576 ------------------------------
   42577 
   42578 For compatibility with Microsoft Windows compilers, GCC supports
   42579 `#pragma push_macro("MACRO_NAME")' and `#pragma
   42580 pop_macro("MACRO_NAME")'.
   42581 
   42582 `#pragma push_macro("MACRO_NAME")'
   42583      This pragma saves the value of the macro named as MACRO_NAME to
   42584      the top of the stack for this macro.
   42585 
   42586 `#pragma pop_macro("MACRO_NAME")'
   42587      This pragma sets the value of the macro named as MACRO_NAME to the
   42588      value on top of the stack for this macro. If the stack for
   42589      MACRO_NAME is empty, the value of the macro remains unchanged.
   42590 
   42591  For example:
   42592 
   42593      #define X  1
   42594      #pragma push_macro("X")
   42595      #undef X
   42596      #define X -1
   42597      #pragma pop_macro("X")
   42598      int x [X];
   42599 
   42600 In this example, the definition of X as 1 is saved by `#pragma
   42601 push_macro' and restored by `#pragma pop_macro'.
   42602 
   42603 
   42604 File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
   42605 
   42606 6.58.13 Function Specific Option Pragmas
   42607 ----------------------------------------
   42608 
   42609 `#pragma GCC target ("STRING"...)'
   42610      This pragma allows you to set target specific options for functions
   42611      defined later in the source file.  One or more strings can be
   42612      specified.  Each function that is defined after this point is as
   42613      if `attribute((target("STRING")))' was specified for that
   42614      function.  The parenthesis around the options is optional.  *Note
   42615      Function Attributes::, for more information about the `target'
   42616      attribute and the attribute syntax.
   42617 
   42618      The `#pragma GCC target' attribute is not implemented in GCC
   42619      versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
   42620      PowerPC back ends.  At present, it is not implemented for other
   42621      back ends.
   42622 
   42623 `#pragma GCC optimize ("STRING"...)'
   42624      This pragma allows you to set global optimization options for
   42625      functions defined later in the source file.  One or more strings
   42626      can be specified.  Each function that is defined after this point
   42627      is as if `attribute((optimize("STRING")))' was specified for that
   42628      function.  The parenthesis around the options is optional.  *Note
   42629      Function Attributes::, for more information about the `optimize'
   42630      attribute and the attribute syntax.
   42631 
   42632      The `#pragma GCC optimize' pragma is not implemented in GCC
   42633      versions earlier than 4.4.
   42634 
   42635 `#pragma GCC push_options'
   42636 `#pragma GCC pop_options'
   42637      These pragmas maintain a stack of the current target and
   42638      optimization options.  It is intended for include files where you
   42639      temporarily want to switch to using a different `#pragma GCC
   42640      target' or `#pragma GCC optimize' and then to pop back to the
   42641      previous options.
   42642 
   42643      The `#pragma GCC push_options' and `#pragma GCC pop_options'
   42644      pragmas are not implemented in GCC versions earlier than 4.4.
   42645 
   42646 `#pragma GCC reset_options'
   42647      This pragma clears the current `#pragma GCC target' and `#pragma
   42648      GCC optimize' to use the default switches as specified on the
   42649      command line.
   42650 
   42651      The `#pragma GCC reset_options' pragma is not implemented in GCC
   42652      versions earlier than 4.4.
   42653 
   42654 
   42655 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
   42656 
   42657 6.59 Unnamed struct/union fields within structs/unions
   42658 ======================================================
   42659 
   42660 As permitted by ISO C11 and for compatibility with other compilers, GCC
   42661 allows you to define a structure or union that contains, as fields,
   42662 structures and unions without names.  For example:
   42663 
   42664      struct {
   42665        int a;
   42666        union {
   42667          int b;
   42668          float c;
   42669        };
   42670        int d;
   42671      } foo;
   42672 
   42673 In this example, you are able to access members of the unnamed union
   42674 with code like `foo.b'.  Note that only unnamed structs and unions are
   42675 allowed, you may not have, for example, an unnamed `int'.
   42676 
   42677  You must never create such structures that cause ambiguous field
   42678 definitions.  For example, in this structure:
   42679 
   42680      struct {
   42681        int a;
   42682        struct {
   42683          int a;
   42684        };
   42685      } foo;
   42686 
   42687 it is ambiguous which `a' is being referred to with `foo.a'.  The
   42688 compiler gives errors for such constructs.
   42689 
   42690  Unless `-fms-extensions' is used, the unnamed field must be a
   42691 structure or union definition without a tag (for example, `struct { int
   42692 a; };').  If `-fms-extensions' is used, the field may also be a
   42693 definition with a tag such as `struct foo { int a; };', a reference to
   42694 a previously defined structure or union such as `struct foo;', or a
   42695 reference to a `typedef' name for a previously defined structure or
   42696 union type.
   42697 
   42698  The option `-fplan9-extensions' enables `-fms-extensions' as well as
   42699 two other extensions.  First, a pointer to a structure is automatically
   42700 converted to a pointer to an anonymous field for assignments and
   42701 function calls.  For example:
   42702 
   42703      struct s1 { int a; };
   42704      struct s2 { struct s1; };
   42705      extern void f1 (struct s1 *);
   42706      void f2 (struct s2 *p) { f1 (p); }
   42707 
   42708 In the call to `f1' inside `f2', the pointer `p' is converted into a
   42709 pointer to the anonymous field.
   42710 
   42711  Second, when the type of an anonymous field is a `typedef' for a
   42712 `struct' or `union', code may refer to the field using the name of the
   42713 `typedef'.
   42714 
   42715      typedef struct { int a; } s1;
   42716      struct s2 { s1; };
   42717      s1 f1 (struct s2 *p) { return p->s1; }
   42718 
   42719  These usages are only permitted when they are not ambiguous.
   42720 
   42721 
   42722 File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
   42723 
   42724 6.60 Thread-Local Storage
   42725 =========================
   42726 
   42727 Thread-local storage (TLS) is a mechanism by which variables are
   42728 allocated such that there is one instance of the variable per extant
   42729 thread.  The runtime model GCC uses to implement this originates in the
   42730 IA-64 processor-specific ABI, but has since been migrated to other
   42731 processors as well.  It requires significant support from the linker
   42732 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
   42733 `libpthread.so'), so it is not available everywhere.
   42734 
   42735  At the user level, the extension is visible with a new storage class
   42736 keyword: `__thread'.  For example:
   42737 
   42738      __thread int i;
   42739      extern __thread struct state s;
   42740      static __thread char *p;
   42741 
   42742  The `__thread' specifier may be used alone, with the `extern' or
   42743 `static' specifiers, but with no other storage class specifier.  When
   42744 used with `extern' or `static', `__thread' must appear immediately
   42745 after the other storage class specifier.
   42746 
   42747  The `__thread' specifier may be applied to any global, file-scoped
   42748 static, function-scoped static, or static data member of a class.  It
   42749 may not be applied to block-scoped automatic or non-static data member.
   42750 
   42751  When the address-of operator is applied to a thread-local variable, it
   42752 is evaluated at run time and returns the address of the current thread's
   42753 instance of that variable.  An address so obtained may be used by any
   42754 thread.  When a thread terminates, any pointers to thread-local
   42755 variables in that thread become invalid.
   42756 
   42757  No static initialization may refer to the address of a thread-local
   42758 variable.
   42759 
   42760  In C++, if an initializer is present for a thread-local variable, it
   42761 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
   42762 standard.
   42763 
   42764  See ELF Handling For Thread-Local Storage
   42765 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
   42766 the four thread-local storage addressing models, and how the runtime is
   42767 expected to function.
   42768 
   42769 * Menu:
   42770 
   42771 * C99 Thread-Local Edits::
   42772 * C++98 Thread-Local Edits::
   42773 
   42774 
   42775 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
   42776 
   42777 6.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
   42778 -------------------------------------------------------
   42779 
   42780 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
   42781 document the exact semantics of the language extension.
   42782 
   42783    * `5.1.2  Execution environments'
   42784 
   42785      Add new text after paragraph 1
   42786 
   42787           Within either execution environment, a "thread" is a flow of
   42788           control within a program.  It is implementation defined
   42789           whether or not there may be more than one thread associated
   42790           with a program.  It is implementation defined how threads
   42791           beyond the first are created, the name and type of the
   42792           function called at thread startup, and how threads may be
   42793           terminated.  However, objects with thread storage duration
   42794           shall be initialized before thread startup.
   42795 
   42796    * `6.2.4  Storage durations of objects'
   42797 
   42798      Add new text before paragraph 3
   42799 
   42800           An object whose identifier is declared with the storage-class
   42801           specifier `__thread' has "thread storage duration".  Its
   42802           lifetime is the entire execution of the thread, and its
   42803           stored value is initialized only once, prior to thread
   42804           startup.
   42805 
   42806    * `6.4.1  Keywords'
   42807 
   42808      Add `__thread'.
   42809 
   42810    * `6.7.1  Storage-class specifiers'
   42811 
   42812      Add `__thread' to the list of storage class specifiers in
   42813      paragraph 1.
   42814 
   42815      Change paragraph 2 to
   42816 
   42817           With the exception of `__thread', at most one storage-class
   42818           specifier may be given [...].  The `__thread' specifier may
   42819           be used alone, or immediately following `extern' or `static'.
   42820 
   42821      Add new text after paragraph 6
   42822 
   42823           The declaration of an identifier for a variable that has
   42824           block scope that specifies `__thread' shall also specify
   42825           either `extern' or `static'.
   42826 
   42827           The `__thread' specifier shall be used only with variables.
   42828 
   42829 
   42830 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
   42831 
   42832 6.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
   42833 --------------------------------------------------------
   42834 
   42835 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
   42836 that document the exact semantics of the language extension.
   42837 
   42838    * [intro.execution]
   42839 
   42840      New text after paragraph 4
   42841 
   42842           A "thread" is a flow of control within the abstract machine.
   42843           It is implementation defined whether or not there may be more
   42844           than one thread.
   42845 
   42846      New text after paragraph 7
   42847 
   42848           It is unspecified whether additional action must be taken to
   42849           ensure when and whether side effects are visible to other
   42850           threads.
   42851 
   42852    * [lex.key]
   42853 
   42854      Add `__thread'.
   42855 
   42856    * [basic.start.main]
   42857 
   42858      Add after paragraph 5
   42859 
   42860           The thread that begins execution at the `main' function is
   42861           called the "main thread".  It is implementation defined how
   42862           functions beginning threads other than the main thread are
   42863           designated or typed.  A function so designated, as well as
   42864           the `main' function, is called a "thread startup function".
   42865           It is implementation defined what happens if a thread startup
   42866           function returns.  It is implementation defined what happens
   42867           to other threads when any thread calls `exit'.
   42868 
   42869    * [basic.start.init]
   42870 
   42871      Add after paragraph 4
   42872 
   42873           The storage for an object of thread storage duration shall be
   42874           statically initialized before the first statement of the
   42875           thread startup function.  An object of thread storage
   42876           duration shall not require dynamic initialization.
   42877 
   42878    * [basic.start.term]
   42879 
   42880      Add after paragraph 3
   42881 
   42882           The type of an object with thread storage duration shall not
   42883           have a non-trivial destructor, nor shall it be an array type
   42884           whose elements (directly or indirectly) have non-trivial
   42885           destructors.
   42886 
   42887    * [basic.stc]
   42888 
   42889      Add "thread storage duration" to the list in paragraph 1.
   42890 
   42891      Change paragraph 2
   42892 
   42893           Thread, static, and automatic storage durations are
   42894           associated with objects introduced by declarations [...].
   42895 
   42896      Add `__thread' to the list of specifiers in paragraph 3.
   42897 
   42898    * [basic.stc.thread]
   42899 
   42900      New section before [basic.stc.static]
   42901 
   42902           The keyword `__thread' applied to a non-local object gives the
   42903           object thread storage duration.
   42904 
   42905           A local variable or class data member declared both `static'
   42906           and `__thread' gives the variable or member thread storage
   42907           duration.
   42908 
   42909    * [basic.stc.static]
   42910 
   42911      Change paragraph 1
   42912 
   42913           All objects that have neither thread storage duration, dynamic
   42914           storage duration nor are local [...].
   42915 
   42916    * [dcl.stc]
   42917 
   42918      Add `__thread' to the list in paragraph 1.
   42919 
   42920      Change paragraph 1
   42921 
   42922           With the exception of `__thread', at most one
   42923           STORAGE-CLASS-SPECIFIER shall appear in a given
   42924           DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
   42925           alone, or immediately following the `extern' or `static'
   42926           specifiers.  [...]
   42927 
   42928      Add after paragraph 5
   42929 
   42930           The `__thread' specifier can be applied only to the names of
   42931           objects and to anonymous unions.
   42932 
   42933    * [class.mem]
   42934 
   42935      Add after paragraph 6
   42936 
   42937           Non-`static' members shall not be `__thread'.
   42938 
   42939 
   42940 File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
   42941 
   42942 6.61 Binary constants using the `0b' prefix
   42943 ===========================================
   42944 
   42945 Integer constants can be written as binary constants, consisting of a
   42946 sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
   42947 particularly useful in environments that operate a lot on the bit level
   42948 (like microcontrollers).
   42949 
   42950  The following statements are identical:
   42951 
   42952      i =       42;
   42953      i =     0x2a;
   42954      i =      052;
   42955      i = 0b101010;
   42956 
   42957  The type of these constants follows the same rules as for octal or
   42958 hexadecimal integer constants, so suffixes like `L' or `UL' can be
   42959 applied.
   42960 
   42961 
   42962 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
   42963 
   42964 7 Extensions to the C++ Language
   42965 ********************************
   42966 
   42967 The GNU compiler provides these extensions to the C++ language (and you
   42968 can also use most of the C language extensions in your C++ programs).
   42969 If you want to write code that checks whether these features are
   42970 available, you can test for the GNU compiler the same way as for C
   42971 programs: check for a predefined macro `__GNUC__'.  You can also use
   42972 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
   42973 (cpp)Common Predefined Macros.).
   42974 
   42975 * Menu:
   42976 
   42977 * C++ Volatiles::       What constitutes an access to a volatile object.
   42978 * Restricted Pointers:: C99 restricted pointers and references.
   42979 * Vague Linkage::       Where G++ puts inlines, vtables and such.
   42980 * C++ Interface::       You can use a single C++ header file for both
   42981                         declarations and definitions.
   42982 * Template Instantiation:: Methods for ensuring that exactly one copy of
   42983                         each needed template instantiation is emitted.
   42984 * Bound member functions:: You can extract a function pointer to the
   42985                         method denoted by a `->*' or `.*' expression.
   42986 * C++ Attributes::      Variable, function, and type attributes for C++ only.
   42987 * Function Multiversioning::   Declaring multiple function versions.
   42988 * Namespace Association:: Strong using-directives for namespace association.
   42989 * Type Traits::         Compiler support for type traits
   42990 * Java Exceptions::     Tweaking exception handling to work with Java.
   42991 * Deprecated Features:: Things will disappear from G++.
   42992 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
   42993 
   42994 
   42995 File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
   42996 
   42997 7.1 When is a Volatile C++ Object Accessed?
   42998 ===========================================
   42999 
   43000 The C++ standard differs from the C standard in its treatment of
   43001 volatile objects.  It fails to specify what constitutes a volatile
   43002 access, except to say that C++ should behave in a similar manner to C
   43003 with respect to volatiles, where possible.  However, the different
   43004 lvalueness of expressions between C and C++ complicate the behavior.
   43005 G++ behaves the same as GCC for volatile access, *Note Volatiles: C
   43006 Extensions, for a description of GCC's behavior.
   43007 
   43008  The C and C++ language specifications differ when an object is
   43009 accessed in a void context:
   43010 
   43011      volatile int *src = SOMEVALUE;
   43012      *src;
   43013 
   43014  The C++ standard specifies that such expressions do not undergo lvalue
   43015 to rvalue conversion, and that the type of the dereferenced object may
   43016 be incomplete.  The C++ standard does not specify explicitly that it is
   43017 lvalue to rvalue conversion that is responsible for causing an access.
   43018 There is reason to believe that it is, because otherwise certain simple
   43019 expressions become undefined.  However, because it would surprise most
   43020 programmers, G++ treats dereferencing a pointer to volatile object of
   43021 complete type as GCC would do for an equivalent type in C.  When the
   43022 object has incomplete type, G++ issues a warning; if you wish to force
   43023 an error, you must force a conversion to rvalue with, for instance, a
   43024 static cast.
   43025 
   43026  When using a reference to volatile, G++ does not treat equivalent
   43027 expressions as accesses to volatiles, but instead issues a warning that
   43028 no volatile is accessed.  The rationale for this is that otherwise it
   43029 becomes difficult to determine where volatile access occur, and not
   43030 possible to ignore the return value from functions returning volatile
   43031 references.  Again, if you wish to force a read, cast the reference to
   43032 an rvalue.
   43033 
   43034  G++ implements the same behavior as GCC does when assigning to a
   43035 volatile object--there is no reread of the assigned-to object, the
   43036 assigned rvalue is reused.  Note that in C++ assignment expressions are
   43037 lvalues, and if used as an lvalue, the volatile object is referred to.
   43038 For instance, VREF refers to VOBJ, as expected, in the following
   43039 example:
   43040 
   43041      volatile int vobj;
   43042      volatile int &vref = vobj = SOMETHING;
   43043 
   43044 
   43045 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
   43046 
   43047 7.2 Restricting Pointer Aliasing
   43048 ================================
   43049 
   43050 As with the C front end, G++ understands the C99 feature of restricted
   43051 pointers, specified with the `__restrict__', or `__restrict' type
   43052 qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
   43053 language flag, `restrict' is not a keyword in C++.
   43054 
   43055  In addition to allowing restricted pointers, you can specify restricted
   43056 references, which indicate that the reference is not aliased in the
   43057 local context.
   43058 
   43059      void fn (int *__restrict__ rptr, int &__restrict__ rref)
   43060      {
   43061        /* ... */
   43062      }
   43063 
   43064 In the body of `fn', RPTR points to an unaliased integer and RREF
   43065 refers to a (different) unaliased integer.
   43066 
   43067  You may also specify whether a member function's THIS pointer is
   43068 unaliased by using `__restrict__' as a member function qualifier.
   43069 
   43070      void T::fn () __restrict__
   43071      {
   43072        /* ... */
   43073      }
   43074 
   43075 Within the body of `T::fn', THIS has the effective definition `T
   43076 *__restrict__ const this'.  Notice that the interpretation of a
   43077 `__restrict__' member function qualifier is different to that of
   43078 `const' or `volatile' qualifier, in that it is applied to the pointer
   43079 rather than the object.  This is consistent with other compilers that
   43080 implement restricted pointers.
   43081 
   43082  As with all outermost parameter qualifiers, `__restrict__' is ignored
   43083 in function definition matching.  This means you only need to specify
   43084 `__restrict__' in a function definition, rather than in a function
   43085 prototype as well.
   43086 
   43087 
   43088 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
   43089 
   43090 7.3 Vague Linkage
   43091 =================
   43092 
   43093 There are several constructs in C++ that require space in the object
   43094 file but are not clearly tied to a single translation unit.  We say that
   43095 these constructs have "vague linkage".  Typically such constructs are
   43096 emitted wherever they are needed, though sometimes we can be more
   43097 clever.
   43098 
   43099 Inline Functions
   43100      Inline functions are typically defined in a header file which can
   43101      be included in many different compilations.  Hopefully they can
   43102      usually be inlined, but sometimes an out-of-line copy is
   43103      necessary, if the address of the function is taken or if inlining
   43104      fails.  In general, we emit an out-of-line copy in all translation
   43105      units where one is needed.  As an exception, we only emit inline
   43106      virtual functions with the vtable, since it always requires a copy.
   43107 
   43108      Local static variables and string constants used in an inline
   43109      function are also considered to have vague linkage, since they
   43110      must be shared between all inlined and out-of-line instances of
   43111      the function.
   43112 
   43113 VTables
   43114      C++ virtual functions are implemented in most compilers using a
   43115      lookup table, known as a vtable.  The vtable contains pointers to
   43116      the virtual functions provided by a class, and each object of the
   43117      class contains a pointer to its vtable (or vtables, in some
   43118      multiple-inheritance situations).  If the class declares any
   43119      non-inline, non-pure virtual functions, the first one is chosen as
   43120      the "key method" for the class, and the vtable is only emitted in
   43121      the translation unit where the key method is defined.
   43122 
   43123      _Note:_ If the chosen key method is later defined as inline, the
   43124      vtable is still emitted in every translation unit that defines it.
   43125      Make sure that any inline virtuals are declared inline in the class
   43126      body, even if they are not defined there.
   43127 
   43128 `type_info' objects
   43129      C++ requires information about types to be written out in order to
   43130      implement `dynamic_cast', `typeid' and exception handling.  For
   43131      polymorphic classes (classes with virtual functions), the
   43132      `type_info' object is written out along with the vtable so that
   43133      `dynamic_cast' can determine the dynamic type of a class object at
   43134      run time.  For all other types, we write out the `type_info'
   43135      object when it is used: when applying `typeid' to an expression,
   43136      throwing an object, or referring to a type in a catch clause or
   43137      exception specification.
   43138 
   43139 Template Instantiations
   43140      Most everything in this section also applies to template
   43141      instantiations, but there are other options as well.  *Note
   43142      Where's the Template?: Template Instantiation.
   43143 
   43144 
   43145  When used with GNU ld version 2.8 or later on an ELF system such as
   43146 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
   43147 these constructs will be discarded at link time.  This is known as
   43148 COMDAT support.
   43149 
   43150  On targets that don't support COMDAT, but do support weak symbols, GCC
   43151 uses them.  This way one copy overrides all the others, but the unused
   43152 copies still take up space in the executable.
   43153 
   43154  For targets that do not support either COMDAT or weak symbols, most
   43155 entities with vague linkage are emitted as local symbols to avoid
   43156 duplicate definition errors from the linker.  This does not happen for
   43157 local statics in inlines, however, as having multiple copies almost
   43158 certainly breaks things.
   43159 
   43160  *Note Declarations and Definitions in One Header: C++ Interface, for
   43161 another way to control placement of these constructs.
   43162 
   43163 
   43164 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
   43165 
   43166 7.4 #pragma interface and implementation
   43167 ========================================
   43168 
   43169 `#pragma interface' and `#pragma implementation' provide the user with
   43170 a way of explicitly directing the compiler to emit entities with vague
   43171 linkage (and debugging information) in a particular translation unit.
   43172 
   43173  _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
   43174 cases, because of COMDAT support and the "key method" heuristic
   43175 mentioned in *note Vague Linkage::.  Using them can actually cause your
   43176 program to grow due to unnecessary out-of-line copies of inline
   43177 functions.  Currently (3.4) the only benefit of these `#pragma's is
   43178 reduced duplication of debugging information, and that should be
   43179 addressed soon on DWARF 2 targets with the use of COMDAT groups.
   43180 
   43181 `#pragma interface'
   43182 `#pragma interface "SUBDIR/OBJECTS.h"'
   43183      Use this directive in _header files_ that define object classes,
   43184      to save space in most of the object files that use those classes.
   43185      Normally, local copies of certain information (backup copies of
   43186      inline member functions, debugging information, and the internal
   43187      tables that implement virtual functions) must be kept in each
   43188      object file that includes class definitions.  You can use this
   43189      pragma to avoid such duplication.  When a header file containing
   43190      `#pragma interface' is included in a compilation, this auxiliary
   43191      information is not generated (unless the main input source file
   43192      itself uses `#pragma implementation').  Instead, the object files
   43193      contain references to be resolved at link time.
   43194 
   43195      The second form of this directive is useful for the case where you
   43196      have multiple headers with the same name in different directories.
   43197      If you use this form, you must specify the same string to `#pragma
   43198      implementation'.
   43199 
   43200 `#pragma implementation'
   43201 `#pragma implementation "OBJECTS.h"'
   43202      Use this pragma in a _main input file_, when you want full output
   43203      from included header files to be generated (and made globally
   43204      visible).  The included header file, in turn, should use `#pragma
   43205      interface'.  Backup copies of inline member functions, debugging
   43206      information, and the internal tables used to implement virtual
   43207      functions are all generated in implementation files.
   43208 
   43209      If you use `#pragma implementation' with no argument, it applies to
   43210      an include file with the same basename(1) as your source file.
   43211      For example, in `allclass.cc', giving just `#pragma implementation'
   43212      by itself is equivalent to `#pragma implementation "allclass.h"'.
   43213 
   43214      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
   43215      an implementation file whenever you would include it from
   43216      `allclass.cc' even if you never specified `#pragma
   43217      implementation'.  This was deemed to be more trouble than it was
   43218      worth, however, and disabled.
   43219 
   43220      Use the string argument if you want a single implementation file to
   43221      include code from multiple header files.  (You must also use
   43222      `#include' to include the header file; `#pragma implementation'
   43223      only specifies how to use the file--it doesn't actually include
   43224      it.)
   43225 
   43226      There is no way to split up the contents of a single header file
   43227      into multiple implementation files.
   43228 
   43229  `#pragma implementation' and `#pragma interface' also have an effect
   43230 on function inlining.
   43231 
   43232  If you define a class in a header file marked with `#pragma
   43233 interface', the effect on an inline function defined in that class is
   43234 similar to an explicit `extern' declaration--the compiler emits no code
   43235 at all to define an independent version of the function.  Its
   43236 definition is used only for inlining with its callers.
   43237 
   43238  Conversely, when you include the same header file in a main source file
   43239 that declares it as `#pragma implementation', the compiler emits code
   43240 for the function itself; this defines a version of the function that
   43241 can be found via pointers (or by callers compiled without inlining).
   43242 If all calls to the function can be inlined, you can avoid emitting the
   43243 function by compiling with `-fno-implement-inlines'.  If any calls are
   43244 not inlined, you will get linker errors.
   43245 
   43246  ---------- Footnotes ----------
   43247 
   43248  (1) A file's "basename" is the name stripped of all leading path
   43249 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
   43250 
   43251 
   43252 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
   43253 
   43254 7.5 Where's the Template?
   43255 =========================
   43256 
   43257 C++ templates are the first language feature to require more
   43258 intelligence from the environment than one usually finds on a UNIX
   43259 system.  Somehow the compiler and linker have to make sure that each
   43260 template instance occurs exactly once in the executable if it is needed,
   43261 and not at all otherwise.  There are two basic approaches to this
   43262 problem, which are referred to as the Borland model and the Cfront
   43263 model.
   43264 
   43265 Borland model
   43266      Borland C++ solved the template instantiation problem by adding
   43267      the code equivalent of common blocks to their linker; the compiler
   43268      emits template instances in each translation unit that uses them,
   43269      and the linker collapses them together.  The advantage of this
   43270      model is that the linker only has to consider the object files
   43271      themselves; there is no external complexity to worry about.  This
   43272      disadvantage is that compilation time is increased because the
   43273      template code is being compiled repeatedly.  Code written for this
   43274      model tends to include definitions of all templates in the header
   43275      file, since they must be seen to be instantiated.
   43276 
   43277 Cfront model
   43278      The AT&T C++ translator, Cfront, solved the template instantiation
   43279      problem by creating the notion of a template repository, an
   43280      automatically maintained place where template instances are
   43281      stored.  A more modern version of the repository works as follows:
   43282      As individual object files are built, the compiler places any
   43283      template definitions and instantiations encountered in the
   43284      repository.  At link time, the link wrapper adds in the objects in
   43285      the repository and compiles any needed instances that were not
   43286      previously emitted.  The advantages of this model are more optimal
   43287      compilation speed and the ability to use the system linker; to
   43288      implement the Borland model a compiler vendor also needs to
   43289      replace the linker.  The disadvantages are vastly increased
   43290      complexity, and thus potential for error; for some code this can be
   43291      just as transparent, but in practice it can been very difficult to
   43292      build multiple programs in one directory and one program in
   43293      multiple directories.  Code written for this model tends to
   43294      separate definitions of non-inline member templates into a
   43295      separate file, which should be compiled separately.
   43296 
   43297  When used with GNU ld version 2.8 or later on an ELF system such as
   43298 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
   43299 Borland model.  On other systems, G++ implements neither automatic
   43300 model.
   43301 
   43302  You have the following options for dealing with template
   43303 instantiations:
   43304 
   43305   1. Compile your template-using code with `-frepo'.  The compiler
   43306      generates files with the extension `.rpo' listing all of the
   43307      template instantiations used in the corresponding object files that
   43308      could be instantiated there; the link wrapper, `collect2', then
   43309      updates the `.rpo' files to tell the compiler where to place those
   43310      instantiations and rebuild any affected object files.  The
   43311      link-time overhead is negligible after the first pass, as the
   43312      compiler continues to place the instantiations in the same files.
   43313 
   43314      This is your best option for application code written for the
   43315      Borland model, as it just works.  Code written for the Cfront model
   43316      needs to be modified so that the template definitions are
   43317      available at one or more points of instantiation; usually this is
   43318      as simple as adding `#include <tmethods.cc>' to the end of each
   43319      template header.
   43320 
   43321      For library code, if you want the library to provide all of the
   43322      template instantiations it needs, just try to link all of its
   43323      object files together; the link will fail, but cause the
   43324      instantiations to be generated as a side effect.  Be warned,
   43325      however, that this may cause conflicts if multiple libraries try
   43326      to provide the same instantiations.  For greater control, use
   43327      explicit instantiation as described in the next option.
   43328 
   43329   2. Compile your code with `-fno-implicit-templates' to disable the
   43330      implicit generation of template instances, and explicitly
   43331      instantiate all the ones you use.  This approach requires more
   43332      knowledge of exactly which instances you need than do the others,
   43333      but it's less mysterious and allows greater control.  You can
   43334      scatter the explicit instantiations throughout your program,
   43335      perhaps putting them in the translation units where the instances
   43336      are used or the translation units that define the templates
   43337      themselves; you can put all of the explicit instantiations you
   43338      need into one big file; or you can create small files like
   43339 
   43340           #include "Foo.h"
   43341           #include "Foo.cc"
   43342 
   43343           template class Foo<int>;
   43344           template ostream& operator <<
   43345                           (ostream&, const Foo<int>&);
   43346 
   43347      for each of the instances you need, and create a template
   43348      instantiation library from those.
   43349 
   43350      If you are using Cfront-model code, you can probably get away with
   43351      not using `-fno-implicit-templates' when compiling files that don't
   43352      `#include' the member template definitions.
   43353 
   43354      If you use one big file to do the instantiations, you may want to
   43355      compile it without `-fno-implicit-templates' so you get all of the
   43356      instances required by your explicit instantiations (but not by any
   43357      other files) without having to specify them as well.
   43358 
   43359      The ISO C++ 2011 standard allows forward declaration of explicit
   43360      instantiations (with `extern'). G++ supports explicit instantiation
   43361      declarations in C++98 mode and has extended the template
   43362      instantiation syntax to support instantiation of the compiler
   43363      support data for a template class (i.e. the vtable) without
   43364      instantiating any of its members (with `inline'), and
   43365      instantiation of only the static data members of a template class,
   43366      without the support data or member functions (with (`static'):
   43367 
   43368           extern template int max (int, int);
   43369           inline template class Foo<int>;
   43370           static template class Foo<int>;
   43371 
   43372   3. Do nothing.  Pretend G++ does implement automatic instantiation
   43373      management.  Code written for the Borland model works fine, but
   43374      each translation unit contains instances of each of the templates
   43375      it uses.  In a large program, this can lead to an unacceptable
   43376      amount of code duplication.
   43377 
   43378 
   43379 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
   43380 
   43381 7.6 Extracting the function pointer from a bound pointer to member function
   43382 ===========================================================================
   43383 
   43384 In C++, pointer to member functions (PMFs) are implemented using a wide
   43385 pointer of sorts to handle all the possible call mechanisms; the PMF
   43386 needs to store information about how to adjust the `this' pointer, and
   43387 if the function pointed to is virtual, where to find the vtable, and
   43388 where in the vtable to look for the member function.  If you are using
   43389 PMFs in an inner loop, you should really reconsider that decision.  If
   43390 that is not an option, you can extract the pointer to the function that
   43391 would be called for a given object/PMF pair and call it directly inside
   43392 the inner loop, to save a bit of time.
   43393 
   43394  Note that you still pay the penalty for the call through a function
   43395 pointer; on most modern architectures, such a call defeats the branch
   43396 prediction features of the CPU.  This is also true of normal virtual
   43397 function calls.
   43398 
   43399  The syntax for this extension is
   43400 
   43401      extern A a;
   43402      extern int (A::*fp)();
   43403      typedef int (*fptr)(A *);
   43404 
   43405      fptr p = (fptr)(a.*fp);
   43406 
   43407  For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
   43408 object is needed to obtain the address of the function.  They can be
   43409 converted to function pointers directly:
   43410 
   43411      fptr p1 = (fptr)(&A::foo);
   43412 
   43413  You must specify `-Wno-pmf-conversions' to use this extension.
   43414 
   43415 
   43416 File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
   43417 
   43418 7.7 C++-Specific Variable, Function, and Type Attributes
   43419 ========================================================
   43420 
   43421 Some attributes only make sense for C++ programs.
   43422 
   43423 `abi_tag ("TAG", ...)'
   43424      The `abi_tag' attribute can be applied to a function or class
   43425      declaration.  It modifies the mangled name of the function or
   43426      class to incorporate the tag name, in order to distinguish the
   43427      function or class from an earlier version with a different ABI;
   43428      perhaps the class has changed size, or the function has a
   43429      different return type that is not encoded in the mangled name.
   43430 
   43431      The argument can be a list of strings of arbitrary length.  The
   43432      strings are sorted on output, so the order of the list is
   43433      unimportant.
   43434 
   43435      A redeclaration of a function or class must not add new ABI tags,
   43436      since doing so would change the mangled name.
   43437 
   43438      The `-Wabi-tag' flag enables a warning about a class which does
   43439      not have all the ABI tags used by its subobjects and virtual
   43440      functions; for users with code that needs to coexist with an
   43441      earlier ABI, using this option can help to find all affected types
   43442      that need to be tagged.
   43443 
   43444 `init_priority (PRIORITY)'
   43445      In Standard C++, objects defined at namespace scope are guaranteed
   43446      to be initialized in an order in strict accordance with that of
   43447      their definitions _in a given translation unit_.  No guarantee is
   43448      made for initializations across translation units.  However, GNU
   43449      C++ allows users to control the order of initialization of objects
   43450      defined at namespace scope with the `init_priority' attribute by
   43451      specifying a relative PRIORITY, a constant integral expression
   43452      currently bounded between 101 and 65535 inclusive.  Lower numbers
   43453      indicate a higher priority.
   43454 
   43455      In the following example, `A' would normally be created before
   43456      `B', but the `init_priority' attribute reverses that order:
   43457 
   43458           Some_Class  A  __attribute__ ((init_priority (2000)));
   43459           Some_Class  B  __attribute__ ((init_priority (543)));
   43460 
   43461      Note that the particular values of PRIORITY do not matter; only
   43462      their relative ordering.
   43463 
   43464 `java_interface'
   43465      This type attribute informs C++ that the class is a Java
   43466      interface.  It may only be applied to classes declared within an
   43467      `extern "Java"' block.  Calls to methods declared in this
   43468      interface are dispatched using GCJ's interface table mechanism,
   43469      instead of regular virtual table dispatch.
   43470 
   43471 
   43472  See also *note Namespace Association::.
   43473 
   43474 
   43475 File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
   43476 
   43477 7.8 Function Multiversioning
   43478 ============================
   43479 
   43480 With the GNU C++ front end, for target i386, you may specify multiple
   43481 versions of a function, where each function is specialized for a
   43482 specific target feature.  At runtime, the appropriate version of the
   43483 function is automatically executed depending on the characteristics of
   43484 the execution platform.  Here is an example.
   43485 
   43486      __attribute__ ((target ("default")))
   43487      int foo ()
   43488      {
   43489        // The default version of foo.
   43490        return 0;
   43491      }
   43492 
   43493      __attribute__ ((target ("sse4.2")))
   43494      int foo ()
   43495      {
   43496        // foo version for SSE4.2
   43497        return 1;
   43498      }
   43499 
   43500      __attribute__ ((target ("arch=atom")))
   43501      int foo ()
   43502      {
   43503        // foo version for the Intel ATOM processor
   43504        return 2;
   43505      }
   43506 
   43507      __attribute__ ((target ("arch=amdfam10")))
   43508      int foo ()
   43509      {
   43510        // foo version for the AMD Family 0x10 processors.
   43511        return 3;
   43512      }
   43513 
   43514      int main ()
   43515      {
   43516        int (*p)() = &foo;
   43517        assert ((*p) () == foo ());
   43518        return 0;
   43519      }
   43520 
   43521  In the above example, four versions of function foo are created. The
   43522 first version of foo with the target attribute "default" is the default
   43523 version.  This version gets executed when no other target specific
   43524 version qualifies for execution on a particular platform. A new version
   43525 of foo is created by using the same function signature but with a
   43526 different target string.  Function foo is called or a pointer to it is
   43527 taken just like a regular function.  GCC takes care of doing the
   43528 dispatching to call the right version at runtime.  Refer to the GCC
   43529 wiki on Function Multiversioning
   43530 (http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
   43531 
   43532 
   43533 File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
   43534 
   43535 7.9 Namespace Association
   43536 =========================
   43537 
   43538 *Caution:* The semantics of this extension are equivalent to C++ 2011
   43539 inline namespaces.  Users should use inline namespaces instead as this
   43540 extension will be removed in future versions of G++.
   43541 
   43542  A using-directive with `__attribute ((strong))' is stronger than a
   43543 normal using-directive in two ways:
   43544 
   43545    * Templates from the used namespace can be specialized and explicitly
   43546      instantiated as though they were members of the using namespace.
   43547 
   43548    * The using namespace is considered an associated namespace of all
   43549      templates in the used namespace for purposes of argument-dependent
   43550      name lookup.
   43551 
   43552  The used namespace must be nested within the using namespace so that
   43553 normal unqualified lookup works properly.
   43554 
   43555  This is useful for composing a namespace transparently from
   43556 implementation namespaces.  For example:
   43557 
   43558      namespace std {
   43559        namespace debug {
   43560          template <class T> struct A { };
   43561        }
   43562        using namespace debug __attribute ((__strong__));
   43563        template <> struct A<int> { };   // ok to specialize
   43564 
   43565        template <class T> void f (A<T>);
   43566      }
   43567 
   43568      int main()
   43569      {
   43570        f (std::A<float>());             // lookup finds std::f
   43571        f (std::A<int>());
   43572      }
   43573 
   43574 
   43575 File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
   43576 
   43577 7.10 Type Traits
   43578 ================
   43579 
   43580 The C++ front end implements syntactic extensions that allow
   43581 compile-time determination of various characteristics of a type (or of a
   43582 pair of types).
   43583 
   43584 `__has_nothrow_assign (type)'
   43585      If `type' is const qualified or is a reference type then the trait
   43586      is false.  Otherwise if `__has_trivial_assign (type)' is true then
   43587      the trait is true, else if `type' is a cv class or union type with
   43588      copy assignment operators that are known not to throw an exception
   43589      then the trait is true, else it is false.  Requires: `type' shall
   43590      be a complete type, (possibly cv-qualified) `void', or an array of
   43591      unknown bound.
   43592 
   43593 `__has_nothrow_copy (type)'
   43594      If `__has_trivial_copy (type)' is true then the trait is true,
   43595      else if `type' is a cv class or union type with copy constructors
   43596      that are known not to throw an exception then the trait is true,
   43597      else it is false.  Requires: `type' shall be a complete type,
   43598      (possibly cv-qualified) `void', or an array of unknown bound.
   43599 
   43600 `__has_nothrow_constructor (type)'
   43601      If `__has_trivial_constructor (type)' is true then the trait is
   43602      true, else if `type' is a cv class or union type (or array
   43603      thereof) with a default constructor that is known not to throw an
   43604      exception then the trait is true, else it is false.  Requires:
   43605      `type' shall be a complete type, (possibly cv-qualified) `void',
   43606      or an array of unknown bound.
   43607 
   43608 `__has_trivial_assign (type)'
   43609      If `type' is const qualified or is a reference type then the trait
   43610      is false.  Otherwise if `__is_pod (type)' is true then the trait is
   43611      true, else if `type' is a cv class or union type with a trivial
   43612      copy assignment ([class.copy]) then the trait is true, else it is
   43613      false.  Requires: `type' shall be a complete type, (possibly
   43614      cv-qualified) `void', or an array of unknown bound.
   43615 
   43616 `__has_trivial_copy (type)'
   43617      If `__is_pod (type)' is true or `type' is a reference type then
   43618      the trait is true, else if `type' is a cv class or union type with
   43619      a trivial copy constructor ([class.copy]) then the trait is true,
   43620      else it is false.  Requires: `type' shall be a complete type,
   43621      (possibly cv-qualified) `void', or an array of unknown bound.
   43622 
   43623 `__has_trivial_constructor (type)'
   43624      If `__is_pod (type)' is true then the trait is true, else if
   43625      `type' is a cv class or union type (or array thereof) with a
   43626      trivial default constructor ([class.ctor]) then the trait is true,
   43627      else it is false.  Requires: `type' shall be a complete type,
   43628      (possibly cv-qualified) `void', or an array of unknown bound.
   43629 
   43630 `__has_trivial_destructor (type)'
   43631      If `__is_pod (type)' is true or `type' is a reference type then
   43632      the trait is true, else if `type' is a cv class or union type (or
   43633      array thereof) with a trivial destructor ([class.dtor]) then the
   43634      trait is true, else it is false.  Requires: `type' shall be a
   43635      complete type, (possibly cv-qualified) `void', or an array of
   43636      unknown bound.
   43637 
   43638 `__has_virtual_destructor (type)'
   43639      If `type' is a class type with a virtual destructor ([class.dtor])
   43640      then the trait is true, else it is false.  Requires: `type' shall
   43641      be a complete type, (possibly cv-qualified) `void', or an array of
   43642      unknown bound.
   43643 
   43644 `__is_abstract (type)'
   43645      If `type' is an abstract class ([class.abstract]) then the trait
   43646      is true, else it is false.  Requires: `type' shall be a complete
   43647      type, (possibly cv-qualified) `void', or an array of unknown bound.
   43648 
   43649 `__is_base_of (base_type, derived_type)'
   43650      If `base_type' is a base class of `derived_type' ([class.derived])
   43651      then the trait is true, otherwise it is false.  Top-level cv
   43652      qualifications of `base_type' and `derived_type' are ignored.  For
   43653      the purposes of this trait, a class type is considered is own
   43654      base.  Requires: if `__is_class (base_type)' and `__is_class
   43655      (derived_type)' are true and `base_type' and `derived_type' are
   43656      not the same type (disregarding cv-qualifiers), `derived_type'
   43657      shall be a complete type.  Diagnostic is produced if this
   43658      requirement is not met.
   43659 
   43660 `__is_class (type)'
   43661      If `type' is a cv class type, and not a union type
   43662      ([basic.compound]) the trait is true, else it is false.
   43663 
   43664 `__is_empty (type)'
   43665      If `__is_class (type)' is false then the trait is false.
   43666      Otherwise `type' is considered empty if and only if: `type' has no
   43667      non-static data members, or all non-static data members, if any,
   43668      are bit-fields of length 0, and `type' has no virtual members, and
   43669      `type' has no virtual base classes, and `type' has no base classes
   43670      `base_type' for which `__is_empty (base_type)' is false.
   43671      Requires: `type' shall be a complete type, (possibly cv-qualified)
   43672      `void', or an array of unknown bound.
   43673 
   43674 `__is_enum (type)'
   43675      If `type' is a cv enumeration type ([basic.compound]) the trait is
   43676      true, else it is false.
   43677 
   43678 `__is_literal_type (type)'
   43679      If `type' is a literal type ([basic.types]) the trait is true,
   43680      else it is false.  Requires: `type' shall be a complete type,
   43681      (possibly cv-qualified) `void', or an array of unknown bound.
   43682 
   43683 `__is_pod (type)'
   43684      If `type' is a cv POD type ([basic.types]) then the trait is true,
   43685      else it is false.  Requires: `type' shall be a complete type,
   43686      (possibly cv-qualified) `void', or an array of unknown bound.
   43687 
   43688 `__is_polymorphic (type)'
   43689      If `type' is a polymorphic class ([class.virtual]) then the trait
   43690      is true, else it is false.  Requires: `type' shall be a complete
   43691      type, (possibly cv-qualified) `void', or an array of unknown bound.
   43692 
   43693 `__is_standard_layout (type)'
   43694      If `type' is a standard-layout type ([basic.types]) the trait is
   43695      true, else it is false.  Requires: `type' shall be a complete
   43696      type, (possibly cv-qualified) `void', or an array of unknown bound.
   43697 
   43698 `__is_trivial (type)'
   43699      If `type' is a trivial type ([basic.types]) the trait is true,
   43700      else it is false.  Requires: `type' shall be a complete type,
   43701      (possibly cv-qualified) `void', or an array of unknown bound.
   43702 
   43703 `__is_union (type)'
   43704      If `type' is a cv union type ([basic.compound]) the trait is true,
   43705      else it is false.
   43706 
   43707 `__underlying_type (type)'
   43708      The underlying type of `type'.  Requires: `type' shall be an
   43709      enumeration type ([dcl.enum]).
   43710 
   43711 
   43712 
   43713 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
   43714 
   43715 7.11 Java Exceptions
   43716 ====================
   43717 
   43718 The Java language uses a slightly different exception handling model
   43719 from C++.  Normally, GNU C++ automatically detects when you are writing
   43720 C++ code that uses Java exceptions, and handle them appropriately.
   43721 However, if C++ code only needs to execute destructors when Java
   43722 exceptions are thrown through it, GCC guesses incorrectly.  Sample
   43723 problematic code is:
   43724 
   43725        struct S { ~S(); };
   43726        extern void bar();    // is written in Java, and may throw exceptions
   43727        void foo()
   43728        {
   43729          S s;
   43730          bar();
   43731        }
   43732 
   43733 The usual effect of an incorrect guess is a link failure, complaining of
   43734 a missing routine called `__gxx_personality_v0'.
   43735 
   43736  You can inform the compiler that Java exceptions are to be used in a
   43737 translation unit, irrespective of what it might think, by writing
   43738 `#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
   43739 must appear before any functions that throw or catch exceptions, or run
   43740 destructors when exceptions are thrown through them.
   43741 
   43742  You cannot mix Java and C++ exceptions in the same translation unit.
   43743 It is believed to be safe to throw a C++ exception from one file through
   43744 another file compiled for the Java exception model, or vice versa, but
   43745 there may be bugs in this area.
   43746 
   43747 
   43748 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
   43749 
   43750 7.12 Deprecated Features
   43751 ========================
   43752 
   43753 In the past, the GNU C++ compiler was extended to experiment with new
   43754 features, at a time when the C++ language was still evolving.  Now that
   43755 the C++ standard is complete, some of those features are superseded by
   43756 superior alternatives.  Using the old features might cause a warning in
   43757 some cases that the feature will be dropped in the future.  In other
   43758 cases, the feature might be gone already.
   43759 
   43760  While the list below is not exhaustive, it documents some of the
   43761 options that are now deprecated:
   43762 
   43763 `-fexternal-templates'
   43764 `-falt-external-templates'
   43765      These are two of the many ways for G++ to implement template
   43766      instantiation.  *Note Template Instantiation::.  The C++ standard
   43767      clearly defines how template definitions have to be organized
   43768      across implementation units.  G++ has an implicit instantiation
   43769      mechanism that should work just fine for standard-conforming code.
   43770 
   43771 `-fstrict-prototype'
   43772 `-fno-strict-prototype'
   43773      Previously it was possible to use an empty prototype parameter
   43774      list to indicate an unspecified number of parameters (like C),
   43775      rather than no parameters, as C++ demands.  This feature has been
   43776      removed, except where it is required for backwards compatibility.
   43777      *Note Backwards Compatibility::.
   43778 
   43779  G++ allows a virtual function returning `void *' to be overridden by
   43780 one returning a different pointer type.  This extension to the
   43781 covariant return type rules is now deprecated and will be removed from a
   43782 future version.
   43783 
   43784  The G++ minimum and maximum operators (`<?' and `>?') and their
   43785 compound forms (`<?=') and `>?=') have been deprecated and are now
   43786 removed from G++.  Code using these operators should be modified to use
   43787 `std::min' and `std::max' instead.
   43788 
   43789  The named return value extension has been deprecated, and is now
   43790 removed from G++.
   43791 
   43792  The use of initializer lists with new expressions has been deprecated,
   43793 and is now removed from G++.
   43794 
   43795  Floating and complex non-type template parameters have been deprecated,
   43796 and are now removed from G++.
   43797 
   43798  The implicit typename extension has been deprecated and is now removed
   43799 from G++.
   43800 
   43801  The use of default arguments in function pointers, function typedefs
   43802 and other places where they are not permitted by the standard is
   43803 deprecated and will be removed from a future version of G++.
   43804 
   43805  G++ allows floating-point literals to appear in integral constant
   43806 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
   43807 deprecated and will be removed from a future version.
   43808 
   43809  G++ allows static data members of const floating-point type to be
   43810 declared with an initializer in a class definition. The standard only
   43811 allows initializers for static members of const integral types and const
   43812 enumeration types so this extension has been deprecated and will be
   43813 removed from a future version.
   43814 
   43815 
   43816 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
   43817 
   43818 7.13 Backwards Compatibility
   43819 ============================
   43820 
   43821 Now that there is a definitive ISO standard C++, G++ has a specification
   43822 to adhere to.  The C++ language evolved over time, and features that
   43823 used to be acceptable in previous drafts of the standard, such as the
   43824 ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
   43825 to allow compilation of C++ written to such drafts, G++ contains some
   43826 backwards compatibilities.  _All such backwards compatibility features
   43827 are liable to disappear in future versions of G++._ They should be
   43828 considered deprecated.   *Note Deprecated Features::.
   43829 
   43830 `For scope'
   43831      If a variable is declared at for scope, it used to remain in scope
   43832      until the end of the scope that contained the for statement
   43833      (rather than just within the for scope).  G++ retains this, but
   43834      issues a warning, if such a variable is accessed outside the for
   43835      scope.
   43836 
   43837 `Implicit C language'
   43838      Old C system header files did not contain an `extern "C" {...}'
   43839      scope to set the language.  On such systems, all header files are
   43840      implicitly scoped inside a C language scope.  Also, an empty
   43841      prototype `()' is treated as an unspecified number of arguments,
   43842      rather than no arguments, as C++ demands.
   43843 
   43844 
   43845 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
   43846 
   43847 8 GNU Objective-C features
   43848 **************************
   43849 
   43850 This document is meant to describe some of the GNU Objective-C
   43851 features.  It is not intended to teach you Objective-C.  There are
   43852 several resources on the Internet that present the language.
   43853 
   43854 * Menu:
   43855 
   43856 * GNU Objective-C runtime API::
   43857 * Executing code before main::
   43858 * Type encoding::
   43859 * Garbage Collection::
   43860 * Constant string objects::
   43861 * compatibility_alias::
   43862 * Exceptions::
   43863 * Synchronization::
   43864 * Fast enumeration::
   43865 * Messaging with the GNU Objective-C runtime::
   43866 
   43867 
   43868 File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
   43869 
   43870 8.1 GNU Objective-C runtime API
   43871 ===============================
   43872 
   43873 This section is specific for the GNU Objective-C runtime.  If you are
   43874 using a different runtime, you can skip it.
   43875 
   43876  The GNU Objective-C runtime provides an API that allows you to
   43877 interact with the Objective-C runtime system, querying the live runtime
   43878 structures and even manipulating them.  This allows you for example to
   43879 inspect and navigate classes, methods and protocols; to define new
   43880 classes or new methods, and even to modify existing classes or
   43881 protocols.
   43882 
   43883  If you are using a "Foundation" library such as GNUstep-Base, this
   43884 library will provide you with a rich set of functionality to do most of
   43885 the inspection tasks, and you probably will only need direct access to
   43886 the GNU Objective-C runtime API to define new classes or methods.
   43887 
   43888 * Menu:
   43889 
   43890 * Modern GNU Objective-C runtime API::
   43891 * Traditional GNU Objective-C runtime API::
   43892 
   43893 
   43894 File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
   43895 
   43896 8.1.1 Modern GNU Objective-C runtime API
   43897 ----------------------------------------
   43898 
   43899 The GNU Objective-C runtime provides an API which is similar to the one
   43900 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
   43901 API is documented in the public header files of the GNU Objective-C
   43902 runtime:
   43903 
   43904    * `objc/objc.h': this is the basic Objective-C header file, defining
   43905      the basic Objective-C types such as `id', `Class' and `BOOL'.  You
   43906      have to include this header to do almost anything with Objective-C.
   43907 
   43908    * `objc/runtime.h': this header declares most of the public runtime
   43909      API functions allowing you to inspect and manipulate the
   43910      Objective-C runtime data structures.  These functions are fairly
   43911      standardized across Objective-C runtimes and are almost identical
   43912      to the Apple/NeXT Objective-C runtime ones.  It does not declare
   43913      functions in some specialized areas (constructing and forwarding
   43914      message invocations, threading) which are in the other headers
   43915      below.  You have to include `objc/objc.h' and `objc/runtime.h' to
   43916      use any of the functions, such as `class_getName()', declared in
   43917      `objc/runtime.h'.
   43918 
   43919    * `objc/message.h': this header declares public functions used to
   43920      construct, deconstruct and forward message invocations.  Because
   43921      messaging is done in quite a different way on different runtimes,
   43922      functions in this header are specific to the GNU Objective-C
   43923      runtime implementation.
   43924 
   43925    * `objc/objc-exception.h': this header declares some public
   43926      functions related to Objective-C exceptions.  For example
   43927      functions in this header allow you to throw an Objective-C
   43928      exception from plain C/C++ code.
   43929 
   43930    * `objc/objc-sync.h': this header declares some public functions
   43931      related to the Objective-C `@synchronized()' syntax, allowing you
   43932      to emulate an Objective-C `@synchronized()' block in plain C/C++
   43933      code.
   43934 
   43935    * `objc/thr.h': this header declares a public runtime API threading
   43936      layer that is only provided by the GNU Objective-C runtime.  It
   43937      declares functions such as `objc_mutex_lock()', which provide a
   43938      platform-independent set of threading functions.
   43939 
   43940 
   43941  The header files contain detailed documentation for each function in
   43942 the GNU Objective-C runtime API.
   43943 
   43944 
   43945 File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
   43946 
   43947 8.1.2 Traditional GNU Objective-C runtime API
   43948 ---------------------------------------------
   43949 
   43950 The GNU Objective-C runtime used to provide a different API, which we
   43951 call the "traditional" GNU Objective-C runtime API.  Functions
   43952 belonging to this API are easy to recognize because they use a
   43953 different naming convention, such as `class_get_super_class()'
   43954 (traditional API) instead of `class_getSuperclass()' (modern API).
   43955 Software using this API includes the file `objc/objc-api.h' where it is
   43956 declared.
   43957 
   43958  Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
   43959 available.
   43960 
   43961 
   43962 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
   43963 
   43964 8.2 `+load': Executing code before main
   43965 =======================================
   43966 
   43967 This section is specific for the GNU Objective-C runtime.  If you are
   43968 using a different runtime, you can skip it.
   43969 
   43970  The GNU Objective-C runtime provides a way that allows you to execute
   43971 code before the execution of the program enters the `main' function.
   43972 The code is executed on a per-class and a per-category basis, through a
   43973 special class method `+load'.
   43974 
   43975  This facility is very useful if you want to initialize global variables
   43976 which can be accessed by the program directly, without sending a message
   43977 to the class first.  The usual way to initialize global variables, in
   43978 the `+initialize' method, might not be useful because `+initialize' is
   43979 only called when the first message is sent to a class object, which in
   43980 some cases could be too late.
   43981 
   43982  Suppose for example you have a `FileStream' class that declares
   43983 `Stdin', `Stdout' and `Stderr' as global variables, like below:
   43984 
   43985 
   43986      FileStream *Stdin = nil;
   43987      FileStream *Stdout = nil;
   43988      FileStream *Stderr = nil;
   43989 
   43990      @implementation FileStream
   43991 
   43992      + (void)initialize
   43993      {
   43994          Stdin = [[FileStream new] initWithFd:0];
   43995          Stdout = [[FileStream new] initWithFd:1];
   43996          Stderr = [[FileStream new] initWithFd:2];
   43997      }
   43998 
   43999      /* Other methods here */
   44000      @end
   44001 
   44002  In this example, the initialization of `Stdin', `Stdout' and `Stderr'
   44003 in `+initialize' occurs too late.  The programmer can send a message to
   44004 one of these objects before the variables are actually initialized,
   44005 thus sending messages to the `nil' object.  The `+initialize' method
   44006 which actually initializes the global variables is not invoked until
   44007 the first message is sent to the class object.  The solution would
   44008 require these variables to be initialized just before entering `main'.
   44009 
   44010  The correct solution of the above problem is to use the `+load' method
   44011 instead of `+initialize':
   44012 
   44013 
   44014      @implementation FileStream
   44015 
   44016      + (void)load
   44017      {
   44018          Stdin = [[FileStream new] initWithFd:0];
   44019          Stdout = [[FileStream new] initWithFd:1];
   44020          Stderr = [[FileStream new] initWithFd:2];
   44021      }
   44022 
   44023      /* Other methods here */
   44024      @end
   44025 
   44026  The `+load' is a method that is not overridden by categories.  If a
   44027 class and a category of it both implement `+load', both methods are
   44028 invoked.  This allows some additional initializations to be performed in
   44029 a category.
   44030 
   44031  This mechanism is not intended to be a replacement for `+initialize'.
   44032 You should be aware of its limitations when you decide to use it
   44033 instead of `+initialize'.
   44034 
   44035 * Menu:
   44036 
   44037 * What you can and what you cannot do in +load::
   44038 
   44039 
   44040 File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
   44041 
   44042 8.2.1 What you can and what you cannot do in `+load'
   44043 ----------------------------------------------------
   44044 
   44045 `+load' is to be used only as a last resort.  Because it is executed
   44046 very early, most of the Objective-C runtime machinery will not be ready
   44047 when `+load' is executed; hence `+load' works best for executing C code
   44048 that is independent on the Objective-C runtime.
   44049 
   44050  The `+load' implementation in the GNU runtime guarantees you the
   44051 following things:
   44052 
   44053    * you can write whatever C code you like;
   44054 
   44055    * you can allocate and send messages to objects whose class is
   44056      implemented in the same file;
   44057 
   44058    * the `+load' implementation of all super classes of a class are
   44059      executed before the `+load' of that class is executed;
   44060 
   44061    * the `+load' implementation of a class is executed before the
   44062      `+load' implementation of any category.
   44063 
   44064 
   44065  In particular, the following things, even if they can work in a
   44066 particular case, are not guaranteed:
   44067 
   44068    * allocation of or sending messages to arbitrary objects;
   44069 
   44070    * allocation of or sending messages to objects whose classes have a
   44071      category implemented in the same file;
   44072 
   44073    * sending messages to Objective-C constant strings (`@"this is a
   44074      constant string"');
   44075 
   44076 
   44077  You should make no assumptions about receiving `+load' in sibling
   44078 classes when you write `+load' of a class.  The order in which sibling
   44079 classes receive `+load' is not guaranteed.
   44080 
   44081  The order in which `+load' and `+initialize' are called could be
   44082 problematic if this matters.  If you don't allocate objects inside
   44083 `+load', it is guaranteed that `+load' is called before `+initialize'.
   44084 If you create an object inside `+load' the `+initialize' method of
   44085 object's class is invoked even if `+load' was not invoked.  Note if you
   44086 explicitly call `+load' on a class, `+initialize' will be called first.
   44087 To avoid possible problems try to implement only one of these methods.
   44088 
   44089  The `+load' method is also invoked when a bundle is dynamically loaded
   44090 into your running program.  This happens automatically without any
   44091 intervening operation from you.  When you write bundles and you need to
   44092 write `+load' you can safely create and send messages to objects whose
   44093 classes already exist in the running program.  The same restrictions as
   44094 above apply to classes defined in bundle.
   44095 
   44096 
   44097 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
   44098 
   44099 8.3 Type encoding
   44100 =================
   44101 
   44102 This is an advanced section.  Type encodings are used extensively by
   44103 the compiler and by the runtime, but you generally do not need to know
   44104 about them to use Objective-C.
   44105 
   44106  The Objective-C compiler generates type encodings for all the types.
   44107 These type encodings are used at runtime to find out information about
   44108 selectors and methods and about objects and classes.
   44109 
   44110  The types are encoded in the following way:
   44111 
   44112 `_Bool'            `B'
   44113 `char'             `c'
   44114 `unsigned char'    `C'
   44115 `short'            `s'
   44116 `unsigned short'   `S'
   44117 `int'              `i'
   44118 `unsigned int'     `I'
   44119 `long'             `l'
   44120 `unsigned long'    `L'
   44121 `long long'        `q'
   44122 `unsigned long     `Q'
   44123 long'              
   44124 `float'            `f'
   44125 `double'           `d'
   44126 `long double'      `D'
   44127 `void'             `v'
   44128 `id'               `@'
   44129 `Class'            `#'
   44130 `SEL'              `:'
   44131 `char*'            `*'
   44132 `enum'             an `enum' is encoded exactly as the integer type that
   44133                    the compiler uses for it, which depends on the
   44134                    enumeration values.  Often the compiler users
   44135                    `unsigned int', which is then encoded as `I'.
   44136 unknown type       `?'
   44137 Complex types      `j' followed by the inner type.  For example
   44138                    `_Complex double' is encoded as "jd".
   44139 bit-fields         `b' followed by the starting position of the
   44140                    bit-field, the type of the bit-field and the size of
   44141                    the bit-field (the bit-fields encoding was changed
   44142                    from the NeXT's compiler encoding, see below)
   44143 
   44144  The encoding of bit-fields has changed to allow bit-fields to be
   44145 properly handled by the runtime functions that compute sizes and
   44146 alignments of types that contain bit-fields.  The previous encoding
   44147 contained only the size of the bit-field.  Using only this information
   44148 it is not possible to reliably compute the size occupied by the
   44149 bit-field.  This is very important in the presence of the Boehm's
   44150 garbage collector because the objects are allocated using the typed
   44151 memory facility available in this collector.  The typed memory
   44152 allocation requires information about where the pointers are located
   44153 inside the object.
   44154 
   44155  The position in the bit-field is the position, counting in bits, of the
   44156 bit closest to the beginning of the structure.
   44157 
   44158  The non-atomic types are encoded as follows:
   44159 
   44160 pointers       `^' followed by the pointed type.
   44161 arrays         `[' followed by the number of elements in the array
   44162                followed by the type of the elements followed by `]'
   44163 structures     `{' followed by the name of the structure (or `?' if the
   44164                structure is unnamed), the `=' sign, the type of the
   44165                members and by `}'
   44166 unions         `(' followed by the name of the structure (or `?' if the
   44167                union is unnamed), the `=' sign, the type of the members
   44168                followed by `)'
   44169 vectors        `![' followed by the vector_size (the number of bytes
   44170                composing the vector) followed by a comma, followed by
   44171                the alignment (in bytes) of the vector, followed by the
   44172                type of the elements followed by `]'
   44173 
   44174  Here are some types and their encodings, as they are generated by the
   44175 compiler on an i386 machine:
   44176 
   44177 
   44178 Objective-C type   Compiler encoding
   44179      int a[10];    `[10i]'
   44180      struct {      `{?=i[3f]b128i3b131i2c}'
   44181        int i;      
   44182        float f[3]; 
   44183        int a:3;    
   44184        int b:2;    
   44185        char c;     
   44186      }             
   44187      int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
   44188 
   44189 
   44190  In addition to the types the compiler also encodes the type
   44191 specifiers.  The table below describes the encoding of the current
   44192 Objective-C type specifiers:
   44193 
   44194 
   44195 Specifier          Encoding
   44196 `const'            `r'
   44197 `in'               `n'
   44198 `inout'            `N'
   44199 `out'              `o'
   44200 `bycopy'           `O'
   44201 `byref'            `R'
   44202 `oneway'           `V'
   44203 
   44204 
   44205  The type specifiers are encoded just before the type.  Unlike types
   44206 however, the type specifiers are only encoded when they appear in method
   44207 argument types.
   44208 
   44209  Note how `const' interacts with pointers:
   44210 
   44211 
   44212 Objective-C type   Compiler encoding
   44213      const int     `ri'
   44214      const int*    `^ri'
   44215      int *const    `r^i'
   44216 
   44217 
   44218  `const int*' is a pointer to a `const int', and so is encoded as
   44219 `^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
   44220 is encoded as `r^i'.
   44221 
   44222  Finally, there is a complication when encoding `const char *' versus
   44223 `char * const'.  Because `char *' is encoded as `*' and not as `^c',
   44224 there is no way to express the fact that `r' applies to the pointer or
   44225 to the pointee.
   44226 
   44227  Hence, it is assumed as a convention that `r*' means `const char *'
   44228 (since it is what is most often meant), and there is no way to encode
   44229 `char *const'.  `char *const' would simply be encoded as `*', and the
   44230 `const' is lost.
   44231 
   44232 * Menu:
   44233 
   44234 * Legacy type encoding::
   44235 * @encode::
   44236 * Method signatures::
   44237 
   44238 
   44239 File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
   44240 
   44241 8.3.1 Legacy type encoding
   44242 --------------------------
   44243 
   44244 Unfortunately, historically GCC used to have a number of bugs in its
   44245 encoding code.  The NeXT runtime expects GCC to emit type encodings in
   44246 this historical format (compatible with GCC-3.3), so when using the
   44247 NeXT runtime, GCC will introduce on purpose a number of incorrect
   44248 encodings:
   44249 
   44250    * the read-only qualifier of the pointee gets emitted before the '^'.
   44251      The read-only qualifier of the pointer itself gets ignored, unless
   44252      it is a typedef.  Also, the 'r' is only emitted for the outermost
   44253      type.
   44254 
   44255    * 32-bit longs are encoded as 'l' or 'L', but not always.  For
   44256      typedefs, the compiler uses 'i' or 'I' instead if encoding a
   44257      struct field or a pointer.
   44258 
   44259    * `enum's are always encoded as 'i' (int) even if they are actually
   44260      unsigned or long.
   44261 
   44262 
   44263  In addition to that, the NeXT runtime uses a different encoding for
   44264 bitfields.  It encodes them as `b' followed by the size, without a bit
   44265 offset or the underlying field type.
   44266 
   44267 
   44268 File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
   44269 
   44270 8.3.2 @encode
   44271 -------------
   44272 
   44273 GNU Objective-C supports the `@encode' syntax that allows you to create
   44274 a type encoding from a C/Objective-C type.  For example, `@encode(int)'
   44275 is compiled by the compiler into `"i"'.
   44276 
   44277  `@encode' does not support type qualifiers other than `const'.  For
   44278 example, `@encode(const char*)' is valid and is compiled into `"r*"',
   44279 while `@encode(bycopy char *)' is invalid and will cause a compilation
   44280 error.
   44281 
   44282 
   44283 File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
   44284 
   44285 8.3.3 Method signatures
   44286 -----------------------
   44287 
   44288 This section documents the encoding of method types, which is rarely
   44289 needed to use Objective-C.  You should skip it at a first reading; the
   44290 runtime provides functions that will work on methods and can walk
   44291 through the list of parameters and interpret them for you.  These
   44292 functions are part of the public "API" and are the preferred way to
   44293 interact with method signatures from user code.
   44294 
   44295  But if you need to debug a problem with method signatures and need to
   44296 know how they are implemented (i.e., the "ABI"), read on.
   44297 
   44298  Methods have their "signature" encoded and made available to the
   44299 runtime.  The "signature" encodes all the information required to
   44300 dynamically build invocations of the method at runtime: return type and
   44301 arguments.
   44302 
   44303  The "signature" is a null-terminated string, composed of the following:
   44304 
   44305    * The return type, including type qualifiers.  For example, a method
   44306      returning `int' would have `i' here.
   44307 
   44308    * The total size (in bytes) required to pass all the parameters.
   44309      This includes the two hidden parameters (the object `self' and the
   44310      method selector `_cmd').
   44311 
   44312    * Each argument, with the type encoding, followed by the offset (in
   44313      bytes) of the argument in the list of parameters.
   44314 
   44315 
   44316  For example, a method with no arguments and returning `int' would have
   44317 the signature `i8@0:4' if the size of a pointer is 4.  The signature is
   44318 interpreted as follows: the `i' is the return type (an `int'), the `8'
   44319 is the total size of the parameters in bytes (two pointers each of size
   44320 4), the `@0' is the first parameter (an object at byte offset `0') and
   44321 `:4' is the second parameter (a `SEL' at byte offset `4').
   44322 
   44323  You can easily find more examples by running the "strings" program on
   44324 an Objective-C object file compiled by GCC.  You'll see a lot of
   44325 strings that look very much like `i8@0:4'.  They are signatures of
   44326 Objective-C methods.
   44327 
   44328 
   44329 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
   44330 
   44331 8.4 Garbage Collection
   44332 ======================
   44333 
   44334 This section is specific for the GNU Objective-C runtime.  If you are
   44335 using a different runtime, you can skip it.
   44336 
   44337  Support for garbage collection with the GNU runtime has been added by
   44338 using a powerful conservative garbage collector, known as the
   44339 Boehm-Demers-Weiser conservative garbage collector.
   44340 
   44341  To enable the support for it you have to configure the compiler using
   44342 an additional argument, `--enable-objc-gc'.  This will build the
   44343 boehm-gc library, and build an additional runtime library which has
   44344 several enhancements to support the garbage collector.  The new library
   44345 has a new name, `libobjc_gc.a' to not conflict with the
   44346 non-garbage-collected library.
   44347 
   44348  When the garbage collector is used, the objects are allocated using the
   44349 so-called typed memory allocation mechanism available in the
   44350 Boehm-Demers-Weiser collector.  This mode requires precise information
   44351 on where pointers are located inside objects.  This information is
   44352 computed once per class, immediately after the class has been
   44353 initialized.
   44354 
   44355  There is a new runtime function `class_ivar_set_gcinvisible()' which
   44356 can be used to declare a so-called "weak pointer" reference.  Such a
   44357 pointer is basically hidden for the garbage collector; this can be
   44358 useful in certain situations, especially when you want to keep track of
   44359 the allocated objects, yet allow them to be collected.  This kind of
   44360 pointers can only be members of objects, you cannot declare a global
   44361 pointer as a weak reference.  Every type which is a pointer type can be
   44362 declared a weak pointer, including `id', `Class' and `SEL'.
   44363 
   44364  Here is an example of how to use this feature.  Suppose you want to
   44365 implement a class whose instances hold a weak pointer reference; the
   44366 following class does this:
   44367 
   44368 
   44369      @interface WeakPointer : Object
   44370      {
   44371          const void* weakPointer;
   44372      }
   44373 
   44374      - initWithPointer:(const void*)p;
   44375      - (const void*)weakPointer;
   44376      @end
   44377 
   44378 
   44379      @implementation WeakPointer
   44380 
   44381      + (void)initialize
   44382      {
   44383        if (self == objc_lookUpClass ("WeakPointer"))
   44384          class_ivar_set_gcinvisible (self, "weakPointer", YES);
   44385      }
   44386 
   44387      - initWithPointer:(const void*)p
   44388      {
   44389        weakPointer = p;
   44390        return self;
   44391      }
   44392 
   44393      - (const void*)weakPointer
   44394      {
   44395        return weakPointer;
   44396      }
   44397 
   44398      @end
   44399 
   44400  Weak pointers are supported through a new type character specifier
   44401 represented by the `!' character.  The `class_ivar_set_gcinvisible()'
   44402 function adds or removes this specifier to the string type description
   44403 of the instance variable named as argument.
   44404 
   44405 
   44406 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
   44407 
   44408 8.5 Constant string objects
   44409 ===========================
   44410 
   44411 GNU Objective-C provides constant string objects that are generated
   44412 directly by the compiler.  You declare a constant string object by
   44413 prefixing a C constant string with the character `@':
   44414 
   44415        id myString = @"this is a constant string object";
   44416 
   44417  The constant string objects are by default instances of the
   44418 `NXConstantString' class which is provided by the GNU Objective-C
   44419 runtime.  To get the definition of this class you must include the
   44420 `objc/NXConstStr.h' header file.
   44421 
   44422  User defined libraries may want to implement their own constant string
   44423 class.  To be able to support them, the GNU Objective-C compiler
   44424 provides a new command line options
   44425 `-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
   44426 to a strict structure, the same as `NXConstantString''s structure:
   44427 
   44428 
   44429      @interface MyConstantStringClass
   44430      {
   44431        Class isa;
   44432        char *c_string;
   44433        unsigned int len;
   44434      }
   44435      @end
   44436 
   44437  `NXConstantString' inherits from `Object'; user class libraries may
   44438 choose to inherit the customized constant string class from a different
   44439 class than `Object'.  There is no requirement in the methods the
   44440 constant string class has to implement, but the final ivar layout of
   44441 the class must be the compatible with the given structure.
   44442 
   44443  When the compiler creates the statically allocated constant string
   44444 object, the `c_string' field will be filled by the compiler with the
   44445 string; the `length' field will be filled by the compiler with the
   44446 string length; the `isa' pointer will be filled with `NULL' by the
   44447 compiler, and it will later be fixed up automatically at runtime by the
   44448 GNU Objective-C runtime library to point to the class which was set by
   44449 the `-fconstant-string-class' option when the object file is loaded (if
   44450 you wonder how it works behind the scenes, the name of the class to
   44451 use, and the list of static objects to fixup, are stored by the
   44452 compiler in the object file in a place where the GNU runtime library
   44453 will find them at runtime).
   44454 
   44455  As a result, when a file is compiled with the
   44456 `-fconstant-string-class' option, all the constant string objects will
   44457 be instances of the class specified as argument to this option.  It is
   44458 possible to have multiple compilation units referring to different
   44459 constant string classes, neither the compiler nor the linker impose any
   44460 restrictions in doing this.
   44461 
   44462 
   44463 File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
   44464 
   44465 8.6 compatibility_alias
   44466 =======================
   44467 
   44468 The keyword `@compatibility_alias' allows you to define a class name as
   44469 equivalent to another class name.  For example:
   44470 
   44471      @compatibility_alias WOApplication GSWApplication;
   44472 
   44473  tells the compiler that each time it encounters `WOApplication' as a
   44474 class name, it should replace it with `GSWApplication' (that is,
   44475 `WOApplication' is just an alias for `GSWApplication').
   44476 
   44477  There are some constraints on how this can be used--
   44478 
   44479    * `WOApplication' (the alias) must not be an existing class;
   44480 
   44481    * `GSWApplication' (the real class) must be an existing class.
   44482 
   44483 
   44484 
   44485 File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
   44486 
   44487 8.7 Exceptions
   44488 ==============
   44489 
   44490 GNU Objective-C provides exception support built into the language, as
   44491 in the following example:
   44492 
   44493        @try {
   44494          ...
   44495             @throw expr;
   44496          ...
   44497        }
   44498        @catch (AnObjCClass *exc) {
   44499          ...
   44500            @throw expr;
   44501          ...
   44502            @throw;
   44503          ...
   44504        }
   44505        @catch (AnotherClass *exc) {
   44506          ...
   44507        }
   44508        @catch (id allOthers) {
   44509          ...
   44510        }
   44511        @finally {
   44512          ...
   44513            @throw expr;
   44514          ...
   44515        }
   44516 
   44517  The `@throw' statement may appear anywhere in an Objective-C or
   44518 Objective-C++ program; when used inside of a `@catch' block, the
   44519 `@throw' may appear without an argument (as shown above), in which case
   44520 the object caught by the `@catch' will be rethrown.
   44521 
   44522  Note that only (pointers to) Objective-C objects may be thrown and
   44523 caught using this scheme.  When an object is thrown, it will be caught
   44524 by the nearest `@catch' clause capable of handling objects of that
   44525 type, analogously to how `catch' blocks work in C++ and Java.  A
   44526 `@catch(id ...)' clause (as shown above) may also be provided to catch
   44527 any and all Objective-C exceptions not caught by previous `@catch'
   44528 clauses (if any).
   44529 
   44530  The `@finally' clause, if present, will be executed upon exit from the
   44531 immediately preceding `@try ... @catch' section.  This will happen
   44532 regardless of whether any exceptions are thrown, caught or rethrown
   44533 inside the `@try ... @catch' section, analogously to the behavior of
   44534 the `finally' clause in Java.
   44535 
   44536  There are several caveats to using the new exception mechanism:
   44537 
   44538    * The `-fobjc-exceptions' command line option must be used when
   44539      compiling Objective-C files that use exceptions.
   44540 
   44541    * With the GNU runtime, exceptions are always implemented as "native"
   44542      exceptions and it is recommended that the `-fexceptions' and
   44543      `-shared-libgcc' options are used when linking.
   44544 
   44545    * With the NeXT runtime, although currently designed to be binary
   44546      compatible with `NS_HANDLER'-style idioms provided by the
   44547      `NSException' class, the new exceptions can only be used on Mac OS
   44548      X 10.3 (Panther) and later systems, due to additional functionality
   44549      needed in the NeXT Objective-C runtime.
   44550 
   44551    * As mentioned above, the new exceptions do not support handling
   44552      types other than Objective-C objects.   Furthermore, when used from
   44553      Objective-C++, the Objective-C exception model does not
   44554      interoperate with C++ exceptions at this time.  This means you
   44555      cannot `@throw' an exception from Objective-C and `catch' it in
   44556      C++, or vice versa (i.e., `throw ... @catch').
   44557 
   44558 
   44559 File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
   44560 
   44561 8.8 Synchronization
   44562 ===================
   44563 
   44564 GNU Objective-C provides support for synchronized blocks:
   44565 
   44566        @synchronized (ObjCClass *guard) {
   44567          ...
   44568        }
   44569 
   44570  Upon entering the `@synchronized' block, a thread of execution shall
   44571 first check whether a lock has been placed on the corresponding `guard'
   44572 object by another thread.  If it has, the current thread shall wait
   44573 until the other thread relinquishes its lock.  Once `guard' becomes
   44574 available, the current thread will place its own lock on it, execute
   44575 the code contained in the `@synchronized' block, and finally relinquish
   44576 the lock (thereby making `guard' available to other threads).
   44577 
   44578  Unlike Java, Objective-C does not allow for entire methods to be
   44579 marked `@synchronized'.  Note that throwing exceptions out of
   44580 `@synchronized' blocks is allowed, and will cause the guarding object
   44581 to be unlocked properly.
   44582 
   44583  Because of the interactions between synchronization and exception
   44584 handling, you can only use `@synchronized' when compiling with
   44585 exceptions enabled, that is with the command line option
   44586 `-fobjc-exceptions'.
   44587 
   44588 
   44589 File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
   44590 
   44591 8.9 Fast enumeration
   44592 ====================
   44593 
   44594 * Menu:
   44595 
   44596 * Using fast enumeration::
   44597 * c99-like fast enumeration syntax::
   44598 * Fast enumeration details::
   44599 * Fast enumeration protocol::
   44600 
   44601 
   44602 File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
   44603 
   44604 8.9.1 Using fast enumeration
   44605 ----------------------------
   44606 
   44607 GNU Objective-C provides support for the fast enumeration syntax:
   44608 
   44609        id array = ...;
   44610        id object;
   44611 
   44612        for (object in array)
   44613        {
   44614          /* Do something with 'object' */
   44615        }
   44616 
   44617  `array' needs to be an Objective-C object (usually a collection
   44618 object, for example an array, a dictionary or a set) which implements
   44619 the "Fast Enumeration Protocol" (see below).  If you are using a
   44620 Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
   44621 collection objects in the library implement this protocol and can be
   44622 used in this way.
   44623 
   44624  The code above would iterate over all objects in `array'.  For each of
   44625 them, it assigns it to `object', then executes the `Do something with
   44626 'object'' statements.
   44627 
   44628  Here is a fully worked-out example using a Foundation library (which
   44629 provides the implementation of `NSArray', `NSString' and `NSLog'):
   44630 
   44631        NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
   44632        NSString *object;
   44633 
   44634        for (object in array)
   44635          NSLog (@"Iterating over %@", object);
   44636 
   44637 
   44638 File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
   44639 
   44640 8.9.2 c99-like fast enumeration syntax
   44641 --------------------------------------
   44642 
   44643 A c99-like declaration syntax is also allowed:
   44644 
   44645        id array = ...;
   44646 
   44647        for (id object in array)
   44648        {
   44649          /* Do something with 'object'  */
   44650        }
   44651 
   44652  this is completely equivalent to:
   44653 
   44654        id array = ...;
   44655 
   44656        {
   44657          id object;
   44658          for (object in array)
   44659          {
   44660            /* Do something with 'object'  */
   44661          }
   44662        }
   44663 
   44664  but can save some typing.
   44665 
   44666  Note that the option `-std=c99' is not required to allow this syntax
   44667 in Objective-C.
   44668 
   44669 
   44670 File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
   44671 
   44672 8.9.3 Fast enumeration details
   44673 ------------------------------
   44674 
   44675 Here is a more technical description with the gory details.  Consider
   44676 the code
   44677 
   44678        for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
   44679        {
   44680          STATEMENTS
   44681        }
   44682 
   44683  here is what happens when you run it:
   44684 
   44685    * `COLLECTION EXPRESSION' is evaluated exactly once and the result
   44686      is used as the collection object to iterate over.  This means it
   44687      is safe to write code such as `for (object in [NSDictionary
   44688      keyEnumerator]) ...'.
   44689 
   44690    * the iteration is implemented by the compiler by repeatedly getting
   44691      batches of objects from the collection object using the fast
   44692      enumeration protocol (see below), then iterating over all objects
   44693      in the batch.  This is faster than a normal enumeration where
   44694      objects are retrieved one by one (hence the name "fast
   44695      enumeration").
   44696 
   44697    * if there are no objects in the collection, then `OBJECT
   44698      EXPRESSION' is set to `nil' and the loop immediately terminates.
   44699 
   44700    * if there are objects in the collection, then for each object in the
   44701      collection (in the order they are returned) `OBJECT EXPRESSION' is
   44702      set to the object, then `STATEMENTS' are executed.
   44703 
   44704    * `STATEMENTS' can contain `break' and `continue' commands, which
   44705      will abort the iteration or skip to the next loop iteration as
   44706      expected.
   44707 
   44708    * when the iteration ends because there are no more objects to
   44709      iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
   44710      you to determine whether the iteration finished because a `break'
   44711      command was used (in which case `OBJECT EXPRESSION' will remain
   44712      set to the last object that was iterated over) or because it
   44713      iterated over all the objects (in which case `OBJECT EXPRESSION'
   44714      will be set to `nil').
   44715 
   44716    * `STATEMENTS' must not make any changes to the collection object;
   44717      if they do, it is a hard error and the fast enumeration terminates
   44718      by invoking `objc_enumerationMutation', a runtime function that
   44719      normally aborts the program but which can be customized by
   44720      Foundation libraries via `objc_set_mutation_handler' to do
   44721      something different, such as raising an exception.
   44722 
   44723 
   44724 
   44725 File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
   44726 
   44727 8.9.4 Fast enumeration protocol
   44728 -------------------------------
   44729 
   44730 If you want your own collection object to be usable with fast
   44731 enumeration, you need to have it implement the method
   44732 
   44733      - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
   44734                                            objects: (id *)objects
   44735                                              count: (unsigned long)len;
   44736 
   44737  where `NSFastEnumerationState' must be defined in your code as follows:
   44738 
   44739      typedef struct
   44740      {
   44741        unsigned long state;
   44742        id            *itemsPtr;
   44743        unsigned long *mutationsPtr;
   44744        unsigned long extra[5];
   44745      } NSFastEnumerationState;
   44746 
   44747  If no `NSFastEnumerationState' is defined in your code, the compiler
   44748 will automatically replace `NSFastEnumerationState *' with `struct
   44749 __objcFastEnumerationState *', where that type is silently defined by
   44750 the compiler in an identical way.  This can be confusing and we
   44751 recommend that you define `NSFastEnumerationState' (as shown above)
   44752 instead.
   44753 
   44754  The method is called repeatedly during a fast enumeration to retrieve
   44755 batches of objects.  Each invocation of the method should retrieve the
   44756 next batch of objects.
   44757 
   44758  The return value of the method is the number of objects in the current
   44759 batch; this should not exceed `len', which is the maximum size of a
   44760 batch as requested by the caller.  The batch itself is returned in the
   44761 `itemsPtr' field of the `NSFastEnumerationState' struct.
   44762 
   44763  To help with returning the objects, the `objects' array is a C array
   44764 preallocated by the caller (on the stack) of size `len'.  In many cases
   44765 you can put the objects you want to return in that `objects' array,
   44766 then do `itemsPtr = objects'.  But you don't have to; if your
   44767 collection already has the objects to return in some form of C array,
   44768 it could return them from there instead.
   44769 
   44770  The `state' and `extra' fields of the `NSFastEnumerationState'
   44771 structure allows your collection object to keep track of the state of
   44772 the enumeration.  In a simple array implementation, `state' may keep
   44773 track of the index of the last object that was returned, and `extra'
   44774 may be unused.
   44775 
   44776  The `mutationsPtr' field of the `NSFastEnumerationState' is used to
   44777 keep track of mutations.  It should point to a number; before working
   44778 on each object, the fast enumeration loop will check that this number
   44779 has not changed.  If it has, a mutation has happened and the fast
   44780 enumeration will abort.  So, `mutationsPtr' could be set to point to
   44781 some sort of version number of your collection, which is increased by
   44782 one every time there is a change (for example when an object is added
   44783 or removed).  Or, if you are content with less strict mutation checks,
   44784 it could point to the number of objects in your collection or some
   44785 other value that can be checked to perform an approximate check that
   44786 the collection has not been mutated.
   44787 
   44788  Finally, note how we declared the `len' argument and the return value
   44789 to be of type `unsigned long'.  They could also be declared to be of
   44790 type `unsigned int' and everything would still work.
   44791 
   44792 
   44793 File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
   44794 
   44795 8.10 Messaging with the GNU Objective-C runtime
   44796 ===============================================
   44797 
   44798 This section is specific for the GNU Objective-C runtime.  If you are
   44799 using a different runtime, you can skip it.
   44800 
   44801  The implementation of messaging in the GNU Objective-C runtime is
   44802 designed to be portable, and so is based on standard C.
   44803 
   44804  Sending a message in the GNU Objective-C runtime is composed of two
   44805 separate steps.  First, there is a call to the lookup function,
   44806 `objc_msg_lookup ()' (or, in the case of messages to super,
   44807 `objc_msg_lookup_super ()').  This runtime function takes as argument
   44808 the receiver and the selector of the method to be called; it returns
   44809 the `IMP', that is a pointer to the function implementing the method.
   44810 The second step of method invocation consists of casting this pointer
   44811 function to the appropriate function pointer type, and calling the
   44812 function pointed to it with the right arguments.
   44813 
   44814  For example, when the compiler encounters a method invocation such as
   44815 `[object init]', it compiles it into a call to `objc_msg_lookup
   44816 (object, @selector(init))' followed by a cast of the returned value to
   44817 the appropriate function pointer type, and then it calls it.
   44818 
   44819 * Menu:
   44820 
   44821 * Dynamically registering methods::
   44822 * Forwarding hook::
   44823 
   44824 
   44825 File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
   44826 
   44827 8.10.1 Dynamically registering methods
   44828 --------------------------------------
   44829 
   44830 If `objc_msg_lookup()' does not find a suitable method implementation,
   44831 because the receiver does not implement the required method, it tries
   44832 to see if the class can dynamically register the method.
   44833 
   44834  To do so, the runtime checks if the class of the receiver implements
   44835 the method
   44836 
   44837      + (BOOL) resolveInstanceMethod: (SEL)selector;
   44838 
   44839  in the case of an instance method, or
   44840 
   44841      + (BOOL) resolveClassMethod: (SEL)selector;
   44842 
   44843  in the case of a class method.  If the class implements it, the
   44844 runtime invokes it, passing as argument the selector of the original
   44845 method, and if it returns `YES', the runtime tries the lookup again,
   44846 which could now succeed if a matching method was added dynamically by
   44847 `+resolveInstanceMethod:' or `+resolveClassMethod:'.
   44848 
   44849  This allows classes to dynamically register methods (by adding them to
   44850 the class using `class_addMethod') when they are first called.  To do
   44851 so, a class should implement `+resolveInstanceMethod:' (or, depending
   44852 on the case, `+resolveClassMethod:') and have it recognize the
   44853 selectors of methods that can be registered dynamically at runtime,
   44854 register them, and return `YES'.  It should return `NO' for methods
   44855 that it does not dynamically registered at runtime.
   44856 
   44857  If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
   44858 implemented or returns `NO', the runtime then tries the forwarding hook.
   44859 
   44860  Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
   44861 added to the GNU Objective-C runtime in GCC version 4.6.
   44862 
   44863 
   44864 File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
   44865 
   44866 8.10.2 Forwarding hook
   44867 ----------------------
   44868 
   44869 The GNU Objective-C runtime provides a hook, called
   44870 `__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
   44871 can't find a method implementation in the runtime tables and after
   44872 calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
   44873 attempted and did not succeed in dynamically registering the method.
   44874 
   44875  To configure the hook, you set the global variable
   44876 `__objc_msg_forward2' to a function with the same argument and return
   44877 types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
   44878 method implementation, it invokes the hook function you provided to get
   44879 a method implementation to return.  So, in practice
   44880 `__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
   44881 adding some custom code that is called to do a further lookup when no
   44882 standard method implementation can be found using the normal lookup.
   44883 
   44884  This hook is generally reserved for "Foundation" libraries such as
   44885 GNUstep Base, which use it to implement their high-level method
   44886 forwarding API, typically based around the `forwardInvocation:' method.
   44887 So, unless you are implementing your own "Foundation" library, you
   44888 should not set this hook.
   44889 
   44890  In a typical forwarding implementation, the `__objc_msg_forward2' hook
   44891 function determines the argument and return type of the method that is
   44892 being looked up, and then creates a function that takes these arguments
   44893 and has that return type, and returns it to the caller.  Creating this
   44894 function is non-trivial and is typically performed using a dedicated
   44895 library such as `libffi'.
   44896 
   44897  The forwarding method implementation thus created is returned by
   44898 `objc_msg_lookup()' and is executed as if it was a normal method
   44899 implementation.  When the forwarding method implementation is called,
   44900 it is usually expected to pack all arguments into some sort of object
   44901 (typically, an `NSInvocation' in a "Foundation" library), and hand it
   44902 over to the programmer (`forwardInvocation:') who is then allowed to
   44903 manipulate the method invocation using a high-level API provided by the
   44904 "Foundation" library.  For example, the programmer may want to examine
   44905 the method invocation arguments and name and potentially change them
   44906 before forwarding the method invocation to one or more local objects
   44907 (`performInvocation:') or even to remote objects (by using Distributed
   44908 Objects or some other mechanism).  When all this completes, the return
   44909 value is passed back and must be returned correctly to the original
   44910 caller.
   44911 
   44912  Note that the GNU Objective-C runtime currently provides no support
   44913 for method forwarding or method invocations other than the
   44914 `__objc_msg_forward2' hook.
   44915 
   44916  If the forwarding hook does not exist or returns `NULL', the runtime
   44917 currently attempts forwarding using an older, deprecated API, and if
   44918 that fails, it aborts the program.  In future versions of the GNU
   44919 Objective-C runtime, the runtime will immediately abort.
   44920 
   44921 
   44922 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
   44923 
   44924 9 Binary Compatibility
   44925 **********************
   44926 
   44927 Binary compatibility encompasses several related concepts:
   44928 
   44929 "application binary interface (ABI)"
   44930      The set of runtime conventions followed by all of the tools that
   44931      deal with binary representations of a program, including
   44932      compilers, assemblers, linkers, and language runtime support.
   44933      Some ABIs are formal with a written specification, possibly
   44934      designed by multiple interested parties.  Others are simply the
   44935      way things are actually done by a particular set of tools.
   44936 
   44937 "ABI conformance"
   44938      A compiler conforms to an ABI if it generates code that follows
   44939      all of the specifications enumerated by that ABI.  A library
   44940      conforms to an ABI if it is implemented according to that ABI.  An
   44941      application conforms to an ABI if it is built using tools that
   44942      conform to that ABI and does not contain source code that
   44943      specifically changes behavior specified by the ABI.
   44944 
   44945 "calling conventions"
   44946      Calling conventions are a subset of an ABI that specify of how
   44947      arguments are passed and function results are returned.
   44948 
   44949 "interoperability"
   44950      Different sets of tools are interoperable if they generate files
   44951      that can be used in the same program.  The set of tools includes
   44952      compilers, assemblers, linkers, libraries, header files, startup
   44953      files, and debuggers.  Binaries produced by different sets of
   44954      tools are not interoperable unless they implement the same ABI.
   44955      This applies to different versions of the same tools as well as
   44956      tools from different vendors.
   44957 
   44958 "intercallability"
   44959      Whether a function in a binary built by one set of tools can call a
   44960      function in a binary built by a different set of tools is a subset
   44961      of interoperability.
   44962 
   44963 "implementation-defined features"
   44964      Language standards include lists of implementation-defined
   44965      features whose behavior can vary from one implementation to
   44966      another.  Some of these features are normally covered by a
   44967      platform's ABI and others are not.  The features that are not
   44968      covered by an ABI generally affect how a program behaves, but not
   44969      intercallability.
   44970 
   44971 "compatibility"
   44972      Conformance to the same ABI and the same behavior of
   44973      implementation-defined features are both relevant for
   44974      compatibility.
   44975 
   44976  The application binary interface implemented by a C or C++ compiler
   44977 affects code generation and runtime support for:
   44978 
   44979    * size and alignment of data types
   44980 
   44981    * layout of structured types
   44982 
   44983    * calling conventions
   44984 
   44985    * register usage conventions
   44986 
   44987    * interfaces for runtime arithmetic support
   44988 
   44989    * object file formats
   44990 
   44991  In addition, the application binary interface implemented by a C++
   44992 compiler affects code generation and runtime support for:
   44993    * name mangling
   44994 
   44995    * exception handling
   44996 
   44997    * invoking constructors and destructors
   44998 
   44999    * layout, alignment, and padding of classes
   45000 
   45001    * layout and alignment of virtual tables
   45002 
   45003  Some GCC compilation options cause the compiler to generate code that
   45004 does not conform to the platform's default ABI.  Other options cause
   45005 different program behavior for implementation-defined features that are
   45006 not covered by an ABI.  These options are provided for consistency with
   45007 other compilers that do not follow the platform's default ABI or the
   45008 usual behavior of implementation-defined features for the platform.  Be
   45009 very careful about using such options.
   45010 
   45011  Most platforms have a well-defined ABI that covers C code, but ABIs
   45012 that cover C++ functionality are not yet common.
   45013 
   45014  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
   45015 written, vendor-neutral C++ ABI that was designed to be specific to
   45016 64-bit Itanium but also includes generic specifications that apply to
   45017 any platform.  This C++ ABI is also implemented by other compiler
   45018 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
   45019 tried hard to provide a stable ABI that will be compatible with future
   45020 GCC releases, but it is possible that we will encounter problems that
   45021 make this difficult.  Such problems could include different
   45022 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
   45023 bugs in the implementation of the ABI in different compilers.  GCC's
   45024 `-Wabi' switch warns when G++ generates code that is probably not
   45025 compatible with the C++ ABI.
   45026 
   45027  The C++ library used with a C++ compiler includes the Standard C++
   45028 Library, with functionality defined in the C++ Standard, plus language
   45029 runtime support.  The runtime support is included in a C++ ABI, but
   45030 there is no formal ABI for the Standard C++ Library.  Two
   45031 implementations of that library are interoperable if one follows the
   45032 de-facto ABI of the other and if they are both built with the same
   45033 compiler, or with compilers that conform to the same ABI for C++
   45034 compiler and runtime support.
   45035 
   45036  When G++ and another C++ compiler conform to the same C++ ABI, but the
   45037 implementations of the Standard C++ Library that they normally use do
   45038 not follow the same ABI for the Standard C++ Library, object files
   45039 built with those compilers can be used in the same program only if they
   45040 use the same C++ library.  This requires specifying the location of the
   45041 C++ library header files when invoking the compiler whose usual library
   45042 is not being used.  The location of GCC's C++ header files depends on
   45043 how the GCC build was configured, but can be seen by using the G++ `-v'
   45044 option.  With default configuration options for G++ 3.3 the compile
   45045 line for a different C++ compiler needs to include
   45046 
   45047          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
   45048 
   45049  Similarly, compiling code with G++ that must use a C++ library other
   45050 than the GNU C++ library requires specifying the location of the header
   45051 files for that other library.
   45052 
   45053  The most straightforward way to link a program to use a particular C++
   45054 library is to use a C++ driver that specifies that C++ library by
   45055 default.  The `g++' driver, for example, tells the linker where to find
   45056 GCC's C++ library (`libstdc++') plus the other libraries and startup
   45057 files it needs, in the proper order.
   45058 
   45059  If a program must use a different C++ library and it's not possible to
   45060 do the final link using a C++ driver that uses that library by default,
   45061 it is necessary to tell `g++' the location and name of that library.
   45062 It might also be necessary to specify different startup files and other
   45063 runtime support libraries, and to suppress the use of GCC's support
   45064 libraries with one or more of the options `-nostdlib', `-nostartfiles',
   45065 and `-nodefaultlibs'.
   45066 
   45067 
   45068 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
   45069 
   45070 10 `gcov'--a Test Coverage Program
   45071 **********************************
   45072 
   45073 `gcov' is a tool you can use in conjunction with GCC to test code
   45074 coverage in your programs.
   45075 
   45076 * Menu:
   45077 
   45078 * Gcov Intro::                  Introduction to gcov.
   45079 * Invoking Gcov::               How to use gcov.
   45080 * Gcov and Optimization::       Using gcov with GCC optimization.
   45081 * Gcov Data Files::             The files used by gcov.
   45082 * Cross-profiling::             Data file relocation.
   45083 
   45084 
   45085 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
   45086 
   45087 10.1 Introduction to `gcov'
   45088 ===========================
   45089 
   45090 `gcov' is a test coverage program.  Use it in concert with GCC to
   45091 analyze your programs to help create more efficient, faster running
   45092 code and to discover untested parts of your program.  You can use
   45093 `gcov' as a profiling tool to help discover where your optimization
   45094 efforts will best affect your code.  You can also use `gcov' along with
   45095 the other profiling tool, `gprof', to assess which parts of your code
   45096 use the greatest amount of computing time.
   45097 
   45098  Profiling tools help you analyze your code's performance.  Using a
   45099 profiler such as `gcov' or `gprof', you can find out some basic
   45100 performance statistics, such as:
   45101 
   45102    * how often each line of code executes
   45103 
   45104    * what lines of code are actually executed
   45105 
   45106    * how much computing time each section of code uses
   45107 
   45108  Once you know these things about how your code works when compiled, you
   45109 can look at each module to see which modules should be optimized.
   45110 `gcov' helps you determine where to work on optimization.
   45111 
   45112  Software developers also use coverage testing in concert with
   45113 testsuites, to make sure software is actually good enough for a release.
   45114 Testsuites can verify that a program works as expected; a coverage
   45115 program tests to see how much of the program is exercised by the
   45116 testsuite.  Developers can then determine what kinds of test cases need
   45117 to be added to the testsuites to create both better testing and a better
   45118 final product.
   45119 
   45120  You should compile your code without optimization if you plan to use
   45121 `gcov' because the optimization, by combining some lines of code into
   45122 one function, may not give you as much information as you need to look
   45123 for `hot spots' where the code is using a great deal of computer time.
   45124 Likewise, because `gcov' accumulates statistics by line (at the lowest
   45125 resolution), it works best with a programming style that places only
   45126 one statement on each line.  If you use complicated macros that expand
   45127 to loops or to other control structures, the statistics are less
   45128 helpful--they only report on the line where the macro call appears.  If
   45129 your complex macros behave like functions, you can replace them with
   45130 inline functions to solve this problem.
   45131 
   45132  `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
   45133 many times each line of a source file `SOURCEFILE.c' has executed.  You
   45134 can use these logfiles along with `gprof' to aid in fine-tuning the
   45135 performance of your programs.  `gprof' gives timing information you can
   45136 use along with the information you get from `gcov'.
   45137 
   45138  `gcov' works only on code compiled with GCC.  It is not compatible
   45139 with any other profiling or test coverage mechanism.
   45140 
   45141 
   45142 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
   45143 
   45144 10.2 Invoking `gcov'
   45145 ====================
   45146 
   45147      gcov [OPTIONS] FILES
   45148 
   45149  `gcov' accepts the following options:
   45150 
   45151 `-h'
   45152 `--help'
   45153      Display help about using `gcov' (on the standard output), and exit
   45154      without doing any further processing.
   45155 
   45156 `-v'
   45157 `--version'
   45158      Display the `gcov' version number (on the standard output), and
   45159      exit without doing any further processing.
   45160 
   45161 `-a'
   45162 `--all-blocks'
   45163      Write individual execution counts for every basic block.  Normally
   45164      gcov outputs execution counts only for the main blocks of a line.
   45165      With this option you can determine if blocks within a single line
   45166      are not being executed.
   45167 
   45168 `-b'
   45169 `--branch-probabilities'
   45170      Write branch frequencies to the output file, and write branch
   45171      summary info to the standard output.  This option allows you to
   45172      see how often each branch in your program was taken.
   45173      Unconditional branches will not be shown, unless the `-u' option
   45174      is given.
   45175 
   45176 `-c'
   45177 `--branch-counts'
   45178      Write branch frequencies as the number of branches taken, rather
   45179      than the percentage of branches taken.
   45180 
   45181 `-n'
   45182 `--no-output'
   45183      Do not create the `gcov' output file.
   45184 
   45185 `-l'
   45186 `--long-file-names'
   45187      Create long file names for included source files.  For example, if
   45188      the header file `x.h' contains code, and was included in the file
   45189      `a.c', then running `gcov' on the file `a.c' will produce an
   45190      output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
   45191      can be useful if `x.h' is included in multiple source files and
   45192      you want to see the individual contributions.  If you use the `-p'
   45193      option, both the including and included file names will be
   45194      complete path names.
   45195 
   45196 `-p'
   45197 `--preserve-paths'
   45198      Preserve complete path information in the names of generated
   45199      `.gcov' files.  Without this option, just the filename component is
   45200      used.  With this option, all directories are used, with `/'
   45201      characters translated to `#' characters, `.' directory components
   45202      removed and unremoveable `..' components renamed to `^'.  This is
   45203      useful if sourcefiles are in several different directories.
   45204 
   45205 `-r'
   45206 `--relative-only'
   45207      Only output information about source files with a relative pathname
   45208      (after source prefix elision).  Absolute paths are usually system
   45209      header files and coverage of any inline functions therein is
   45210      normally uninteresting.
   45211 
   45212 `-f'
   45213 `--function-summaries'
   45214      Output summaries for each function in addition to the file level
   45215      summary.
   45216 
   45217 `-o DIRECTORY|FILE'
   45218 `--object-directory DIRECTORY'
   45219 `--object-file FILE'
   45220      Specify either the directory containing the gcov data files, or the
   45221      object path name.  The `.gcno', and `.gcda' data files are
   45222      searched for using this option.  If a directory is specified, the
   45223      data files are in that directory and named after the input file
   45224      name, without its extension.  If a file is specified here, the
   45225      data files are named after that file, without its extension.
   45226 
   45227 `-s DIRECTORY'
   45228 `--source-prefix DIRECTORY'
   45229      A prefix for source file names to remove when generating the output
   45230      coverage files.  This option is useful when building in a separate
   45231      directory, and the pathname to the source directory is not wanted
   45232      when determining the output file names.  Note that this prefix
   45233      detection is applied before determining whether the source file is
   45234      absolute.
   45235 
   45236 `-u'
   45237 `--unconditional-branches'
   45238      When branch probabilities are given, include those of
   45239      unconditional branches.  Unconditional branches are normally not
   45240      interesting.
   45241 
   45242 `-d'
   45243 `--display-progress'
   45244      Display the progress on the standard output.
   45245 
   45246 
   45247  `gcov' should be run with the current directory the same as that when
   45248 you invoked the compiler.  Otherwise it will not be able to locate the
   45249 source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
   45250 current directory.  These contain the coverage information of the
   45251 source file they correspond to.  One `.gcov' file is produced for each
   45252 source (or header) file containing code, which was compiled to produce
   45253 the data files.  The MANGLEDNAME part of the output file name is
   45254 usually simply the source file name, but can be something more
   45255 complicated if the `-l' or `-p' options are given.  Refer to those
   45256 options for details.
   45257 
   45258  If you invoke `gcov' with multiple input files, the contributions from
   45259 each input file are summed.  Typically you would invoke it with the
   45260 same list of files as the final link of your executable.
   45261 
   45262  The `.gcov' files contain the `:' separated fields along with program
   45263 source code.  The format is
   45264 
   45265      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
   45266 
   45267  Additional block information may succeed each line, when requested by
   45268 command line option.  The EXECUTION_COUNT is `-' for lines containing
   45269 no code.  Unexecuted lines are marked `#####' or `====', depending on
   45270 whether they are reachable by non-exceptional paths or only exceptional
   45271 paths such as C++ exception handlers, respectively.
   45272 
   45273  Some lines of information at the start have LINE_NUMBER of zero.
   45274 These preamble lines are of the form
   45275 
   45276      -:0:TAG:VALUE
   45277 
   45278  The ordering and number of these preamble lines will be augmented as
   45279 `gcov' development progresses -- do not rely on them remaining
   45280 unchanged.  Use TAG to locate a particular preamble line.
   45281 
   45282  The additional block information is of the form
   45283 
   45284      TAG INFORMATION
   45285 
   45286  The INFORMATION is human readable, but designed to be simple enough
   45287 for machine parsing too.
   45288 
   45289  When printing percentages, 0% and 100% are only printed when the values
   45290 are _exactly_ 0% and 100% respectively.  Other values which would
   45291 conventionally be rounded to 0% or 100% are instead printed as the
   45292 nearest non-boundary value.
   45293 
   45294  When using `gcov', you must first compile your program with two
   45295 special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
   45296 compiler to generate additional information needed by gcov (basically a
   45297 flow graph of the program) and also includes additional code in the
   45298 object files for generating the extra profiling information needed by
   45299 gcov.  These additional files are placed in the directory where the
   45300 object file is located.
   45301 
   45302  Running the program will cause profile output to be generated.  For
   45303 each source file compiled with `-fprofile-arcs', an accompanying
   45304 `.gcda' file will be placed in the object file directory.
   45305 
   45306  Running `gcov' with your program's source file names as arguments will
   45307 now produce a listing of the code along with frequency of execution for
   45308 each line.  For example, if your program is called `tmp.c', this is
   45309 what you see when you use the basic `gcov' facility:
   45310 
   45311      $ gcc -fprofile-arcs -ftest-coverage tmp.c
   45312      $ a.out
   45313      $ gcov tmp.c
   45314      90.00% of 10 source lines executed in file tmp.c
   45315      Creating tmp.c.gcov.
   45316 
   45317  The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
   45318 
   45319              -:    0:Source:tmp.c
   45320              -:    0:Graph:tmp.gcno
   45321              -:    0:Data:tmp.gcda
   45322              -:    0:Runs:1
   45323              -:    0:Programs:1
   45324              -:    1:#include <stdio.h>
   45325              -:    2:
   45326              -:    3:int main (void)
   45327              1:    4:{
   45328              1:    5:  int i, total;
   45329              -:    6:
   45330              1:    7:  total = 0;
   45331              -:    8:
   45332             11:    9:  for (i = 0; i < 10; i++)
   45333             10:   10:    total += i;
   45334              -:   11:
   45335              1:   12:  if (total != 45)
   45336          #####:   13:    printf ("Failure\n");
   45337              -:   14:  else
   45338              1:   15:    printf ("Success\n");
   45339              1:   16:  return 0;
   45340              -:   17:}
   45341 
   45342  When you use the `-a' option, you will get individual block counts,
   45343 and the output looks like this:
   45344 
   45345              -:    0:Source:tmp.c
   45346              -:    0:Graph:tmp.gcno
   45347              -:    0:Data:tmp.gcda
   45348              -:    0:Runs:1
   45349              -:    0:Programs:1
   45350              -:    1:#include <stdio.h>
   45351              -:    2:
   45352              -:    3:int main (void)
   45353              1:    4:{
   45354              1:    4-block  0
   45355              1:    5:  int i, total;
   45356              -:    6:
   45357              1:    7:  total = 0;
   45358              -:    8:
   45359             11:    9:  for (i = 0; i < 10; i++)
   45360             11:    9-block  0
   45361             10:   10:    total += i;
   45362             10:   10-block  0
   45363              -:   11:
   45364              1:   12:  if (total != 45)
   45365              1:   12-block  0
   45366          #####:   13:    printf ("Failure\n");
   45367          $$$$$:   13-block  0
   45368              -:   14:  else
   45369              1:   15:    printf ("Success\n");
   45370              1:   15-block  0
   45371              1:   16:  return 0;
   45372              1:   16-block  0
   45373              -:   17:}
   45374 
   45375  In this mode, each basic block is only shown on one line - the last
   45376 line of the block.  A multi-line block will only contribute to the
   45377 execution count of that last line, and other lines will not be shown to
   45378 contain code, unless previous blocks end on those lines.  The total
   45379 execution count of a line is shown and subsequent lines show the
   45380 execution counts for individual blocks that end on that line.  After
   45381 each block, the branch and call counts of the block will be shown, if
   45382 the `-b' option is given.
   45383 
   45384  Because of the way GCC instruments calls, a call count can be shown
   45385 after a line with no individual blocks.  As you can see, line 13
   45386 contains a basic block that was not executed.
   45387 
   45388  When you use the `-b' option, your output looks like this:
   45389 
   45390      $ gcov -b tmp.c
   45391      90.00% of 10 source lines executed in file tmp.c
   45392      80.00% of 5 branches executed in file tmp.c
   45393      80.00% of 5 branches taken at least once in file tmp.c
   45394      50.00% of 2 calls executed in file tmp.c
   45395      Creating tmp.c.gcov.
   45396 
   45397  Here is a sample of a resulting `tmp.c.gcov' file:
   45398 
   45399              -:    0:Source:tmp.c
   45400              -:    0:Graph:tmp.gcno
   45401              -:    0:Data:tmp.gcda
   45402              -:    0:Runs:1
   45403              -:    0:Programs:1
   45404              -:    1:#include <stdio.h>
   45405              -:    2:
   45406              -:    3:int main (void)
   45407      function main called 1 returned 1 blocks executed 75%
   45408              1:    4:{
   45409              1:    5:  int i, total;
   45410              -:    6:
   45411              1:    7:  total = 0;
   45412              -:    8:
   45413             11:    9:  for (i = 0; i < 10; i++)
   45414      branch  0 taken 91% (fallthrough)
   45415      branch  1 taken 9%
   45416             10:   10:    total += i;
   45417              -:   11:
   45418              1:   12:  if (total != 45)
   45419      branch  0 taken 0% (fallthrough)
   45420      branch  1 taken 100%
   45421          #####:   13:    printf ("Failure\n");
   45422      call    0 never executed
   45423              -:   14:  else
   45424              1:   15:    printf ("Success\n");
   45425      call    0 called 1 returned 100%
   45426              1:   16:  return 0;
   45427              -:   17:}
   45428 
   45429  For each function, a line is printed showing how many times the
   45430 function is called, how many times it returns and what percentage of the
   45431 function's blocks were executed.
   45432 
   45433  For each basic block, a line is printed after the last line of the
   45434 basic block describing the branch or call that ends the basic block.
   45435 There can be multiple branches and calls listed for a single source
   45436 line if there are multiple basic blocks that end on that line.  In this
   45437 case, the branches and calls are each given a number.  There is no
   45438 simple way to map these branches and calls back to source constructs.
   45439 In general, though, the lowest numbered branch or call will correspond
   45440 to the leftmost construct on the source line.
   45441 
   45442  For a branch, if it was executed at least once, then a percentage
   45443 indicating the number of times the branch was taken divided by the
   45444 number of times the branch was executed will be printed.  Otherwise, the
   45445 message "never executed" is printed.
   45446 
   45447  For a call, if it was executed at least once, then a percentage
   45448 indicating the number of times the call returned divided by the number
   45449 of times the call was executed will be printed.  This will usually be
   45450 100%, but may be less for functions that call `exit' or `longjmp', and
   45451 thus may not return every time they are called.
   45452 
   45453  The execution counts are cumulative.  If the example program were
   45454 executed again without removing the `.gcda' file, the count for the
   45455 number of times each line in the source was executed would be added to
   45456 the results of the previous run(s).  This is potentially useful in
   45457 several ways.  For example, it could be used to accumulate data over a
   45458 number of program runs as part of a test verification suite, or to
   45459 provide more accurate long-term information over a large number of
   45460 program runs.
   45461 
   45462  The data in the `.gcda' files is saved immediately before the program
   45463 exits.  For each source file compiled with `-fprofile-arcs', the
   45464 profiling code first attempts to read in an existing `.gcda' file; if
   45465 the file doesn't match the executable (differing number of basic block
   45466 counts) it will ignore the contents of the file.  It then adds in the
   45467 new execution counts and finally writes the data to the file.
   45468 
   45469 
   45470 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
   45471 
   45472 10.3 Using `gcov' with GCC Optimization
   45473 =======================================
   45474 
   45475 If you plan to use `gcov' to help optimize your code, you must first
   45476 compile your program with two special GCC options: `-fprofile-arcs
   45477 -ftest-coverage'.  Aside from that, you can use any other GCC options;
   45478 but if you want to prove that every single line in your program was
   45479 executed, you should not compile with optimization at the same time.
   45480 On some machines the optimizer can eliminate some simple code lines by
   45481 combining them with other lines.  For example, code like this:
   45482 
   45483      if (a != b)
   45484        c = 1;
   45485      else
   45486        c = 0;
   45487 
   45488 can be compiled into one instruction on some machines.  In this case,
   45489 there is no way for `gcov' to calculate separate execution counts for
   45490 each line because there isn't separate code for each line.  Hence the
   45491 `gcov' output looks like this if you compiled the program with
   45492 optimization:
   45493 
   45494            100:   12:if (a != b)
   45495            100:   13:  c = 1;
   45496            100:   14:else
   45497            100:   15:  c = 0;
   45498 
   45499  The output shows that this block of code, combined by optimization,
   45500 executed 100 times.  In one sense this result is correct, because there
   45501 was only one instruction representing all four of these lines.  However,
   45502 the output does not indicate how many times the result was 0 and how
   45503 many times the result was 1.
   45504 
   45505  Inlineable functions can create unexpected line counts.  Line counts
   45506 are shown for the source code of the inlineable function, but what is
   45507 shown depends on where the function is inlined, or if it is not inlined
   45508 at all.
   45509 
   45510  If the function is not inlined, the compiler must emit an out of line
   45511 copy of the function, in any object file that needs it.  If `fileA.o'
   45512 and `fileB.o' both contain out of line bodies of a particular
   45513 inlineable function, they will also both contain coverage counts for
   45514 that function.  When `fileA.o' and `fileB.o' are linked together, the
   45515 linker will, on many systems, select one of those out of line bodies
   45516 for all calls to that function, and remove or ignore the other.
   45517 Unfortunately, it will not remove the coverage counters for the unused
   45518 function body.  Hence when instrumented, all but one use of that
   45519 function will show zero counts.
   45520 
   45521  If the function is inlined in several places, the block structure in
   45522 each location might not be the same.  For instance, a condition might
   45523 now be calculable at compile time in some instances.  Because the
   45524 coverage of all the uses of the inline function will be shown for the
   45525 same source lines, the line counts themselves might seem inconsistent.
   45526 
   45527  Long-running applications can use the `_gcov_reset' and `_gcov_dump'
   45528 facilities to restrict profile collection to the program region of
   45529 interest. Calling `_gcov_reset(void)' will clear all profile counters
   45530 to zero, and calling `_gcov_dump(void)' will cause the profile
   45531 information collected at that point to be dumped to `.gcda' output
   45532 files.
   45533 
   45534 
   45535 File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
   45536 
   45537 10.4 Brief description of `gcov' data files
   45538 ===========================================
   45539 
   45540 `gcov' uses two files for profiling.  The names of these files are
   45541 derived from the original _object_ file by substituting the file suffix
   45542 with either `.gcno', or `.gcda'.  The files contain coverage and
   45543 profile data stored in a platform-independent format.  The `.gcno'
   45544 files are placed in the same directory as the object file.  By default,
   45545 the `.gcda' files are also stored in the same directory as the object
   45546 file, but the GCC `-fprofile-dir' option may be used to store the
   45547 `.gcda' files in a separate directory.
   45548 
   45549  The `.gcno' notes file is generated when the source file is compiled
   45550 with the GCC `-ftest-coverage' option.  It contains information to
   45551 reconstruct the basic block graphs and assign source line numbers to
   45552 blocks.
   45553 
   45554  The `.gcda' count data file is generated when a program containing
   45555 object files built with the GCC `-fprofile-arcs' option is executed.  A
   45556 separate `.gcda' file is created for each object file compiled with
   45557 this option.  It contains arc transition counts, value profile counts,
   45558 and some summary information.
   45559 
   45560  The full details of the file format is specified in `gcov-io.h', and
   45561 functions provided in that header file should be used to access the
   45562 coverage files.
   45563 
   45564 
   45565 File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
   45566 
   45567 10.5 Data file relocation to support cross-profiling
   45568 ====================================================
   45569 
   45570 Running the program will cause profile output to be generated.  For each
   45571 source file compiled with `-fprofile-arcs', an accompanying `.gcda'
   45572 file will be placed in the object file directory. That implicitly
   45573 requires running the program on the same system as it was built or
   45574 having the same absolute directory structure on the target system. The
   45575 program will try to create the needed directory structure, if it is not
   45576 already present.
   45577 
   45578  To support cross-profiling, a program compiled with `-fprofile-arcs'
   45579 can relocate the data files based on two environment variables:
   45580 
   45581    * GCOV_PREFIX contains the prefix to add to the absolute paths in
   45582      the object file. Prefix can be absolute, or relative.  The default
   45583      is no prefix.
   45584 
   45585    * GCOV_PREFIX_STRIP indicates the how many initial directory names
   45586      to strip off the hardwired absolute paths. Default value is 0.
   45587 
   45588      _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
   45589      undefined,  then a relative path is made out of the hardwired
   45590      absolute paths.
   45591 
   45592  For example, if the object file `/user/build/foo.o' was built with
   45593 `-fprofile-arcs', the final executable will try to create the data file
   45594 `/user/build/foo.gcda' when running on the target system.  This will
   45595 fail if the corresponding directory does not exist and it is unable to
   45596 create it.  This can be overcome by, for example, setting the
   45597 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
   45598 Such a setting will name the data file `/target/run/build/foo.gcda'.
   45599 
   45600  You must move the data files to the expected directory tree in order to
   45601 use them for profile directed optimizations (`--use-profile'), or to
   45602 use the `gcov' tool.
   45603 
   45604 
   45605 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
   45606 
   45607 11 Known Causes of Trouble with GCC
   45608 ***********************************
   45609 
   45610 This section describes known problems that affect users of GCC.  Most
   45611 of these are not GCC bugs per se--if they were, we would fix them.  But
   45612 the result for a user may be like the result of a bug.
   45613 
   45614  Some of these problems are due to bugs in other software, some are
   45615 missing features that are too much work to add, and some are places
   45616 where people's opinions differ as to what is best.
   45617 
   45618 * Menu:
   45619 
   45620 * Actual Bugs::         Bugs we will fix later.
   45621 * Interoperation::      Problems using GCC with other compilers,
   45622                         and with certain linkers, assemblers and debuggers.
   45623 * Incompatibilities::   GCC is incompatible with traditional C.
   45624 * Fixed Headers::       GCC uses corrected versions of system header files.
   45625                         This is necessary, but doesn't always work smoothly.
   45626 * Standard Libraries::  GCC uses the system C library, which might not be
   45627                         compliant with the ISO C standard.
   45628 * Disappointments::     Regrettable things we can't change, but not quite bugs.
   45629 * C++ Misunderstandings:: Common misunderstandings with GNU C++.
   45630 * Non-bugs::            Things we think are right, but some others disagree.
   45631 * Warnings and Errors:: Which problems in your code get warnings,
   45632                         and which get errors.
   45633 
   45634 
   45635 File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
   45636 
   45637 11.1 Actual Bugs We Haven't Fixed Yet
   45638 =====================================
   45639 
   45640    * The `fixincludes' script interacts badly with automounters; if the
   45641      directory of system header files is automounted, it tends to be
   45642      unmounted while `fixincludes' is running.  This would seem to be a
   45643      bug in the automounter.  We don't know any good way to work around
   45644      it.
   45645 
   45646 
   45647 File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
   45648 
   45649 11.2 Interoperation
   45650 ===================
   45651 
   45652 This section lists various difficulties encountered in using GCC
   45653 together with other compilers or with the assemblers, linkers,
   45654 libraries and debuggers on certain systems.
   45655 
   45656    * On many platforms, GCC supports a different ABI for C++ than do
   45657      other compilers, so the object files compiled by GCC cannot be
   45658      used with object files generated by another C++ compiler.
   45659 
   45660      An area where the difference is most apparent is name mangling.
   45661      The use of different name mangling is intentional, to protect you
   45662      from more subtle problems.  Compilers differ as to many internal
   45663      details of C++ implementation, including: how class instances are
   45664      laid out, how multiple inheritance is implemented, and how virtual
   45665      function calls are handled.  If the name encoding were made the
   45666      same, your programs would link against libraries provided from
   45667      other compilers--but the programs would then crash when run.
   45668      Incompatible libraries are then detected at link time, rather than
   45669      at run time.
   45670 
   45671    * On some BSD systems, including some versions of Ultrix, use of
   45672      profiling causes static variable destructors (currently used only
   45673      in C++) not to be run.
   45674 
   45675    * On a SPARC, GCC aligns all values of type `double' on an 8-byte
   45676      boundary, and it expects every `double' to be so aligned.  The Sun
   45677      compiler usually gives `double' values 8-byte alignment, with one
   45678      exception: function arguments of type `double' may not be aligned.
   45679 
   45680      As a result, if a function compiled with Sun CC takes the address
   45681      of an argument of type `double' and passes this pointer of type
   45682      `double *' to a function compiled with GCC, dereferencing the
   45683      pointer may cause a fatal signal.
   45684 
   45685      One way to solve this problem is to compile your entire program
   45686      with GCC.  Another solution is to modify the function that is
   45687      compiled with Sun CC to copy the argument into a local variable;
   45688      local variables are always properly aligned.  A third solution is
   45689      to modify the function that uses the pointer to dereference it via
   45690      the following function `access_double' instead of directly with
   45691      `*':
   45692 
   45693           inline double
   45694           access_double (double *unaligned_ptr)
   45695           {
   45696             union d2i { double d; int i[2]; };
   45697 
   45698             union d2i *p = (union d2i *) unaligned_ptr;
   45699             union d2i u;
   45700 
   45701             u.i[0] = p->i[0];
   45702             u.i[1] = p->i[1];
   45703 
   45704             return u.d;
   45705           }
   45706 
   45707      Storing into the pointer can be done likewise with the same union.
   45708 
   45709    * On Solaris, the `malloc' function in the `libmalloc.a' library may
   45710      allocate memory that is only 4 byte aligned.  Since GCC on the
   45711      SPARC assumes that doubles are 8 byte aligned, this may result in a
   45712      fatal signal if doubles are stored in memory allocated by the
   45713      `libmalloc.a' library.
   45714 
   45715      The solution is to not use the `libmalloc.a' library.  Use instead
   45716      `malloc' and related functions from `libc.a'; they do not have
   45717      this problem.
   45718 
   45719    * On the HP PA machine, ADB sometimes fails to work on functions
   45720      compiled with GCC.  Specifically, it fails to work on functions
   45721      that use `alloca' or variable-size arrays.  This is because GCC
   45722      doesn't generate HP-UX unwind descriptors for such functions.  It
   45723      may even be impossible to generate them.
   45724 
   45725    * Debugging (`-g') is not supported on the HP PA machine, unless you
   45726      use the preliminary GNU tools.
   45727 
   45728    * Taking the address of a label may generate errors from the HP-UX
   45729      PA assembler.  GAS for the PA does not have this problem.
   45730 
   45731    * Using floating point parameters for indirect calls to static
   45732      functions will not work when using the HP assembler.  There simply
   45733      is no way for GCC to specify what registers hold arguments for
   45734      static functions when using the HP assembler.  GAS for the PA does
   45735      not have this problem.
   45736 
   45737    * In extremely rare cases involving some very large functions you may
   45738      receive errors from the HP linker complaining about an out of
   45739      bounds unconditional branch offset.  This used to occur more often
   45740      in previous versions of GCC, but is now exceptionally rare.  If
   45741      you should run into it, you can work around by making your
   45742      function smaller.
   45743 
   45744    * GCC compiled code sometimes emits warnings from the HP-UX
   45745      assembler of the form:
   45746 
   45747           (warning) Use of GR3 when
   45748             frame >= 8192 may cause conflict.
   45749 
   45750      These warnings are harmless and can be safely ignored.
   45751 
   45752    * In extremely rare cases involving some very large functions you may
   45753      receive errors from the AIX Assembler complaining about a
   45754      displacement that is too large.  If you should run into it, you
   45755      can work around by making your function smaller.
   45756 
   45757    * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
   45758      semantics which merges global symbols between libraries and
   45759      applications, especially necessary for C++ streams functionality.
   45760      This is not the default behavior of AIX shared libraries and
   45761      dynamic linking.  `libstdc++.a' is built on AIX with
   45762      "runtime-linking" enabled so that symbol merging can occur.  To
   45763      utilize this feature, the application linked with `libstdc++.a'
   45764      must include the `-Wl,-brtl' flag on the link line.  G++ cannot
   45765      impose this because this option may interfere with the semantics
   45766      of the user program and users may not always use `g++' to link his
   45767      or her application.  Applications are not required to use the
   45768      `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
   45769      library which is not dependent on the symbol merging semantics
   45770      will continue to function correctly.
   45771 
   45772    * An application can interpose its own definition of functions for
   45773      functions invoked by `libstdc++.a' with "runtime-linking" enabled
   45774      on AIX.  To accomplish this the application must be linked with
   45775      "runtime-linking" option and the functions explicitly must be
   45776      exported by the application (`-Wl,-brtl,-bE:exportfile').
   45777 
   45778    * AIX on the RS/6000 provides support (NLS) for environments outside
   45779      of the United States.  Compilers and assemblers use NLS to support
   45780      locale-specific representations of various objects including
   45781      floating-point numbers (`.' vs `,' for separating decimal
   45782      fractions).  There have been problems reported where the library
   45783      linked with GCC does not produce the same floating-point formats
   45784      that the assembler accepts.  If you have this problem, set the
   45785      `LANG' environment variable to `C' or `En_US'.
   45786 
   45787    * Even if you specify `-fdollars-in-identifiers', you cannot
   45788      successfully use `$' in identifiers on the RS/6000 due to a
   45789      restriction in the IBM assembler.  GAS supports these identifiers.
   45790 
   45791 
   45792 
   45793 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
   45794 
   45795 11.3 Incompatibilities of GCC
   45796 =============================
   45797 
   45798 There are several noteworthy incompatibilities between GNU C and K&R
   45799 (non-ISO) versions of C.
   45800 
   45801    * GCC normally makes string constants read-only.  If several
   45802      identical-looking string constants are used, GCC stores only one
   45803      copy of the string.
   45804 
   45805      One consequence is that you cannot call `mktemp' with a string
   45806      constant argument.  The function `mktemp' always alters the string
   45807      its argument points to.
   45808 
   45809      Another consequence is that `sscanf' does not work on some very
   45810      old systems when passed a string constant as its format control
   45811      string or input.  This is because `sscanf' incorrectly tries to
   45812      write into the string constant.  Likewise `fscanf' and `scanf'.
   45813 
   45814      The solution to these problems is to change the program to use
   45815      `char'-array variables with initialization strings for these
   45816      purposes instead of string constants.
   45817 
   45818    * `-2147483648' is positive.
   45819 
   45820      This is because 2147483648 cannot fit in the type `int', so
   45821      (following the ISO C rules) its data type is `unsigned long int'.
   45822      Negating this value yields 2147483648 again.
   45823 
   45824    * GCC does not substitute macro arguments when they appear inside of
   45825      string constants.  For example, the following macro in GCC
   45826 
   45827           #define foo(a) "a"
   45828 
   45829      will produce output `"a"' regardless of what the argument A is.
   45830 
   45831    * When you use `setjmp' and `longjmp', the only automatic variables
   45832      guaranteed to remain valid are those declared `volatile'.  This is
   45833      a consequence of automatic register allocation.  Consider this
   45834      function:
   45835 
   45836           jmp_buf j;
   45837 
   45838           foo ()
   45839           {
   45840             int a, b;
   45841 
   45842             a = fun1 ();
   45843             if (setjmp (j))
   45844               return a;
   45845 
   45846             a = fun2 ();
   45847             /* `longjmp (j)' may occur in `fun3'. */
   45848             return a + fun3 ();
   45849           }
   45850 
   45851      Here `a' may or may not be restored to its first value when the
   45852      `longjmp' occurs.  If `a' is allocated in a register, then its
   45853      first value is restored; otherwise, it keeps the last value stored
   45854      in it.
   45855 
   45856      If you use the `-W' option with the `-O' option, you will get a
   45857      warning when GCC thinks such a problem might be possible.
   45858 
   45859    * Programs that use preprocessing directives in the middle of macro
   45860      arguments do not work with GCC.  For example, a program like this
   45861      will not work:
   45862 
   45863           foobar (
   45864           #define luser
   45865                   hack)
   45866 
   45867      ISO C does not permit such a construct.
   45868 
   45869    * K&R compilers allow comments to cross over an inclusion boundary
   45870      (i.e. started in an include file and ended in the including file).
   45871 
   45872    * Declarations of external variables and functions within a block
   45873      apply only to the block containing the declaration.  In other
   45874      words, they have the same scope as any other declaration in the
   45875      same place.
   45876 
   45877      In some other C compilers, an `extern' declaration affects all the
   45878      rest of the file even if it happens within a block.
   45879 
   45880    * In traditional C, you can combine `long', etc., with a typedef
   45881      name, as shown here:
   45882 
   45883           typedef int foo;
   45884           typedef long foo bar;
   45885 
   45886      In ISO C, this is not allowed: `long' and other type modifiers
   45887      require an explicit `int'.
   45888 
   45889    * PCC allows typedef names to be used as function parameters.
   45890 
   45891    * Traditional C allows the following erroneous pair of declarations
   45892      to appear together in a given scope:
   45893 
   45894           typedef int foo;
   45895           typedef foo foo;
   45896 
   45897    * GCC treats all characters of identifiers as significant.
   45898      According to K&R-1 (2.2), "No more than the first eight characters
   45899      are significant, although more may be used.".  Also according to
   45900      K&R-1 (2.2), "An identifier is a sequence of letters and digits;
   45901      the first character must be a letter.  The underscore _ counts as
   45902      a letter.", but GCC also allows dollar signs in identifiers.
   45903 
   45904    * PCC allows whitespace in the middle of compound assignment
   45905      operators such as `+='.  GCC, following the ISO standard, does not
   45906      allow this.
   45907 
   45908    * GCC complains about unterminated character constants inside of
   45909      preprocessing conditionals that fail.  Some programs have English
   45910      comments enclosed in conditionals that are guaranteed to fail; if
   45911      these comments contain apostrophes, GCC will probably report an
   45912      error.  For example, this code would produce an error:
   45913 
   45914           #if 0
   45915           You can't expect this to work.
   45916           #endif
   45917 
   45918      The best solution to such a problem is to put the text into an
   45919      actual C comment delimited by `/*...*/'.
   45920 
   45921    * Many user programs contain the declaration `long time ();'.  In the
   45922      past, the system header files on many systems did not actually
   45923      declare `time', so it did not matter what type your program
   45924      declared it to return.  But in systems with ISO C headers, `time'
   45925      is declared to return `time_t', and if that is not the same as
   45926      `long', then `long time ();' is erroneous.
   45927 
   45928      The solution is to change your program to use appropriate system
   45929      headers (`<time.h>' on systems with ISO C headers) and not to
   45930      declare `time' if the system header files declare it, or failing
   45931      that to use `time_t' as the return type of `time'.
   45932 
   45933    * When compiling functions that return `float', PCC converts it to a
   45934      double.  GCC actually returns a `float'.  If you are concerned
   45935      with PCC compatibility, you should declare your functions to return
   45936      `double'; you might as well say what you mean.
   45937 
   45938    * When compiling functions that return structures or unions, GCC
   45939      output code normally uses a method different from that used on most
   45940      versions of Unix.  As a result, code compiled with GCC cannot call
   45941      a structure-returning function compiled with PCC, and vice versa.
   45942 
   45943      The method used by GCC is as follows: a structure or union which is
   45944      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
   45945      union with any other size is stored into an address supplied by
   45946      the caller (usually in a special, fixed register, but on some
   45947      machines it is passed on the stack).  The target hook
   45948      `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
   45949 
   45950      By contrast, PCC on most target machines returns structures and
   45951      unions of any size by copying the data into an area of static
   45952      storage, and then returning the address of that storage as if it
   45953      were a pointer value.  The caller must copy the data from that
   45954      memory area to the place where the value is wanted.  GCC does not
   45955      use this method because it is slower and nonreentrant.
   45956 
   45957      On some newer machines, PCC uses a reentrant convention for all
   45958      structure and union returning.  GCC on most of these machines uses
   45959      a compatible convention when returning structures and unions in
   45960      memory, but still returns small structures and unions in registers.
   45961 
   45962      You can tell GCC to use a compatible convention for all structure
   45963      and union returning with the option `-fpcc-struct-return'.
   45964 
   45965    * GCC complains about program fragments such as `0x74ae-0x4000'
   45966      which appear to be two hexadecimal constants separated by the minus
   45967      operator.  Actually, this string is a single "preprocessing token".
   45968      Each such token must correspond to one token in C.  Since this
   45969      does not, GCC prints an error message.  Although it may appear
   45970      obvious that what is meant is an operator and two values, the ISO
   45971      C standard specifically requires that this be treated as erroneous.
   45972 
   45973      A "preprocessing token" is a "preprocessing number" if it begins
   45974      with a digit and is followed by letters, underscores, digits,
   45975      periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
   45976      character sequences.  (In strict C90 mode, the sequences `p+',
   45977      `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
   45978 
   45979      To make the above program fragment valid, place whitespace in
   45980      front of the minus sign.  This whitespace will end the
   45981      preprocessing number.
   45982 
   45983 
   45984 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
   45985 
   45986 11.4 Fixed Header Files
   45987 =======================
   45988 
   45989 GCC needs to install corrected versions of some system header files.
   45990 This is because most target systems have some header files that won't
   45991 work with GCC unless they are changed.  Some have bugs, some are
   45992 incompatible with ISO C, and some depend on special features of other
   45993 compilers.
   45994 
   45995  Installing GCC automatically creates and installs the fixed header
   45996 files, by running a program called `fixincludes'.  Normally, you don't
   45997 need to pay attention to this.  But there are cases where it doesn't do
   45998 the right thing automatically.
   45999 
   46000    * If you update the system's header files, such as by installing a
   46001      new system version, the fixed header files of GCC are not
   46002      automatically updated.  They can be updated using the `mkheaders'
   46003      script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   46004 
   46005    * On some systems, header file directories contain machine-specific
   46006      symbolic links in certain places.  This makes it possible to share
   46007      most of the header files among hosts running the same version of
   46008      the system on different machine models.
   46009 
   46010      The programs that fix the header files do not understand this
   46011      special way of using symbolic links; therefore, the directory of
   46012      fixed header files is good only for the machine model used to
   46013      build it.
   46014 
   46015      It is possible to make separate sets of fixed header files for the
   46016      different machine models, and arrange a structure of symbolic
   46017      links so as to use the proper set, but you'll have to do this by
   46018      hand.
   46019 
   46020 
   46021 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
   46022 
   46023 11.5 Standard Libraries
   46024 =======================
   46025 
   46026 GCC by itself attempts to be a conforming freestanding implementation.
   46027 *Note Language Standards Supported by GCC: Standards, for details of
   46028 what this means.  Beyond the library facilities required of such an
   46029 implementation, the rest of the C library is supplied by the vendor of
   46030 the operating system.  If that C library doesn't conform to the C
   46031 standards, then your programs might get warnings (especially when using
   46032 `-Wall') that you don't expect.
   46033 
   46034  For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
   46035 while the C standard says that `sprintf' returns an `int'.  The
   46036 `fixincludes' program could make the prototype for this function match
   46037 the Standard, but that would be wrong, since the function will still
   46038 return `char *'.
   46039 
   46040  If you need a Standard compliant library, then you need to find one, as
   46041 GCC does not provide one.  The GNU C library (called `glibc') provides
   46042 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
   46043 HURD-based GNU systems; no recent version of it supports other systems,
   46044 though some very old versions did.  Version 2.2 of the GNU C library
   46045 includes nearly complete C99 support.  You could also ask your
   46046 operating system vendor if newer libraries are available.
   46047 
   46048 
   46049 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
   46050 
   46051 11.6 Disappointments and Misunderstandings
   46052 ==========================================
   46053 
   46054 These problems are perhaps regrettable, but we don't know any practical
   46055 way around them.
   46056 
   46057    * Certain local variables aren't recognized by debuggers when you
   46058      compile with optimization.
   46059 
   46060      This occurs because sometimes GCC optimizes the variable out of
   46061      existence.  There is no way to tell the debugger how to compute the
   46062      value such a variable "would have had", and it is not clear that
   46063      would be desirable anyway.  So GCC simply does not mention the
   46064      eliminated variable when it writes debugging information.
   46065 
   46066      You have to expect a certain amount of disagreement between the
   46067      executable and your source code, when you use optimization.
   46068 
   46069    * Users often think it is a bug when GCC reports an error for code
   46070      like this:
   46071 
   46072           int foo (struct mumble *);
   46073 
   46074           struct mumble { ... };
   46075 
   46076           int foo (struct mumble *x)
   46077           { ... }
   46078 
   46079      This code really is erroneous, because the scope of `struct
   46080      mumble' in the prototype is limited to the argument list
   46081      containing it.  It does not refer to the `struct mumble' defined
   46082      with file scope immediately below--they are two unrelated types
   46083      with similar names in different scopes.
   46084 
   46085      But in the definition of `foo', the file-scope type is used
   46086      because that is available to be inherited.  Thus, the definition
   46087      and the prototype do not match, and you get an error.
   46088 
   46089      This behavior may seem silly, but it's what the ISO standard
   46090      specifies.  It is easy enough for you to make your code work by
   46091      moving the definition of `struct mumble' above the prototype.
   46092      It's not worth being incompatible with ISO C just to avoid an
   46093      error for the example shown above.
   46094 
   46095    * Accesses to bit-fields even in volatile objects works by accessing
   46096      larger objects, such as a byte or a word.  You cannot rely on what
   46097      size of object is accessed in order to read or write the
   46098      bit-field; it may even vary for a given bit-field according to the
   46099      precise usage.
   46100 
   46101      If you care about controlling the amount of memory that is
   46102      accessed, use volatile but do not use bit-fields.
   46103 
   46104    * GCC comes with shell scripts to fix certain known problems in
   46105      system header files.  They install corrected copies of various
   46106      header files in a special directory where only GCC will normally
   46107      look for them.  The scripts adapt to various systems by searching
   46108      all the system header files for the problem cases that we know
   46109      about.
   46110 
   46111      If new system header files are installed, nothing automatically
   46112      arranges to update the corrected header files.  They can be
   46113      updated using the `mkheaders' script installed in
   46114      `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   46115 
   46116    * On 68000 and x86 systems, for instance, you can get paradoxical
   46117      results if you test the precise values of floating point numbers.
   46118      For example, you can find that a floating point value which is not
   46119      a NaN is not equal to itself.  This results from the fact that the
   46120      floating point registers hold a few more bits of precision than
   46121      fit in a `double' in memory.  Compiled code moves values between
   46122      memory and floating point registers at its convenience, and moving
   46123      them into memory truncates them.
   46124 
   46125      You can partially avoid this problem by using the `-ffloat-store'
   46126      option (*note Optimize Options::).
   46127 
   46128    * On AIX and other platforms without weak symbol support, templates
   46129      need to be instantiated explicitly and symbols for static members
   46130      of templates will not be generated.
   46131 
   46132    * On AIX, GCC scans object files and library archives for static
   46133      constructors and destructors when linking an application before the
   46134      linker prunes unreferenced symbols.  This is necessary to prevent
   46135      the AIX linker from mistakenly assuming that static constructor or
   46136      destructor are unused and removing them before the scanning can
   46137      occur.  All static constructors and destructors found will be
   46138      referenced even though the modules in which they occur may not be
   46139      used by the program.  This may lead to both increased executable
   46140      size and unexpected symbol references.
   46141 
   46142 
   46143 File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
   46144 
   46145 11.7 Common Misunderstandings with GNU C++
   46146 ==========================================
   46147 
   46148 C++ is a complex language and an evolving one, and its standard
   46149 definition (the ISO C++ standard) was only recently completed.  As a
   46150 result, your C++ compiler may occasionally surprise you, even when its
   46151 behavior is correct.  This section discusses some areas that frequently
   46152 give rise to questions of this sort.
   46153 
   46154 * Menu:
   46155 
   46156 * Static Definitions::  Static member declarations are not definitions
   46157 * Name lookup::         Name lookup, templates, and accessing members of base classes
   46158 * Temporaries::         Temporaries may vanish before you expect
   46159 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
   46160 
   46161 
   46162 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
   46163 
   46164 11.7.1 Declare _and_ Define Static Members
   46165 ------------------------------------------
   46166 
   46167 When a class has static data members, it is not enough to _declare_ the
   46168 static member; you must also _define_ it.  For example:
   46169 
   46170      class Foo
   46171      {
   46172        ...
   46173        void method();
   46174        static int bar;
   46175      };
   46176 
   46177  This declaration only establishes that the class `Foo' has an `int'
   46178 named `Foo::bar', and a member function named `Foo::method'.  But you
   46179 still need to define _both_ `method' and `bar' elsewhere.  According to
   46180 the ISO standard, you must supply an initializer in one (and only one)
   46181 source file, such as:
   46182 
   46183      int Foo::bar = 0;
   46184 
   46185  Other C++ compilers may not correctly implement the standard behavior.
   46186 As a result, when you switch to `g++' from one of these compilers, you
   46187 may discover that a program that appeared to work correctly in fact
   46188 does not conform to the standard: `g++' reports as undefined symbols
   46189 any static data members that lack definitions.
   46190 
   46191 
   46192 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
   46193 
   46194 11.7.2 Name lookup, templates, and accessing members of base classes
   46195 --------------------------------------------------------------------
   46196 
   46197 The C++ standard prescribes that all names that are not dependent on
   46198 template parameters are bound to their present definitions when parsing
   46199 a template function or class.(1)  Only names that are dependent are
   46200 looked up at the point of instantiation.  For example, consider
   46201 
   46202        void foo(double);
   46203 
   46204        struct A {
   46205          template <typename T>
   46206          void f () {
   46207            foo (1);        // 1
   46208            int i = N;      // 2
   46209            T t;
   46210            t.bar();        // 3
   46211            foo (t);        // 4
   46212          }
   46213 
   46214          static const int N;
   46215        };
   46216 
   46217  Here, the names `foo' and `N' appear in a context that does not depend
   46218 on the type of `T'.  The compiler will thus require that they are
   46219 defined in the context of use in the template, not only before the
   46220 point of instantiation, and will here use `::foo(double)' and `A::N',
   46221 respectively.  In particular, it will convert the integer value to a
   46222 `double' when passing it to `::foo(double)'.
   46223 
   46224  Conversely, `bar' and the call to `foo' in the fourth marked line are
   46225 used in contexts that do depend on the type of `T', so they are only
   46226 looked up at the point of instantiation, and you can provide
   46227 declarations for them after declaring the template, but before
   46228 instantiating it.  In particular, if you instantiate `A::f<int>', the
   46229 last line will call an overloaded `::foo(int)' if one was provided,
   46230 even if after the declaration of `struct A'.
   46231 
   46232  This distinction between lookup of dependent and non-dependent names is
   46233 called two-stage (or dependent) name lookup.  G++ implements it since
   46234 version 3.4.
   46235 
   46236  Two-stage name lookup sometimes leads to situations with behavior
   46237 different from non-template codes.  The most common is probably this:
   46238 
   46239        template <typename T> struct Base {
   46240          int i;
   46241        };
   46242 
   46243        template <typename T> struct Derived : public Base<T> {
   46244          int get_i() { return i; }
   46245        };
   46246 
   46247  In `get_i()', `i' is not used in a dependent context, so the compiler
   46248 will look for a name declared at the enclosing namespace scope (which
   46249 is the global scope here).  It will not look into the base class, since
   46250 that is dependent and you may declare specializations of `Base' even
   46251 after declaring `Derived', so the compiler can't really know what `i'
   46252 would refer to.  If there is no global variable `i', then you will get
   46253 an error message.
   46254 
   46255  In order to make it clear that you want the member of the base class,
   46256 you need to defer lookup until instantiation time, at which the base
   46257 class is known.  For this, you need to access `i' in a dependent
   46258 context, by either using `this->i' (remember that `this' is of type
   46259 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
   46260 Alternatively, `Base<T>::i' might be brought into scope by a
   46261 `using'-declaration.
   46262 
   46263  Another, similar example involves calling member functions of a base
   46264 class:
   46265 
   46266        template <typename T> struct Base {
   46267            int f();
   46268        };
   46269 
   46270        template <typename T> struct Derived : Base<T> {
   46271            int g() { return f(); };
   46272        };
   46273 
   46274  Again, the call to `f()' is not dependent on template arguments (there
   46275 are no arguments that depend on the type `T', and it is also not
   46276 otherwise specified that the call should be in a dependent context).
   46277 Thus a global declaration of such a function must be available, since
   46278 the one in the base class is not visible until instantiation time.  The
   46279 compiler will consequently produce the following error message:
   46280 
   46281        x.cc: In member function `int Derived<T>::g()':
   46282        x.cc:6: error: there are no arguments to `f' that depend on a template
   46283           parameter, so a declaration of `f' must be available
   46284        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
   46285           allowing the use of an undeclared name is deprecated)
   46286 
   46287  To make the code valid either use `this->f()', or `Base<T>::f()'.
   46288 Using the `-fpermissive' flag will also let the compiler accept the
   46289 code, by marking all function calls for which no declaration is visible
   46290 at the time of definition of the template for later lookup at
   46291 instantiation time, as if it were a dependent call.  We do not
   46292 recommend using `-fpermissive' to work around invalid code, and it will
   46293 also only catch cases where functions in base classes are called, not
   46294 where variables in base classes are used (as in the example above).
   46295 
   46296  Note that some compilers (including G++ versions prior to 3.4) get
   46297 these examples wrong and accept above code without an error.  Those
   46298 compilers do not implement two-stage name lookup correctly.
   46299 
   46300  ---------- Footnotes ----------
   46301 
   46302  (1) The C++ standard just uses the term "dependent" for names that
   46303 depend on the type or value of template parameters.  This shorter term
   46304 will also be used in the rest of this section.
   46305 
   46306 
   46307 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
   46308 
   46309 11.7.3 Temporaries May Vanish Before You Expect
   46310 -----------------------------------------------
   46311 
   46312 It is dangerous to use pointers or references to _portions_ of a
   46313 temporary object.  The compiler may very well delete the object before
   46314 you expect it to, leaving a pointer to garbage.  The most common place
   46315 where this problem crops up is in classes like string classes,
   46316 especially ones that define a conversion function to type `char *' or
   46317 `const char *'--which is one reason why the standard `string' class
   46318 requires you to call the `c_str' member function.  However, any class
   46319 that returns a pointer to some internal structure is potentially
   46320 subject to this problem.
   46321 
   46322  For example, a program may use a function `strfunc' that returns
   46323 `string' objects, and another function `charfunc' that operates on
   46324 pointers to `char':
   46325 
   46326      string strfunc ();
   46327      void charfunc (const char *);
   46328 
   46329      void
   46330      f ()
   46331      {
   46332        const char *p = strfunc().c_str();
   46333        ...
   46334        charfunc (p);
   46335        ...
   46336        charfunc (p);
   46337      }
   46338 
   46339 In this situation, it may seem reasonable to save a pointer to the C
   46340 string returned by the `c_str' member function and use that rather than
   46341 call `c_str' repeatedly.  However, the temporary string created by the
   46342 call to `strfunc' is destroyed after `p' is initialized, at which point
   46343 `p' is left pointing to freed memory.
   46344 
   46345  Code like this may run successfully under some other compilers,
   46346 particularly obsolete cfront-based compilers that delete temporaries
   46347 along with normal local variables.  However, the GNU C++ behavior is
   46348 standard-conforming, so if your program depends on late destruction of
   46349 temporaries it is not portable.
   46350 
   46351  The safe way to write such code is to give the temporary a name, which
   46352 forces it to remain until the end of the scope of the name.  For
   46353 example:
   46354 
   46355      const string& tmp = strfunc ();
   46356      charfunc (tmp.c_str ());
   46357 
   46358 
   46359 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
   46360 
   46361 11.7.4 Implicit Copy-Assignment for Virtual Bases
   46362 -------------------------------------------------
   46363 
   46364 When a base class is virtual, only one subobject of the base class
   46365 belongs to each full object.  Also, the constructors and destructors are
   46366 invoked only once, and called from the most-derived class.  However,
   46367 such objects behave unspecified when being assigned.  For example:
   46368 
   46369      struct Base{
   46370        char *name;
   46371        Base(char *n) : name(strdup(n)){}
   46372        Base& operator= (const Base& other){
   46373         free (name);
   46374         name = strdup (other.name);
   46375        }
   46376      };
   46377 
   46378      struct A:virtual Base{
   46379        int val;
   46380        A():Base("A"){}
   46381      };
   46382 
   46383      struct B:virtual Base{
   46384        int bval;
   46385        B():Base("B"){}
   46386      };
   46387 
   46388      struct Derived:public A, public B{
   46389        Derived():Base("Derived"){}
   46390      };
   46391 
   46392      void func(Derived &d1, Derived &d2)
   46393      {
   46394        d1 = d2;
   46395      }
   46396 
   46397  The C++ standard specifies that `Base::Base' is only called once when
   46398 constructing or copy-constructing a Derived object.  It is unspecified
   46399 whether `Base::operator=' is called more than once when the implicit
   46400 copy-assignment for Derived objects is invoked (as it is inside `func'
   46401 in the example).
   46402 
   46403  G++ implements the "intuitive" algorithm for copy-assignment: assign
   46404 all direct bases, then assign all members.  In that algorithm, the
   46405 virtual base subobject can be encountered more than once.  In the
   46406 example, copying proceeds in the following order: `val', `name' (via
   46407 `strdup'), `bval', and `name' again.
   46408 
   46409  If application code relies on copy-assignment, a user-defined
   46410 copy-assignment operator removes any uncertainties.  With such an
   46411 operator, the application can define whether and how the virtual base
   46412 subobject is assigned.
   46413 
   46414 
   46415 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
   46416 
   46417 11.8 Certain Changes We Don't Want to Make
   46418 ==========================================
   46419 
   46420 This section lists changes that people frequently request, but which we
   46421 do not make because we think GCC is better without them.
   46422 
   46423    * Checking the number and type of arguments to a function which has
   46424      an old-fashioned definition and no prototype.
   46425 
   46426      Such a feature would work only occasionally--only for calls that
   46427      appear in the same file as the called function, following the
   46428      definition.  The only way to check all calls reliably is to add a
   46429      prototype for the function.  But adding a prototype eliminates the
   46430      motivation for this feature.  So the feature is not worthwhile.
   46431 
   46432    * Warning about using an expression whose type is signed as a shift
   46433      count.
   46434 
   46435      Shift count operands are probably signed more often than unsigned.
   46436      Warning about this would cause far more annoyance than good.
   46437 
   46438    * Warning about assigning a signed value to an unsigned variable.
   46439 
   46440      Such assignments must be very common; warning about them would
   46441      cause more annoyance than good.
   46442 
   46443    * Warning when a non-void function value is ignored.
   46444 
   46445      C contains many standard functions that return a value that most
   46446      programs choose to ignore.  One obvious example is `printf'.
   46447      Warning about this practice only leads the defensive programmer to
   46448      clutter programs with dozens of casts to `void'.  Such casts are
   46449      required so frequently that they become visual noise.  Writing
   46450      those casts becomes so automatic that they no longer convey useful
   46451      information about the intentions of the programmer.  For functions
   46452      where the return value should never be ignored, use the
   46453      `warn_unused_result' function attribute (*note Function
   46454      Attributes::).
   46455 
   46456    * Making `-fshort-enums' the default.
   46457 
   46458      This would cause storage layout to be incompatible with most other
   46459      C compilers.  And it doesn't seem very important, given that you
   46460      can get the same result in other ways.  The case where it matters
   46461      most is when the enumeration-valued object is inside a structure,
   46462      and in that case you can specify a field width explicitly.
   46463 
   46464    * Making bit-fields unsigned by default on particular machines where
   46465      "the ABI standard" says to do so.
   46466 
   46467      The ISO C standard leaves it up to the implementation whether a
   46468      bit-field declared plain `int' is signed or not.  This in effect
   46469      creates two alternative dialects of C.
   46470 
   46471      The GNU C compiler supports both dialects; you can specify the
   46472      signed dialect with `-fsigned-bitfields' and the unsigned dialect
   46473      with `-funsigned-bitfields'.  However, this leaves open the
   46474      question of which dialect to use by default.
   46475 
   46476      Currently, the preferred dialect makes plain bit-fields signed,
   46477      because this is simplest.  Since `int' is the same as `signed int'
   46478      in every other context, it is cleanest for them to be the same in
   46479      bit-fields as well.
   46480 
   46481      Some computer manufacturers have published Application Binary
   46482      Interface standards which specify that plain bit-fields should be
   46483      unsigned.  It is a mistake, however, to say anything about this
   46484      issue in an ABI.  This is because the handling of plain bit-fields
   46485      distinguishes two dialects of C.  Both dialects are meaningful on
   46486      every type of machine.  Whether a particular object file was
   46487      compiled using signed bit-fields or unsigned is of no concern to
   46488      other object files, even if they access the same bit-fields in the
   46489      same data structures.
   46490 
   46491      A given program is written in one or the other of these two
   46492      dialects.  The program stands a chance to work on most any machine
   46493      if it is compiled with the proper dialect.  It is unlikely to work
   46494      at all if compiled with the wrong dialect.
   46495 
   46496      Many users appreciate the GNU C compiler because it provides an
   46497      environment that is uniform across machines.  These users would be
   46498      inconvenienced if the compiler treated plain bit-fields
   46499      differently on certain machines.
   46500 
   46501      Occasionally users write programs intended only for a particular
   46502      machine type.  On these occasions, the users would benefit if the
   46503      GNU C compiler were to support by default the same dialect as the
   46504      other compilers on that machine.  But such applications are rare.
   46505      And users writing a program to run on more than one type of
   46506      machine cannot possibly benefit from this kind of compatibility.
   46507 
   46508      This is why GCC does and will treat plain bit-fields in the same
   46509      fashion on all types of machines (by default).
   46510 
   46511      There are some arguments for making bit-fields unsigned by default
   46512      on all machines.  If, for example, this becomes a universal de
   46513      facto standard, it would make sense for GCC to go along with it.
   46514      This is something to be considered in the future.
   46515 
   46516      (Of course, users strongly concerned about portability should
   46517      indicate explicitly in each bit-field whether it is signed or not.
   46518      In this way, they write programs which have the same meaning in
   46519      both C dialects.)
   46520 
   46521    * Undefining `__STDC__' when `-ansi' is not used.
   46522 
   46523      Currently, GCC defines `__STDC__' unconditionally.  This provides
   46524      good results in practice.
   46525 
   46526      Programmers normally use conditionals on `__STDC__' to ask whether
   46527      it is safe to use certain features of ISO C, such as function
   46528      prototypes or ISO token concatenation.  Since plain `gcc' supports
   46529      all the features of ISO C, the correct answer to these questions is
   46530      "yes".
   46531 
   46532      Some users try to use `__STDC__' to check for the availability of
   46533      certain library facilities.  This is actually incorrect usage in
   46534      an ISO C program, because the ISO C standard says that a conforming
   46535      freestanding implementation should define `__STDC__' even though it
   46536      does not have the library facilities.  `gcc -ansi -pedantic' is a
   46537      conforming freestanding implementation, and it is therefore
   46538      required to define `__STDC__', even though it does not come with
   46539      an ISO C library.
   46540 
   46541      Sometimes people say that defining `__STDC__' in a compiler that
   46542      does not completely conform to the ISO C standard somehow violates
   46543      the standard.  This is illogical.  The standard is a standard for
   46544      compilers that claim to support ISO C, such as `gcc -ansi'--not
   46545      for other compilers such as plain `gcc'.  Whatever the ISO C
   46546      standard says is relevant to the design of plain `gcc' without
   46547      `-ansi' only for pragmatic reasons, not as a requirement.
   46548 
   46549      GCC normally defines `__STDC__' to be 1, and in addition defines
   46550      `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
   46551      option for strict conformance to some version of ISO C.  On some
   46552      hosts, system include files use a different convention, where
   46553      `__STDC__' is normally 0, but is 1 if the user specifies strict
   46554      conformance to the C Standard.  GCC follows the host convention
   46555      when processing system include files, but when processing user
   46556      files it follows the usual GNU C convention.
   46557 
   46558    * Undefining `__STDC__' in C++.
   46559 
   46560      Programs written to compile with C++-to-C translators get the
   46561      value of `__STDC__' that goes with the C compiler that is
   46562      subsequently used.  These programs must test `__STDC__' to
   46563      determine what kind of C preprocessor that compiler uses: whether
   46564      they should concatenate tokens in the ISO C fashion or in the
   46565      traditional fashion.
   46566 
   46567      These programs work properly with GNU C++ if `__STDC__' is defined.
   46568      They would not work otherwise.
   46569 
   46570      In addition, many header files are written to provide prototypes
   46571      in ISO C but not in traditional C.  Many of these header files can
   46572      work without change in C++ provided `__STDC__' is defined.  If
   46573      `__STDC__' is not defined, they will all fail, and will all need
   46574      to be changed to test explicitly for C++ as well.
   46575 
   46576    * Deleting "empty" loops.
   46577 
   46578      Historically, GCC has not deleted "empty" loops under the
   46579      assumption that the most likely reason you would put one in a
   46580      program is to have a delay, so deleting them will not make real
   46581      programs run any faster.
   46582 
   46583      However, the rationale here is that optimization of a nonempty loop
   46584      cannot produce an empty one. This held for carefully written C
   46585      compiled with less powerful optimizers but is not always the case
   46586      for carefully written C++ or with more powerful optimizers.  Thus
   46587      GCC will remove operations from loops whenever it can determine
   46588      those operations are not externally visible (apart from the time
   46589      taken to execute them, of course).  In case the loop can be proved
   46590      to be finite, GCC will also remove the loop itself.
   46591 
   46592      Be aware of this when performing timing tests, for instance the
   46593      following loop can be completely removed, provided
   46594      `some_expression' can provably not change any global state.
   46595 
   46596           {
   46597              int sum = 0;
   46598              int ix;
   46599 
   46600              for (ix = 0; ix != 10000; ix++)
   46601                 sum += some_expression;
   46602           }
   46603 
   46604      Even though `sum' is accumulated in the loop, no use is made of
   46605      that summation, so the accumulation can be removed.
   46606 
   46607    * Making side effects happen in the same order as in some other
   46608      compiler.
   46609 
   46610      It is never safe to depend on the order of evaluation of side
   46611      effects.  For example, a function call like this may very well
   46612      behave differently from one compiler to another:
   46613 
   46614           void func (int, int);
   46615 
   46616           int i = 2;
   46617           func (i++, i++);
   46618 
   46619      There is no guarantee (in either the C or the C++ standard language
   46620      definitions) that the increments will be evaluated in any
   46621      particular order.  Either increment might happen first.  `func'
   46622      might get the arguments `2, 3', or it might get `3, 2', or even
   46623      `2, 2'.
   46624 
   46625    * Making certain warnings into errors by default.
   46626 
   46627      Some ISO C testsuites report failure when the compiler does not
   46628      produce an error message for a certain program.
   46629 
   46630      ISO C requires a "diagnostic" message for certain kinds of invalid
   46631      programs, but a warning is defined by GCC to count as a
   46632      diagnostic.  If GCC produces a warning but not an error, that is
   46633      correct ISO C support.  If testsuites call this "failure", they
   46634      should be run with the GCC option `-pedantic-errors', which will
   46635      turn these warnings into errors.
   46636 
   46637 
   46638 
   46639 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
   46640 
   46641 11.9 Warning Messages and Error Messages
   46642 ========================================
   46643 
   46644 The GNU compiler can produce two kinds of diagnostics: errors and
   46645 warnings.  Each kind has a different purpose:
   46646 
   46647      "Errors" report problems that make it impossible to compile your
   46648      program.  GCC reports errors with the source file name and line
   46649      number where the problem is apparent.
   46650 
   46651      "Warnings" report other unusual conditions in your code that _may_
   46652      indicate a problem, although compilation can (and does) proceed.
   46653      Warning messages also report the source file name and line number,
   46654      but include the text `warning:' to distinguish them from error
   46655      messages.
   46656 
   46657  Warnings may indicate danger points where you should check to make sure
   46658 that your program really does what you intend; or the use of obsolete
   46659 features; or the use of nonstandard features of GNU C or C++.  Many
   46660 warnings are issued only if you ask for them, with one of the `-W'
   46661 options (for instance, `-Wall' requests a variety of useful warnings).
   46662 
   46663  GCC always tries to compile your program if possible; it never
   46664 gratuitously rejects a program whose meaning is clear merely because
   46665 (for instance) it fails to conform to a standard.  In some cases,
   46666 however, the C and C++ standards specify that certain extensions are
   46667 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
   46668 The `-pedantic' option tells GCC to issue warnings in such cases;
   46669 `-pedantic-errors' says to make them errors instead.  This does not
   46670 mean that _all_ non-ISO constructs get warnings or errors.
   46671 
   46672  *Note Options to Request or Suppress Warnings: Warning Options, for
   46673 more detail on these and related command-line options.
   46674 
   46675 
   46676 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
   46677 
   46678 12 Reporting Bugs
   46679 *****************
   46680 
   46681 Your bug reports play an essential role in making GCC reliable.
   46682 
   46683  When you encounter a problem, the first thing to do is to see if it is
   46684 already known.  *Note Trouble::.  If it isn't known, then you should
   46685 report the problem.
   46686 
   46687 * Menu:
   46688 
   46689 * Criteria:  Bug Criteria.   Have you really found a bug?
   46690 * Reporting: Bug Reporting.  How to report a bug effectively.
   46691 * Known: Trouble.            Known problems.
   46692 * Help: Service.             Where to ask for help.
   46693 
   46694 
   46695 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
   46696 
   46697 12.1 Have You Found a Bug?
   46698 ==========================
   46699 
   46700 If you are not sure whether you have found a bug, here are some
   46701 guidelines:
   46702 
   46703    * If the compiler gets a fatal signal, for any input whatever, that
   46704      is a compiler bug.  Reliable compilers never crash.
   46705 
   46706    * If the compiler produces invalid assembly code, for any input
   46707      whatever (except an `asm' statement), that is a compiler bug,
   46708      unless the compiler reports errors (not just warnings) which would
   46709      ordinarily prevent the assembler from being run.
   46710 
   46711    * If the compiler produces valid assembly code that does not
   46712      correctly execute the input source code, that is a compiler bug.
   46713 
   46714      However, you must double-check to make sure, because you may have a
   46715      program whose behavior is undefined, which happened by chance to
   46716      give the desired results with another C or C++ compiler.
   46717 
   46718      For example, in many nonoptimizing compilers, you can write `x;'
   46719      at the end of a function instead of `return x;', with the same
   46720      results.  But the value of the function is undefined if `return'
   46721      is omitted; it is not a bug when GCC produces different results.
   46722 
   46723      Problems often result from expressions with two increment
   46724      operators, as in `f (*p++, *p++)'.  Your previous compiler might
   46725      have interpreted that expression the way you intended; GCC might
   46726      interpret it another way.  Neither compiler is wrong.  The bug is
   46727      in your code.
   46728 
   46729      After you have localized the error to a single source line, it
   46730      should be easy to check for these things.  If your program is
   46731      correct and well defined, you have found a compiler bug.
   46732 
   46733    * If the compiler produces an error message for valid input, that is
   46734      a compiler bug.
   46735 
   46736    * If the compiler does not produce an error message for invalid
   46737      input, that is a compiler bug.  However, you should note that your
   46738      idea of "invalid input" might be someone else's idea of "an
   46739      extension" or "support for traditional practice".
   46740 
   46741    * If you are an experienced user of one of the languages GCC
   46742      supports, your suggestions for improvement of GCC are welcome in
   46743      any case.
   46744 
   46745 
   46746 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
   46747 
   46748 12.2 How and where to Report Bugs
   46749 =================================
   46750 
   46751 Bugs should be reported to the bug database at
   46752 `http://gcc.gnu.org/bugs.html'.
   46753 
   46754 
   46755 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
   46756 
   46757 13 How To Get Help with GCC
   46758 ***************************
   46759 
   46760 If you need help installing, using or changing GCC, there are two ways
   46761 to find it:
   46762 
   46763    * Send a message to a suitable network mailing list.  First try
   46764      <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if
   46765      that brings no response, try <gcc (a] gcc.gnu.org>.  For help changing
   46766      GCC, ask <gcc (a] gcc.gnu.org>.  If you think you have found a bug in
   46767      GCC, please report it following the instructions at *note Bug
   46768      Reporting::.
   46769 
   46770    * Look in the service directory for someone who might help you for a
   46771      fee.  The service directory is found at
   46772      `http://www.fsf.org/resources/service'.
   46773 
   46774  For further information, see `http://gcc.gnu.org/faq.html#support'.
   46775 
   46776 
   46777 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
   46778 
   46779 14 Contributing to GCC Development
   46780 **********************************
   46781 
   46782 If you would like to help pretest GCC releases to assure they work well,
   46783 current development sources are available by SVN (see
   46784 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
   46785 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
   46786 
   46787  If you would like to work on improvements to GCC, please read the
   46788 advice at these URLs:
   46789 
   46790      `http://gcc.gnu.org/contribute.html'
   46791      `http://gcc.gnu.org/contributewhy.html'
   46792 
   46793 for information on how to make useful contributions and avoid
   46794 duplication of effort.  Suggested projects are listed at
   46795 `http://gcc.gnu.org/projects/'.
   46796 
   46797 
   46798 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
   46799 
   46800 Funding Free Software
   46801 *********************
   46802 
   46803 If you want to have more free software a few years from now, it makes
   46804 sense for you to help encourage people to contribute funds for its
   46805 development.  The most effective approach known is to encourage
   46806 commercial redistributors to donate.
   46807 
   46808  Users of free software systems can boost the pace of development by
   46809 encouraging for-a-fee distributors to donate part of their selling price
   46810 to free software developers--the Free Software Foundation, and others.
   46811 
   46812  The way to convince distributors to do this is to demand it and expect
   46813 it from them.  So when you compare distributors, judge them partly by
   46814 how much they give to free software development.  Show distributors
   46815 they must compete to be the one who gives the most.
   46816 
   46817  To make this approach work, you must insist on numbers that you can
   46818 compare, such as, "We will donate ten dollars to the Frobnitz project
   46819 for each disk sold."  Don't be satisfied with a vague promise, such as
   46820 "A portion of the profits are donated," since it doesn't give a basis
   46821 for comparison.
   46822 
   46823  Even a precise fraction "of the profits from this disk" is not very
   46824 meaningful, since creative accounting and unrelated business decisions
   46825 can greatly alter what fraction of the sales price counts as profit.
   46826 If the price you pay is $50, ten percent of the profit is probably less
   46827 than a dollar; it might be a few cents, or nothing at all.
   46828 
   46829  Some redistributors do development work themselves.  This is useful
   46830 too; but to keep everyone honest, you need to inquire how much they do,
   46831 and what kind.  Some kinds of development make much more long-term
   46832 difference than others.  For example, maintaining a separate version of
   46833 a program contributes very little; maintaining the standard version of a
   46834 program for the whole community contributes much.  Easy new ports
   46835 contribute little, since someone else would surely do them; difficult
   46836 ports such as adding a new CPU to the GNU Compiler Collection
   46837 contribute more; major new features or packages contribute the most.
   46838 
   46839  By establishing the idea that supporting further development is "the
   46840 proper thing to do" when distributing free software for a fee, we can
   46841 assure a steady flow of resources into making more free software.
   46842 
   46843      Copyright (C) 1994 Free Software Foundation, Inc.
   46844      Verbatim copying and redistribution of this section is permitted
   46845      without royalty; alteration is not permitted.
   46846 
   46847 
   46848 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
   46849 
   46850 The GNU Project and GNU/Linux
   46851 *****************************
   46852 
   46853 The GNU Project was launched in 1984 to develop a complete Unix-like
   46854 operating system which is free software: the GNU system.  (GNU is a
   46855 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
   46856 Variants of the GNU operating system, which use the kernel Linux, are
   46857 now widely used; though these systems are often referred to as "Linux",
   46858 they are more accurately called GNU/Linux systems.
   46859 
   46860  For more information, see:
   46861      `http://www.gnu.org/'
   46862      `http://www.gnu.org/gnu/linux-and-gnu.html'
   46863 
   46864 
   46865 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
   46866 
   46867 GNU General Public License
   46868 **************************
   46869 
   46870                         Version 3, 29 June 2007
   46871 
   46872      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
   46873 
   46874      Everyone is permitted to copy and distribute verbatim copies of this
   46875      license document, but changing it is not allowed.
   46876 
   46877 Preamble
   46878 ========
   46879 
   46880 The GNU General Public License is a free, copyleft license for software
   46881 and other kinds of works.
   46882 
   46883  The licenses for most software and other practical works are designed
   46884 to take away your freedom to share and change the works.  By contrast,
   46885 the GNU General Public License is intended to guarantee your freedom to
   46886 share and change all versions of a program-to make sure it remains free
   46887 software for all its users.  We, the Free Software Foundation, use the
   46888 GNU General Public License for most of our software; it applies also to
   46889 any other work released this way by its authors.  You can apply it to
   46890 your programs, too.
   46891 
   46892  When we speak of free software, we are referring to freedom, not
   46893 price.  Our General Public Licenses are designed to make sure that you
   46894 have the freedom to distribute copies of free software (and charge for
   46895 them if you wish), that you receive source code or can get it if you
   46896 want it, that you can change the software or use pieces of it in new
   46897 free programs, and that you know you can do these things.
   46898 
   46899  To protect your rights, we need to prevent others from denying you
   46900 these rights or asking you to surrender the rights.  Therefore, you
   46901 have certain responsibilities if you distribute copies of the software,
   46902 or if you modify it: responsibilities to respect the freedom of others.
   46903 
   46904  For example, if you distribute copies of such a program, whether
   46905 gratis or for a fee, you must pass on to the recipients the same
   46906 freedoms that you received.  You must make sure that they, too, receive
   46907 or can get the source code.  And you must show them these terms so they
   46908 know their rights.
   46909 
   46910  Developers that use the GNU GPL protect your rights with two steps:
   46911 (1) assert copyright on the software, and (2) offer you this License
   46912 giving you legal permission to copy, distribute and/or modify it.
   46913 
   46914  For the developers' and authors' protection, the GPL clearly explains
   46915 that there is no warranty for this free software.  For both users' and
   46916 authors' sake, the GPL requires that modified versions be marked as
   46917 changed, so that their problems will not be attributed erroneously to
   46918 authors of previous versions.
   46919 
   46920  Some devices are designed to deny users access to install or run
   46921 modified versions of the software inside them, although the
   46922 manufacturer can do so.  This is fundamentally incompatible with the
   46923 aim of protecting users' freedom to change the software.  The
   46924 systematic pattern of such abuse occurs in the area of products for
   46925 individuals to use, which is precisely where it is most unacceptable.
   46926 Therefore, we have designed this version of the GPL to prohibit the
   46927 practice for those products.  If such problems arise substantially in
   46928 other domains, we stand ready to extend this provision to those domains
   46929 in future versions of the GPL, as needed to protect the freedom of
   46930 users.
   46931 
   46932  Finally, every program is threatened constantly by software patents.
   46933 States should not allow patents to restrict development and use of
   46934 software on general-purpose computers, but in those that do, we wish to
   46935 avoid the special danger that patents applied to a free program could
   46936 make it effectively proprietary.  To prevent this, the GPL assures that
   46937 patents cannot be used to render the program non-free.
   46938 
   46939  The precise terms and conditions for copying, distribution and
   46940 modification follow.
   46941 
   46942 TERMS AND CONDITIONS
   46943 ====================
   46944 
   46945   0. Definitions.
   46946 
   46947      "This License" refers to version 3 of the GNU General Public
   46948      License.
   46949 
   46950      "Copyright" also means copyright-like laws that apply to other
   46951      kinds of works, such as semiconductor masks.
   46952 
   46953      "The Program" refers to any copyrightable work licensed under this
   46954      License.  Each licensee is addressed as "you".  "Licensees" and
   46955      "recipients" may be individuals or organizations.
   46956 
   46957      To "modify" a work means to copy from or adapt all or part of the
   46958      work in a fashion requiring copyright permission, other than the
   46959      making of an exact copy.  The resulting work is called a "modified
   46960      version" of the earlier work or a work "based on" the earlier work.
   46961 
   46962      A "covered work" means either the unmodified Program or a work
   46963      based on the Program.
   46964 
   46965      To "propagate" a work means to do anything with it that, without
   46966      permission, would make you directly or secondarily liable for
   46967      infringement under applicable copyright law, except executing it
   46968      on a computer or modifying a private copy.  Propagation includes
   46969      copying, distribution (with or without modification), making
   46970      available to the public, and in some countries other activities as
   46971      well.
   46972 
   46973      To "convey" a work means any kind of propagation that enables other
   46974      parties to make or receive copies.  Mere interaction with a user
   46975      through a computer network, with no transfer of a copy, is not
   46976      conveying.
   46977 
   46978      An interactive user interface displays "Appropriate Legal Notices"
   46979      to the extent that it includes a convenient and prominently visible
   46980      feature that (1) displays an appropriate copyright notice, and (2)
   46981      tells the user that there is no warranty for the work (except to
   46982      the extent that warranties are provided), that licensees may
   46983      convey the work under this License, and how to view a copy of this
   46984      License.  If the interface presents a list of user commands or
   46985      options, such as a menu, a prominent item in the list meets this
   46986      criterion.
   46987 
   46988   1. Source Code.
   46989 
   46990      The "source code" for a work means the preferred form of the work
   46991      for making modifications to it.  "Object code" means any
   46992      non-source form of a work.
   46993 
   46994      A "Standard Interface" means an interface that either is an
   46995      official standard defined by a recognized standards body, or, in
   46996      the case of interfaces specified for a particular programming
   46997      language, one that is widely used among developers working in that
   46998      language.
   46999 
   47000      The "System Libraries" of an executable work include anything,
   47001      other than the work as a whole, that (a) is included in the normal
   47002      form of packaging a Major Component, but which is not part of that
   47003      Major Component, and (b) serves only to enable use of the work
   47004      with that Major Component, or to implement a Standard Interface
   47005      for which an implementation is available to the public in source
   47006      code form.  A "Major Component", in this context, means a major
   47007      essential component (kernel, window system, and so on) of the
   47008      specific operating system (if any) on which the executable work
   47009      runs, or a compiler used to produce the work, or an object code
   47010      interpreter used to run it.
   47011 
   47012      The "Corresponding Source" for a work in object code form means all
   47013      the source code needed to generate, install, and (for an executable
   47014      work) run the object code and to modify the work, including
   47015      scripts to control those activities.  However, it does not include
   47016      the work's System Libraries, or general-purpose tools or generally
   47017      available free programs which are used unmodified in performing
   47018      those activities but which are not part of the work.  For example,
   47019      Corresponding Source includes interface definition files
   47020      associated with source files for the work, and the source code for
   47021      shared libraries and dynamically linked subprograms that the work
   47022      is specifically designed to require, such as by intimate data
   47023      communication or control flow between those subprograms and other
   47024      parts of the work.
   47025 
   47026      The Corresponding Source need not include anything that users can
   47027      regenerate automatically from other parts of the Corresponding
   47028      Source.
   47029 
   47030      The Corresponding Source for a work in source code form is that
   47031      same work.
   47032 
   47033   2. Basic Permissions.
   47034 
   47035      All rights granted under this License are granted for the term of
   47036      copyright on the Program, and are irrevocable provided the stated
   47037      conditions are met.  This License explicitly affirms your unlimited
   47038      permission to run the unmodified Program.  The output from running
   47039      a covered work is covered by this License only if the output,
   47040      given its content, constitutes a covered work.  This License
   47041      acknowledges your rights of fair use or other equivalent, as
   47042      provided by copyright law.
   47043 
   47044      You may make, run and propagate covered works that you do not
   47045      convey, without conditions so long as your license otherwise
   47046      remains in force.  You may convey covered works to others for the
   47047      sole purpose of having them make modifications exclusively for
   47048      you, or provide you with facilities for running those works,
   47049      provided that you comply with the terms of this License in
   47050      conveying all material for which you do not control copyright.
   47051      Those thus making or running the covered works for you must do so
   47052      exclusively on your behalf, under your direction and control, on
   47053      terms that prohibit them from making any copies of your
   47054      copyrighted material outside their relationship with you.
   47055 
   47056      Conveying under any other circumstances is permitted solely under
   47057      the conditions stated below.  Sublicensing is not allowed; section
   47058      10 makes it unnecessary.
   47059 
   47060   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   47061 
   47062      No covered work shall be deemed part of an effective technological
   47063      measure under any applicable law fulfilling obligations under
   47064      article 11 of the WIPO copyright treaty adopted on 20 December
   47065      1996, or similar laws prohibiting or restricting circumvention of
   47066      such measures.
   47067 
   47068      When you convey a covered work, you waive any legal power to forbid
   47069      circumvention of technological measures to the extent such
   47070      circumvention is effected by exercising rights under this License
   47071      with respect to the covered work, and you disclaim any intention
   47072      to limit operation or modification of the work as a means of
   47073      enforcing, against the work's users, your or third parties' legal
   47074      rights to forbid circumvention of technological measures.
   47075 
   47076   4. Conveying Verbatim Copies.
   47077 
   47078      You may convey verbatim copies of the Program's source code as you
   47079      receive it, in any medium, provided that you conspicuously and
   47080      appropriately publish on each copy an appropriate copyright notice;
   47081      keep intact all notices stating that this License and any
   47082      non-permissive terms added in accord with section 7 apply to the
   47083      code; keep intact all notices of the absence of any warranty; and
   47084      give all recipients a copy of this License along with the Program.
   47085 
   47086      You may charge any price or no price for each copy that you convey,
   47087      and you may offer support or warranty protection for a fee.
   47088 
   47089   5. Conveying Modified Source Versions.
   47090 
   47091      You may convey a work based on the Program, or the modifications to
   47092      produce it from the Program, in the form of source code under the
   47093      terms of section 4, provided that you also meet all of these
   47094      conditions:
   47095 
   47096        a. The work must carry prominent notices stating that you
   47097           modified it, and giving a relevant date.
   47098 
   47099        b. The work must carry prominent notices stating that it is
   47100           released under this License and any conditions added under
   47101           section 7.  This requirement modifies the requirement in
   47102           section 4 to "keep intact all notices".
   47103 
   47104        c. You must license the entire work, as a whole, under this
   47105           License to anyone who comes into possession of a copy.  This
   47106           License will therefore apply, along with any applicable
   47107           section 7 additional terms, to the whole of the work, and all
   47108           its parts, regardless of how they are packaged.  This License
   47109           gives no permission to license the work in any other way, but
   47110           it does not invalidate such permission if you have separately
   47111           received it.
   47112 
   47113        d. If the work has interactive user interfaces, each must display
   47114           Appropriate Legal Notices; however, if the Program has
   47115           interactive interfaces that do not display Appropriate Legal
   47116           Notices, your work need not make them do so.
   47117 
   47118      A compilation of a covered work with other separate and independent
   47119      works, which are not by their nature extensions of the covered
   47120      work, and which are not combined with it such as to form a larger
   47121      program, in or on a volume of a storage or distribution medium, is
   47122      called an "aggregate" if the compilation and its resulting
   47123      copyright are not used to limit the access or legal rights of the
   47124      compilation's users beyond what the individual works permit.
   47125      Inclusion of a covered work in an aggregate does not cause this
   47126      License to apply to the other parts of the aggregate.
   47127 
   47128   6. Conveying Non-Source Forms.
   47129 
   47130      You may convey a covered work in object code form under the terms
   47131      of sections 4 and 5, provided that you also convey the
   47132      machine-readable Corresponding Source under the terms of this
   47133      License, in one of these ways:
   47134 
   47135        a. Convey the object code in, or embodied in, a physical product
   47136           (including a physical distribution medium), accompanied by the
   47137           Corresponding Source fixed on a durable physical medium
   47138           customarily used for software interchange.
   47139 
   47140        b. Convey the object code in, or embodied in, a physical product
   47141           (including a physical distribution medium), accompanied by a
   47142           written offer, valid for at least three years and valid for
   47143           as long as you offer spare parts or customer support for that
   47144           product model, to give anyone who possesses the object code
   47145           either (1) a copy of the Corresponding Source for all the
   47146           software in the product that is covered by this License, on a
   47147           durable physical medium customarily used for software
   47148           interchange, for a price no more than your reasonable cost of
   47149           physically performing this conveying of source, or (2) access
   47150           to copy the Corresponding Source from a network server at no
   47151           charge.
   47152 
   47153        c. Convey individual copies of the object code with a copy of
   47154           the written offer to provide the Corresponding Source.  This
   47155           alternative is allowed only occasionally and noncommercially,
   47156           and only if you received the object code with such an offer,
   47157           in accord with subsection 6b.
   47158 
   47159        d. Convey the object code by offering access from a designated
   47160           place (gratis or for a charge), and offer equivalent access
   47161           to the Corresponding Source in the same way through the same
   47162           place at no further charge.  You need not require recipients
   47163           to copy the Corresponding Source along with the object code.
   47164           If the place to copy the object code is a network server, the
   47165           Corresponding Source may be on a different server (operated
   47166           by you or a third party) that supports equivalent copying
   47167           facilities, provided you maintain clear directions next to
   47168           the object code saying where to find the Corresponding Source.
   47169           Regardless of what server hosts the Corresponding Source, you
   47170           remain obligated to ensure that it is available for as long
   47171           as needed to satisfy these requirements.
   47172 
   47173        e. Convey the object code using peer-to-peer transmission,
   47174           provided you inform other peers where the object code and
   47175           Corresponding Source of the work are being offered to the
   47176           general public at no charge under subsection 6d.
   47177 
   47178 
   47179      A separable portion of the object code, whose source code is
   47180      excluded from the Corresponding Source as a System Library, need
   47181      not be included in conveying the object code work.
   47182 
   47183      A "User Product" is either (1) a "consumer product", which means
   47184      any tangible personal property which is normally used for personal,
   47185      family, or household purposes, or (2) anything designed or sold for
   47186      incorporation into a dwelling.  In determining whether a product
   47187      is a consumer product, doubtful cases shall be resolved in favor of
   47188      coverage.  For a particular product received by a particular user,
   47189      "normally used" refers to a typical or common use of that class of
   47190      product, regardless of the status of the particular user or of the
   47191      way in which the particular user actually uses, or expects or is
   47192      expected to use, the product.  A product is a consumer product
   47193      regardless of whether the product has substantial commercial,
   47194      industrial or non-consumer uses, unless such uses represent the
   47195      only significant mode of use of the product.
   47196 
   47197      "Installation Information" for a User Product means any methods,
   47198      procedures, authorization keys, or other information required to
   47199      install and execute modified versions of a covered work in that
   47200      User Product from a modified version of its Corresponding Source.
   47201      The information must suffice to ensure that the continued
   47202      functioning of the modified object code is in no case prevented or
   47203      interfered with solely because modification has been made.
   47204 
   47205      If you convey an object code work under this section in, or with,
   47206      or specifically for use in, a User Product, and the conveying
   47207      occurs as part of a transaction in which the right of possession
   47208      and use of the User Product is transferred to the recipient in
   47209      perpetuity or for a fixed term (regardless of how the transaction
   47210      is characterized), the Corresponding Source conveyed under this
   47211      section must be accompanied by the Installation Information.  But
   47212      this requirement does not apply if neither you nor any third party
   47213      retains the ability to install modified object code on the User
   47214      Product (for example, the work has been installed in ROM).
   47215 
   47216      The requirement to provide Installation Information does not
   47217      include a requirement to continue to provide support service,
   47218      warranty, or updates for a work that has been modified or
   47219      installed by the recipient, or for the User Product in which it
   47220      has been modified or installed.  Access to a network may be denied
   47221      when the modification itself materially and adversely affects the
   47222      operation of the network or violates the rules and protocols for
   47223      communication across the network.
   47224 
   47225      Corresponding Source conveyed, and Installation Information
   47226      provided, in accord with this section must be in a format that is
   47227      publicly documented (and with an implementation available to the
   47228      public in source code form), and must require no special password
   47229      or key for unpacking, reading or copying.
   47230 
   47231   7. Additional Terms.
   47232 
   47233      "Additional permissions" are terms that supplement the terms of
   47234      this License by making exceptions from one or more of its
   47235      conditions.  Additional permissions that are applicable to the
   47236      entire Program shall be treated as though they were included in
   47237      this License, to the extent that they are valid under applicable
   47238      law.  If additional permissions apply only to part of the Program,
   47239      that part may be used separately under those permissions, but the
   47240      entire Program remains governed by this License without regard to
   47241      the additional permissions.
   47242 
   47243      When you convey a copy of a covered work, you may at your option
   47244      remove any additional permissions from that copy, or from any part
   47245      of it.  (Additional permissions may be written to require their own
   47246      removal in certain cases when you modify the work.)  You may place
   47247      additional permissions on material, added by you to a covered work,
   47248      for which you have or can give appropriate copyright permission.
   47249 
   47250      Notwithstanding any other provision of this License, for material
   47251      you add to a covered work, you may (if authorized by the copyright
   47252      holders of that material) supplement the terms of this License
   47253      with terms:
   47254 
   47255        a. Disclaiming warranty or limiting liability differently from
   47256           the terms of sections 15 and 16 of this License; or
   47257 
   47258        b. Requiring preservation of specified reasonable legal notices
   47259           or author attributions in that material or in the Appropriate
   47260           Legal Notices displayed by works containing it; or
   47261 
   47262        c. Prohibiting misrepresentation of the origin of that material,
   47263           or requiring that modified versions of such material be
   47264           marked in reasonable ways as different from the original
   47265           version; or
   47266 
   47267        d. Limiting the use for publicity purposes of names of licensors
   47268           or authors of the material; or
   47269 
   47270        e. Declining to grant rights under trademark law for use of some
   47271           trade names, trademarks, or service marks; or
   47272 
   47273        f. Requiring indemnification of licensors and authors of that
   47274           material by anyone who conveys the material (or modified
   47275           versions of it) with contractual assumptions of liability to
   47276           the recipient, for any liability that these contractual
   47277           assumptions directly impose on those licensors and authors.
   47278 
   47279      All other non-permissive additional terms are considered "further
   47280      restrictions" within the meaning of section 10.  If the Program as
   47281      you received it, or any part of it, contains a notice stating that
   47282      it is governed by this License along with a term that is a further
   47283      restriction, you may remove that term.  If a license document
   47284      contains a further restriction but permits relicensing or
   47285      conveying under this License, you may add to a covered work
   47286      material governed by the terms of that license document, provided
   47287      that the further restriction does not survive such relicensing or
   47288      conveying.
   47289 
   47290      If you add terms to a covered work in accord with this section, you
   47291      must place, in the relevant source files, a statement of the
   47292      additional terms that apply to those files, or a notice indicating
   47293      where to find the applicable terms.
   47294 
   47295      Additional terms, permissive or non-permissive, may be stated in
   47296      the form of a separately written license, or stated as exceptions;
   47297      the above requirements apply either way.
   47298 
   47299   8. Termination.
   47300 
   47301      You may not propagate or modify a covered work except as expressly
   47302      provided under this License.  Any attempt otherwise to propagate or
   47303      modify it is void, and will automatically terminate your rights
   47304      under this License (including any patent licenses granted under
   47305      the third paragraph of section 11).
   47306 
   47307      However, if you cease all violation of this License, then your
   47308      license from a particular copyright holder is reinstated (a)
   47309      provisionally, unless and until the copyright holder explicitly
   47310      and finally terminates your license, and (b) permanently, if the
   47311      copyright holder fails to notify you of the violation by some
   47312      reasonable means prior to 60 days after the cessation.
   47313 
   47314      Moreover, your license from a particular copyright holder is
   47315      reinstated permanently if the copyright holder notifies you of the
   47316      violation by some reasonable means, this is the first time you have
   47317      received notice of violation of this License (for any work) from
   47318      that copyright holder, and you cure the violation prior to 30 days
   47319      after your receipt of the notice.
   47320 
   47321      Termination of your rights under this section does not terminate
   47322      the licenses of parties who have received copies or rights from
   47323      you under this License.  If your rights have been terminated and
   47324      not permanently reinstated, you do not qualify to receive new
   47325      licenses for the same material under section 10.
   47326 
   47327   9. Acceptance Not Required for Having Copies.
   47328 
   47329      You are not required to accept this License in order to receive or
   47330      run a copy of the Program.  Ancillary propagation of a covered work
   47331      occurring solely as a consequence of using peer-to-peer
   47332      transmission to receive a copy likewise does not require
   47333      acceptance.  However, nothing other than this License grants you
   47334      permission to propagate or modify any covered work.  These actions
   47335      infringe copyright if you do not accept this License.  Therefore,
   47336      by modifying or propagating a covered work, you indicate your
   47337      acceptance of this License to do so.
   47338 
   47339  10. Automatic Licensing of Downstream Recipients.
   47340 
   47341      Each time you convey a covered work, the recipient automatically
   47342      receives a license from the original licensors, to run, modify and
   47343      propagate that work, subject to this License.  You are not
   47344      responsible for enforcing compliance by third parties with this
   47345      License.
   47346 
   47347      An "entity transaction" is a transaction transferring control of an
   47348      organization, or substantially all assets of one, or subdividing an
   47349      organization, or merging organizations.  If propagation of a
   47350      covered work results from an entity transaction, each party to that
   47351      transaction who receives a copy of the work also receives whatever
   47352      licenses to the work the party's predecessor in interest had or
   47353      could give under the previous paragraph, plus a right to
   47354      possession of the Corresponding Source of the work from the
   47355      predecessor in interest, if the predecessor has it or can get it
   47356      with reasonable efforts.
   47357 
   47358      You may not impose any further restrictions on the exercise of the
   47359      rights granted or affirmed under this License.  For example, you
   47360      may not impose a license fee, royalty, or other charge for
   47361      exercise of rights granted under this License, and you may not
   47362      initiate litigation (including a cross-claim or counterclaim in a
   47363      lawsuit) alleging that any patent claim is infringed by making,
   47364      using, selling, offering for sale, or importing the Program or any
   47365      portion of it.
   47366 
   47367  11. Patents.
   47368 
   47369      A "contributor" is a copyright holder who authorizes use under this
   47370      License of the Program or a work on which the Program is based.
   47371      The work thus licensed is called the contributor's "contributor
   47372      version".
   47373 
   47374      A contributor's "essential patent claims" are all patent claims
   47375      owned or controlled by the contributor, whether already acquired or
   47376      hereafter acquired, that would be infringed by some manner,
   47377      permitted by this License, of making, using, or selling its
   47378      contributor version, but do not include claims that would be
   47379      infringed only as a consequence of further modification of the
   47380      contributor version.  For purposes of this definition, "control"
   47381      includes the right to grant patent sublicenses in a manner
   47382      consistent with the requirements of this License.
   47383 
   47384      Each contributor grants you a non-exclusive, worldwide,
   47385      royalty-free patent license under the contributor's essential
   47386      patent claims, to make, use, sell, offer for sale, import and
   47387      otherwise run, modify and propagate the contents of its
   47388      contributor version.
   47389 
   47390      In the following three paragraphs, a "patent license" is any
   47391      express agreement or commitment, however denominated, not to
   47392      enforce a patent (such as an express permission to practice a
   47393      patent or covenant not to sue for patent infringement).  To
   47394      "grant" such a patent license to a party means to make such an
   47395      agreement or commitment not to enforce a patent against the party.
   47396 
   47397      If you convey a covered work, knowingly relying on a patent
   47398      license, and the Corresponding Source of the work is not available
   47399      for anyone to copy, free of charge and under the terms of this
   47400      License, through a publicly available network server or other
   47401      readily accessible means, then you must either (1) cause the
   47402      Corresponding Source to be so available, or (2) arrange to deprive
   47403      yourself of the benefit of the patent license for this particular
   47404      work, or (3) arrange, in a manner consistent with the requirements
   47405      of this License, to extend the patent license to downstream
   47406      recipients.  "Knowingly relying" means you have actual knowledge
   47407      that, but for the patent license, your conveying the covered work
   47408      in a country, or your recipient's use of the covered work in a
   47409      country, would infringe one or more identifiable patents in that
   47410      country that you have reason to believe are valid.
   47411 
   47412      If, pursuant to or in connection with a single transaction or
   47413      arrangement, you convey, or propagate by procuring conveyance of, a
   47414      covered work, and grant a patent license to some of the parties
   47415      receiving the covered work authorizing them to use, propagate,
   47416      modify or convey a specific copy of the covered work, then the
   47417      patent license you grant is automatically extended to all
   47418      recipients of the covered work and works based on it.
   47419 
   47420      A patent license is "discriminatory" if it does not include within
   47421      the scope of its coverage, prohibits the exercise of, or is
   47422      conditioned on the non-exercise of one or more of the rights that
   47423      are specifically granted under this License.  You may not convey a
   47424      covered work if you are a party to an arrangement with a third
   47425      party that is in the business of distributing software, under
   47426      which you make payment to the third party based on the extent of
   47427      your activity of conveying the work, and under which the third
   47428      party grants, to any of the parties who would receive the covered
   47429      work from you, a discriminatory patent license (a) in connection
   47430      with copies of the covered work conveyed by you (or copies made
   47431      from those copies), or (b) primarily for and in connection with
   47432      specific products or compilations that contain the covered work,
   47433      unless you entered into that arrangement, or that patent license
   47434      was granted, prior to 28 March 2007.
   47435 
   47436      Nothing in this License shall be construed as excluding or limiting
   47437      any implied license or other defenses to infringement that may
   47438      otherwise be available to you under applicable patent law.
   47439 
   47440  12. No Surrender of Others' Freedom.
   47441 
   47442      If conditions are imposed on you (whether by court order,
   47443      agreement or otherwise) that contradict the conditions of this
   47444      License, they do not excuse you from the conditions of this
   47445      License.  If you cannot convey a covered work so as to satisfy
   47446      simultaneously your obligations under this License and any other
   47447      pertinent obligations, then as a consequence you may not convey it
   47448      at all.  For example, if you agree to terms that obligate you to
   47449      collect a royalty for further conveying from those to whom you
   47450      convey the Program, the only way you could satisfy both those
   47451      terms and this License would be to refrain entirely from conveying
   47452      the Program.
   47453 
   47454  13. Use with the GNU Affero General Public License.
   47455 
   47456      Notwithstanding any other provision of this License, you have
   47457      permission to link or combine any covered work with a work licensed
   47458      under version 3 of the GNU Affero General Public License into a
   47459      single combined work, and to convey the resulting work.  The terms
   47460      of this License will continue to apply to the part which is the
   47461      covered work, but the special requirements of the GNU Affero
   47462      General Public License, section 13, concerning interaction through
   47463      a network will apply to the combination as such.
   47464 
   47465  14. Revised Versions of this License.
   47466 
   47467      The Free Software Foundation may publish revised and/or new
   47468      versions of the GNU General Public License from time to time.
   47469      Such new versions will be similar in spirit to the present
   47470      version, but may differ in detail to address new problems or
   47471      concerns.
   47472 
   47473      Each version is given a distinguishing version number.  If the
   47474      Program specifies that a certain numbered version of the GNU
   47475      General Public License "or any later version" applies to it, you
   47476      have the option of following the terms and conditions either of
   47477      that numbered version or of any later version published by the
   47478      Free Software Foundation.  If the Program does not specify a
   47479      version number of the GNU General Public License, you may choose
   47480      any version ever published by the Free Software Foundation.
   47481 
   47482      If the Program specifies that a proxy can decide which future
   47483      versions of the GNU General Public License can be used, that
   47484      proxy's public statement of acceptance of a version permanently
   47485      authorizes you to choose that version for the Program.
   47486 
   47487      Later license versions may give you additional or different
   47488      permissions.  However, no additional obligations are imposed on any
   47489      author or copyright holder as a result of your choosing to follow a
   47490      later version.
   47491 
   47492  15. Disclaimer of Warranty.
   47493 
   47494      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   47495      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   47496      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   47497      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   47498      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   47499      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   47500      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   47501      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   47502      NECESSARY SERVICING, REPAIR OR CORRECTION.
   47503 
   47504  16. Limitation of Liability.
   47505 
   47506      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   47507      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   47508      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
   47509      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   47510      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   47511      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   47512      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   47513      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   47514      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   47515      THE POSSIBILITY OF SUCH DAMAGES.
   47516 
   47517  17. Interpretation of Sections 15 and 16.
   47518 
   47519      If the disclaimer of warranty and limitation of liability provided
   47520      above cannot be given local legal effect according to their terms,
   47521      reviewing courts shall apply local law that most closely
   47522      approximates an absolute waiver of all civil liability in
   47523      connection with the Program, unless a warranty or assumption of
   47524      liability accompanies a copy of the Program in return for a fee.
   47525 
   47526 
   47527 END OF TERMS AND CONDITIONS
   47528 ===========================
   47529 
   47530 How to Apply These Terms to Your New Programs
   47531 =============================================
   47532 
   47533 If you develop a new program, and you want it to be of the greatest
   47534 possible use to the public, the best way to achieve this is to make it
   47535 free software which everyone can redistribute and change under these
   47536 terms.
   47537 
   47538  To do so, attach the following notices to the program.  It is safest
   47539 to attach them to the start of each source file to most effectively
   47540 state the exclusion of warranty; and each file should have at least the
   47541 "copyright" line and a pointer to where the full notice is found.
   47542 
   47543      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   47544      Copyright (C) YEAR NAME OF AUTHOR
   47545 
   47546      This program is free software: you can redistribute it and/or modify
   47547      it under the terms of the GNU General Public License as published by
   47548      the Free Software Foundation, either version 3 of the License, or (at
   47549      your option) any later version.
   47550 
   47551      This program is distributed in the hope that it will be useful, but
   47552      WITHOUT ANY WARRANTY; without even the implied warranty of
   47553      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   47554      General Public License for more details.
   47555 
   47556      You should have received a copy of the GNU General Public License
   47557      along with this program.  If not, see `http://www.gnu.org/licenses/'.
   47558 
   47559  Also add information on how to contact you by electronic and paper
   47560 mail.
   47561 
   47562  If the program does terminal interaction, make it output a short
   47563 notice like this when it starts in an interactive mode:
   47564 
   47565      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   47566      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   47567      This is free software, and you are welcome to redistribute it
   47568      under certain conditions; type `show c' for details.
   47569 
   47570  The hypothetical commands `show w' and `show c' should show the
   47571 appropriate parts of the General Public License.  Of course, your
   47572 program's commands might be different; for a GUI interface, you would
   47573 use an "about box".
   47574 
   47575  You should also get your employer (if you work as a programmer) or
   47576 school, if any, to sign a "copyright disclaimer" for the program, if
   47577 necessary.  For more information on this, and how to apply and follow
   47578 the GNU GPL, see `http://www.gnu.org/licenses/'.
   47579 
   47580  The GNU General Public License does not permit incorporating your
   47581 program into proprietary programs.  If your program is a subroutine
   47582 library, you may consider it more useful to permit linking proprietary
   47583 applications with the library.  If this is what you want to do, use the
   47584 GNU Lesser General Public License instead of this License.  But first,
   47585 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
   47586 
   47587 
   47588 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
   47589 
   47590 GNU Free Documentation License
   47591 ******************************
   47592 
   47593                      Version 1.3, 3 November 2008
   47594 
   47595      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   47596      `http://fsf.org/'
   47597 
   47598      Everyone is permitted to copy and distribute verbatim copies
   47599      of this license document, but changing it is not allowed.
   47600 
   47601   0. PREAMBLE
   47602 
   47603      The purpose of this License is to make a manual, textbook, or other
   47604      functional and useful document "free" in the sense of freedom: to
   47605      assure everyone the effective freedom to copy and redistribute it,
   47606      with or without modifying it, either commercially or
   47607      noncommercially.  Secondarily, this License preserves for the
   47608      author and publisher a way to get credit for their work, while not
   47609      being considered responsible for modifications made by others.
   47610 
   47611      This License is a kind of "copyleft", which means that derivative
   47612      works of the document must themselves be free in the same sense.
   47613      It complements the GNU General Public License, which is a copyleft
   47614      license designed for free software.
   47615 
   47616      We have designed this License in order to use it for manuals for
   47617      free software, because free software needs free documentation: a
   47618      free program should come with manuals providing the same freedoms
   47619      that the software does.  But this License is not limited to
   47620      software manuals; it can be used for any textual work, regardless
   47621      of subject matter or whether it is published as a printed book.
   47622      We recommend this License principally for works whose purpose is
   47623      instruction or reference.
   47624 
   47625   1. APPLICABILITY AND DEFINITIONS
   47626 
   47627      This License applies to any manual or other work, in any medium,
   47628      that contains a notice placed by the copyright holder saying it
   47629      can be distributed under the terms of this License.  Such a notice
   47630      grants a world-wide, royalty-free license, unlimited in duration,
   47631      to use that work under the conditions stated herein.  The
   47632      "Document", below, refers to any such manual or work.  Any member
   47633      of the public is a licensee, and is addressed as "you".  You
   47634      accept the license if you copy, modify or distribute the work in a
   47635      way requiring permission under copyright law.
   47636 
   47637      A "Modified Version" of the Document means any work containing the
   47638      Document or a portion of it, either copied verbatim, or with
   47639      modifications and/or translated into another language.
   47640 
   47641      A "Secondary Section" is a named appendix or a front-matter section
   47642      of the Document that deals exclusively with the relationship of the
   47643      publishers or authors of the Document to the Document's overall
   47644      subject (or to related matters) and contains nothing that could
   47645      fall directly within that overall subject.  (Thus, if the Document
   47646      is in part a textbook of mathematics, a Secondary Section may not
   47647      explain any mathematics.)  The relationship could be a matter of
   47648      historical connection with the subject or with related matters, or
   47649      of legal, commercial, philosophical, ethical or political position
   47650      regarding them.
   47651 
   47652      The "Invariant Sections" are certain Secondary Sections whose
   47653      titles are designated, as being those of Invariant Sections, in
   47654      the notice that says that the Document is released under this
   47655      License.  If a section does not fit the above definition of
   47656      Secondary then it is not allowed to be designated as Invariant.
   47657      The Document may contain zero Invariant Sections.  If the Document
   47658      does not identify any Invariant Sections then there are none.
   47659 
   47660      The "Cover Texts" are certain short passages of text that are
   47661      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   47662      that says that the Document is released under this License.  A
   47663      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   47664      be at most 25 words.
   47665 
   47666      A "Transparent" copy of the Document means a machine-readable copy,
   47667      represented in a format whose specification is available to the
   47668      general public, that is suitable for revising the document
   47669      straightforwardly with generic text editors or (for images
   47670      composed of pixels) generic paint programs or (for drawings) some
   47671      widely available drawing editor, and that is suitable for input to
   47672      text formatters or for automatic translation to a variety of
   47673      formats suitable for input to text formatters.  A copy made in an
   47674      otherwise Transparent file format whose markup, or absence of
   47675      markup, has been arranged to thwart or discourage subsequent
   47676      modification by readers is not Transparent.  An image format is
   47677      not Transparent if used for any substantial amount of text.  A
   47678      copy that is not "Transparent" is called "Opaque".
   47679 
   47680      Examples of suitable formats for Transparent copies include plain
   47681      ASCII without markup, Texinfo input format, LaTeX input format,
   47682      SGML or XML using a publicly available DTD, and
   47683      standard-conforming simple HTML, PostScript or PDF designed for
   47684      human modification.  Examples of transparent image formats include
   47685      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   47686      can be read and edited only by proprietary word processors, SGML or
   47687      XML for which the DTD and/or processing tools are not generally
   47688      available, and the machine-generated HTML, PostScript or PDF
   47689      produced by some word processors for output purposes only.
   47690 
   47691      The "Title Page" means, for a printed book, the title page itself,
   47692      plus such following pages as are needed to hold, legibly, the
   47693      material this License requires to appear in the title page.  For
   47694      works in formats which do not have any title page as such, "Title
   47695      Page" means the text near the most prominent appearance of the
   47696      work's title, preceding the beginning of the body of the text.
   47697 
   47698      The "publisher" means any person or entity that distributes copies
   47699      of the Document to the public.
   47700 
   47701      A section "Entitled XYZ" means a named subunit of the Document
   47702      whose title either is precisely XYZ or contains XYZ in parentheses
   47703      following text that translates XYZ in another language.  (Here XYZ
   47704      stands for a specific section name mentioned below, such as
   47705      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   47706      To "Preserve the Title" of such a section when you modify the
   47707      Document means that it remains a section "Entitled XYZ" according
   47708      to this definition.
   47709 
   47710      The Document may include Warranty Disclaimers next to the notice
   47711      which states that this License applies to the Document.  These
   47712      Warranty Disclaimers are considered to be included by reference in
   47713      this License, but only as regards disclaiming warranties: any other
   47714      implication that these Warranty Disclaimers may have is void and
   47715      has no effect on the meaning of this License.
   47716 
   47717   2. VERBATIM COPYING
   47718 
   47719      You may copy and distribute the Document in any medium, either
   47720      commercially or noncommercially, provided that this License, the
   47721      copyright notices, and the license notice saying this License
   47722      applies to the Document are reproduced in all copies, and that you
   47723      add no other conditions whatsoever to those of this License.  You
   47724      may not use technical measures to obstruct or control the reading
   47725      or further copying of the copies you make or distribute.  However,
   47726      you may accept compensation in exchange for copies.  If you
   47727      distribute a large enough number of copies you must also follow
   47728      the conditions in section 3.
   47729 
   47730      You may also lend copies, under the same conditions stated above,
   47731      and you may publicly display copies.
   47732 
   47733   3. COPYING IN QUANTITY
   47734 
   47735      If you publish printed copies (or copies in media that commonly
   47736      have printed covers) of the Document, numbering more than 100, and
   47737      the Document's license notice requires Cover Texts, you must
   47738      enclose the copies in covers that carry, clearly and legibly, all
   47739      these Cover Texts: Front-Cover Texts on the front cover, and
   47740      Back-Cover Texts on the back cover.  Both covers must also clearly
   47741      and legibly identify you as the publisher of these copies.  The
   47742      front cover must present the full title with all words of the
   47743      title equally prominent and visible.  You may add other material
   47744      on the covers in addition.  Copying with changes limited to the
   47745      covers, as long as they preserve the title of the Document and
   47746      satisfy these conditions, can be treated as verbatim copying in
   47747      other respects.
   47748 
   47749      If the required texts for either cover are too voluminous to fit
   47750      legibly, you should put the first ones listed (as many as fit
   47751      reasonably) on the actual cover, and continue the rest onto
   47752      adjacent pages.
   47753 
   47754      If you publish or distribute Opaque copies of the Document
   47755      numbering more than 100, you must either include a
   47756      machine-readable Transparent copy along with each Opaque copy, or
   47757      state in or with each Opaque copy a computer-network location from
   47758      which the general network-using public has access to download
   47759      using public-standard network protocols a complete Transparent
   47760      copy of the Document, free of added material.  If you use the
   47761      latter option, you must take reasonably prudent steps, when you
   47762      begin distribution of Opaque copies in quantity, to ensure that
   47763      this Transparent copy will remain thus accessible at the stated
   47764      location until at least one year after the last time you
   47765      distribute an Opaque copy (directly or through your agents or
   47766      retailers) of that edition to the public.
   47767 
   47768      It is requested, but not required, that you contact the authors of
   47769      the Document well before redistributing any large number of
   47770      copies, to give them a chance to provide you with an updated
   47771      version of the Document.
   47772 
   47773   4. MODIFICATIONS
   47774 
   47775      You may copy and distribute a Modified Version of the Document
   47776      under the conditions of sections 2 and 3 above, provided that you
   47777      release the Modified Version under precisely this License, with
   47778      the Modified Version filling the role of the Document, thus
   47779      licensing distribution and modification of the Modified Version to
   47780      whoever possesses a copy of it.  In addition, you must do these
   47781      things in the Modified Version:
   47782 
   47783        A. Use in the Title Page (and on the covers, if any) a title
   47784           distinct from that of the Document, and from those of
   47785           previous versions (which should, if there were any, be listed
   47786           in the History section of the Document).  You may use the
   47787           same title as a previous version if the original publisher of
   47788           that version gives permission.
   47789 
   47790        B. List on the Title Page, as authors, one or more persons or
   47791           entities responsible for authorship of the modifications in
   47792           the Modified Version, together with at least five of the
   47793           principal authors of the Document (all of its principal
   47794           authors, if it has fewer than five), unless they release you
   47795           from this requirement.
   47796 
   47797        C. State on the Title page the name of the publisher of the
   47798           Modified Version, as the publisher.
   47799 
   47800        D. Preserve all the copyright notices of the Document.
   47801 
   47802        E. Add an appropriate copyright notice for your modifications
   47803           adjacent to the other copyright notices.
   47804 
   47805        F. Include, immediately after the copyright notices, a license
   47806           notice giving the public permission to use the Modified
   47807           Version under the terms of this License, in the form shown in
   47808           the Addendum below.
   47809 
   47810        G. Preserve in that license notice the full lists of Invariant
   47811           Sections and required Cover Texts given in the Document's
   47812           license notice.
   47813 
   47814        H. Include an unaltered copy of this License.
   47815 
   47816        I. Preserve the section Entitled "History", Preserve its Title,
   47817           and add to it an item stating at least the title, year, new
   47818           authors, and publisher of the Modified Version as given on
   47819           the Title Page.  If there is no section Entitled "History" in
   47820           the Document, create one stating the title, year, authors,
   47821           and publisher of the Document as given on its Title Page,
   47822           then add an item describing the Modified Version as stated in
   47823           the previous sentence.
   47824 
   47825        J. Preserve the network location, if any, given in the Document
   47826           for public access to a Transparent copy of the Document, and
   47827           likewise the network locations given in the Document for
   47828           previous versions it was based on.  These may be placed in
   47829           the "History" section.  You may omit a network location for a
   47830           work that was published at least four years before the
   47831           Document itself, or if the original publisher of the version
   47832           it refers to gives permission.
   47833 
   47834        K. For any section Entitled "Acknowledgements" or "Dedications",
   47835           Preserve the Title of the section, and preserve in the
   47836           section all the substance and tone of each of the contributor
   47837           acknowledgements and/or dedications given therein.
   47838 
   47839        L. Preserve all the Invariant Sections of the Document,
   47840           unaltered in their text and in their titles.  Section numbers
   47841           or the equivalent are not considered part of the section
   47842           titles.
   47843 
   47844        M. Delete any section Entitled "Endorsements".  Such a section
   47845           may not be included in the Modified Version.
   47846 
   47847        N. Do not retitle any existing section to be Entitled
   47848           "Endorsements" or to conflict in title with any Invariant
   47849           Section.
   47850 
   47851        O. Preserve any Warranty Disclaimers.
   47852 
   47853      If the Modified Version includes new front-matter sections or
   47854      appendices that qualify as Secondary Sections and contain no
   47855      material copied from the Document, you may at your option
   47856      designate some or all of these sections as invariant.  To do this,
   47857      add their titles to the list of Invariant Sections in the Modified
   47858      Version's license notice.  These titles must be distinct from any
   47859      other section titles.
   47860 
   47861      You may add a section Entitled "Endorsements", provided it contains
   47862      nothing but endorsements of your Modified Version by various
   47863      parties--for example, statements of peer review or that the text
   47864      has been approved by an organization as the authoritative
   47865      definition of a standard.
   47866 
   47867      You may add a passage of up to five words as a Front-Cover Text,
   47868      and a passage of up to 25 words as a Back-Cover Text, to the end
   47869      of the list of Cover Texts in the Modified Version.  Only one
   47870      passage of Front-Cover Text and one of Back-Cover Text may be
   47871      added by (or through arrangements made by) any one entity.  If the
   47872      Document already includes a cover text for the same cover,
   47873      previously added by you or by arrangement made by the same entity
   47874      you are acting on behalf of, you may not add another; but you may
   47875      replace the old one, on explicit permission from the previous
   47876      publisher that added the old one.
   47877 
   47878      The author(s) and publisher(s) of the Document do not by this
   47879      License give permission to use their names for publicity for or to
   47880      assert or imply endorsement of any Modified Version.
   47881 
   47882   5. COMBINING DOCUMENTS
   47883 
   47884      You may combine the Document with other documents released under
   47885      this License, under the terms defined in section 4 above for
   47886      modified versions, provided that you include in the combination
   47887      all of the Invariant Sections of all of the original documents,
   47888      unmodified, and list them all as Invariant Sections of your
   47889      combined work in its license notice, and that you preserve all
   47890      their Warranty Disclaimers.
   47891 
   47892      The combined work need only contain one copy of this License, and
   47893      multiple identical Invariant Sections may be replaced with a single
   47894      copy.  If there are multiple Invariant Sections with the same name
   47895      but different contents, make the title of each such section unique
   47896      by adding at the end of it, in parentheses, the name of the
   47897      original author or publisher of that section if known, or else a
   47898      unique number.  Make the same adjustment to the section titles in
   47899      the list of Invariant Sections in the license notice of the
   47900      combined work.
   47901 
   47902      In the combination, you must combine any sections Entitled
   47903      "History" in the various original documents, forming one section
   47904      Entitled "History"; likewise combine any sections Entitled
   47905      "Acknowledgements", and any sections Entitled "Dedications".  You
   47906      must delete all sections Entitled "Endorsements."
   47907 
   47908   6. COLLECTIONS OF DOCUMENTS
   47909 
   47910      You may make a collection consisting of the Document and other
   47911      documents released under this License, and replace the individual
   47912      copies of this License in the various documents with a single copy
   47913      that is included in the collection, provided that you follow the
   47914      rules of this License for verbatim copying of each of the
   47915      documents in all other respects.
   47916 
   47917      You may extract a single document from such a collection, and
   47918      distribute it individually under this License, provided you insert
   47919      a copy of this License into the extracted document, and follow
   47920      this License in all other respects regarding verbatim copying of
   47921      that document.
   47922 
   47923   7. AGGREGATION WITH INDEPENDENT WORKS
   47924 
   47925      A compilation of the Document or its derivatives with other
   47926      separate and independent documents or works, in or on a volume of
   47927      a storage or distribution medium, is called an "aggregate" if the
   47928      copyright resulting from the compilation is not used to limit the
   47929      legal rights of the compilation's users beyond what the individual
   47930      works permit.  When the Document is included in an aggregate, this
   47931      License does not apply to the other works in the aggregate which
   47932      are not themselves derivative works of the Document.
   47933 
   47934      If the Cover Text requirement of section 3 is applicable to these
   47935      copies of the Document, then if the Document is less than one half
   47936      of the entire aggregate, the Document's Cover Texts may be placed
   47937      on covers that bracket the Document within the aggregate, or the
   47938      electronic equivalent of covers if the Document is in electronic
   47939      form.  Otherwise they must appear on printed covers that bracket
   47940      the whole aggregate.
   47941 
   47942   8. TRANSLATION
   47943 
   47944      Translation is considered a kind of modification, so you may
   47945      distribute translations of the Document under the terms of section
   47946      4.  Replacing Invariant Sections with translations requires special
   47947      permission from their copyright holders, but you may include
   47948      translations of some or all Invariant Sections in addition to the
   47949      original versions of these Invariant Sections.  You may include a
   47950      translation of this License, and all the license notices in the
   47951      Document, and any Warranty Disclaimers, provided that you also
   47952      include the original English version of this License and the
   47953      original versions of those notices and disclaimers.  In case of a
   47954      disagreement between the translation and the original version of
   47955      this License or a notice or disclaimer, the original version will
   47956      prevail.
   47957 
   47958      If a section in the Document is Entitled "Acknowledgements",
   47959      "Dedications", or "History", the requirement (section 4) to
   47960      Preserve its Title (section 1) will typically require changing the
   47961      actual title.
   47962 
   47963   9. TERMINATION
   47964 
   47965      You may not copy, modify, sublicense, or distribute the Document
   47966      except as expressly provided under this License.  Any attempt
   47967      otherwise to copy, modify, sublicense, or distribute it is void,
   47968      and will automatically terminate your rights under this License.
   47969 
   47970      However, if you cease all violation of this License, then your
   47971      license from a particular copyright holder is reinstated (a)
   47972      provisionally, unless and until the copyright holder explicitly
   47973      and finally terminates your license, and (b) permanently, if the
   47974      copyright holder fails to notify you of the violation by some
   47975      reasonable means prior to 60 days after the cessation.
   47976 
   47977      Moreover, your license from a particular copyright holder is
   47978      reinstated permanently if the copyright holder notifies you of the
   47979      violation by some reasonable means, this is the first time you have
   47980      received notice of violation of this License (for any work) from
   47981      that copyright holder, and you cure the violation prior to 30 days
   47982      after your receipt of the notice.
   47983 
   47984      Termination of your rights under this section does not terminate
   47985      the licenses of parties who have received copies or rights from
   47986      you under this License.  If your rights have been terminated and
   47987      not permanently reinstated, receipt of a copy of some or all of
   47988      the same material does not give you any rights to use it.
   47989 
   47990  10. FUTURE REVISIONS OF THIS LICENSE
   47991 
   47992      The Free Software Foundation may publish new, revised versions of
   47993      the GNU Free Documentation License from time to time.  Such new
   47994      versions will be similar in spirit to the present version, but may
   47995      differ in detail to address new problems or concerns.  See
   47996      `http://www.gnu.org/copyleft/'.
   47997 
   47998      Each version of the License is given a distinguishing version
   47999      number.  If the Document specifies that a particular numbered
   48000      version of this License "or any later version" applies to it, you
   48001      have the option of following the terms and conditions either of
   48002      that specified version or of any later version that has been
   48003      published (not as a draft) by the Free Software Foundation.  If
   48004      the Document does not specify a version number of this License,
   48005      you may choose any version ever published (not as a draft) by the
   48006      Free Software Foundation.  If the Document specifies that a proxy
   48007      can decide which future versions of this License can be used, that
   48008      proxy's public statement of acceptance of a version permanently
   48009      authorizes you to choose that version for the Document.
   48010 
   48011  11. RELICENSING
   48012 
   48013      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   48014      World Wide Web server that publishes copyrightable works and also
   48015      provides prominent facilities for anybody to edit those works.  A
   48016      public wiki that anybody can edit is an example of such a server.
   48017      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   48018      site means any set of copyrightable works thus published on the MMC
   48019      site.
   48020 
   48021      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   48022      license published by Creative Commons Corporation, a not-for-profit
   48023      corporation with a principal place of business in San Francisco,
   48024      California, as well as future copyleft versions of that license
   48025      published by that same organization.
   48026 
   48027      "Incorporate" means to publish or republish a Document, in whole or
   48028      in part, as part of another Document.
   48029 
   48030      An MMC is "eligible for relicensing" if it is licensed under this
   48031      License, and if all works that were first published under this
   48032      License somewhere other than this MMC, and subsequently
   48033      incorporated in whole or in part into the MMC, (1) had no cover
   48034      texts or invariant sections, and (2) were thus incorporated prior
   48035      to November 1, 2008.
   48036 
   48037      The operator of an MMC Site may republish an MMC contained in the
   48038      site under CC-BY-SA on the same site at any time before August 1,
   48039      2009, provided the MMC is eligible for relicensing.
   48040 
   48041 
   48042 ADDENDUM: How to use this License for your documents
   48043 ====================================================
   48044 
   48045 To use this License in a document you have written, include a copy of
   48046 the License in the document and put the following copyright and license
   48047 notices just after the title page:
   48048 
   48049        Copyright (C)  YEAR  YOUR NAME.
   48050        Permission is granted to copy, distribute and/or modify this document
   48051        under the terms of the GNU Free Documentation License, Version 1.3
   48052        or any later version published by the Free Software Foundation;
   48053        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   48054        Texts.  A copy of the license is included in the section entitled ``GNU
   48055        Free Documentation License''.
   48056 
   48057  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
   48058 replace the "with...Texts." line with this:
   48059 
   48060          with the Invariant Sections being LIST THEIR TITLES, with
   48061          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   48062          being LIST.
   48063 
   48064  If you have Invariant Sections without Cover Texts, or some other
   48065 combination of the three, merge those two alternatives to suit the
   48066 situation.
   48067 
   48068  If your document contains nontrivial examples of program code, we
   48069 recommend releasing these examples in parallel under your choice of
   48070 free software license, such as the GNU General Public License, to
   48071 permit their use in free software.
   48072 
   48073 
   48074 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
   48075 
   48076 Contributors to GCC
   48077 *******************
   48078 
   48079 The GCC project would like to thank its many contributors.  Without
   48080 them the project would not have been nearly as successful as it has
   48081 been.  Any omissions in this list are accidental.  Feel free to contact
   48082 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or
   48083 some of your contributions are not listed.  Please keep this list in
   48084 alphabetical order.
   48085 
   48086    * Analog Devices helped implement the support for complex data types
   48087      and iterators.
   48088 
   48089    * John David Anglin for threading-related fixes and improvements to
   48090      libstdc++-v3, and the HP-UX port.
   48091 
   48092    * James van Artsdalen wrote the code that makes efficient use of the
   48093      Intel 80387 register stack.
   48094 
   48095    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
   48096      Series port.
   48097 
   48098    * Alasdair Baird for various bug fixes.
   48099 
   48100    * Giovanni Bajo for analyzing lots of complicated C++ problem
   48101      reports.
   48102 
   48103    * Peter Barada for his work to improve code generation for new
   48104      ColdFire cores.
   48105 
   48106    * Gerald Baumgartner added the signature extension to the C++ front
   48107      end.
   48108 
   48109    * Godmar Back for his Java improvements and encouragement.
   48110 
   48111    * Scott Bambrough for help porting the Java compiler.
   48112 
   48113    * Wolfgang Bangerth for processing tons of bug reports.
   48114 
   48115    * Jon Beniston for his Microsoft Windows port of Java and port to
   48116      Lattice Mico32.
   48117 
   48118    * Daniel Berlin for better DWARF2 support, faster/better
   48119      optimizations, improved alias analysis, plus migrating GCC to
   48120      Bugzilla.
   48121 
   48122    * Geoff Berry for his Java object serialization work and various
   48123      patches.
   48124 
   48125    * David Binderman tests weekly snapshots of GCC trunk against Fedora
   48126      Rawhide for several architectures.
   48127 
   48128    * Uros Bizjak for the implementation of x87 math built-in functions
   48129      and for various middle end and i386 back end improvements and bug
   48130      fixes.
   48131 
   48132    * Eric Blake for helping to make GCJ and libgcj conform to the
   48133      specifications.
   48134 
   48135    * Janne Blomqvist for contributions to GNU Fortran.
   48136 
   48137    * Segher Boessenkool for various fixes.
   48138 
   48139    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
   48140      other Java work.
   48141 
   48142    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
   48143      miscellaneous clean-ups.
   48144 
   48145    * Steven Bosscher for integrating the GNU Fortran front end into GCC
   48146      and for contributing to the tree-ssa branch.
   48147 
   48148    * Eric Botcazou for fixing middle- and backend bugs left and right.
   48149 
   48150    * Per Bothner for his direction via the steering committee and
   48151      various improvements to the infrastructure for supporting new
   48152      languages.  Chill front end implementation.  Initial
   48153      implementations of cpplib, fix-header, config.guess, libio, and
   48154      past C++ library (libg++) maintainer.  Dreaming up, designing and
   48155      implementing much of GCJ.
   48156 
   48157    * Devon Bowen helped port GCC to the Tahoe.
   48158 
   48159    * Don Bowman for mips-vxworks contributions.
   48160 
   48161    * Dave Brolley for work on cpplib and Chill.
   48162 
   48163    * Paul Brook for work on the ARM architecture and maintaining GNU
   48164      Fortran.
   48165 
   48166    * Robert Brown implemented the support for Encore 32000 systems.
   48167 
   48168    * Christian Bruel for improvements to local store elimination.
   48169 
   48170    * Herman A.J. ten Brugge for various fixes.
   48171 
   48172    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
   48173      FAQ.
   48174 
   48175    * Joe Buck for his direction via the steering committee.
   48176 
   48177    * Craig Burley for leadership of the G77 Fortran effort.
   48178 
   48179    * Stephan Buys for contributing Doxygen notes for libstdc++.
   48180 
   48181    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
   48182      to the C++ strings, streambufs and formatted I/O, hard detective
   48183      work on the frustrating localization issues, and keeping up with
   48184      the problem reports.
   48185 
   48186    * John Carr for his alias work, SPARC hacking, infrastructure
   48187      improvements, previous contributions to the steering committee,
   48188      loop optimizations, etc.
   48189 
   48190    * Stephane Carrez for 68HC11 and 68HC12 ports.
   48191 
   48192    * Steve Chamberlain for support for the Renesas SH and H8 processors
   48193      and the PicoJava processor, and for GCJ config fixes.
   48194 
   48195    * Glenn Chambers for help with the GCJ FAQ.
   48196 
   48197    * John-Marc Chandonia for various libgcj patches.
   48198 
   48199    * Denis Chertykov for contributing and maintaining the AVR port, the
   48200      first GCC port for an 8-bit architecture.
   48201 
   48202    * Scott Christley for his Objective-C contributions.
   48203 
   48204    * Eric Christopher for his Java porting help and clean-ups.
   48205 
   48206    * Branko Cibej for more warning contributions.
   48207 
   48208    * The GNU Classpath project for all of their merged runtime code.
   48209 
   48210    * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
   48211      and other random hacking.
   48212 
   48213    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
   48214 
   48215    * R. Kelley Cook for making GCC buildable from a read-only directory
   48216      as well as other miscellaneous build process and documentation
   48217      clean-ups.
   48218 
   48219    * Ralf Corsepius for SH testing and minor bug fixing.
   48220 
   48221    * Stan Cox for care and feeding of the x86 port and lots of behind
   48222      the scenes hacking.
   48223 
   48224    * Alex Crain provided changes for the 3b1.
   48225 
   48226    * Ian Dall for major improvements to the NS32k port.
   48227 
   48228    * Paul Dale for his work to add uClinux platform support to the m68k
   48229      backend.
   48230 
   48231    * Dario Dariol contributed the four varieties of sample programs
   48232      that print a copy of their source.
   48233 
   48234    * Russell Davidson for fstream and stringstream fixes in libstdc++.
   48235 
   48236    * Bud Davis for work on the G77 and GNU Fortran compilers.
   48237 
   48238    * Mo DeJong for GCJ and libgcj bug fixes.
   48239 
   48240    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
   48241      various bug fixes, and the M32C, MeP, and RL78 ports.
   48242 
   48243    * Arnaud Desitter for helping to debug GNU Fortran.
   48244 
   48245    * Gabriel Dos Reis for contributions to G++, contributions and
   48246      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
   48247      including `valarray<>', `complex<>', maintaining the numerics
   48248      library (including that pesky `<limits>' :-) and keeping
   48249      up-to-date anything to do with numbers.
   48250 
   48251    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
   48252      ISO C99 support, CFG dumping support, etc., plus support of the
   48253      C++ runtime libraries including for all kinds of C interface
   48254      issues, contributing and maintaining `complex<>', sanity checking
   48255      and disbursement, configuration architecture, libio maintenance,
   48256      and early math work.
   48257 
   48258    * Zdenek Dvorak for a new loop unroller and various fixes.
   48259 
   48260    * Michael Eager for his work on the Xilinx MicroBlaze port.
   48261 
   48262    * Richard Earnshaw for his ongoing work with the ARM.
   48263 
   48264    * David Edelsohn for his direction via the steering committee,
   48265      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
   48266      loop changes, doing the entire AIX port of libstdc++ with his bare
   48267      hands, and for ensuring GCC properly keeps working on AIX.
   48268 
   48269    * Kevin Ediger for the floating point formatting of num_put::do_put
   48270      in libstdc++.
   48271 
   48272    * Phil Edwards for libstdc++ work including configuration hackery,
   48273      documentation maintainer, chief breaker of the web pages, the
   48274      occasional iostream bug fix, and work on shared library symbol
   48275      versioning.
   48276 
   48277    * Paul Eggert for random hacking all over GCC.
   48278 
   48279    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
   48280      configuration support for locales and fstream-related fixes.
   48281 
   48282    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
   48283      iostreams.
   48284 
   48285    * Christian Ehrhardt for dealing with bug reports.
   48286 
   48287    * Ben Elliston for his work to move the Objective-C runtime into its
   48288      own subdirectory and for his work on autoconf.
   48289 
   48290    * Revital Eres for work on the PowerPC 750CL port.
   48291 
   48292    * Marc Espie for OpenBSD support.
   48293 
   48294    * Doug Evans for much of the global optimization framework, arc,
   48295      m32r, and SPARC work.
   48296 
   48297    * Christopher Faylor for his work on the Cygwin port and for caring
   48298      and feeding the gcc.gnu.org box and saving its users tons of spam.
   48299 
   48300    * Fred Fish for BeOS support and Ada fixes.
   48301 
   48302    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
   48303 
   48304    * Peter Gerwinski for various bug fixes and the Pascal front end.
   48305 
   48306    * Kaveh R. Ghazi for his direction via the steering committee,
   48307      amazing work to make `-W -Wall -W* -Werror' useful, and testing
   48308      GCC on a plethora of platforms.  Kaveh extends his gratitude to
   48309      the CAIP Center at Rutgers University for providing him with
   48310      computing resources to work on Free Software from the late 1980s
   48311      to 2010.
   48312 
   48313    * John Gilmore for a donation to the FSF earmarked improving GNU
   48314      Java.
   48315 
   48316    * Judy Goldberg for c++ contributions.
   48317 
   48318    * Torbjorn Granlund for various fixes and the c-torture testsuite,
   48319      multiply- and divide-by-constant optimization, improved long long
   48320      support, improved leaf function register allocation, and his
   48321      direction via the steering committee.
   48322 
   48323    * Anthony Green for his `-Os' contributions, the moxie port, and
   48324      Java front end work.
   48325 
   48326    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
   48327      Java code.
   48328 
   48329    * Michael K. Gschwind contributed the port to the PDP-11.
   48330 
   48331    * Richard Guenther for his ongoing middle-end contributions and bug
   48332      fixes and for release management.
   48333 
   48334    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
   48335      the support for Dwarf symbolic debugging information, and much of
   48336      the support for System V Release 4.  He has also worked heavily on
   48337      the Intel 386 and 860 support.
   48338 
   48339    * Sumanth Gundapaneni for contributing the CR16 port.
   48340 
   48341    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
   48342      GCSE.
   48343 
   48344    * Bruno Haible for improvements in the runtime overhead for EH, new
   48345      warnings and assorted bug fixes.
   48346 
   48347    * Andrew Haley for his amazing Java compiler and library efforts.
   48348 
   48349    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
   48350      series 300.
   48351 
   48352    * Michael Hayes for various thankless work he's done trying to get
   48353      the c30/c40 ports functional.  Lots of loop and unroll
   48354      improvements and fixes.
   48355 
   48356    * Dara Hazeghi for wading through myriads of target-specific bug
   48357      reports.
   48358 
   48359    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
   48360 
   48361    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
   48362      work, loop opts, and generally fixing lots of old problems we've
   48363      ignored for years, flow rewrite and lots of further stuff,
   48364      including reviewing tons of patches.
   48365 
   48366    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
   48367      various fixes.
   48368 
   48369    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
   48370      contributed the support for the Sony NEWS machine.
   48371 
   48372    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
   48373      various fixes.
   48374 
   48375    * Katherine Holcomb for work on GNU Fortran.
   48376 
   48377    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
   48378      of testing and bug fixing, particularly of GCC configury code.
   48379 
   48380    * Steve Holmgren for MachTen patches.
   48381 
   48382    * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
   48383 
   48384    * Jan Hubicka for his x86 port improvements.
   48385 
   48386    * Falk Hueffner for working on C and optimization bug reports.
   48387 
   48388    * Bernardo Innocenti for his m68k work, including merging of
   48389      ColdFire improvements and uClinux support.
   48390 
   48391    * Christian Iseli for various bug fixes.
   48392 
   48393    * Kamil Iskra for general m68k hacking.
   48394 
   48395    * Lee Iverson for random fixes and MIPS testing.
   48396 
   48397    * Andreas Jaeger for testing and benchmarking of GCC and various bug
   48398      fixes.
   48399 
   48400    * Jakub Jelinek for his SPARC work and sibling call optimizations as
   48401      well as lots of bug fixes and test cases, and for improving the
   48402      Java build system.
   48403 
   48404    * Janis Johnson for ia64 testing and fixes, her quality improvement
   48405      sidetracks, and web page maintenance.
   48406 
   48407    * Kean Johnston for SCO OpenServer support and various fixes.
   48408 
   48409    * Tim Josling for the sample language treelang based originally on
   48410      Richard Kenner's "toy" language.
   48411 
   48412    * Nicolai Josuttis for additional libstdc++ documentation.
   48413 
   48414    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
   48415      target.
   48416 
   48417    * Steven G. Kargl for work on GNU Fortran.
   48418 
   48419    * David Kashtan of SRI adapted GCC to VMS.
   48420 
   48421    * Ryszard Kabatek for many, many libstdc++ bug fixes and
   48422      optimizations of strings, especially member functions, and for
   48423      auto_ptr fixes.
   48424 
   48425    * Geoffrey Keating for his ongoing work to make the PPC work for
   48426      GNU/Linux and his automatic regression tester.
   48427 
   48428    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
   48429      work in just about every part of libstdc++.
   48430 
   48431    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
   48432      MIL-STD-1750A.
   48433 
   48434    * Richard Kenner of the New York University Ultracomputer Research
   48435      Laboratory wrote the machine descriptions for the AMD 29000, the
   48436      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
   48437      support for instruction attributes.  He also made changes to
   48438      better support RISC processors including changes to common
   48439      subexpression elimination, strength reduction, function calling
   48440      sequence handling, and condition code support, in addition to
   48441      generalizing the code for frame pointer elimination and delay slot
   48442      scheduling.  Richard Kenner was also the head maintainer of GCC
   48443      for several years.
   48444 
   48445    * Mumit Khan for various contributions to the Cygwin and Mingw32
   48446      ports and maintaining binary releases for Microsoft Windows hosts,
   48447      and for massive libstdc++ porting work to Cygwin/Mingw32.
   48448 
   48449    * Robin Kirkham for cpu32 support.
   48450 
   48451    * Mark Klein for PA improvements.
   48452 
   48453    * Thomas Koenig for various bug fixes.
   48454 
   48455    * Bruce Korb for the new and improved fixincludes code.
   48456 
   48457    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
   48458      effort.
   48459 
   48460    * Charles LaBrec contributed the support for the Integrated Solutions
   48461      68020 system.
   48462 
   48463    * Asher Langton and Mike Kumbera for contributing Cray pointer
   48464      support to GNU Fortran, and for other GNU Fortran improvements.
   48465 
   48466    * Jeff Law for his direction via the steering committee,
   48467      coordinating the entire egcs project and GCC 2.95, rolling out
   48468      snapshots and releases, handling merges from GCC2, reviewing tons
   48469      of patches that might have fallen through the cracks else, and
   48470      random but extensive hacking.
   48471 
   48472    * Walter Lee for work on the TILE-Gx and TILEPro ports.
   48473 
   48474    * Marc Lehmann for his direction via the steering committee and
   48475      helping with analysis and improvements of x86 performance.
   48476 
   48477    * Victor Leikehman for work on GNU Fortran.
   48478 
   48479    * Ted Lemon wrote parts of the RTL reader and printer.
   48480 
   48481    * Kriang Lerdsuwanakij for C++ improvements including template as
   48482      template parameter support, and many C++ fixes.
   48483 
   48484    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
   48485      and random work on the Java front end.
   48486 
   48487    * Alain Lichnewsky ported GCC to the MIPS CPU.
   48488 
   48489    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
   48490      and patches.
   48491 
   48492    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
   48493 
   48494    * Chen Liqin for various S+core related fixes/improvement, and for
   48495      maintaining the S+core port.
   48496 
   48497    * Weiwen Liu for testing and various bug fixes.
   48498 
   48499    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
   48500      diagnostics fixes and improvements.
   48501 
   48502    * Dave Love for his ongoing work with the Fortran front end and
   48503      runtime libraries.
   48504 
   48505    * Martin von Lo"wis for internal consistency checking infrastructure,
   48506      various C++ improvements including namespace support, and tons of
   48507      assistance with libstdc++/compiler merges.
   48508 
   48509    * H.J. Lu for his previous contributions to the steering committee,
   48510      many x86 bug reports, prototype patches, and keeping the GNU/Linux
   48511      ports working.
   48512 
   48513    * Greg McGary for random fixes and (someday) bounded pointers.
   48514 
   48515    * Andrew MacLeod for his ongoing work in building a real EH system,
   48516      various code generation improvements, work on the global
   48517      optimizer, etc.
   48518 
   48519    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
   48520      hacking improvements to compile-time performance, overall
   48521      knowledge and direction in the area of instruction scheduling, and
   48522      design and implementation of the automaton based instruction
   48523      scheduler.
   48524 
   48525    * Bob Manson for his behind the scenes work on dejagnu.
   48526 
   48527    * Philip Martin for lots of libstdc++ string and vector iterator
   48528      fixes and improvements, and string clean up and testsuites.
   48529 
   48530    * All of the Mauve project contributors, for Java test code.
   48531 
   48532    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
   48533 
   48534    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
   48535 
   48536    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
   48537      powerpc, haifa, ECOFF debug support, and other assorted hacking.
   48538 
   48539    * Jason Merrill for his direction via the steering committee and
   48540      leading the G++ effort.
   48541 
   48542    * Martin Michlmayr for testing GCC on several architectures using the
   48543      entire Debian archive.
   48544 
   48545    * David Miller for his direction via the steering committee, lots of
   48546      SPARC work, improvements in jump.c and interfacing with the Linux
   48547      kernel developers.
   48548 
   48549    * Gary Miller ported GCC to Charles River Data Systems machines.
   48550 
   48551    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
   48552      the entire libstdc++ testsuite namespace-compatible.
   48553 
   48554    * Mark Mitchell for his direction via the steering committee,
   48555      mountains of C++ work, load/store hoisting out of loops, alias
   48556      analysis improvements, ISO C `restrict' support, and serving as
   48557      release manager from 2000 to 2011.
   48558 
   48559    * Alan Modra for various GNU/Linux bits and testing.
   48560 
   48561    * Toon Moene for his direction via the steering committee, Fortran
   48562      maintenance, and his ongoing work to make us make Fortran run fast.
   48563 
   48564    * Jason Molenda for major help in the care and feeding of all the
   48565      services on the gcc.gnu.org (formerly egcs.cygnus.com)
   48566      machine--mail, web services, ftp services, etc etc.  Doing all
   48567      this work on scrap paper and the backs of envelopes would have
   48568      been... difficult.
   48569 
   48570    * Catherine Moore for fixing various ugly problems we have sent her
   48571      way, including the haifa bug which was killing the Alpha & PowerPC
   48572      Linux kernels.
   48573 
   48574    * Mike Moreton for his various Java patches.
   48575 
   48576    * David Mosberger-Tang for various Alpha improvements, and for the
   48577      initial IA-64 port.
   48578 
   48579    * Stephen Moshier contributed the floating point emulator that
   48580      assists in cross-compilation and permits support for floating
   48581      point numbers wider than 64 bits and for ISO C99 support.
   48582 
   48583    * Bill Moyer for his behind the scenes work on various issues.
   48584 
   48585    * Philippe De Muyter for his work on the m68k port.
   48586 
   48587    * Joseph S. Myers for his work on the PDP-11 port, format checking
   48588      and ISO C99 support, and continuous emphasis on (and contributions
   48589      to) documentation.
   48590 
   48591    * Nathan Myers for his work on libstdc++-v3: architecture and
   48592      authorship through the first three snapshots, including
   48593      implementation of locale infrastructure, string, shadow C headers,
   48594      and the initial project documentation (DESIGN, CHECKLIST, and so
   48595      forth).  Later, more work on MT-safe string and shadow headers.
   48596 
   48597    * Felix Natter for documentation on porting libstdc++.
   48598 
   48599    * Nathanael Nerode for cleaning up the configuration/build process.
   48600 
   48601    * NeXT, Inc. donated the front end that supports the Objective-C
   48602      language.
   48603 
   48604    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
   48605      the search engine setup, various documentation fixes and other
   48606      small fixes.
   48607 
   48608    * Geoff Noer for his work on getting cygwin native builds working.
   48609 
   48610    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
   48611      tracking web pages, GIMPLE tuples, and assorted fixes.
   48612 
   48613    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
   48614      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
   48615      related infrastructure improvements.
   48616 
   48617    * Alexandre Oliva for various build infrastructure improvements,
   48618      scripts and amazing testing work, including keeping libtool issues
   48619      sane and happy.
   48620 
   48621    * Stefan Olsson for work on mt_alloc.
   48622 
   48623    * Melissa O'Neill for various NeXT fixes.
   48624 
   48625    * Rainer Orth for random MIPS work, including improvements to GCC's
   48626      o32 ABI support, improvements to dejagnu's MIPS support, Java
   48627      configuration clean-ups and porting work, and maintaining the
   48628      IRIX, Solaris 2, and Tru64 UNIX ports.
   48629 
   48630    * Hartmut Penner for work on the s390 port.
   48631 
   48632    * Paul Petersen wrote the machine description for the Alliant FX/8.
   48633 
   48634    * Alexandre Petit-Bianco for implementing much of the Java compiler
   48635      and continued Java maintainership.
   48636 
   48637    * Matthias Pfaller for major improvements to the NS32k port.
   48638 
   48639    * Gerald Pfeifer for his direction via the steering committee,
   48640      pointing out lots of problems we need to solve, maintenance of the
   48641      web pages, and taking care of documentation maintenance in general.
   48642 
   48643    * Andrew Pinski for processing bug reports by the dozen.
   48644 
   48645    * Ovidiu Predescu for his work on the Objective-C front end and
   48646      runtime libraries.
   48647 
   48648    * Jerry Quinn for major performance improvements in C++ formatted
   48649      I/O.
   48650 
   48651    * Ken Raeburn for various improvements to checker, MIPS ports and
   48652      various cleanups in the compiler.
   48653 
   48654    * Rolf W. Rasmussen for hacking on AWT.
   48655 
   48656    * David Reese of Sun Microsystems contributed to the Solaris on
   48657      PowerPC port.
   48658 
   48659    * Volker Reichelt for keeping up with the problem reports.
   48660 
   48661    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
   48662      hacking and developing and maintaining the Epiphany port.
   48663 
   48664    * Loren J. Rittle for improvements to libstdc++-v3 including the
   48665      FreeBSD port, threading fixes, thread-related configury changes,
   48666      critical threading documentation, and solutions to really tricky
   48667      I/O problems, as well as keeping GCC properly working on FreeBSD
   48668      and continuous testing.
   48669 
   48670    * Craig Rodrigues for processing tons of bug reports.
   48671 
   48672    * Ola Ro"nnerup for work on mt_alloc.
   48673 
   48674    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
   48675 
   48676    * David Ronis inspired and encouraged Craig to rewrite the G77
   48677      documentation in texinfo format by contributing a first pass at a
   48678      translation of the old `g77-0.5.16/f/DOC' file.
   48679 
   48680    * Ken Rose for fixes to GCC's delay slot filling code.
   48681 
   48682    * Paul Rubin wrote most of the preprocessor.
   48683 
   48684    * Pe'tur Runo'lfsson for major performance improvements in C++
   48685      formatted I/O and large file support in C++ filebuf.
   48686 
   48687    * Chip Salzenberg for libstdc++ patches and improvements to locales,
   48688      traits, Makefiles, libio, libtool hackery, and "long long" support.
   48689 
   48690    * Juha Sarlin for improvements to the H8 code generator.
   48691 
   48692    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
   48693      300.
   48694 
   48695    * Roger Sayle for improvements to constant folding and GCC's RTL
   48696      optimizers as well as for fixing numerous bugs.
   48697 
   48698    * Bradley Schatz for his work on the GCJ FAQ.
   48699 
   48700    * Peter Schauer wrote the code to allow debugging to work on the
   48701      Alpha.
   48702 
   48703    * William Schelter did most of the work on the Intel 80386 support.
   48704 
   48705    * Tobias Schlu"ter for work on GNU Fortran.
   48706 
   48707    * Bernd Schmidt for various code generation improvements and major
   48708      work in the reload pass, serving as release manager for GCC
   48709      2.95.3, and work on the Blackfin and C6X ports.
   48710 
   48711    * Peter Schmid for constant testing of libstdc++--especially
   48712      application testing, going above and beyond what was requested for
   48713      the release criteria--and libstdc++ header file tweaks.
   48714 
   48715    * Jason Schroeder for jcf-dump patches.
   48716 
   48717    * Andreas Schwab for his work on the m68k port.
   48718 
   48719    * Lars Segerlund for work on GNU Fortran.
   48720 
   48721    * Dodji Seketeli for numerous C++ bug fixes and debug info
   48722      improvements.
   48723 
   48724    * Joel Sherrill for his direction via the steering committee, RTEMS
   48725      contributions and RTEMS testing.
   48726 
   48727    * Nathan Sidwell for many C++ fixes/improvements.
   48728 
   48729    * Jeffrey Siegal for helping RMS with the original design of GCC,
   48730      some code which handles the parse tree and RTL data structures,
   48731      constant folding and help with the original VAX & m68k ports.
   48732 
   48733    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
   48734      from the LWG (thereby keeping GCC in line with updates from the
   48735      ISO).
   48736 
   48737    * Franz Sirl for his ongoing work with making the PPC port stable
   48738      for GNU/Linux.
   48739 
   48740    * Andrey Slepuhin for assorted AIX hacking.
   48741 
   48742    * Trevor Smigiel for contributing the SPU port.
   48743 
   48744    * Christopher Smith did the port for Convex machines.
   48745 
   48746    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
   48747 
   48748    * Randy Smith finished the Sun FPA support.
   48749 
   48750    * Scott Snyder for queue, iterator, istream, and string fixes and
   48751      libstdc++ testsuite entries.  Also for providing the patch to G77
   48752      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
   48753      `LOGICAL*1'.
   48754 
   48755    * Zdenek Sojka for running automated regression testing of GCC and
   48756      reporting numerous bugs.
   48757 
   48758    * Jayant Sonar for contributing the CR16 port.
   48759 
   48760    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
   48761 
   48762    * Richard Stallman, for writing the original GCC and launching the
   48763      GNU project.
   48764 
   48765    * Jan Stein of the Chalmers Computer Society provided support for
   48766      Genix, as well as part of the 32000 machine description.
   48767 
   48768    * Nigel Stephens for various mips16 related fixes/improvements.
   48769 
   48770    * Jonathan Stone wrote the machine description for the Pyramid
   48771      computer.
   48772 
   48773    * Graham Stott for various infrastructure improvements.
   48774 
   48775    * John Stracke for his Java HTTP protocol fixes.
   48776 
   48777    * Mike Stump for his Elxsi port, G++ contributions over the years
   48778      and more recently his vxworks contributions
   48779 
   48780    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
   48781 
   48782    * Shigeya Suzuki for this fixes for the bsdi platforms.
   48783 
   48784    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
   48785      support, general configury hacking, fixincludes, etc.
   48786 
   48787    * Holger Teutsch provided the support for the Clipper CPU.
   48788 
   48789    * Gary Thomas for his ongoing work to make the PPC work for
   48790      GNU/Linux.
   48791 
   48792    * Philipp Thomas for random bug fixes throughout the compiler
   48793 
   48794    * Jason Thorpe for thread support in libstdc++ on NetBSD.
   48795 
   48796    * Kresten Krab Thorup wrote the run time support for the Objective-C
   48797      language and the fantastic Java bytecode interpreter.
   48798 
   48799    * Michael Tiemann for random bug fixes, the first instruction
   48800      scheduler, initial C++ support, function integration, NS32k, SPARC
   48801      and M88k machine description work, delay slot scheduling.
   48802 
   48803    * Andreas Tobler for his work porting libgcj to Darwin.
   48804 
   48805    * Teemu Torma for thread safe exception handling support.
   48806 
   48807    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
   48808      definitions, and of the VAX machine description.
   48809 
   48810    * Daniel Towner and Hariharan Sandanagobalane contributed and
   48811      maintain the picoChip port.
   48812 
   48813    * Tom Tromey for internationalization support and for his many Java
   48814      contributions and libgcj maintainership.
   48815 
   48816    * Lassi Tuura for improvements to config.guess to determine HP
   48817      processor types.
   48818 
   48819    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
   48820 
   48821    * Andy Vaught for the design and initial implementation of the GNU
   48822      Fortran front end.
   48823 
   48824    * Brent Verner for work with the libstdc++ cshadow files and their
   48825      associated configure steps.
   48826 
   48827    * Todd Vierling for contributions for NetBSD ports.
   48828 
   48829    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
   48830      guidance.
   48831 
   48832    * Dean Wakerley for converting the install documentation from HTML
   48833      to texinfo in time for GCC 3.0.
   48834 
   48835    * Krister Walfridsson for random bug fixes.
   48836 
   48837    * Feng Wang for contributions to GNU Fortran.
   48838 
   48839    * Stephen M. Webb for time and effort on making libstdc++ shadow
   48840      files work with the tricky Solaris 8+ headers, and for pushing the
   48841      build-time header tree.
   48842 
   48843    * John Wehle for various improvements for the x86 code generator,
   48844      related infrastructure improvements to help x86 code generation,
   48845      value range propagation and other work, WE32k port.
   48846 
   48847    * Ulrich Weigand for work on the s390 port.
   48848 
   48849    * Zack Weinberg for major work on cpplib and various other bug fixes.
   48850 
   48851    * Matt Welsh for help with Linux Threads support in GCJ.
   48852 
   48853    * Urban Widmark for help fixing java.io.
   48854 
   48855    * Mark Wielaard for new Java library code and his work integrating
   48856      with Classpath.
   48857 
   48858    * Dale Wiles helped port GCC to the Tahoe.
   48859 
   48860    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
   48861 
   48862    * Jim Wilson for his direction via the steering committee, tackling
   48863      hard problems in various places that nobody else wanted to work
   48864      on, strength reduction and other loop optimizations.
   48865 
   48866    * Paul Woegerer and Tal Agmon for the CRX port.
   48867 
   48868    * Carlo Wood for various fixes.
   48869 
   48870    * Tom Wood for work on the m88k port.
   48871 
   48872    * Canqun Yang for work on GNU Fortran.
   48873 
   48874    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
   48875      description for the Tron architecture (specifically, the Gmicro).
   48876 
   48877    * Kevin Zachmann helped port GCC to the Tahoe.
   48878 
   48879    * Ayal Zaks for Swing Modulo Scheduling (SMS).
   48880 
   48881    * Xiaoqiang Zhang for work on GNU Fortran.
   48882 
   48883    * Gilles Zunino for help porting Java to Irix.
   48884 
   48885 
   48886  The following people are recognized for their contributions to GNAT,
   48887 the Ada front end of GCC:
   48888    * Bernard Banner
   48889 
   48890    * Romain Berrendonner
   48891 
   48892    * Geert Bosch
   48893 
   48894    * Emmanuel Briot
   48895 
   48896    * Joel Brobecker
   48897 
   48898    * Ben Brosgol
   48899 
   48900    * Vincent Celier
   48901 
   48902    * Arnaud Charlet
   48903 
   48904    * Chien Chieng
   48905 
   48906    * Cyrille Comar
   48907 
   48908    * Cyrille Crozes
   48909 
   48910    * Robert Dewar
   48911 
   48912    * Gary Dismukes
   48913 
   48914    * Robert Duff
   48915 
   48916    * Ed Falis
   48917 
   48918    * Ramon Fernandez
   48919 
   48920    * Sam Figueroa
   48921 
   48922    * Vasiliy Fofanov
   48923 
   48924    * Michael Friess
   48925 
   48926    * Franco Gasperoni
   48927 
   48928    * Ted Giering
   48929 
   48930    * Matthew Gingell
   48931 
   48932    * Laurent Guerby
   48933 
   48934    * Jerome Guitton
   48935 
   48936    * Olivier Hainque
   48937 
   48938    * Jerome Hugues
   48939 
   48940    * Hristian Kirtchev
   48941 
   48942    * Jerome Lambourg
   48943 
   48944    * Bruno Leclerc
   48945 
   48946    * Albert Lee
   48947 
   48948    * Sean McNeil
   48949 
   48950    * Javier Miranda
   48951 
   48952    * Laurent Nana
   48953 
   48954    * Pascal Obry
   48955 
   48956    * Dong-Ik Oh
   48957 
   48958    * Laurent Pautet
   48959 
   48960    * Brett Porter
   48961 
   48962    * Thomas Quinot
   48963 
   48964    * Nicolas Roche
   48965 
   48966    * Pat Rogers
   48967 
   48968    * Jose Ruiz
   48969 
   48970    * Douglas Rupp
   48971 
   48972    * Sergey Rybin
   48973 
   48974    * Gail Schenker
   48975 
   48976    * Ed Schonberg
   48977 
   48978    * Nicolas Setton
   48979 
   48980    * Samuel Tardieu
   48981 
   48982 
   48983  The following people are recognized for their contributions of new
   48984 features, bug reports, testing and integration of classpath/libgcj for
   48985 GCC version 4.1:
   48986    * Lillian Angel for `JTree' implementation and lots Free Swing
   48987      additions and bug fixes.
   48988 
   48989    * Wolfgang Baer for `GapContent' bug fixes.
   48990 
   48991    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
   48992      event fixes, lots of Free Swing work including `JTable' editing.
   48993 
   48994    * Stuart Ballard for RMI constant fixes.
   48995 
   48996    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
   48997 
   48998    * Gary Benson for `MessageFormat' fixes.
   48999 
   49000    * Daniel Bonniot for `Serialization' fixes.
   49001 
   49002    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
   49003      and `DOM xml:id' support.
   49004 
   49005    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
   49006 
   49007    * Archie Cobbs for build fixes, VM interface updates,
   49008      `URLClassLoader' updates.
   49009 
   49010    * Kelley Cook for build fixes.
   49011 
   49012    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
   49013 
   49014    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
   49015      and improvements.
   49016 
   49017    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
   49018      2D support. Lots of imageio framework additions, lots of AWT and
   49019      Free Swing bug fixes.
   49020 
   49021    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
   49022      fixes, better `Proxy' support, bug fixes and IKVM integration.
   49023 
   49024    * Santiago Gala for `AccessControlContext' fixes.
   49025 
   49026    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
   49027      improvements.
   49028 
   49029    * David Gilbert for `basic' and `metal' icon and plaf support and
   49030      lots of documenting, Lots of Free Swing and metal theme additions.
   49031      `MetalIconFactory' implementation.
   49032 
   49033    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
   49034 
   49035    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
   49036      build speedups.
   49037 
   49038    * Kim Ho for `JFileChooser' implementation.
   49039 
   49040    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
   49041      updates, `Serialization' fixes, `Properties' XML support and
   49042      generic branch work, VMIntegration guide update.
   49043 
   49044    * Bastiaan Huisman for `TimeZone' bug fixing.
   49045 
   49046    * Andreas Jaeger for mprec updates.
   49047 
   49048    * Paul Jenner for better `-Werror' support.
   49049 
   49050    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
   49051 
   49052    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
   49053      bug fixes all over. Lots of Free Swing work including styled text.
   49054 
   49055    * Simon Kitching for `String' cleanups and optimization suggestions.
   49056 
   49057    * Michael Koch for configuration fixes, `Locale' updates, bug and
   49058      build fixes.
   49059 
   49060    * Guilhem Lavaux for configuration, thread and channel fixes and
   49061      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
   49062 
   49063    * David Lichteblau for JCL support library global/local reference
   49064      cleanups.
   49065 
   49066    * Aaron Luchko for JDWP updates and documentation fixes.
   49067 
   49068    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
   49069      features.
   49070 
   49071    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
   49072      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
   49073      and implementing the Qt4 peers.
   49074 
   49075    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
   49076      `SystemLogger' and `FileHandler' rotate implementations, NIO
   49077      `FileChannel.map' support, security and policy updates.
   49078 
   49079    * Bryce McKinlay for RMI work.
   49080 
   49081    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
   49082      testing and documenting.
   49083 
   49084    * Kalle Olavi Niemitalo for build fixes.
   49085 
   49086    * Rainer Orth for build fixes.
   49087 
   49088    * Andrew Overholt for `File' locking fixes.
   49089 
   49090    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
   49091 
   49092    * Olga Rodimina for `MenuSelectionManager' implementation.
   49093 
   49094    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
   49095 
   49096    * Julian Scheid for documentation updates and gjdoc support.
   49097 
   49098    * Christian Schlichtherle for zip fixes and cleanups.
   49099 
   49100    * Robert Schuster for documentation updates and beans fixes,
   49101      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
   49102      and URL, AWT and Free Swing bug fixes.
   49103 
   49104    * Keith Seitz for lots of JDWP work.
   49105 
   49106    * Christian Thalinger for 64-bit cleanups, Configuration and VM
   49107      interface fixes and `CACAO' integration, `fdlibm' updates.
   49108 
   49109    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
   49110 
   49111    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
   49112      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
   49113 
   49114    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
   49115      integration. `Qt4' build infrastructure, `SHA1PRNG' and
   49116      `GdkPixbugDecoder' updates.
   49117 
   49118    * Tom Tromey for Eclipse integration, generics work, lots of bug
   49119      fixes and gcj integration including coordinating The Big Merge.
   49120 
   49121    * Mark Wielaard for bug fixes, packaging and release management,
   49122      `Clipboard' implementation, system call interrupts and network
   49123      timeouts and `GdkPixpufDecoder' fixes.
   49124 
   49125 
   49126  In addition to the above, all of which also contributed time and
   49127 energy in testing GCC, we would like to thank the following for their
   49128 contributions to testing:
   49129 
   49130    * Michael Abd-El-Malek
   49131 
   49132    * Thomas Arend
   49133 
   49134    * Bonzo Armstrong
   49135 
   49136    * Steven Ashe
   49137 
   49138    * Chris Baldwin
   49139 
   49140    * David Billinghurst
   49141 
   49142    * Jim Blandy
   49143 
   49144    * Stephane Bortzmeyer
   49145 
   49146    * Horst von Brand
   49147 
   49148    * Frank Braun
   49149 
   49150    * Rodney Brown
   49151 
   49152    * Sidney Cadot
   49153 
   49154    * Bradford Castalia
   49155 
   49156    * Robert Clark
   49157 
   49158    * Jonathan Corbet
   49159 
   49160    * Ralph Doncaster
   49161 
   49162    * Richard Emberson
   49163 
   49164    * Levente Farkas
   49165 
   49166    * Graham Fawcett
   49167 
   49168    * Mark Fernyhough
   49169 
   49170    * Robert A. French
   49171 
   49172    * Jo"rgen Freyh
   49173 
   49174    * Mark K. Gardner
   49175 
   49176    * Charles-Antoine Gauthier
   49177 
   49178    * Yung Shing Gene
   49179 
   49180    * David Gilbert
   49181 
   49182    * Simon Gornall
   49183 
   49184    * Fred Gray
   49185 
   49186    * John Griffin
   49187 
   49188    * Patrik Hagglund
   49189 
   49190    * Phil Hargett
   49191 
   49192    * Amancio Hasty
   49193 
   49194    * Takafumi Hayashi
   49195 
   49196    * Bryan W. Headley
   49197 
   49198    * Kevin B. Hendricks
   49199 
   49200    * Joep Jansen
   49201 
   49202    * Christian Joensson
   49203 
   49204    * Michel Kern
   49205 
   49206    * David Kidd
   49207 
   49208    * Tobias Kuipers
   49209 
   49210    * Anand Krishnaswamy
   49211 
   49212    * A. O. V. Le Blanc
   49213 
   49214    * llewelly
   49215 
   49216    * Damon Love
   49217 
   49218    * Brad Lucier
   49219 
   49220    * Matthias Klose
   49221 
   49222    * Martin Knoblauch
   49223 
   49224    * Rick Lutowski
   49225 
   49226    * Jesse Macnish
   49227 
   49228    * Stefan Morrell
   49229 
   49230    * Anon A. Mous
   49231 
   49232    * Matthias Mueller
   49233 
   49234    * Pekka Nikander
   49235 
   49236    * Rick Niles
   49237 
   49238    * Jon Olson
   49239 
   49240    * Magnus Persson
   49241 
   49242    * Chris Pollard
   49243 
   49244    * Richard Polton
   49245 
   49246    * Derk Reefman
   49247 
   49248    * David Rees
   49249 
   49250    * Paul Reilly
   49251 
   49252    * Tom Reilly
   49253 
   49254    * Torsten Rueger
   49255 
   49256    * Danny Sadinoff
   49257 
   49258    * Marc Schifer
   49259 
   49260    * Erik Schnetter
   49261 
   49262    * Wayne K. Schroll
   49263 
   49264    * David Schuler
   49265 
   49266    * Vin Shelton
   49267 
   49268    * Tim Souder
   49269 
   49270    * Adam Sulmicki
   49271 
   49272    * Bill Thorson
   49273 
   49274    * George Talbot
   49275 
   49276    * Pedro A. M. Vazquez
   49277 
   49278    * Gregory Warnes
   49279 
   49280    * Ian Watson
   49281 
   49282    * David E. Young
   49283 
   49284    * And many others
   49285 
   49286  And finally we'd like to thank everyone who uses the compiler, provides
   49287 feedback and generally reminds us why we're doing this work in the first
   49288 place.
   49289 
   49290 
   49291 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
   49292 
   49293 Option Index
   49294 ************
   49295 
   49296 GCC's command line options are indexed here without any initial `-' or
   49297 `--'.  Where an option has both positive and negative forms (such as
   49298 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
   49299 indexed under the most appropriate form; it may sometimes be useful to
   49300 look up both forms.
   49301 
   49302 [index]
   49303 * Menu:
   49304 
   49305 * ###:                                   Overall Options.    (line  209)
   49306 * -fno-keep-inline-dllexport:            Optimize Options.   (line  319)
   49307 * -mcpu:                                 RX Options.         (line   30)
   49308 * -mpointer-size=SIZE:                   VMS Options.        (line   20)
   49309 * 8bit-idiv:                             i386 and x86-64 Options.
   49310                                                              (line  824)
   49311 * A:                                     Preprocessor Options.
   49312                                                              (line  597)
   49313 * all_load:                              Darwin Options.     (line  110)
   49314 * allowable_client:                      Darwin Options.     (line  196)
   49315 * ansi <1>:                              Non-bugs.           (line  107)
   49316 * ansi <2>:                              Other Builtins.     (line   22)
   49317 * ansi <3>:                              Preprocessor Options.
   49318                                                              (line  338)
   49319 * ansi <4>:                              C Dialect Options.  (line   11)
   49320 * ansi:                                  Standards.          (line   16)
   49321 * arch_errors_fatal:                     Darwin Options.     (line  114)
   49322 * aux-info:                              C Dialect Options.  (line  168)
   49323 * avx256-split-unaligned-load:           i386 and x86-64 Options.
   49324                                                              (line  832)
   49325 * avx256-split-unaligned-store:          i386 and x86-64 Options.
   49326                                                              (line  832)
   49327 * B:                                     Directory Options.  (line   46)
   49328 * Bdynamic:                              VxWorks Options.    (line   22)
   49329 * bind_at_load:                          Darwin Options.     (line  118)
   49330 * Bstatic:                               VxWorks Options.    (line   22)
   49331 * bundle:                                Darwin Options.     (line  123)
   49332 * bundle_loader:                         Darwin Options.     (line  127)
   49333 * c:                                     Link Options.       (line   20)
   49334 * C:                                     Preprocessor Options.
   49335                                                              (line  655)
   49336 * c:                                     Overall Options.    (line  164)
   49337 * client_name:                           Darwin Options.     (line  196)
   49338 * compatibility_version:                 Darwin Options.     (line  196)
   49339 * coverage:                              Debugging Options.  (line  412)
   49340 * current_version:                       Darwin Options.     (line  196)
   49341 * D:                                     Preprocessor Options.
   49342                                                              (line   46)
   49343 * d:                                     Debugging Options.  (line  544)
   49344 * dA:                                    Debugging Options.  (line  754)
   49345 * da:                                    Debugging Options.  (line  751)
   49346 * dD <1>:                                Preprocessor Options.
   49347                                                              (line  629)
   49348 * dD:                                    Debugging Options.  (line  758)
   49349 * dead_strip:                            Darwin Options.     (line  196)
   49350 * dependency-file:                       Darwin Options.     (line  196)
   49351 * dH:                                    Debugging Options.  (line  762)
   49352 * dI:                                    Preprocessor Options.
   49353                                                              (line  638)
   49354 * dM:                                    Preprocessor Options.
   49355                                                              (line  613)
   49356 * dN:                                    Preprocessor Options.
   49357                                                              (line  635)
   49358 * dP:                                    Debugging Options.  (line  770)
   49359 * dp:                                    Debugging Options.  (line  765)
   49360 * dU:                                    Preprocessor Options.
   49361                                                              (line  642)
   49362 * dumpmachine:                           Debugging Options.  (line 1380)
   49363 * dumpspecs:                             Debugging Options.  (line 1388)
   49364 * dumpversion:                           Debugging Options.  (line 1384)
   49365 * dx:                                    Debugging Options.  (line  774)
   49366 * dylib_file:                            Darwin Options.     (line  196)
   49367 * dylinker_install_name:                 Darwin Options.     (line  196)
   49368 * dynamic:                               Darwin Options.     (line  196)
   49369 * dynamiclib:                            Darwin Options.     (line  131)
   49370 * E <1>:                                 Link Options.       (line   20)
   49371 * E:                                     Overall Options.    (line  185)
   49372 * EB:                                    MIPS Options.       (line    7)
   49373 * EL:                                    MIPS Options.       (line   10)
   49374 * exported_symbols_list:                 Darwin Options.     (line  196)
   49375 * F:                                     Darwin Options.     (line   31)
   49376 * fabi-version:                          C++ Dialect Options.
   49377                                                              (line   20)
   49378 * fada-spec-parent:                      Overall Options.    (line  369)
   49379 * faggressive-loop-optimizations:        Optimize Options.   (line  509)
   49380 * falign-functions:                      Optimize Options.   (line 1462)
   49381 * falign-jumps:                          Optimize Options.   (line 1511)
   49382 * falign-labels:                         Optimize Options.   (line 1480)
   49383 * falign-loops:                          Optimize Options.   (line 1498)
   49384 * fassociative-math:                     Optimize Options.   (line 1955)
   49385 * fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
   49386 * fauto-inc-dec:                         Optimize Options.   (line  533)
   49387 * fbounds-check:                         Code Gen Options.   (line   15)
   49388 * fbranch-probabilities:                 Optimize Options.   (line 2082)
   49389 * fbranch-target-load-optimize:          Optimize Options.   (line 2190)
   49390 * fbranch-target-load-optimize2:         Optimize Options.   (line 2196)
   49391 * fbtr-bb-exclusive:                     Optimize Options.   (line 2200)
   49392 * fcall-saved:                           Code Gen Options.   (line  345)
   49393 * fcall-used:                            Code Gen Options.   (line  331)
   49394 * fcaller-saves:                         Optimize Options.   (line  829)
   49395 * fcheck-data-deps:                      Optimize Options.   (line 1094)
   49396 * fcheck-new:                            C++ Dialect Options.
   49397                                                              (line   55)
   49398 * fcombine-stack-adjustments:            Optimize Options.   (line  841)
   49399 * fcommon:                               Variable Attributes.
   49400                                                              (line  105)
   49401 * fcompare-debug:                        Debugging Options.  (line  200)
   49402 * fcompare-debug-second:                 Debugging Options.  (line  226)
   49403 * fcompare-elim:                         Optimize Options.   (line 1794)
   49404 * fcond-mismatch:                        C Dialect Options.  (line  315)
   49405 * fconserve-stack:                       Optimize Options.   (line  847)
   49406 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
   49407                                                              (line   30)
   49408 * fconstexpr-depth:                      C++ Dialect Options.
   49409                                                              (line   65)
   49410 * fcprop-registers:                      Optimize Options.   (line 1812)
   49411 * fcrossjumping:                         Optimize Options.   (line  526)
   49412 * fcse-follow-jumps:                     Optimize Options.   (line  445)
   49413 * fcse-skip-blocks:                      Optimize Options.   (line  454)
   49414 * fcx-fortran-rules:                     Optimize Options.   (line 2068)
   49415 * fcx-limited-range:                     Optimize Options.   (line 2056)
   49416 * fdata-sections:                        Optimize Options.   (line 2171)
   49417 * fdbg-cnt:                              Debugging Options.  (line  465)
   49418 * fdbg-cnt-list:                         Debugging Options.  (line  462)
   49419 * fdce:                                  Optimize Options.   (line  539)
   49420 * fdebug-cpp:                            Preprocessor Options.
   49421                                                              (line  526)
   49422 * fdebug-prefix-map:                     Debugging Options.  (line  320)
   49423 * fdebug-types-section:                  Debugging Options.  (line   74)
   49424 * fdeduce-init-list:                     C++ Dialect Options.
   49425                                                              (line   71)
   49426 * fdelayed-branch:                       Optimize Options.   (line  676)
   49427 * fdelete-dead-exceptions:               Code Gen Options.   (line  131)
   49428 * fdelete-null-pointer-checks:           Optimize Options.   (line  562)
   49429 * fdevirtualize:                         Optimize Options.   (line  580)
   49430 * fdiagnostics-show-caret:               Language Independent Options.
   49431                                                              (line   40)
   49432 * fdiagnostics-show-location:            Language Independent Options.
   49433                                                              (line   20)
   49434 * fdiagnostics-show-option:              Language Independent Options.
   49435                                                              (line   34)
   49436 * fdirectives-only:                      Preprocessor Options.
   49437                                                              (line  473)
   49438 * fdisable-:                             Debugging Options.  (line  475)
   49439 * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
   49440 * fdollars-in-identifiers:               Preprocessor Options.
   49441                                                              (line  495)
   49442 * fdse:                                  Optimize Options.   (line  543)
   49443 * fdump-ada-spec:                        Overall Options.    (line  363)
   49444 * fdump-class-hierarchy:                 Debugging Options.  (line  805)
   49445 * fdump-final-insns:                     Debugging Options.  (line  194)
   49446 * fdump-go-spec:                         Overall Options.    (line  373)
   49447 * fdump-ipa:                             Debugging Options.  (line  813)
   49448 * fdump-noaddr:                          Debugging Options.  (line  778)
   49449 * fdump-passes:                          Debugging Options.  (line  831)
   49450 * fdump-rtl-alignments:                  Debugging Options.  (line  565)
   49451 * fdump-rtl-all:                         Debugging Options.  (line  751)
   49452 * fdump-rtl-asmcons:                     Debugging Options.  (line  568)
   49453 * fdump-rtl-auto_inc_dec:                Debugging Options.  (line  572)
   49454 * fdump-rtl-barriers:                    Debugging Options.  (line  576)
   49455 * fdump-rtl-bbpart:                      Debugging Options.  (line  579)
   49456 * fdump-rtl-bbro:                        Debugging Options.  (line  582)
   49457 * fdump-rtl-btl2:                        Debugging Options.  (line  586)
   49458 * fdump-rtl-bypass:                      Debugging Options.  (line  590)
   49459 * fdump-rtl-ce1:                         Debugging Options.  (line  601)
   49460 * fdump-rtl-ce2:                         Debugging Options.  (line  601)
   49461 * fdump-rtl-ce3:                         Debugging Options.  (line  601)
   49462 * fdump-rtl-combine:                     Debugging Options.  (line  593)
   49463 * fdump-rtl-compgotos:                   Debugging Options.  (line  596)
   49464 * fdump-rtl-cprop_hardreg:               Debugging Options.  (line  605)
   49465 * fdump-rtl-csa:                         Debugging Options.  (line  608)
   49466 * fdump-rtl-cse1:                        Debugging Options.  (line  612)
   49467 * fdump-rtl-cse2:                        Debugging Options.  (line  612)
   49468 * fdump-rtl-dbr:                         Debugging Options.  (line  619)
   49469 * fdump-rtl-dce:                         Debugging Options.  (line  616)
   49470 * fdump-rtl-dce1:                        Debugging Options.  (line  623)
   49471 * fdump-rtl-dce2:                        Debugging Options.  (line  623)
   49472 * fdump-rtl-dfinish:                     Debugging Options.  (line  747)
   49473 * fdump-rtl-dfinit:                      Debugging Options.  (line  747)
   49474 * fdump-rtl-eh:                          Debugging Options.  (line  627)
   49475 * fdump-rtl-eh_ranges:                   Debugging Options.  (line  630)
   49476 * fdump-rtl-expand:                      Debugging Options.  (line  633)
   49477 * fdump-rtl-fwprop1:                     Debugging Options.  (line  637)
   49478 * fdump-rtl-fwprop2:                     Debugging Options.  (line  637)
   49479 * fdump-rtl-gcse1:                       Debugging Options.  (line  642)
   49480 * fdump-rtl-gcse2:                       Debugging Options.  (line  642)
   49481 * fdump-rtl-init-regs:                   Debugging Options.  (line  646)
   49482 * fdump-rtl-initvals:                    Debugging Options.  (line  649)
   49483 * fdump-rtl-into_cfglayout:              Debugging Options.  (line  652)
   49484 * fdump-rtl-ira:                         Debugging Options.  (line  655)
   49485 * fdump-rtl-jump:                        Debugging Options.  (line  658)
   49486 * fdump-rtl-loop2:                       Debugging Options.  (line  661)
   49487 * fdump-rtl-mach:                        Debugging Options.  (line  665)
   49488 * fdump-rtl-mode_sw:                     Debugging Options.  (line  669)
   49489 * fdump-rtl-outof_cfglayout:             Debugging Options.  (line  675)
   49490 * fdump-rtl-peephole2:                   Debugging Options.  (line  678)
   49491 * fdump-rtl-postreload:                  Debugging Options.  (line  681)
   49492 * fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  684)
   49493 * fdump-rtl-regclass:                    Debugging Options.  (line  747)
   49494 * fdump-rtl-regmove:                     Debugging Options.  (line  687)
   49495 * fdump-rtl-rnreg:                       Debugging Options.  (line  672)
   49496 * fdump-rtl-sched1:                      Debugging Options.  (line  691)
   49497 * fdump-rtl-sched2:                      Debugging Options.  (line  691)
   49498 * fdump-rtl-see:                         Debugging Options.  (line  695)
   49499 * fdump-rtl-seqabstr:                    Debugging Options.  (line  698)
   49500 * fdump-rtl-shorten:                     Debugging Options.  (line  701)
   49501 * fdump-rtl-sibling:                     Debugging Options.  (line  704)
   49502 * fdump-rtl-sms:                         Debugging Options.  (line  717)
   49503 * fdump-rtl-split1:                      Debugging Options.  (line  711)
   49504 * fdump-rtl-split2:                      Debugging Options.  (line  711)
   49505 * fdump-rtl-split3:                      Debugging Options.  (line  711)
   49506 * fdump-rtl-split4:                      Debugging Options.  (line  711)
   49507 * fdump-rtl-split5:                      Debugging Options.  (line  711)
   49508 * fdump-rtl-stack:                       Debugging Options.  (line  721)
   49509 * fdump-rtl-subreg1:                     Debugging Options.  (line  727)
   49510 * fdump-rtl-subreg2:                     Debugging Options.  (line  727)
   49511 * fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  747)
   49512 * fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  747)
   49513 * fdump-rtl-unshare:                     Debugging Options.  (line  731)
   49514 * fdump-rtl-vartrack:                    Debugging Options.  (line  734)
   49515 * fdump-rtl-vregs:                       Debugging Options.  (line  737)
   49516 * fdump-rtl-web:                         Debugging Options.  (line  740)
   49517 * fdump-statistics:                      Debugging Options.  (line  835)
   49518 * fdump-translation-unit:                Debugging Options.  (line  796)
   49519 * fdump-tree:                            Debugging Options.  (line  847)
   49520 * fdump-tree-alias:                      Debugging Options.  (line  986)
   49521 * fdump-tree-all:                        Debugging Options.  (line 1076)
   49522 * fdump-tree-ccp:                        Debugging Options.  (line  990)
   49523 * fdump-tree-cfg:                        Debugging Options.  (line  974)
   49524 * fdump-tree-ch:                         Debugging Options.  (line  978)
   49525 * fdump-tree-copyprop:                   Debugging Options.  (line 1006)
   49526 * fdump-tree-copyrename:                 Debugging Options.  (line 1052)
   49527 * fdump-tree-dce:                        Debugging Options.  (line 1014)
   49528 * fdump-tree-dom:                        Debugging Options.  (line 1032)
   49529 * fdump-tree-dse:                        Debugging Options.  (line 1037)
   49530 * fdump-tree-forwprop:                   Debugging Options.  (line 1047)
   49531 * fdump-tree-fre:                        Debugging Options.  (line 1002)
   49532 * fdump-tree-gimple:                     Debugging Options.  (line  969)
   49533 * fdump-tree-mudflap:                    Debugging Options.  (line 1018)
   49534 * fdump-tree-nrv:                        Debugging Options.  (line 1057)
   49535 * fdump-tree-optimized:                  Debugging Options.  (line  966)
   49536 * fdump-tree-original:                   Debugging Options.  (line  963)
   49537 * fdump-tree-phiopt:                     Debugging Options.  (line 1042)
   49538 * fdump-tree-pre:                        Debugging Options.  (line  998)
   49539 * fdump-tree-sink:                       Debugging Options.  (line 1028)
   49540 * fdump-tree-slp:                        Debugging Options.  (line 1067)
   49541 * fdump-tree-sra:                        Debugging Options.  (line 1023)
   49542 * fdump-tree-ssa:                        Debugging Options.  (line  982)
   49543 * fdump-tree-store_copyprop:             Debugging Options.  (line 1010)
   49544 * fdump-tree-storeccp:                   Debugging Options.  (line  994)
   49545 * fdump-tree-vect:                       Debugging Options.  (line 1062)
   49546 * fdump-tree-vrp:                        Debugging Options.  (line 1072)
   49547 * fdump-unnumbered:                      Debugging Options.  (line  784)
   49548 * fdump-unnumbered-links:                Debugging Options.  (line  790)
   49549 * fdwarf2-cfi-asm:                       Debugging Options.  (line  324)
   49550 * fearly-inlining:                       Optimize Options.   (line  276)
   49551 * feliminate-dwarf2-dups:                Debugging Options.  (line  239)
   49552 * feliminate-unused-debug-symbols:       Debugging Options.  (line   62)
   49553 * feliminate-unused-debug-types:         Debugging Options.  (line 1392)
   49554 * fenable-:                              Debugging Options.  (line  475)
   49555 * fexceptions:                           Code Gen Options.   (line  108)
   49556 * fexcess-precision:                     Optimize Options.   (line 1883)
   49557 * fexec-charset:                         Preprocessor Options.
   49558                                                              (line  554)
   49559 * fexpensive-optimizations:              Optimize Options.   (line  587)
   49560 * fext-numeric-literals:                 C++ Dialect Options.
   49561                                                              (line  547)
   49562 * fextended-identifiers:                 Preprocessor Options.
   49563                                                              (line  498)
   49564 * fextern-tls-init:                      C++ Dialect Options.
   49565                                                              (line  122)
   49566 * ffast-math:                            Optimize Options.   (line 1906)
   49567 * ffat-lto-objects:                      Optimize Options.   (line 1774)
   49568 * ffinite-math-only:                     Optimize Options.   (line 1980)
   49569 * ffix-and-continue:                     Darwin Options.     (line  104)
   49570 * ffixed:                                Code Gen Options.   (line  319)
   49571 * ffloat-store <1>:                      Disappointments.    (line   77)
   49572 * ffloat-store:                          Optimize Options.   (line 1869)
   49573 * ffor-scope:                            C++ Dialect Options.
   49574                                                              (line  143)
   49575 * fforward-propagate:                    Optimize Options.   (line  185)
   49576 * ffp-contract:                          Optimize Options.   (line  194)
   49577 * ffreestanding <1>:                     Function Attributes.
   49578                                                              (line  459)
   49579 * ffreestanding <2>:                     Warning Options.    (line  255)
   49580 * ffreestanding <3>:                     C Dialect Options.  (line  246)
   49581 * ffreestanding:                         Standards.          (line   93)
   49582 * ffriend-injection:                     C++ Dialect Options.
   49583                                                              (line   92)
   49584 * ffunction-sections:                    Optimize Options.   (line 2171)
   49585 * fgcse:                                 Optimize Options.   (line  468)
   49586 * fgcse-after-reload:                    Optimize Options.   (line  504)
   49587 * fgcse-las:                             Optimize Options.   (line  497)
   49588 * fgcse-lm:                              Optimize Options.   (line  479)
   49589 * fgcse-sm:                              Optimize Options.   (line  488)
   49590 * fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
   49591                                                              (line   39)
   49592 * fgnu-tm:                               C Dialect Options.  (line  264)
   49593 * fgnu89-inline:                         C Dialect Options.  (line  147)
   49594 * fgraphite-identity:                    Optimize Options.   (line 1074)
   49595 * fhosted:                               C Dialect Options.  (line  239)
   49596 * fif-conversion:                        Optimize Options.   (line  547)
   49597 * fif-conversion2:                       Optimize Options.   (line  556)
   49598 * filelist:                              Darwin Options.     (line  196)
   49599 * findirect-data:                        Darwin Options.     (line  104)
   49600 * findirect-inlining:                    Optimize Options.   (line  249)
   49601 * finhibit-size-directive:               Code Gen Options.   (line  239)
   49602 * finline-functions:                     Optimize Options.   (line  257)
   49603 * finline-functions-called-once:         Optimize Options.   (line  268)
   49604 * finline-limit:                         Optimize Options.   (line  293)
   49605 * finline-small-functions:               Optimize Options.   (line  240)
   49606 * finput-charset:                        Preprocessor Options.
   49607                                                              (line  567)
   49608 * finstrument-functions <1>:             Function Attributes.
   49609                                                              (line  954)
   49610 * finstrument-functions:                 Code Gen Options.   (line  375)
   49611 * finstrument-functions-exclude-file-list: Code Gen Options. (line  411)
   49612 * finstrument-functions-exclude-function-list: Code Gen Options.
   49613                                                              (line  431)
   49614 * fipa-cp:                               Optimize Options.   (line  913)
   49615 * fipa-cp-clone:                         Optimize Options.   (line  921)
   49616 * fipa-profile:                          Optimize Options.   (line  905)
   49617 * fipa-pta:                              Optimize Options.   (line  899)
   49618 * fipa-pure-const:                       Optimize Options.   (line  891)
   49619 * fipa-reference:                        Optimize Options.   (line  895)
   49620 * fipa-sra:                              Optimize Options.   (line  286)
   49621 * fira-hoist-pressure:                   Optimize Options.   (line  643)
   49622 * fira-loop-pressure:                    Optimize Options.   (line  650)
   49623 * fira-verbose:                          Optimize Options.   (line  670)
   49624 * fivopts:                               Optimize Options.   (line 1170)
   49625 * fkeep-inline-functions <1>:            Inline.             (line   51)
   49626 * fkeep-inline-functions:                Optimize Options.   (line  325)
   49627 * fkeep-static-consts:                   Optimize Options.   (line  332)
   49628 * flat_namespace:                        Darwin Options.     (line  196)
   49629 * flax-vector-conversions:               C Dialect Options.  (line  320)
   49630 * fleading-underscore:                   Code Gen Options.   (line  514)
   49631 * floop-block:                           Optimize Options.   (line 1045)
   49632 * floop-interchange:                     Optimize Options.   (line 1000)
   49633 * floop-nest-optimize:                   Optimize Options.   (line 1082)
   49634 * floop-parallelize-all:                 Optimize Options.   (line 1088)
   49635 * floop-strip-mine:                      Optimize Options.   (line 1024)
   49636 * flto:                                  Optimize Options.   (line 1565)
   49637 * flto-partition:                        Optimize Options.   (line 1729)
   49638 * fmax-errors:                           Warning Options.    (line   18)
   49639 * fmem-report:                           Debugging Options.  (line  348)
   49640 * fmem-report-wpa:                       Debugging Options.  (line  352)
   49641 * fmerge-all-constants:                  Optimize Options.   (line  351)
   49642 * fmerge-constants:                      Optimize Options.   (line  341)
   49643 * fmerge-debug-strings:                  Debugging Options.  (line  313)
   49644 * fmessage-length:                       Language Independent Options.
   49645                                                              (line   14)
   49646 * fmodulo-sched:                         Optimize Options.   (line  362)
   49647 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  367)
   49648 * fmove-loop-invariants:                 Optimize Options.   (line 2161)
   49649 * fms-extensions <1>:                    Unnamed Fields.     (line   36)
   49650 * fms-extensions <2>:                    C++ Dialect Options.
   49651                                                              (line  177)
   49652 * fms-extensions:                        C Dialect Options.  (line  279)
   49653 * fmudflap:                              Optimize Options.   (line  407)
   49654 * fmudflapir:                            Optimize Options.   (line  407)
   49655 * fmudflapth:                            Optimize Options.   (line  407)
   49656 * fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
   49657                                                              (line   43)
   49658 * fno-access-control:                    C++ Dialect Options.
   49659                                                              (line   51)
   49660 * fno-asm:                               C Dialect Options.  (line  191)
   49661 * fno-branch-count-reg:                  Optimize Options.   (line  374)
   49662 * fno-builtin <1>:                       Other Builtins.     (line   14)
   49663 * fno-builtin <2>:                       Function Attributes.
   49664                                                              (line  459)
   49665 * fno-builtin <3>:                       Warning Options.    (line  255)
   49666 * fno-builtin:                           C Dialect Options.  (line  205)
   49667 * fno-canonical-system-headers:          Preprocessor Options.
   49668                                                              (line  503)
   49669 * fno-common <1>:                        Variable Attributes.
   49670                                                              (line  105)
   49671 * fno-common:                            Code Gen Options.   (line  216)
   49672 * fno-compare-debug:                     Debugging Options.  (line  200)
   49673 * fno-debug-types-section:               Debugging Options.  (line   74)
   49674 * fno-default-inline <1>:                Inline.             (line   71)
   49675 * fno-default-inline <2>:                Optimize Options.   (line  170)
   49676 * fno-default-inline:                    C++ Dialect Options.
   49677                                                              (line  356)
   49678 * fno-defer-pop:                         Optimize Options.   (line  177)
   49679 * fno-diagnostics-show-caret:            Language Independent Options.
   49680                                                              (line   40)
   49681 * fno-diagnostics-show-option:           Language Independent Options.
   49682                                                              (line   34)
   49683 * fno-dwarf2-cfi-asm:                    Debugging Options.  (line  324)
   49684 * fno-elide-constructors:                C++ Dialect Options.
   49685                                                              (line  105)
   49686 * fno-eliminate-unused-debug-types:      Debugging Options.  (line 1392)
   49687 * fno-enforce-eh-specs:                  C++ Dialect Options.
   49688                                                              (line  111)
   49689 * fno-ext-numeric-literals:              C++ Dialect Options.
   49690                                                              (line  547)
   49691 * fno-extern-tls-init:                   C++ Dialect Options.
   49692                                                              (line  122)
   49693 * fno-for-scope:                         C++ Dialect Options.
   49694                                                              (line  143)
   49695 * fno-function-cse:                      Optimize Options.   (line  384)
   49696 * fno-gnu-keywords:                      C++ Dialect Options.
   49697                                                              (line  155)
   49698 * fno-guess-branch-probability:          Optimize Options.   (line 1334)
   49699 * fno-ident:                             Code Gen Options.   (line  236)
   49700 * fno-implement-inlines <1>:             C++ Interface.      (line   75)
   49701 * fno-implement-inlines:                 C++ Dialect Options.
   49702                                                              (line  172)
   49703 * fno-implicit-inline-templates:         C++ Dialect Options.
   49704                                                              (line  166)
   49705 * fno-implicit-templates <1>:            Template Instantiation.
   49706                                                              (line   78)
   49707 * fno-implicit-templates:                C++ Dialect Options.
   49708                                                              (line  160)
   49709 * fno-inline:                            Optimize Options.   (line  232)
   49710 * fno-ira-share-save-slots:              Optimize Options.   (line  658)
   49711 * fno-ira-share-spill-slots:             Optimize Options.   (line  664)
   49712 * fno-jump-tables:                       Code Gen Options.   (line  311)
   49713 * fno-math-errno:                        Optimize Options.   (line 1920)
   49714 * fno-merge-debug-strings:               Debugging Options.  (line  313)
   49715 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
   49716                                                              (line   49)
   49717 * fno-nonansi-builtins:                  C++ Dialect Options.
   49718                                                              (line  182)
   49719 * fno-operator-names:                    C++ Dialect Options.
   49720                                                              (line  198)
   49721 * fno-optional-diags:                    C++ Dialect Options.
   49722                                                              (line  202)
   49723 * fno-peephole:                          Optimize Options.   (line 1325)
   49724 * fno-peephole2:                         Optimize Options.   (line 1325)
   49725 * fno-pretty-templates:                  C++ Dialect Options.
   49726                                                              (line  212)
   49727 * fno-rtti:                              C++ Dialect Options.
   49728                                                              (line  229)
   49729 * fno-sched-interblock:                  Optimize Options.   (line  702)
   49730 * fno-sched-spec:                        Optimize Options.   (line  707)
   49731 * fno-set-stack-executable:              i386 and x86-64 Windows Options.
   49732                                                              (line   46)
   49733 * fno-show-column:                       Preprocessor Options.
   49734                                                              (line  592)
   49735 * fno-signed-bitfields:                  C Dialect Options.  (line  353)
   49736 * fno-signed-zeros:                      Optimize Options.   (line 1992)
   49737 * fno-stack-limit:                       Code Gen Options.   (line  482)
   49738 * fno-threadsafe-statics:                C++ Dialect Options.
   49739                                                              (line  266)
   49740 * fno-toplevel-reorder:                  Optimize Options.   (line 1531)
   49741 * fno-trapping-math:                     Optimize Options.   (line 2002)
   49742 * fno-unsigned-bitfields:                C Dialect Options.  (line  353)
   49743 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
   49744                                                              (line  279)
   49745 * fno-var-tracking-assignments:          Debugging Options.  (line 1300)
   49746 * fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1309)
   49747 * fno-weak:                              C++ Dialect Options.
   49748                                                              (line  341)
   49749 * fno-working-directory:                 Preprocessor Options.
   49750                                                              (line  577)
   49751 * fno-writable-relocated-rdata:          i386 and x86-64 Windows Options.
   49752                                                              (line   53)
   49753 * fno-zero-initialized-in-bss:           Optimize Options.   (line  395)
   49754 * fnon-call-exceptions:                  Code Gen Options.   (line  122)
   49755 * fnothrow-opt:                          C++ Dialect Options.
   49756                                                              (line  187)
   49757 * fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
   49758                                                              (line   56)
   49759 * fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
   49760                                                              (line   67)
   49761 * fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
   49762                                                              (line   92)
   49763 * fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
   49764                                                              (line   96)
   49765 * fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
   49766                                                              (line  105)
   49767 * fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
   49768                                                              (line  111)
   49769 * fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
   49770                                                              (line  120)
   49771 * fomit-frame-pointer:                   Optimize Options.   (line  205)
   49772 * fopenmp:                               C Dialect Options.  (line  256)
   49773 * fopt-info:                             Debugging Options.  (line 1082)
   49774 * foptimize-register-move:               Optimize Options.   (line  602)
   49775 * foptimize-sibling-calls:               Optimize Options.   (line  227)
   49776 * force_cpusubtype_ALL:                  Darwin Options.     (line  135)
   49777 * force_flat_namespace:                  Darwin Options.     (line  196)
   49778 * fpack-struct:                          Code Gen Options.   (line  362)
   49779 * fpartial-inlining:                     Optimize Options.   (line 1300)
   49780 * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
   49781 * fpcc-struct-return:                    Code Gen Options.   (line  152)
   49782 * fpch-deps:                             Preprocessor Options.
   49783                                                              (line  294)
   49784 * fpch-preprocess:                       Preprocessor Options.
   49785                                                              (line  302)
   49786 * fpeel-loops:                           Optimize Options.   (line 2153)
   49787 * fpermissive:                           C++ Dialect Options.
   49788                                                              (line  207)
   49789 * fPIC:                                  Code Gen Options.   (line  288)
   49790 * fpic:                                  Code Gen Options.   (line  267)
   49791 * fPIE:                                  Code Gen Options.   (line  301)
   49792 * fpie:                                  Code Gen Options.   (line  301)
   49793 * fplan9-extensions:                     Unnamed Fields.     (line   44)
   49794 * fpost-ipa-mem-report:                  Debugging Options.  (line  358)
   49795 * fpre-ipa-mem-report:                   Debugging Options.  (line  356)
   49796 * fpredictive-commoning:                 Optimize Options.   (line 1307)
   49797 * fprefetch-loop-arrays:                 Optimize Options.   (line 1314)
   49798 * fpreprocessed:                         Preprocessor Options.
   49799                                                              (line  507)
   49800 * fprofile-arcs <1>:                     Other Builtins.     (line  257)
   49801 * fprofile-arcs:                         Debugging Options.  (line  397)
   49802 * fprofile-correction:                   Optimize Options.   (line 1819)
   49803 * fprofile-dir:                          Optimize Options.   (line 1826)
   49804 * fprofile-generate:                     Optimize Options.   (line 1836)
   49805 * fprofile-report:                       Debugging Options.  (line  362)
   49806 * fprofile-use:                          Optimize Options.   (line 1849)
   49807 * fprofile-values:                       Optimize Options.   (line 2101)
   49808 * fpu:                                   RX Options.         (line   17)
   49809 * frandom-seed:                          Debugging Options.  (line 1194)
   49810 * freciprocal-math:                      Optimize Options.   (line 1971)
   49811 * frecord-gcc-switches:                  Code Gen Options.   (line  255)
   49812 * free:                                  Optimize Options.   (line  593)
   49813 * freg-struct-return:                    Code Gen Options.   (line  170)
   49814 * fregmove:                              Optimize Options.   (line  602)
   49815 * frename-registers:                     Optimize Options.   (line 2120)
   49816 * freorder-blocks:                       Optimize Options.   (line 1351)
   49817 * freorder-blocks-and-partition:         Optimize Options.   (line 1357)
   49818 * freorder-functions:                    Optimize Options.   (line 1368)
   49819 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
   49820                                                              (line  131)
   49821 * frepo <1>:                             Template Instantiation.
   49822                                                              (line   54)
   49823 * frepo:                                 C++ Dialect Options.
   49824                                                              (line  224)
   49825 * frerun-cse-after-loop:                 Optimize Options.   (line  462)
   49826 * freschedule-modulo-scheduled-loops:    Optimize Options.   (line  801)
   49827 * frounding-math:                        Optimize Options.   (line 2017)
   49828 * fsched-critical-path-heuristic:        Optimize Options.   (line  767)
   49829 * fsched-dep-count-heuristic:            Optimize Options.   (line  794)
   49830 * fsched-group-heuristic:                Optimize Options.   (line  761)
   49831 * fsched-last-insn-heuristic:            Optimize Options.   (line  787)
   49832 * fsched-pressure:                       Optimize Options.   (line  712)
   49833 * fsched-rank-heuristic:                 Optimize Options.   (line  780)
   49834 * fsched-spec-insn-heuristic:            Optimize Options.   (line  773)
   49835 * fsched-spec-load:                      Optimize Options.   (line  721)
   49836 * fsched-spec-load-dangerous:            Optimize Options.   (line  726)
   49837 * fsched-stalled-insns:                  Optimize Options.   (line  732)
   49838 * fsched-stalled-insns-dep:              Optimize Options.   (line  742)
   49839 * fsched-verbose:                        Debugging Options.  (line 1204)
   49840 * fsched2-use-superblocks:               Optimize Options.   (line  751)
   49841 * fschedule-insns:                       Optimize Options.   (line  683)
   49842 * fschedule-insns2:                      Optimize Options.   (line  693)
   49843 * fsection-anchors:                      Optimize Options.   (line 2216)
   49844 * fsel-sched-pipelining:                 Optimize Options.   (line  814)
   49845 * fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  819)
   49846 * fselective-scheduling:                 Optimize Options.   (line  806)
   49847 * fselective-scheduling2:                Optimize Options.   (line  810)
   49848 * fshort-double:                         Code Gen Options.   (line  198)
   49849 * fshort-enums <1>:                      Non-bugs.           (line   42)
   49850 * fshort-enums <2>:                      Type Attributes.    (line  113)
   49851 * fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
   49852                                                              (line   43)
   49853 * fshort-enums:                          Code Gen Options.   (line  188)
   49854 * fshort-wchar:                          Code Gen Options.   (line  206)
   49855 * fshrink-wrap:                          Optimize Options.   (line  824)
   49856 * fsignaling-nans:                       Optimize Options.   (line 2037)
   49857 * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
   49858 * fsigned-bitfields:                     C Dialect Options.  (line  353)
   49859 * fsigned-char <1>:                      Characters implementation.
   49860                                                              (line   31)
   49861 * fsigned-char:                          C Dialect Options.  (line  343)
   49862 * fsingle-precision-constant:            Optimize Options.   (line 2052)
   49863 * fsplit-ivs-in-unroller:                Optimize Options.   (line 1281)
   49864 * fsplit-stack <1>:                      Function Attributes.
   49865                                                              (line  959)
   49866 * fsplit-stack:                          Code Gen Options.   (line  496)
   49867 * fsplit-wide-types:                     Optimize Options.   (line  437)
   49868 * fstack-check:                          Code Gen Options.   (line  443)
   49869 * fstack-limit-register:                 Code Gen Options.   (line  482)
   49870 * fstack-limit-symbol:                   Code Gen Options.   (line  482)
   49871 * fstack-protector:                      Optimize Options.   (line 2204)
   49872 * fstack-protector-all:                  Optimize Options.   (line 2213)
   49873 * fstack-usage:                          Debugging Options.  (line  366)
   49874 * fstack_reuse:                          Code Gen Options.   (line   21)
   49875 * fstats:                                C++ Dialect Options.
   49876                                                              (line  239)
   49877 * fstrict-aliasing:                      Optimize Options.   (line 1381)
   49878 * fstrict-enums:                         C++ Dialect Options.
   49879                                                              (line  244)
   49880 * fstrict-overflow:                      Optimize Options.   (line 1427)
   49881 * fstrict-volatile-bitfields:            Code Gen Options.   (line  599)
   49882 * fsync-libcalls:                        Code Gen Options.   (line  628)
   49883 * fsyntax-only:                          Warning Options.    (line   14)
   49884 * ftabstop:                              Preprocessor Options.
   49885                                                              (line  520)
   49886 * ftemplate-backtrace-limit:             C++ Dialect Options.
   49887                                                              (line  253)
   49888 * ftemplate-depth:                       C++ Dialect Options.
   49889                                                              (line  257)
   49890 * ftest-coverage:                        Debugging Options.  (line  453)
   49891 * fthread-jumps:                         Optimize Options.   (line  428)
   49892 * ftime-report:                          Debugging Options.  (line  344)
   49893 * ftls-model:                            Code Gen Options.   (line  525)
   49894 * ftracer:                               Optimize Options.   (line 1264)
   49895 * ftrack-macro-expansion:                Preprocessor Options.
   49896                                                              (line  536)
   49897 * ftrapv:                                Code Gen Options.   (line   96)
   49898 * ftree-bit-ccp:                         Optimize Options.   (line  935)
   49899 * ftree-builtin-call-dce:                Optimize Options.   (line  963)
   49900 * ftree-ccp:                             Optimize Options.   (line  941)
   49901 * ftree-ch:                              Optimize Options.   (line  983)
   49902 * ftree-copy-prop:                       Optimize Options.   (line  886)
   49903 * ftree-copyrename:                      Optimize Options.   (line 1194)
   49904 * ftree-dce:                             Optimize Options.   (line  959)
   49905 * ftree-dominator-opts:                  Optimize Options.   (line  969)
   49906 * ftree-dse:                             Optimize Options.   (line  976)
   49907 * ftree-forwprop:                        Optimize Options.   (line  865)
   49908 * ftree-fre:                             Optimize Options.   (line  869)
   49909 * ftree-loop-im:                         Optimize Options.   (line 1155)
   49910 * ftree-loop-ivcanon:                    Optimize Options.   (line 1164)
   49911 * ftree-loop-linear:                     Optimize Options.   (line  994)
   49912 * ftree-loop-optimize:                   Optimize Options.   (line  990)
   49913 * ftree-parallelize-loops:               Optimize Options.   (line 1175)
   49914 * ftree-partial-pre:                     Optimize Options.   (line  861)
   49915 * ftree-phiprop:                         Optimize Options.   (line  876)
   49916 * ftree-pre:                             Optimize Options.   (line  857)
   49917 * ftree-pta:                             Optimize Options.   (line 1184)
   49918 * ftree-reassoc:                         Optimize Options.   (line  853)
   49919 * ftree-sink:                            Optimize Options.   (line  931)
   49920 * ftree-slp-vectorize:                   Optimize Options.   (line 1238)
   49921 * ftree-slsr:                            Optimize Options.   (line 1228)
   49922 * ftree-sra:                             Optimize Options.   (line 1188)
   49923 * ftree-ter:                             Optimize Options.   (line 1220)
   49924 * ftree-vect-loop-version:               Optimize Options.   (line 1242)
   49925 * ftree-vectorize:                       Optimize Options.   (line 1234)
   49926 * ftree-vectorizer-verbose:              Debugging Options.  (line 1177)
   49927 * ftree-vrp:                             Optimize Options.   (line 1255)
   49928 * funit-at-a-time:                       Optimize Options.   (line 1524)
   49929 * funroll-all-loops:                     Optimize Options.   (line 1275)
   49930 * funroll-loops:                         Optimize Options.   (line 1269)
   49931 * funsafe-loop-optimizations:            Optimize Options.   (line  518)
   49932 * funsafe-math-optimizations:            Optimize Options.   (line 1938)
   49933 * funsigned-bitfields <1>:               Non-bugs.           (line   57)
   49934 * funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
   49935                                                              (line   17)
   49936 * funsigned-bitfields:                   C Dialect Options.  (line  353)
   49937 * funsigned-char <1>:                    Characters implementation.
   49938                                                              (line   31)
   49939 * funsigned-char:                        C Dialect Options.  (line  325)
   49940 * funswitch-loops:                       Optimize Options.   (line 2165)
   49941 * funwind-tables:                        Code Gen Options.   (line  139)
   49942 * fuse-cxa-atexit:                       C++ Dialect Options.
   49943                                                              (line  272)
   49944 * fvar-tracking:                         Debugging Options.  (line 1290)
   49945 * fvar-tracking-assignments:             Debugging Options.  (line 1300)
   49946 * fvar-tracking-assignments-toggle:      Debugging Options.  (line 1309)
   49947 * fvariable-expansion-in-unroller:       Optimize Options.   (line 1295)
   49948 * fvect-cost-model:                      Optimize Options.   (line 1251)
   49949 * fverbose-asm:                          Code Gen Options.   (line  246)
   49950 * fvisibility:                           Code Gen Options.   (line  533)
   49951 * fvisibility-inlines-hidden:            C++ Dialect Options.
   49952                                                              (line  284)
   49953 * fvisibility-ms-compat:                 C++ Dialect Options.
   49954                                                              (line  312)
   49955 * fvpt:                                  Optimize Options.   (line 2110)
   49956 * fweb:                                  Optimize Options.   (line 1543)
   49957 * fwhole-program:                        Optimize Options.   (line 1554)
   49958 * fwide-exec-charset:                    Preprocessor Options.
   49959                                                              (line  559)
   49960 * fworking-directory:                    Preprocessor Options.
   49961                                                              (line  577)
   49962 * fwrapv:                                Code Gen Options.   (line  100)
   49963 * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
   49964                                                              (line  141)
   49965 * G <1>:                                 System V Options.   (line   10)
   49966 * G <2>:                                 RS/6000 and PowerPC Options.
   49967                                                              (line  743)
   49968 * G <3>:                                 MIPS Options.       (line  330)
   49969 * G:                                     M32R/D Options.     (line   57)
   49970 * g:                                     Debugging Options.  (line   10)
   49971 * gcoff:                                 Debugging Options.  (line   89)
   49972 * gdwarf-VERSION:                        Debugging Options.  (line  107)
   49973 * gen-decls:                             Objective-C and Objective-C++ Dialect Options.
   49974                                                              (line  153)
   49975 * gfull:                                 Darwin Options.     (line   69)
   49976 * ggdb:                                  Debugging Options.  (line   45)
   49977 * gno-record-gcc-switches:               Debugging Options.  (line  127)
   49978 * gno-strict-dwarf:                      Debugging Options.  (line  137)
   49979 * gpubnames:                             Debugging Options.  (line   51)
   49980 * grecord-gcc-switches:                  Debugging Options.  (line  118)
   49981 * gsplit-dwarf:                          Debugging Options.  (line   38)
   49982 * gstabs:                                Debugging Options.  (line   54)
   49983 * gstabs+:                               Debugging Options.  (line   83)
   49984 * gstrict-dwarf:                         Debugging Options.  (line  131)
   49985 * gtoggle:                               Debugging Options.  (line  174)
   49986 * gused:                                 Darwin Options.     (line   64)
   49987 * gvms:                                  Debugging Options.  (line  141)
   49988 * gxcoff:                                Debugging Options.  (line   94)
   49989 * gxcoff+:                               Debugging Options.  (line   99)
   49990 * H:                                     Preprocessor Options.
   49991                                                              (line  710)
   49992 * headerpad_max_install_names:           Darwin Options.     (line  196)
   49993 * help <1>:                              Preprocessor Options.
   49994                                                              (line  702)
   49995 * help:                                  Overall Options.    (line  221)
   49996 * hoist-adjacent-loads:                  Optimize Options.   (line  880)
   49997 * I <1>:                                 Directory Options.  (line   10)
   49998 * I:                                     Preprocessor Options.
   49999                                                              (line   77)
   50000 * I- <1>:                                Directory Options.  (line  119)
   50001 * I-:                                    Preprocessor Options.
   50002                                                              (line  387)
   50003 * idirafter:                             Preprocessor Options.
   50004                                                              (line  429)
   50005 * iframework:                            Darwin Options.     (line   57)
   50006 * imacros:                               Preprocessor Options.
   50007                                                              (line  420)
   50008 * image_base:                            Darwin Options.     (line  196)
   50009 * imultilib:                             Preprocessor Options.
   50010                                                              (line  454)
   50011 * include:                               Preprocessor Options.
   50012                                                              (line  409)
   50013 * init:                                  Darwin Options.     (line  196)
   50014 * install_name:                          Darwin Options.     (line  196)
   50015 * iprefix:                               Preprocessor Options.
   50016                                                              (line  436)
   50017 * iquote <1>:                            Directory Options.  (line   36)
   50018 * iquote:                                Preprocessor Options.
   50019                                                              (line  466)
   50020 * isysroot:                              Preprocessor Options.
   50021                                                              (line  448)
   50022 * isystem:                               Preprocessor Options.
   50023                                                              (line  458)
   50024 * iwithprefix:                           Preprocessor Options.
   50025                                                              (line  442)
   50026 * iwithprefixbefore:                     Preprocessor Options.
   50027                                                              (line  442)
   50028 * keep_private_externs:                  Darwin Options.     (line  196)
   50029 * L:                                     Directory Options.  (line   42)
   50030 * l:                                     Link Options.       (line   26)
   50031 * lobjc:                                 Link Options.       (line   53)
   50032 * m:                                     RS/6000 and PowerPC Options.
   50033                                                              (line  584)
   50034 * M:                                     Preprocessor Options.
   50035                                                              (line  185)
   50036 * m1:                                    SH Options.         (line    9)
   50037 * m10:                                   PDP-11 Options.     (line   29)
   50038 * m128bit-long-double:                   i386 and x86-64 Options.
   50039                                                              (line  342)
   50040 * m16-bit:                               CRIS Options.       (line   64)
   50041 * m1reg-:                                Adapteva Epiphany Options.
   50042                                                              (line  132)
   50043 * m2:                                    SH Options.         (line   12)
   50044 * m210:                                  MCore Options.      (line   43)
   50045 * m2a:                                   SH Options.         (line   30)
   50046 * m2a-nofpu:                             SH Options.         (line   18)
   50047 * m2a-single:                            SH Options.         (line   26)
   50048 * m2a-single-only:                       SH Options.         (line   22)
   50049 * m3:                                    SH Options.         (line   34)
   50050 * m31:                                   S/390 and zSeries Options.
   50051                                                              (line   87)
   50052 * m32 <1>:                               TILEPro Options.    (line   13)
   50053 * m32 <2>:                               TILE-Gx Options.    (line   23)
   50054 * m32 <3>:                               SPARC Options.      (line  257)
   50055 * m32 <4>:                               RS/6000 and PowerPC Options.
   50056                                                              (line  276)
   50057 * m32:                                   i386 and x86-64 Options.
   50058                                                              (line  841)
   50059 * m32-bit:                               CRIS Options.       (line   64)
   50060 * m32bit-doubles:                        RX Options.         (line   10)
   50061 * m32r:                                  M32R/D Options.     (line   15)
   50062 * m32r2:                                 M32R/D Options.     (line    9)
   50063 * m32rx:                                 M32R/D Options.     (line   12)
   50064 * m340:                                  MCore Options.      (line   43)
   50065 * m3dnow:                                i386 and x86-64 Options.
   50066                                                              (line  571)
   50067 * m3e:                                   SH Options.         (line   37)
   50068 * m4:                                    SH Options.         (line   51)
   50069 * m4-nofpu:                              SH Options.         (line   40)
   50070 * m4-single:                             SH Options.         (line   47)
   50071 * m4-single-only:                        SH Options.         (line   43)
   50072 * m40:                                   PDP-11 Options.     (line   23)
   50073 * m45:                                   PDP-11 Options.     (line   26)
   50074 * m4a:                                   SH Options.         (line   66)
   50075 * m4a-nofpu:                             SH Options.         (line   54)
   50076 * m4a-single:                            SH Options.         (line   62)
   50077 * m4a-single-only:                       SH Options.         (line   58)
   50078 * m4al:                                  SH Options.         (line   69)
   50079 * m4byte-functions:                      MCore Options.      (line   27)
   50080 * m5200:                                 M680x0 Options.     (line  147)
   50081 * m5206e:                                M680x0 Options.     (line  156)
   50082 * m528x:                                 M680x0 Options.     (line  160)
   50083 * m5307:                                 M680x0 Options.     (line  164)
   50084 * m5407:                                 M680x0 Options.     (line  168)
   50085 * m64 <1>:                               TILE-Gx Options.    (line   23)
   50086 * m64 <2>:                               SPARC Options.      (line  257)
   50087 * m64 <3>:                               S/390 and zSeries Options.
   50088                                                              (line   87)
   50089 * m64 <4>:                               RS/6000 and PowerPC Options.
   50090                                                              (line  276)
   50091 * m64:                                   i386 and x86-64 Options.
   50092                                                              (line  841)
   50093 * m64bit-doubles:                        RX Options.         (line   10)
   50094 * m68000:                                M680x0 Options.     (line   95)
   50095 * m68010:                                M680x0 Options.     (line  103)
   50096 * m68020:                                M680x0 Options.     (line  109)
   50097 * m68020-40:                             M680x0 Options.     (line  178)
   50098 * m68020-60:                             M680x0 Options.     (line  187)
   50099 * m68030:                                M680x0 Options.     (line  114)
   50100 * m68040:                                M680x0 Options.     (line  119)
   50101 * m68060:                                M680x0 Options.     (line  128)
   50102 * m68881:                                M680x0 Options.     (line  197)
   50103 * m8-bit:                                CRIS Options.       (line   64)
   50104 * m8byte-align:                          V850 Options.       (line  170)
   50105 * m96bit-long-double:                    i386 and x86-64 Options.
   50106                                                              (line  342)
   50107 * mabi <1>:                              RS/6000 and PowerPC Options.
   50108                                                              (line  611)
   50109 * mabi <2>:                              i386 and x86-64 Options.
   50110                                                              (line  721)
   50111 * mabi:                                  ARM Options.        (line   10)
   50112 * mabi=32:                               MIPS Options.       (line  131)
   50113 * mabi=64:                               MIPS Options.       (line  131)
   50114 * mabi=eabi:                             MIPS Options.       (line  131)
   50115 * mabi=elfv1:                            RS/6000 and PowerPC Options.
   50116                                                              (line  632)
   50117 * mabi=elfv2:                            RS/6000 and PowerPC Options.
   50118                                                              (line  638)
   50119 * mabi=gnu:                              MMIX Options.       (line   20)
   50120 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
   50121                                                              (line  624)
   50122 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
   50123                                                              (line  628)
   50124 * mabi=mmixware:                         MMIX Options.       (line   20)
   50125 * mabi=n32:                              MIPS Options.       (line  131)
   50126 * mabi=no-spe:                           RS/6000 and PowerPC Options.
   50127                                                              (line  621)
   50128 * mabi=o64:                              MIPS Options.       (line  131)
   50129 * mabi=spe:                              RS/6000 and PowerPC Options.
   50130                                                              (line  616)
   50131 * mabicalls:                             MIPS Options.       (line  155)
   50132 * mabort-on-noreturn:                    ARM Options.        (line  184)
   50133 * mabsdiff:                              MeP Options.        (line    7)
   50134 * mabshi:                                PDP-11 Options.     (line   55)
   50135 * mac0:                                  PDP-11 Options.     (line   16)
   50136 * macc-4:                                FRV Options.        (line  113)
   50137 * macc-8:                                FRV Options.        (line  116)
   50138 * maccumulate-args:                      AVR Options.        (line  135)
   50139 * maccumulate-outgoing-args <1>:         SH Options.         (line  330)
   50140 * maccumulate-outgoing-args:             i386 and x86-64 Options.
   50141                                                              (line  744)
   50142 * maddress-mode=long:                    i386 and x86-64 Options.
   50143                                                              (line  884)
   50144 * maddress-mode=short:                   i386 and x86-64 Options.
   50145                                                              (line  889)
   50146 * maddress-space-conversion:             SPU Options.        (line   63)
   50147 * mads:                                  RS/6000 and PowerPC Options.
   50148                                                              (line  666)
   50149 * maix-struct-return:                    RS/6000 and PowerPC Options.
   50150                                                              (line  604)
   50151 * maix32:                                RS/6000 and PowerPC Options.
   50152                                                              (line  314)
   50153 * maix64:                                RS/6000 and PowerPC Options.
   50154                                                              (line  314)
   50155 * malign-300:                            H8/300 Options.     (line   41)
   50156 * malign-double:                         i386 and x86-64 Options.
   50157                                                              (line  326)
   50158 * malign-int:                            M680x0 Options.     (line  267)
   50159 * malign-labels:                         FRV Options.        (line  104)
   50160 * malign-loops:                          M32R/D Options.     (line   73)
   50161 * malign-natural:                        RS/6000 and PowerPC Options.
   50162                                                              (line  353)
   50163 * malign-power:                          RS/6000 and PowerPC Options.
   50164                                                              (line  353)
   50165 * mall-opts:                             MeP Options.        (line   11)
   50166 * malloc-cc:                             FRV Options.        (line   25)
   50167 * maltivec:                              RS/6000 and PowerPC Options.
   50168                                                              (line  134)
   50169 * maltivec=be:                           RS/6000 and PowerPC Options.
   50170                                                              (line  150)
   50171 * maltivec=le:                           RS/6000 and PowerPC Options.
   50172                                                              (line  160)
   50173 * mam33:                                 MN10300 Options.    (line   17)
   50174 * mam33-2:                               MN10300 Options.    (line   24)
   50175 * mam34:                                 MN10300 Options.    (line   27)
   50176 * mandroid:                              GNU/Linux Options.  (line   21)
   50177 * mapcs:                                 ARM Options.        (line   22)
   50178 * mapcs-frame:                           ARM Options.        (line   14)
   50179 * mapp-regs <1>:                         V850 Options.       (line  181)
   50180 * mapp-regs:                             SPARC Options.      (line   10)
   50181 * march <1>:                             S/390 and zSeries Options.
   50182                                                              (line  116)
   50183 * march <2>:                             MIPS Options.       (line   14)
   50184 * march <3>:                             M680x0 Options.     (line   12)
   50185 * march <4>:                             i386 and x86-64 Options.
   50186                                                              (line   10)
   50187 * march <5>:                             HPPA Options.       (line    9)
   50188 * march <6>:                             CRIS Options.       (line   10)
   50189 * march <7>:                             C6X Options.        (line    7)
   50190 * march <8>:                             ARM Options.        (line   75)
   50191 * march:                                 AArch64 Options.    (line   55)
   50192 * marm:                                  ARM Options.        (line  248)
   50193 * mas100-syntax:                         RX Options.         (line   76)
   50194 * masm=DIALECT:                          i386 and x86-64 Options.
   50195                                                              (line  281)
   50196 * matomic-model=MODEL:                   SH Options.         (line  144)
   50197 * matomic-updates:                       SPU Options.        (line   78)
   50198 * mauto-pic:                             IA-64 Options.      (line   50)
   50199 * maverage:                              MeP Options.        (line   16)
   50200 * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
   50201                                                              (line  423)
   50202 * max-vect-align:                        Adapteva Epiphany Options.
   50203                                                              (line  120)
   50204 * mb:                                    SH Options.         (line   74)
   50205 * mbackchain:                            S/390 and zSeries Options.
   50206                                                              (line   35)
   50207 * mbarrel-shift-enabled:                 LM32 Options.       (line    9)
   50208 * mbase-addresses:                       MMIX Options.       (line   54)
   50209 * mbased=:                               MeP Options.        (line   20)
   50210 * mbcopy:                                PDP-11 Options.     (line   36)
   50211 * mbcopy-builtin:                        PDP-11 Options.     (line   32)
   50212 * mbig:                                  RS/6000 and PowerPC Options.
   50213                                                              (line  503)
   50214 * mbig-endian <1>:                       RS/6000 and PowerPC Options.
   50215                                                              (line  503)
   50216 * mbig-endian <2>:                       MicroBlaze Options. (line   57)
   50217 * mbig-endian <3>:                       MCore Options.      (line   39)
   50218 * mbig-endian <4>:                       IA-64 Options.      (line    9)
   50219 * mbig-endian <5>:                       C6X Options.        (line   13)
   50220 * mbig-endian <6>:                       ARM Options.        (line   62)
   50221 * mbig-endian:                           AArch64 Options.    (line    9)
   50222 * mbig-endian-data:                      RX Options.         (line   42)
   50223 * mbig-switch <1>:                       V850 Options.       (line  176)
   50224 * mbig-switch:                           HPPA Options.       (line   23)
   50225 * mbigtable:                             SH Options.         (line   89)
   50226 * mbionic:                               GNU/Linux Options.  (line   17)
   50227 * mbit-align:                            RS/6000 and PowerPC Options.
   50228                                                              (line  455)
   50229 * mbit-ops:                              CR16 Options.       (line   25)
   50230 * mbitfield:                             M680x0 Options.     (line  235)
   50231 * mbitops <1>:                           SH Options.         (line   93)
   50232 * mbitops:                               MeP Options.        (line   26)
   50233 * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
   50234                                                              (line  737)
   50235 * mbranch-cheap:                         PDP-11 Options.     (line   65)
   50236 * mbranch-cost <1>:                      MIPS Options.       (line  635)
   50237 * mbranch-cost <2>:                      AVR Options.        (line  150)
   50238 * mbranch-cost:                          Adapteva Epiphany Options.
   50239                                                              (line   18)
   50240 * mbranch-cost=NUM:                      SH Options.         (line  396)
   50241 * mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
   50242 * mbranch-expensive:                     PDP-11 Options.     (line   61)
   50243 * mbranch-hints:                         SPU Options.        (line   27)
   50244 * mbranch-likely:                        MIPS Options.       (line  642)
   50245 * mbranch-predict:                       MMIX Options.       (line   49)
   50246 * mbss-plt:                              RS/6000 and PowerPC Options.
   50247                                                              (line  187)
   50248 * mbuild-constants:                      DEC Alpha Options.  (line  141)
   50249 * mbwx:                                  DEC Alpha Options.  (line  163)
   50250 * mc68000:                               M680x0 Options.     (line   95)
   50251 * mc68020:                               M680x0 Options.     (line  109)
   50252 * mc=:                                   MeP Options.        (line   31)
   50253 * mcache-size:                           SPU Options.        (line   70)
   50254 * mcall-eabi:                            RS/6000 and PowerPC Options.
   50255                                                              (line  578)
   50256 * mcall-freebsd:                         RS/6000 and PowerPC Options.
   50257                                                              (line  592)
   50258 * mcall-linux:                           RS/6000 and PowerPC Options.
   50259                                                              (line  588)
   50260 * mcall-netbsd:                          RS/6000 and PowerPC Options.
   50261                                                              (line  596)
   50262 * mcall-prologues:                       AVR Options.        (line  155)
   50263 * mcall-sysv:                            RS/6000 and PowerPC Options.
   50264                                                              (line  570)
   50265 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
   50266                                                              (line  578)
   50267 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
   50268                                                              (line  581)
   50269 * mcallee-super-interworking:            ARM Options.        (line  266)
   50270 * mcaller-super-interworking:            ARM Options.        (line  273)
   50271 * mcallgraph-data:                       MCore Options.      (line   31)
   50272 * mcbcond:                               SPARC Options.      (line  224)
   50273 * mcbranchdi:                            SH Options.         (line  411)
   50274 * mcc-init:                              CRIS Options.       (line   41)
   50275 * mcfv4e:                                M680x0 Options.     (line  172)
   50276 * mcheck-zero-division:                  MIPS Options.       (line  441)
   50277 * mcix:                                  DEC Alpha Options.  (line  163)
   50278 * mcld:                                  i386 and x86-64 Options.
   50279                                                              (line  594)
   50280 * mclip:                                 MeP Options.        (line   35)
   50281 * mcmodel:                               SPARC Options.      (line  262)
   50282 * mcmodel=kernel:                        i386 and x86-64 Options.
   50283                                                              (line  868)
   50284 * mcmodel=large <1>:                     TILE-Gx Options.    (line   14)
   50285 * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
   50286                                                              (line  128)
   50287 * mcmodel=large <3>:                     i386 and x86-64 Options.
   50288                                                              (line  880)
   50289 * mcmodel=large:                         AArch64 Options.    (line   33)
   50290 * mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
   50291                                                              (line  124)
   50292 * mcmodel=medium:                        i386 and x86-64 Options.
   50293                                                              (line  873)
   50294 * mcmodel=small <1>:                     TILE-Gx Options.    (line    9)
   50295 * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
   50296                                                              (line  120)
   50297 * mcmodel=small <3>:                     i386 and x86-64 Options.
   50298                                                              (line  862)
   50299 * mcmodel=small:                         AArch64 Options.    (line   27)
   50300 * mcmodel=tiny:                          AArch64 Options.    (line   20)
   50301 * mcmove:                                Adapteva Epiphany Options.
   50302                                                              (line   23)
   50303 * mcmpb:                                 RS/6000 and PowerPC Options.
   50304                                                              (line   27)
   50305 * mcmpeqdi:                              SH Options.         (line  414)
   50306 * mcode-readable:                        MIPS Options.       (line  401)
   50307 * mcompat-align-parm:                    RS/6000 and PowerPC Options.
   50308                                                              (line  895)
   50309 * mcond-exec:                            FRV Options.        (line  152)
   50310 * mcond-move:                            FRV Options.        (line  128)
   50311 * mconfig=:                              MeP Options.        (line   39)
   50312 * mconsole:                              i386 and x86-64 Windows Options.
   50313                                                              (line    9)
   50314 * mconst-align:                          CRIS Options.       (line   55)
   50315 * mconst16:                              Xtensa Options.     (line   10)
   50316 * mconstant-gp:                          IA-64 Options.      (line   46)
   50317 * mcop:                                  MeP Options.        (line   48)
   50318 * mcop32:                                MeP Options.        (line   53)
   50319 * mcop64:                                MeP Options.        (line   56)
   50320 * mcorea:                                Blackfin Options.   (line  157)
   50321 * mcoreb:                                Blackfin Options.   (line  164)
   50322 * mcpu <1>:                              TILEPro Options.    (line    9)
   50323 * mcpu <2>:                              TILE-Gx Options.    (line   18)
   50324 * mcpu <3>:                              SPARC Options.      (line  102)
   50325 * mcpu <4>:                              RS/6000 and PowerPC Options.
   50326                                                              (line   69)
   50327 * mcpu <5>:                              picoChip Options.   (line    9)
   50328 * mcpu <6>:                              M680x0 Options.     (line   28)
   50329 * mcpu <7>:                              i386 and x86-64 Options.
   50330                                                              (line  229)
   50331 * mcpu <8>:                              FRV Options.        (line  212)
   50332 * mcpu <9>:                              DEC Alpha Options.  (line  215)
   50333 * mcpu <10>:                             CRIS Options.       (line   10)
   50334 * mcpu <11>:                             ARM Options.        (line  124)
   50335 * mcpu:                                  AArch64 Options.    (line   69)
   50336 * mcpu32:                                M680x0 Options.     (line  138)
   50337 * mcpu= <1>:                             MicroBlaze Options. (line   20)
   50338 * mcpu= <2>:                             M32C Options.       (line    7)
   50339 * mcpu=:                                 Blackfin Options.   (line    7)
   50340 * mcr16c:                                CR16 Options.       (line   14)
   50341 * mcr16cplus:                            CR16 Options.       (line   14)
   50342 * mcrc32:                                i386 and x86-64 Options.
   50343                                                              (line  641)
   50344 * mcrypto:                               RS/6000 and PowerPC Options.
   50345                                                              (line  222)
   50346 * mcsync-anomaly:                        Blackfin Options.   (line   60)
   50347 * mcx16:                                 i386 and x86-64 Options.
   50348                                                              (line  618)
   50349 * MD:                                    Preprocessor Options.
   50350                                                              (line  274)
   50351 * mdalign:                               SH Options.         (line   80)
   50352 * mdata-align:                           CRIS Options.       (line   55)
   50353 * mdata-model:                           CR16 Options.       (line   28)
   50354 * mdc:                                   MeP Options.        (line   62)
   50355 * mdebug <1>:                            S/390 and zSeries Options.
   50356                                                              (line  112)
   50357 * mdebug:                                M32R/D Options.     (line   69)
   50358 * mdebug-main=PREFIX:                    VMS Options.        (line   13)
   50359 * mdec-asm:                              PDP-11 Options.     (line   72)
   50360 * mdirect-move:                          RS/6000 and PowerPC Options.
   50361                                                              (line  228)
   50362 * mdisable-callt:                        V850 Options.       (line   92)
   50363 * mdisable-fpregs:                       HPPA Options.       (line   33)
   50364 * mdisable-indexing:                     HPPA Options.       (line   39)
   50365 * mdiv <1>:                              MeP Options.        (line   65)
   50366 * mdiv <2>:                              MCore Options.      (line   15)
   50367 * mdiv:                                  M680x0 Options.     (line  209)
   50368 * mdiv=STRATEGY:                         SH Options.         (line  238)
   50369 * mdivide-breaks:                        MIPS Options.       (line  447)
   50370 * mdivide-enabled:                       LM32 Options.       (line   12)
   50371 * mdivide-traps:                         MIPS Options.       (line  447)
   50372 * mdivsi3_libfunc=NAME:                  SH Options.         (line  336)
   50373 * mdll:                                  i386 and x86-64 Windows Options.
   50374                                                              (line   16)
   50375 * mdlmzb:                                RS/6000 and PowerPC Options.
   50376                                                              (line  448)
   50377 * mdmx:                                  MIPS Options.       (line  290)
   50378 * mdouble:                               FRV Options.        (line   38)
   50379 * mdouble-float <1>:                     RS/6000 and PowerPC Options.
   50380                                                              (line  371)
   50381 * mdouble-float:                         MIPS Options.       (line  248)
   50382 * mdsp:                                  MIPS Options.       (line  267)
   50383 * mdspr2:                                MIPS Options.       (line  273)
   50384 * mdual-nops:                            SPU Options.        (line   90)
   50385 * mdwarf2-asm:                           IA-64 Options.      (line   94)
   50386 * mdword:                                FRV Options.        (line   32)
   50387 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
   50388                                                              (line  508)
   50389 * mea32:                                 SPU Options.        (line   55)
   50390 * mea64:                                 SPU Options.        (line   55)
   50391 * meabi:                                 RS/6000 and PowerPC Options.
   50392                                                              (line  685)
   50393 * mearly-stop-bits:                      IA-64 Options.      (line  100)
   50394 * meb <1>:                               Score Options.      (line    9)
   50395 * meb <2>:                               Moxie Options.      (line    7)
   50396 * meb:                                   MeP Options.        (line   68)
   50397 * mel <1>:                               Score Options.      (line   12)
   50398 * mel <2>:                               Moxie Options.      (line   11)
   50399 * mel:                                   MeP Options.        (line   71)
   50400 * melf <1>:                              MMIX Options.       (line   44)
   50401 * melf:                                  CRIS Options.       (line   87)
   50402 * memb:                                  RS/6000 and PowerPC Options.
   50403                                                              (line  680)
   50404 * membedded-data:                        MIPS Options.       (line  388)
   50405 * memregs=:                              M32C Options.       (line   21)
   50406 * mep:                                   V850 Options.       (line   16)
   50407 * mepsilon:                              MMIX Options.       (line   15)
   50408 * merror-reloc:                          SPU Options.        (line   10)
   50409 * mesa:                                  S/390 and zSeries Options.
   50410                                                              (line   95)
   50411 * metrax100:                             CRIS Options.       (line   26)
   50412 * metrax4:                               CRIS Options.       (line   26)
   50413 * mexplicit-relocs <1>:                  MIPS Options.       (line  432)
   50414 * mexplicit-relocs:                      DEC Alpha Options.  (line  176)
   50415 * mexr:                                  H8/300 Options.     (line   28)
   50416 * mextern-sdata:                         MIPS Options.       (line  350)
   50417 * MF:                                    Preprocessor Options.
   50418                                                              (line  220)
   50419 * mfast-fp:                              Blackfin Options.   (line  133)
   50420 * mfast-indirect-calls:                  HPPA Options.       (line   51)
   50421 * mfaster-structs:                       SPARC Options.      (line   92)
   50422 * mfdpic:                                FRV Options.        (line   56)
   50423 * mfentry:                               i386 and x86-64 Options.
   50424                                                              (line  817)
   50425 * mfix:                                  DEC Alpha Options.  (line  163)
   50426 * mfix-24k:                              MIPS Options.       (line  500)
   50427 * mfix-and-continue:                     Darwin Options.     (line  104)
   50428 * mfix-at697f:                           SPARC Options.      (line  244)
   50429 * mfix-cortex-m3-ldrd:                   ARM Options.        (line  306)
   50430 * mfix-r10000:                           MIPS Options.       (line  527)
   50431 * mfix-r4000:                            MIPS Options.       (line  506)
   50432 * mfix-r4400:                            MIPS Options.       (line  520)
   50433 * mfix-sb1:                              MIPS Options.       (line  559)
   50434 * mfix-ut699:                            SPARC Options.      (line  249)
   50435 * mfix-vr4120:                           MIPS Options.       (line  538)
   50436 * mfix-vr4130:                           MIPS Options.       (line  552)
   50437 * mfixed-cc:                             FRV Options.        (line   28)
   50438 * mfixed-range <1>:                      SPU Options.        (line   47)
   50439 * mfixed-range <2>:                      SH Options.         (line  343)
   50440 * mfixed-range <3>:                      IA-64 Options.      (line  105)
   50441 * mfixed-range:                          HPPA Options.       (line   58)
   50442 * mflat:                                 SPARC Options.      (line   22)
   50443 * mflip-mips16:                          MIPS Options.       (line  111)
   50444 * mfloat-abi:                            ARM Options.        (line   42)
   50445 * mfloat-gprs:                           RS/6000 and PowerPC Options.
   50446                                                              (line  259)
   50447 * mfloat-ieee:                           DEC Alpha Options.  (line  171)
   50448 * mfloat-vax:                            DEC Alpha Options.  (line  171)
   50449 * mfloat32:                              PDP-11 Options.     (line   52)
   50450 * mfloat64:                              PDP-11 Options.     (line   48)
   50451 * mflush-func:                           MIPS Options.       (line  626)
   50452 * mflush-func=NAME:                      M32R/D Options.     (line   93)
   50453 * mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
   50454 * mfmaf:                                 SPARC Options.      (line  238)
   50455 * mfmovd:                                SH Options.         (line   96)
   50456 * mforce-no-pic:                         Xtensa Options.     (line   41)
   50457 * mfp-exceptions:                        MIPS Options.       (line  653)
   50458 * mfp-mode:                              Adapteva Epiphany Options.
   50459                                                              (line   72)
   50460 * mfp-reg:                               DEC Alpha Options.  (line   25)
   50461 * mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
   50462 * mfp-trap-mode:                         DEC Alpha Options.  (line   63)
   50463 * mfp16-format:                          ARM Options.        (line  164)
   50464 * mfp32:                                 MIPS Options.       (line  221)
   50465 * mfp64:                                 MIPS Options.       (line  224)
   50466 * mfpmath <1>:                           i386 and x86-64 Options.
   50467                                                              (line  232)
   50468 * mfpmath:                               Optimize Options.   (line 1898)
   50469 * mfpr-32:                               FRV Options.        (line   13)
   50470 * mfpr-64:                               FRV Options.        (line   16)
   50471 * mfprnd:                                RS/6000 and PowerPC Options.
   50472                                                              (line   27)
   50473 * mfpu <1>:                              SPARC Options.      (line   35)
   50474 * mfpu <2>:                              RS/6000 and PowerPC Options.
   50475                                                              (line  379)
   50476 * mfpu <3>:                              PDP-11 Options.     (line    9)
   50477 * mfpu:                                  ARM Options.        (line  144)
   50478 * mfriz:                                 RS/6000 and PowerPC Options.
   50479                                                              (line  866)
   50480 * mfsca:                                 SH Options.         (line  428)
   50481 * mfsrra:                                SH Options.         (line  437)
   50482 * mfull-toc:                             RS/6000 and PowerPC Options.
   50483                                                              (line  287)
   50484 * mfused-madd <1>:                       Xtensa Options.     (line   19)
   50485 * mfused-madd <2>:                       SH Options.         (line  419)
   50486 * mfused-madd <3>:                       S/390 and zSeries Options.
   50487                                                              (line  137)
   50488 * mfused-madd <4>:                       RS/6000 and PowerPC Options.
   50489                                                              (line  432)
   50490 * mfused-madd <5>:                       MIPS Options.       (line  482)
   50491 * mfused-madd:                           IA-64 Options.      (line   88)
   50492 * mg:                                    VAX Options.        (line   17)
   50493 * MG:                                    Preprocessor Options.
   50494                                                              (line  229)
   50495 * mgas:                                  HPPA Options.       (line   74)
   50496 * mgcc-abi:                              V850 Options.       (line  148)
   50497 * mgen-cell-microcode:                   RS/6000 and PowerPC Options.
   50498                                                              (line  175)
   50499 * mgeneral-regs-only:                    AArch64 Options.    (line   13)
   50500 * mgettrcost=NUMBER:                     SH Options.         (line  360)
   50501 * mghs:                                  V850 Options.       (line  127)
   50502 * mglibc:                                GNU/Linux Options.  (line    9)
   50503 * mgnu:                                  VAX Options.        (line   13)
   50504 * mgnu-as:                               IA-64 Options.      (line   18)
   50505 * mgnu-ld <1>:                           IA-64 Options.      (line   23)
   50506 * mgnu-ld:                               HPPA Options.       (line  110)
   50507 * mgotplt:                               CRIS Options.       (line   81)
   50508 * mgp32:                                 MIPS Options.       (line  215)
   50509 * mgp64:                                 MIPS Options.       (line  218)
   50510 * mgpopt:                                MIPS Options.       (line  373)
   50511 * mgpr-32:                               FRV Options.        (line    7)
   50512 * mgpr-64:                               FRV Options.        (line   10)
   50513 * mgprel-ro:                             FRV Options.        (line   79)
   50514 * mh:                                    H8/300 Options.     (line   14)
   50515 * mhalf-reg-file:                        Adapteva Epiphany Options.
   50516                                                              (line    9)
   50517 * mhard-dfp <1>:                         S/390 and zSeries Options.
   50518                                                              (line   20)
   50519 * mhard-dfp:                             RS/6000 and PowerPC Options.
   50520                                                              (line   27)
   50521 * mhard-float <1>:                       V850 Options.       (line  113)
   50522 * mhard-float <2>:                       SPARC Options.      (line   35)
   50523 * mhard-float <3>:                       S/390 and zSeries Options.
   50524                                                              (line   11)
   50525 * mhard-float <4>:                       RS/6000 and PowerPC Options.
   50526                                                              (line  365)
   50527 * mhard-float <5>:                       MIPS Options.       (line  227)
   50528 * mhard-float <6>:                       MicroBlaze Options. (line   10)
   50529 * mhard-float <7>:                       M680x0 Options.     (line  197)
   50530 * mhard-float:                           FRV Options.        (line   19)
   50531 * mhard-quad-float:                      SPARC Options.      (line   56)
   50532 * mhardlit:                              MCore Options.      (line   10)
   50533 * mhint-max-distance:                    SPU Options.        (line  102)
   50534 * mhint-max-nops:                        SPU Options.        (line   96)
   50535 * mhitachi:                              SH Options.         (line  100)
   50536 * mhotpatch:                             S/390 and zSeries Options.
   50537                                                              (line  174)
   50538 * mhp-ld:                                HPPA Options.       (line  122)
   50539 * micplb:                                Blackfin Options.   (line  178)
   50540 * mid-shared-library:                    Blackfin Options.   (line   81)
   50541 * mieee <1>:                             SH Options.         (line  116)
   50542 * mieee:                                 DEC Alpha Options.  (line   39)
   50543 * mieee-conformant:                      DEC Alpha Options.  (line  134)
   50544 * mieee-fp:                              i386 and x86-64 Options.
   50545                                                              (line  287)
   50546 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
   50547 * milp32:                                IA-64 Options.      (line  121)
   50548 * mimpure-text:                          Solaris 2 Options.  (line    9)
   50549 * mincoming-stack-boundary:              i386 and x86-64 Options.
   50550                                                              (line  492)
   50551 * mindexed-addressing:                   SH Options.         (line  350)
   50552 * minline-all-stringops:                 i386 and x86-64 Options.
   50553                                                              (line  765)
   50554 * minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
   50555 * minline-float-divide-min-latency:      IA-64 Options.      (line   54)
   50556 * minline-ic_invalidate:                 SH Options.         (line  125)
   50557 * minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
   50558 * minline-int-divide-min-latency:        IA-64 Options.      (line   65)
   50559 * minline-plt <1>:                       FRV Options.        (line   64)
   50560 * minline-plt:                           Blackfin Options.   (line  138)
   50561 * minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
   50562 * minline-sqrt-min-latency:              IA-64 Options.      (line   76)
   50563 * minline-stringops-dynamically:         i386 and x86-64 Options.
   50564                                                              (line  772)
   50565 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
   50566                                                              (line  548)
   50567 * mint-register:                         RX Options.         (line  100)
   50568 * mint16:                                PDP-11 Options.     (line   40)
   50569 * mint32 <1>:                            PDP-11 Options.     (line   44)
   50570 * mint32 <2>:                            H8/300 Options.     (line   38)
   50571 * mint32:                                CR16 Options.       (line   22)
   50572 * mint8:                                 AVR Options.        (line  159)
   50573 * minterlink-mips16:                     MIPS Options.       (line  118)
   50574 * minvalid-symbols:                      SH Options.         (line  386)
   50575 * mio-volatile:                          MeP Options.        (line   74)
   50576 * mips1:                                 MIPS Options.       (line   78)
   50577 * mips16:                                MIPS Options.       (line  103)
   50578 * mips2:                                 MIPS Options.       (line   81)
   50579 * mips3:                                 MIPS Options.       (line   84)
   50580 * mips32:                                MIPS Options.       (line   90)
   50581 * mips32r2:                              MIPS Options.       (line   93)
   50582 * mips3d:                                MIPS Options.       (line  296)
   50583 * mips4:                                 MIPS Options.       (line   87)
   50584 * mips64:                                MIPS Options.       (line   96)
   50585 * mips64r2:                              MIPS Options.       (line   99)
   50586 * misel:                                 RS/6000 and PowerPC Options.
   50587                                                              (line  193)
   50588 * misize:                                SH Options.         (line  137)
   50589 * missue-rate=NUMBER:                    M32R/D Options.     (line   79)
   50590 * mivc2:                                 MeP Options.        (line   59)
   50591 * mjump-in-delay:                        HPPA Options.       (line   28)
   50592 * mkernel:                               Darwin Options.     (line   82)
   50593 * mknuthdiv:                             MMIX Options.       (line   33)
   50594 * ml <1>:                                SH Options.         (line   77)
   50595 * ml:                                    MeP Options.        (line   78)
   50596 * mlarge-data:                           DEC Alpha Options.  (line  187)
   50597 * mlarge-data-threshold:                 i386 and x86-64 Options.
   50598                                                              (line  378)
   50599 * mlarge-mem:                            SPU Options.        (line   35)
   50600 * mlarge-text:                           DEC Alpha Options.  (line  205)
   50601 * mleadz:                                MeP Options.        (line   81)
   50602 * mleaf-id-shared-library:               Blackfin Options.   (line   92)
   50603 * mlibfuncs:                             MMIX Options.       (line   10)
   50604 * mlibrary-pic:                          FRV Options.        (line  110)
   50605 * mlinked-fp:                            FRV Options.        (line   94)
   50606 * mlinker-opt:                           HPPA Options.       (line   84)
   50607 * mlinux:                                CRIS Options.       (line   91)
   50608 * mlittle:                               RS/6000 and PowerPC Options.
   50609                                                              (line  497)
   50610 * mlittle-endian <1>:                    RS/6000 and PowerPC Options.
   50611                                                              (line  497)
   50612 * mlittle-endian <2>:                    MicroBlaze Options. (line   60)
   50613 * mlittle-endian <3>:                    MCore Options.      (line   39)
   50614 * mlittle-endian <4>:                    IA-64 Options.      (line   13)
   50615 * mlittle-endian <5>:                    C6X Options.        (line   16)
   50616 * mlittle-endian <6>:                    ARM Options.        (line   58)
   50617 * mlittle-endian:                        AArch64 Options.    (line   16)
   50618 * mlittle-endian-data:                   RX Options.         (line   42)
   50619 * mliw:                                  MN10300 Options.    (line   54)
   50620 * mllsc:                                 MIPS Options.       (line  253)
   50621 * mlocal-sdata:                          MIPS Options.       (line  338)
   50622 * mlong-calls <1>:                       V850 Options.       (line   10)
   50623 * mlong-calls <2>:                       MIPS Options.       (line  468)
   50624 * mlong-calls <3>:                       FRV Options.        (line   99)
   50625 * mlong-calls <4>:                       Blackfin Options.   (line  121)
   50626 * mlong-calls <5>:                       ARM Options.        (line  189)
   50627 * mlong-calls:                           Adapteva Epiphany Options.
   50628                                                              (line   55)
   50629 * mlong-double-128:                      S/390 and zSeries Options.
   50630                                                              (line   29)
   50631 * mlong-double-64 <1>:                   S/390 and zSeries Options.
   50632                                                              (line   29)
   50633 * mlong-double-64:                       i386 and x86-64 Options.
   50634                                                              (line  367)
   50635 * mlong-double-80:                       i386 and x86-64 Options.
   50636                                                              (line  367)
   50637 * mlong-jumps:                           V850 Options.       (line  108)
   50638 * mlong-load-store:                      HPPA Options.       (line   65)
   50639 * mlong32:                               MIPS Options.       (line  313)
   50640 * mlong64:                               MIPS Options.       (line  308)
   50641 * mlongcall:                             RS/6000 and PowerPC Options.
   50642                                                              (line  757)
   50643 * mlongcalls:                            Xtensa Options.     (line   72)
   50644 * mloop:                                 V850 Options.       (line  121)
   50645 * mlow-64k:                              Blackfin Options.   (line   70)
   50646 * mlp64:                                 IA-64 Options.      (line  121)
   50647 * mm:                                    MeP Options.        (line   84)
   50648 * MM:                                    Preprocessor Options.
   50649                                                              (line  210)
   50650 * mmac <1>:                              Score Options.      (line   21)
   50651 * mmac:                                  CR16 Options.       (line    9)
   50652 * mmad:                                  MIPS Options.       (line  477)
   50653 * mmalloc64:                             VMS Options.        (line   17)
   50654 * mmax:                                  DEC Alpha Options.  (line  163)
   50655 * mmax-constant-size:                    RX Options.         (line   82)
   50656 * mmax-stack-frame:                      CRIS Options.       (line   22)
   50657 * mmcount-ra-address:                    MIPS Options.       (line  702)
   50658 * mmcu <1>:                              MIPS Options.       (line  305)
   50659 * mmcu:                                  AVR Options.        (line    9)
   50660 * MMD:                                   Preprocessor Options.
   50661                                                              (line  290)
   50662 * mmedia:                                FRV Options.        (line   44)
   50663 * mmemcpy <1>:                           MIPS Options.       (line  462)
   50664 * mmemcpy:                               MicroBlaze Options. (line   13)
   50665 * mmemory-latency:                       DEC Alpha Options.  (line  268)
   50666 * mmemory-model:                         SPARC Options.      (line  290)
   50667 * mmfcrf:                                RS/6000 and PowerPC Options.
   50668                                                              (line   27)
   50669 * mmfpgpr:                               RS/6000 and PowerPC Options.
   50670                                                              (line   27)
   50671 * mminimal-toc:                          RS/6000 and PowerPC Options.
   50672                                                              (line  287)
   50673 * mminmax:                               MeP Options.        (line   87)
   50674 * mmmx:                                  i386 and x86-64 Options.
   50675                                                              (line  571)
   50676 * mmodel=large:                          M32R/D Options.     (line   33)
   50677 * mmodel=medium:                         M32R/D Options.     (line   27)
   50678 * mmodel=small:                          M32R/D Options.     (line   18)
   50679 * mmovbe:                                i386 and x86-64 Options.
   50680                                                              (line  637)
   50681 * mmt:                                   MIPS Options.       (line  301)
   50682 * mmul:                                  RL78 Options.       (line   13)
   50683 * mmul-bug-workaround:                   CRIS Options.       (line   31)
   50684 * mmuladd:                               FRV Options.        (line   50)
   50685 * mmulhw:                                RS/6000 and PowerPC Options.
   50686                                                              (line  441)
   50687 * mmult:                                 MeP Options.        (line   90)
   50688 * mmult-bug:                             MN10300 Options.    (line    9)
   50689 * mmulti-cond-exec:                      FRV Options.        (line  176)
   50690 * mmulticore:                            Blackfin Options.   (line  142)
   50691 * mmultiple:                             RS/6000 and PowerPC Options.
   50692                                                              (line  391)
   50693 * mmvcle:                                S/390 and zSeries Options.
   50694                                                              (line  105)
   50695 * mmvme:                                 RS/6000 and PowerPC Options.
   50696                                                              (line  661)
   50697 * mn:                                    H8/300 Options.     (line   20)
   50698 * mnested-cond-exec:                     FRV Options.        (line  189)
   50699 * mnhwloop:                              Score Options.      (line   15)
   50700 * mno-3dnow:                             i386 and x86-64 Options.
   50701                                                              (line  571)
   50702 * mno-4byte-functions:                   MCore Options.      (line   27)
   50703 * mno-8byte-align:                       V850 Options.       (line  170)
   50704 * mno-abicalls:                          MIPS Options.       (line  155)
   50705 * mno-abshi:                             PDP-11 Options.     (line   58)
   50706 * mno-ac0:                               PDP-11 Options.     (line   20)
   50707 * mno-address-space-conversion:          SPU Options.        (line   63)
   50708 * mno-align-double:                      i386 and x86-64 Options.
   50709                                                              (line  326)
   50710 * mno-align-int:                         M680x0 Options.     (line  267)
   50711 * mno-align-loops:                       M32R/D Options.     (line   76)
   50712 * mno-align-stringops:                   i386 and x86-64 Options.
   50713                                                              (line  760)
   50714 * mno-altivec:                           RS/6000 and PowerPC Options.
   50715                                                              (line  134)
   50716 * mno-am33:                              MN10300 Options.    (line   20)
   50717 * mno-app-regs <1>:                      V850 Options.       (line  185)
   50718 * mno-app-regs:                          SPARC Options.      (line   10)
   50719 * mno-as100-syntax:                      RX Options.         (line   76)
   50720 * mno-atomic-updates:                    SPU Options.        (line   78)
   50721 * mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
   50722                                                              (line  423)
   50723 * mno-backchain:                         S/390 and zSeries Options.
   50724                                                              (line   35)
   50725 * mno-base-addresses:                    MMIX Options.       (line   54)
   50726 * mno-bit-align:                         RS/6000 and PowerPC Options.
   50727                                                              (line  455)
   50728 * mno-bitfield:                          M680x0 Options.     (line  231)
   50729 * mno-branch-likely:                     MIPS Options.       (line  642)
   50730 * mno-branch-predict:                    MMIX Options.       (line   49)
   50731 * mno-bwx:                               DEC Alpha Options.  (line  163)
   50732 * mno-callgraph-data:                    MCore Options.      (line   31)
   50733 * mno-cbcond:                            SPARC Options.      (line  224)
   50734 * mno-check-zero-division:               MIPS Options.       (line  441)
   50735 * mno-cix:                               DEC Alpha Options.  (line  163)
   50736 * mno-clearbss:                          MicroBlaze Options. (line   16)
   50737 * mno-cmpb:                              RS/6000 and PowerPC Options.
   50738                                                              (line   27)
   50739 * mno-cond-exec:                         FRV Options.        (line  158)
   50740 * mno-cond-move:                         FRV Options.        (line  134)
   50741 * mno-const-align:                       CRIS Options.       (line   55)
   50742 * mno-const16:                           Xtensa Options.     (line   10)
   50743 * mno-crt0 <1>:                          Moxie Options.      (line   14)
   50744 * mno-crt0:                              MN10300 Options.    (line   43)
   50745 * mno-crypto:                            RS/6000 and PowerPC Options.
   50746                                                              (line  222)
   50747 * mno-csync-anomaly:                     Blackfin Options.   (line   66)
   50748 * mno-data-align:                        CRIS Options.       (line   55)
   50749 * mno-debug:                             S/390 and zSeries Options.
   50750                                                              (line  112)
   50751 * mno-direct-move:                       RS/6000 and PowerPC Options.
   50752                                                              (line  228)
   50753 * mno-disable-callt:                     V850 Options.       (line   92)
   50754 * mno-div <1>:                           MCore Options.      (line   15)
   50755 * mno-div:                               M680x0 Options.     (line  209)
   50756 * mno-dlmzb:                             RS/6000 and PowerPC Options.
   50757                                                              (line  448)
   50758 * mno-double:                            FRV Options.        (line   41)
   50759 * mno-dsp:                               MIPS Options.       (line  267)
   50760 * mno-dspr2:                             MIPS Options.       (line  273)
   50761 * mno-dwarf2-asm:                        IA-64 Options.      (line   94)
   50762 * mno-dword:                             FRV Options.        (line   35)
   50763 * mno-eabi:                              RS/6000 and PowerPC Options.
   50764                                                              (line  685)
   50765 * mno-early-stop-bits:                   IA-64 Options.      (line  100)
   50766 * mno-eflags:                            FRV Options.        (line  125)
   50767 * mno-embedded-data:                     MIPS Options.       (line  388)
   50768 * mno-ep:                                V850 Options.       (line   16)
   50769 * mno-epsilon:                           MMIX Options.       (line   15)
   50770 * mno-explicit-relocs <1>:               MIPS Options.       (line  432)
   50771 * mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
   50772 * mno-exr:                               H8/300 Options.     (line   33)
   50773 * mno-extern-sdata:                      MIPS Options.       (line  350)
   50774 * mno-fancy-math-387:                    i386 and x86-64 Options.
   50775                                                              (line  315)
   50776 * mno-faster-structs:                    SPARC Options.      (line   92)
   50777 * mno-fix:                               DEC Alpha Options.  (line  163)
   50778 * mno-fix-24k:                           MIPS Options.       (line  500)
   50779 * mno-fix-r10000:                        MIPS Options.       (line  527)
   50780 * mno-fix-r4000:                         MIPS Options.       (line  506)
   50781 * mno-fix-r4400:                         MIPS Options.       (line  520)
   50782 * mno-flat:                              SPARC Options.      (line   22)
   50783 * mno-float:                             MIPS Options.       (line  234)
   50784 * mno-float32:                           PDP-11 Options.     (line   48)
   50785 * mno-float64:                           PDP-11 Options.     (line   52)
   50786 * mno-flush-func:                        M32R/D Options.     (line   98)
   50787 * mno-flush-trap:                        M32R/D Options.     (line   90)
   50788 * mno-fmaf:                              SPARC Options.      (line  238)
   50789 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
   50790                                                              (line  287)
   50791 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
   50792 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
   50793                                                              (line  305)
   50794 * mno-fprnd:                             RS/6000 and PowerPC Options.
   50795                                                              (line   27)
   50796 * mno-fpu:                               SPARC Options.      (line   40)
   50797 * mno-fsca:                              SH Options.         (line  428)
   50798 * mno-fsrra:                             SH Options.         (line  437)
   50799 * mno-fused-madd <1>:                    Xtensa Options.     (line   19)
   50800 * mno-fused-madd <2>:                    SH Options.         (line  419)
   50801 * mno-fused-madd <3>:                    S/390 and zSeries Options.
   50802                                                              (line  137)
   50803 * mno-fused-madd <4>:                    RS/6000 and PowerPC Options.
   50804                                                              (line  432)
   50805 * mno-fused-madd <5>:                    MIPS Options.       (line  482)
   50806 * mno-fused-madd:                        IA-64 Options.      (line   88)
   50807 * mno-gnu-as:                            IA-64 Options.      (line   18)
   50808 * mno-gnu-ld:                            IA-64 Options.      (line   23)
   50809 * mno-gotplt:                            CRIS Options.       (line   81)
   50810 * mno-gpopt:                             MIPS Options.       (line  373)
   50811 * mno-hard-dfp <1>:                      S/390 and zSeries Options.
   50812                                                              (line   20)
   50813 * mno-hard-dfp:                          RS/6000 and PowerPC Options.
   50814                                                              (line   27)
   50815 * mno-hardlit:                           MCore Options.      (line   10)
   50816 * mno-id-shared-library:                 Blackfin Options.   (line   88)
   50817 * mno-ieee-fp:                           i386 and x86-64 Options.
   50818                                                              (line  287)
   50819 * mno-inline-float-divide:               IA-64 Options.      (line   62)
   50820 * mno-inline-int-divide:                 IA-64 Options.      (line   73)
   50821 * mno-inline-sqrt:                       IA-64 Options.      (line   84)
   50822 * mno-int16:                             PDP-11 Options.     (line   44)
   50823 * mno-int32:                             PDP-11 Options.     (line   40)
   50824 * mno-interlink-mips16:                  MIPS Options.       (line  118)
   50825 * mno-interrupts:                        AVR Options.        (line  165)
   50826 * mno-isel:                              RS/6000 and PowerPC Options.
   50827                                                              (line  193)
   50828 * mno-knuthdiv:                          MMIX Options.       (line   33)
   50829 * mno-leaf-id-shared-library:            Blackfin Options.   (line   98)
   50830 * mno-libfuncs:                          MMIX Options.       (line   10)
   50831 * mno-llsc:                              MIPS Options.       (line  253)
   50832 * mno-local-sdata:                       MIPS Options.       (line  338)
   50833 * mno-long-calls <1>:                    V850 Options.       (line   10)
   50834 * mno-long-calls <2>:                    MIPS Options.       (line  468)
   50835 * mno-long-calls <3>:                    HPPA Options.       (line  135)
   50836 * mno-long-calls <4>:                    Blackfin Options.   (line  121)
   50837 * mno-long-calls:                        ARM Options.        (line  189)
   50838 * mno-long-jumps:                        V850 Options.       (line  108)
   50839 * mno-longcall:                          RS/6000 and PowerPC Options.
   50840                                                              (line  757)
   50841 * mno-longcalls:                         Xtensa Options.     (line   72)
   50842 * mno-low-64k:                           Blackfin Options.   (line   74)
   50843 * mno-lsim <1>:                          MCore Options.      (line   46)
   50844 * mno-lsim:                              FR30 Options.       (line   14)
   50845 * mno-mad:                               MIPS Options.       (line  477)
   50846 * mno-max:                               DEC Alpha Options.  (line  163)
   50847 * mno-mcount-ra-address:                 MIPS Options.       (line  702)
   50848 * mno-mcu:                               MIPS Options.       (line  305)
   50849 * mno-mdmx:                              MIPS Options.       (line  290)
   50850 * mno-media:                             FRV Options.        (line   47)
   50851 * mno-memcpy:                            MIPS Options.       (line  462)
   50852 * mno-mfcrf:                             RS/6000 and PowerPC Options.
   50853                                                              (line   27)
   50854 * mno-mfpgpr:                            RS/6000 and PowerPC Options.
   50855                                                              (line   27)
   50856 * mno-mips16:                            MIPS Options.       (line  103)
   50857 * mno-mips3d:                            MIPS Options.       (line  296)
   50858 * mno-mmx:                               i386 and x86-64 Options.
   50859                                                              (line  571)
   50860 * mno-mt:                                MIPS Options.       (line  301)
   50861 * mno-mul-bug-workaround:                CRIS Options.       (line   31)
   50862 * mno-muladd:                            FRV Options.        (line   53)
   50863 * mno-mulhw:                             RS/6000 and PowerPC Options.
   50864                                                              (line  441)
   50865 * mno-mult-bug:                          MN10300 Options.    (line   13)
   50866 * mno-multi-cond-exec:                   FRV Options.        (line  183)
   50867 * mno-multiple:                          RS/6000 and PowerPC Options.
   50868                                                              (line  391)
   50869 * mno-mvcle:                             S/390 and zSeries Options.
   50870                                                              (line  105)
   50871 * mno-nested-cond-exec:                  FRV Options.        (line  195)
   50872 * mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   43)
   50873 * mno-optimize-membar:                   FRV Options.        (line  205)
   50874 * mno-opts:                              MeP Options.        (line   93)
   50875 * mno-pack:                              FRV Options.        (line  122)
   50876 * mno-packed-stack:                      S/390 and zSeries Options.
   50877                                                              (line   54)
   50878 * mno-paired:                            RS/6000 and PowerPC Options.
   50879                                                              (line  207)
   50880 * mno-paired-single:                     MIPS Options.       (line  284)
   50881 * mno-pic:                               IA-64 Options.      (line   26)
   50882 * mno-pid:                               RX Options.         (line  117)
   50883 * mno-plt:                               MIPS Options.       (line  182)
   50884 * mno-popc:                              SPARC Options.      (line  231)
   50885 * mno-popcntb:                           RS/6000 and PowerPC Options.
   50886                                                              (line   27)
   50887 * mno-popcntd:                           RS/6000 and PowerPC Options.
   50888                                                              (line   27)
   50889 * mno-postinc:                           Adapteva Epiphany Options.
   50890                                                              (line  110)
   50891 * mno-postmodify:                        Adapteva Epiphany Options.
   50892                                                              (line  110)
   50893 * mno-power8-fusion:                     RS/6000 and PowerPC Options.
   50894                                                              (line  234)
   50895 * mno-power8-vector:                     RS/6000 and PowerPC Options.
   50896                                                              (line  240)
   50897 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
   50898                                                              (line   27)
   50899 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
   50900                                                              (line   27)
   50901 * mno-powerpc64:                         RS/6000 and PowerPC Options.
   50902                                                              (line   27)
   50903 * mno-prolog-function:                   V850 Options.       (line   23)
   50904 * mno-prologue-epilogue:                 CRIS Options.       (line   71)
   50905 * mno-prototype:                         RS/6000 and PowerPC Options.
   50906                                                              (line  645)
   50907 * mno-push-args:                         i386 and x86-64 Options.
   50908                                                              (line  737)
   50909 * mno-quad-memory:                       RS/6000 and PowerPC Options.
   50910                                                              (line  247)
   50911 * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
   50912                                                              (line  253)
   50913 * mno-red-zone:                          i386 and x86-64 Options.
   50914                                                              (line  854)
   50915 * mno-register-names:                    IA-64 Options.      (line   37)
   50916 * mno-regnames:                          RS/6000 and PowerPC Options.
   50917                                                              (line  751)
   50918 * mno-relax:                             V850 Options.       (line  103)
   50919 * mno-relax-immediate:                   MCore Options.      (line   19)
   50920 * mno-relocatable:                       RS/6000 and PowerPC Options.
   50921                                                              (line  471)
   50922 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
   50923                                                              (line  482)
   50924 * mno-round-nearest:                     Adapteva Epiphany Options.
   50925                                                              (line   51)
   50926 * mno-rtd:                               M680x0 Options.     (line  262)
   50927 * mno-scc:                               FRV Options.        (line  146)
   50928 * mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
   50929 * mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
   50930 * mno-sched-br-data-spec:                IA-64 Options.      (line  128)
   50931 * mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
   50932 * mno-sched-control-spec:                IA-64 Options.      (line  140)
   50933 * mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
   50934 * mno-sched-in-control-spec:             IA-64 Options.      (line  162)
   50935 * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
   50936 * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
   50937 * mno-sched-prolog:                      ARM Options.        (line   33)
   50938 * mno-sdata <1>:                         RS/6000 and PowerPC Options.
   50939                                                              (line  732)
   50940 * mno-sdata:                             IA-64 Options.      (line   42)
   50941 * mno-sep-data:                          Blackfin Options.   (line  116)
   50942 * mno-serialize-volatile:                Xtensa Options.     (line   35)
   50943 * mno-short:                             M680x0 Options.     (line  226)
   50944 * mno-side-effects:                      CRIS Options.       (line   46)
   50945 * mno-sim:                               RX Options.         (line   71)
   50946 * mno-single-exit:                       MMIX Options.       (line   66)
   50947 * mno-slow-bytes:                        MCore Options.      (line   35)
   50948 * mno-small-exec:                        S/390 and zSeries Options.
   50949                                                              (line   80)
   50950 * mno-smartmips:                         MIPS Options.       (line  280)
   50951 * mno-soft-cmpsf:                        Adapteva Epiphany Options.
   50952                                                              (line   29)
   50953 * mno-soft-float:                        DEC Alpha Options.  (line   10)
   50954 * mno-space-regs:                        HPPA Options.       (line   44)
   50955 * mno-spe:                               RS/6000 and PowerPC Options.
   50956                                                              (line  202)
   50957 * mno-specld-anomaly:                    Blackfin Options.   (line   56)
   50958 * mno-split-addresses:                   MIPS Options.       (line  426)
   50959 * mno-sse:                               i386 and x86-64 Options.
   50960                                                              (line  571)
   50961 * mno-stack-align:                       CRIS Options.       (line   55)
   50962 * mno-stack-bias:                        SPARC Options.      (line  314)
   50963 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
   50964                                                              (line  466)
   50965 * mno-strict-align:                      M680x0 Options.     (line  287)
   50966 * mno-string:                            RS/6000 and PowerPC Options.
   50967                                                              (line  402)
   50968 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
   50969                                                              (line  287)
   50970 * mno-sym32:                             MIPS Options.       (line  323)
   50971 * mno-target-align:                      Xtensa Options.     (line   59)
   50972 * mno-text-section-literals:             Xtensa Options.     (line   47)
   50973 * mno-tls-markers:                       RS/6000 and PowerPC Options.
   50974                                                              (line  790)
   50975 * mno-toc:                               RS/6000 and PowerPC Options.
   50976                                                              (line  491)
   50977 * mno-toplevel-symbols:                  MMIX Options.       (line   40)
   50978 * mno-tpf-trace:                         S/390 and zSeries Options.
   50979                                                              (line  131)
   50980 * mno-unaligned-access:                  ARM Options.        (line  313)
   50981 * mno-unaligned-doubles:                 SPARC Options.      (line   74)
   50982 * mno-uninit-const-in-rodata:            MIPS Options.       (line  396)
   50983 * mno-update:                            RS/6000 and PowerPC Options.
   50984                                                              (line  413)
   50985 * mno-user-mode:                         SPARC Options.      (line   86)
   50986 * mno-v8plus:                            SPARC Options.      (line  195)
   50987 * mno-vect-double:                       Adapteva Epiphany Options.
   50988                                                              (line  116)
   50989 * mno-vis:                               SPARC Options.      (line  202)
   50990 * mno-vis2:                              SPARC Options.      (line  208)
   50991 * mno-vis3:                              SPARC Options.      (line  216)
   50992 * mno-vliw-branch:                       FRV Options.        (line  170)
   50993 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
   50994 * mno-vrsave:                            RS/6000 and PowerPC Options.
   50995                                                              (line  172)
   50996 * mno-vsx:                               RS/6000 and PowerPC Options.
   50997                                                              (line  216)
   50998 * mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
   50999 * mno-wide-bitfields:                    MCore Options.      (line   23)
   51000 * mno-xgot <1>:                          MIPS Options.       (line  192)
   51001 * mno-xgot:                              M680x0 Options.     (line  319)
   51002 * mno-xl-compat:                         RS/6000 and PowerPC Options.
   51003                                                              (line  322)
   51004 * mno-zdcbranch:                         SH Options.         (line  403)
   51005 * mno-zero-extend:                       MMIX Options.       (line   27)
   51006 * mnobitfield:                           M680x0 Options.     (line  231)
   51007 * mnoieee:                               SH Options.         (line  116)
   51008 * mnoliw:                                MN10300 Options.    (line   59)
   51009 * mnomacsave:                            SH Options.         (line  111)
   51010 * mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
   51011                                                              (line   22)
   51012 * mnops:                                 Adapteva Epiphany Options.
   51013                                                              (line   26)
   51014 * mnosetlb:                              MN10300 Options.    (line   69)
   51015 * mnosplit-lohi:                         Adapteva Epiphany Options.
   51016                                                              (line  110)
   51017 * momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
   51018                                                              (line  794)
   51019 * momit-leaf-frame-pointer <2>:          Blackfin Options.   (line   44)
   51020 * momit-leaf-frame-pointer:              AArch64 Options.    (line   43)
   51021 * mone-byte-bool:                        Darwin Options.     (line   90)
   51022 * moptimize-membar:                      FRV Options.        (line  201)
   51023 * MP:                                    Preprocessor Options.
   51024                                                              (line  239)
   51025 * mpa-risc-1-0:                          HPPA Options.       (line   19)
   51026 * mpa-risc-1-1:                          HPPA Options.       (line   19)
   51027 * mpa-risc-2-0:                          HPPA Options.       (line   19)
   51028 * mpack:                                 FRV Options.        (line  119)
   51029 * mpacked-stack:                         S/390 and zSeries Options.
   51030                                                              (line   54)
   51031 * mpadstruct:                            SH Options.         (line  140)
   51032 * mpaired:                               RS/6000 and PowerPC Options.
   51033                                                              (line  207)
   51034 * mpaired-single:                        MIPS Options.       (line  284)
   51035 * mpc32:                                 i386 and x86-64 Options.
   51036                                                              (line  441)
   51037 * mpc64:                                 i386 and x86-64 Options.
   51038                                                              (line  441)
   51039 * mpc80:                                 i386 and x86-64 Options.
   51040                                                              (line  441)
   51041 * mpcrel:                                M680x0 Options.     (line  279)
   51042 * mpdebug:                               CRIS Options.       (line   35)
   51043 * mpe:                                   RS/6000 and PowerPC Options.
   51044                                                              (line  342)
   51045 * mpe-aligned-commons:                   i386 and x86-64 Windows Options.
   51046                                                              (line   59)
   51047 * mpic-register:                         ARM Options.        (line  219)
   51048 * mpid:                                  RX Options.         (line  117)
   51049 * mplt:                                  MIPS Options.       (line  182)
   51050 * mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
   51051                                                              (line  874)
   51052 * mpoke-function-name:                   ARM Options.        (line  226)
   51053 * mpopc:                                 SPARC Options.      (line  231)
   51054 * mpopcntb:                              RS/6000 and PowerPC Options.
   51055                                                              (line   27)
   51056 * mpopcntd:                              RS/6000 and PowerPC Options.
   51057                                                              (line   27)
   51058 * mportable-runtime:                     HPPA Options.       (line   70)
   51059 * mpower8-fusion:                        RS/6000 and PowerPC Options.
   51060                                                              (line  234)
   51061 * mpower8-vector:                        RS/6000 and PowerPC Options.
   51062                                                              (line  240)
   51063 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
   51064                                                              (line   27)
   51065 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
   51066                                                              (line   27)
   51067 * mpowerpc64:                            RS/6000 and PowerPC Options.
   51068                                                              (line   27)
   51069 * mprefer-avx128:                        i386 and x86-64 Options.
   51070                                                              (line  614)
   51071 * mprefer-short-insn-regs:               Adapteva Epiphany Options.
   51072                                                              (line   13)
   51073 * mprefergot:                            SH Options.         (line  225)
   51074 * mpreferred-stack-boundary:             i386 and x86-64 Options.
   51075                                                              (line  471)
   51076 * mpretend-cmove:                        SH Options.         (line  446)
   51077 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
   51078                                                              (line  520)
   51079 * mprolog-function:                      V850 Options.       (line   23)
   51080 * mprologue-epilogue:                    CRIS Options.       (line   71)
   51081 * mprototype:                            RS/6000 and PowerPC Options.
   51082                                                              (line  645)
   51083 * mpt-fixed:                             SH Options.         (line  364)
   51084 * mpush-args:                            i386 and x86-64 Options.
   51085                                                              (line  737)
   51086 * MQ:                                    Preprocessor Options.
   51087                                                              (line  265)
   51088 * mquad-memory:                          RS/6000 and PowerPC Options.
   51089                                                              (line  247)
   51090 * mquad-memory-atomic:                   RS/6000 and PowerPC Options.
   51091                                                              (line  253)
   51092 * mr10k-cache-barrier:                   MIPS Options.       (line  564)
   51093 * mrecip <1>:                            RS/6000 and PowerPC Options.
   51094                                                              (line  802)
   51095 * mrecip:                                i386 and x86-64 Options.
   51096                                                              (line  647)
   51097 * mrecip-precision:                      RS/6000 and PowerPC Options.
   51098                                                              (line  838)
   51099 * mrecip=opt <1>:                        RS/6000 and PowerPC Options.
   51100                                                              (line  815)
   51101 * mrecip=opt:                            i386 and x86-64 Options.
   51102                                                              (line  669)
   51103 * mregister-names:                       IA-64 Options.      (line   37)
   51104 * mregnames:                             RS/6000 and PowerPC Options.
   51105                                                              (line  751)
   51106 * mregparm:                              i386 and x86-64 Options.
   51107                                                              (line  408)
   51108 * mrelax <1>:                            V850 Options.       (line  103)
   51109 * mrelax <2>:                            SH Options.         (line   85)
   51110 * mrelax <3>:                            RX Options.         (line   95)
   51111 * mrelax <4>:                            MN10300 Options.    (line   46)
   51112 * mrelax <5>:                            H8/300 Options.     (line    9)
   51113 * mrelax:                                AVR Options.        (line  169)
   51114 * mrelax-immediate:                      MCore Options.      (line   19)
   51115 * mrelax-pic-calls:                      MIPS Options.       (line  689)
   51116 * mrelocatable:                          RS/6000 and PowerPC Options.
   51117                                                              (line  471)
   51118 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
   51119                                                              (line  482)
   51120 * mrepeat:                               MeP Options.        (line   96)
   51121 * mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
   51122 * mrh850-abi:                            V850 Options.       (line  127)
   51123 * mrtd <1>:                              Function Attributes.
   51124                                                              (line  177)
   51125 * mrtd <2>:                              M680x0 Options.     (line  240)
   51126 * mrtd:                                  i386 and x86-64 Options.
   51127                                                              (line  384)
   51128 * mrtp:                                  VxWorks Options.    (line   11)
   51129 * ms <1>:                                MeP Options.        (line  100)
   51130 * ms:                                    H8/300 Options.     (line   17)
   51131 * ms2600:                                H8/300 Options.     (line   24)
   51132 * msafe-dma:                             SPU Options.        (line   17)
   51133 * msafe-hints:                           SPU Options.        (line  107)
   51134 * msahf:                                 i386 and x86-64 Options.
   51135                                                              (line  627)
   51136 * msatur:                                MeP Options.        (line  105)
   51137 * msave-acc-in-interrupts:               RX Options.         (line  109)
   51138 * msave-toc-indirect:                    RS/6000 and PowerPC Options.
   51139                                                              (line  886)
   51140 * mscc:                                  FRV Options.        (line  140)
   51141 * msched-ar-data-spec:                   IA-64 Options.      (line  134)
   51142 * msched-ar-in-data-spec:                IA-64 Options.      (line  155)
   51143 * msched-br-data-spec:                   IA-64 Options.      (line  128)
   51144 * msched-br-in-data-spec:                IA-64 Options.      (line  148)
   51145 * msched-control-spec:                   IA-64 Options.      (line  140)
   51146 * msched-costly-dep:                     RS/6000 and PowerPC Options.
   51147                                                              (line  527)
   51148 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
   51149 * msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
   51150 * msched-in-control-spec:                IA-64 Options.      (line  162)
   51151 * msched-max-memory-insns:               IA-64 Options.      (line  207)
   51152 * msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
   51153 * msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
   51154 * msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
   51155 * msched-spec-ldc:                       IA-64 Options.      (line  187)
   51156 * msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
   51157 * mschedule:                             HPPA Options.       (line   77)
   51158 * mscore5:                               Score Options.      (line   25)
   51159 * mscore5u:                              Score Options.      (line   28)
   51160 * mscore7:                               Score Options.      (line   31)
   51161 * mscore7d:                              Score Options.      (line   34)
   51162 * msda:                                  V850 Options.       (line   40)
   51163 * msdata <1>:                            RS/6000 and PowerPC Options.
   51164                                                              (line  719)
   51165 * msdata:                                IA-64 Options.      (line   42)
   51166 * msdata=all:                            C6X Options.        (line   30)
   51167 * msdata=data:                           RS/6000 and PowerPC Options.
   51168                                                              (line  724)
   51169 * msdata=default <1>:                    RS/6000 and PowerPC Options.
   51170                                                              (line  719)
   51171 * msdata=default:                        C6X Options.        (line   22)
   51172 * msdata=eabi:                           RS/6000 and PowerPC Options.
   51173                                                              (line  699)
   51174 * msdata=none <1>:                       RS/6000 and PowerPC Options.
   51175                                                              (line  732)
   51176 * msdata=none <2>:                       M32R/D Options.     (line   40)
   51177 * msdata=none:                           C6X Options.        (line   35)
   51178 * msdata=sdata:                          M32R/D Options.     (line   49)
   51179 * msdata=sysv:                           RS/6000 and PowerPC Options.
   51180                                                              (line  710)
   51181 * msdata=use:                            M32R/D Options.     (line   53)
   51182 * msdram <1>:                            MeP Options.        (line  110)
   51183 * msdram:                                Blackfin Options.   (line  172)
   51184 * msecure-plt:                           RS/6000 and PowerPC Options.
   51185                                                              (line  182)
   51186 * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
   51187 * msep-data:                             Blackfin Options.   (line  110)
   51188 * mserialize-volatile:                   Xtensa Options.     (line   35)
   51189 * msetlb:                                MN10300 Options.    (line   64)
   51190 * mshared-library-id:                    Blackfin Options.   (line  103)
   51191 * mshort:                                M680x0 Options.     (line  220)
   51192 * msign-extend-enabled:                  LM32 Options.       (line   18)
   51193 * msim <1>:                              Xstormy16 Options.  (line    9)
   51194 * msim <2>:                              RX Options.         (line   71)
   51195 * msim <3>:                              RS/6000 and PowerPC Options.
   51196                                                              (line  655)
   51197 * msim <4>:                              RL78 Options.       (line    7)
   51198 * msim <5>:                              MeP Options.        (line  114)
   51199 * msim <6>:                              M32C Options.       (line   13)
   51200 * msim <7>:                              CR16 Options.       (line   18)
   51201 * msim <8>:                              C6X Options.        (line   19)
   51202 * msim:                                  Blackfin Options.   (line   37)
   51203 * msimnovec:                             MeP Options.        (line  117)
   51204 * msimple-fpu:                           RS/6000 and PowerPC Options.
   51205                                                              (line  375)
   51206 * msingle-exit:                          MMIX Options.       (line   66)
   51207 * msingle-float <1>:                     RS/6000 and PowerPC Options.
   51208                                                              (line  371)
   51209 * msingle-float:                         MIPS Options.       (line  244)
   51210 * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
   51211                                                              (line  514)
   51212 * msingle-pic-base:                      ARM Options.        (line  213)
   51213 * msio:                                  HPPA Options.       (line  104)
   51214 * mslow-bytes:                           MCore Options.      (line   35)
   51215 * msmall-data:                           DEC Alpha Options.  (line  187)
   51216 * msmall-data-limit:                     RX Options.         (line   47)
   51217 * msmall-divides:                        MicroBlaze Options. (line   39)
   51218 * msmall-exec:                           S/390 and zSeries Options.
   51219                                                              (line   80)
   51220 * msmall-mem:                            SPU Options.        (line   35)
   51221 * msmall-model:                          FR30 Options.       (line    9)
   51222 * msmall-text:                           DEC Alpha Options.  (line  205)
   51223 * msmall16:                              Adapteva Epiphany Options.
   51224                                                              (line   67)
   51225 * msmartmips:                            MIPS Options.       (line  280)
   51226 * msoft-float <1>:                       V850 Options.       (line  113)
   51227 * msoft-float <2>:                       SPARC Options.      (line   40)
   51228 * msoft-float <3>:                       S/390 and zSeries Options.
   51229                                                              (line   11)
   51230 * msoft-float <4>:                       RS/6000 and PowerPC Options.
   51231                                                              (line  365)
   51232 * msoft-float <5>:                       PDP-11 Options.     (line   13)
   51233 * msoft-float <6>:                       MIPS Options.       (line  230)
   51234 * msoft-float <7>:                       MicroBlaze Options. (line    7)
   51235 * msoft-float <8>:                       M680x0 Options.     (line  203)
   51236 * msoft-float <9>:                       i386 and x86-64 Options.
   51237                                                              (line  292)
   51238 * msoft-float <10>:                      HPPA Options.       (line   90)
   51239 * msoft-float <11>:                      FRV Options.        (line   22)
   51240 * msoft-float:                           DEC Alpha Options.  (line   10)
   51241 * msoft-quad-float:                      SPARC Options.      (line   60)
   51242 * msp8:                                  AVR Options.        (line  183)
   51243 * mspace <1>:                            V850 Options.       (line   30)
   51244 * mspace:                                SH Options.         (line  222)
   51245 * mspe:                                  RS/6000 and PowerPC Options.
   51246                                                              (line  202)
   51247 * mspecld-anomaly:                       Blackfin Options.   (line   51)
   51248 * msplit-addresses:                      MIPS Options.       (line  426)
   51249 * msplit-vecmove-early:                  Adapteva Epiphany Options.
   51250                                                              (line  127)
   51251 * msse:                                  i386 and x86-64 Options.
   51252                                                              (line  571)
   51253 * msse2avx:                              i386 and x86-64 Options.
   51254                                                              (line  812)
   51255 * msseregparm:                           i386 and x86-64 Options.
   51256                                                              (line  419)
   51257 * mstack-align:                          CRIS Options.       (line   55)
   51258 * mstack-bias:                           SPARC Options.      (line  314)
   51259 * mstack-check-l1:                       Blackfin Options.   (line   77)
   51260 * mstack-guard:                          S/390 and zSeries Options.
   51261                                                              (line  156)
   51262 * mstack-increment:                      MCore Options.      (line   50)
   51263 * mstack-offset:                         Adapteva Epiphany Options.
   51264                                                              (line   37)
   51265 * mstack-size:                           S/390 and zSeries Options.
   51266                                                              (line  156)
   51267 * mstackrealign:                         i386 and x86-64 Options.
   51268                                                              (line  462)
   51269 * mstdmain:                              SPU Options.        (line   40)
   51270 * mstrict-align <1>:                     RS/6000 and PowerPC Options.
   51271                                                              (line  466)
   51272 * mstrict-align <2>:                     M680x0 Options.     (line  287)
   51273 * mstrict-align:                         AArch64 Options.    (line   38)
   51274 * mstrict-X:                             AVR Options.        (line  196)
   51275 * mstring:                               RS/6000 and PowerPC Options.
   51276                                                              (line  402)
   51277 * mstringop-strategy=ALG:                i386 and x86-64 Options.
   51278                                                              (line  776)
   51279 * mstructure-size-boundary:              ARM Options.        (line  170)
   51280 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
   51281                                                              (line  607)
   51282 * msym32:                                MIPS Options.       (line  323)
   51283 * msynci:                                MIPS Options.       (line  674)
   51284 * MT:                                    Preprocessor Options.
   51285                                                              (line  251)
   51286 * mtarget-align:                         Xtensa Options.     (line   59)
   51287 * mtas:                                  SH Options.         (line  213)
   51288 * mtda:                                  V850 Options.       (line   34)
   51289 * mtext-section-literals:                Xtensa Options.     (line   47)
   51290 * mtf:                                   MeP Options.        (line  121)
   51291 * mthread:                               i386 and x86-64 Windows Options.
   51292                                                              (line   26)
   51293 * mthreads:                              i386 and x86-64 Options.
   51294                                                              (line  752)
   51295 * mthumb:                                ARM Options.        (line  248)
   51296 * mthumb-interwork:                      ARM Options.        (line   25)
   51297 * mtiny-stack:                           AVR Options.        (line  210)
   51298 * mtiny=:                                MeP Options.        (line  125)
   51299 * mtls:                                  FRV Options.        (line   75)
   51300 * mTLS:                                  FRV Options.        (line   72)
   51301 * mtls-dialect <1>:                      i386 and x86-64 Options.
   51302                                                              (line  730)
   51303 * mtls-dialect:                          ARM Options.        (line  289)
   51304 * mtls-dialect=desc:                     AArch64 Options.    (line   47)
   51305 * mtls-dialect=traditional:              AArch64 Options.    (line   51)
   51306 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
   51307                                                              (line  802)
   51308 * mtls-markers:                          RS/6000 and PowerPC Options.
   51309                                                              (line  790)
   51310 * mtls-size:                             IA-64 Options.      (line  112)
   51311 * mtoc:                                  RS/6000 and PowerPC Options.
   51312                                                              (line  491)
   51313 * mtomcat-stats:                         FRV Options.        (line  209)
   51314 * mtoplevel-symbols:                     MMIX Options.       (line   40)
   51315 * mtp:                                   ARM Options.        (line  281)
   51316 * mtpcs-frame:                           ARM Options.        (line  254)
   51317 * mtpcs-leaf-frame:                      ARM Options.        (line  260)
   51318 * mtpf-trace:                            S/390 and zSeries Options.
   51319                                                              (line  131)
   51320 * mtrap-precision:                       DEC Alpha Options.  (line  109)
   51321 * mtune <1>:                             SPARC Options.      (line  181)
   51322 * mtune <2>:                             S/390 and zSeries Options.
   51323                                                              (line  124)
   51324 * mtune <3>:                             RS/6000 and PowerPC Options.
   51325                                                              (line  112)
   51326 * mtune <4>:                             MN10300 Options.    (line   30)
   51327 * mtune <5>:                             MIPS Options.       (line   63)
   51328 * mtune <6>:                             M680x0 Options.     (line   70)
   51329 * mtune <7>:                             IA-64 Options.      (line  116)
   51330 * mtune <8>:                             i386 and x86-64 Options.
   51331                                                              (line  195)
   51332 * mtune <9>:                             DEC Alpha Options.  (line  259)
   51333 * mtune <10>:                            CRIS Options.       (line   16)
   51334 * mtune <11>:                            ARM Options.        (line   90)
   51335 * mtune:                                 AArch64 Options.    (line   82)
   51336 * muclibc:                               GNU/Linux Options.  (line   13)
   51337 * muls:                                  Score Options.      (line   18)
   51338 * multcost=NUMBER:                       SH Options.         (line  235)
   51339 * multi_module:                          Darwin Options.     (line  196)
   51340 * multilib-library-pic:                  FRV Options.        (line   89)
   51341 * multiply-enabled:                      LM32 Options.       (line   15)
   51342 * multiply_defined:                      Darwin Options.     (line  196)
   51343 * multiply_defined_unused:               Darwin Options.     (line  196)
   51344 * munaligned-access:                     ARM Options.        (line  313)
   51345 * munaligned-doubles:                    SPARC Options.      (line   74)
   51346 * municode:                              i386 and x86-64 Windows Options.
   51347                                                              (line   30)
   51348 * muninit-const-in-rodata:               MIPS Options.       (line  396)
   51349 * munix:                                 VAX Options.        (line    9)
   51350 * munix-asm:                             PDP-11 Options.     (line   68)
   51351 * munsafe-dma:                           SPU Options.        (line   17)
   51352 * mupdate:                               RS/6000 and PowerPC Options.
   51353                                                              (line  413)
   51354 * muser-enabled:                         LM32 Options.       (line   21)
   51355 * muser-mode:                            SPARC Options.      (line   86)
   51356 * musermode:                             SH Options.         (line  230)
   51357 * mv850:                                 V850 Options.       (line   49)
   51358 * mv850e:                                V850 Options.       (line   79)
   51359 * mv850e1:                               V850 Options.       (line   70)
   51360 * mv850e2:                               V850 Options.       (line   66)
   51361 * mv850e2v3:                             V850 Options.       (line   61)
   51362 * mv850e2v4:                             V850 Options.       (line   57)
   51363 * mv850e3v5:                             V850 Options.       (line   52)
   51364 * mv850es:                               V850 Options.       (line   75)
   51365 * mv8plus:                               SPARC Options.      (line  195)
   51366 * mveclibabi <1>:                        RS/6000 and PowerPC Options.
   51367                                                              (line  847)
   51368 * mveclibabi:                            i386 and x86-64 Options.
   51369                                                              (line  698)
   51370 * mvect8-ret-in-mem:                     i386 and x86-64 Options.
   51371                                                              (line  429)
   51372 * mvis:                                  SPARC Options.      (line  202)
   51373 * mvis2:                                 SPARC Options.      (line  208)
   51374 * mvis3:                                 SPARC Options.      (line  216)
   51375 * mvliw-branch:                          FRV Options.        (line  164)
   51376 * mvms-return-codes:                     VMS Options.        (line    9)
   51377 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
   51378 * mvr4130-align:                         MIPS Options.       (line  663)
   51379 * mvrsave:                               RS/6000 and PowerPC Options.
   51380                                                              (line  172)
   51381 * mvsx:                                  RS/6000 and PowerPC Options.
   51382                                                              (line  216)
   51383 * mvxworks:                              RS/6000 and PowerPC Options.
   51384                                                              (line  676)
   51385 * mvzeroupper:                           i386 and x86-64 Options.
   51386                                                              (line  608)
   51387 * mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
   51388                                                              (line  178)
   51389 * mwarn-dynamicstack:                    S/390 and zSeries Options.
   51390                                                              (line  150)
   51391 * mwarn-framesize:                       S/390 and zSeries Options.
   51392                                                              (line  142)
   51393 * mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
   51394 * mwarn-reloc:                           SPU Options.        (line   10)
   51395 * mwide-bitfields:                       MCore Options.      (line   23)
   51396 * mwin32:                                i386 and x86-64 Windows Options.
   51397                                                              (line   35)
   51398 * mwindows:                              i386 and x86-64 Windows Options.
   51399                                                              (line   41)
   51400 * mword-relocations:                     ARM Options.        (line  300)
   51401 * mwords-little-endian:                  ARM Options.        (line   66)
   51402 * mx32:                                  i386 and x86-64 Options.
   51403                                                              (line  841)
   51404 * mxgot <1>:                             MIPS Options.       (line  192)
   51405 * mxgot:                                 M680x0 Options.     (line  319)
   51406 * mxilinx-fpu:                           RS/6000 and PowerPC Options.
   51407                                                              (line  386)
   51408 * mxl-barrel-shift:                      MicroBlaze Options. (line   33)
   51409 * mxl-compat:                            RS/6000 and PowerPC Options.
   51410                                                              (line  322)
   51411 * mxl-float-convert:                     MicroBlaze Options. (line   51)
   51412 * mxl-float-sqrt:                        MicroBlaze Options. (line   54)
   51413 * mxl-gp-opt:                            MicroBlaze Options. (line   45)
   51414 * mxl-multiply-high:                     MicroBlaze Options. (line   48)
   51415 * mxl-pattern-compare:                   MicroBlaze Options. (line   36)
   51416 * mxl-reorder:                           MicroBlaze Options. (line   63)
   51417 * mxl-soft-div:                          MicroBlaze Options. (line   30)
   51418 * mxl-soft-mul:                          MicroBlaze Options. (line   27)
   51419 * mxl-stack-check:                       MicroBlaze Options. (line   42)
   51420 * myellowknife:                          RS/6000 and PowerPC Options.
   51421                                                              (line  671)
   51422 * mzarch:                                S/390 and zSeries Options.
   51423                                                              (line   95)
   51424 * mzda:                                  V850 Options.       (line   45)
   51425 * mzdcbranch:                            SH Options.         (line  403)
   51426 * mzero-extend:                          MMIX Options.       (line   27)
   51427 * no-canonical-prefixes:                 Overall Options.    (line  334)
   51428 * no-integrated-cpp:                     Preprocessor Options.
   51429                                                              (line   34)
   51430 * no-sysroot-suffix:                     Directory Options.  (line  112)
   51431 * no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
   51432 * noall_load:                            Darwin Options.     (line  196)
   51433 * nocpp:                                 MIPS Options.       (line  494)
   51434 * nodefaultlibs:                         Link Options.       (line   62)
   51435 * nofixprebinding:                       Darwin Options.     (line  196)
   51436 * nofpu:                                 RX Options.         (line   17)
   51437 * nolibdld:                              HPPA Options.       (line  187)
   51438 * nomultidefs:                           Darwin Options.     (line  196)
   51439 * non-static:                            VxWorks Options.    (line   16)
   51440 * noprebind:                             Darwin Options.     (line  196)
   51441 * noseglinkedit:                         Darwin Options.     (line  196)
   51442 * nostartfiles:                          Link Options.       (line   57)
   51443 * nostdinc:                              Preprocessor Options.
   51444                                                              (line  399)
   51445 * nostdinc++ <1>:                        Preprocessor Options.
   51446                                                              (line  404)
   51447 * nostdinc++:                            C++ Dialect Options.
   51448                                                              (line  348)
   51449 * nostdlib:                              Link Options.       (line   74)
   51450 * o:                                     Preprocessor Options.
   51451                                                              (line   87)
   51452 * O:                                     Optimize Options.   (line   39)
   51453 * o:                                     Overall Options.    (line  192)
   51454 * O0:                                    Optimize Options.   (line  128)
   51455 * O1:                                    Optimize Options.   (line   39)
   51456 * O2:                                    Optimize Options.   (line   83)
   51457 * O3:                                    Optimize Options.   (line  121)
   51458 * Ofast:                                 Optimize Options.   (line  142)
   51459 * Og:                                    Optimize Options.   (line  149)
   51460 * Os:                                    Optimize Options.   (line  132)
   51461 * P:                                     Preprocessor Options.
   51462                                                              (line  649)
   51463 * p:                                     Debugging Options.  (line  328)
   51464 * pagezero_size:                         Darwin Options.     (line  196)
   51465 * param:                                 Optimize Options.   (line 2240)
   51466 * pass-exit-codes:                       Overall Options.    (line  150)
   51467 * pedantic <1>:                          Warnings and Errors.
   51468                                                              (line   25)
   51469 * pedantic <2>:                          Alternate Keywords. (line   30)
   51470 * pedantic <3>:                          C Extensions.       (line    6)
   51471 * pedantic <4>:                          Preprocessor Options.
   51472                                                              (line  175)
   51473 * pedantic <5>:                          Warning Options.    (line   73)
   51474 * pedantic:                              Standards.          (line   16)
   51475 * pedantic-errors <1>:                   Warnings and Errors.
   51476                                                              (line   25)
   51477 * pedantic-errors <2>:                   Non-bugs.           (line  216)
   51478 * pedantic-errors <3>:                   Preprocessor Options.
   51479                                                              (line  180)
   51480 * pedantic-errors <4>:                   Warning Options.    (line  115)
   51481 * pedantic-errors:                       Standards.          (line   16)
   51482 * pg:                                    Debugging Options.  (line  334)
   51483 * pie:                                   Link Options.       (line   99)
   51484 * pipe:                                  Overall Options.    (line  215)
   51485 * prebind:                               Darwin Options.     (line  196)
   51486 * prebind_all_twolevel_modules:          Darwin Options.     (line  196)
   51487 * print-file-name:                       Debugging Options.  (line 1313)
   51488 * print-libgcc-file-name:                Debugging Options.  (line 1347)
   51489 * print-multi-directory:                 Debugging Options.  (line 1319)
   51490 * print-multi-lib:                       Debugging Options.  (line 1324)
   51491 * print-multi-os-directory:              Debugging Options.  (line 1331)
   51492 * print-multiarch:                       Debugging Options.  (line 1340)
   51493 * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
   51494                                                              (line  203)
   51495 * print-prog-name:                       Debugging Options.  (line 1344)
   51496 * print-search-dirs:                     Debugging Options.  (line 1355)
   51497 * print-sysroot:                         Debugging Options.  (line 1368)
   51498 * print-sysroot-headers-suffix:          Debugging Options.  (line 1375)
   51499 * private_bundle:                        Darwin Options.     (line  196)
   51500 * pthread <1>:                           Solaris 2 Options.  (line   31)
   51501 * pthread:                               RS/6000 and PowerPC Options.
   51502                                                              (line  797)
   51503 * pthreads:                              Solaris 2 Options.  (line   25)
   51504 * Q:                                     Debugging Options.  (line  340)
   51505 * Qn:                                    System V Options.   (line   18)
   51506 * Qy:                                    System V Options.   (line   14)
   51507 * rdynamic:                              Link Options.       (line  105)
   51508 * read_only_relocs:                      Darwin Options.     (line  196)
   51509 * remap:                                 Preprocessor Options.
   51510                                                              (line  697)
   51511 * s:                                     Link Options.       (line  112)
   51512 * S <1>:                                 Link Options.       (line   20)
   51513 * S:                                     Overall Options.    (line  175)
   51514 * save-temps:                            Debugging Options.  (line 1222)
   51515 * save-temps=obj:                        Debugging Options.  (line 1248)
   51516 * sectalign:                             Darwin Options.     (line  196)
   51517 * sectcreate:                            Darwin Options.     (line  196)
   51518 * sectobjectsymbols:                     Darwin Options.     (line  196)
   51519 * sectorder:                             Darwin Options.     (line  196)
   51520 * seg1addr:                              Darwin Options.     (line  196)
   51521 * seg_addr_table:                        Darwin Options.     (line  196)
   51522 * seg_addr_table_filename:               Darwin Options.     (line  196)
   51523 * segaddr:                               Darwin Options.     (line  196)
   51524 * seglinkedit:                           Darwin Options.     (line  196)
   51525 * segprot:                               Darwin Options.     (line  196)
   51526 * segs_read_only_addr:                   Darwin Options.     (line  196)
   51527 * segs_read_write_addr:                  Darwin Options.     (line  196)
   51528 * shared:                                Link Options.       (line  121)
   51529 * shared-libgcc:                         Link Options.       (line  129)
   51530 * short-calls:                           Adapteva Epiphany Options.
   51531                                                              (line   61)
   51532 * sim:                                   CRIS Options.       (line   95)
   51533 * sim2:                                  CRIS Options.       (line  101)
   51534 * single_module:                         Darwin Options.     (line  196)
   51535 * specs:                                 Directory Options.  (line   89)
   51536 * static <1>:                            HPPA Options.       (line  191)
   51537 * static <2>:                            Darwin Options.     (line  196)
   51538 * static:                                Link Options.       (line  116)
   51539 * static-libgcc:                         Link Options.       (line  129)
   51540 * std <1>:                               Non-bugs.           (line  107)
   51541 * std <2>:                               Other Builtins.     (line   22)
   51542 * std <3>:                               C Dialect Options.  (line   47)
   51543 * std:                                   Standards.          (line   16)
   51544 * std=:                                  Preprocessor Options.
   51545                                                              (line  338)
   51546 * sub_library:                           Darwin Options.     (line  196)
   51547 * sub_umbrella:                          Darwin Options.     (line  196)
   51548 * symbolic:                              Link Options.       (line  193)
   51549 * sysroot:                               Directory Options.  (line   97)
   51550 * T:                                     Link Options.       (line  199)
   51551 * target-help <1>:                       Preprocessor Options.
   51552                                                              (line  702)
   51553 * target-help:                           Overall Options.    (line  230)
   51554 * threads:                               HPPA Options.       (line  204)
   51555 * time:                                  Debugging Options.  (line 1263)
   51556 * tno-android-cc:                        GNU/Linux Options.  (line   31)
   51557 * tno-android-ld:                        GNU/Linux Options.  (line   35)
   51558 * traditional <1>:                       Incompatibilities.  (line    6)
   51559 * traditional:                           C Dialect Options.  (line  309)
   51560 * traditional-cpp <1>:                   Preprocessor Options.
   51561                                                              (line  680)
   51562 * traditional-cpp:                       C Dialect Options.  (line  309)
   51563 * trigraphs <1>:                         Preprocessor Options.
   51564                                                              (line  684)
   51565 * trigraphs:                             C Dialect Options.  (line  304)
   51566 * twolevel_namespace:                    Darwin Options.     (line  196)
   51567 * u:                                     Link Options.       (line  231)
   51568 * U:                                     Preprocessor Options.
   51569                                                              (line   69)
   51570 * umbrella:                              Darwin Options.     (line  196)
   51571 * undef:                                 Preprocessor Options.
   51572                                                              (line   73)
   51573 * undefined:                             Darwin Options.     (line  196)
   51574 * unexported_symbols_list:               Darwin Options.     (line  196)
   51575 * v <1>:                                 Preprocessor Options.
   51576                                                              (line  706)
   51577 * v:                                     Overall Options.    (line  203)
   51578 * version <1>:                           Preprocessor Options.
   51579                                                              (line  719)
   51580 * version:                               Overall Options.    (line  338)
   51581 * W:                                     Incompatibilities.  (line   64)
   51582 * w:                                     Preprocessor Options.
   51583                                                              (line  171)
   51584 * W:                                     Warning Options.    (line  168)
   51585 * w:                                     Warning Options.    (line   25)
   51586 * Wa:                                    Assembler Options.  (line    9)
   51587 * Wabi:                                  C++ Dialect Options.
   51588                                                              (line  362)
   51589 * Waddr-space-convert:                   AVR Options.        (line  213)
   51590 * Waddress:                              Warning Options.    (line 1177)
   51591 * Waggregate-return:                     Warning Options.    (line 1195)
   51592 * Waggressive-loop-optimizations:        Warning Options.    (line 1200)
   51593 * Wall <1>:                              Standard Libraries. (line    6)
   51594 * Wall <2>:                              Preprocessor Options.
   51595                                                              (line   93)
   51596 * Wall:                                  Warning Options.    (line  119)
   51597 * Warray-bounds:                         Warning Options.    (line  833)
   51598 * Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
   51599                                                              (line  157)
   51600 * Wattributes:                           Warning Options.    (line 1205)
   51601 * Wbad-function-cast:                    Warning Options.    (line 1051)
   51602 * Wbuiltin-macro-redefined:              Warning Options.    (line 1211)
   51603 * Wcast-align:                           Warning Options.    (line 1082)
   51604 * Wcast-qual:                            Warning Options.    (line 1066)
   51605 * Wchar-subscripts:                      Warning Options.    (line  207)
   51606 * Wclobbered:                            Warning Options.    (line 1102)
   51607 * Wcomment <1>:                          Preprocessor Options.
   51608                                                              (line  101)
   51609 * Wcomment:                              Warning Options.    (line  212)
   51610 * Wcomments:                             Preprocessor Options.
   51611                                                              (line  101)
   51612 * Wconversion:                           Warning Options.    (line 1106)
   51613 * Wconversion-null:                      Warning Options.    (line 1124)
   51614 * Wctor-dtor-privacy:                    C++ Dialect Options.
   51615                                                              (line  472)
   51616 * Wdeclaration-after-statement:          Warning Options.    (line  966)
   51617 * Wdelete-non-virtual-dtor:              C++ Dialect Options.
   51618                                                              (line  479)
   51619 * Wdeprecated:                           Warning Options.    (line 1326)
   51620 * Wdeprecated-declarations:              Warning Options.    (line 1330)
   51621 * Wdisabled-optimization:                Warning Options.    (line 1486)
   51622 * Wdiv-by-zero:                          Warning Options.    (line  838)
   51623 * Wdouble-promotion:                     Warning Options.    (line  236)
   51624 * weak_reference_mismatches:             Darwin Options.     (line  196)
   51625 * Weffc++:                               C++ Dialect Options.
   51626                                                              (line  558)
   51627 * Wempty-body:                           Warning Options.    (line 1135)
   51628 * Wendif-labels <1>:                     Preprocessor Options.
   51629                                                              (line  148)
   51630 * Wendif-labels:                         Warning Options.    (line  976)
   51631 * Wenum-compare:                         Warning Options.    (line 1139)
   51632 * Werror <1>:                            Preprocessor Options.
   51633                                                              (line  161)
   51634 * Werror:                                Warning Options.    (line   28)
   51635 * Werror=:                               Warning Options.    (line   31)
   51636 * Wextra:                                Warning Options.    (line  168)
   51637 * Wfatal-errors:                         Warning Options.    (line   48)
   51638 * Wfloat-equal:                          Warning Options.    (line  865)
   51639 * Wformat <1>:                           Function Attributes.
   51640                                                              (line  419)
   51641 * Wformat:                               Warning Options.    (line  255)
   51642 * Wformat-contains-nul:                  Warning Options.    (line  292)
   51643 * Wformat-extra-args:                    Warning Options.    (line  296)
   51644 * Wformat-nonliteral <1>:                Function Attributes.
   51645                                                              (line  485)
   51646 * Wformat-nonliteral:                    Warning Options.    (line  320)
   51647 * Wformat-security:                      Warning Options.    (line  325)
   51648 * Wformat-y2k:                           Warning Options.    (line  337)
   51649 * Wformat-zero-length:                   Warning Options.    (line  310)
   51650 * Wformat=:                              Warning Options.    (line  255)
   51651 * Wframe-larger-than:                    Warning Options.    (line  990)
   51652 * Wfree-nonheap-object:                  Warning Options.    (line  999)
   51653 * whatsloaded:                           Darwin Options.     (line  196)
   51654 * whyload:                               Darwin Options.     (line  196)
   51655 * Wignored-qualifiers:                   Warning Options.    (line  377)
   51656 * Wimplicit:                             Warning Options.    (line  373)
   51657 * Wimplicit-function-declaration:        Warning Options.    (line  367)
   51658 * Wimplicit-int:                         Warning Options.    (line  363)
   51659 * Winherited-variadic-ctor:              Warning Options.    (line 1396)
   51660 * Winit-self:                            Warning Options.    (line  348)
   51661 * Winline <1>:                           Inline.             (line   63)
   51662 * Winline:                               Warning Options.    (line 1401)
   51663 * Wint-to-pointer-cast:                  Warning Options.    (line 1428)
   51664 * Winvalid-offsetof:                     Warning Options.    (line 1414)
   51665 * Winvalid-pch:                          Warning Options.    (line 1437)
   51666 * Wjump-misses-init:                     Warning Options.    (line 1145)
   51667 * Wl:                                    Link Options.       (line  223)
   51668 * Wlarger-than-LEN:                      Warning Options.    (line  987)
   51669 * Wlarger-than=LEN:                      Warning Options.    (line  987)
   51670 * Wliteral-suffix:                       C++ Dialect Options.
   51671                                                              (line  486)
   51672 * Wlogical-op:                           Warning Options.    (line 1190)
   51673 * Wlong-long:                            Warning Options.    (line 1441)
   51674 * Wmain:                                 Warning Options.    (line  388)
   51675 * Wmaybe-uninitialized:                  Warning Options.    (line  648)
   51676 * Wmissing-braces:                       Warning Options.    (line  395)
   51677 * Wmissing-declarations:                 Warning Options.    (line 1250)
   51678 * Wmissing-field-initializers:           Warning Options.    (line 1260)
   51679 * Wmissing-format-attribute:             Warning Options.    (line  812)
   51680 * Wmissing-include-dirs:                 Warning Options.    (line  406)
   51681 * Wmissing-parameter-type:               Warning Options.    (line 1232)
   51682 * Wmissing-prototypes:                   Warning Options.    (line 1240)
   51683 * Wmultichar:                            Warning Options.    (line 1278)
   51684 * Wnarrowing:                            C++ Dialect Options.
   51685                                                              (line  507)
   51686 * Wnested-externs:                       Warning Options.    (line 1393)
   51687 * Wno-abi:                               C++ Dialect Options.
   51688                                                              (line  362)
   51689 * Wno-address:                           Warning Options.    (line 1177)
   51690 * Wno-aggregate-return:                  Warning Options.    (line 1195)
   51691 * Wno-aggressive-loop-optimizations:     Warning Options.    (line 1200)
   51692 * Wno-all:                               Warning Options.    (line  119)
   51693 * Wno-array-bounds:                      Warning Options.    (line  833)
   51694 * Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
   51695                                                              (line  157)
   51696 * Wno-attributes:                        Warning Options.    (line 1205)
   51697 * Wno-bad-function-cast:                 Warning Options.    (line 1051)
   51698 * Wno-builtin-macro-redefined:           Warning Options.    (line 1211)
   51699 * Wno-cast-align:                        Warning Options.    (line 1082)
   51700 * Wno-cast-qual:                         Warning Options.    (line 1066)
   51701 * Wno-char-subscripts:                   Warning Options.    (line  207)
   51702 * Wno-clobbered:                         Warning Options.    (line 1102)
   51703 * Wno-comment:                           Warning Options.    (line  212)
   51704 * Wno-conversion:                        Warning Options.    (line 1106)
   51705 * Wno-conversion-null:                   Warning Options.    (line 1124)
   51706 * Wno-coverage-mismatch:                 Warning Options.    (line  217)
   51707 * Wno-ctor-dtor-privacy:                 C++ Dialect Options.
   51708                                                              (line  472)
   51709 * Wno-declaration-after-statement:       Warning Options.    (line  966)
   51710 * Wno-delete-non-virtual-dtor:           C++ Dialect Options.
   51711                                                              (line  479)
   51712 * Wno-deprecated:                        Warning Options.    (line 1326)
   51713 * Wno-deprecated-declarations:           Warning Options.    (line 1330)
   51714 * Wno-disabled-optimization:             Warning Options.    (line 1486)
   51715 * Wno-div-by-zero:                       Warning Options.    (line  838)
   51716 * Wno-double-promotion:                  Warning Options.    (line  236)
   51717 * Wno-effc++:                            C++ Dialect Options.
   51718                                                              (line  558)
   51719 * Wno-empty-body:                        Warning Options.    (line 1135)
   51720 * Wno-endif-labels:                      Warning Options.    (line  976)
   51721 * Wno-enum-compare:                      Warning Options.    (line 1139)
   51722 * Wno-error:                             Warning Options.    (line   28)
   51723 * Wno-error=:                            Warning Options.    (line   31)
   51724 * Wno-extra:                             Warning Options.    (line  168)
   51725 * Wno-fatal-errors:                      Warning Options.    (line   48)
   51726 * Wno-float-equal:                       Warning Options.    (line  865)
   51727 * Wno-format:                            Warning Options.    (line  255)
   51728 * Wno-format-contains-nul:               Warning Options.    (line  292)
   51729 * Wno-format-extra-args:                 Warning Options.    (line  296)
   51730 * Wno-format-nonliteral:                 Warning Options.    (line  320)
   51731 * Wno-format-security:                   Warning Options.    (line  325)
   51732 * Wno-format-y2k:                        Warning Options.    (line  337)
   51733 * Wno-format-zero-length:                Warning Options.    (line  310)
   51734 * Wno-free-nonheap-object:               Warning Options.    (line  999)
   51735 * Wno-ignored-qualifiers:                Warning Options.    (line  377)
   51736 * Wno-implicit:                          Warning Options.    (line  373)
   51737 * Wno-implicit-function-declaration:     Warning Options.    (line  367)
   51738 * Wno-implicit-int:                      Warning Options.    (line  363)
   51739 * Wno-inherited-variadic-ctor:           Warning Options.    (line 1396)
   51740 * Wno-init-self:                         Warning Options.    (line  348)
   51741 * Wno-inline:                            Warning Options.    (line 1401)
   51742 * Wno-int-to-pointer-cast:               Warning Options.    (line 1428)
   51743 * Wno-invalid-offsetof:                  Warning Options.    (line 1414)
   51744 * Wno-invalid-pch:                       Warning Options.    (line 1437)
   51745 * Wno-jump-misses-init:                  Warning Options.    (line 1145)
   51746 * Wno-literal-suffix:                    C++ Dialect Options.
   51747                                                              (line  486)
   51748 * Wno-logical-op:                        Warning Options.    (line 1190)
   51749 * Wno-long-long:                         Warning Options.    (line 1441)
   51750 * Wno-main:                              Warning Options.    (line  388)
   51751 * Wno-maybe-uninitialized:               Warning Options.    (line  648)
   51752 * Wno-missing-braces:                    Warning Options.    (line  395)
   51753 * Wno-missing-declarations:              Warning Options.    (line 1250)
   51754 * Wno-missing-field-initializers:        Warning Options.    (line 1260)
   51755 * Wno-missing-format-attribute:          Warning Options.    (line  812)
   51756 * Wno-missing-include-dirs:              Warning Options.    (line  406)
   51757 * Wno-missing-parameter-type:            Warning Options.    (line 1232)
   51758 * Wno-missing-prototypes:                Warning Options.    (line 1240)
   51759 * Wno-mudflap:                           Warning Options.    (line 1506)
   51760 * Wno-multichar:                         Warning Options.    (line 1278)
   51761 * Wno-narrowing:                         C++ Dialect Options.
   51762                                                              (line  507)
   51763 * Wno-nested-externs:                    Warning Options.    (line 1393)
   51764 * Wno-noexcept:                          C++ Dialect Options.
   51765                                                              (line  520)
   51766 * Wno-non-template-friend:               C++ Dialect Options.
   51767                                                              (line  596)
   51768 * Wno-non-virtual-dtor:                  C++ Dialect Options.
   51769                                                              (line  526)
   51770 * Wno-nonnull:                           Warning Options.    (line  341)
   51771 * Wno-old-style-cast:                    C++ Dialect Options.
   51772                                                              (line  612)
   51773 * Wno-old-style-declaration:             Warning Options.    (line 1222)
   51774 * Wno-old-style-definition:              Warning Options.    (line 1228)
   51775 * Wno-overflow:                          Warning Options.    (line 1336)
   51776 * Wno-overlength-strings:                Warning Options.    (line 1510)
   51777 * Wno-overloaded-virtual:                C++ Dialect Options.
   51778                                                              (line  618)
   51779 * Wno-override-init:                     Warning Options.    (line 1339)
   51780 * Wno-packed:                            Warning Options.    (line 1347)
   51781 * Wno-packed-bitfield-compat:            Warning Options.    (line 1364)
   51782 * Wno-padded:                            Warning Options.    (line 1381)
   51783 * Wno-parentheses:                       Warning Options.    (line  409)
   51784 * Wno-pedantic-ms-format:                Warning Options.    (line 1031)
   51785 * Wno-pmf-conversions <1>:               Bound member functions.
   51786                                                              (line   35)
   51787 * Wno-pmf-conversions:                   C++ Dialect Options.
   51788                                                              (line  637)
   51789 * Wno-pointer-arith:                     Warning Options.    (line 1037)
   51790 * Wno-pointer-sign:                      Warning Options.    (line 1495)
   51791 * Wno-pointer-to-int-cast:               Warning Options.    (line 1433)
   51792 * Wno-pragmas:                           Warning Options.    (line  698)
   51793 * Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
   51794                                                              (line  161)
   51795 * Wno-redundant-decls:                   Warning Options.    (line 1388)
   51796 * Wno-reorder:                           C++ Dialect Options.
   51797                                                              (line  533)
   51798 * Wno-return-local-addr:                 Warning Options.    (line  504)
   51799 * Wno-return-type:                       Warning Options.    (line  508)
   51800 * Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
   51801                                                              (line  171)
   51802 * Wno-sequence-point:                    Warning Options.    (line  458)
   51803 * Wno-shadow:                            Warning Options.    (line  980)
   51804 * Wno-sign-compare:                      Warning Options.    (line 1156)
   51805 * Wno-sign-conversion:                   Warning Options.    (line 1163)
   51806 * Wno-sign-promo:                        C++ Dialect Options.
   51807                                                              (line  641)
   51808 * Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1169)
   51809 * Wno-stack-protector:                   Warning Options.    (line 1501)
   51810 * Wno-strict-aliasing:                   Warning Options.    (line  703)
   51811 * Wno-strict-null-sentinel:              C++ Dialect Options.
   51812                                                              (line  588)
   51813 * Wno-strict-overflow:                   Warning Options.    (line  743)
   51814 * Wno-strict-prototypes:                 Warning Options.    (line 1216)
   51815 * Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
   51816                                                              (line  183)
   51817 * Wno-suggest-attribute=:                Warning Options.    (line  793)
   51818 * Wno-suggest-attribute=const:           Warning Options.    (line  799)
   51819 * Wno-suggest-attribute=format:          Warning Options.    (line  812)
   51820 * Wno-suggest-attribute=noreturn:        Warning Options.    (line  799)
   51821 * Wno-suggest-attribute=pure:            Warning Options.    (line  799)
   51822 * Wno-switch:                            Warning Options.    (line  523)
   51823 * Wno-switch-default:                    Warning Options.    (line  531)
   51824 * Wno-switch-enum:                       Warning Options.    (line  534)
   51825 * Wno-sync-nand:                         Warning Options.    (line  543)
   51826 * Wno-system-headers:                    Warning Options.    (line  843)
   51827 * Wno-traditional:                       Warning Options.    (line  880)
   51828 * Wno-traditional-conversion:            Warning Options.    (line  958)
   51829 * Wno-trampolines:                       Warning Options.    (line  854)
   51830 * Wno-trigraphs:                         Warning Options.    (line  548)
   51831 * Wno-type-limits:                       Warning Options.    (line 1044)
   51832 * Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
   51833                                                              (line  191)
   51834 * Wno-undef:                             Warning Options.    (line  973)
   51835 * Wno-uninitialized:                     Warning Options.    (line  625)
   51836 * Wno-unknown-pragmas:                   Warning Options.    (line  691)
   51837 * Wno-unsafe-loop-optimizations:         Warning Options.    (line 1025)
   51838 * Wno-unused:                            Warning Options.    (line  618)
   51839 * Wno-unused-but-set-parameter:          Warning Options.    (line  553)
   51840 * Wno-unused-but-set-variable:           Warning Options.    (line  562)
   51841 * Wno-unused-function:                   Warning Options.    (line  572)
   51842 * Wno-unused-label:                      Warning Options.    (line  577)
   51843 * Wno-unused-parameter:                  Warning Options.    (line  588)
   51844 * Wno-unused-result:                     Warning Options.    (line  595)
   51845 * Wno-unused-value:                      Warning Options.    (line  608)
   51846 * Wno-unused-variable:                   Warning Options.    (line  600)
   51847 * Wno-useless-cast:                      Warning Options.    (line 1132)
   51848 * Wno-varargs:                           Warning Options.    (line 1452)
   51849 * Wno-variadic-macros:                   Warning Options.    (line 1446)
   51850 * Wno-vector-operation-performance:      Warning Options.    (line 1457)
   51851 * Wno-virtual-move-assign:               Warning Options.    (line 1467)
   51852 * Wno-vla:                               Warning Options.    (line 1476)
   51853 * Wno-volatile-register-var:             Warning Options.    (line 1480)
   51854 * Wno-write-strings:                     Warning Options.    (line 1088)
   51855 * Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1128)
   51856 * Wnoexcept:                             C++ Dialect Options.
   51857                                                              (line  520)
   51858 * Wnon-template-friend:                  C++ Dialect Options.
   51859                                                              (line  596)
   51860 * Wnon-virtual-dtor:                     C++ Dialect Options.
   51861                                                              (line  526)
   51862 * Wnonnull:                              Warning Options.    (line  341)
   51863 * Wnormalized=:                          Warning Options.    (line 1284)
   51864 * Wold-style-cast:                       C++ Dialect Options.
   51865                                                              (line  612)
   51866 * Wold-style-declaration:                Warning Options.    (line 1222)
   51867 * Wold-style-definition:                 Warning Options.    (line 1228)
   51868 * Woverflow:                             Warning Options.    (line 1336)
   51869 * Woverlength-strings:                   Warning Options.    (line 1510)
   51870 * Woverloaded-virtual:                   C++ Dialect Options.
   51871                                                              (line  618)
   51872 * Woverride-init:                        Warning Options.    (line 1339)
   51873 * Wp:                                    Preprocessor Options.
   51874                                                              (line   14)
   51875 * Wpacked:                               Warning Options.    (line 1347)
   51876 * Wpacked-bitfield-compat:               Warning Options.    (line 1364)
   51877 * Wpadded:                               Warning Options.    (line 1381)
   51878 * Wparentheses:                          Warning Options.    (line  409)
   51879 * Wpedantic:                             Warning Options.    (line   73)
   51880 * Wpedantic-ms-format:                   Warning Options.    (line 1031)
   51881 * Wpmf-conversions:                      C++ Dialect Options.
   51882                                                              (line  637)
   51883 * Wpointer-arith <1>:                    Pointer Arith.      (line   13)
   51884 * Wpointer-arith:                        Warning Options.    (line 1037)
   51885 * Wpointer-sign:                         Warning Options.    (line 1495)
   51886 * Wpointer-to-int-cast:                  Warning Options.    (line 1433)
   51887 * Wpragmas:                              Warning Options.    (line  698)
   51888 * Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
   51889                                                              (line  161)
   51890 * wrapper:                               Overall Options.    (line  341)
   51891 * Wredundant-decls:                      Warning Options.    (line 1388)
   51892 * Wreorder:                              C++ Dialect Options.
   51893                                                              (line  533)
   51894 * Wreturn-local-addr:                    Warning Options.    (line  504)
   51895 * Wreturn-type:                          Warning Options.    (line  508)
   51896 * Wselector:                             Objective-C and Objective-C++ Dialect Options.
   51897                                                              (line  171)
   51898 * Wsequence-point:                       Warning Options.    (line  458)
   51899 * Wshadow:                               Warning Options.    (line  980)
   51900 * Wsign-compare:                         Warning Options.    (line 1156)
   51901 * Wsign-conversion:                      Warning Options.    (line 1163)
   51902 * Wsign-promo:                           C++ Dialect Options.
   51903                                                              (line  641)
   51904 * Wsizeof-pointer-memaccess:             Warning Options.    (line 1169)
   51905 * Wstack-protector:                      Warning Options.    (line 1501)
   51906 * Wstack-usage:                          Warning Options.    (line 1003)
   51907 * Wstrict-aliasing:                      Warning Options.    (line  703)
   51908 * Wstrict-aliasing=n:                    Warning Options.    (line  711)
   51909 * Wstrict-null-sentinel:                 C++ Dialect Options.
   51910                                                              (line  588)
   51911 * Wstrict-overflow:                      Warning Options.    (line  743)
   51912 * Wstrict-prototypes:                    Warning Options.    (line 1216)
   51913 * Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
   51914                                                              (line  183)
   51915 * Wsuggest-attribute=:                   Warning Options.    (line  793)
   51916 * Wsuggest-attribute=const:              Warning Options.    (line  799)
   51917 * Wsuggest-attribute=format:             Warning Options.    (line  812)
   51918 * Wsuggest-attribute=noreturn:           Warning Options.    (line  799)
   51919 * Wsuggest-attribute=pure:               Warning Options.    (line  799)
   51920 * Wswitch:                               Warning Options.    (line  523)
   51921 * Wswitch-default:                       Warning Options.    (line  531)
   51922 * Wswitch-enum:                          Warning Options.    (line  534)
   51923 * Wsync-nand:                            Warning Options.    (line  543)
   51924 * Wsystem-headers <1>:                   Preprocessor Options.
   51925                                                              (line  165)
   51926 * Wsystem-headers:                       Warning Options.    (line  843)
   51927 * Wtraditional <1>:                      Preprocessor Options.
   51928                                                              (line  118)
   51929 * Wtraditional:                          Warning Options.    (line  880)
   51930 * Wtraditional-conversion:               Warning Options.    (line  958)
   51931 * Wtrampolines:                          Warning Options.    (line  854)
   51932 * Wtrigraphs <1>:                        Preprocessor Options.
   51933                                                              (line  106)
   51934 * Wtrigraphs:                            Warning Options.    (line  548)
   51935 * Wtype-limits:                          Warning Options.    (line 1044)
   51936 * Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
   51937                                                              (line  191)
   51938 * Wundef <1>:                            Preprocessor Options.
   51939                                                              (line  124)
   51940 * Wundef:                                Warning Options.    (line  973)
   51941 * Wuninitialized:                        Warning Options.    (line  625)
   51942 * Wunknown-pragmas:                      Warning Options.    (line  691)
   51943 * Wunsafe-loop-optimizations:            Warning Options.    (line 1025)
   51944 * Wunsuffixed-float-constants:           Warning Options.    (line 1525)
   51945 * Wunused:                               Warning Options.    (line  618)
   51946 * Wunused-but-set-parameter:             Warning Options.    (line  553)
   51947 * Wunused-but-set-variable:              Warning Options.    (line  562)
   51948 * Wunused-function:                      Warning Options.    (line  572)
   51949 * Wunused-label:                         Warning Options.    (line  577)
   51950 * Wunused-local-typedefs:                Warning Options.    (line  584)
   51951 * Wunused-macros:                        Preprocessor Options.
   51952                                                              (line  129)
   51953 * Wunused-parameter:                     Warning Options.    (line  588)
   51954 * Wunused-result:                        Warning Options.    (line  595)
   51955 * Wunused-value:                         Warning Options.    (line  608)
   51956 * Wunused-variable:                      Warning Options.    (line  600)
   51957 * Wuseless-cast:                         Warning Options.    (line 1132)
   51958 * Wvarargs:                              Warning Options.    (line 1452)
   51959 * Wvariadic-macros:                      Warning Options.    (line 1446)
   51960 * Wvector-operation-performance:         Warning Options.    (line 1457)
   51961 * Wvirtual-move-assign:                  Warning Options.    (line 1467)
   51962 * Wvla:                                  Warning Options.    (line 1476)
   51963 * Wvolatile-register-var:                Warning Options.    (line 1480)
   51964 * Wwrite-strings:                        Warning Options.    (line 1088)
   51965 * Wzero-as-null-pointer-constant:        Warning Options.    (line 1128)
   51966 * x <1>:                                 Preprocessor Options.
   51967                                                              (line  322)
   51968 * x:                                     Overall Options.    (line  126)
   51969 * Xassembler:                            Assembler Options.  (line   13)
   51970 * Xbind-lazy:                            VxWorks Options.    (line   26)
   51971 * Xbind-now:                             VxWorks Options.    (line   30)
   51972 * Xlinker:                               Link Options.       (line  205)
   51973 * Xpreprocessor:                         Preprocessor Options.
   51974                                                              (line   25)
   51975 * Ym:                                    System V Options.   (line   26)
   51976 * YP:                                    System V Options.   (line   22)
   51977 
   51978 
   51979 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
   51980 
   51981 Keyword Index
   51982 *************
   51983 
   51984 [index]
   51985 * Menu:
   51986 
   51987 * ! in constraint:                       Multi-Alternative.  (line   33)
   51988 * # in constraint:                       Modifiers.          (line   57)
   51989 * #pragma:                               Pragmas.            (line    6)
   51990 * #pragma implementation:                C++ Interface.      (line   39)
   51991 * #pragma implementation, implied:       C++ Interface.      (line   46)
   51992 * #pragma interface:                     C++ Interface.      (line   20)
   51993 * #pragma, reason for not using:         Function Attributes.
   51994                                                              (line 1878)
   51995 * $:                                     Dollar Signs.       (line    6)
   51996 * % in constraint:                       Modifiers.          (line   45)
   51997 * %include:                              Spec Files.         (line   27)
   51998 * %include_noerr:                        Spec Files.         (line   31)
   51999 * %rename:                               Spec Files.         (line   35)
   52000 * & in constraint:                       Modifiers.          (line   25)
   52001 * ':                                     Incompatibilities.  (line  116)
   52002 * * in constraint:                       Modifiers.          (line   62)
   52003 * *__builtin_assume_aligned:             Other Builtins.     (line  339)
   52004 * + in constraint:                       Modifiers.          (line   12)
   52005 * -lgcc, use with -nodefaultlibs:        Link Options.       (line   85)
   52006 * -lgcc, use with -nostdlib:             Link Options.       (line   85)
   52007 * -march feature modifiers:              AArch64 Options.    (line   92)
   52008 * -mcpu feature modifiers:               AArch64 Options.    (line   92)
   52009 * -nodefaultlibs and unresolved references: Link Options.    (line   85)
   52010 * -nostdlib and unresolved references:   Link Options.       (line   85)
   52011 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
   52012                                                              (line  743)
   52013 * //:                                    C++ Comments.       (line    6)
   52014 * 0 in constraint:                       Simple Constraints. (line  127)
   52015 * < in constraint:                       Simple Constraints. (line   48)
   52016 * = in constraint:                       Modifiers.          (line    8)
   52017 * > in constraint:                       Simple Constraints. (line   61)
   52018 * ? in constraint:                       Multi-Alternative.  (line   27)
   52019 * ?: extensions:                         Conditionals.       (line    6)
   52020 * ?: side effect:                        Conditionals.       (line   20)
   52021 * _ in variables in macros:              Typeof.             (line   46)
   52022 * __atomic_add_fetch:                    __atomic Builtins.  (line  169)
   52023 * __atomic_always_lock_free:             __atomic Builtins.  (line  247)
   52024 * __atomic_and_fetch:                    __atomic Builtins.  (line  173)
   52025 * __atomic_clear:                        __atomic Builtins.  (line  221)
   52026 * __atomic_compare_exchange:             __atomic Builtins.  (line  161)
   52027 * __atomic_compare_exchange_n:           __atomic Builtins.  (line  138)
   52028 * __atomic_exchange:                     __atomic Builtins.  (line  130)
   52029 * __atomic_exchange_n:                   __atomic Builtins.  (line  119)
   52030 * __atomic_fetch_add:                    __atomic Builtins.  (line  189)
   52031 * __atomic_fetch_and:                    __atomic Builtins.  (line  193)
   52032 * __atomic_fetch_nand:                   __atomic Builtins.  (line  199)
   52033 * __atomic_fetch_or:                     __atomic Builtins.  (line  197)
   52034 * __atomic_fetch_sub:                    __atomic Builtins.  (line  191)
   52035 * __atomic_fetch_xor:                    __atomic Builtins.  (line  195)
   52036 * __atomic_is_lock_free:                 __atomic Builtins.  (line  261)
   52037 * __atomic_load:                         __atomic Builtins.  (line   98)
   52038 * __atomic_load_n:                       __atomic Builtins.  (line   89)
   52039 * __atomic_nand_fetch:                   __atomic Builtins.  (line  179)
   52040 * __atomic_or_fetch:                     __atomic Builtins.  (line  177)
   52041 * __atomic_signal_fence:                 __atomic Builtins.  (line  239)
   52042 * __atomic_store:                        __atomic Builtins.  (line  113)
   52043 * __atomic_store_n:                      __atomic Builtins.  (line  104)
   52044 * __atomic_sub_fetch:                    __atomic Builtins.  (line  171)
   52045 * __atomic_test_and_set:                 __atomic Builtins.  (line  210)
   52046 * __atomic_thread_fence:                 __atomic Builtins.  (line  232)
   52047 * __atomic_xor_fetch:                    __atomic Builtins.  (line  175)
   52048 * __builtin___clear_cache:               Other Builtins.     (line  372)
   52049 * __builtin___fprintf_chk:               Object Size Checking.
   52050                                                              (line    6)
   52051 * __builtin___memcpy_chk:                Object Size Checking.
   52052                                                              (line    6)
   52053 * __builtin___memmove_chk:               Object Size Checking.
   52054                                                              (line    6)
   52055 * __builtin___mempcpy_chk:               Object Size Checking.
   52056                                                              (line    6)
   52057 * __builtin___memset_chk:                Object Size Checking.
   52058                                                              (line    6)
   52059 * __builtin___printf_chk:                Object Size Checking.
   52060                                                              (line    6)
   52061 * __builtin___snprintf_chk:              Object Size Checking.
   52062                                                              (line    6)
   52063 * __builtin___sprintf_chk:               Object Size Checking.
   52064                                                              (line    6)
   52065 * __builtin___stpcpy_chk:                Object Size Checking.
   52066                                                              (line    6)
   52067 * __builtin___strcat_chk:                Object Size Checking.
   52068                                                              (line    6)
   52069 * __builtin___strcpy_chk:                Object Size Checking.
   52070                                                              (line    6)
   52071 * __builtin___strncat_chk:               Object Size Checking.
   52072                                                              (line    6)
   52073 * __builtin___strncpy_chk:               Object Size Checking.
   52074                                                              (line    6)
   52075 * __builtin___vfprintf_chk:              Object Size Checking.
   52076                                                              (line    6)
   52077 * __builtin___vprintf_chk:               Object Size Checking.
   52078                                                              (line    6)
   52079 * __builtin___vsnprintf_chk:             Object Size Checking.
   52080                                                              (line    6)
   52081 * __builtin___vsprintf_chk:              Object Size Checking.
   52082                                                              (line    6)
   52083 * __builtin_apply:                       Constructing Calls. (line   31)
   52084 * __builtin_apply_args:                  Constructing Calls. (line   20)
   52085 * __builtin_bswap16:                     Other Builtins.     (line  603)
   52086 * __builtin_bswap32:                     Other Builtins.     (line  607)
   52087 * __builtin_bswap64:                     Other Builtins.     (line  611)
   52088 * __builtin_choose_expr:                 Other Builtins.     (line  157)
   52089 * __builtin_clrsb:                       Other Builtins.     (line  532)
   52090 * __builtin_clrsbl:                      Other Builtins.     (line  555)
   52091 * __builtin_clrsbll:                     Other Builtins.     (line  578)
   52092 * __builtin_clz:                         Other Builtins.     (line  524)
   52093 * __builtin_clzl:                        Other Builtins.     (line  547)
   52094 * __builtin_clzll:                       Other Builtins.     (line  570)
   52095 * __builtin_complex:                     Other Builtins.     (line  197)
   52096 * __builtin_constant_p:                  Other Builtins.     (line  207)
   52097 * __builtin_cpu_init:                    X86 Built-in Functions.
   52098                                                              (line   63)
   52099 * __builtin_cpu_is:                      X86 Built-in Functions.
   52100                                                              (line   92)
   52101 * __builtin_cpu_supports:                X86 Built-in Functions.
   52102                                                              (line  161)
   52103 * __builtin_ctz:                         Other Builtins.     (line  528)
   52104 * __builtin_ctzl:                        Other Builtins.     (line  551)
   52105 * __builtin_ctzll:                       Other Builtins.     (line  574)
   52106 * __builtin_expect:                      Other Builtins.     (line  257)
   52107 * __builtin_extract_return_addr:         Return Address.     (line   36)
   52108 * __builtin_ffs:                         Other Builtins.     (line  520)
   52109 * __builtin_ffsl:                        Other Builtins.     (line  543)
   52110 * __builtin_ffsll:                       Other Builtins.     (line  566)
   52111 * __builtin_FILE:                        Other Builtins.     (line  366)
   52112 * __builtin_fpclassify:                  Other Builtins.     (line    6)
   52113 * __builtin_frame_address:               Return Address.     (line   49)
   52114 * __builtin_frob_return_address:         Return Address.     (line   45)
   52115 * __builtin_FUNCTION:                    Other Builtins.     (line  361)
   52116 * __builtin_huge_val:                    Other Builtins.     (line  423)
   52117 * __builtin_huge_valf:                   Other Builtins.     (line  428)
   52118 * __builtin_huge_vall:                   Other Builtins.     (line  431)
   52119 * __builtin_huge_valq:                   X86 Built-in Functions.
   52120                                                              (line   57)
   52121 * __builtin_inf:                         Other Builtins.     (line  446)
   52122 * __builtin_infd128:                     Other Builtins.     (line  456)
   52123 * __builtin_infd32:                      Other Builtins.     (line  450)
   52124 * __builtin_infd64:                      Other Builtins.     (line  453)
   52125 * __builtin_inff:                        Other Builtins.     (line  460)
   52126 * __builtin_infl:                        Other Builtins.     (line  465)
   52127 * __builtin_infq:                        X86 Built-in Functions.
   52128                                                              (line   53)
   52129 * __builtin_isfinite:                    Other Builtins.     (line    6)
   52130 * __builtin_isgreater:                   Other Builtins.     (line    6)
   52131 * __builtin_isgreaterequal:              Other Builtins.     (line    6)
   52132 * __builtin_isinf_sign:                  Other Builtins.     (line    6)
   52133 * __builtin_isless:                      Other Builtins.     (line    6)
   52134 * __builtin_islessequal:                 Other Builtins.     (line    6)
   52135 * __builtin_islessgreater:               Other Builtins.     (line    6)
   52136 * __builtin_isnormal:                    Other Builtins.     (line    6)
   52137 * __builtin_isunordered:                 Other Builtins.     (line    6)
   52138 * __builtin_LINE:                        Other Builtins.     (line  356)
   52139 * __builtin_nan:                         Other Builtins.     (line  476)
   52140 * __builtin_nand128:                     Other Builtins.     (line  498)
   52141 * __builtin_nand32:                      Other Builtins.     (line  492)
   52142 * __builtin_nand64:                      Other Builtins.     (line  495)
   52143 * __builtin_nanf:                        Other Builtins.     (line  502)
   52144 * __builtin_nanl:                        Other Builtins.     (line  505)
   52145 * __builtin_nans:                        Other Builtins.     (line  509)
   52146 * __builtin_nansf:                       Other Builtins.     (line  513)
   52147 * __builtin_nansl:                       Other Builtins.     (line  516)
   52148 * __builtin_non_tx_store:                S/390 System z Built-in Functions.
   52149                                                              (line  104)
   52150 * __builtin_object_size:                 Object Size Checking.
   52151                                                              (line    6)
   52152 * __builtin_offsetof:                    Offsetof.           (line    6)
   52153 * __builtin_parity:                      Other Builtins.     (line  540)
   52154 * __builtin_parityl:                     Other Builtins.     (line  562)
   52155 * __builtin_parityll:                    Other Builtins.     (line  586)
   52156 * __builtin_popcount:                    Other Builtins.     (line  537)
   52157 * __builtin_popcountl:                   Other Builtins.     (line  558)
   52158 * __builtin_popcountll:                  Other Builtins.     (line  582)
   52159 * __builtin_powi:                        Other Builtins.     (line    6)
   52160 * __builtin_powif:                       Other Builtins.     (line    6)
   52161 * __builtin_powil:                       Other Builtins.     (line    6)
   52162 * __builtin_prefetch:                    Other Builtins.     (line  384)
   52163 * __builtin_return:                      Constructing Calls. (line   48)
   52164 * __builtin_return_address:              Return Address.     (line   11)
   52165 * __builtin_rx_brk:                      RX Built-in Functions.
   52166                                                              (line   11)
   52167 * __builtin_rx_clrpsw:                   RX Built-in Functions.
   52168                                                              (line   14)
   52169 * __builtin_rx_int:                      RX Built-in Functions.
   52170                                                              (line   18)
   52171 * __builtin_rx_machi:                    RX Built-in Functions.
   52172                                                              (line   22)
   52173 * __builtin_rx_maclo:                    RX Built-in Functions.
   52174                                                              (line   27)
   52175 * __builtin_rx_mulhi:                    RX Built-in Functions.
   52176                                                              (line   32)
   52177 * __builtin_rx_mullo:                    RX Built-in Functions.
   52178                                                              (line   37)
   52179 * __builtin_rx_mvfachi:                  RX Built-in Functions.
   52180                                                              (line   42)
   52181 * __builtin_rx_mvfacmi:                  RX Built-in Functions.
   52182                                                              (line   46)
   52183 * __builtin_rx_mvfc:                     RX Built-in Functions.
   52184                                                              (line   50)
   52185 * __builtin_rx_mvtachi:                  RX Built-in Functions.
   52186                                                              (line   54)
   52187 * __builtin_rx_mvtaclo:                  RX Built-in Functions.
   52188                                                              (line   58)
   52189 * __builtin_rx_mvtc:                     RX Built-in Functions.
   52190                                                              (line   62)
   52191 * __builtin_rx_mvtipl:                   RX Built-in Functions.
   52192                                                              (line   66)
   52193 * __builtin_rx_racw:                     RX Built-in Functions.
   52194                                                              (line   70)
   52195 * __builtin_rx_revw:                     RX Built-in Functions.
   52196                                                              (line   74)
   52197 * __builtin_rx_rmpa:                     RX Built-in Functions.
   52198                                                              (line   79)
   52199 * __builtin_rx_round:                    RX Built-in Functions.
   52200                                                              (line   83)
   52201 * __builtin_rx_sat:                      RX Built-in Functions.
   52202                                                              (line   88)
   52203 * __builtin_rx_setpsw:                   RX Built-in Functions.
   52204                                                              (line   92)
   52205 * __builtin_rx_wait:                     RX Built-in Functions.
   52206                                                              (line   96)
   52207 * __builtin_set_thread_pointer:          SH Built-in Functions.
   52208                                                              (line   10)
   52209 * __builtin_tabort:                      S/390 System z Built-in Functions.
   52210                                                              (line   87)
   52211 * __builtin_tbegin:                      S/390 System z Built-in Functions.
   52212                                                              (line    7)
   52213 * __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
   52214                                                              (line   59)
   52215 * __builtin_tbegin_retry:                S/390 System z Built-in Functions.
   52216                                                              (line   65)
   52217 * __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
   52218                                                              (line   72)
   52219 * __builtin_tbeginc:                     S/390 System z Built-in Functions.
   52220                                                              (line   78)
   52221 * __builtin_tend:                        S/390 System z Built-in Functions.
   52222                                                              (line   82)
   52223 * __builtin_thread_pointer:              SH Built-in Functions.
   52224                                                              (line   20)
   52225 * __builtin_trap:                        Other Builtins.     (line  281)
   52226 * __builtin_tx_assist:                   S/390 System z Built-in Functions.
   52227                                                              (line   92)
   52228 * __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
   52229                                                              (line   98)
   52230 * __builtin_types_compatible_p:          Other Builtins.     (line  111)
   52231 * __builtin_unreachable:                 Other Builtins.     (line  288)
   52232 * __builtin_va_arg_pack:                 Constructing Calls. (line   53)
   52233 * __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
   52234 * __complex__ keyword:                   Complex.            (line    6)
   52235 * __declspec(dllexport):                 Function Attributes.
   52236                                                              (line  258)
   52237 * __declspec(dllimport):                 Function Attributes.
   52238                                                              (line  293)
   52239 * __ea SPU Named Address Spaces:         Named Address Spaces.
   52240                                                              (line  155)
   52241 * __extension__:                         Alternate Keywords. (line   30)
   52242 * __far M32C Named Address Spaces:       Named Address Spaces.
   52243                                                              (line  139)
   52244 * __far RL78 Named Address Spaces:       Named Address Spaces.
   52245                                                              (line  147)
   52246 * __flash AVR Named Address Spaces:      Named Address Spaces.
   52247                                                              (line   31)
   52248 * __flash1 AVR Named Address Spaces:     Named Address Spaces.
   52249                                                              (line   40)
   52250 * __flash2 AVR Named Address Spaces:     Named Address Spaces.
   52251                                                              (line   40)
   52252 * __flash3 AVR Named Address Spaces:     Named Address Spaces.
   52253                                                              (line   40)
   52254 * __flash4 AVR Named Address Spaces:     Named Address Spaces.
   52255                                                              (line   40)
   52256 * __flash5 AVR Named Address Spaces:     Named Address Spaces.
   52257                                                              (line   40)
   52258 * __float128 data type:                  Floating Types.     (line    6)
   52259 * __float80 data type:                   Floating Types.     (line    6)
   52260 * __fp16 data type:                      Half-Precision.     (line    6)
   52261 * __func__ identifier:                   Function Names.     (line    6)
   52262 * __FUNCTION__ identifier:               Function Names.     (line    6)
   52263 * __imag__ keyword:                      Complex.            (line   27)
   52264 * __int128 data types:                   __int128.           (line    6)
   52265 * __memx AVR Named Address Spaces:       Named Address Spaces.
   52266                                                              (line   46)
   52267 * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
   52268 * __real__ keyword:                      Complex.            (line   27)
   52269 * __STDC_HOSTED__:                       Standards.          (line   13)
   52270 * __sync_add_and_fetch:                  __sync Builtins.    (line   60)
   52271 * __sync_and_and_fetch:                  __sync Builtins.    (line   60)
   52272 * __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
   52273 * __sync_fetch_and_add:                  __sync Builtins.    (line   44)
   52274 * __sync_fetch_and_and:                  __sync Builtins.    (line   44)
   52275 * __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
   52276 * __sync_fetch_and_or:                   __sync Builtins.    (line   44)
   52277 * __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
   52278 * __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
   52279 * __sync_lock_release:                   __sync Builtins.    (line  101)
   52280 * __sync_lock_test_and_set:              __sync Builtins.    (line   83)
   52281 * __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
   52282 * __sync_or_and_fetch:                   __sync Builtins.    (line   60)
   52283 * __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
   52284 * __sync_synchronize:                    __sync Builtins.    (line   80)
   52285 * __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
   52286 * __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
   52287 * __thread:                              Thread-Local.       (line    6)
   52288 * _Accum data type:                      Fixed-Point.        (line    6)
   52289 * _Complex keyword:                      Complex.            (line    6)
   52290 * _Decimal128 data type:                 Decimal Float.      (line    6)
   52291 * _Decimal32 data type:                  Decimal Float.      (line    6)
   52292 * _Decimal64 data type:                  Decimal Float.      (line    6)
   52293 * _exit:                                 Other Builtins.     (line    6)
   52294 * _Exit:                                 Other Builtins.     (line    6)
   52295 * _Fract data type:                      Fixed-Point.        (line    6)
   52296 * _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
   52297                                                              (line   48)
   52298 * _Sat data type:                        Fixed-Point.        (line    6)
   52299 * _xabort:                               X86 transactional memory intrinsics.
   52300                                                              (line   68)
   52301 * _xbegin:                               X86 transactional memory intrinsics.
   52302                                                              (line   20)
   52303 * _xend:                                 X86 transactional memory intrinsics.
   52304                                                              (line   59)
   52305 * _xtest:                                X86 transactional memory intrinsics.
   52306                                                              (line   64)
   52307 * AArch64 Options:                       AArch64 Options.    (line    6)
   52308 * ABI:                                   Compatibility.      (line    6)
   52309 * abi_tag attribute:                     C++ Attributes.     (line    9)
   52310 * abort:                                 Other Builtins.     (line    6)
   52311 * abs:                                   Other Builtins.     (line    6)
   52312 * accessing volatiles <1>:               C++ Volatiles.      (line    6)
   52313 * accessing volatiles:                   Volatiles.          (line    6)
   52314 * acos:                                  Other Builtins.     (line    6)
   52315 * acosf:                                 Other Builtins.     (line    6)
   52316 * acosh:                                 Other Builtins.     (line    6)
   52317 * acoshf:                                Other Builtins.     (line    6)
   52318 * acoshl:                                Other Builtins.     (line    6)
   52319 * acosl:                                 Other Builtins.     (line    6)
   52320 * Ada:                                   G++ and GCC.        (line    6)
   52321 * additional floating types:             Floating Types.     (line    6)
   52322 * address constraints:                   Simple Constraints. (line  154)
   52323 * address of a label:                    Labels as Values.   (line    6)
   52324 * address_operand:                       Simple Constraints. (line  158)
   52325 * alias attribute:                       Function Attributes.
   52326                                                              (line   37)
   52327 * aligned attribute <1>:                 Type Attributes.    (line   31)
   52328 * aligned attribute <2>:                 Variable Attributes.
   52329                                                              (line   23)
   52330 * aligned attribute:                     Function Attributes.
   52331                                                              (line   50)
   52332 * alignment:                             Alignment.          (line    6)
   52333 * alloc_size attribute:                  Function Attributes.
   52334                                                              (line   70)
   52335 * alloca:                                Other Builtins.     (line    6)
   52336 * alloca vs variable-length arrays:      Variable Length.    (line   26)
   52337 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
   52338                                                              (line  943)
   52339 * alternate keywords:                    Alternate Keywords. (line    6)
   52340 * always_inline function attribute:      Function Attributes.
   52341                                                              (line   91)
   52342 * AMD x86-64 Options:                    i386 and x86-64 Options.
   52343                                                              (line    6)
   52344 * AMD1:                                  Standards.          (line   13)
   52345 * ANSI C:                                Standards.          (line   13)
   52346 * ANSI C standard:                       Standards.          (line   13)
   52347 * ANSI C89:                              Standards.          (line   13)
   52348 * ANSI support:                          C Dialect Options.  (line   10)
   52349 * ANSI X3.159-1989:                      Standards.          (line   13)
   52350 * apostrophes:                           Incompatibilities.  (line  116)
   52351 * application binary interface:          Compatibility.      (line    6)
   52352 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
   52353                                                              (line    6)
   52354 * ARM options:                           ARM Options.        (line    6)
   52355 * arrays of length zero:                 Zero Length.        (line    6)
   52356 * arrays of variable length:             Variable Length.    (line    6)
   52357 * arrays, non-lvalue:                    Subscripting.       (line    6)
   52358 * artificial function attribute:         Function Attributes.
   52359                                                              (line  134)
   52360 * asin:                                  Other Builtins.     (line    6)
   52361 * asinf:                                 Other Builtins.     (line    6)
   52362 * asinh:                                 Other Builtins.     (line    6)
   52363 * asinhf:                                Other Builtins.     (line    6)
   52364 * asinhl:                                Other Builtins.     (line    6)
   52365 * asinl:                                 Other Builtins.     (line    6)
   52366 * asm constraints:                       Constraints.        (line    6)
   52367 * asm expressions:                       Extended Asm.       (line    6)
   52368 * assembler instructions:                Extended Asm.       (line    6)
   52369 * assembler names for identifiers:       Asm Labels.         (line    6)
   52370 * assembly code, invalid:                Bug Criteria.       (line   12)
   52371 * atan:                                  Other Builtins.     (line    6)
   52372 * atan2:                                 Other Builtins.     (line    6)
   52373 * atan2f:                                Other Builtins.     (line    6)
   52374 * atan2l:                                Other Builtins.     (line    6)
   52375 * atanf:                                 Other Builtins.     (line    6)
   52376 * atanh:                                 Other Builtins.     (line    6)
   52377 * atanhf:                                Other Builtins.     (line    6)
   52378 * atanhl:                                Other Builtins.     (line    6)
   52379 * atanl:                                 Other Builtins.     (line    6)
   52380 * attribute of types:                    Type Attributes.    (line    6)
   52381 * attribute of variables:                Variable Attributes.
   52382                                                              (line    6)
   52383 * attribute syntax:                      Attribute Syntax.   (line    6)
   52384 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
   52385 * automatic inline for C++ member fns:   Inline.             (line   71)
   52386 * AVR Options:                           AVR Options.        (line    6)
   52387 * Backwards Compatibility:               Backwards Compatibility.
   52388                                                              (line    6)
   52389 * base class members:                    Name lookup.        (line    6)
   52390 * bcmp:                                  Other Builtins.     (line    6)
   52391 * below100 attribute:                    Variable Attributes.
   52392                                                              (line  584)
   52393 * binary compatibility:                  Compatibility.      (line    6)
   52394 * Binary constants using the 0b prefix:  Binary constants.   (line    6)
   52395 * Blackfin Options:                      Blackfin Options.   (line    6)
   52396 * bound pointer to member function:      Bound member functions.
   52397                                                              (line    6)
   52398 * bounds checking:                       Optimize Options.   (line  407)
   52399 * bug criteria:                          Bug Criteria.       (line    6)
   52400 * bugs:                                  Bugs.               (line    6)
   52401 * bugs, known:                           Trouble.            (line    6)
   52402 * built-in functions <1>:                Other Builtins.     (line    6)
   52403 * built-in functions:                    C Dialect Options.  (line  205)
   52404 * bzero:                                 Other Builtins.     (line    6)
   52405 * C compilation options:                 Invoking GCC.       (line   17)
   52406 * C intermediate output, nonexistent:    G++ and GCC.        (line   35)
   52407 * C language extensions:                 C Extensions.       (line    6)
   52408 * C language, traditional:               C Dialect Options.  (line  307)
   52409 * C standard:                            Standards.          (line   13)
   52410 * C standards:                           Standards.          (line   13)
   52411 * c++:                                   Invoking G++.       (line   14)
   52412 * C++:                                   G++ and GCC.        (line   30)
   52413 * C++ comments:                          C++ Comments.       (line    6)
   52414 * C++ compilation options:               Invoking GCC.       (line   23)
   52415 * C++ interface and implementation headers: C++ Interface.   (line    6)
   52416 * C++ language extensions:               C++ Extensions.     (line    6)
   52417 * C++ member fns, automatically inline:  Inline.             (line   71)
   52418 * C++ misunderstandings:                 C++ Misunderstandings.
   52419                                                              (line    6)
   52420 * C++ options, command-line:             C++ Dialect Options.
   52421                                                              (line    6)
   52422 * C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
   52423 * C++ source file suffixes:              Invoking G++.       (line    6)
   52424 * C++ static data, declaring and defining: Static Definitions.
   52425                                                              (line    6)
   52426 * C11:                                   Standards.          (line   13)
   52427 * C1X:                                   Standards.          (line   13)
   52428 * C6X Options:                           C6X Options.        (line    6)
   52429 * C89:                                   Standards.          (line   13)
   52430 * C90:                                   Standards.          (line   13)
   52431 * C94:                                   Standards.          (line   13)
   52432 * C95:                                   Standards.          (line   13)
   52433 * C99:                                   Standards.          (line   13)
   52434 * C9X:                                   Standards.          (line   13)
   52435 * C_INCLUDE_PATH:                        Environment Variables.
   52436                                                              (line  130)
   52437 * cabs:                                  Other Builtins.     (line    6)
   52438 * cabsf:                                 Other Builtins.     (line    6)
   52439 * cabsl:                                 Other Builtins.     (line    6)
   52440 * cacos:                                 Other Builtins.     (line    6)
   52441 * cacosf:                                Other Builtins.     (line    6)
   52442 * cacosh:                                Other Builtins.     (line    6)
   52443 * cacoshf:                               Other Builtins.     (line    6)
   52444 * cacoshl:                               Other Builtins.     (line    6)
   52445 * cacosl:                                Other Builtins.     (line    6)
   52446 * callee_pop_aggregate_return attribute: Function Attributes.
   52447                                                              (line  893)
   52448 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
   52449                                                              (line  532)
   52450 * calloc:                                Other Builtins.     (line    6)
   52451 * carg:                                  Other Builtins.     (line    6)
   52452 * cargf:                                 Other Builtins.     (line    6)
   52453 * cargl:                                 Other Builtins.     (line    6)
   52454 * case labels in initializers:           Designated Inits.   (line    6)
   52455 * case ranges:                           Case Ranges.        (line    6)
   52456 * casin:                                 Other Builtins.     (line    6)
   52457 * casinf:                                Other Builtins.     (line    6)
   52458 * casinh:                                Other Builtins.     (line    6)
   52459 * casinhf:                               Other Builtins.     (line    6)
   52460 * casinhl:                               Other Builtins.     (line    6)
   52461 * casinl:                                Other Builtins.     (line    6)
   52462 * cast to a union:                       Cast to Union.      (line    6)
   52463 * catan:                                 Other Builtins.     (line    6)
   52464 * catanf:                                Other Builtins.     (line    6)
   52465 * catanh:                                Other Builtins.     (line    6)
   52466 * catanhf:                               Other Builtins.     (line    6)
   52467 * catanhl:                               Other Builtins.     (line    6)
   52468 * catanl:                                Other Builtins.     (line    6)
   52469 * cbrt:                                  Other Builtins.     (line    6)
   52470 * cbrtf:                                 Other Builtins.     (line    6)
   52471 * cbrtl:                                 Other Builtins.     (line    6)
   52472 * ccos:                                  Other Builtins.     (line    6)
   52473 * ccosf:                                 Other Builtins.     (line    6)
   52474 * ccosh:                                 Other Builtins.     (line    6)
   52475 * ccoshf:                                Other Builtins.     (line    6)
   52476 * ccoshl:                                Other Builtins.     (line    6)
   52477 * ccosl:                                 Other Builtins.     (line    6)
   52478 * ceil:                                  Other Builtins.     (line    6)
   52479 * ceilf:                                 Other Builtins.     (line    6)
   52480 * ceill:                                 Other Builtins.     (line    6)
   52481 * cexp:                                  Other Builtins.     (line    6)
   52482 * cexpf:                                 Other Builtins.     (line    6)
   52483 * cexpl:                                 Other Builtins.     (line    6)
   52484 * character set, execution:              Preprocessor Options.
   52485                                                              (line  554)
   52486 * character set, input:                  Preprocessor Options.
   52487                                                              (line  567)
   52488 * character set, input normalization:    Warning Options.    (line 1284)
   52489 * character set, wide execution:         Preprocessor Options.
   52490                                                              (line  559)
   52491 * cimag:                                 Other Builtins.     (line    6)
   52492 * cimagf:                                Other Builtins.     (line    6)
   52493 * cimagl:                                Other Builtins.     (line    6)
   52494 * cleanup attribute:                     Variable Attributes.
   52495                                                              (line   89)
   52496 * clog:                                  Other Builtins.     (line    6)
   52497 * clogf:                                 Other Builtins.     (line    6)
   52498 * clogl:                                 Other Builtins.     (line    6)
   52499 * COBOL:                                 G++ and GCC.        (line   23)
   52500 * code generation conventions:           Code Gen Options.   (line    6)
   52501 * code, mixed with declarations:         Mixed Declarations. (line    6)
   52502 * cold function attribute:               Function Attributes.
   52503                                                              (line 1166)
   52504 * cold label attribute:                  Function Attributes.
   52505                                                              (line 1184)
   52506 * command options:                       Invoking GCC.       (line    6)
   52507 * comments, C++ style:                   C++ Comments.       (line    6)
   52508 * common attribute:                      Variable Attributes.
   52509                                                              (line  105)
   52510 * comparison of signed and unsigned values, warning: Warning Options.
   52511                                                              (line 1156)
   52512 * compiler bugs, reporting:              Bug Reporting.      (line    6)
   52513 * compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
   52514 * compiler options, C++:                 C++ Dialect Options.
   52515                                                              (line    6)
   52516 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   52517                                                              (line    6)
   52518 * compiler version, specifying:          Target Options.     (line    6)
   52519 * COMPILER_PATH:                         Environment Variables.
   52520                                                              (line   91)
   52521 * complex conjugation:                   Complex.            (line   34)
   52522 * complex numbers:                       Complex.            (line    6)
   52523 * compound literals:                     Compound Literals.  (line    6)
   52524 * computed gotos:                        Labels as Values.   (line    6)
   52525 * conditional expressions, extensions:   Conditionals.       (line    6)
   52526 * conflicting types:                     Disappointments.    (line   21)
   52527 * conj:                                  Other Builtins.     (line    6)
   52528 * conjf:                                 Other Builtins.     (line    6)
   52529 * conjl:                                 Other Builtins.     (line    6)
   52530 * const applied to function:             Function Attributes.
   52531                                                              (line    6)
   52532 * const function attribute:              Function Attributes.
   52533                                                              (line  183)
   52534 * constants in constraints:              Simple Constraints. (line   70)
   52535 * constraint modifier characters:        Modifiers.          (line    6)
   52536 * constraint, matching:                  Simple Constraints. (line  139)
   52537 * constraints, asm:                      Constraints.        (line    6)
   52538 * constraints, machine specific:         Machine Constraints.
   52539                                                              (line    6)
   52540 * constructing calls:                    Constructing Calls. (line    6)
   52541 * constructor expressions:               Compound Literals.  (line    6)
   52542 * constructor function attribute:        Function Attributes.
   52543                                                              (line  211)
   52544 * contributors:                          Contributors.       (line    6)
   52545 * copysign:                              Other Builtins.     (line    6)
   52546 * copysignf:                             Other Builtins.     (line    6)
   52547 * copysignl:                             Other Builtins.     (line    6)
   52548 * core dump:                             Bug Criteria.       (line    9)
   52549 * cos:                                   Other Builtins.     (line    6)
   52550 * cosf:                                  Other Builtins.     (line    6)
   52551 * cosh:                                  Other Builtins.     (line    6)
   52552 * coshf:                                 Other Builtins.     (line    6)
   52553 * coshl:                                 Other Builtins.     (line    6)
   52554 * cosl:                                  Other Builtins.     (line    6)
   52555 * CPATH:                                 Environment Variables.
   52556                                                              (line  129)
   52557 * CPLUS_INCLUDE_PATH:                    Environment Variables.
   52558                                                              (line  131)
   52559 * cpow:                                  Other Builtins.     (line    6)
   52560 * cpowf:                                 Other Builtins.     (line    6)
   52561 * cpowl:                                 Other Builtins.     (line    6)
   52562 * cproj:                                 Other Builtins.     (line    6)
   52563 * cprojf:                                Other Builtins.     (line    6)
   52564 * cprojl:                                Other Builtins.     (line    6)
   52565 * CR16 Options:                          CR16 Options.       (line    6)
   52566 * creal:                                 Other Builtins.     (line    6)
   52567 * crealf:                                Other Builtins.     (line    6)
   52568 * creall:                                Other Builtins.     (line    6)
   52569 * CRIS Options:                          CRIS Options.       (line    6)
   52570 * cross compiling:                       Target Options.     (line    6)
   52571 * csin:                                  Other Builtins.     (line    6)
   52572 * csinf:                                 Other Builtins.     (line    6)
   52573 * csinh:                                 Other Builtins.     (line    6)
   52574 * csinhf:                                Other Builtins.     (line    6)
   52575 * csinhl:                                Other Builtins.     (line    6)
   52576 * csinl:                                 Other Builtins.     (line    6)
   52577 * csqrt:                                 Other Builtins.     (line    6)
   52578 * csqrtf:                                Other Builtins.     (line    6)
   52579 * csqrtl:                                Other Builtins.     (line    6)
   52580 * ctan:                                  Other Builtins.     (line    6)
   52581 * ctanf:                                 Other Builtins.     (line    6)
   52582 * ctanh:                                 Other Builtins.     (line    6)
   52583 * ctanhf:                                Other Builtins.     (line    6)
   52584 * ctanhl:                                Other Builtins.     (line    6)
   52585 * ctanl:                                 Other Builtins.     (line    6)
   52586 * Darwin options:                        Darwin Options.     (line    6)
   52587 * dcgettext:                             Other Builtins.     (line    6)
   52588 * DD integer suffix:                     Decimal Float.      (line    6)
   52589 * dd integer suffix:                     Decimal Float.      (line    6)
   52590 * deallocating variable length arrays:   Variable Length.    (line   22)
   52591 * debugging information options:         Debugging Options.  (line    6)
   52592 * decimal floating types:                Decimal Float.      (line    6)
   52593 * declaration scope:                     Incompatibilities.  (line   80)
   52594 * declarations inside expressions:       Statement Exprs.    (line    6)
   52595 * declarations, mixed with code:         Mixed Declarations. (line    6)
   52596 * declaring attributes of functions:     Function Attributes.
   52597                                                              (line    6)
   52598 * declaring static data in C++:          Static Definitions. (line    6)
   52599 * defining static data in C++:           Static Definitions. (line    6)
   52600 * dependencies for make as output:       Environment Variables.
   52601                                                              (line  157)
   52602 * dependencies, make:                    Preprocessor Options.
   52603                                                              (line  185)
   52604 * DEPENDENCIES_OUTPUT:                   Environment Variables.
   52605                                                              (line  156)
   52606 * dependent name lookup:                 Name lookup.        (line    6)
   52607 * deprecated attribute:                  Variable Attributes.
   52608                                                              (line  114)
   52609 * deprecated attribute.:                 Function Attributes.
   52610                                                              (line  233)
   52611 * designated initializers:               Designated Inits.   (line    6)
   52612 * designator lists:                      Designated Inits.   (line   94)
   52613 * designators:                           Designated Inits.   (line   61)
   52614 * destructor function attribute:         Function Attributes.
   52615                                                              (line  211)
   52616 * DF integer suffix:                     Decimal Float.      (line    6)
   52617 * df integer suffix:                     Decimal Float.      (line    6)
   52618 * dgettext:                              Other Builtins.     (line    6)
   52619 * diagnostic messages:                   Language Independent Options.
   52620                                                              (line    6)
   52621 * dialect options:                       C Dialect Options.  (line    6)
   52622 * digits in constraint:                  Simple Constraints. (line  127)
   52623 * directory options:                     Directory Options.  (line    6)
   52624 * disinterrupt attribute:                Function Attributes.
   52625                                                              (line  253)
   52626 * DL integer suffix:                     Decimal Float.      (line    6)
   52627 * dl integer suffix:                     Decimal Float.      (line    6)
   52628 * dollar signs in identifier names:      Dollar Signs.       (line    6)
   52629 * double-word arithmetic:                Long Long.          (line    6)
   52630 * downward funargs:                      Nested Functions.   (line    6)
   52631 * drem:                                  Other Builtins.     (line    6)
   52632 * dremf:                                 Other Builtins.     (line    6)
   52633 * dreml:                                 Other Builtins.     (line    6)
   52634 * E in constraint:                       Simple Constraints. (line   89)
   52635 * earlyclobber operand:                  Modifiers.          (line   25)
   52636 * eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
   52637                                                              (line  346)
   52638 * EIND:                                  AVR Options.        (line  220)
   52639 * empty structures:                      Empty Structures.   (line    6)
   52640 * environment variables:                 Environment Variables.
   52641                                                              (line    6)
   52642 * erf:                                   Other Builtins.     (line    6)
   52643 * erfc:                                  Other Builtins.     (line    6)
   52644 * erfcf:                                 Other Builtins.     (line    6)
   52645 * erfcl:                                 Other Builtins.     (line    6)
   52646 * erff:                                  Other Builtins.     (line    6)
   52647 * erfl:                                  Other Builtins.     (line    6)
   52648 * error function attribute:              Function Attributes.
   52649                                                              (line  153)
   52650 * error messages:                        Warnings and Errors.
   52651                                                              (line    6)
   52652 * escaped newlines:                      Escaped Newlines.   (line    6)
   52653 * exception handler functions on the Blackfin processor: Function Attributes.
   52654                                                              (line  356)
   52655 * exclamation point:                     Multi-Alternative.  (line   33)
   52656 * exit:                                  Other Builtins.     (line    6)
   52657 * exp:                                   Other Builtins.     (line    6)
   52658 * exp10:                                 Other Builtins.     (line    6)
   52659 * exp10f:                                Other Builtins.     (line    6)
   52660 * exp10l:                                Other Builtins.     (line    6)
   52661 * exp2:                                  Other Builtins.     (line    6)
   52662 * exp2f:                                 Other Builtins.     (line    6)
   52663 * exp2l:                                 Other Builtins.     (line    6)
   52664 * expf:                                  Other Builtins.     (line    6)
   52665 * expl:                                  Other Builtins.     (line    6)
   52666 * explicit register variables:           Explicit Reg Vars.  (line    6)
   52667 * expm1:                                 Other Builtins.     (line    6)
   52668 * expm1f:                                Other Builtins.     (line    6)
   52669 * expm1l:                                Other Builtins.     (line    6)
   52670 * expressions containing statements:     Statement Exprs.    (line    6)
   52671 * expressions, constructor:              Compound Literals.  (line    6)
   52672 * extended asm:                          Extended Asm.       (line    6)
   52673 * extensible constraints:                Simple Constraints. (line  163)
   52674 * extensions, ?::                        Conditionals.       (line    6)
   52675 * extensions, C language:                C Extensions.       (line    6)
   52676 * extensions, C++ language:              C++ Extensions.     (line    6)
   52677 * external declaration scope:            Incompatibilities.  (line   80)
   52678 * externally_visible attribute.:         Function Attributes.
   52679                                                              (line  362)
   52680 * F in constraint:                       Simple Constraints. (line   94)
   52681 * fabs:                                  Other Builtins.     (line    6)
   52682 * fabsf:                                 Other Builtins.     (line    6)
   52683 * fabsl:                                 Other Builtins.     (line    6)
   52684 * fatal signal:                          Bug Criteria.       (line    9)
   52685 * fdim:                                  Other Builtins.     (line    6)
   52686 * fdimf:                                 Other Builtins.     (line    6)
   52687 * fdiml:                                 Other Builtins.     (line    6)
   52688 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   52689                                                              (line    6)
   52690 * ffs:                                   Other Builtins.     (line    6)
   52691 * file name suffix:                      Overall Options.    (line   14)
   52692 * file names:                            Link Options.       (line   10)
   52693 * fixed-point types:                     Fixed-Point.        (line    6)
   52694 * flatten function attribute:            Function Attributes.
   52695                                                              (line  146)
   52696 * flexible array members:                Zero Length.        (line    6)
   52697 * float as function value type:          Incompatibilities.  (line  141)
   52698 * floating point precision:              Disappointments.    (line   68)
   52699 * floating-point precision:              Optimize Options.   (line 1873)
   52700 * floor:                                 Other Builtins.     (line    6)
   52701 * floorf:                                Other Builtins.     (line    6)
   52702 * floorl:                                Other Builtins.     (line    6)
   52703 * fma:                                   Other Builtins.     (line    6)
   52704 * fmaf:                                  Other Builtins.     (line    6)
   52705 * fmal:                                  Other Builtins.     (line    6)
   52706 * fmax:                                  Other Builtins.     (line    6)
   52707 * fmaxf:                                 Other Builtins.     (line    6)
   52708 * fmaxl:                                 Other Builtins.     (line    6)
   52709 * fmin:                                  Other Builtins.     (line    6)
   52710 * fminf:                                 Other Builtins.     (line    6)
   52711 * fminl:                                 Other Builtins.     (line    6)
   52712 * fmod:                                  Other Builtins.     (line    6)
   52713 * fmodf:                                 Other Builtins.     (line    6)
   52714 * fmodl:                                 Other Builtins.     (line    6)
   52715 * force_align_arg_pointer attribute:     Function Attributes.
   52716                                                              (line 1226)
   52717 * format function attribute:             Function Attributes.
   52718                                                              (line  419)
   52719 * format_arg function attribute:         Function Attributes.
   52720                                                              (line  485)
   52721 * Fortran:                               G++ and GCC.        (line    6)
   52722 * forwarder_section attribute:           Function Attributes.
   52723                                                              (line  685)
   52724 * forwarding calls:                      Constructing Calls. (line    6)
   52725 * fprintf:                               Other Builtins.     (line    6)
   52726 * fprintf_unlocked:                      Other Builtins.     (line    6)
   52727 * fputs:                                 Other Builtins.     (line    6)
   52728 * fputs_unlocked:                        Other Builtins.     (line    6)
   52729 * FR30 Options:                          FR30 Options.       (line    6)
   52730 * freestanding environment:              Standards.          (line   13)
   52731 * freestanding implementation:           Standards.          (line   13)
   52732 * frexp:                                 Other Builtins.     (line    6)
   52733 * frexpf:                                Other Builtins.     (line    6)
   52734 * frexpl:                                Other Builtins.     (line    6)
   52735 * FRV Options:                           FRV Options.        (line    6)
   52736 * fscanf:                                Other Builtins.     (line    6)
   52737 * fscanf, and constant strings:          Incompatibilities.  (line   17)
   52738 * function addressability on the M32R/D: Function Attributes.
   52739                                                              (line  853)
   52740 * function attributes:                   Function Attributes.
   52741                                                              (line    6)
   52742 * function pointers, arithmetic:         Pointer Arith.      (line    6)
   52743 * function prototype declarations:       Function Prototypes.
   52744                                                              (line    6)
   52745 * function versions:                     Function Multiversioning.
   52746                                                              (line    6)
   52747 * function without a prologue/epilogue code: Function Attributes.
   52748                                                              (line  920)
   52749 * function, size of pointer to:          Pointer Arith.      (line    6)
   52750 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
   52751                                                              (line  808)
   52752 * functions in arbitrary sections:       Function Attributes.
   52753                                                              (line    6)
   52754 * functions that are dynamically resolved: Function Attributes.
   52755                                                              (line    6)
   52756 * functions that are passed arguments in registers on the 386: Function Attributes.
   52757                                                              (line    6)
   52758 * functions that behave like malloc:     Function Attributes.
   52759                                                              (line    6)
   52760 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
   52761                                                              (line  933)
   52762 * functions that do not pop the argument stack on the 386: Function Attributes.
   52763                                                              (line    6)
   52764 * functions that do pop the argument stack on the 386: Function Attributes.
   52765                                                              (line  177)
   52766 * functions that handle memory bank switching: Function Attributes.
   52767                                                              (line  375)
   52768 * functions that have different compilation options on the 386: Function Attributes.
   52769                                                              (line    6)
   52770 * functions that have different optimization options: Function Attributes.
   52771                                                              (line    6)
   52772 * functions that have no side effects:   Function Attributes.
   52773                                                              (line    6)
   52774 * functions that never return:           Function Attributes.
   52775                                                              (line    6)
   52776 * functions that pop the argument stack on the 386: Function Attributes.
   52777                                                              (line    6)
   52778 * functions that return more than once:  Function Attributes.
   52779                                                              (line    6)
   52780 * functions with non-null pointer arguments: Function Attributes.
   52781                                                              (line    6)
   52782 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
   52783                                                              (line    6)
   52784 * g in constraint:                       Simple Constraints. (line  120)
   52785 * G in constraint:                       Simple Constraints. (line   98)
   52786 * g++:                                   Invoking G++.       (line   14)
   52787 * G++:                                   G++ and GCC.        (line   30)
   52788 * gamma:                                 Other Builtins.     (line    6)
   52789 * gamma_r:                               Other Builtins.     (line    6)
   52790 * gammaf:                                Other Builtins.     (line    6)
   52791 * gammaf_r:                              Other Builtins.     (line    6)
   52792 * gammal:                                Other Builtins.     (line    6)
   52793 * gammal_r:                              Other Builtins.     (line    6)
   52794 * GCC:                                   G++ and GCC.        (line    6)
   52795 * GCC command options:                   Invoking GCC.       (line    6)
   52796 * GCC_COMPARE_DEBUG:                     Environment Variables.
   52797                                                              (line   52)
   52798 * GCC_EXEC_PREFIX:                       Environment Variables.
   52799                                                              (line   57)
   52800 * gcc_struct:                            Type Attributes.    (line  324)
   52801 * gcc_struct attribute:                  Variable Attributes.
   52802                                                              (line  445)
   52803 * gcov:                                  Debugging Options.  (line  411)
   52804 * gettext:                               Other Builtins.     (line    6)
   52805 * global offset table:                   Code Gen Options.   (line  267)
   52806 * global register after longjmp:         Global Reg Vars.    (line   65)
   52807 * global register variables:             Global Reg Vars.    (line    6)
   52808 * GNAT:                                  G++ and GCC.        (line   30)
   52809 * GNU C Compiler:                        G++ and GCC.        (line    6)
   52810 * GNU Compiler Collection:               G++ and GCC.        (line    6)
   52811 * gnu_inline function attribute:         Function Attributes.
   52812                                                              (line   96)
   52813 * Go:                                    G++ and GCC.        (line    6)
   52814 * goto with computed label:              Labels as Values.   (line    6)
   52815 * gprof:                                 Debugging Options.  (line  333)
   52816 * grouping options:                      Invoking GCC.       (line   26)
   52817 * H in constraint:                       Simple Constraints. (line   98)
   52818 * half-precision floating point:         Half-Precision.     (line    6)
   52819 * hardware models and configurations, specifying: Submodel Options.
   52820                                                              (line    6)
   52821 * hex floats:                            Hex Floats.         (line    6)
   52822 * HK fixed-suffix:                       Fixed-Point.        (line    6)
   52823 * hk fixed-suffix:                       Fixed-Point.        (line    6)
   52824 * hosted environment <1>:                C Dialect Options.  (line  239)
   52825 * hosted environment:                    Standards.          (line   13)
   52826 * hosted implementation:                 Standards.          (line   13)
   52827 * hot function attribute:                Function Attributes.
   52828                                                              (line 1144)
   52829 * hot label attribute:                   Function Attributes.
   52830                                                              (line 1156)
   52831 * hotpatch attribute:                    Function Attributes.
   52832                                                              (line  912)
   52833 * HPPA Options:                          HPPA Options.       (line    6)
   52834 * HR fixed-suffix:                       Fixed-Point.        (line    6)
   52835 * hr fixed-suffix:                       Fixed-Point.        (line    6)
   52836 * hypot:                                 Other Builtins.     (line    6)
   52837 * hypotf:                                Other Builtins.     (line    6)
   52838 * hypotl:                                Other Builtins.     (line    6)
   52839 * I in constraint:                       Simple Constraints. (line   81)
   52840 * i in constraint:                       Simple Constraints. (line   70)
   52841 * i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
   52842                                                              (line    6)
   52843 * i386 Options:                          i386 and x86-64 Options.
   52844                                                              (line    6)
   52845 * IA-64 Options:                         IA-64 Options.      (line    6)
   52846 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
   52847                                                              (line    6)
   52848 * identifier names, dollar signs in:     Dollar Signs.       (line    6)
   52849 * identifiers, names in assembler code:  Asm Labels.         (line    6)
   52850 * ifunc attribute:                       Function Attributes.
   52851                                                              (line  593)
   52852 * ilogb:                                 Other Builtins.     (line    6)
   52853 * ilogbf:                                Other Builtins.     (line    6)
   52854 * ilogbl:                                Other Builtins.     (line    6)
   52855 * imaxabs:                               Other Builtins.     (line    6)
   52856 * implementation-defined behavior, C language: C Implementation.
   52857                                                              (line    6)
   52858 * implementation-defined behavior, C++ language: C++ Implementation.
   52859                                                              (line    6)
   52860 * implied #pragma implementation:        C++ Interface.      (line   46)
   52861 * incompatibilities of GCC:              Incompatibilities.  (line    6)
   52862 * increment operators:                   Bug Criteria.       (line   17)
   52863 * index:                                 Other Builtins.     (line    6)
   52864 * indirect calls on ARM:                 Function Attributes.
   52865                                                              (line  798)
   52866 * indirect calls on MIPS:                Function Attributes.
   52867                                                              (line  820)
   52868 * init_priority attribute:               C++ Attributes.     (line   30)
   52869 * initializations in expressions:        Compound Literals.  (line    6)
   52870 * initializers with labeled elements:    Designated Inits.   (line    6)
   52871 * initializers, non-constant:            Initializers.       (line    6)
   52872 * inline automatic for C++ member fns:   Inline.             (line   71)
   52873 * inline functions:                      Inline.             (line    6)
   52874 * inline functions, omission of:         Inline.             (line   51)
   52875 * inlining and C++ pragmas:              C++ Interface.      (line   66)
   52876 * installation trouble:                  Trouble.            (line    6)
   52877 * integrating function code:             Inline.             (line    6)
   52878 * Intel 386 Options:                     i386 and x86-64 Options.
   52879                                                              (line    6)
   52880 * interface and implementation headers, C++: C++ Interface.  (line    6)
   52881 * intermediate C version, nonexistent:   G++ and GCC.        (line   35)
   52882 * interrupt handler functions:           Function Attributes.
   52883                                                              (line  141)
   52884 * interrupt handler functions on the AVR processors: Function Attributes.
   52885                                                              (line 1321)
   52886 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
   52887                                                              (line  735)
   52888 * interrupt service routines on ARM:     Function Attributes.
   52889                                                              (line  750)
   52890 * interrupt thread functions on fido:    Function Attributes.
   52891                                                              (line  742)
   52892 * introduction:                          Top.                (line    6)
   52893 * invalid assembly code:                 Bug Criteria.       (line   12)
   52894 * invalid input:                         Bug Criteria.       (line   42)
   52895 * invoking g++:                          Invoking G++.       (line   22)
   52896 * isalnum:                               Other Builtins.     (line    6)
   52897 * isalpha:                               Other Builtins.     (line    6)
   52898 * isascii:                               Other Builtins.     (line    6)
   52899 * isblank:                               Other Builtins.     (line    6)
   52900 * iscntrl:                               Other Builtins.     (line    6)
   52901 * isdigit:                               Other Builtins.     (line    6)
   52902 * isgraph:                               Other Builtins.     (line    6)
   52903 * islower:                               Other Builtins.     (line    6)
   52904 * ISO 9899:                              Standards.          (line   13)
   52905 * ISO C:                                 Standards.          (line   13)
   52906 * ISO C standard:                        Standards.          (line   13)
   52907 * ISO C11:                               Standards.          (line   13)
   52908 * ISO C1X:                               Standards.          (line   13)
   52909 * ISO C90:                               Standards.          (line   13)
   52910 * ISO C94:                               Standards.          (line   13)
   52911 * ISO C95:                               Standards.          (line   13)
   52912 * ISO C99:                               Standards.          (line   13)
   52913 * ISO C9X:                               Standards.          (line   13)
   52914 * ISO support:                           C Dialect Options.  (line   10)
   52915 * ISO/IEC 9899:                          Standards.          (line   13)
   52916 * isprint:                               Other Builtins.     (line    6)
   52917 * ispunct:                               Other Builtins.     (line    6)
   52918 * isspace:                               Other Builtins.     (line    6)
   52919 * isupper:                               Other Builtins.     (line    6)
   52920 * iswalnum:                              Other Builtins.     (line    6)
   52921 * iswalpha:                              Other Builtins.     (line    6)
   52922 * iswblank:                              Other Builtins.     (line    6)
   52923 * iswcntrl:                              Other Builtins.     (line    6)
   52924 * iswdigit:                              Other Builtins.     (line    6)
   52925 * iswgraph:                              Other Builtins.     (line    6)
   52926 * iswlower:                              Other Builtins.     (line    6)
   52927 * iswprint:                              Other Builtins.     (line    6)
   52928 * iswpunct:                              Other Builtins.     (line    6)
   52929 * iswspace:                              Other Builtins.     (line    6)
   52930 * iswupper:                              Other Builtins.     (line    6)
   52931 * iswxdigit:                             Other Builtins.     (line    6)
   52932 * isxdigit:                              Other Builtins.     (line    6)
   52933 * j0:                                    Other Builtins.     (line    6)
   52934 * j0f:                                   Other Builtins.     (line    6)
   52935 * j0l:                                   Other Builtins.     (line    6)
   52936 * j1:                                    Other Builtins.     (line    6)
   52937 * j1f:                                   Other Builtins.     (line    6)
   52938 * j1l:                                   Other Builtins.     (line    6)
   52939 * Java:                                  G++ and GCC.        (line    6)
   52940 * java_interface attribute:              C++ Attributes.     (line   50)
   52941 * jn:                                    Other Builtins.     (line    6)
   52942 * jnf:                                   Other Builtins.     (line    6)
   52943 * jnl:                                   Other Builtins.     (line    6)
   52944 * K fixed-suffix:                        Fixed-Point.        (line    6)
   52945 * k fixed-suffix:                        Fixed-Point.        (line    6)
   52946 * keep_interrupts_masked attribute:      Function Attributes.
   52947                                                              (line  707)
   52948 * keywords, alternate:                   Alternate Keywords. (line    6)
   52949 * known causes of trouble:               Trouble.            (line    6)
   52950 * l1_data variable attribute:            Variable Attributes.
   52951                                                              (line  356)
   52952 * l1_data_A variable attribute:          Variable Attributes.
   52953                                                              (line  356)
   52954 * l1_data_B variable attribute:          Variable Attributes.
   52955                                                              (line  356)
   52956 * l1_text function attribute:            Function Attributes.
   52957                                                              (line  759)
   52958 * l2 function attribute:                 Function Attributes.
   52959                                                              (line  765)
   52960 * l2 variable attribute:                 Variable Attributes.
   52961                                                              (line  364)
   52962 * labeled elements in initializers:      Designated Inits.   (line    6)
   52963 * labels as values:                      Labels as Values.   (line    6)
   52964 * labs:                                  Other Builtins.     (line    6)
   52965 * LANG:                                  Environment Variables.
   52966                                                              (line   21)
   52967 * language dialect options:              C Dialect Options.  (line    6)
   52968 * LC_ALL:                                Environment Variables.
   52969                                                              (line   21)
   52970 * LC_CTYPE:                              Environment Variables.
   52971                                                              (line   21)
   52972 * LC_MESSAGES:                           Environment Variables.
   52973                                                              (line   21)
   52974 * ldexp:                                 Other Builtins.     (line    6)
   52975 * ldexpf:                                Other Builtins.     (line    6)
   52976 * ldexpl:                                Other Builtins.     (line    6)
   52977 * leaf function attribute:               Function Attributes.
   52978                                                              (line  771)
   52979 * length-zero arrays:                    Zero Length.        (line    6)
   52980 * lgamma:                                Other Builtins.     (line    6)
   52981 * lgamma_r:                              Other Builtins.     (line    6)
   52982 * lgammaf:                               Other Builtins.     (line    6)
   52983 * lgammaf_r:                             Other Builtins.     (line    6)
   52984 * lgammal:                               Other Builtins.     (line    6)
   52985 * lgammal_r:                             Other Builtins.     (line    6)
   52986 * Libraries:                             Link Options.       (line   24)
   52987 * LIBRARY_PATH:                          Environment Variables.
   52988                                                              (line   97)
   52989 * link options:                          Link Options.       (line    6)
   52990 * linker script:                         Link Options.       (line  199)
   52991 * LK fixed-suffix:                       Fixed-Point.        (line    6)
   52992 * lk fixed-suffix:                       Fixed-Point.        (line    6)
   52993 * LL integer suffix:                     Long Long.          (line    6)
   52994 * llabs:                                 Other Builtins.     (line    6)
   52995 * LLK fixed-suffix:                      Fixed-Point.        (line    6)
   52996 * llk fixed-suffix:                      Fixed-Point.        (line    6)
   52997 * LLR fixed-suffix:                      Fixed-Point.        (line    6)
   52998 * llr fixed-suffix:                      Fixed-Point.        (line    6)
   52999 * llrint:                                Other Builtins.     (line    6)
   53000 * llrintf:                               Other Builtins.     (line    6)
   53001 * llrintl:                               Other Builtins.     (line    6)
   53002 * llround:                               Other Builtins.     (line    6)
   53003 * llroundf:                              Other Builtins.     (line    6)
   53004 * llroundl:                              Other Builtins.     (line    6)
   53005 * LM32 options:                          LM32 Options.       (line    6)
   53006 * load address instruction:              Simple Constraints. (line  154)
   53007 * local labels:                          Local Labels.       (line    6)
   53008 * local variables in macros:             Typeof.             (line   46)
   53009 * local variables, specifying registers: Local Reg Vars.     (line    6)
   53010 * locale:                                Environment Variables.
   53011                                                              (line   21)
   53012 * locale definition:                     Environment Variables.
   53013                                                              (line  106)
   53014 * log:                                   Other Builtins.     (line    6)
   53015 * log10:                                 Other Builtins.     (line    6)
   53016 * log10f:                                Other Builtins.     (line    6)
   53017 * log10l:                                Other Builtins.     (line    6)
   53018 * log1p:                                 Other Builtins.     (line    6)
   53019 * log1pf:                                Other Builtins.     (line    6)
   53020 * log1pl:                                Other Builtins.     (line    6)
   53021 * log2:                                  Other Builtins.     (line    6)
   53022 * log2f:                                 Other Builtins.     (line    6)
   53023 * log2l:                                 Other Builtins.     (line    6)
   53024 * logb:                                  Other Builtins.     (line    6)
   53025 * logbf:                                 Other Builtins.     (line    6)
   53026 * logbl:                                 Other Builtins.     (line    6)
   53027 * logf:                                  Other Builtins.     (line    6)
   53028 * logl:                                  Other Builtins.     (line    6)
   53029 * long long data types:                  Long Long.          (line    6)
   53030 * longjmp:                               Global Reg Vars.    (line   65)
   53031 * longjmp incompatibilities:             Incompatibilities.  (line   39)
   53032 * longjmp warnings:                      Warning Options.    (line  674)
   53033 * LR fixed-suffix:                       Fixed-Point.        (line    6)
   53034 * lr fixed-suffix:                       Fixed-Point.        (line    6)
   53035 * lrint:                                 Other Builtins.     (line    6)
   53036 * lrintf:                                Other Builtins.     (line    6)
   53037 * lrintl:                                Other Builtins.     (line    6)
   53038 * lround:                                Other Builtins.     (line    6)
   53039 * lroundf:                               Other Builtins.     (line    6)
   53040 * lroundl:                               Other Builtins.     (line    6)
   53041 * m in constraint:                       Simple Constraints. (line   17)
   53042 * M32C options:                          M32C Options.       (line    6)
   53043 * M32R/D options:                        M32R/D Options.     (line    6)
   53044 * M680x0 options:                        M680x0 Options.     (line    6)
   53045 * machine dependent options:             Submodel Options.   (line    6)
   53046 * machine specific constraints:          Machine Constraints.
   53047                                                              (line    6)
   53048 * macro with variable arguments:         Variadic Macros.    (line    6)
   53049 * macros containing asm:                 Extended Asm.       (line  238)
   53050 * macros, inline alternative:            Inline.             (line    6)
   53051 * macros, local labels:                  Local Labels.       (line    6)
   53052 * macros, local variables in:            Typeof.             (line   46)
   53053 * macros, statements in expressions:     Statement Exprs.    (line    6)
   53054 * macros, types of arguments:            Typeof.             (line    6)
   53055 * make:                                  Preprocessor Options.
   53056                                                              (line  185)
   53057 * malloc:                                Other Builtins.     (line    6)
   53058 * malloc attribute:                      Function Attributes.
   53059                                                              (line  830)
   53060 * matching constraint:                   Simple Constraints. (line  139)
   53061 * MCore options:                         MCore Options.      (line    6)
   53062 * member fns, automatically inline:      Inline.             (line   71)
   53063 * memchr:                                Other Builtins.     (line    6)
   53064 * memcmp:                                Other Builtins.     (line    6)
   53065 * memcpy:                                Other Builtins.     (line    6)
   53066 * memory references in constraints:      Simple Constraints. (line   17)
   53067 * mempcpy:                               Other Builtins.     (line    6)
   53068 * memset:                                Other Builtins.     (line    6)
   53069 * MeP options:                           MeP Options.        (line    6)
   53070 * Mercury:                               G++ and GCC.        (line   23)
   53071 * message formatting:                    Language Independent Options.
   53072                                                              (line    6)
   53073 * messages, warning:                     Warning Options.    (line    6)
   53074 * messages, warning and error:           Warnings and Errors.
   53075                                                              (line    6)
   53076 * MicroBlaze Options:                    MicroBlaze Options. (line    6)
   53077 * middle-operands, omitted:              Conditionals.       (line    6)
   53078 * MIPS options:                          MIPS Options.       (line    6)
   53079 * mips16 attribute:                      Function Attributes.
   53080                                                              (line  839)
   53081 * misunderstandings in C++:              C++ Misunderstandings.
   53082                                                              (line    6)
   53083 * mixed declarations and code:           Mixed Declarations. (line    6)
   53084 * mktemp, and constant strings:          Incompatibilities.  (line   13)
   53085 * MMIX Options:                          MMIX Options.       (line    6)
   53086 * MN10300 options:                       MN10300 Options.    (line    6)
   53087 * mode attribute:                        Variable Attributes.
   53088                                                              (line  134)
   53089 * modf:                                  Other Builtins.     (line    6)
   53090 * modff:                                 Other Builtins.     (line    6)
   53091 * modfl:                                 Other Builtins.     (line    6)
   53092 * modifiers in constraints:              Modifiers.          (line    6)
   53093 * Moxie Options:                         Moxie Options.      (line    6)
   53094 * ms_abi attribute:                      Function Attributes.
   53095                                                              (line  881)
   53096 * ms_hook_prologue attribute:            Function Attributes.
   53097                                                              (line  906)
   53098 * ms_struct:                             Type Attributes.    (line  324)
   53099 * ms_struct attribute:                   Variable Attributes.
   53100                                                              (line  445)
   53101 * mudflap:                               Optimize Options.   (line  407)
   53102 * multiple alternative constraints:      Multi-Alternative.  (line    6)
   53103 * multiprecision arithmetic:             Long Long.          (line    6)
   53104 * n in constraint:                       Simple Constraints. (line   75)
   53105 * Named Address Spaces:                  Named Address Spaces.
   53106                                                              (line    6)
   53107 * names used in assembler code:          Asm Labels.         (line    6)
   53108 * naming convention, implementation headers: C++ Interface.  (line   46)
   53109 * nearbyint:                             Other Builtins.     (line    6)
   53110 * nearbyintf:                            Other Builtins.     (line    6)
   53111 * nearbyintl:                            Other Builtins.     (line    6)
   53112 * nested functions:                      Nested Functions.   (line    6)
   53113 * newlines (escaped):                    Escaped Newlines.   (line    6)
   53114 * nextafter:                             Other Builtins.     (line    6)
   53115 * nextafterf:                            Other Builtins.     (line    6)
   53116 * nextafterl:                            Other Builtins.     (line    6)
   53117 * nexttoward:                            Other Builtins.     (line    6)
   53118 * nexttowardf:                           Other Builtins.     (line    6)
   53119 * nexttowardl:                           Other Builtins.     (line    6)
   53120 * NFC:                                   Warning Options.    (line 1284)
   53121 * NFKC:                                  Warning Options.    (line 1284)
   53122 * NMI handler functions on the Blackfin processor: Function Attributes.
   53123                                                              (line  948)
   53124 * no_instrument_function function attribute: Function Attributes.
   53125                                                              (line  954)
   53126 * no_sanitize_address function attribute: Function Attributes.
   53127                                                              (line 1194)
   53128 * no_split_stack function attribute:     Function Attributes.
   53129                                                              (line  959)
   53130 * noclone function attribute:            Function Attributes.
   53131                                                              (line  976)
   53132 * nocommon attribute:                    Variable Attributes.
   53133                                                              (line  105)
   53134 * noinline function attribute:           Function Attributes.
   53135                                                              (line  965)
   53136 * nomips16 attribute:                    Function Attributes.
   53137                                                              (line  839)
   53138 * non-constant initializers:             Initializers.       (line    6)
   53139 * non-static inline function:            Inline.             (line   85)
   53140 * nonnull function attribute:            Function Attributes.
   53141                                                              (line  982)
   53142 * noreturn function attribute:           Function Attributes.
   53143                                                              (line 1006)
   53144 * nosave_low_regs attribute:             Function Attributes.
   53145                                                              (line 1056)
   53146 * nothrow function attribute:            Function Attributes.
   53147                                                              (line 1048)
   53148 * o in constraint:                       Simple Constraints. (line   23)
   53149 * OBJC_INCLUDE_PATH:                     Environment Variables.
   53150                                                              (line  132)
   53151 * Objective-C <1>:                       Standards.          (line  163)
   53152 * Objective-C:                           G++ and GCC.        (line    6)
   53153 * Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
   53154                                                              (line    6)
   53155 * Objective-C++ <1>:                     Standards.          (line  163)
   53156 * Objective-C++:                         G++ and GCC.        (line    6)
   53157 * offsettable address:                   Simple Constraints. (line   23)
   53158 * old-style function definitions:        Function Prototypes.
   53159                                                              (line    6)
   53160 * omitted middle-operands:               Conditionals.       (line    6)
   53161 * open coding:                           Inline.             (line    6)
   53162 * OpenMP parallel:                       C Dialect Options.  (line  256)
   53163 * operand constraints, asm:              Constraints.        (line    6)
   53164 * optimize function attribute:           Function Attributes.
   53165                                                              (line 1062)
   53166 * optimize options:                      Optimize Options.   (line    6)
   53167 * options to control diagnostics formatting: Language Independent Options.
   53168                                                              (line    6)
   53169 * options to control warnings:           Warning Options.    (line    6)
   53170 * options, C++:                          C++ Dialect Options.
   53171                                                              (line    6)
   53172 * options, code generation:              Code Gen Options.   (line    6)
   53173 * options, debugging:                    Debugging Options.  (line    6)
   53174 * options, dialect:                      C Dialect Options.  (line    6)
   53175 * options, directory search:             Directory Options.  (line    6)
   53176 * options, GCC command:                  Invoking GCC.       (line    6)
   53177 * options, grouping:                     Invoking GCC.       (line   26)
   53178 * options, linking:                      Link Options.       (line    6)
   53179 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   53180                                                              (line    6)
   53181 * options, optimization:                 Optimize Options.   (line    6)
   53182 * options, order:                        Invoking GCC.       (line   30)
   53183 * options, preprocessor:                 Preprocessor Options.
   53184                                                              (line    6)
   53185 * order of evaluation, side effects:     Non-bugs.           (line  196)
   53186 * order of options:                      Invoking GCC.       (line   30)
   53187 * OS_main AVR function attribute:        Function Attributes.
   53188                                                              (line 1079)
   53189 * OS_task AVR function attribute:        Function Attributes.
   53190                                                              (line 1079)
   53191 * other register constraints:            Simple Constraints. (line  163)
   53192 * output file option:                    Overall Options.    (line  191)
   53193 * overloaded virtual function, warning:  C++ Dialect Options.
   53194                                                              (line  618)
   53195 * p in constraint:                       Simple Constraints. (line  154)
   53196 * packed attribute:                      Variable Attributes.
   53197                                                              (line  145)
   53198 * parameter forward declaration:         Variable Length.    (line   59)
   53199 * Pascal:                                G++ and GCC.        (line   23)
   53200 * pcs function attribute:                Function Attributes.
   53201                                                              (line 1104)
   53202 * PDP-11 Options:                        PDP-11 Options.     (line    6)
   53203 * PIC:                                   Code Gen Options.   (line  267)
   53204 * picoChip options:                      picoChip Options.   (line    6)
   53205 * pmf:                                   Bound member functions.
   53206                                                              (line    6)
   53207 * pointer arguments:                     Function Attributes.
   53208                                                              (line  188)
   53209 * pointer to member function:            Bound member functions.
   53210                                                              (line    6)
   53211 * portions of temporary objects, pointers to: Temporaries.   (line    6)
   53212 * pow:                                   Other Builtins.     (line    6)
   53213 * pow10:                                 Other Builtins.     (line    6)
   53214 * pow10f:                                Other Builtins.     (line    6)
   53215 * pow10l:                                Other Builtins.     (line    6)
   53216 * PowerPC options:                       PowerPC Options.    (line    6)
   53217 * powf:                                  Other Builtins.     (line    6)
   53218 * powl:                                  Other Builtins.     (line    6)
   53219 * pragma GCC optimize:                   Function Specific Option Pragmas.
   53220                                                              (line   21)
   53221 * pragma GCC pop_options:                Function Specific Option Pragmas.
   53222                                                              (line   34)
   53223 * pragma GCC push_options:               Function Specific Option Pragmas.
   53224                                                              (line   34)
   53225 * pragma GCC reset_options:              Function Specific Option Pragmas.
   53226                                                              (line   44)
   53227 * pragma GCC target:                     Function Specific Option Pragmas.
   53228                                                              (line    7)
   53229 * pragma, address:                       M32C Pragmas.       (line   15)
   53230 * pragma, align:                         Solaris Pragmas.    (line   11)
   53231 * pragma, call:                          MeP Pragmas.        (line   48)
   53232 * pragma, coprocessor available:         MeP Pragmas.        (line   13)
   53233 * pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
   53234 * pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
   53235 * pragma, custom io_volatile:            MeP Pragmas.        (line    7)
   53236 * pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
   53237 * pragma, disinterrupt:                  MeP Pragmas.        (line   38)
   53238 * pragma, fini:                          Solaris Pragmas.    (line   19)
   53239 * pragma, init:                          Solaris Pragmas.    (line   24)
   53240 * pragma, long_calls:                    ARM Pragmas.        (line   11)
   53241 * pragma, long_calls_off:                ARM Pragmas.        (line   17)
   53242 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
   53243                                                              (line   14)
   53244 * pragma, mark:                          Darwin Pragmas.     (line   11)
   53245 * pragma, memregs:                       M32C Pragmas.       (line    7)
   53246 * pragma, no_long_calls:                 ARM Pragmas.        (line   14)
   53247 * pragma, options align:                 Darwin Pragmas.     (line   14)
   53248 * pragma, pop_macro:                     Push/Pop Macro Pragmas.
   53249                                                              (line   15)
   53250 * pragma, push_macro:                    Push/Pop Macro Pragmas.
   53251                                                              (line   11)
   53252 * pragma, reason for not using:          Function Attributes.
   53253                                                              (line 1878)
   53254 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
   53255                                                              (line   12)
   53256 * pragma, segment:                       Darwin Pragmas.     (line   21)
   53257 * pragma, unused:                        Darwin Pragmas.     (line   24)
   53258 * pragma, visibility:                    Visibility Pragmas. (line    8)
   53259 * pragma, weak:                          Weak Pragmas.       (line   10)
   53260 * pragmas:                               Pragmas.            (line    6)
   53261 * pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
   53262 * pragmas, interface and implementation: C++ Interface.      (line    6)
   53263 * pragmas, warning of unknown:           Warning Options.    (line  691)
   53264 * precompiled headers:                   Precompiled Headers.
   53265                                                              (line    6)
   53266 * preprocessing numbers:                 Incompatibilities.  (line  173)
   53267 * preprocessing tokens:                  Incompatibilities.  (line  173)
   53268 * preprocessor options:                  Preprocessor Options.
   53269                                                              (line    6)
   53270 * printf:                                Other Builtins.     (line    6)
   53271 * printf_unlocked:                       Other Builtins.     (line    6)
   53272 * prof:                                  Debugging Options.  (line  327)
   53273 * progmem AVR variable attribute:        Variable Attributes.
   53274                                                              (line  318)
   53275 * promotion of formal parameters:        Function Prototypes.
   53276                                                              (line    6)
   53277 * pure function attribute:               Function Attributes.
   53278                                                              (line 1122)
   53279 * push address instruction:              Simple Constraints. (line  154)
   53280 * putchar:                               Other Builtins.     (line    6)
   53281 * puts:                                  Other Builtins.     (line    6)
   53282 * Q floating point suffix:               Floating Types.     (line    6)
   53283 * q floating point suffix:               Floating Types.     (line    6)
   53284 * qsort, and global register variables:  Global Reg Vars.    (line   41)
   53285 * question mark:                         Multi-Alternative.  (line   27)
   53286 * R fixed-suffix:                        Fixed-Point.        (line    6)
   53287 * r fixed-suffix:                        Fixed-Point.        (line    6)
   53288 * r in constraint:                       Simple Constraints. (line   66)
   53289 * RAMPD:                                 AVR Options.        (line  336)
   53290 * RAMPX:                                 AVR Options.        (line  336)
   53291 * RAMPY:                                 AVR Options.        (line  336)
   53292 * RAMPZ:                                 AVR Options.        (line  336)
   53293 * ranges in case statements:             Case Ranges.        (line    6)
   53294 * read-only strings:                     Incompatibilities.  (line    9)
   53295 * register variable after longjmp:       Global Reg Vars.    (line   65)
   53296 * registers:                             Extended Asm.       (line    6)
   53297 * registers for local variables:         Local Reg Vars.     (line    6)
   53298 * registers in constraints:              Simple Constraints. (line   66)
   53299 * registers, global allocation:          Explicit Reg Vars.  (line    6)
   53300 * registers, global variables in:        Global Reg Vars.    (line    6)
   53301 * regparm attribute:                     Function Attributes.
   53302                                                              (line 1202)
   53303 * relocation truncated to fit (ColdFire): M680x0 Options.    (line  329)
   53304 * relocation truncated to fit (MIPS):    MIPS Options.       (line  200)
   53305 * remainder:                             Other Builtins.     (line    6)
   53306 * remainderf:                            Other Builtins.     (line    6)
   53307 * remainderl:                            Other Builtins.     (line    6)
   53308 * remquo:                                Other Builtins.     (line    6)
   53309 * remquof:                               Other Builtins.     (line    6)
   53310 * remquol:                               Other Builtins.     (line    6)
   53311 * renesas attribute:                     Function Attributes.
   53312                                                              (line 1234)
   53313 * reordering, warning:                   C++ Dialect Options.
   53314                                                              (line  533)
   53315 * reporting bugs:                        Bugs.               (line    6)
   53316 * resbank attribute:                     Function Attributes.
   53317                                                              (line 1238)
   53318 * rest argument (in macro):              Variadic Macros.    (line    6)
   53319 * restricted pointers:                   Restricted Pointers.
   53320                                                              (line    6)
   53321 * restricted references:                 Restricted Pointers.
   53322                                                              (line    6)
   53323 * restricted this pointer:               Restricted Pointers.
   53324                                                              (line    6)
   53325 * returns_twice attribute:               Function Attributes.
   53326                                                              (line 1252)
   53327 * rindex:                                Other Builtins.     (line    6)
   53328 * rint:                                  Other Builtins.     (line    6)
   53329 * rintf:                                 Other Builtins.     (line    6)
   53330 * rintl:                                 Other Builtins.     (line    6)
   53331 * RL78 Options:                          RL78 Options.       (line    6)
   53332 * round:                                 Other Builtins.     (line    6)
   53333 * roundf:                                Other Builtins.     (line    6)
   53334 * roundl:                                Other Builtins.     (line    6)
   53335 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
   53336                                                              (line    6)
   53337 * RTTI:                                  Vague Linkage.      (line   42)
   53338 * run-time options:                      Code Gen Options.   (line    6)
   53339 * RX Options:                            RX Options.         (line    6)
   53340 * s in constraint:                       Simple Constraints. (line  102)
   53341 * S/390 and zSeries Options:             S/390 and zSeries Options.
   53342                                                              (line    6)
   53343 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
   53344                                                              (line 1261)
   53345 * save volatile registers on the MicroBlaze: Function Attributes.
   53346                                                              (line 1266)
   53347 * scalb:                                 Other Builtins.     (line    6)
   53348 * scalbf:                                Other Builtins.     (line    6)
   53349 * scalbl:                                Other Builtins.     (line    6)
   53350 * scalbln:                               Other Builtins.     (line    6)
   53351 * scalblnf:                              Other Builtins.     (line    6)
   53352 * scalbn:                                Other Builtins.     (line    6)
   53353 * scalbnf:                               Other Builtins.     (line    6)
   53354 * scanf, and constant strings:           Incompatibilities.  (line   17)
   53355 * scanfnl:                               Other Builtins.     (line    6)
   53356 * scope of a variable length array:      Variable Length.    (line   22)
   53357 * scope of declaration:                  Disappointments.    (line   21)
   53358 * scope of external declarations:        Incompatibilities.  (line   80)
   53359 * Score Options:                         Score Options.      (line    6)
   53360 * search path:                           Directory Options.  (line    6)
   53361 * section function attribute:            Function Attributes.
   53362                                                              (line 1274)
   53363 * section variable attribute:            Variable Attributes.
   53364                                                              (line  166)
   53365 * sentinel function attribute:           Function Attributes.
   53366                                                              (line 1290)
   53367 * setjmp:                                Global Reg Vars.    (line   65)
   53368 * setjmp incompatibilities:              Incompatibilities.  (line   39)
   53369 * shared strings:                        Incompatibilities.  (line    9)
   53370 * shared variable attribute:             Variable Attributes.
   53371                                                              (line  211)
   53372 * side effect in ?::                     Conditionals.       (line   20)
   53373 * side effects, macro argument:          Statement Exprs.    (line   35)
   53374 * side effects, order of evaluation:     Non-bugs.           (line  196)
   53375 * signbit:                               Other Builtins.     (line    6)
   53376 * signbitd128:                           Other Builtins.     (line    6)
   53377 * signbitd32:                            Other Builtins.     (line    6)
   53378 * signbitd64:                            Other Builtins.     (line    6)
   53379 * signbitf:                              Other Builtins.     (line    6)
   53380 * signbitl:                              Other Builtins.     (line    6)
   53381 * signed and unsigned values, comparison warning: Warning Options.
   53382                                                              (line 1156)
   53383 * significand:                           Other Builtins.     (line    6)
   53384 * significandf:                          Other Builtins.     (line    6)
   53385 * significandl:                          Other Builtins.     (line    6)
   53386 * simple constraints:                    Simple Constraints. (line    6)
   53387 * sin:                                   Other Builtins.     (line    6)
   53388 * sincos:                                Other Builtins.     (line    6)
   53389 * sincosf:                               Other Builtins.     (line    6)
   53390 * sincosl:                               Other Builtins.     (line    6)
   53391 * sinf:                                  Other Builtins.     (line    6)
   53392 * sinh:                                  Other Builtins.     (line    6)
   53393 * sinhf:                                 Other Builtins.     (line    6)
   53394 * sinhl:                                 Other Builtins.     (line    6)
   53395 * sinl:                                  Other Builtins.     (line    6)
   53396 * sizeof:                                Typeof.             (line    6)
   53397 * smaller data references:               M32R/D Options.     (line   57)
   53398 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
   53399                                                              (line  743)
   53400 * snprintf:                              Other Builtins.     (line    6)
   53401 * Solaris 2 options:                     Solaris 2 Options.  (line    6)
   53402 * sp_switch attribute:                   Function Attributes.
   53403                                                              (line 1339)
   53404 * SPARC options:                         SPARC Options.      (line    6)
   53405 * Spec Files:                            Spec Files.         (line    6)
   53406 * specified registers:                   Explicit Reg Vars.  (line    6)
   53407 * specifying compiler version and target machine: Target Options.
   53408                                                              (line    6)
   53409 * specifying hardware config:            Submodel Options.   (line    6)
   53410 * specifying machine version:            Target Options.     (line    6)
   53411 * specifying registers for local variables: Local Reg Vars.  (line    6)
   53412 * speed of compilation:                  Precompiled Headers.
   53413                                                              (line    6)
   53414 * sprintf:                               Other Builtins.     (line    6)
   53415 * SPU options:                           SPU Options.        (line    6)
   53416 * sqrt:                                  Other Builtins.     (line    6)
   53417 * sqrtf:                                 Other Builtins.     (line    6)
   53418 * sqrtl:                                 Other Builtins.     (line    6)
   53419 * sscanf:                                Other Builtins.     (line    6)
   53420 * sscanf, and constant strings:          Incompatibilities.  (line   17)
   53421 * sseregparm attribute:                  Function Attributes.
   53422                                                              (line 1219)
   53423 * statements inside expressions:         Statement Exprs.    (line    6)
   53424 * static data in C++, declaring and defining: Static Definitions.
   53425                                                              (line    6)
   53426 * stpcpy:                                Other Builtins.     (line    6)
   53427 * stpncpy:                               Other Builtins.     (line    6)
   53428 * strcasecmp:                            Other Builtins.     (line    6)
   53429 * strcat:                                Other Builtins.     (line    6)
   53430 * strchr:                                Other Builtins.     (line    6)
   53431 * strcmp:                                Other Builtins.     (line    6)
   53432 * strcpy:                                Other Builtins.     (line    6)
   53433 * strcspn:                               Other Builtins.     (line    6)
   53434 * strdup:                                Other Builtins.     (line    6)
   53435 * strfmon:                               Other Builtins.     (line    6)
   53436 * strftime:                              Other Builtins.     (line    6)
   53437 * string constants:                      Incompatibilities.  (line    9)
   53438 * strlen:                                Other Builtins.     (line    6)
   53439 * strncasecmp:                           Other Builtins.     (line    6)
   53440 * strncat:                               Other Builtins.     (line    6)
   53441 * strncmp:                               Other Builtins.     (line    6)
   53442 * strncpy:                               Other Builtins.     (line    6)
   53443 * strndup:                               Other Builtins.     (line    6)
   53444 * strpbrk:                               Other Builtins.     (line    6)
   53445 * strrchr:                               Other Builtins.     (line    6)
   53446 * strspn:                                Other Builtins.     (line    6)
   53447 * strstr:                                Other Builtins.     (line    6)
   53448 * struct:                                Unnamed Fields.     (line    6)
   53449 * struct __htm_tdb:                      S/390 System z Built-in Functions.
   53450                                                              (line   54)
   53451 * structures:                            Incompatibilities.  (line  146)
   53452 * structures, constructor expression:    Compound Literals.  (line    6)
   53453 * submodel options:                      Submodel Options.   (line    6)
   53454 * subscripting:                          Subscripting.       (line    6)
   53455 * subscripting and function values:      Subscripting.       (line    6)
   53456 * suffixes for C++ source:               Invoking G++.       (line    6)
   53457 * SUNPRO_DEPENDENCIES:                   Environment Variables.
   53458                                                              (line  172)
   53459 * suppressing warnings:                  Warning Options.    (line    6)
   53460 * surprises in C++:                      C++ Misunderstandings.
   53461                                                              (line    6)
   53462 * syntax checking:                       Warning Options.    (line   13)
   53463 * syscall_linkage attribute:             Function Attributes.
   53464                                                              (line 1354)
   53465 * system headers, warnings from:         Warning Options.    (line  843)
   53466 * sysv_abi attribute:                    Function Attributes.
   53467                                                              (line  881)
   53468 * tan:                                   Other Builtins.     (line    6)
   53469 * tanf:                                  Other Builtins.     (line    6)
   53470 * tanh:                                  Other Builtins.     (line    6)
   53471 * tanhf:                                 Other Builtins.     (line    6)
   53472 * tanhl:                                 Other Builtins.     (line    6)
   53473 * tanl:                                  Other Builtins.     (line    6)
   53474 * target function attribute:             Function Attributes.
   53475                                                              (line 1361)
   53476 * target machine, specifying:            Target Options.     (line    6)
   53477 * target options:                        Target Options.     (line    6)
   53478 * target("abm") attribute:               Function Attributes.
   53479                                                              (line 1387)
   53480 * target("aes") attribute:               Function Attributes.
   53481                                                              (line 1392)
   53482 * target("align-stringops") attribute:   Function Attributes.
   53483                                                              (line 1486)
   53484 * target("altivec") attribute:           Function Attributes.
   53485                                                              (line 1512)
   53486 * target("arch=ARCH") attribute:         Function Attributes.
   53487                                                              (line 1495)
   53488 * target("avoid-indexed-addresses") attribute: Function Attributes.
   53489                                                              (line 1633)
   53490 * target("cld") attribute:               Function Attributes.
   53491                                                              (line 1457)
   53492 * target("cmpb") attribute:              Function Attributes.
   53493                                                              (line 1518)
   53494 * target("cpu=CPU") attribute:           Function Attributes.
   53495                                                              (line 1648)
   53496 * target("default") attribute:           Function Attributes.
   53497                                                              (line 1395)
   53498 * target("dlmzb") attribute:             Function Attributes.
   53499                                                              (line 1524)
   53500 * target("fancy-math-387") attribute:    Function Attributes.
   53501                                                              (line 1461)
   53502 * target("fma4") attribute:              Function Attributes.
   53503                                                              (line 1441)
   53504 * target("fpmath=FPMATH") attribute:     Function Attributes.
   53505                                                              (line 1503)
   53506 * target("fprnd") attribute:             Function Attributes.
   53507                                                              (line 1531)
   53508 * target("friz") attribute:              Function Attributes.
   53509                                                              (line 1624)
   53510 * target("fused-madd") attribute:        Function Attributes.
   53511                                                              (line 1466)
   53512 * target("hard-dfp") attribute:          Function Attributes.
   53513                                                              (line 1537)
   53514 * target("ieee-fp") attribute:           Function Attributes.
   53515                                                              (line 1471)
   53516 * target("inline-all-stringops") attribute: Function Attributes.
   53517                                                              (line 1476)
   53518 * target("inline-stringops-dynamically") attribute: Function Attributes.
   53519                                                              (line 1480)
   53520 * target("isel") attribute:              Function Attributes.
   53521                                                              (line 1543)
   53522 * target("longcall") attribute:          Function Attributes.
   53523                                                              (line 1643)
   53524 * target("lwp") attribute:               Function Attributes.
   53525                                                              (line 1449)
   53526 * target("mfcrf") attribute:             Function Attributes.
   53527                                                              (line 1547)
   53528 * target("mfpgpr") attribute:            Function Attributes.
   53529                                                              (line 1554)
   53530 * target("mmx") attribute:               Function Attributes.
   53531                                                              (line 1400)
   53532 * target("mulhw") attribute:             Function Attributes.
   53533                                                              (line 1561)
   53534 * target("multiple") attribute:          Function Attributes.
   53535                                                              (line 1568)
   53536 * target("paired") attribute:            Function Attributes.
   53537                                                              (line 1638)
   53538 * target("pclmul") attribute:            Function Attributes.
   53539                                                              (line 1404)
   53540 * target("popcnt") attribute:            Function Attributes.
   53541                                                              (line 1408)
   53542 * target("popcntb") attribute:           Function Attributes.
   53543                                                              (line 1579)
   53544 * target("popcntd") attribute:           Function Attributes.
   53545                                                              (line 1586)
   53546 * target("powerpc-gfxopt") attribute:    Function Attributes.
   53547                                                              (line 1592)
   53548 * target("powerpc-gpopt") attribute:     Function Attributes.
   53549                                                              (line 1598)
   53550 * target("recip") attribute:             Function Attributes.
   53551                                                              (line 1490)
   53552 * target("recip-precision") attribute:   Function Attributes.
   53553                                                              (line 1604)
   53554 * target("sse") attribute:               Function Attributes.
   53555                                                              (line 1412)
   53556 * target("sse2") attribute:              Function Attributes.
   53557                                                              (line 1416)
   53558 * target("sse3") attribute:              Function Attributes.
   53559                                                              (line 1420)
   53560 * target("sse4") attribute:              Function Attributes.
   53561                                                              (line 1424)
   53562 * target("sse4.1") attribute:            Function Attributes.
   53563                                                              (line 1429)
   53564 * target("sse4.2") attribute:            Function Attributes.
   53565                                                              (line 1433)
   53566 * target("sse4a") attribute:             Function Attributes.
   53567                                                              (line 1437)
   53568 * target("ssse3") attribute:             Function Attributes.
   53569                                                              (line 1453)
   53570 * target("string") attribute:            Function Attributes.
   53571                                                              (line 1610)
   53572 * target("tune=TUNE") attribute:         Function Attributes.
   53573                                                              (line 1499)
   53574 * target("update") attribute:            Function Attributes.
   53575                                                              (line 1573)
   53576 * target("vsx") attribute:               Function Attributes.
   53577                                                              (line 1616)
   53578 * target("xop") attribute:               Function Attributes.
   53579                                                              (line 1445)
   53580 * TC1:                                   Standards.          (line   13)
   53581 * TC2:                                   Standards.          (line   13)
   53582 * TC3:                                   Standards.          (line   13)
   53583 * Technical Corrigenda:                  Standards.          (line   13)
   53584 * Technical Corrigendum 1:               Standards.          (line   13)
   53585 * Technical Corrigendum 2:               Standards.          (line   13)
   53586 * Technical Corrigendum 3:               Standards.          (line   13)
   53587 * template instantiation:                Template Instantiation.
   53588                                                              (line    6)
   53589 * temporaries, lifetime of:              Temporaries.        (line    6)
   53590 * tgamma:                                Other Builtins.     (line    6)
   53591 * tgammaf:                               Other Builtins.     (line    6)
   53592 * tgammal:                               Other Builtins.     (line    6)
   53593 * Thread-Local Storage:                  Thread-Local.       (line    6)
   53594 * thunks:                                Nested Functions.   (line    6)
   53595 * TILE-Gx options:                       TILE-Gx Options.    (line    6)
   53596 * TILEPro options:                       TILEPro Options.    (line    6)
   53597 * tiny data section on the H8/300H and H8S: Function Attributes.
   53598                                                              (line 1677)
   53599 * TLS:                                   Thread-Local.       (line    6)
   53600 * tls_model attribute:                   Variable Attributes.
   53601                                                              (line  235)
   53602 * TMPDIR:                                Environment Variables.
   53603                                                              (line   45)
   53604 * toascii:                               Other Builtins.     (line    6)
   53605 * tolower:                               Other Builtins.     (line    6)
   53606 * toupper:                               Other Builtins.     (line    6)
   53607 * towlower:                              Other Builtins.     (line    6)
   53608 * towupper:                              Other Builtins.     (line    6)
   53609 * traditional C language:                C Dialect Options.  (line  307)
   53610 * trap_exit attribute:                   Function Attributes.
   53611                                                              (line 1684)
   53612 * trapa_handler attribute:               Function Attributes.
   53613                                                              (line 1689)
   53614 * trunc:                                 Other Builtins.     (line    6)
   53615 * truncf:                                Other Builtins.     (line    6)
   53616 * truncl:                                Other Builtins.     (line    6)
   53617 * two-stage name lookup:                 Name lookup.        (line    6)
   53618 * type alignment:                        Alignment.          (line    6)
   53619 * type attributes:                       Type Attributes.    (line    6)
   53620 * type_info:                             Vague Linkage.      (line   42)
   53621 * typedef names as function parameters:  Incompatibilities.  (line   97)
   53622 * typeof:                                Typeof.             (line    6)
   53623 * UHK fixed-suffix:                      Fixed-Point.        (line    6)
   53624 * uhk fixed-suffix:                      Fixed-Point.        (line    6)
   53625 * UHR fixed-suffix:                      Fixed-Point.        (line    6)
   53626 * uhr fixed-suffix:                      Fixed-Point.        (line    6)
   53627 * UK fixed-suffix:                       Fixed-Point.        (line    6)
   53628 * uk fixed-suffix:                       Fixed-Point.        (line    6)
   53629 * ULK fixed-suffix:                      Fixed-Point.        (line    6)
   53630 * ulk fixed-suffix:                      Fixed-Point.        (line    6)
   53631 * ULL integer suffix:                    Long Long.          (line    6)
   53632 * ULLK fixed-suffix:                     Fixed-Point.        (line    6)
   53633 * ullk fixed-suffix:                     Fixed-Point.        (line    6)
   53634 * ULLR fixed-suffix:                     Fixed-Point.        (line    6)
   53635 * ullr fixed-suffix:                     Fixed-Point.        (line    6)
   53636 * ULR fixed-suffix:                      Fixed-Point.        (line    6)
   53637 * ulr fixed-suffix:                      Fixed-Point.        (line    6)
   53638 * undefined behavior:                    Bug Criteria.       (line   17)
   53639 * undefined function value:              Bug Criteria.       (line   17)
   53640 * underscores in variables in macros:    Typeof.             (line   46)
   53641 * union:                                 Unnamed Fields.     (line    6)
   53642 * union, casting to a:                   Cast to Union.      (line    6)
   53643 * unions:                                Incompatibilities.  (line  146)
   53644 * unknown pragmas, warning:              Warning Options.    (line  691)
   53645 * unresolved references and -nodefaultlibs: Link Options.    (line   85)
   53646 * unresolved references and -nostdlib:   Link Options.       (line   85)
   53647 * unused attribute.:                     Function Attributes.
   53648                                                              (line 1693)
   53649 * UR fixed-suffix:                       Fixed-Point.        (line    6)
   53650 * ur fixed-suffix:                       Fixed-Point.        (line    6)
   53651 * use_debug_exception_return attribute:  Function Attributes.
   53652                                                              (line  712)
   53653 * use_shadow_register_set attribute:     Function Attributes.
   53654                                                              (line  703)
   53655 * used attribute.:                       Function Attributes.
   53656                                                              (line 1698)
   53657 * User stack pointer in interrupts on the Blackfin: Function Attributes.
   53658                                                              (line  754)
   53659 * V in constraint:                       Simple Constraints. (line   43)
   53660 * V850 Options:                          V850 Options.       (line    6)
   53661 * vague linkage:                         Vague Linkage.      (line    6)
   53662 * value after longjmp:                   Global Reg Vars.    (line   65)
   53663 * variable addressability on the IA-64:  Function Attributes.
   53664                                                              (line  853)
   53665 * variable addressability on the M32R/D: Variable Attributes.
   53666                                                              (line  374)
   53667 * variable alignment:                    Alignment.          (line    6)
   53668 * variable attributes:                   Variable Attributes.
   53669                                                              (line    6)
   53670 * variable number of arguments:          Variadic Macros.    (line    6)
   53671 * variable-length array scope:           Variable Length.    (line   22)
   53672 * variable-length arrays:                Variable Length.    (line    6)
   53673 * variables in specified registers:      Explicit Reg Vars.  (line    6)
   53674 * variables, local, in macros:           Typeof.             (line   46)
   53675 * variadic macros:                       Variadic Macros.    (line    6)
   53676 * VAX options:                           VAX Options.        (line    6)
   53677 * version_id attribute:                  Function Attributes.
   53678                                                              (line 1708)
   53679 * vfprintf:                              Other Builtins.     (line    6)
   53680 * vfscanf:                               Other Builtins.     (line    6)
   53681 * visibility attribute:                  Function Attributes.
   53682                                                              (line 1718)
   53683 * VLAs:                                  Variable Length.    (line    6)
   53684 * vliw attribute:                        Function Attributes.
   53685                                                              (line 1811)
   53686 * void pointers, arithmetic:             Pointer Arith.      (line    6)
   53687 * void, size of pointer to:              Pointer Arith.      (line    6)
   53688 * volatile access <1>:                   C++ Volatiles.      (line    6)
   53689 * volatile access:                       Volatiles.          (line    6)
   53690 * volatile applied to function:          Function Attributes.
   53691                                                              (line    6)
   53692 * volatile read <1>:                     C++ Volatiles.      (line    6)
   53693 * volatile read:                         Volatiles.          (line    6)
   53694 * volatile write <1>:                    C++ Volatiles.      (line    6)
   53695 * volatile write:                        Volatiles.          (line    6)
   53696 * vprintf:                               Other Builtins.     (line    6)
   53697 * vscanf:                                Other Builtins.     (line    6)
   53698 * vsnprintf:                             Other Builtins.     (line    6)
   53699 * vsprintf:                              Other Builtins.     (line    6)
   53700 * vsscanf:                               Other Builtins.     (line    6)
   53701 * vtable:                                Vague Linkage.      (line   27)
   53702 * VxWorks Options:                       VxWorks Options.    (line    6)
   53703 * W floating point suffix:               Floating Types.     (line    6)
   53704 * w floating point suffix:               Floating Types.     (line    6)
   53705 * warn_unused_result attribute:          Function Attributes.
   53706                                                              (line 1817)
   53707 * warning for comparison of signed and unsigned values: Warning Options.
   53708                                                              (line 1156)
   53709 * warning for overloaded virtual function: C++ Dialect Options.
   53710                                                              (line  618)
   53711 * warning for reordering of member initializers: C++ Dialect Options.
   53712                                                              (line  533)
   53713 * warning for unknown pragmas:           Warning Options.    (line  691)
   53714 * warning function attribute:            Function Attributes.
   53715                                                              (line  166)
   53716 * warning messages:                      Warning Options.    (line    6)
   53717 * warnings from system headers:          Warning Options.    (line  843)
   53718 * warnings vs errors:                    Warnings and Errors.
   53719                                                              (line    6)
   53720 * weak attribute:                        Function Attributes.
   53721                                                              (line 1834)
   53722 * weakref attribute:                     Function Attributes.
   53723                                                              (line 1843)
   53724 * whitespace:                            Incompatibilities.  (line  112)
   53725 * X in constraint:                       Simple Constraints. (line  124)
   53726 * X3.159-1989:                           Standards.          (line   13)
   53727 * x86-64 options:                        x86-64 Options.     (line    6)
   53728 * x86-64 Options:                        i386 and x86-64 Options.
   53729                                                              (line    6)
   53730 * Xstormy16 Options:                     Xstormy16 Options.  (line    6)
   53731 * Xtensa Options:                        Xtensa Options.     (line    6)
   53732 * y0:                                    Other Builtins.     (line    6)
   53733 * y0f:                                   Other Builtins.     (line    6)
   53734 * y0l:                                   Other Builtins.     (line    6)
   53735 * y1:                                    Other Builtins.     (line    6)
   53736 * y1f:                                   Other Builtins.     (line    6)
   53737 * y1l:                                   Other Builtins.     (line    6)
   53738 * yn:                                    Other Builtins.     (line    6)
   53739 * ynf:                                   Other Builtins.     (line    6)
   53740 * ynl:                                   Other Builtins.     (line    6)
   53741 * zero-length arrays:                    Zero Length.        (line    6)
   53742 * zero-size structures:                  Empty Structures.   (line    6)
   53743 * zSeries options:                       zSeries Options.    (line    6)
   53744 
   53745 
   53746 
   53747 Tag Table:
   53748 Node: Top1946
   53749 Node: G++ and GCC3712
   53750 Node: Standards5781
   53751 Node: Invoking GCC17959
   53752 Node: Option Summary21704
   53753 Node: Overall Options61833
   53754 Node: Invoking G++76071
   53755 Node: C Dialect Options77594
   53756 Node: C++ Dialect Options93433
   53757 Node: Objective-C and Objective-C++ Dialect Options121535
   53758 Node: Language Independent Options132043
   53759 Node: Warning Options134242
   53760 Node: Debugging Options203443
   53761 Node: Optimize Options260834
   53762 Ref: Type-punning319503
   53763 Node: Preprocessor Options397712
   53764 Ref: Wtrigraphs402494
   53765 Ref: dashMF407242
   53766 Ref: fdollars-in-identifiers418106
   53767 Node: Assembler Options428373
   53768 Node: Link Options429065
   53769 Ref: Link Options-Footnote-1440309
   53770 Node: Directory Options440643
   53771 Node: Spec Files447202
   53772 Node: Target Options468600
   53773 Node: Submodel Options468999
   53774 Node: AArch64 Options470692
   53775 Node: Adapteva Epiphany Options474566
   53776 Node: ARM Options480517
   53777 Node: AVR Options496367
   53778 Node: Blackfin Options516485
   53779 Node: C6X Options524500
   53780 Node: CRIS Options526043
   53781 Node: CR16 Options529787
   53782 Node: Darwin Options530694
   53783 Node: DEC Alpha Options538127
   53784 Node: FR30 Options549715
   53785 Node: FRV Options550280
   53786 Node: GNU/Linux Options556999
   53787 Node: H8/300 Options558260
   53788 Node: HPPA Options559710
   53789 Node: i386 and x86-64 Options569194
   53790 Node: i386 and x86-64 Windows Options606280
   53791 Node: IA-64 Options609136
   53792 Node: LM32 Options617200
   53793 Node: M32C Options617724
   53794 Node: M32R/D Options618998
   53795 Node: M680x0 Options622544
   53796 Node: MCore Options636590
   53797 Node: MeP Options638093
   53798 Node: MicroBlaze Options642052
   53799 Node: MIPS Options644848
   53800 Node: MMIX Options673748
   53801 Node: MN10300 Options676230
   53802 Node: Moxie Options678773
   53803 Node: PDP-11 Options679144
   53804 Node: picoChip Options680836
   53805 Node: PowerPC Options682977
   53806 Node: RL78 Options683198
   53807 Node: RS/6000 and PowerPC Options683860
   53808 Node: RX Options722881
   53809 Node: S/390 and zSeries Options730215
   53810 Node: Score Options738775
   53811 Node: SH Options739617
   53812 Node: Solaris 2 Options758472
   53813 Node: SPARC Options759703
   53814 Node: SPU Options772953
   53815 Node: System V Options777890
   53816 Node: TILE-Gx Options778716
   53817 Node: TILEPro Options779640
   53818 Node: V850 Options780144
   53819 Node: VAX Options786857
   53820 Node: VMS Options787392
   53821 Node: VxWorks Options788203
   53822 Node: x86-64 Options789358
   53823 Node: Xstormy16 Options789576
   53824 Node: Xtensa Options789865
   53825 Node: zSeries Options794176
   53826 Node: Code Gen Options794372
   53827 Node: Environment Variables824206
   53828 Node: Precompiled Headers832207
   53829 Node: C Implementation838215
   53830 Node: Translation implementation839884
   53831 Node: Environment implementation840458
   53832 Node: Identifiers implementation841008
   53833 Node: Characters implementation842062
   53834 Node: Integers implementation844868
   53835 Node: Floating point implementation846693
   53836 Node: Arrays and pointers implementation849622
   53837 Ref: Arrays and pointers implementation-Footnote-1851057
   53838 Node: Hints implementation851181
   53839 Node: Structures unions enumerations and bit-fields implementation852647
   53840 Node: Qualifiers implementation854633
   53841 Node: Declarators implementation856405
   53842 Node: Statements implementation856747
   53843 Node: Preprocessing directives implementation857074
   53844 Node: Library functions implementation859179
   53845 Node: Architecture implementation859819
   53846 Node: Locale-specific behavior implementation860522
   53847 Node: C++ Implementation860827
   53848 Node: Conditionally-supported behavior862109
   53849 Node: Exception handling862619
   53850 Node: C Extensions863028
   53851 Node: Statement Exprs868022
   53852 Node: Local Labels872481
   53853 Node: Labels as Values875454
   53854 Ref: Labels as Values-Footnote-1877853
   53855 Node: Nested Functions878036
   53856 Node: Constructing Calls881994
   53857 Node: Typeof886712
   53858 Node: Conditionals890020
   53859 Node: __int128890910
   53860 Node: Long Long891434
   53861 Node: Complex892910
   53862 Node: Floating Types895499
   53863 Node: Half-Precision896627
   53864 Node: Decimal Float898809
   53865 Node: Hex Floats900664
   53866 Node: Fixed-Point901700
   53867 Node: Named Address Spaces904982
   53868 Ref: AVR Named Address Spaces905663
   53869 Node: Zero Length910869
   53870 Node: Empty Structures914156
   53871 Node: Variable Length914562
   53872 Node: Variadic Macros917238
   53873 Node: Escaped Newlines919616
   53874 Node: Subscripting920455
   53875 Node: Pointer Arith921181
   53876 Node: Initializers921749
   53877 Node: Compound Literals922245
   53878 Node: Designated Inits925606
   53879 Node: Case Ranges929238
   53880 Node: Cast to Union929919
   53881 Node: Mixed Declarations931010
   53882 Node: Function Attributes931520
   53883 Node: Attribute Syntax1017848
   53884 Node: Function Prototypes1028239
   53885 Node: C++ Comments1030020
   53886 Node: Dollar Signs1030539
   53887 Node: Character Escapes1031004
   53888 Node: Variable Attributes1031298
   53889 Ref: AVR Variable Attributes1044965
   53890 Ref: MeP Variable Attributes1047626
   53891 Ref: i386 Variable Attributes1049572
   53892 Node: Type Attributes1055236
   53893 Ref: MeP Type Attributes1069124
   53894 Ref: i386 Type Attributes1069398
   53895 Ref: PowerPC Type Attributes1070089
   53896 Ref: SPU Type Attributes1070951
   53897 Node: Alignment1071242
   53898 Node: Inline1072612
   53899 Node: Volatiles1077587
   53900 Node: Extended Asm1080469
   53901 Ref: Example of asm with clobbered asm reg1086373
   53902 Ref: Extended asm with goto1096080
   53903 Node: Constraints1103931
   53904 Node: Simple Constraints1105015
   53905 Node: Multi-Alternative1112336
   53906 Node: Modifiers1114053
   53907 Node: Machine Constraints1117067
   53908 Node: Asm Labels1167290
   53909 Node: Explicit Reg Vars1168966
   53910 Node: Global Reg Vars1170569
   53911 Node: Local Reg Vars1175065
   53912 Node: Alternate Keywords1177482
   53913 Node: Incomplete Enums1178968
   53914 Node: Function Names1179724
   53915 Node: Return Address1181885
   53916 Node: Vector Extensions1185392
   53917 Node: Offsetof1191567
   53918 Node: __sync Builtins1192380
   53919 Node: __atomic Builtins1197850
   53920 Node: x86 specific memory model extensions for transactional memory1209489
   53921 Node: Object Size Checking1210751
   53922 Node: Other Builtins1216240
   53923 Node: Target Builtins1245384
   53924 Node: Alpha Built-in Functions1246623
   53925 Node: ARM iWMMXt Built-in Functions1249632
   53926 Node: ARM NEON Intrinsics1256612
   53927 Node: AVR Built-in Functions1465031
   53928 Node: Blackfin Built-in Functions1468101
   53929 Node: FR-V Built-in Functions1468718
   53930 Node: Argument Types1469577
   53931 Node: Directly-mapped Integer Functions1471329
   53932 Node: Directly-mapped Media Functions1472411
   53933 Node: Raw read/write Functions1479443
   53934 Node: Other Built-in Functions1480355
   53935 Node: X86 Built-in Functions1481539
   53936 Node: X86 transactional memory intrinsics1540507
   53937 Node: MIPS DSP Built-in Functions1543181
   53938 Node: MIPS Paired-Single Support1555689
   53939 Node: MIPS Loongson Built-in Functions1557188
   53940 Node: Paired-Single Arithmetic1563708
   53941 Node: Paired-Single Built-in Functions1564656
   53942 Node: MIPS-3D Built-in Functions1567323
   53943 Node: Other MIPS Built-in Functions1572700
   53944 Node: picoChip Built-in Functions1573224
   53945 Node: PowerPC Built-in Functions1574573
   53946 Node: PowerPC AltiVec/VSX Built-in Functions1578385
   53947 Node: PowerPC Hardware Transactional Memory Built-in Functions1711283
   53948 Node: RX Built-in Functions1717824
   53949 Node: S/390 System z Built-in Functions1721857
   53950 Node: SH Built-in Functions1727094
   53951 Node: SPARC VIS Built-in Functions1728487
   53952 Node: SPU Built-in Functions1734091
   53953 Node: TI C6X Built-in Functions1735907
   53954 Node: TILE-Gx Built-in Functions1736931
   53955 Node: TILEPro Built-in Functions1738048
   53956 Node: Target Format Checks1739115
   53957 Node: Solaris Format Checks1739547
   53958 Node: Darwin Format Checks1739973
   53959 Node: Pragmas1740791
   53960 Node: ARM Pragmas1741501
   53961 Node: M32C Pragmas1742104
   53962 Node: MeP Pragmas1743178
   53963 Node: RS/6000 and PowerPC Pragmas1745247
   53964 Node: Darwin Pragmas1745988
   53965 Node: Solaris Pragmas1747055
   53966 Node: Symbol-Renaming Pragmas1748216
   53967 Node: Structure-Packing Pragmas1749770
   53968 Node: Weak Pragmas1751420
   53969 Node: Diagnostic Pragmas1752154
   53970 Node: Visibility Pragmas1755261
   53971 Node: Push/Pop Macro Pragmas1756013
   53972 Node: Function Specific Option Pragmas1756985
   53973 Node: Unnamed Fields1759242
   53974 Node: Thread-Local1761470
   53975 Node: C99 Thread-Local Edits1763575
   53976 Node: C++98 Thread-Local Edits1765587
   53977 Node: Binary constants1769031
   53978 Node: C++ Extensions1769702
   53979 Node: C++ Volatiles1771413
   53980 Node: Restricted Pointers1773761
   53981 Node: Vague Linkage1775352
   53982 Node: C++ Interface1778976
   53983 Ref: C++ Interface-Footnote-11783262
   53984 Node: Template Instantiation1783398
   53985 Node: Bound member functions1789985
   53986 Node: C++ Attributes1791517
   53987 Node: Function Multiversioning1794173
   53988 Node: Namespace Association1795988
   53989 Node: Type Traits1797368
   53990 Node: Java Exceptions1803856
   53991 Node: Deprecated Features1805246
   53992 Node: Backwards Compatibility1808211
   53993 Node: Objective-C1809563
   53994 Node: GNU Objective-C runtime API1810172
   53995 Node: Modern GNU Objective-C runtime API1811179
   53996 Node: Traditional GNU Objective-C runtime API1813616
   53997 Node: Executing code before main1814344
   53998 Node: What you can and what you cannot do in +load1817082
   53999 Node: Type encoding1819472
   54000 Node: Legacy type encoding1824548
   54001 Node: @encode1825639
   54002 Node: Method signatures1826180
   54003 Node: Garbage Collection1828175
   54004 Node: Constant string objects1830864
   54005 Node: compatibility_alias1833372
   54006 Node: Exceptions1834094
   54007 Node: Synchronization1836805
   54008 Node: Fast enumeration1837989
   54009 Node: Using fast enumeration1838301
   54010 Node: c99-like fast enumeration syntax1839512
   54011 Node: Fast enumeration details1840215
   54012 Node: Fast enumeration protocol1842556
   54013 Node: Messaging with the GNU Objective-C runtime1845708
   54014 Node: Dynamically registering methods1847079
   54015 Node: Forwarding hook1848770
   54016 Node: Compatibility1851810
   54017 Node: Gcov1858377
   54018 Node: Gcov Intro1858910
   54019 Node: Invoking Gcov1861628
   54020 Node: Gcov and Optimization1874539
   54021 Node: Gcov Data Files1877539
   54022 Node: Cross-profiling1878934
   54023 Node: Trouble1880785
   54024 Node: Actual Bugs1882197
   54025 Node: Interoperation1882644
   54026 Node: Incompatibilities1889536
   54027 Node: Fixed Headers1897687
   54028 Node: Standard Libraries1899350
   54029 Node: Disappointments1900722
   54030 Node: C++ Misunderstandings1905080
   54031 Node: Static Definitions1905891
   54032 Node: Name lookup1906944
   54033 Ref: Name lookup-Footnote-11911722
   54034 Node: Temporaries1911909
   54035 Node: Copy Assignment1913885
   54036 Node: Non-bugs1915692
   54037 Node: Warnings and Errors1926199
   54038 Node: Bugs1927961
   54039 Node: Bug Criteria1928525
   54040 Node: Bug Reporting1930735
   54041 Node: Service1930956
   54042 Node: Contributing1931775
   54043 Node: Funding1932515
   54044 Node: GNU Project1935004
   54045 Node: Copying1935650
   54046 Node: GNU Free Documentation License1973178
   54047 Node: Contributors1998315
   54048 Node: Option Index2035717
   54049 Node: Keyword Index2228723
   54050 
   54051 End Tag Table
   54052