Home | History | Annotate | Download | only in info
      1 This is gcc.info, produced by makeinfo version 5.2 from gcc.texi.
      2 
      3 Copyright (C) 1988-2013 Free Software Foundation, Inc.
      4 
      5  Permission is granted to copy, distribute and/or modify this document
      6 under the terms of the GNU Free Documentation License, Version 1.3 or
      7 any later version published by the Free Software Foundation; with the
      8 Invariant Sections being "Funding Free Software", the Front-Cover Texts
      9 being (a) (see below), and with the Back-Cover Texts being (b) (see
     10 below).  A copy of the license is included in the section entitled "GNU
     11 Free Documentation License".
     12 
     13  (a) The FSF's Front-Cover Text is:
     14 
     15  A GNU Manual
     16 
     17  (b) The FSF's Back-Cover Text is:
     18 
     19  You have freedom to copy and modify this GNU Manual, like GNU software.
     20 Copies published by the Free Software Foundation raise funds for GNU
     21 development.
     22 INFO-DIR-SECTION Software development
     23 START-INFO-DIR-ENTRY
     24 * gcc: (gcc).                  The GNU Compiler Collection.
     25 * g++: (gcc).                  The GNU C++ compiler.
     26 * gcov: (gcc) Gcov.            'gcov'--a test coverage program.
     27 END-INFO-DIR-ENTRY
     28 
     29  This file documents the use of the GNU compilers.
     30 
     31  Copyright (C) 1988-2013 Free Software Foundation, Inc.
     32 
     33  Permission is granted to copy, distribute and/or modify this document
     34 under the terms of the GNU Free Documentation License, Version 1.3 or
     35 any later version published by the Free Software Foundation; with the
     36 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     37 being (a) (see below), and with the Back-Cover Texts being (b) (see
     38 below).  A copy of the license is included in the section entitled "GNU
     39 Free Documentation License".
     40 
     41  (a) The FSF's Front-Cover Text is:
     42 
     43  A GNU Manual
     44 
     45  (b) The FSF's Back-Cover Text is:
     46 
     47  You have freedom to copy and modify this GNU Manual, like GNU software.
     48 Copies published by the Free Software Foundation raise funds for GNU
     49 development.
     50 
     51 
     52 File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
     53 
     54 Introduction
     55 ************
     56 
     57 This manual documents how to use the GNU compilers, as well as their
     58 features and incompatibilities, and how to report bugs.  It corresponds
     59 to the compilers (GCC) version 4.8.3.  The internals of the GNU
     60 compilers, including how to port them to new targets and some
     61 information about how to write front ends for new languages, are
     62 documented in a separate manual.  *Note Introduction: (gccint)Top.
     63 
     64 * Menu:
     65 
     66 * G++ and GCC::     You can compile C or C++ programs.
     67 * Standards::       Language standards supported by GCC.
     68 * Invoking GCC::    Command options supported by 'gcc'.
     69 * C Implementation:: How GCC implements the ISO C specification.
     70 * C++ Implementation:: How GCC implements the ISO C++ specification.
     71 * C Extensions::    GNU extensions to the C language family.
     72 * C++ Extensions::  GNU extensions to the C++ language.
     73 * Objective-C::     GNU Objective-C runtime features.
     74 * Compatibility::   Binary Compatibility
     75 * Gcov::            'gcov'--a test coverage program.
     76 * Trouble::         If you have trouble using GCC.
     77 * Bugs::            How, why and where to report bugs.
     78 * Service::         How to find suppliers of support for GCC.
     79 * Contributing::    How to contribute to testing and developing GCC.
     80 
     81 * Funding::         How to help assure funding for free software.
     82 * GNU Project::     The GNU Project and GNU/Linux.
     83 
     84 * Copying::         GNU General Public License says
     85                     how you can copy and share GCC.
     86 * GNU Free Documentation License:: How you can copy and share this manual.
     87 * Contributors::    People who have contributed to GCC.
     88 
     89 * Option Index::    Index to command line options.
     90 * Keyword Index::   Index of concepts and symbol names.
     91 
     92 
     93 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Up: Top
     94 
     95 1 Programming Languages Supported by GCC
     96 ****************************************
     97 
     98 GCC stands for "GNU Compiler Collection".  GCC is an integrated
     99 distribution of compilers for several major programming languages.
    100 These languages currently include C, C++, Objective-C, Objective-C++,
    101 Java, Fortran, Ada, and Go.
    102 
    103  The abbreviation "GCC" has multiple meanings in common use.  The
    104 current official meaning is "GNU Compiler Collection", which refers
    105 generically to the complete suite of tools.  The name historically stood
    106 for "GNU C Compiler", and this usage is still common when the emphasis
    107 is on compiling C programs.  Finally, the name is also used when
    108 speaking of the "language-independent" component of GCC: code shared
    109 among the compilers for all supported languages.
    110 
    111  The language-independent component of GCC includes the majority of the
    112 optimizers, as well as the "back ends" that generate machine code for
    113 various processors.
    114 
    115  The part of a compiler that is specific to a particular language is
    116 called the "front end".  In addition to the front ends that are
    117 integrated components of GCC, there are several other front ends that
    118 are maintained separately.  These support languages such as Pascal,
    119 Mercury, and COBOL.  To use these, they must be built together with GCC
    120 proper.
    121 
    122  Most of the compilers for languages other than C have their own names.
    123 The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
    124 talk about compiling one of those languages, we might refer to that
    125 compiler by its own name, or as GCC.  Either is correct.
    126 
    127  Historically, compilers for many languages, including C++ and Fortran,
    128 have been implemented as "preprocessors" which emit another high level
    129 language such as C.  None of the compilers included in GCC are
    130 implemented this way; they all generate machine code directly.  This
    131 sort of preprocessor should not be confused with the "C preprocessor",
    132 which is an integral feature of the C, C++, Objective-C and
    133 Objective-C++ languages.
    134 
    135 
    136 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
    137 
    138 2 Language Standards Supported by GCC
    139 *************************************
    140 
    141 For each language compiled by GCC for which there is a standard, GCC
    142 attempts to follow one or more versions of that standard, possibly with
    143 some exceptions, and possibly with some extensions.
    144 
    145 2.1 C language
    146 ==============
    147 
    148 GCC supports three versions of the C standard, although support for the
    149 most recent version is not yet complete.
    150 
    151  The original ANSI C standard (X3.159-1989) was ratified in 1989 and
    152 published in 1990.  This standard was ratified as an ISO standard
    153 (ISO/IEC 9899:1990) later in 1990.  There were no technical differences
    154 between these publications, although the sections of the ANSI standard
    155 were renumbered and became clauses in the ISO standard.  This standard,
    156 in both its forms, is commonly known as "C89", or occasionally as "C90",
    157 from the dates of ratification.  The ANSI standard, but not the ISO
    158 standard, also came with a Rationale document.  To select this standard
    159 in GCC, use one of the options '-ansi', '-std=c90' or
    160 '-std=iso9899:1990'; to obtain all the diagnostics required by the
    161 standard, you should also specify '-pedantic' (or '-pedantic-errors' if
    162 you want them to be errors rather than warnings).  *Note Options
    163 Controlling C Dialect: C Dialect Options.
    164 
    165  Errors in the 1990 ISO C standard were corrected in two Technical
    166 Corrigenda published in 1994 and 1996.  GCC does not support the
    167 uncorrected version.
    168 
    169  An amendment to the 1990 standard was published in 1995.  This
    170 amendment added digraphs and '__STDC_VERSION__' to the language, but
    171 otherwise concerned the library.  This amendment is commonly known as
    172 "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
    173 select this standard in GCC, use the option '-std=iso9899:199409' (with,
    174 as for other standard versions, '-pedantic' to receive all required
    175 diagnostics).
    176 
    177  A new edition of the ISO C standard was published in 1999 as ISO/IEC
    178 9899:1999, and is commonly known as "C99".  GCC has incomplete support
    179 for this standard version; see <http://gcc.gnu.org/c99status.html> for
    180 details.  To select this standard, use '-std=c99' or
    181 '-std=iso9899:1999'.  (While in development, drafts of this standard
    182 version were referred to as "C9X".)
    183 
    184  Errors in the 1999 ISO C standard were corrected in three Technical
    185 Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
    186 uncorrected version.
    187 
    188  A fourth version of the C standard, known as "C11", was published in
    189 2011 as ISO/IEC 9899:2011.  GCC has limited incomplete support for parts
    190 of this standard, enabled with '-std=c11' or '-std=iso9899:2011'.
    191 (While in development, drafts of this standard version were referred to
    192 as "C1X".)
    193 
    194  By default, GCC provides some extensions to the C language that on rare
    195 occasions conflict with the C standard.  *Note Extensions to the C
    196 Language Family: C Extensions.  Use of the '-std' options listed above
    197 will disable these extensions where they conflict with the C standard
    198 version selected.  You may also select an extended version of the C
    199 language explicitly with '-std=gnu90' (for C90 with GNU extensions),
    200 '-std=gnu99' (for C99 with GNU extensions) or '-std=gnu11' (for C11 with
    201 GNU extensions).  The default, if no C language dialect options are
    202 given, is '-std=gnu90'; this will change to '-std=gnu99' or '-std=gnu11'
    203 in some future release when the C99 or C11 support is complete.  Some
    204 features that are part of the C99 standard are accepted as extensions in
    205 C90 mode, and some features that are part of the C11 standard are
    206 accepted as extensions in C90 and C99 modes.
    207 
    208  The ISO C standard defines (in clause 4) two classes of conforming
    209 implementation.  A "conforming hosted implementation" supports the whole
    210 standard including all the library facilities; a "conforming
    211 freestanding implementation" is only required to provide certain library
    212 facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
    213 '<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
    214 those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
    215 '<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
    216 in C99, are not required for freestanding implementations.  The standard
    217 also defines two environments for programs, a "freestanding
    218 environment", required of all implementations and which may not have
    219 library facilities beyond those required of freestanding
    220 implementations, where the handling of program startup and termination
    221 are implementation-defined, and a "hosted environment", which is not
    222 required, in which all the library facilities are provided and startup
    223 is through a function 'int main (void)' or 'int main (int, char *[])'.
    224 An OS kernel would be a freestanding environment; a program using the
    225 facilities of an operating system would normally be in a hosted
    226 implementation.
    227 
    228  GCC aims towards being usable as a conforming freestanding
    229 implementation, or as the compiler for a conforming hosted
    230 implementation.  By default, it will act as the compiler for a hosted
    231 implementation, defining '__STDC_HOSTED__' as '1' and presuming that
    232 when the names of ISO C functions are used, they have the semantics
    233 defined in the standard.  To make it act as a conforming freestanding
    234 implementation for a freestanding environment, use the option
    235 '-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not
    236 make assumptions about the meanings of function names from the standard
    237 library, with exceptions noted below.  To build an OS kernel, you may
    238 well still need to make your own arrangements for linking and startup.
    239 *Note Options Controlling C Dialect: C Dialect Options.
    240 
    241  GCC does not provide the library facilities required only of hosted
    242 implementations, nor yet all the facilities required by C99 of
    243 freestanding implementations; to use the facilities of a hosted
    244 environment, you will need to find them elsewhere (for example, in the
    245 GNU C library).  *Note Standard Libraries: Standard Libraries.
    246 
    247  Most of the compiler support routines used by GCC are present in
    248 'libgcc', but there are a few exceptions.  GCC requires the freestanding
    249 environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
    250 Finally, if '__builtin_trap' is used, and the target does not implement
    251 the 'trap' pattern, then GCC will emit a call to 'abort'.
    252 
    253  For references to Technical Corrigenda, Rationale documents and
    254 information concerning the history of C that is available online, see
    255 <http://gcc.gnu.org/readings.html>
    256 
    257 2.2 C++ language
    258 ================
    259 
    260 GCC supports the original ISO C++ standard (1998) and contains
    261 experimental support for the second ISO C++ standard (2011).
    262 
    263  The original ISO C++ standard was published as the ISO standard
    264 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
    265 2003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
    266 C++03, respectively.  GCC implements the majority of C++98 ('export' is
    267 a notable exception) and most of the changes in C++03.  To select this
    268 standard in GCC, use one of the options '-ansi', '-std=c++98', or
    269 '-std=c++03'; to obtain all the diagnostics required by the standard,
    270 you should also specify '-pedantic' (or '-pedantic-errors' if you want
    271 them to be errors rather than warnings).
    272 
    273  A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
    274 and is referred to as C++11; before its publication it was commonly
    275 referred to as C++0x.  C++11 contains several changes to the C++
    276 language, most of which have been implemented in an experimental C++11
    277 mode in GCC.  For information regarding the C++11 features available in
    278 the experimental C++11 mode, see
    279 <http://gcc.gnu.org/projects/cxx0x.html>.  To select this standard in
    280 GCC, use the option '-std=c++11'; to obtain all the diagnostics required
    281 by the standard, you should also specify '-pedantic' (or
    282 '-pedantic-errors' if you want them to be errors rather than warnings).
    283 
    284  More information about the C++ standards is available on the ISO C++
    285 committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.
    286 
    287  By default, GCC provides some extensions to the C++ language; *Note
    288 Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
    289 option listed above will disable these extensions.  You may also select
    290 an extended version of the C++ language explicitly with '-std=gnu++98'
    291 (for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU
    292 extensions).  The default, if no C++ language dialect options are given,
    293 is '-std=gnu++98'.
    294 
    295 2.3 Objective-C and Objective-C++ languages
    296 ===========================================
    297 
    298 GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
    299 and contains support for the Objective-C exception and synchronization
    300 syntax.  It has also support for a number of "Objective-C 2.0" language
    301 extensions, including properties, fast enumeration (only for
    302 Objective-C), method attributes and the @optional and @required keywords
    303 in protocols.  GCC supports Objective-C++ and features available in
    304 Objective-C are also available in Objective-C++.
    305 
    306  GCC by default uses the GNU Objective-C runtime library, which is part
    307 of GCC and is not the same as the Apple/NeXT Objective-C runtime library
    308 used on Apple systems.  There are a number of differences documented in
    309 this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
    310 to switch between producing output that works with the GNU Objective-C
    311 runtime library and output that works with the Apple/NeXT Objective-C
    312 runtime library.
    313 
    314  There is no formal written standard for Objective-C or Objective-C++.
    315 The authoritative manual on traditional Objective-C (1.0) is
    316 "Object-Oriented Programming and the Objective-C Language", available at
    317 a number of web sites:
    318    * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf>
    319      is the original NeXTstep document;
    320    * <http://objc.toodarkpark.net> is the same document in another
    321      format;
    322    * 
    323      <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
    324      has an updated version but make sure you search for "Object
    325      Oriented Programming and the Objective-C Programming Language 1.0",
    326      not documentation on the newer "Objective-C 2.0" language
    327 
    328  The Objective-C exception and synchronization syntax (that is, the
    329 keywords @try, @throw, @catch, @finally and @synchronized) is supported
    330 by GCC and is enabled with the option '-fobjc-exceptions'.  The syntax
    331 is briefly documented in this manual and in the Objective-C 2.0 manuals
    332 from Apple.
    333 
    334  The Objective-C 2.0 language extensions and features are automatically
    335 enabled; they include properties (via the @property, @synthesize and
    336 @dynamic keywords), fast enumeration (not available in Objective-C++),
    337 attributes for methods (such as deprecated, noreturn, sentinel, format),
    338 the unused attribute for method arguments, the @package keyword for
    339 instance variables and the @optional and @required keywords in
    340 protocols.  You can disable all these Objective-C 2.0 language
    341 extensions with the option '-fobjc-std=objc1', which causes the compiler
    342 to recognize the same Objective-C language syntax recognized by GCC 4.0,
    343 and to produce an error if one of the new features is used.
    344 
    345  GCC has currently no support for non-fragile instance variables.
    346 
    347  The authoritative manual on Objective-C 2.0 is available from Apple:
    348    * 
    349      <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
    350 
    351  For more information concerning the history of Objective-C that is
    352 available online, see <http://gcc.gnu.org/readings.html>
    353 
    354 2.4 Go language
    355 ===============
    356 
    357 As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
    358 described at <http://golang.org/doc/go1.html>.
    359 
    360 2.5 References for other languages
    361 ==================================
    362 
    363 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
    364 conformance and compatibility of the Ada compiler.
    365 
    366  *Note Standards: (gfortran)Standards, for details of standards
    367 supported by GNU Fortran.
    368 
    369  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
    370 details of compatibility between 'gcj' and the Java Platform.
    371 
    372 
    373 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
    374 
    375 3 GCC Command Options
    376 *********************
    377 
    378 When you invoke GCC, it normally does preprocessing, compilation,
    379 assembly and linking.  The "overall options" allow you to stop this
    380 process at an intermediate stage.  For example, the '-c' option says not
    381 to run the linker.  Then the output consists of object files output by
    382 the assembler.
    383 
    384  Other options are passed on to one stage of processing.  Some options
    385 control the preprocessor and others the compiler itself.  Yet other
    386 options control the assembler and linker; most of these are not
    387 documented here, since you rarely need to use any of them.
    388 
    389  Most of the command-line options that you can use with GCC are useful
    390 for C programs; when an option is only useful with another language
    391 (usually C++), the explanation says so explicitly.  If the description
    392 for a particular option does not mention a source language, you can use
    393 that option with all supported languages.
    394 
    395  *Note Compiling C++ Programs: Invoking G++, for a summary of special
    396 options for compiling C++ programs.
    397 
    398  The 'gcc' program accepts options and file names as operands.  Many
    399 options have multi-letter names; therefore multiple single-letter
    400 options may _not_ be grouped: '-dv' is very different from '-d -v'.
    401 
    402  You can mix options and other arguments.  For the most part, the order
    403 you use doesn't matter.  Order does matter when you use several options
    404 of the same kind; for example, if you specify '-L' more than once, the
    405 directories are searched in the order specified.  Also, the placement of
    406 the '-l' option is significant.
    407 
    408  Many options have long names starting with '-f' or with '-W'--for
    409 example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
    410 have both positive and negative forms; the negative form of '-ffoo' is
    411 '-fno-foo'.  This manual documents only one of these two forms,
    412 whichever one is not the default.
    413 
    414  *Note Option Index::, for an index to GCC's options.
    415 
    416 * Menu:
    417 
    418 * Option Summary::      Brief list of all options, without explanations.
    419 * Overall Options::     Controlling the kind of output:
    420                         an executable, object files, assembler files,
    421                         or preprocessed source.
    422 * Invoking G++::        Compiling C++ programs.
    423 * C Dialect Options::   Controlling the variant of C language compiled.
    424 * C++ Dialect Options:: Variations on C++.
    425 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
    426                         and Objective-C++.
    427 * Language Independent Options:: Controlling how diagnostics should be
    428                         formatted.
    429 * Warning Options::     How picky should the compiler be?
    430 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
    431 * Optimize Options::    How much optimization?
    432 * Preprocessor Options:: Controlling header files and macro definitions.
    433                          Also, getting dependency information for Make.
    434 * Assembler Options::   Passing options to the assembler.
    435 * Link Options::        Specifying libraries and so on.
    436 * Directory Options::   Where to find header files and libraries.
    437                         Where to find the compiler executable files.
    438 * Spec Files::          How to pass switches to sub-processes.
    439 * Target Options::      Running a cross-compiler, or an old version of GCC.
    440 * Submodel Options::    Specifying minor hardware or convention variations,
    441                         such as 68010 vs 68020.
    442 * Code Gen Options::    Specifying conventions for function calls, data layout
    443                         and register usage.
    444 * Environment Variables:: Env vars that affect GCC.
    445 * Precompiled Headers:: Compiling a header once, and using it many times.
    446 
    447 
    448 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
    449 
    450 3.1 Option Summary
    451 ==================
    452 
    453 Here is a summary of all the options, grouped by type.  Explanations are
    454 in the following sections.
    455 
    456 _Overall Options_
    457      *Note Options Controlling the Kind of Output: Overall Options.
    458           -c  -S  -E  -o FILE  -no-canonical-prefixes
    459           -pipe  -pass-exit-codes
    460           -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
    461           --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
    462           -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
    463 
    464 _C Language Options_
    465      *Note Options Controlling C Dialect: C Dialect Options.
    466           -ansi  -std=STANDARD  -fgnu89-inline
    467           -aux-info FILENAME -fallow-parameterless-variadic-functions
    468           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
    469           -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
    470           -trigraphs  -traditional  -traditional-cpp
    471           -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
    472           -fsigned-bitfields  -fsigned-char
    473           -funsigned-bitfields  -funsigned-char
    474 
    475 _C++ Language Options_
    476      *Note Options Controlling C++ Dialect: C++ Dialect Options.
    477           -fabi-version=N  -fno-access-control  -fcheck-new
    478           -fconstexpr-depth=N  -ffriend-injection
    479           -fno-elide-constructors
    480           -fno-enforce-eh-specs
    481           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
    482           -fno-implicit-templates
    483           -fno-implicit-inline-templates
    484           -fno-implement-inlines  -fms-extensions
    485           -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
    486           -fno-optional-diags  -fpermissive
    487           -fno-pretty-templates
    488           -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=N
    489           -ftemplate-depth=N
    490           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
    491           -fno-default-inline  -fvisibility-inlines-hidden
    492           -fvisibility-ms-compat
    493           -fext-numeric-literals
    494           -Wabi  -Wconversion-null  -Wctor-dtor-privacy
    495           -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
    496           -Wnoexcept -Wnon-virtual-dtor  -Wreorder
    497           -Weffc++  -Wstrict-null-sentinel
    498           -Wno-non-template-friend  -Wold-style-cast
    499           -Woverloaded-virtual  -Wno-pmf-conversions
    500           -Wsign-promo
    501 
    502 _Objective-C and Objective-C++ Language Options_
    503      *Note Options Controlling Objective-C and Objective-C++ Dialects:
    504      Objective-C and Objective-C++ Dialect Options.
    505           -fconstant-string-class=CLASS-NAME
    506           -fgnu-runtime  -fnext-runtime
    507           -fno-nil-receivers
    508           -fobjc-abi-version=N
    509           -fobjc-call-cxx-cdtors
    510           -fobjc-direct-dispatch
    511           -fobjc-exceptions
    512           -fobjc-gc
    513           -fobjc-nilcheck
    514           -fobjc-std=objc1
    515           -freplace-objc-classes
    516           -fzero-link
    517           -gen-decls
    518           -Wassign-intercept
    519           -Wno-protocol  -Wselector
    520           -Wstrict-selector-match
    521           -Wundeclared-selector
    522 
    523 _Language Independent Options_
    524      *Note Options to Control Diagnostic Messages Formatting: Language
    525      Independent Options.
    526           -fmessage-length=N
    527           -fdiagnostics-show-location=[once|every-line]
    528           -fno-diagnostics-show-option -fno-diagnostics-show-caret
    529 
    530 _Warning Options_
    531      *Note Options to Request or Suppress Warnings: Warning Options.
    532           -fsyntax-only  -fmax-errors=N  -Wpedantic
    533           -pedantic-errors
    534           -w  -Wextra  -Wall  -Waddress  -Waggregate-return
    535           -Waggressive-loop-optimizations -Warray-bounds
    536           -Wno-attributes -Wno-builtin-macro-redefined
    537           -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual
    538           -Wchar-subscripts -Wclobbered  -Wcomment
    539           -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
    540           -Wno-deprecated-declarations -Wdisabled-optimization
    541           -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
    542           -Wno-endif-labels -Werror  -Werror=*
    543           -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
    544           -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
    545           -Wformat-security  -Wformat-y2k
    546           -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
    547           -Wignored-qualifiers
    548           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
    549           -Winit-self  -Winline -Wmaybe-uninitialized
    550           -Wno-int-to-pointer-cast -Wno-invalid-offsetof
    551           -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
    552           -Wlogical-op -Wlong-long
    553           -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
    554           -Wmissing-include-dirs
    555           -Wno-mudflap
    556           -Wno-multichar  -Wnonnull  -Wno-overflow
    557           -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
    558           -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
    559           -Wpointer-arith  -Wno-pointer-to-int-cast
    560           -Wredundant-decls  -Wno-return-local-addr
    561           -Wreturn-type  -Wsequence-point  -Wshadow
    562           -Wsign-compare  -Wsign-conversion  -Wsizeof-pointer-memaccess
    563           -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
    564           -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
    565           -Wsuggest-attribute=[pure|const|noreturn|format]
    566           -Wmissing-format-attribute
    567           -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
    568           -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
    569           -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
    570           -Wunsuffixed-float-constants  -Wunused  -Wunused-function
    571           -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
    572           -Wno-unused-result -Wunused-value  -Wunused-variable
    573           -Wunused-but-set-parameter -Wunused-but-set-variable
    574           -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
    575           -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant
    576 
    577 _C and Objective-C-only Warning Options_
    578           -Wbad-function-cast  -Wmissing-declarations
    579           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
    580           -Wold-style-declaration  -Wold-style-definition
    581           -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
    582           -Wdeclaration-after-statement -Wpointer-sign
    583 
    584 _Debugging Options_
    585      *Note Options for Debugging Your Program or GCC: Debugging Options.
    586           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
    587           -fsanitize=STYLE
    588           -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
    589           -fdisable-ipa-PASS_NAME
    590           -fdisable-rtl-PASS_NAME
    591           -fdisable-rtl-PASS-NAME=RANGE-LIST
    592           -fdisable-tree-PASS_NAME
    593           -fdisable-tree-PASS-NAME=RANGE-LIST
    594           -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
    595           -fdump-translation-unit[-N]
    596           -fdump-class-hierarchy[-N]
    597           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
    598           -fdump-passes
    599           -fdump-statistics
    600           -fdump-tree-all
    601           -fdump-tree-original[-N]
    602           -fdump-tree-optimized[-N]
    603           -fdump-tree-cfg -fdump-tree-alias
    604           -fdump-tree-ch
    605           -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
    606           -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
    607           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
    608           -fdump-tree-dom[-N]
    609           -fdump-tree-dse[-N]
    610           -fdump-tree-phiprop[-N]
    611           -fdump-tree-phiopt[-N]
    612           -fdump-tree-forwprop[-N]
    613           -fdump-tree-copyrename[-N]
    614           -fdump-tree-nrv -fdump-tree-vect
    615           -fdump-tree-sink
    616           -fdump-tree-sra[-N]
    617           -fdump-tree-forwprop[-N]
    618           -fdump-tree-fre[-N]
    619           -fdump-tree-vrp[-N]
    620           -ftree-vectorizer-verbose=N
    621           -fdump-tree-storeccp[-N]
    622           -fdump-final-insns=FILE
    623           -fcompare-debug[=OPTS]  -fcompare-debug-second
    624           -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
    625           -feliminate-unused-debug-symbols -femit-class-debug-always
    626           -fenable-KIND-PASS
    627           -fenable-KIND-PASS=RANGE-LIST
    628           -fdebug-types-section -fmem-report-wpa
    629           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
    630           -fopt-info
    631           -fopt-info-OPTIONS[=FILE]
    632           -frandom-seed=STRING -fsched-verbose=N
    633           -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
    634           -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
    635           -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
    636           -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
    637           -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
    638           -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
    639           -gvms  -gxcoff  -gxcoff+
    640           -fno-merge-debug-strings -fno-dwarf2-cfi-asm
    641           -fdebug-prefix-map=OLD=NEW
    642           -femit-struct-debug-baseonly -femit-struct-debug-reduced
    643           -femit-struct-debug-detailed[=SPEC-LIST]
    644           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
    645           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
    646           -print-prog-name=PROGRAM  -print-search-dirs  -Q
    647           -print-sysroot -print-sysroot-headers-suffix
    648           -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
    649 
    650 _Optimization Options_
    651      *Note Options that Control Optimization: Optimize Options.
    652           -faggressive-loop-optimizations -falign-functions[=N]
    653           -falign-jumps[=N]
    654           -falign-labels[=N] -falign-loops[=N]
    655           -fassociative-math -fauto-inc-dec -fbranch-probabilities
    656           -fbranch-target-load-optimize -fbranch-target-load-optimize2
    657           -fbtr-bb-exclusive -fcaller-saves
    658           -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
    659           -fcompare-elim -fcprop-registers -fcrossjumping
    660           -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
    661           -fcx-limited-range
    662           -fdata-sections -fdce -fdelayed-branch
    663           -fdelete-null-pointer-checks -fdevirtualize -fdse
    664           -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
    665           -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
    666           -fforward-propagate -ffp-contract=STYLE -ffunction-sections
    667           -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
    668           -fgcse-sm -fhoist-adjacent-loads -fif-conversion
    669           -fif-conversion2 -findirect-inlining
    670           -finline-functions -finline-functions-called-once -finline-limit=N
    671           -finline-small-functions -fipa-cp -fipa-cp-clone
    672           -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
    673           -fira-algorithm=ALGORITHM
    674           -fira-region=REGION -fira-hoist-pressure
    675           -fira-loop-pressure -fno-ira-share-save-slots
    676           -fno-ira-share-spill-slots -fira-verbose=N
    677           -fivopts -fkeep-inline-functions -fkeep-static-consts
    678           -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize
    679           -floop-parallelize-all -flto -flto-compression-level
    680           -flto-partition=ALG -flto-report -fmerge-all-constants
    681           -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
    682           -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
    683           -fno-default-inline
    684           -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
    685           -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
    686           -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
    687           -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
    688           -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
    689           -fpartial-inlining -fpeel-loops -fpredictive-commoning
    690           -fprefetch-loop-arrays -fprofile-report
    691           -fprofile-correction -fprofile-dir=PATH -fprofile-generate
    692           -fprofile-generate=PATH
    693           -fprofile-use -fprofile-use=PATH -fprofile-values
    694           -freciprocal-math -free -fregmove -frename-registers -freorder-blocks
    695           -freorder-blocks-and-partition -freorder-functions
    696           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
    697           -frounding-math -fsched2-use-superblocks -fsched-pressure
    698           -fsched-spec-load -fsched-spec-load-dangerous
    699           -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
    700           -fsched-group-heuristic -fsched-critical-path-heuristic
    701           -fsched-spec-insn-heuristic -fsched-rank-heuristic
    702           -fsched-last-insn-heuristic -fsched-dep-count-heuristic
    703           -fschedule-insns -fschedule-insns2 -fsection-anchors
    704           -fselective-scheduling -fselective-scheduling2
    705           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
    706           -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
    707           -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector
    708           -fstack-protector-all -fstrict-aliasing -fstrict-overflow
    709           -fthread-jumps -ftracer -ftree-bit-ccp
    710           -ftree-builtin-call-dce -ftree-ccp -ftree-ch
    711           -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
    712           -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
    713           -ftree-forwprop -ftree-fre -ftree-loop-if-convert
    714           -ftree-loop-if-convert-stores -ftree-loop-im
    715           -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
    716           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
    717           -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
    718           -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
    719           -ftree-switch-conversion -ftree-tail-merge
    720           -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
    721           -funit-at-a-time -funroll-all-loops -funroll-loops
    722           -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
    723           -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
    724           -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin
    725           --param NAME=VALUE
    726           -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
    727 
    728 _Preprocessor Options_
    729      *Note Options Controlling the Preprocessor: Preprocessor Options.
    730           -AQUESTION=ANSWER
    731           -A-QUESTION[=ANSWER]
    732           -C  -dD  -dI  -dM  -dN
    733           -DMACRO[=DEFN]  -E  -H
    734           -idirafter DIR
    735           -include FILE  -imacros FILE
    736           -iprefix FILE  -iwithprefix DIR
    737           -iwithprefixbefore DIR  -isystem DIR
    738           -imultilib DIR -isysroot DIR
    739           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
    740           -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
    741           -remap -trigraphs  -undef  -UMACRO
    742           -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
    743 
    744 _Assembler Option_
    745      *Note Passing Options to the Assembler: Assembler Options.
    746           -Wa,OPTION  -Xassembler OPTION
    747 
    748 _Linker Options_
    749      *Note Options for Linking: Link Options.
    750           OBJECT-FILE-NAME  -lLIBRARY
    751           -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
    752           -s  -static -static-libgcc -static-libstdc++
    753           -static-libasan -static-libtsan
    754           -shared -shared-libgcc  -symbolic
    755           -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
    756           -u SYMBOL
    757 
    758 _Directory Options_
    759      *Note Options for Directory Search: Directory Options.
    760           -BPREFIX -IDIR -iplugindir=DIR
    761           -iquoteDIR -LDIR -specs=FILE -I-
    762           --sysroot=DIR --no-sysroot-suffix
    763 
    764 _Machine Dependent Options_
    765      *Note Hardware Models and Configurations: Submodel Options.
    766 
    767      _AArch64 Options_
    768           -mbig-endian  -mlittle-endian
    769           -mgeneral-regs-only
    770           -mcmodel=tiny  -mcmodel=small  -mcmodel=large
    771           -mstrict-align
    772           -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
    773           -mtls-dialect=desc  -mtls-dialect=traditional
    774           -march=NAME  -mcpu=NAME  -mtune=NAME
    775 
    776      _Adapteva Epiphany Options_
    777           -mhalf-reg-file -mprefer-short-insn-regs
    778           -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
    779           -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
    780           -mround-nearest -mlong-calls -mshort-calls -msmall16
    781           -mfp-mode=MODE -mvect-double -max-vect-align=NUM
    782           -msplit-vecmove-early -m1reg-REG
    783 
    784      _ARM Options_
    785           -mapcs-frame  -mno-apcs-frame
    786           -mabi=NAME
    787           -mapcs-stack-check  -mno-apcs-stack-check
    788           -mapcs-float  -mno-apcs-float
    789           -mapcs-reentrant  -mno-apcs-reentrant
    790           -msched-prolog  -mno-sched-prolog
    791           -mlittle-endian  -mbig-endian  -mwords-little-endian
    792           -mfloat-abi=NAME
    793           -mfp16-format=NAME
    794           -mthumb-interwork  -mno-thumb-interwork
    795           -mcpu=NAME  -march=NAME  -mfpu=NAME
    796           -mstructure-size-boundary=N
    797           -mabort-on-noreturn
    798           -mlong-calls  -mno-long-calls
    799           -msingle-pic-base  -mno-single-pic-base
    800           -mpic-register=REG
    801           -mnop-fun-dllimport
    802           -mpoke-function-name
    803           -mthumb  -marm
    804           -mtpcs-frame  -mtpcs-leaf-frame
    805           -mcaller-super-interworking  -mcallee-super-interworking
    806           -mtp=NAME -mtls-dialect=DIALECT
    807           -mword-relocations
    808           -mfix-cortex-m3-ldrd
    809           -munaligned-access
    810 
    811      _AVR Options_
    812           -mmcu=MCU -maccumulate-args -mbranch-cost=COST
    813           -mcall-prologues -mint8 -mno-interrupts -mrelax
    814           -mstrict-X -mtiny-stack -Waddr-space-convert
    815 
    816      _Blackfin Options_
    817           -mcpu=CPU[-SIREVISION]
    818           -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
    819           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
    820           -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
    821           -mno-id-shared-library  -mshared-library-id=N
    822           -mleaf-id-shared-library  -mno-leaf-id-shared-library
    823           -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
    824           -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
    825           -micplb
    826 
    827      _C6X Options_
    828           -mbig-endian  -mlittle-endian -march=CPU
    829           -msim -msdata=SDATA-TYPE
    830 
    831      _CRIS Options_
    832           -mcpu=CPU  -march=CPU  -mtune=CPU
    833           -mmax-stack-frame=N  -melinux-stacksize=N
    834           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
    835           -mstack-align  -mdata-align  -mconst-align
    836           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
    837           -melf  -maout  -melinux  -mlinux  -sim  -sim2
    838           -mmul-bug-workaround  -mno-mul-bug-workaround
    839 
    840      _CR16 Options_
    841           -mmac
    842           -mcr16cplus -mcr16c
    843           -msim -mint32 -mbit-ops
    844           -mdata-model=MODEL
    845 
    846      _Darwin Options_
    847           -all_load  -allowable_client  -arch  -arch_errors_fatal
    848           -arch_only  -bind_at_load  -bundle  -bundle_loader
    849           -client_name  -compatibility_version  -current_version
    850           -dead_strip
    851           -dependency-file  -dylib_file  -dylinker_install_name
    852           -dynamic  -dynamiclib  -exported_symbols_list
    853           -filelist  -flat_namespace  -force_cpusubtype_ALL
    854           -force_flat_namespace  -headerpad_max_install_names
    855           -iframework
    856           -image_base  -init  -install_name  -keep_private_externs
    857           -multi_module  -multiply_defined  -multiply_defined_unused
    858           -noall_load   -no_dead_strip_inits_and_terms
    859           -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
    860           -pagezero_size  -prebind  -prebind_all_twolevel_modules
    861           -private_bundle  -read_only_relocs  -sectalign
    862           -sectobjectsymbols  -whyload  -seg1addr
    863           -sectcreate  -sectobjectsymbols  -sectorder
    864           -segaddr -segs_read_only_addr -segs_read_write_addr
    865           -seg_addr_table  -seg_addr_table_filename  -seglinkedit
    866           -segprot  -segs_read_only_addr  -segs_read_write_addr
    867           -single_module  -static  -sub_library  -sub_umbrella
    868           -twolevel_namespace  -umbrella  -undefined
    869           -unexported_symbols_list  -weak_reference_mismatches
    870           -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
    871           -mkernel -mone-byte-bool
    872 
    873      _DEC Alpha Options_
    874           -mno-fp-regs  -msoft-float
    875           -mieee  -mieee-with-inexact  -mieee-conformant
    876           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
    877           -mtrap-precision=MODE  -mbuild-constants
    878           -mcpu=CPU-TYPE  -mtune=CPU-TYPE
    879           -mbwx  -mmax  -mfix  -mcix
    880           -mfloat-vax  -mfloat-ieee
    881           -mexplicit-relocs  -msmall-data  -mlarge-data
    882           -msmall-text  -mlarge-text
    883           -mmemory-latency=TIME
    884 
    885      _FR30 Options_
    886           -msmall-model -mno-lsim
    887 
    888      _FRV Options_
    889           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
    890           -mhard-float  -msoft-float
    891           -malloc-cc  -mfixed-cc  -mdword  -mno-dword
    892           -mdouble  -mno-double
    893           -mmedia  -mno-media  -mmuladd  -mno-muladd
    894           -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
    895           -mlinked-fp  -mlong-calls  -malign-labels
    896           -mlibrary-pic  -macc-4  -macc-8
    897           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
    898           -moptimize-membar -mno-optimize-membar
    899           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
    900           -mvliw-branch  -mno-vliw-branch
    901           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
    902           -mno-nested-cond-exec  -mtomcat-stats
    903           -mTLS -mtls
    904           -mcpu=CPU
    905 
    906      _GNU/Linux Options_
    907           -mglibc -muclibc -mbionic -mandroid
    908           -tno-android-cc -tno-android-ld
    909 
    910      _H8/300 Options_
    911           -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
    912 
    913      _HPPA Options_
    914           -march=ARCHITECTURE-TYPE
    915           -mbig-switch  -mdisable-fpregs  -mdisable-indexing
    916           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
    917           -mfixed-range=REGISTER-RANGE
    918           -mjump-in-delay -mlinker-opt -mlong-calls
    919           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
    920           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
    921           -mno-jump-in-delay  -mno-long-load-store
    922           -mno-portable-runtime  -mno-soft-float
    923           -mno-space-regs  -msoft-float  -mpa-risc-1-0
    924           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
    925           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
    926           -munix=UNIX-STD  -nolibdld  -static  -threads
    927 
    928      _i386 and x86-64 Options_
    929           -mtune=CPU-TYPE  -march=CPU-TYPE
    930           -mfpmath=UNIT
    931           -masm=DIALECT  -mno-fancy-math-387
    932           -mno-fp-ret-in-387  -msoft-float
    933           -mno-wide-multiply  -mrtd  -malign-double
    934           -mpreferred-stack-boundary=NUM
    935           -mincoming-stack-boundary=NUM
    936           -mcld -mcx16 -msahf -mmovbe -mcrc32
    937           -mrecip -mrecip=OPT
    938           -mvzeroupper -mprefer-avx128
    939           -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
    940           -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma
    941           -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
    942           -mbmi2 -mrtm -mlwp -mthreads
    943           -mno-align-stringops  -minline-all-stringops
    944           -minline-stringops-dynamically -mstringop-strategy=ALG
    945           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
    946           -m96bit-long-double -mlong-double-64 -mlong-double-80
    947           -mregparm=NUM  -msseregparm
    948           -mveclibabi=TYPE -mvect8-ret-in-mem
    949           -mpc32 -mpc64 -mpc80 -mstackrealign
    950           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
    951           -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
    952           -m32 -m64 -mx32 -mlarge-data-threshold=NUM
    953           -msse2avx -mfentry -m8bit-idiv
    954           -mavx256-split-unaligned-load -mavx256-split-unaligned-store
    955 
    956      _i386 and x86-64 Windows Options_
    957           -mconsole -mcygwin -mno-cygwin -mdll
    958           -mnop-fun-dllimport -mthread
    959           -municode -mwin32 -mwindows -fno-set-stack-executable
    960 
    961      _IA-64 Options_
    962           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
    963           -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
    964           -mconstant-gp  -mauto-pic  -mfused-madd
    965           -minline-float-divide-min-latency
    966           -minline-float-divide-max-throughput
    967           -mno-inline-float-divide
    968           -minline-int-divide-min-latency
    969           -minline-int-divide-max-throughput
    970           -mno-inline-int-divide
    971           -minline-sqrt-min-latency -minline-sqrt-max-throughput
    972           -mno-inline-sqrt
    973           -mdwarf2-asm -mearly-stop-bits
    974           -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
    975           -mtune=CPU-TYPE -milp32 -mlp64
    976           -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
    977           -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
    978           -msched-spec-ldc -msched-spec-control-ldc
    979           -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
    980           -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
    981           -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
    982           -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
    983 
    984      _LM32 Options_
    985           -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
    986           -msign-extend-enabled -muser-enabled
    987 
    988      _M32R/D Options_
    989           -m32r2 -m32rx -m32r
    990           -mdebug
    991           -malign-loops -mno-align-loops
    992           -missue-rate=NUMBER
    993           -mbranch-cost=NUMBER
    994           -mmodel=CODE-SIZE-MODEL-TYPE
    995           -msdata=SDATA-TYPE
    996           -mno-flush-func -mflush-func=NAME
    997           -mno-flush-trap -mflush-trap=NUMBER
    998           -G NUM
    999 
   1000      _M32C Options_
   1001           -mcpu=CPU -msim -memregs=NUMBER
   1002 
   1003      _M680x0 Options_
   1004           -march=ARCH  -mcpu=CPU  -mtune=TUNE
   1005           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
   1006           -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
   1007           -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
   1008           -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
   1009           -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
   1010           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
   1011           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
   1012           -mxgot -mno-xgot
   1013 
   1014      _MCore Options_
   1015           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
   1016           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
   1017           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
   1018           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
   1019           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
   1020 
   1021      _MeP Options_
   1022           -mabsdiff -mall-opts -maverage -mbased=N -mbitops
   1023           -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
   1024           -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
   1025           -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
   1026           -mtiny=N
   1027 
   1028      _MicroBlaze Options_
   1029           -msoft-float -mhard-float -msmall-divides -mcpu=CPU
   1030           -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
   1031           -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
   1032           -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
   1033           -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
   1034 
   1035      _MIPS Options_
   1036           -EL  -EB  -march=ARCH  -mtune=ARCH
   1037           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
   1038           -mips64  -mips64r2
   1039           -mips16  -mno-mips16  -mflip-mips16
   1040           -minterlink-mips16  -mno-interlink-mips16
   1041           -mabi=ABI  -mabicalls  -mno-abicalls
   1042           -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
   1043           -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
   1044           -mno-float -msingle-float  -mdouble-float
   1045           -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
   1046           -mmcu -mmno-mcu
   1047           -mfpu=FPU-TYPE
   1048           -msmartmips  -mno-smartmips
   1049           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
   1050           -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
   1051           -mlong64  -mlong32  -msym32  -mno-sym32
   1052           -GNUM  -mlocal-sdata  -mno-local-sdata
   1053           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
   1054           -membedded-data  -mno-embedded-data
   1055           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
   1056           -mcode-readable=SETTING
   1057           -msplit-addresses  -mno-split-addresses
   1058           -mexplicit-relocs  -mno-explicit-relocs
   1059           -mcheck-zero-division  -mno-check-zero-division
   1060           -mdivide-traps  -mdivide-breaks
   1061           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
   1062           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
   1063           -mfix-24k -mno-fix-24k
   1064           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
   1065           -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
   1066           -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
   1067           -mflush-func=FUNC  -mno-flush-func
   1068           -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
   1069           -mfp-exceptions -mno-fp-exceptions
   1070           -mvr4130-align -mno-vr4130-align -msynci -mno-synci
   1071           -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
   1072 
   1073      _MMIX Options_
   1074           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
   1075           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
   1076           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
   1077           -mno-base-addresses  -msingle-exit  -mno-single-exit
   1078 
   1079      _MN10300 Options_
   1080           -mmult-bug  -mno-mult-bug
   1081           -mno-am33 -mam33 -mam33-2 -mam34
   1082           -mtune=CPU-TYPE
   1083           -mreturn-pointer-on-d0
   1084           -mno-crt0  -mrelax -mliw -msetlb
   1085 
   1086      _Moxie Options_
   1087           -meb -mel -mno-crt0
   1088 
   1089      _PDP-11 Options_
   1090           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
   1091           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
   1092           -mint16  -mno-int32  -mfloat32  -mno-float64
   1093           -mfloat64  -mno-float32  -mabshi  -mno-abshi
   1094           -mbranch-expensive  -mbranch-cheap
   1095           -munix-asm  -mdec-asm
   1096 
   1097      _picoChip Options_
   1098           -mae=AE_TYPE -mvliw-lookahead=N
   1099           -msymbol-as-address -mno-inefficient-warnings
   1100 
   1101      _PowerPC Options_ See RS/6000 and PowerPC Options.
   1102 
   1103      _RL78 Options_
   1104           -msim -mmul=none -mmul=g13 -mmul=rl78
   1105 
   1106      _RS/6000 and PowerPC Options_
   1107           -mcpu=CPU-TYPE
   1108           -mtune=CPU-TYPE
   1109           -mcmodel=CODE-MODEL
   1110           -mpowerpc64
   1111           -maltivec  -mno-altivec
   1112           -mpowerpc-gpopt  -mno-powerpc-gpopt
   1113           -mpowerpc-gfxopt  -mno-powerpc-gfxopt
   1114           -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
   1115           -mfprnd  -mno-fprnd
   1116           -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
   1117           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
   1118           -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
   1119           -malign-power  -malign-natural
   1120           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
   1121           -msingle-float -mdouble-float -msimple-fpu
   1122           -mstring  -mno-string  -mupdate  -mno-update
   1123           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
   1124           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
   1125           -mstrict-align  -mno-strict-align  -mrelocatable
   1126           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
   1127           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
   1128           -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
   1129           -mprioritize-restricted-insns=PRIORITY
   1130           -msched-costly-dep=DEPENDENCE_TYPE
   1131           -minsert-sched-nops=SCHEME
   1132           -mcall-sysv  -mcall-netbsd
   1133           -maix-struct-return  -msvr4-struct-return
   1134           -mabi=ABI-TYPE -msecure-plt -mbss-plt
   1135           -mblock-move-inline-limit=NUM
   1136           -misel -mno-isel
   1137           -misel=yes  -misel=no
   1138           -mspe -mno-spe
   1139           -mspe=yes  -mspe=no
   1140           -mpaired
   1141           -mgen-cell-microcode -mwarn-cell-microcode
   1142           -mvrsave -mno-vrsave
   1143           -mmulhw -mno-mulhw
   1144           -mdlmzb -mno-dlmzb
   1145           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
   1146           -mprototype  -mno-prototype
   1147           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
   1148           -msdata=OPT  -mvxworks  -G NUM  -pthread
   1149           -mrecip -mrecip=OPT -mno-recip -mrecip-precision
   1150           -mno-recip-precision
   1151           -mveclibabi=TYPE -mfriz -mno-friz
   1152           -mpointers-to-nested-functions -mno-pointers-to-nested-functions
   1153           -msave-toc-indirect -mno-save-toc-indirect
   1154           -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
   1155           -mcrypto -mno-crypto -mdirect-move -mno-direct-move
   1156           -mquad-memory -mno-quad-memory
   1157           -mquad-memory-atomic -mno-quad-memory-atomic
   1158           -mcompat-align-parm -mno-compat-align-parm
   1159 
   1160      _RX Options_
   1161           -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
   1162           -mcpu=
   1163           -mbig-endian-data -mlittle-endian-data
   1164           -msmall-data
   1165           -msim  -mno-sim
   1166           -mas100-syntax -mno-as100-syntax
   1167           -mrelax
   1168           -mmax-constant-size=
   1169           -mint-register=
   1170           -mpid
   1171           -mno-warn-multiple-fast-interrupts
   1172           -msave-acc-in-interrupts
   1173 
   1174      _S/390 and zSeries Options_
   1175           -mtune=CPU-TYPE  -march=CPU-TYPE
   1176           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
   1177           -mlong-double-64 -mlong-double-128
   1178           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
   1179           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
   1180           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
   1181           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
   1182           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
   1183           -mhotpatch[=HALFWORDS] -mno-hotpatch
   1184 
   1185      _Score Options_
   1186           -meb -mel
   1187           -mnhwloop
   1188           -muls
   1189           -mmac
   1190           -mscore5 -mscore5u -mscore7 -mscore7d
   1191 
   1192      _SH Options_
   1193           -m1  -m2  -m2e
   1194           -m2a-nofpu -m2a-single-only -m2a-single -m2a
   1195           -m3  -m3e
   1196           -m4-nofpu  -m4-single-only  -m4-single  -m4
   1197           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
   1198           -m5-64media  -m5-64media-nofpu
   1199           -m5-32media  -m5-32media-nofpu
   1200           -m5-compact  -m5-compact-nofpu
   1201           -mb  -ml  -mdalign  -mrelax
   1202           -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
   1203           -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
   1204           -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
   1205           -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
   1206           -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
   1207           -maccumulate-outgoing-args -minvalid-symbols
   1208           -matomic-model=ATOMIC-MODEL
   1209           -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch -mcbranchdi -mcmpeqdi
   1210           -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
   1211           -mpretend-cmove -mtas
   1212 
   1213      _Solaris 2 Options_
   1214           -mimpure-text  -mno-impure-text
   1215           -pthreads -pthread
   1216 
   1217      _SPARC Options_
   1218           -mcpu=CPU-TYPE
   1219           -mtune=CPU-TYPE
   1220           -mcmodel=CODE-MODEL
   1221           -mmemory-model=MEM-MODEL
   1222           -m32  -m64  -mapp-regs  -mno-app-regs
   1223           -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
   1224           -mfpu  -mno-fpu  -mhard-float  -msoft-float
   1225           -mhard-quad-float  -msoft-quad-float
   1226           -mstack-bias  -mno-stack-bias
   1227           -munaligned-doubles  -mno-unaligned-doubles
   1228           -muser-mode  -mno-user-mode
   1229           -mv8plus  -mno-v8plus  -mvis  -mno-vis
   1230           -mvis2  -mno-vis2  -mvis3  -mno-vis3
   1231           -mcbcond -mno-cbcond
   1232           -mfmaf  -mno-fmaf  -mpopc  -mno-popc
   1233           -mfix-at697f -mfix-ut699
   1234 
   1235      _SPU Options_
   1236           -mwarn-reloc -merror-reloc
   1237           -msafe-dma -munsafe-dma
   1238           -mbranch-hints
   1239           -msmall-mem -mlarge-mem -mstdmain
   1240           -mfixed-range=REGISTER-RANGE
   1241           -mea32 -mea64
   1242           -maddress-space-conversion -mno-address-space-conversion
   1243           -mcache-size=CACHE-SIZE
   1244           -matomic-updates -mno-atomic-updates
   1245 
   1246      _System V Options_
   1247           -Qy  -Qn  -YP,PATHS  -Ym,DIR
   1248 
   1249      _TILE-Gx Options_
   1250           -mcpu=CPU -m32 -m64 -mcmodel=CODE-MODEL
   1251 
   1252      _TILEPro Options_
   1253           -mcpu=CPU -m32
   1254 
   1255      _V850 Options_
   1256           -mlong-calls  -mno-long-calls  -mep  -mno-ep
   1257           -mprolog-function  -mno-prolog-function  -mspace
   1258           -mtda=N  -msda=N  -mzda=N
   1259           -mapp-regs  -mno-app-regs
   1260           -mdisable-callt  -mno-disable-callt
   1261           -mv850e2v3 -mv850e2 -mv850e1 -mv850es
   1262           -mv850e -mv850 -mv850e3v5
   1263           -mloop
   1264           -mrelax
   1265           -mlong-jumps
   1266           -msoft-float
   1267           -mhard-float
   1268           -mgcc-abi
   1269           -mrh850-abi
   1270           -mbig-switch
   1271 
   1272      _VAX Options_
   1273           -mg  -mgnu  -munix
   1274 
   1275      _VMS Options_
   1276           -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
   1277           -mpointer-size=SIZE
   1278 
   1279      _VxWorks Options_
   1280           -mrtp  -non-static  -Bstatic  -Bdynamic
   1281           -Xbind-lazy  -Xbind-now
   1282 
   1283      _x86-64 Options_ See i386 and x86-64 Options.
   1284 
   1285      _Xstormy16 Options_
   1286           -msim
   1287 
   1288      _Xtensa Options_
   1289           -mconst16 -mno-const16
   1290           -mfused-madd  -mno-fused-madd
   1291           -mforce-no-pic
   1292           -mserialize-volatile  -mno-serialize-volatile
   1293           -mtext-section-literals  -mno-text-section-literals
   1294           -mtarget-align  -mno-target-align
   1295           -mlongcalls  -mno-longcalls
   1296 
   1297      _zSeries Options_ See S/390 and zSeries Options.
   1298 
   1299 _Code Generation Options_
   1300      *Note Options for Code Generation Conventions: Code Gen Options.
   1301           -fcall-saved-REG  -fcall-used-REG
   1302           -ffixed-REG  -fexceptions
   1303           -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
   1304           -fasynchronous-unwind-tables
   1305           -finhibit-size-directive  -finstrument-functions
   1306           -finstrument-functions-exclude-function-list=SYM,SYM,...
   1307           -finstrument-functions-exclude-file-list=FILE,FILE,...
   1308           -fno-common  -fno-ident
   1309           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
   1310           -fno-jump-tables
   1311           -frecord-gcc-switches
   1312           -freg-struct-return  -fshort-enums
   1313           -fshort-double  -fshort-wchar
   1314           -fverbose-asm  -fpack-struct[=N]  -fstack-check
   1315           -fstack-limit-register=REG  -fstack-limit-symbol=SYM
   1316           -fno-stack-limit -fsplit-stack
   1317           -fleading-underscore  -ftls-model=MODEL
   1318           -fstack-reuse=REUSE_LEVEL
   1319           -ftrapv  -fwrapv  -fbounds-check
   1320           -fvisibility -fstrict-volatile-bitfields -fsync-libcalls
   1321 
   1322 * Menu:
   1323 
   1324 * Overall Options::     Controlling the kind of output:
   1325                         an executable, object files, assembler files,
   1326                         or preprocessed source.
   1327 * C Dialect Options::   Controlling the variant of C language compiled.
   1328 * C++ Dialect Options:: Variations on C++.
   1329 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
   1330                         and Objective-C++.
   1331 * Language Independent Options:: Controlling how diagnostics should be
   1332                         formatted.
   1333 * Warning Options::     How picky should the compiler be?
   1334 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
   1335 * Optimize Options::    How much optimization?
   1336 * Preprocessor Options:: Controlling header files and macro definitions.
   1337                          Also, getting dependency information for Make.
   1338 * Assembler Options::   Passing options to the assembler.
   1339 * Link Options::        Specifying libraries and so on.
   1340 * Directory Options::   Where to find header files and libraries.
   1341                         Where to find the compiler executable files.
   1342 * Spec Files::          How to pass switches to sub-processes.
   1343 * Target Options::      Running a cross-compiler, or an old version of GCC.
   1344 
   1345 
   1346 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
   1347 
   1348 3.2 Options Controlling the Kind of Output
   1349 ==========================================
   1350 
   1351 Compilation can involve up to four stages: preprocessing, compilation
   1352 proper, assembly and linking, always in that order.  GCC is capable of
   1353 preprocessing and compiling several files either into several assembler
   1354 input files, or into one assembler input file; then each assembler input
   1355 file produces an object file, and linking combines all the object files
   1356 (those newly compiled, and those specified as input) into an executable
   1357 file.
   1358 
   1359  For any given input file, the file name suffix determines what kind of
   1360 compilation is done:
   1361 
   1362 'FILE.c'
   1363      C source code that must be preprocessed.
   1364 
   1365 'FILE.i'
   1366      C source code that should not be preprocessed.
   1367 
   1368 'FILE.ii'
   1369      C++ source code that should not be preprocessed.
   1370 
   1371 'FILE.m'
   1372      Objective-C source code.  Note that you must link with the
   1373      'libobjc' library to make an Objective-C program work.
   1374 
   1375 'FILE.mi'
   1376      Objective-C source code that should not be preprocessed.
   1377 
   1378 'FILE.mm'
   1379 'FILE.M'
   1380      Objective-C++ source code.  Note that you must link with the
   1381      'libobjc' library to make an Objective-C++ program work.  Note that
   1382      '.M' refers to a literal capital M.
   1383 
   1384 'FILE.mii'
   1385      Objective-C++ source code that should not be preprocessed.
   1386 
   1387 'FILE.h'
   1388      C, C++, Objective-C or Objective-C++ header file to be turned into
   1389      a precompiled header (default), or C, C++ header file to be turned
   1390      into an Ada spec (via the '-fdump-ada-spec' switch).
   1391 
   1392 'FILE.cc'
   1393 'FILE.cp'
   1394 'FILE.cxx'
   1395 'FILE.cpp'
   1396 'FILE.CPP'
   1397 'FILE.c++'
   1398 'FILE.C'
   1399      C++ source code that must be preprocessed.  Note that in '.cxx',
   1400      the last two letters must both be literally 'x'.  Likewise, '.C'
   1401      refers to a literal capital C.
   1402 
   1403 'FILE.mm'
   1404 'FILE.M'
   1405      Objective-C++ source code that must be preprocessed.
   1406 
   1407 'FILE.mii'
   1408      Objective-C++ source code that should not be preprocessed.
   1409 
   1410 'FILE.hh'
   1411 'FILE.H'
   1412 'FILE.hp'
   1413 'FILE.hxx'
   1414 'FILE.hpp'
   1415 'FILE.HPP'
   1416 'FILE.h++'
   1417 'FILE.tcc'
   1418      C++ header file to be turned into a precompiled header or Ada spec.
   1419 
   1420 'FILE.f'
   1421 'FILE.for'
   1422 'FILE.ftn'
   1423      Fixed form Fortran source code that should not be preprocessed.
   1424 
   1425 'FILE.F'
   1426 'FILE.FOR'
   1427 'FILE.fpp'
   1428 'FILE.FPP'
   1429 'FILE.FTN'
   1430      Fixed form Fortran source code that must be preprocessed (with the
   1431      traditional preprocessor).
   1432 
   1433 'FILE.f90'
   1434 'FILE.f95'
   1435 'FILE.f03'
   1436 'FILE.f08'
   1437      Free form Fortran source code that should not be preprocessed.
   1438 
   1439 'FILE.F90'
   1440 'FILE.F95'
   1441 'FILE.F03'
   1442 'FILE.F08'
   1443      Free form Fortran source code that must be preprocessed (with the
   1444      traditional preprocessor).
   1445 
   1446 'FILE.go'
   1447      Go source code.
   1448 
   1449 'FILE.ads'
   1450      Ada source code file that contains a library unit declaration (a
   1451      declaration of a package, subprogram, or generic, or a generic
   1452      instantiation), or a library unit renaming declaration (a package,
   1453      generic, or subprogram renaming declaration).  Such files are also
   1454      called "specs".
   1455 
   1456 'FILE.adb'
   1457      Ada source code file containing a library unit body (a subprogram
   1458      or package body).  Such files are also called "bodies".
   1459 
   1460 'FILE.s'
   1461      Assembler code.
   1462 
   1463 'FILE.S'
   1464 'FILE.sx'
   1465      Assembler code that must be preprocessed.
   1466 
   1467 'OTHER'
   1468      An object file to be fed straight into linking.  Any file name with
   1469      no recognized suffix is treated this way.
   1470 
   1471  You can specify the input language explicitly with the '-x' option:
   1472 
   1473 '-x LANGUAGE'
   1474      Specify explicitly the LANGUAGE for the following input files
   1475      (rather than letting the compiler choose a default based on the
   1476      file name suffix).  This option applies to all following input
   1477      files until the next '-x' option.  Possible values for LANGUAGE
   1478      are:
   1479           c  c-header  cpp-output
   1480           c++  c++-header  c++-cpp-output
   1481           objective-c  objective-c-header  objective-c-cpp-output
   1482           objective-c++ objective-c++-header objective-c++-cpp-output
   1483           assembler  assembler-with-cpp
   1484           ada
   1485           f77  f77-cpp-input f95  f95-cpp-input
   1486           go
   1487           java
   1488 
   1489 '-x none'
   1490      Turn off any specification of a language, so that subsequent files
   1491      are handled according to their file name suffixes (as they are if
   1492      '-x' has not been used at all).
   1493 
   1494 '-pass-exit-codes'
   1495      Normally the 'gcc' program exits with the code of 1 if any phase of
   1496      the compiler returns a non-success return code.  If you specify
   1497      '-pass-exit-codes', the 'gcc' program instead returns with the
   1498      numerically highest error produced by any phase returning an error
   1499      indication.  The C, C++, and Fortran front ends return 4 if an
   1500      internal compiler error is encountered.
   1501 
   1502  If you only want some of the stages of compilation, you can use '-x'
   1503 (or filename suffixes) to tell 'gcc' where to start, and one of the
   1504 options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
   1505 some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
   1506 nothing at all.
   1507 
   1508 '-c'
   1509      Compile or assemble the source files, but do not link.  The linking
   1510      stage simply is not done.  The ultimate output is in the form of an
   1511      object file for each source file.
   1512 
   1513      By default, the object file name for a source file is made by
   1514      replacing the suffix '.c', '.i', '.s', etc., with '.o'.
   1515 
   1516      Unrecognized input files, not requiring compilation or assembly,
   1517      are ignored.
   1518 
   1519 '-S'
   1520      Stop after the stage of compilation proper; do not assemble.  The
   1521      output is in the form of an assembler code file for each
   1522      non-assembler input file specified.
   1523 
   1524      By default, the assembler file name for a source file is made by
   1525      replacing the suffix '.c', '.i', etc., with '.s'.
   1526 
   1527      Input files that don't require compilation are ignored.
   1528 
   1529 '-E'
   1530      Stop after the preprocessing stage; do not run the compiler proper.
   1531      The output is in the form of preprocessed source code, which is
   1532      sent to the standard output.
   1533 
   1534      Input files that don't require preprocessing are ignored.
   1535 
   1536 '-o FILE'
   1537      Place output in file FILE.  This applies to whatever sort of output
   1538      is being produced, whether it be an executable file, an object
   1539      file, an assembler file or preprocessed C code.
   1540 
   1541      If '-o' is not specified, the default is to put an executable file
   1542      in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
   1543      assembler file in 'SOURCE.s', a precompiled header file in
   1544      'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
   1545      output.
   1546 
   1547 '-v'
   1548      Print (on standard error output) the commands executed to run the
   1549      stages of compilation.  Also print the version number of the
   1550      compiler driver program and of the preprocessor and the compiler
   1551      proper.
   1552 
   1553 '-###'
   1554      Like '-v' except the commands are not executed and arguments are
   1555      quoted unless they contain only alphanumeric characters or './-_'.
   1556      This is useful for shell scripts to capture the driver-generated
   1557      command lines.
   1558 
   1559 '-pipe'
   1560      Use pipes rather than temporary files for communication between the
   1561      various stages of compilation.  This fails to work on some systems
   1562      where the assembler is unable to read from a pipe; but the GNU
   1563      assembler has no trouble.
   1564 
   1565 '--help'
   1566      Print (on the standard output) a description of the command-line
   1567      options understood by 'gcc'.  If the '-v' option is also specified
   1568      then '--help' is also passed on to the various processes invoked by
   1569      'gcc', so that they can display the command-line options they
   1570      accept.  If the '-Wextra' option has also been specified (prior to
   1571      the '--help' option), then command-line options that have no
   1572      documentation associated with them are also displayed.
   1573 
   1574 '--target-help'
   1575      Print (on the standard output) a description of target-specific
   1576      command-line options for each tool.  For some targets extra
   1577      target-specific information may also be printed.
   1578 
   1579 '--help={CLASS|[^]QUALIFIER}[,...]'
   1580      Print (on the standard output) a description of the command-line
   1581      options understood by the compiler that fit into all specified
   1582      classes and qualifiers.  These are the supported classes:
   1583 
   1584      'optimizers'
   1585           Display all of the optimization options supported by the
   1586           compiler.
   1587 
   1588      'warnings'
   1589           Display all of the options controlling warning messages
   1590           produced by the compiler.
   1591 
   1592      'target'
   1593           Display target-specific options.  Unlike the '--target-help'
   1594           option however, target-specific options of the linker and
   1595           assembler are not displayed.  This is because those tools do
   1596           not currently support the extended '--help=' syntax.
   1597 
   1598      'params'
   1599           Display the values recognized by the '--param' option.
   1600 
   1601      LANGUAGE
   1602           Display the options supported for LANGUAGE, where LANGUAGE is
   1603           the name of one of the languages supported in this version of
   1604           GCC.
   1605 
   1606      'common'
   1607           Display the options that are common to all languages.
   1608 
   1609      These are the supported qualifiers:
   1610 
   1611      'undocumented'
   1612           Display only those options that are undocumented.
   1613 
   1614      'joined'
   1615           Display options taking an argument that appears after an equal
   1616           sign in the same continuous piece of text, such as:
   1617           '--help=target'.
   1618 
   1619      'separate'
   1620           Display options taking an argument that appears as a separate
   1621           word following the original option, such as: '-o output-file'.
   1622 
   1623      Thus for example to display all the undocumented target-specific
   1624      switches supported by the compiler, use:
   1625 
   1626           --help=target,undocumented
   1627 
   1628      The sense of a qualifier can be inverted by prefixing it with the
   1629      '^' character, so for example to display all binary warning options
   1630      (i.e., ones that are either on or off and that do not take an
   1631      argument) that have a description, use:
   1632 
   1633           --help=warnings,^joined,^undocumented
   1634 
   1635      The argument to '--help=' should not consist solely of inverted
   1636      qualifiers.
   1637 
   1638      Combining several classes is possible, although this usually
   1639      restricts the output so much that there is nothing to display.  One
   1640      case where it does work, however, is when one of the classes is
   1641      TARGET.  For example, to display all the target-specific
   1642      optimization options, use:
   1643 
   1644           --help=target,optimizers
   1645 
   1646      The '--help=' option can be repeated on the command line.  Each
   1647      successive use displays its requested class of options, skipping
   1648      those that have already been displayed.
   1649 
   1650      If the '-Q' option appears on the command line before the '--help='
   1651      option, then the descriptive text displayed by '--help=' is
   1652      changed.  Instead of describing the displayed options, an
   1653      indication is given as to whether the option is enabled, disabled
   1654      or set to a specific value (assuming that the compiler knows this
   1655      at the point where the '--help=' option is used).
   1656 
   1657      Here is a truncated example from the ARM port of 'gcc':
   1658 
   1659             % gcc -Q -mabi=2 --help=target -c
   1660             The following options are target specific:
   1661             -mabi=                                2
   1662             -mabort-on-noreturn                   [disabled]
   1663             -mapcs                                [disabled]
   1664 
   1665      The output is sensitive to the effects of previous command-line
   1666      options, so for example it is possible to find out which
   1667      optimizations are enabled at '-O2' by using:
   1668 
   1669           -Q -O2 --help=optimizers
   1670 
   1671      Alternatively you can discover which binary optimizations are
   1672      enabled by '-O3' by using:
   1673 
   1674           gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   1675           gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   1676           diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   1677 
   1678 '-no-canonical-prefixes'
   1679      Do not expand any symbolic links, resolve references to '/../' or
   1680      '/./', or make the path absolute when generating a relative prefix.
   1681 
   1682 '--version'
   1683      Display the version number and copyrights of the invoked GCC.
   1684 
   1685 '-wrapper'
   1686      Invoke all subcommands under a wrapper program.  The name of the
   1687      wrapper program and its parameters are passed as a comma separated
   1688      list.
   1689 
   1690           gcc -c t.c -wrapper gdb,--args
   1691 
   1692      This invokes all subprograms of 'gcc' under 'gdb --args', thus the
   1693      invocation of 'cc1' is 'gdb --args cc1 ...'.
   1694 
   1695 '-fplugin=NAME.so'
   1696      Load the plugin code in file NAME.so, assumed to be a shared object
   1697      to be dlopen'd by the compiler.  The base name of the shared object
   1698      file is used to identify the plugin for the purposes of argument
   1699      parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
   1700      should define the callback functions specified in the Plugins API.
   1701 
   1702 '-fplugin-arg-NAME-KEY=VALUE'
   1703      Define an argument called KEY with a value of VALUE for the plugin
   1704      called NAME.
   1705 
   1706 '-fdump-ada-spec[-slim]'
   1707      For C and C++ source and include files, generate corresponding Ada
   1708      specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
   1709      headers::, which provides detailed documentation on this feature.
   1710 
   1711 '-fada-spec-parent=UNIT'
   1712      In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
   1713      specs as child units of parent UNIT.
   1714 
   1715 '-fdump-go-spec=FILE'
   1716      For input files in any language, generate corresponding Go
   1717      declarations in FILE.  This generates Go 'const', 'type', 'var',
   1718      and 'func' declarations which may be a useful way to start writing
   1719      a Go interface to code written in some other language.
   1720 
   1721 '@FILE'
   1722      Read command-line options from FILE.  The options read are inserted
   1723      in place of the original @FILE option.  If FILE does not exist, or
   1724      cannot be read, then the option will be treated literally, and not
   1725      removed.
   1726 
   1727      Options in FILE are separated by whitespace.  A whitespace
   1728      character may be included in an option by surrounding the entire
   1729      option in either single or double quotes.  Any character (including
   1730      a backslash) may be included by prefixing the character to be
   1731      included with a backslash.  The FILE may itself contain additional
   1732      @FILE options; any such options will be processed recursively.
   1733 
   1734 
   1735 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
   1736 
   1737 3.3 Compiling C++ Programs
   1738 ==========================
   1739 
   1740 C++ source files conventionally use one of the suffixes '.C', '.cc',
   1741 '.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
   1742 '.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
   1743 preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
   1744 these names and compiles them as C++ programs even if you call the
   1745 compiler the same way as for compiling C programs (usually with the name
   1746 'gcc').
   1747 
   1748  However, the use of 'gcc' does not add the C++ library.  'g++' is a
   1749 program that calls GCC and automatically specifies linking against the
   1750 C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
   1751 instead of C source files unless '-x' is used.  This program is also
   1752 useful when precompiling a C header file with a '.h' extension for use
   1753 in C++ compilations.  On many systems, 'g++' is also installed with the
   1754 name 'c++'.
   1755 
   1756  When you compile C++ programs, you may specify many of the same
   1757 command-line options that you use for compiling programs in any
   1758 language; or command-line options meaningful for C and related
   1759 languages; or options that are meaningful only for C++ programs.  *Note
   1760 Options Controlling C Dialect: C Dialect Options, for explanations of
   1761 options for languages related to C.  *Note Options Controlling C++
   1762 Dialect: C++ Dialect Options, for explanations of options that are
   1763 meaningful only for C++ programs.
   1764 
   1765 
   1766 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
   1767 
   1768 3.4 Options Controlling C Dialect
   1769 =================================
   1770 
   1771 The following options control the dialect of C (or languages derived
   1772 from C, such as C++, Objective-C and Objective-C++) that the compiler
   1773 accepts:
   1774 
   1775 '-ansi'
   1776      In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
   1777      equivalent to '-std=c++98'.
   1778 
   1779      This turns off certain features of GCC that are incompatible with
   1780      ISO C90 (when compiling C code), or of standard C++ (when compiling
   1781      C++ code), such as the 'asm' and 'typeof' keywords, and predefined
   1782      macros such as 'unix' and 'vax' that identify the type of system
   1783      you are using.  It also enables the undesirable and rarely used ISO
   1784      trigraph feature.  For the C compiler, it disables recognition of
   1785      C++ style '//' comments as well as the 'inline' keyword.
   1786 
   1787      The alternate keywords '__asm__', '__extension__', '__inline__' and
   1788      '__typeof__' continue to work despite '-ansi'.  You would not want
   1789      to use them in an ISO C program, of course, but it is useful to put
   1790      them in header files that might be included in compilations done
   1791      with '-ansi'.  Alternate predefined macros such as '__unix__' and
   1792      '__vax__' are also available, with or without '-ansi'.
   1793 
   1794      The '-ansi' option does not cause non-ISO programs to be rejected
   1795      gratuitously.  For that, '-Wpedantic' is required in addition to
   1796      '-ansi'.  *Note Warning Options::.
   1797 
   1798      The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
   1799      is used.  Some header files may notice this macro and refrain from
   1800      declaring certain functions or defining certain macros that the ISO
   1801      standard doesn't call for; this is to avoid interfering with any
   1802      programs that might use these names for other things.
   1803 
   1804      Functions that are normally built in but do not have semantics
   1805      defined by ISO C (such as 'alloca' and 'ffs') are not built-in
   1806      functions when '-ansi' is used.  *Note Other built-in functions
   1807      provided by GCC: Other Builtins, for details of the functions
   1808      affected.
   1809 
   1810 '-std='
   1811      Determine the language standard.  *Note Language Standards
   1812      Supported by GCC: Standards, for details of these standard
   1813      versions.  This option is currently only supported when compiling C
   1814      or C++.
   1815 
   1816      The compiler can accept several base standards, such as 'c90' or
   1817      'c++98', and GNU dialects of those standards, such as 'gnu90' or
   1818      'gnu++98'.  When a base standard is specified, the compiler accepts
   1819      all programs following that standard plus those using GNU
   1820      extensions that do not contradict it.  For example, '-std=c90'
   1821      turns off certain features of GCC that are incompatible with ISO
   1822      C90, such as the 'asm' and 'typeof' keywords, but not other GNU
   1823      extensions that do not have a meaning in ISO C90, such as omitting
   1824      the middle term of a '?:' expression.  On the other hand, when a
   1825      GNU dialect of a standard is specified, all features supported by
   1826      the compiler are enabled, even when those features change the
   1827      meaning of the base standard.  As a result, some strict-conforming
   1828      programs may be rejected.  The particular standard is used by
   1829      '-Wpedantic' to identify which features are GNU extensions given
   1830      that version of the standard.  For example '-std=gnu90 -Wpedantic'
   1831      warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
   1832      does not.
   1833 
   1834      A value for this option must be provided; possible values are
   1835 
   1836      'c90'
   1837      'c89'
   1838      'iso9899:1990'
   1839           Support all ISO C90 programs (certain GNU extensions that
   1840           conflict with ISO C90 are disabled).  Same as '-ansi' for C
   1841           code.
   1842 
   1843      'iso9899:199409'
   1844           ISO C90 as modified in amendment 1.
   1845 
   1846      'c99'
   1847      'c9x'
   1848      'iso9899:1999'
   1849      'iso9899:199x'
   1850           ISO C99.  Note that this standard is not yet fully supported;
   1851           see <http://gcc.gnu.org/c99status.html> for more information.
   1852           The names 'c9x' and 'iso9899:199x' are deprecated.
   1853 
   1854      'c11'
   1855      'c1x'
   1856      'iso9899:2011'
   1857           ISO C11, the 2011 revision of the ISO C standard.  Support is
   1858           incomplete and experimental.  The name 'c1x' is deprecated.
   1859 
   1860      'gnu90'
   1861      'gnu89'
   1862           GNU dialect of ISO C90 (including some C99 features).  This is
   1863           the default for C code.
   1864 
   1865      'gnu99'
   1866      'gnu9x'
   1867           GNU dialect of ISO C99.  When ISO C99 is fully implemented in
   1868           GCC, this will become the default.  The name 'gnu9x' is
   1869           deprecated.
   1870 
   1871      'gnu11'
   1872      'gnu1x'
   1873           GNU dialect of ISO C11.  Support is incomplete and
   1874           experimental.  The name 'gnu1x' is deprecated.
   1875 
   1876      'c++98'
   1877      'c++03'
   1878           The 1998 ISO C++ standard plus the 2003 technical corrigendum
   1879           and some additional defect reports.  Same as '-ansi' for C++
   1880           code.
   1881 
   1882      'gnu++98'
   1883      'gnu++03'
   1884           GNU dialect of '-std=c++98'.  This is the default for C++
   1885           code.
   1886 
   1887      'c++11'
   1888      'c++0x'
   1889           The 2011 ISO C++ standard plus amendments.  Support for C++11
   1890           is still experimental, and may change in incompatible ways in
   1891           future releases.  The name 'c++0x' is deprecated.
   1892 
   1893      'gnu++11'
   1894      'gnu++0x'
   1895           GNU dialect of '-std=c++11'.  Support for C++11 is still
   1896           experimental, and may change in incompatible ways in future
   1897           releases.  The name 'gnu++0x' is deprecated.
   1898 
   1899      'c++1y'
   1900           The next revision of the ISO C++ standard, tentatively planned
   1901           for 2017.  Support is highly experimental, and will almost
   1902           certainly change in incompatible ways in future releases.
   1903 
   1904      'gnu++1y'
   1905           GNU dialect of '-std=c++1y'.  Support is highly experimental,
   1906           and will almost certainly change in incompatible ways in
   1907           future releases.
   1908 
   1909 '-fgnu89-inline'
   1910      The option '-fgnu89-inline' tells GCC to use the traditional GNU
   1911      semantics for 'inline' functions when in C99 mode.  *Note An Inline
   1912      Function is As Fast As a Macro: Inline.  This option is accepted
   1913      and ignored by GCC versions 4.1.3 up to but not including 4.3.  In
   1914      GCC versions 4.3 and later it changes the behavior of GCC in C99
   1915      mode.  Using this option is roughly equivalent to adding the
   1916      'gnu_inline' function attribute to all inline functions (*note
   1917      Function Attributes::).
   1918 
   1919      The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
   1920      semantics for 'inline' when in C99 or gnu99 mode (i.e., it
   1921      specifies the default behavior).  This option was first supported
   1922      in GCC 4.3.  This option is not supported in '-std=c90' or
   1923      '-std=gnu90' mode.
   1924 
   1925      The preprocessor macros '__GNUC_GNU_INLINE__' and
   1926      '__GNUC_STDC_INLINE__' may be used to check which semantics are in
   1927      effect for 'inline' functions.  *Note (cpp)Common Predefined
   1928      Macros::.
   1929 
   1930 '-aux-info FILENAME'
   1931      Output to the given filename prototyped declarations for all
   1932      functions declared and/or defined in a translation unit, including
   1933      those in header files.  This option is silently ignored in any
   1934      language other than C.
   1935 
   1936      Besides declarations, the file indicates, in comments, the origin
   1937      of each declaration (source file and line), whether the declaration
   1938      was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
   1939      for old, respectively, in the first character after the line number
   1940      and the colon), and whether it came from a declaration or a
   1941      definition ('C' or 'F', respectively, in the following character).
   1942      In the case of function definitions, a K&R-style list of arguments
   1943      followed by their declarations is also provided, inside comments,
   1944      after the declaration.
   1945 
   1946 '-fallow-parameterless-variadic-functions'
   1947      Accept variadic functions without named parameters.
   1948 
   1949      Although it is possible to define such a function, this is not very
   1950      useful as it is not possible to read the arguments.  This is only
   1951      supported for C as this construct is allowed by C++.
   1952 
   1953 '-fno-asm'
   1954      Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
   1955      code can use these words as identifiers.  You can use the keywords
   1956      '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
   1957      '-fno-asm'.
   1958 
   1959      In C++, this switch only affects the 'typeof' keyword, since 'asm'
   1960      and 'inline' are standard keywords.  You may want to use the
   1961      '-fno-gnu-keywords' flag instead, which has the same effect.  In
   1962      C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
   1963      'asm' and 'typeof' keywords, since 'inline' is a standard keyword
   1964      in ISO C99.
   1965 
   1966 '-fno-builtin'
   1967 '-fno-builtin-FUNCTION'
   1968      Don't recognize built-in functions that do not begin with
   1969      '__builtin_' as prefix.  *Note Other built-in functions provided by
   1970      GCC: Other Builtins, for details of the functions affected,
   1971      including those which are not built-in functions when '-ansi' or
   1972      '-std' options for strict ISO C conformance are used because they
   1973      do not have an ISO standard meaning.
   1974 
   1975      GCC normally generates special code to handle certain built-in
   1976      functions more efficiently; for instance, calls to 'alloca' may
   1977      become single instructions which adjust the stack directly, and
   1978      calls to 'memcpy' may become inline copy loops.  The resulting code
   1979      is often both smaller and faster, but since the function calls no
   1980      longer appear as such, you cannot set a breakpoint on those calls,
   1981      nor can you change the behavior of the functions by linking with a
   1982      different library.  In addition, when a function is recognized as a
   1983      built-in function, GCC may use information about that function to
   1984      warn about problems with calls to that function, or to generate
   1985      more efficient code, even if the resulting code still contains
   1986      calls to that function.  For example, warnings are given with
   1987      '-Wformat' for bad calls to 'printf' when 'printf' is built in and
   1988      'strlen' is known not to modify global memory.
   1989 
   1990      With the '-fno-builtin-FUNCTION' option only the built-in function
   1991      FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
   1992      If a function is named that is not built-in in this version of GCC,
   1993      this option is ignored.  There is no corresponding
   1994      '-fbuiltin-FUNCTION' option; if you wish to enable built-in
   1995      functions selectively when using '-fno-builtin' or
   1996      '-ffreestanding', you may define macros such as:
   1997 
   1998           #define abs(n)          __builtin_abs ((n))
   1999           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
   2000 
   2001 '-fhosted'
   2002 
   2003      Assert that compilation targets a hosted environment.  This implies
   2004      '-fbuiltin'.  A hosted environment is one in which the entire
   2005      standard library is available, and in which 'main' has a return
   2006      type of 'int'.  Examples are nearly everything except a kernel.
   2007      This is equivalent to '-fno-freestanding'.
   2008 
   2009 '-ffreestanding'
   2010 
   2011      Assert that compilation targets a freestanding environment.  This
   2012      implies '-fno-builtin'.  A freestanding environment is one in which
   2013      the standard library may not exist, and program startup may not
   2014      necessarily be at 'main'.  The most obvious example is an OS
   2015      kernel.  This is equivalent to '-fno-hosted'.
   2016 
   2017      *Note Language Standards Supported by GCC: Standards, for details
   2018      of freestanding and hosted environments.
   2019 
   2020 '-fopenmp'
   2021      Enable handling of OpenMP directives '#pragma omp' in C/C++ and
   2022      '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
   2023      generates parallel code according to the OpenMP Application Program
   2024      Interface v3.0 <http://www.openmp.org/>.  This option implies
   2025      '-pthread', and thus is only supported on targets that have support
   2026      for '-pthread'.
   2027 
   2028 '-fgnu-tm'
   2029      When the option '-fgnu-tm' is specified, the compiler generates
   2030      code for the Linux variant of Intel's current Transactional Memory
   2031      ABI specification document (Revision 1.1, May 6 2009).  This is an
   2032      experimental feature whose interface may change in future versions
   2033      of GCC, as the official specification changes.  Please note that
   2034      not all architectures are supported for this feature.
   2035 
   2036      For more information on GCC's support for transactional memory,
   2037      *Note The GNU Transactional Memory Library: (libitm)Enabling
   2038      libitm.
   2039 
   2040      Note that the transactional memory feature is not supported with
   2041      non-call exceptions ('-fnon-call-exceptions').
   2042 
   2043 '-fms-extensions'
   2044      Accept some non-standard constructs used in Microsoft header files.
   2045 
   2046      In C++ code, this allows member names in structures to be similar
   2047      to previous types declarations.
   2048 
   2049           typedef int UOW;
   2050           struct ABC {
   2051             UOW UOW;
   2052           };
   2053 
   2054      Some cases of unnamed fields in structures and unions are only
   2055      accepted with this option.  *Note Unnamed struct/union fields
   2056      within structs/unions: Unnamed Fields, for details.
   2057 
   2058 '-fplan9-extensions'
   2059      Accept some non-standard constructs used in Plan 9 code.
   2060 
   2061      This enables '-fms-extensions', permits passing pointers to
   2062      structures with anonymous fields to functions that expect pointers
   2063      to elements of the type of the field, and permits referring to
   2064      anonymous fields declared using a typedef.  *Note Unnamed
   2065      struct/union fields within structs/unions: Unnamed Fields, for
   2066      details.  This is only supported for C, not C++.
   2067 
   2068 '-trigraphs'
   2069      Support ISO C trigraphs.  The '-ansi' option (and '-std' options
   2070      for strict ISO C conformance) implies '-trigraphs'.
   2071 
   2072 '-traditional'
   2073 '-traditional-cpp'
   2074      Formerly, these options caused GCC to attempt to emulate a
   2075      pre-standard C compiler.  They are now only supported with the '-E'
   2076      switch.  The preprocessor continues to support a pre-standard mode.
   2077      See the GNU CPP manual for details.
   2078 
   2079 '-fcond-mismatch'
   2080      Allow conditional expressions with mismatched types in the second
   2081      and third arguments.  The value of such an expression is void.
   2082      This option is not supported for C++.
   2083 
   2084 '-flax-vector-conversions'
   2085      Allow implicit conversions between vectors with differing numbers
   2086      of elements and/or incompatible element types.  This option should
   2087      not be used for new code.
   2088 
   2089 '-funsigned-char'
   2090      Let the type 'char' be unsigned, like 'unsigned char'.
   2091 
   2092      Each kind of machine has a default for what 'char' should be.  It
   2093      is either like 'unsigned char' by default or like 'signed char' by
   2094      default.
   2095 
   2096      Ideally, a portable program should always use 'signed char' or
   2097      'unsigned char' when it depends on the signedness of an object.
   2098      But many programs have been written to use plain 'char' and expect
   2099      it to be signed, or expect it to be unsigned, depending on the
   2100      machines they were written for.  This option, and its inverse, let
   2101      you make such a program work with the opposite default.
   2102 
   2103      The type 'char' is always a distinct type from each of 'signed
   2104      char' or 'unsigned char', even though its behavior is always just
   2105      like one of those two.
   2106 
   2107 '-fsigned-char'
   2108      Let the type 'char' be signed, like 'signed char'.
   2109 
   2110      Note that this is equivalent to '-fno-unsigned-char', which is the
   2111      negative form of '-funsigned-char'.  Likewise, the option
   2112      '-fno-signed-char' is equivalent to '-funsigned-char'.
   2113 
   2114 '-fsigned-bitfields'
   2115 '-funsigned-bitfields'
   2116 '-fno-signed-bitfields'
   2117 '-fno-unsigned-bitfields'
   2118      These options control whether a bit-field is signed or unsigned,
   2119      when the declaration does not use either 'signed' or 'unsigned'.
   2120      By default, such a bit-field is signed, because this is consistent:
   2121      the basic integer types such as 'int' are signed types.
   2122 
   2123 
   2124 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
   2125 
   2126 3.5 Options Controlling C++ Dialect
   2127 ===================================
   2128 
   2129 This section describes the command-line options that are only meaningful
   2130 for C++ programs.  You can also use most of the GNU compiler options
   2131 regardless of what language your program is in.  For example, you might
   2132 compile a file 'firstClass.C' like this:
   2133 
   2134      g++ -g -frepo -O -c firstClass.C
   2135 
   2136 In this example, only '-frepo' is an option meant only for C++ programs;
   2137 you can use the other options with any language supported by GCC.
   2138 
   2139  Here is a list of options that are _only_ for compiling C++ programs:
   2140 
   2141 '-fabi-version=N'
   2142      Use version N of the C++ ABI.  The default is version 2.
   2143 
   2144      Version 0 refers to the version conforming most closely to the C++
   2145      ABI specification.  Therefore, the ABI obtained using version 0
   2146      will change in different versions of G++ as ABI bugs are fixed.
   2147 
   2148      Version 1 is the version of the C++ ABI that first appeared in G++
   2149      3.2.
   2150 
   2151      Version 2 is the version of the C++ ABI that first appeared in G++
   2152      3.4.
   2153 
   2154      Version 3 corrects an error in mangling a constant address as a
   2155      template argument.
   2156 
   2157      Version 4, which first appeared in G++ 4.5, implements a standard
   2158      mangling for vector types.
   2159 
   2160      Version 5, which first appeared in G++ 4.6, corrects the mangling
   2161      of attribute const/volatile on function pointer types, decltype of
   2162      a plain decl, and use of a function parameter in the declaration of
   2163      another parameter.
   2164 
   2165      Version 6, which first appeared in G++ 4.7, corrects the promotion
   2166      behavior of C++11 scoped enums and the mangling of template
   2167      argument packs, const/static_cast, prefix ++ and -, and a class
   2168      scope function used as a template argument.
   2169 
   2170      See also '-Wabi'.
   2171 
   2172 '-fno-access-control'
   2173      Turn off all access checking.  This switch is mainly useful for
   2174      working around bugs in the access control code.
   2175 
   2176 '-fcheck-new'
   2177      Check that the pointer returned by 'operator new' is non-null
   2178      before attempting to modify the storage allocated.  This check is
   2179      normally unnecessary because the C++ standard specifies that
   2180      'operator new' only returns '0' if it is declared 'throw()', in
   2181      which case the compiler always checks the return value even without
   2182      this option.  In all other cases, when 'operator new' has a
   2183      non-empty exception specification, memory exhaustion is signalled
   2184      by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.
   2185 
   2186 '-fconstexpr-depth=N'
   2187      Set the maximum nested evaluation depth for C++11 constexpr
   2188      functions to N.  A limit is needed to detect endless recursion
   2189      during constant expression evaluation.  The minimum specified by
   2190      the standard is 512.
   2191 
   2192 '-fdeduce-init-list'
   2193      Enable deduction of a template type parameter as
   2194      'std::initializer_list' from a brace-enclosed initializer list,
   2195      i.e.
   2196 
   2197           template <class T> auto forward(T t) -> decltype (realfn (t))
   2198           {
   2199             return realfn (t);
   2200           }
   2201 
   2202           void f()
   2203           {
   2204             forward({1,2}); // call forward<std::initializer_list<int>>
   2205           }
   2206 
   2207      This deduction was implemented as a possible extension to the
   2208      originally proposed semantics for the C++11 standard, but was not
   2209      part of the final standard, so it is disabled by default.  This
   2210      option is deprecated, and may be removed in a future version of
   2211      G++.
   2212 
   2213 '-ffriend-injection'
   2214      Inject friend functions into the enclosing namespace, so that they
   2215      are visible outside the scope of the class in which they are
   2216      declared.  Friend functions were documented to work this way in the
   2217      old Annotated C++ Reference Manual, and versions of G++ before 4.1
   2218      always worked that way.  However, in ISO C++ a friend function that
   2219      is not declared in an enclosing scope can only be found using
   2220      argument dependent lookup.  This option causes friends to be
   2221      injected as they were in earlier releases.
   2222 
   2223      This option is for compatibility, and may be removed in a future
   2224      release of G++.
   2225 
   2226 '-fno-elide-constructors'
   2227      The C++ standard allows an implementation to omit creating a
   2228      temporary that is only used to initialize another object of the
   2229      same type.  Specifying this option disables that optimization, and
   2230      forces G++ to call the copy constructor in all cases.
   2231 
   2232 '-fno-enforce-eh-specs'
   2233      Don't generate code to check for violation of exception
   2234      specifications at run time.  This option violates the C++ standard,
   2235      but may be useful for reducing code size in production builds, much
   2236      like defining 'NDEBUG'.  This does not give user code permission to
   2237      throw exceptions in violation of the exception specifications; the
   2238      compiler still optimizes based on the specifications, so throwing
   2239      an unexpected exception results in undefined behavior at run time.
   2240 
   2241 '-fextern-tls-init'
   2242 '-fno-extern-tls-init'
   2243      The C++11 and OpenMP standards allow 'thread_local' and
   2244      'threadprivate' variables to have dynamic (runtime) initialization.
   2245      To support this, any use of such a variable goes through a wrapper
   2246      function that performs any necessary initialization.  When the use
   2247      and definition of the variable are in the same translation unit,
   2248      this overhead can be optimized away, but when the use is in a
   2249      different translation unit there is significant overhead even if
   2250      the variable doesn't actually need dynamic initialization.  If the
   2251      programmer can be sure that no use of the variable in a
   2252      non-defining TU needs to trigger dynamic initialization (either
   2253      because the variable is statically initialized, or a use of the
   2254      variable in the defining TU will be executed before any uses in
   2255      another TU), they can avoid this overhead with the
   2256      '-fno-extern-tls-init' option.
   2257 
   2258      On targets that support symbol aliases, the default is
   2259      '-fextern-tls-init'.  On targets that do not support symbol
   2260      aliases, the default is '-fno-extern-tls-init'.
   2261 
   2262 '-ffor-scope'
   2263 '-fno-for-scope'
   2264      If '-ffor-scope' is specified, the scope of variables declared in a
   2265      for-init-statement is limited to the 'for' loop itself, as
   2266      specified by the C++ standard.  If '-fno-for-scope' is specified,
   2267      the scope of variables declared in a for-init-statement extends to
   2268      the end of the enclosing scope, as was the case in old versions of
   2269      G++, and other (traditional) implementations of C++.
   2270 
   2271      If neither flag is given, the default is to follow the standard,
   2272      but to allow and give a warning for old-style code that would
   2273      otherwise be invalid, or have different behavior.
   2274 
   2275 '-fno-gnu-keywords'
   2276      Do not recognize 'typeof' as a keyword, so that code can use this
   2277      word as an identifier.  You can use the keyword '__typeof__'
   2278      instead.  '-ansi' implies '-fno-gnu-keywords'.
   2279 
   2280 '-fno-implicit-templates'
   2281      Never emit code for non-inline templates that are instantiated
   2282      implicitly (i.e. by use); only emit code for explicit
   2283      instantiations.  *Note Template Instantiation::, for more
   2284      information.
   2285 
   2286 '-fno-implicit-inline-templates'
   2287      Don't emit code for implicit instantiations of inline templates,
   2288      either.  The default is to handle inlines differently so that
   2289      compiles with and without optimization need the same set of
   2290      explicit instantiations.
   2291 
   2292 '-fno-implement-inlines'
   2293      To save space, do not emit out-of-line copies of inline functions
   2294      controlled by '#pragma implementation'.  This causes linker errors
   2295      if these functions are not inlined everywhere they are called.
   2296 
   2297 '-fms-extensions'
   2298      Disable Wpedantic warnings about constructs used in MFC, such as
   2299      implicit int and getting a pointer to member function via
   2300      non-standard syntax.
   2301 
   2302 '-fno-nonansi-builtins'
   2303      Disable built-in declarations of functions that are not mandated by
   2304      ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
   2305      'bzero', 'conjf', and other related functions.
   2306 
   2307 '-fnothrow-opt'
   2308      Treat a 'throw()' exception specification as if it were a
   2309      'noexcept' specification to reduce or eliminate the text size
   2310      overhead relative to a function with no exception specification.
   2311      If the function has local variables of types with non-trivial
   2312      destructors, the exception specification actually makes the
   2313      function smaller because the EH cleanups for those variables can be
   2314      optimized away.  The semantic effect is that an exception thrown
   2315      out of a function with such an exception specification results in a
   2316      call to 'terminate' rather than 'unexpected'.
   2317 
   2318 '-fno-operator-names'
   2319      Do not treat the operator name keywords 'and', 'bitand', 'bitor',
   2320      'compl', 'not', 'or' and 'xor' as synonyms as keywords.
   2321 
   2322 '-fno-optional-diags'
   2323      Disable diagnostics that the standard says a compiler does not need
   2324      to issue.  Currently, the only such diagnostic issued by G++ is the
   2325      one for a name having multiple meanings within a class.
   2326 
   2327 '-fpermissive'
   2328      Downgrade some diagnostics about nonconformant code from errors to
   2329      warnings.  Thus, using '-fpermissive' allows some nonconforming
   2330      code to compile.
   2331 
   2332 '-fno-pretty-templates'
   2333      When an error message refers to a specialization of a function
   2334      template, the compiler normally prints the signature of the
   2335      template followed by the template arguments and any typedefs or
   2336      typenames in the signature (e.g.  'void f(T) [with T = int]' rather
   2337      than 'void f(int)') so that it's clear which template is involved.
   2338      When an error message refers to a specialization of a class
   2339      template, the compiler omits any template arguments that match the
   2340      default template arguments for that template.  If either of these
   2341      behaviors make it harder to understand the error message rather
   2342      than easier, you can use '-fno-pretty-templates' to disable them.
   2343 
   2344 '-frepo'
   2345      Enable automatic template instantiation at link time.  This option
   2346      also implies '-fno-implicit-templates'.  *Note Template
   2347      Instantiation::, for more information.
   2348 
   2349 '-fno-rtti'
   2350      Disable generation of information about every class with virtual
   2351      functions for use by the C++ run-time type identification features
   2352      ('dynamic_cast' and 'typeid').  If you don't use those parts of the
   2353      language, you can save some space by using this flag.  Note that
   2354      exception handling uses the same information, but G++ generates it
   2355      as needed.  The 'dynamic_cast' operator can still be used for casts
   2356      that do not require run-time type information, i.e. casts to 'void
   2357      *' or to unambiguous base classes.
   2358 
   2359 '-fstats'
   2360      Emit statistics about front-end processing at the end of the
   2361      compilation.  This information is generally only useful to the G++
   2362      development team.
   2363 
   2364 '-fstrict-enums'
   2365      Allow the compiler to optimize using the assumption that a value of
   2366      enumerated type can only be one of the values of the enumeration
   2367      (as defined in the C++ standard; basically, a value that can be
   2368      represented in the minimum number of bits needed to represent all
   2369      the enumerators).  This assumption may not be valid if the program
   2370      uses a cast to convert an arbitrary integer value to the enumerated
   2371      type.
   2372 
   2373 '-ftemplate-backtrace-limit=N'
   2374      Set the maximum number of template instantiation notes for a single
   2375      warning or error to N.  The default value is 10.
   2376 
   2377 '-ftemplate-depth=N'
   2378      Set the maximum instantiation depth for template classes to N.  A
   2379      limit on the template instantiation depth is needed to detect
   2380      endless recursions during template class instantiation.  ANSI/ISO
   2381      C++ conforming programs must not rely on a maximum depth greater
   2382      than 17 (changed to 1024 in C++11).  The default value is 900, as
   2383      the compiler can run out of stack space before hitting 1024 in some
   2384      situations.
   2385 
   2386 '-fno-threadsafe-statics'
   2387      Do not emit the extra code to use the routines specified in the C++
   2388      ABI for thread-safe initialization of local statics.  You can use
   2389      this option to reduce code size slightly in code that doesn't need
   2390      to be thread-safe.
   2391 
   2392 '-fuse-cxa-atexit'
   2393      Register destructors for objects with static storage duration with
   2394      the '__cxa_atexit' function rather than the 'atexit' function.
   2395      This option is required for fully standards-compliant handling of
   2396      static destructors, but only works if your C library supports
   2397      '__cxa_atexit'.
   2398 
   2399 '-fno-use-cxa-get-exception-ptr'
   2400      Don't use the '__cxa_get_exception_ptr' runtime routine.  This
   2401      causes 'std::uncaught_exception' to be incorrect, but is necessary
   2402      if the runtime routine is not available.
   2403 
   2404 '-fvisibility-inlines-hidden'
   2405      This switch declares that the user does not attempt to compare
   2406      pointers to inline functions or methods where the addresses of the
   2407      two functions are taken in different shared objects.
   2408 
   2409      The effect of this is that GCC may, effectively, mark inline
   2410      methods with '__attribute__ ((visibility ("hidden")))' so that they
   2411      do not appear in the export table of a DSO and do not require a PLT
   2412      indirection when used within the DSO.  Enabling this option can
   2413      have a dramatic effect on load and link times of a DSO as it
   2414      massively reduces the size of the dynamic export table when the
   2415      library makes heavy use of templates.
   2416 
   2417      The behavior of this switch is not quite the same as marking the
   2418      methods as hidden directly, because it does not affect static
   2419      variables local to the function or cause the compiler to deduce
   2420      that the function is defined in only one shared object.
   2421 
   2422      You may mark a method as having a visibility explicitly to negate
   2423      the effect of the switch for that method.  For example, if you do
   2424      want to compare pointers to a particular inline method, you might
   2425      mark it as having default visibility.  Marking the enclosing class
   2426      with explicit visibility has no effect.
   2427 
   2428      Explicitly instantiated inline methods are unaffected by this
   2429      option as their linkage might otherwise cross a shared library
   2430      boundary.  *Note Template Instantiation::.
   2431 
   2432 '-fvisibility-ms-compat'
   2433      This flag attempts to use visibility settings to make GCC's C++
   2434      linkage model compatible with that of Microsoft Visual Studio.
   2435 
   2436      The flag makes these changes to GCC's linkage model:
   2437 
   2438        1. It sets the default visibility to 'hidden', like
   2439           '-fvisibility=hidden'.
   2440 
   2441        2. Types, but not their members, are not hidden by default.
   2442 
   2443        3. The One Definition Rule is relaxed for types without explicit
   2444           visibility specifications that are defined in more than one
   2445           shared object: those declarations are permitted if they are
   2446           permitted when this option is not used.
   2447 
   2448      In new code it is better to use '-fvisibility=hidden' and export
   2449      those classes that are intended to be externally visible.
   2450      Unfortunately it is possible for code to rely, perhaps
   2451      accidentally, on the Visual Studio behavior.
   2452 
   2453      Among the consequences of these changes are that static data
   2454      members of the same type with the same name but defined in
   2455      different shared objects are different, so changing one does not
   2456      change the other; and that pointers to function members defined in
   2457      different shared objects may not compare equal.  When this flag is
   2458      given, it is a violation of the ODR to define types with the same
   2459      name differently.
   2460 
   2461 '-fno-weak'
   2462      Do not use weak symbol support, even if it is provided by the
   2463      linker.  By default, G++ uses weak symbols if they are available.
   2464      This option exists only for testing, and should not be used by
   2465      end-users; it results in inferior code and has no benefits.  This
   2466      option may be removed in a future release of G++.
   2467 
   2468 '-nostdinc++'
   2469      Do not search for header files in the standard directories specific
   2470      to C++, but do still search the other standard directories.  (This
   2471      option is used when building the C++ library.)
   2472 
   2473  In addition, these optimization, warning, and code generation options
   2474 have meanings only for C++ programs:
   2475 
   2476 '-fno-default-inline'
   2477      Do not assume 'inline' for functions defined inside a class scope.
   2478      *Note Options That Control Optimization: Optimize Options.  Note
   2479      that these functions have linkage like inline functions; they just
   2480      aren't inlined by default.
   2481 
   2482 '-Wabi (C, Objective-C, C++ and Objective-C++ only)'
   2483      Warn when G++ generates code that is probably not compatible with
   2484      the vendor-neutral C++ ABI.  Although an effort has been made to
   2485      warn about all such cases, there are probably some cases that are
   2486      not warned about, even though G++ is generating incompatible code.
   2487      There may also be cases where warnings are emitted even though the
   2488      code that is generated is compatible.
   2489 
   2490      You should rewrite your code to avoid these warnings if you are
   2491      concerned about the fact that code generated by G++ may not be
   2492      binary compatible with code generated by other compilers.
   2493 
   2494      The known incompatibilities in '-fabi-version=2' (the default)
   2495      include:
   2496 
   2497         * A template with a non-type template parameter of reference
   2498           type is mangled incorrectly:
   2499                extern int N;
   2500                template <int &> struct S {};
   2501                void n (S<N>) {2}
   2502 
   2503           This is fixed in '-fabi-version=3'.
   2504 
   2505         * SIMD vector types declared using '__attribute ((vector_size))'
   2506           are mangled in a non-standard way that does not allow for
   2507           overloading of functions taking vectors of different sizes.
   2508 
   2509           The mangling is changed in '-fabi-version=4'.
   2510 
   2511      The known incompatibilities in '-fabi-version=1' include:
   2512 
   2513         * Incorrect handling of tail-padding for bit-fields.  G++ may
   2514           attempt to pack data into the same byte as a base class.  For
   2515           example:
   2516 
   2517                struct A { virtual void f(); int f1 : 1; };
   2518                struct B : public A { int f2 : 1; };
   2519 
   2520           In this case, G++ places 'B::f2' into the same byte as
   2521           'A::f1'; other compilers do not.  You can avoid this problem
   2522           by explicitly padding 'A' so that its size is a multiple of
   2523           the byte size on your platform; that causes G++ and other
   2524           compilers to lay out 'B' identically.
   2525 
   2526         * Incorrect handling of tail-padding for virtual bases.  G++
   2527           does not use tail padding when laying out virtual bases.  For
   2528           example:
   2529 
   2530                struct A { virtual void f(); char c1; };
   2531                struct B { B(); char c2; };
   2532                struct C : public A, public virtual B {};
   2533 
   2534           In this case, G++ does not place 'B' into the tail-padding for
   2535           'A'; other compilers do.  You can avoid this problem by
   2536           explicitly padding 'A' so that its size is a multiple of its
   2537           alignment (ignoring virtual base classes); that causes G++ and
   2538           other compilers to lay out 'C' identically.
   2539 
   2540         * Incorrect handling of bit-fields with declared widths greater
   2541           than that of their underlying types, when the bit-fields
   2542           appear in a union.  For example:
   2543 
   2544                union U { int i : 4096; };
   2545 
   2546           Assuming that an 'int' does not have 4096 bits, G++ makes the
   2547           union too small by the number of bits in an 'int'.
   2548 
   2549         * Empty classes can be placed at incorrect offsets.  For
   2550           example:
   2551 
   2552                struct A {};
   2553 
   2554                struct B {
   2555                  A a;
   2556                  virtual void f ();
   2557                };
   2558 
   2559                struct C : public B, public A {};
   2560 
   2561           G++ places the 'A' base class of 'C' at a nonzero offset; it
   2562           should be placed at offset zero.  G++ mistakenly believes that
   2563           the 'A' data member of 'B' is already at offset zero.
   2564 
   2565         * Names of template functions whose types involve 'typename' or
   2566           template template parameters can be mangled incorrectly.
   2567 
   2568                template <typename Q>
   2569                void f(typename Q::X) {}
   2570 
   2571                template <template <typename> class Q>
   2572                void f(typename Q<int>::X) {}
   2573 
   2574           Instantiations of these templates may be mangled incorrectly.
   2575 
   2576      It also warns about psABI-related changes.  The known psABI changes
   2577      at this point include:
   2578 
   2579         * For SysV/x86-64, unions with 'long double' members are passed
   2580           in memory as specified in psABI. For example:
   2581 
   2582                union U {
   2583                  long double ld;
   2584                  int i;
   2585                };
   2586 
   2587           'union U' is always passed in memory.
   2588 
   2589 '-Wctor-dtor-privacy (C++ and Objective-C++ only)'
   2590      Warn when a class seems unusable because all the constructors or
   2591      destructors in that class are private, and it has neither friends
   2592      nor public static member functions.  Also warn if there are no
   2593      non-private methods, and there's at least one private member
   2594      function that isn't a constructor or destructor.
   2595 
   2596 '-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
   2597      Warn when 'delete' is used to destroy an instance of a class that
   2598      has virtual functions and non-virtual destructor.  It is unsafe to
   2599      delete an instance of a derived class through a pointer to a base
   2600      class if the base class does not have a virtual destructor.  This
   2601      warning is enabled by '-Wall'.
   2602 
   2603 '-Wliteral-suffix (C++ and Objective-C++ only)'
   2604      Warn when a string or character literal is followed by a ud-suffix
   2605      which does not begin with an underscore.  As a conforming
   2606      extension, GCC treats such suffixes as separate preprocessing
   2607      tokens in order to maintain backwards compatibility with code that
   2608      uses formatting macros from '<inttypes.h>'.  For example:
   2609 
   2610           #define __STDC_FORMAT_MACROS
   2611           #include <inttypes.h>
   2612           #include <stdio.h>
   2613 
   2614           int main() {
   2615             int64_t i64 = 123;
   2616             printf("My int64: %"PRId64"\n", i64);
   2617           }
   2618 
   2619      In this case, 'PRId64' is treated as a separate preprocessing
   2620      token.
   2621 
   2622      This warning is enabled by default.
   2623 
   2624 '-Wnarrowing (C++ and Objective-C++ only)'
   2625      Warn when a narrowing conversion prohibited by C++11 occurs within
   2626      '{ }', e.g.
   2627 
   2628           int i = { 2.2 }; // error: narrowing from double to int
   2629 
   2630      This flag is included in '-Wall' and '-Wc++11-compat'.
   2631 
   2632      With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic
   2633      required by the standard.  Note that this does not affect the
   2634      meaning of well-formed code; narrowing conversions are still
   2635      considered ill-formed in SFINAE context.
   2636 
   2637 '-Wnoexcept (C++ and Objective-C++ only)'
   2638      Warn when a noexcept-expression evaluates to false because of a
   2639      call to a function that does not have a non-throwing exception
   2640      specification (i.e.  'throw()' or 'noexcept') but is known by the
   2641      compiler to never throw an exception.
   2642 
   2643 '-Wnon-virtual-dtor (C++ and Objective-C++ only)'
   2644      Warn when a class has virtual functions and an accessible
   2645      non-virtual destructor, in which case it is possible but unsafe to
   2646      delete an instance of a derived class through a pointer to the base
   2647      class.  This warning is also enabled if '-Weffc++' is specified.
   2648 
   2649 '-Wreorder (C++ and Objective-C++ only)'
   2650      Warn when the order of member initializers given in the code does
   2651      not match the order in which they must be executed.  For instance:
   2652 
   2653           struct A {
   2654             int i;
   2655             int j;
   2656             A(): j (0), i (1) { }
   2657           };
   2658 
   2659      The compiler rearranges the member initializers for 'i' and 'j' to
   2660      match the declaration order of the members, emitting a warning to
   2661      that effect.  This warning is enabled by '-Wall'.
   2662 
   2663 '-fext-numeric-literals (C++ and Objective-C++ only)'
   2664      Accept imaginary, fixed-point, or machine-defined literal number
   2665      suffixes as GNU extensions.  When this option is turned off these
   2666      suffixes are treated as C++11 user-defined literal numeric
   2667      suffixes.  This is on by default for all pre-C++11 dialects and all
   2668      GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
   2669      '-std=gnu++1y'.  This option is off by default for ISO C++11
   2670      onwards ('-std=c++11', ...).
   2671 
   2672  The following '-W...' options are not affected by '-Wall'.
   2673 
   2674 '-Weffc++ (C++ and Objective-C++ only)'
   2675      Warn about violations of the following style guidelines from Scott
   2676      Meyers' 'Effective C++, Second Edition' book:
   2677 
   2678         * Item 11: Define a copy constructor and an assignment operator
   2679           for classes with dynamically-allocated memory.
   2680 
   2681         * Item 12: Prefer initialization to assignment in constructors.
   2682 
   2683         * Item 14: Make destructors virtual in base classes.
   2684 
   2685         * Item 15: Have 'operator=' return a reference to '*this'.
   2686 
   2687         * Item 23: Don't try to return a reference when you must return
   2688           an object.
   2689 
   2690      Also warn about violations of the following style guidelines from
   2691      Scott Meyers' 'More Effective C++' book:
   2692 
   2693         * Item 6: Distinguish between prefix and postfix forms of
   2694           increment and decrement operators.
   2695 
   2696         * Item 7: Never overload '&&', '||', or ','.
   2697 
   2698      When selecting this option, be aware that the standard library
   2699      headers do not obey all of these guidelines; use 'grep -v' to
   2700      filter out those warnings.
   2701 
   2702 '-Wstrict-null-sentinel (C++ and Objective-C++ only)'
   2703      Warn about the use of an uncasted 'NULL' as sentinel.  When
   2704      compiling only with GCC this is a valid sentinel, as 'NULL' is
   2705      defined to '__null'.  Although it is a null pointer constant rather
   2706      than a null pointer, it is guaranteed to be of the same size as a
   2707      pointer.  But this use is not portable across different compilers.
   2708 
   2709 '-Wno-non-template-friend (C++ and Objective-C++ only)'
   2710      Disable warnings when non-templatized friend functions are declared
   2711      within a template.  Since the advent of explicit template
   2712      specification support in G++, if the name of the friend is an
   2713      unqualified-id (i.e., 'friend foo(int)'), the C++ language
   2714      specification demands that the friend declare or define an
   2715      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
   2716      implemented explicit specification, unqualified-ids could be
   2717      interpreted as a particular specialization of a templatized
   2718      function.  Because this non-conforming behavior is no longer the
   2719      default behavior for G++, '-Wnon-template-friend' allows the
   2720      compiler to check existing code for potential trouble spots and is
   2721      on by default.  This new compiler behavior can be turned off with
   2722      '-Wno-non-template-friend', which keeps the conformant compiler
   2723      code but disables the helpful warning.
   2724 
   2725 '-Wold-style-cast (C++ and Objective-C++ only)'
   2726      Warn if an old-style (C-style) cast to a non-void type is used
   2727      within a C++ program.  The new-style casts ('dynamic_cast',
   2728      'static_cast', 'reinterpret_cast', and 'const_cast') are less
   2729      vulnerable to unintended effects and much easier to search for.
   2730 
   2731 '-Woverloaded-virtual (C++ and Objective-C++ only)'
   2732      Warn when a function declaration hides virtual functions from a
   2733      base class.  For example, in:
   2734 
   2735           struct A {
   2736             virtual void f();
   2737           };
   2738 
   2739           struct B: public A {
   2740             void f(int);
   2741           };
   2742 
   2743      the 'A' class version of 'f' is hidden in 'B', and code like:
   2744 
   2745           B* b;
   2746           b->f();
   2747 
   2748      fails to compile.
   2749 
   2750 '-Wno-pmf-conversions (C++ and Objective-C++ only)'
   2751      Disable the diagnostic for converting a bound pointer to member
   2752      function to a plain pointer.
   2753 
   2754 '-Wsign-promo (C++ and Objective-C++ only)'
   2755      Warn when overload resolution chooses a promotion from unsigned or
   2756      enumerated type to a signed type, over a conversion to an unsigned
   2757      type of the same size.  Previous versions of G++ tried to preserve
   2758      unsignedness, but the standard mandates the current behavior.
   2759 
   2760 
   2761 File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
   2762 
   2763 3.6 Options Controlling Objective-C and Objective-C++ Dialects
   2764 ==============================================================
   2765 
   2766 (NOTE: This manual does not describe the Objective-C and Objective-C++
   2767 languages themselves.  *Note Language Standards Supported by GCC:
   2768 Standards, for references.)
   2769 
   2770  This section describes the command-line options that are only
   2771 meaningful for Objective-C and Objective-C++ programs.  You can also use
   2772 most of the language-independent GNU compiler options.  For example, you
   2773 might compile a file 'some_class.m' like this:
   2774 
   2775      gcc -g -fgnu-runtime -O -c some_class.m
   2776 
   2777 In this example, '-fgnu-runtime' is an option meant only for Objective-C
   2778 and Objective-C++ programs; you can use the other options with any
   2779 language supported by GCC.
   2780 
   2781  Note that since Objective-C is an extension of the C language,
   2782 Objective-C compilations may also use options specific to the C
   2783 front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
   2784 compilations may use C++-specific options (e.g., '-Wabi').
   2785 
   2786  Here is a list of options that are _only_ for compiling Objective-C and
   2787 Objective-C++ programs:
   2788 
   2789 '-fconstant-string-class=CLASS-NAME'
   2790      Use CLASS-NAME as the name of the class to instantiate for each
   2791      literal string specified with the syntax '@"..."'.  The default
   2792      class name is 'NXConstantString' if the GNU runtime is being used,
   2793      and 'NSConstantString' if the NeXT runtime is being used (see
   2794      below).  The '-fconstant-cfstrings' option, if also present,
   2795      overrides the '-fconstant-string-class' setting and cause '@"..."'
   2796      literals to be laid out as constant CoreFoundation strings.
   2797 
   2798 '-fgnu-runtime'
   2799      Generate object code compatible with the standard GNU Objective-C
   2800      runtime.  This is the default for most types of systems.
   2801 
   2802 '-fnext-runtime'
   2803      Generate output compatible with the NeXT runtime.  This is the
   2804      default for NeXT-based systems, including Darwin and Mac OS X.  The
   2805      macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
   2806      is used.
   2807 
   2808 '-fno-nil-receivers'
   2809      Assume that all Objective-C message dispatches ('[receiver
   2810      message:arg]') in this translation unit ensure that the receiver is
   2811      not 'nil'.  This allows for more efficient entry points in the
   2812      runtime to be used.  This option is only available in conjunction
   2813      with the NeXT runtime and ABI version 0 or 1.
   2814 
   2815 '-fobjc-abi-version=N'
   2816      Use version N of the Objective-C ABI for the selected runtime.
   2817      This option is currently supported only for the NeXT runtime.  In
   2818      that case, Version 0 is the traditional (32-bit) ABI without
   2819      support for properties and other Objective-C 2.0 additions.
   2820      Version 1 is the traditional (32-bit) ABI with support for
   2821      properties and other Objective-C 2.0 additions.  Version 2 is the
   2822      modern (64-bit) ABI. If nothing is specified, the default is
   2823      Version 0 on 32-bit target machines, and Version 2 on 64-bit target
   2824      machines.
   2825 
   2826 '-fobjc-call-cxx-cdtors'
   2827      For each Objective-C class, check if any of its instance variables
   2828      is a C++ object with a non-trivial default constructor.  If so,
   2829      synthesize a special '- (id) .cxx_construct' instance method which
   2830      runs non-trivial default constructors on any such instance
   2831      variables, in order, and then return 'self'.  Similarly, check if
   2832      any instance variable is a C++ object with a non-trivial
   2833      destructor, and if so, synthesize a special '- (void)
   2834      .cxx_destruct' method which runs all such default destructors, in
   2835      reverse order.
   2836 
   2837      The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
   2838      thusly generated only operate on instance variables declared in the
   2839      current Objective-C class, and not those inherited from
   2840      superclasses.  It is the responsibility of the Objective-C runtime
   2841      to invoke all such methods in an object's inheritance hierarchy.
   2842      The '- (id) .cxx_construct' methods are invoked by the runtime
   2843      immediately after a new object instance is allocated; the '- (void)
   2844      .cxx_destruct' methods are invoked immediately before the runtime
   2845      deallocates an object instance.
   2846 
   2847      As of this writing, only the NeXT runtime on Mac OS X 10.4 and
   2848      later has support for invoking the '- (id) .cxx_construct' and '-
   2849      (void) .cxx_destruct' methods.
   2850 
   2851 '-fobjc-direct-dispatch'
   2852      Allow fast jumps to the message dispatcher.  On Darwin this is
   2853      accomplished via the comm page.
   2854 
   2855 '-fobjc-exceptions'
   2856      Enable syntactic support for structured exception handling in
   2857      Objective-C, similar to what is offered by C++ and Java.  This
   2858      option is required to use the Objective-C keywords '@try',
   2859      '@throw', '@catch', '@finally' and '@synchronized'.  This option is
   2860      available with both the GNU runtime and the NeXT runtime (but not
   2861      available in conjunction with the NeXT runtime on Mac OS X 10.2 and
   2862      earlier).
   2863 
   2864 '-fobjc-gc'
   2865      Enable garbage collection (GC) in Objective-C and Objective-C++
   2866      programs.  This option is only available with the NeXT runtime; the
   2867      GNU runtime has a different garbage collection implementation that
   2868      does not require special compiler flags.
   2869 
   2870 '-fobjc-nilcheck'
   2871      For the NeXT runtime with version 2 of the ABI, check for a nil
   2872      receiver in method invocations before doing the actual method call.
   2873      This is the default and can be disabled using '-fno-objc-nilcheck'.
   2874      Class methods and super calls are never checked for nil in this way
   2875      no matter what this flag is set to.  Currently this flag does
   2876      nothing when the GNU runtime, or an older version of the NeXT
   2877      runtime ABI, is used.
   2878 
   2879 '-fobjc-std=objc1'
   2880      Conform to the language syntax of Objective-C 1.0, the language
   2881      recognized by GCC 4.0.  This only affects the Objective-C additions
   2882      to the C/C++ language; it does not affect conformance to C/C++
   2883      standards, which is controlled by the separate C/C++ dialect option
   2884      flags.  When this option is used with the Objective-C or
   2885      Objective-C++ compiler, any Objective-C syntax that is not
   2886      recognized by GCC 4.0 is rejected.  This is useful if you need to
   2887      make sure that your Objective-C code can be compiled with older
   2888      versions of GCC.
   2889 
   2890 '-freplace-objc-classes'
   2891      Emit a special marker instructing 'ld(1)' not to statically link in
   2892      the resulting object file, and allow 'dyld(1)' to load it in at run
   2893      time instead.  This is used in conjunction with the
   2894      Fix-and-Continue debugging mode, where the object file in question
   2895      may be recompiled and dynamically reloaded in the course of program
   2896      execution, without the need to restart the program itself.
   2897      Currently, Fix-and-Continue functionality is only available in
   2898      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
   2899 
   2900 '-fzero-link'
   2901      When compiling for the NeXT runtime, the compiler ordinarily
   2902      replaces calls to 'objc_getClass("...")' (when the name of the
   2903      class is known at compile time) with static class references that
   2904      get initialized at load time, which improves run-time performance.
   2905      Specifying the '-fzero-link' flag suppresses this behavior and
   2906      causes calls to 'objc_getClass("...")' to be retained.  This is
   2907      useful in Zero-Link debugging mode, since it allows for individual
   2908      class implementations to be modified during program execution.  The
   2909      GNU runtime currently always retains calls to
   2910      'objc_get_class("...")' regardless of command-line options.
   2911 
   2912 '-gen-decls'
   2913      Dump interface declarations for all classes seen in the source file
   2914      to a file named 'SOURCENAME.decl'.
   2915 
   2916 '-Wassign-intercept (Objective-C and Objective-C++ only)'
   2917      Warn whenever an Objective-C assignment is being intercepted by the
   2918      garbage collector.
   2919 
   2920 '-Wno-protocol (Objective-C and Objective-C++ only)'
   2921      If a class is declared to implement a protocol, a warning is issued
   2922      for every method in the protocol that is not implemented by the
   2923      class.  The default behavior is to issue a warning for every method
   2924      not explicitly implemented in the class, even if a method
   2925      implementation is inherited from the superclass.  If you use the
   2926      '-Wno-protocol' option, then methods inherited from the superclass
   2927      are considered to be implemented, and no warning is issued for
   2928      them.
   2929 
   2930 '-Wselector (Objective-C and Objective-C++ only)'
   2931      Warn if multiple methods of different types for the same selector
   2932      are found during compilation.  The check is performed on the list
   2933      of methods in the final stage of compilation.  Additionally, a
   2934      check is performed for each selector appearing in a
   2935      '@selector(...)' expression, and a corresponding method for that
   2936      selector has been found during compilation.  Because these checks
   2937      scan the method table only at the end of compilation, these
   2938      warnings are not produced if the final stage of compilation is not
   2939      reached, for example because an error is found during compilation,
   2940      or because the '-fsyntax-only' option is being used.
   2941 
   2942 '-Wstrict-selector-match (Objective-C and Objective-C++ only)'
   2943      Warn if multiple methods with differing argument and/or return
   2944      types are found for a given selector when attempting to send a
   2945      message using this selector to a receiver of type 'id' or 'Class'.
   2946      When this flag is off (which is the default behavior), the compiler
   2947      omits such warnings if any differences found are confined to types
   2948      that share the same size and alignment.
   2949 
   2950 '-Wundeclared-selector (Objective-C and Objective-C++ only)'
   2951      Warn if a '@selector(...)' expression referring to an undeclared
   2952      selector is found.  A selector is considered undeclared if no
   2953      method with that name has been declared before the '@selector(...)'
   2954      expression, either explicitly in an '@interface' or '@protocol'
   2955      declaration, or implicitly in an '@implementation' section.  This
   2956      option always performs its checks as soon as a '@selector(...)'
   2957      expression is found, while '-Wselector' only performs its checks in
   2958      the final stage of compilation.  This also enforces the coding
   2959      style convention that methods and selectors must be declared before
   2960      being used.
   2961 
   2962 '-print-objc-runtime-info'
   2963      Generate C header describing the largest structure that is passed
   2964      by value, if any.
   2965 
   2966 
   2967 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
   2968 
   2969 3.7 Options to Control Diagnostic Messages Formatting
   2970 =====================================================
   2971 
   2972 Traditionally, diagnostic messages have been formatted irrespective of
   2973 the output device's aspect (e.g. its width, ...).  You can use the
   2974 options described below to control the formatting algorithm for
   2975 diagnostic messages, e.g. how many characters per line, how often source
   2976 location information should be reported.  Note that some language front
   2977 ends may not honor these options.
   2978 
   2979 '-fmessage-length=N'
   2980      Try to format error messages so that they fit on lines of about N
   2981      characters.  The default is 72 characters for 'g++' and 0 for the
   2982      rest of the front ends supported by GCC.  If N is zero, then no
   2983      line-wrapping is done; each error message appears on a single line.
   2984 
   2985 '-fdiagnostics-show-location=once'
   2986      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   2987      messages reporter to emit source location information _once_; that
   2988      is, in case the message is too long to fit on a single physical
   2989      line and has to be wrapped, the source location won't be emitted
   2990      (as prefix) again, over and over, in subsequent continuation lines.
   2991      This is the default behavior.
   2992 
   2993 '-fdiagnostics-show-location=every-line'
   2994      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   2995      messages reporter to emit the same source location information (as
   2996      prefix) for physical lines that result from the process of breaking
   2997      a message which is too long to fit on a single line.
   2998 
   2999 '-fno-diagnostics-show-option'
   3000      By default, each diagnostic emitted includes text indicating the
   3001      command-line option that directly controls the diagnostic (if such
   3002      an option is known to the diagnostic machinery).  Specifying the
   3003      '-fno-diagnostics-show-option' flag suppresses that behavior.
   3004 
   3005 '-fno-diagnostics-show-caret'
   3006      By default, each diagnostic emitted includes the original source
   3007      line and a caret '^' indicating the column.  This option suppresses
   3008      this information.
   3009 
   3010 
   3011 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
   3012 
   3013 3.8 Options to Request or Suppress Warnings
   3014 ===========================================
   3015 
   3016 Warnings are diagnostic messages that report constructions that are not
   3017 inherently erroneous but that are risky or suggest there may have been
   3018 an error.
   3019 
   3020  The following language-independent options do not enable specific
   3021 warnings but control the kinds of diagnostics produced by GCC.
   3022 
   3023 '-fsyntax-only'
   3024      Check the code for syntax errors, but don't do anything beyond
   3025      that.
   3026 
   3027 '-fmax-errors=N'
   3028      Limits the maximum number of error messages to N, at which point
   3029      GCC bails out rather than attempting to continue processing the
   3030      source code.  If N is 0 (the default), there is no limit on the
   3031      number of error messages produced.  If '-Wfatal-errors' is also
   3032      specified, then '-Wfatal-errors' takes precedence over this option.
   3033 
   3034 '-w'
   3035      Inhibit all warning messages.
   3036 
   3037 '-Werror'
   3038      Make all warnings into errors.
   3039 
   3040 '-Werror='
   3041      Make the specified warning into an error.  The specifier for a
   3042      warning is appended; for example '-Werror=switch' turns the
   3043      warnings controlled by '-Wswitch' into errors.  This switch takes a
   3044      negative form, to be used to negate '-Werror' for specific
   3045      warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
   3046      not be errors, even when '-Werror' is in effect.
   3047 
   3048      The warning message for each controllable warning includes the
   3049      option that controls the warning.  That option can then be used
   3050      with '-Werror=' and '-Wno-error=' as described above.  (Printing of
   3051      the option in the warning message can be disabled using the
   3052      '-fno-diagnostics-show-option' flag.)
   3053 
   3054      Note that specifying '-Werror='FOO automatically implies '-W'FOO.
   3055      However, '-Wno-error='FOO does not imply anything.
   3056 
   3057 '-Wfatal-errors'
   3058      This option causes the compiler to abort compilation on the first
   3059      error occurred rather than trying to keep going and printing
   3060      further error messages.
   3061 
   3062  You can request many specific warnings with options beginning with
   3063 '-W', for example '-Wimplicit' to request warnings on implicit
   3064 declarations.  Each of these specific warning options also has a
   3065 negative form beginning '-Wno-' to turn off warnings; for example,
   3066 '-Wno-implicit'.  This manual lists only one of the two forms, whichever
   3067 is not the default.  For further language-specific options also refer to
   3068 *note C++ Dialect Options:: and *note Objective-C and Objective-C++
   3069 Dialect Options::.
   3070 
   3071  When an unrecognized warning option is requested (e.g.,
   3072 '-Wunknown-warning'), GCC emits a diagnostic stating that the option is
   3073 not recognized.  However, if the '-Wno-' form is used, the behavior is
   3074 slightly different: no diagnostic is produced for '-Wno-unknown-warning'
   3075 unless other diagnostics are being produced.  This allows the use of new
   3076 '-Wno-' options with old compilers, but if something goes wrong, the
   3077 compiler warns that an unrecognized option is present.
   3078 
   3079 '-Wpedantic'
   3080 '-pedantic'
   3081      Issue all the warnings demanded by strict ISO C and ISO C++; reject
   3082      all programs that use forbidden extensions, and some other programs
   3083      that do not follow ISO C and ISO C++.  For ISO C, follows the
   3084      version of the ISO C standard specified by any '-std' option used.
   3085 
   3086      Valid ISO C and ISO C++ programs should compile properly with or
   3087      without this option (though a rare few require '-ansi' or a '-std'
   3088      option specifying the required version of ISO C).  However, without
   3089      this option, certain GNU extensions and traditional C and C++
   3090      features are supported as well.  With this option, they are
   3091      rejected.
   3092 
   3093      '-Wpedantic' does not cause warning messages for use of the
   3094      alternate keywords whose names begin and end with '__'.  Pedantic
   3095      warnings are also disabled in the expression that follows
   3096      '__extension__'.  However, only system header files should use
   3097      these escape routes; application programs should avoid them.  *Note
   3098      Alternate Keywords::.
   3099 
   3100      Some users try to use '-Wpedantic' to check programs for strict ISO
   3101      C conformance.  They soon find that it does not do quite what they
   3102      want: it finds some non-ISO practices, but not all--only those for
   3103      which ISO C _requires_ a diagnostic, and some others for which
   3104      diagnostics have been added.
   3105 
   3106      A feature to report any failure to conform to ISO C might be useful
   3107      in some instances, but would require considerable additional work
   3108      and would be quite different from '-Wpedantic'.  We don't have
   3109      plans to support such a feature in the near future.
   3110 
   3111      Where the standard specified with '-std' represents a GNU extended
   3112      dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
   3113      "base standard", the version of ISO C on which the GNU extended
   3114      dialect is based.  Warnings from '-Wpedantic' are given where they
   3115      are required by the base standard.  (It does not make sense for
   3116      such warnings to be given only for features not in the specified
   3117      GNU C dialect, since by definition the GNU dialects of C include
   3118      all features the compiler supports with the given option, and there
   3119      would be nothing to warn about.)
   3120 
   3121 '-pedantic-errors'
   3122      Like '-Wpedantic', except that errors are produced rather than
   3123      warnings.
   3124 
   3125 '-Wall'
   3126      This enables all the warnings about constructions that some users
   3127      consider questionable, and that are easy to avoid (or modify to
   3128      prevent the warning), even in conjunction with macros.  This also
   3129      enables some language-specific warnings described in *note C++
   3130      Dialect Options:: and *note Objective-C and Objective-C++ Dialect
   3131      Options::.
   3132 
   3133      '-Wall' turns on the following warning flags:
   3134 
   3135           -Waddress
   3136           -Warray-bounds (only with -O2)
   3137           -Wc++11-compat
   3138           -Wchar-subscripts
   3139           -Wenum-compare (in C/ObjC; this is on by default in C++)
   3140           -Wimplicit-int (C and Objective-C only)
   3141           -Wimplicit-function-declaration (C and Objective-C only)
   3142           -Wcomment
   3143           -Wformat
   3144           -Wmain (only for C/ObjC and unless -ffreestanding)
   3145           -Wmaybe-uninitialized
   3146           -Wmissing-braces (only for C/ObjC)
   3147           -Wnonnull
   3148           -Wparentheses
   3149           -Wpointer-sign
   3150           -Wreorder
   3151           -Wreturn-type
   3152           -Wsequence-point
   3153           -Wsign-compare (only in C++)
   3154           -Wstrict-aliasing
   3155           -Wstrict-overflow=1
   3156           -Wswitch
   3157           -Wtrigraphs
   3158           -Wuninitialized
   3159           -Wunknown-pragmas
   3160           -Wunused-function
   3161           -Wunused-label
   3162           -Wunused-value
   3163           -Wunused-variable
   3164           -Wvolatile-register-var
   3165 
   3166 
   3167      Note that some warning flags are not implied by '-Wall'.  Some of
   3168      them warn about constructions that users generally do not consider
   3169      questionable, but which occasionally you might wish to check for;
   3170      others warn about constructions that are necessary or hard to avoid
   3171      in some cases, and there is no simple way to modify the code to
   3172      suppress the warning.  Some of them are enabled by '-Wextra' but
   3173      many of them must be enabled individually.
   3174 
   3175 '-Wextra'
   3176      This enables some extra warning flags that are not enabled by
   3177      '-Wall'.  (This option used to be called '-W'.  The older name is
   3178      still supported, but the newer name is more descriptive.)
   3179 
   3180           -Wclobbered
   3181           -Wempty-body
   3182           -Wignored-qualifiers
   3183           -Wmissing-field-initializers
   3184           -Wmissing-parameter-type (C only)
   3185           -Wold-style-declaration (C only)
   3186           -Woverride-init
   3187           -Wsign-compare
   3188           -Wtype-limits
   3189           -Wuninitialized
   3190           -Wunused-parameter (only with -Wunused or -Wall)
   3191           -Wunused-but-set-parameter (only with -Wunused or -Wall)
   3192 
   3193 
   3194      The option '-Wextra' also prints warning messages for the following
   3195      cases:
   3196 
   3197         * A pointer is compared against integer zero with '<', '<=',
   3198           '>', or '>='.
   3199 
   3200         * (C++ only) An enumerator and a non-enumerator both appear in a
   3201           conditional expression.
   3202 
   3203         * (C++ only) Ambiguous virtual bases.
   3204 
   3205         * (C++ only) Subscripting an array that has been declared
   3206           'register'.
   3207 
   3208         * (C++ only) Taking the address of a variable that has been
   3209           declared 'register'.
   3210 
   3211         * (C++ only) A base class is not initialized in a derived
   3212           class's copy constructor.
   3213 
   3214 '-Wchar-subscripts'
   3215      Warn if an array subscript has type 'char'.  This is a common cause
   3216      of error, as programmers often forget that this type is signed on
   3217      some machines.  This warning is enabled by '-Wall'.
   3218 
   3219 '-Wcomment'
   3220      Warn whenever a comment-start sequence '/*' appears in a '/*'
   3221      comment, or whenever a Backslash-Newline appears in a '//' comment.
   3222      This warning is enabled by '-Wall'.
   3223 
   3224 '-Wno-coverage-mismatch'
   3225      Warn if feedback profiles do not match when using the
   3226      '-fprofile-use' option.  If a source file is changed between
   3227      compiling with '-fprofile-gen' and with '-fprofile-use', the files
   3228      with the profile feedback can fail to match the source file and GCC
   3229      cannot use the profile feedback information.  By default, this
   3230      warning is enabled and is treated as an error.
   3231      '-Wno-coverage-mismatch' can be used to disable the warning or
   3232      '-Wno-error=coverage-mismatch' can be used to disable the error.
   3233      Disabling the error for this warning can result in poorly optimized
   3234      code and is useful only in the case of very minor changes such as
   3235      bug fixes to an existing code-base.  Completely disabling the
   3236      warning is not recommended.
   3237 
   3238 '-Wno-cpp'
   3239      (C, Objective-C, C++, Objective-C++ and Fortran only)
   3240 
   3241      Suppress warning messages emitted by '#warning' directives.
   3242 
   3243 '-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
   3244      Give a warning when a value of type 'float' is implicitly promoted
   3245      to 'double'.  CPUs with a 32-bit "single-precision" floating-point
   3246      unit implement 'float' in hardware, but emulate 'double' in
   3247      software.  On such a machine, doing computations using 'double'
   3248      values is much more expensive because of the overhead required for
   3249      software emulation.
   3250 
   3251      It is easy to accidentally do computations with 'double' because
   3252      floating-point literals are implicitly of type 'double'.  For
   3253      example, in:
   3254           float area(float radius)
   3255           {
   3256              return 3.14159 * radius * radius;
   3257           }
   3258      the compiler performs the entire computation with 'double' because
   3259      the floating-point literal is a 'double'.
   3260 
   3261 '-Wformat'
   3262 '-Wformat=N'
   3263      Check calls to 'printf' and 'scanf', etc., to make sure that the
   3264      arguments supplied have types appropriate to the format string
   3265      specified, and that the conversions specified in the format string
   3266      make sense.  This includes standard functions, and others specified
   3267      by format attributes (*note Function Attributes::), in the
   3268      'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
   3269      not in the C standard) families (or other target-specific
   3270      families).  Which functions are checked without format attributes
   3271      having been specified depends on the standard version selected, and
   3272      such checks of functions without the attribute specified are
   3273      disabled by '-ffreestanding' or '-fno-builtin'.
   3274 
   3275      The formats are checked against the format features supported by
   3276      GNU libc version 2.2.  These include all ISO C90 and C99 features,
   3277      as well as features from the Single Unix Specification and some BSD
   3278      and GNU extensions.  Other library implementations may not support
   3279      all these features; GCC does not support warning about features
   3280      that go beyond a particular library's limitations.  However, if
   3281      '-Wpedantic' is used with '-Wformat', warnings are given about
   3282      format features not in the selected standard version (but not for
   3283      'strfmon' formats, since those are not in any version of the C
   3284      standard).  *Note Options Controlling C Dialect: C Dialect Options.
   3285 
   3286      '-Wformat=1'
   3287      '-Wformat'
   3288           Option '-Wformat' is equivalent to '-Wformat=1', and
   3289           '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
   3290           also checks for null format arguments for several functions,
   3291           '-Wformat' also implies '-Wnonnull'.  Some aspects of this
   3292           level of format checking can be disabled by the options:
   3293           '-Wno-format-contains-nul', '-Wno-format-extra-args', and
   3294           '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.
   3295 
   3296      '-Wno-format-contains-nul'
   3297           If '-Wformat' is specified, do not warn about format strings
   3298           that contain NUL bytes.
   3299 
   3300      '-Wno-format-extra-args'
   3301           If '-Wformat' is specified, do not warn about excess arguments
   3302           to a 'printf' or 'scanf' format function.  The C standard
   3303           specifies that such arguments are ignored.
   3304 
   3305           Where the unused arguments lie between used arguments that are
   3306           specified with '$' operand number specifications, normally
   3307           warnings are still given, since the implementation could not
   3308           know what type to pass to 'va_arg' to skip the unused
   3309           arguments.  However, in the case of 'scanf' formats, this
   3310           option suppresses the warning if the unused arguments are all
   3311           pointers, since the Single Unix Specification says that such
   3312           unused arguments are allowed.
   3313 
   3314      '-Wno-format-zero-length'
   3315           If '-Wformat' is specified, do not warn about zero-length
   3316           formats.  The C standard specifies that zero-length formats
   3317           are allowed.
   3318 
   3319      '-Wformat=2'
   3320           Enable '-Wformat' plus additional format checks.  Currently
   3321           equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
   3322           -Wformat-y2k'.
   3323 
   3324      '-Wformat-nonliteral'
   3325           If '-Wformat' is specified, also warn if the format string is
   3326           not a string literal and so cannot be checked, unless the
   3327           format function takes its format arguments as a 'va_list'.
   3328 
   3329      '-Wformat-security'
   3330           If '-Wformat' is specified, also warn about uses of format
   3331           functions that represent possible security problems.  At
   3332           present, this warns about calls to 'printf' and 'scanf'
   3333           functions where the format string is not a string literal and
   3334           there are no format arguments, as in 'printf (foo);'.  This
   3335           may be a security hole if the format string came from
   3336           untrusted input and contains '%n'.  (This is currently a
   3337           subset of what '-Wformat-nonliteral' warns about, but in
   3338           future warnings may be added to '-Wformat-security' that are
   3339           not included in '-Wformat-nonliteral'.)
   3340 
   3341      '-Wformat-y2k'
   3342           If '-Wformat' is specified, also warn about 'strftime' formats
   3343           that may yield only a two-digit year.
   3344 
   3345 '-Wnonnull'
   3346      Warn about passing a null pointer for arguments marked as requiring
   3347      a non-null value by the 'nonnull' function attribute.
   3348 
   3349      '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
   3350      disabled with the '-Wno-nonnull' option.
   3351 
   3352 '-Winit-self (C, C++, Objective-C and Objective-C++ only)'
   3353      Warn about uninitialized variables that are initialized with
   3354      themselves.  Note this option can only be used with the
   3355      '-Wuninitialized' option.
   3356 
   3357      For example, GCC warns about 'i' being uninitialized in the
   3358      following snippet only when '-Winit-self' has been specified:
   3359           int f()
   3360           {
   3361             int i = i;
   3362             return i;
   3363           }
   3364 
   3365      This warning is enabled by '-Wall' in C++.
   3366 
   3367 '-Wimplicit-int (C and Objective-C only)'
   3368      Warn when a declaration does not specify a type.  This warning is
   3369      enabled by '-Wall'.
   3370 
   3371 '-Wimplicit-function-declaration (C and Objective-C only)'
   3372      Give a warning whenever a function is used before being declared.
   3373      In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled
   3374      by default and it is made into an error by '-pedantic-errors'.
   3375      This warning is also enabled by '-Wall'.
   3376 
   3377 '-Wimplicit (C and Objective-C only)'
   3378      Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
   3379      This warning is enabled by '-Wall'.
   3380 
   3381 '-Wignored-qualifiers (C and C++ only)'
   3382      Warn if the return type of a function has a type qualifier such as
   3383      'const'.  For ISO C such a type qualifier has no effect, since the
   3384      value returned by a function is not an lvalue.  For C++, the
   3385      warning is only emitted for scalar types or 'void'.  ISO C
   3386      prohibits qualified 'void' return types on function definitions, so
   3387      such return types always receive a warning even without this
   3388      option.
   3389 
   3390      This warning is also enabled by '-Wextra'.
   3391 
   3392 '-Wmain'
   3393      Warn if the type of 'main' is suspicious.  'main' should be a
   3394      function with external linkage, returning int, taking either zero
   3395      arguments, two, or three arguments of appropriate types.  This
   3396      warning is enabled by default in C++ and is enabled by either
   3397      '-Wall' or '-Wpedantic'.
   3398 
   3399 '-Wmissing-braces'
   3400      Warn if an aggregate or union initializer is not fully bracketed.
   3401      In the following example, the initializer for 'a' is not fully
   3402      bracketed, but that for 'b' is fully bracketed.  This warning is
   3403      enabled by '-Wall' in C.
   3404 
   3405           int a[2][2] = { 0, 1, 2, 3 };
   3406           int b[2][2] = { { 0, 1 }, { 2, 3 } };
   3407 
   3408      This warning is enabled by '-Wall'.
   3409 
   3410 '-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
   3411      Warn if a user-supplied include directory does not exist.
   3412 
   3413 '-Wparentheses'
   3414      Warn if parentheses are omitted in certain contexts, such as when
   3415      there is an assignment in a context where a truth value is
   3416      expected, or when operators are nested whose precedence people
   3417      often get confused about.
   3418 
   3419      Also warn if a comparison like 'x<=y<=z' appears; this is
   3420      equivalent to '(x<=y ? 1 : 0) <= z', which is a different
   3421      interpretation from that of ordinary mathematical notation.
   3422 
   3423      Also warn about constructions where there may be confusion to which
   3424      'if' statement an 'else' branch belongs.  Here is an example of
   3425      such a case:
   3426 
   3427           {
   3428             if (a)
   3429               if (b)
   3430                 foo ();
   3431             else
   3432               bar ();
   3433           }
   3434 
   3435      In C/C++, every 'else' branch belongs to the innermost possible
   3436      'if' statement, which in this example is 'if (b)'.  This is often
   3437      not what the programmer expected, as illustrated in the above
   3438      example by indentation the programmer chose.  When there is the
   3439      potential for this confusion, GCC issues a warning when this flag
   3440      is specified.  To eliminate the warning, add explicit braces around
   3441      the innermost 'if' statement so there is no way the 'else' can
   3442      belong to the enclosing 'if'.  The resulting code looks like this:
   3443 
   3444           {
   3445             if (a)
   3446               {
   3447                 if (b)
   3448                   foo ();
   3449                 else
   3450                   bar ();
   3451               }
   3452           }
   3453 
   3454      Also warn for dangerous uses of the GNU extension to '?:' with
   3455      omitted middle operand.  When the condition in the '?': operator is
   3456      a boolean expression, the omitted value is always 1.  Often
   3457      programmers expect it to be a value computed inside the conditional
   3458      expression instead.
   3459 
   3460      This warning is enabled by '-Wall'.
   3461 
   3462 '-Wsequence-point'
   3463      Warn about code that may have undefined semantics because of
   3464      violations of sequence point rules in the C and C++ standards.
   3465 
   3466      The C and C++ standards define the order in which expressions in a
   3467      C/C++ program are evaluated in terms of "sequence points", which
   3468      represent a partial ordering between the execution of parts of the
   3469      program: those executed before the sequence point, and those
   3470      executed after it.  These occur after the evaluation of a full
   3471      expression (one which is not part of a larger expression), after
   3472      the evaluation of the first operand of a '&&', '||', '? :' or ','
   3473      (comma) operator, before a function is called (but after the
   3474      evaluation of its arguments and the expression denoting the called
   3475      function), and in certain other places.  Other than as expressed by
   3476      the sequence point rules, the order of evaluation of subexpressions
   3477      of an expression is not specified.  All these rules describe only a
   3478      partial order rather than a total order, since, for example, if two
   3479      functions are called within one expression with no sequence point
   3480      between them, the order in which the functions are called is not
   3481      specified.  However, the standards committee have ruled that
   3482      function calls do not overlap.
   3483 
   3484      It is not specified when between sequence points modifications to
   3485      the values of objects take effect.  Programs whose behavior depends
   3486      on this have undefined behavior; the C and C++ standards specify
   3487      that "Between the previous and next sequence point an object shall
   3488      have its stored value modified at most once by the evaluation of an
   3489      expression.  Furthermore, the prior value shall be read only to
   3490      determine the value to be stored.".  If a program breaks these
   3491      rules, the results on any particular implementation are entirely
   3492      unpredictable.
   3493 
   3494      Examples of code with undefined behavior are 'a = a++;', 'a[n] =
   3495      b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
   3496      diagnosed by this option, and it may give an occasional false
   3497      positive result, but in general it has been found fairly effective
   3498      at detecting this sort of problem in programs.
   3499 
   3500      The standard is worded confusingly, therefore there is some debate
   3501      over the precise meaning of the sequence point rules in subtle
   3502      cases.  Links to discussions of the problem, including proposed
   3503      formal definitions, may be found on the GCC readings page, at
   3504      <http://gcc.gnu.org/readings.html>.
   3505 
   3506      This warning is enabled by '-Wall' for C and C++.
   3507 
   3508 '-Wno-return-local-addr'
   3509      Do not warn about returning a pointer (or in C++, a reference) to a
   3510      variable that goes out of scope after the function returns.
   3511 
   3512 '-Wreturn-type'
   3513      Warn whenever a function is defined with a return type that
   3514      defaults to 'int'.  Also warn about any 'return' statement with no
   3515      return value in a function whose return type is not 'void' (falling
   3516      off the end of the function body is considered returning without a
   3517      value), and about a 'return' statement with an expression in a
   3518      function whose return type is 'void'.
   3519 
   3520      For C++, a function without return type always produces a
   3521      diagnostic message, even when '-Wno-return-type' is specified.  The
   3522      only exceptions are 'main' and functions defined in system headers.
   3523 
   3524      This warning is enabled by '-Wall'.
   3525 
   3526 '-Wswitch'
   3527      Warn whenever a 'switch' statement has an index of enumerated type
   3528      and lacks a 'case' for one or more of the named codes of that
   3529      enumeration.  (The presence of a 'default' label prevents this
   3530      warning.)  'case' labels outside the enumeration range also provoke
   3531      warnings when this option is used (even if there is a 'default'
   3532      label).  This warning is enabled by '-Wall'.
   3533 
   3534 '-Wswitch-default'
   3535      Warn whenever a 'switch' statement does not have a 'default' case.
   3536 
   3537 '-Wswitch-enum'
   3538      Warn whenever a 'switch' statement has an index of enumerated type
   3539      and lacks a 'case' for one or more of the named codes of that
   3540      enumeration.  'case' labels outside the enumeration range also
   3541      provoke warnings when this option is used.  The only difference
   3542      between '-Wswitch' and this option is that this option gives a
   3543      warning about an omitted enumeration code even if there is a
   3544      'default' label.
   3545 
   3546 '-Wsync-nand (C and C++ only)'
   3547      Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
   3548      built-in functions are used.  These functions changed semantics in
   3549      GCC 4.4.
   3550 
   3551 '-Wtrigraphs'
   3552      Warn if any trigraphs are encountered that might change the meaning
   3553      of the program (trigraphs within comments are not warned about).
   3554      This warning is enabled by '-Wall'.
   3555 
   3556 '-Wunused-but-set-parameter'
   3557      Warn whenever a function parameter is assigned to, but otherwise
   3558      unused (aside from its declaration).
   3559 
   3560      To suppress this warning use the 'unused' attribute (*note Variable
   3561      Attributes::).
   3562 
   3563      This warning is also enabled by '-Wunused' together with '-Wextra'.
   3564 
   3565 '-Wunused-but-set-variable'
   3566      Warn whenever a local variable is assigned to, but otherwise unused
   3567      (aside from its declaration).  This warning is enabled by '-Wall'.
   3568 
   3569      To suppress this warning use the 'unused' attribute (*note Variable
   3570      Attributes::).
   3571 
   3572      This warning is also enabled by '-Wunused', which is enabled by
   3573      '-Wall'.
   3574 
   3575 '-Wunused-function'
   3576      Warn whenever a static function is declared but not defined or a
   3577      non-inline static function is unused.  This warning is enabled by
   3578      '-Wall'.
   3579 
   3580 '-Wunused-label'
   3581      Warn whenever a label is declared but not used.  This warning is
   3582      enabled by '-Wall'.
   3583 
   3584      To suppress this warning use the 'unused' attribute (*note Variable
   3585      Attributes::).
   3586 
   3587 '-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
   3588      Warn when a typedef locally defined in a function is not used.
   3589      This warning is enabled by '-Wall'.
   3590 
   3591 '-Wunused-parameter'
   3592      Warn whenever a function parameter is unused aside from its
   3593      declaration.
   3594 
   3595      To suppress this warning use the 'unused' attribute (*note Variable
   3596      Attributes::).
   3597 
   3598 '-Wno-unused-result'
   3599      Do not warn if a caller of a function marked with attribute
   3600      'warn_unused_result' (*note Function Attributes::) does not use its
   3601      return value.  The default is '-Wunused-result'.
   3602 
   3603 '-Wunused-variable'
   3604      Warn whenever a local variable or non-constant static variable is
   3605      unused aside from its declaration.  This warning is enabled by
   3606      '-Wall'.
   3607 
   3608      To suppress this warning use the 'unused' attribute (*note Variable
   3609      Attributes::).
   3610 
   3611 '-Wunused-value'
   3612      Warn whenever a statement computes a result that is explicitly not
   3613      used.  To suppress this warning cast the unused expression to
   3614      'void'.  This includes an expression-statement or the left-hand
   3615      side of a comma expression that contains no side effects.  For
   3616      example, an expression such as 'x[i,j]' causes a warning, while
   3617      'x[(void)i,j]' does not.
   3618 
   3619      This warning is enabled by '-Wall'.
   3620 
   3621 '-Wunused'
   3622      All the above '-Wunused' options combined.
   3623 
   3624      In order to get a warning about an unused function parameter, you
   3625      must either specify '-Wextra -Wunused' (note that '-Wall' implies
   3626      '-Wunused'), or separately specify '-Wunused-parameter'.
   3627 
   3628 '-Wuninitialized'
   3629      Warn if an automatic variable is used without first being
   3630      initialized or if a variable may be clobbered by a 'setjmp' call.
   3631      In C++, warn if a non-static reference or non-static 'const' member
   3632      appears in a class without constructors.
   3633 
   3634      If you want to warn about code that uses the uninitialized value of
   3635      the variable in its own initializer, use the '-Winit-self' option.
   3636 
   3637      These warnings occur for individual uninitialized or clobbered
   3638      elements of structure, union or array variables as well as for
   3639      variables that are uninitialized or clobbered as a whole.  They do
   3640      not occur for variables or elements declared 'volatile'.  Because
   3641      these warnings depend on optimization, the exact variables or
   3642      elements for which there are warnings depends on the precise
   3643      optimization options and version of GCC used.
   3644 
   3645      Note that there may be no warning about a variable that is used
   3646      only to compute a value that itself is never used, because such
   3647      computations may be deleted by data flow analysis before the
   3648      warnings are printed.
   3649 
   3650 '-Wmaybe-uninitialized'
   3651      For an automatic variable, if there exists a path from the function
   3652      entry to a use of the variable that is initialized, but there exist
   3653      some other paths for which the variable is not initialized, the
   3654      compiler emits a warning if it cannot prove the uninitialized paths
   3655      are not executed at run time.  These warnings are made optional
   3656      because GCC is not smart enough to see all the reasons why the code
   3657      might be correct in spite of appearing to have an error.  Here is
   3658      one example of how this can happen:
   3659 
   3660           {
   3661             int x;
   3662             switch (y)
   3663               {
   3664               case 1: x = 1;
   3665                 break;
   3666               case 2: x = 4;
   3667                 break;
   3668               case 3: x = 5;
   3669               }
   3670             foo (x);
   3671           }
   3672 
   3673      If the value of 'y' is always 1, 2 or 3, then 'x' is always
   3674      initialized, but GCC doesn't know this.  To suppress the warning,
   3675      you need to provide a default case with assert(0) or similar code.
   3676 
   3677      This option also warns when a non-volatile automatic variable might
   3678      be changed by a call to 'longjmp'.  These warnings as well are
   3679      possible only in optimizing compilation.
   3680 
   3681      The compiler sees only the calls to 'setjmp'.  It cannot know where
   3682      'longjmp' will be called; in fact, a signal handler could call it
   3683      at any point in the code.  As a result, you may get a warning even
   3684      when there is in fact no problem because 'longjmp' cannot in fact
   3685      be called at the place that would cause a problem.
   3686 
   3687      Some spurious warnings can be avoided if you declare all the
   3688      functions you use that never return as 'noreturn'.  *Note Function
   3689      Attributes::.
   3690 
   3691      This warning is enabled by '-Wall' or '-Wextra'.
   3692 
   3693 '-Wunknown-pragmas'
   3694      Warn when a '#pragma' directive is encountered that is not
   3695      understood by GCC.  If this command-line option is used, warnings
   3696      are even issued for unknown pragmas in system header files.  This
   3697      is not the case if the warnings are only enabled by the '-Wall'
   3698      command-line option.
   3699 
   3700 '-Wno-pragmas'
   3701      Do not warn about misuses of pragmas, such as incorrect parameters,
   3702      invalid syntax, or conflicts between pragmas.  See also
   3703      '-Wunknown-pragmas'.
   3704 
   3705 '-Wstrict-aliasing'
   3706      This option is only active when '-fstrict-aliasing' is active.  It
   3707      warns about code that might break the strict aliasing rules that
   3708      the compiler is using for optimization.  The warning does not catch
   3709      all cases, but does attempt to catch the more common pitfalls.  It
   3710      is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'
   3711 
   3712 '-Wstrict-aliasing=n'
   3713      This option is only active when '-fstrict-aliasing' is active.  It
   3714      warns about code that might break the strict aliasing rules that
   3715      the compiler is using for optimization.  Higher levels correspond
   3716      to higher accuracy (fewer false positives).  Higher levels also
   3717      correspond to more effort, similar to the way '-O' works.
   3718      '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.
   3719 
   3720      Level 1: Most aggressive, quick, least accurate.  Possibly useful
   3721      when higher levels do not warn but '-fstrict-aliasing' still breaks
   3722      the code, as it has very few false negatives.  However, it has many
   3723      false positives.  Warns for all pointer conversions between
   3724      possibly incompatible types, even if never dereferenced.  Runs in
   3725      the front end only.
   3726 
   3727      Level 2: Aggressive, quick, not too precise.  May still have many
   3728      false positives (not as many as level 1 though), and few false
   3729      negatives (but possibly more than level 1).  Unlike level 1, it
   3730      only warns when an address is taken.  Warns about incomplete types.
   3731      Runs in the front end only.
   3732 
   3733      Level 3 (default for '-Wstrict-aliasing'): Should have very few
   3734      false positives and few false negatives.  Slightly slower than
   3735      levels 1 or 2 when optimization is enabled.  Takes care of the
   3736      common pun+dereference pattern in the front end:
   3737      '*(int*)&some_float'.  If optimization is enabled, it also runs in
   3738      the back end, where it deals with multiple statement cases using
   3739      flow-sensitive points-to information.  Only warns when the
   3740      converted pointer is dereferenced.  Does not warn about incomplete
   3741      types.
   3742 
   3743 '-Wstrict-overflow'
   3744 '-Wstrict-overflow=N'
   3745      This option is only active when '-fstrict-overflow' is active.  It
   3746      warns about cases where the compiler optimizes based on the
   3747      assumption that signed overflow does not occur.  Note that it does
   3748      not warn about all cases where the code might overflow: it only
   3749      warns about cases where the compiler implements some optimization.
   3750      Thus this warning depends on the optimization level.
   3751 
   3752      An optimization that assumes that signed overflow does not occur is
   3753      perfectly safe if the values of the variables involved are such
   3754      that overflow never does, in fact, occur.  Therefore this warning
   3755      can easily give a false positive: a warning about code that is not
   3756      actually a problem.  To help focus on important issues, several
   3757      warning levels are defined.  No warnings are issued for the use of
   3758      undefined signed overflow when estimating how many iterations a
   3759      loop requires, in particular when determining whether a loop will
   3760      be executed at all.
   3761 
   3762      '-Wstrict-overflow=1'
   3763           Warn about cases that are both questionable and easy to avoid.
   3764           For example, with '-fstrict-overflow', the compiler simplifies
   3765           'x + 1 > x' to '1'.  This level of '-Wstrict-overflow' is
   3766           enabled by '-Wall'; higher levels are not, and must be
   3767           explicitly requested.
   3768 
   3769      '-Wstrict-overflow=2'
   3770           Also warn about other cases where a comparison is simplified
   3771           to a constant.  For example: 'abs (x) >= 0'.  This can only be
   3772           simplified when '-fstrict-overflow' is in effect, because 'abs
   3773           (INT_MIN)' overflows to 'INT_MIN', which is less than zero.
   3774           '-Wstrict-overflow' (with no level) is the same as
   3775           '-Wstrict-overflow=2'.
   3776 
   3777      '-Wstrict-overflow=3'
   3778           Also warn about other cases where a comparison is simplified.
   3779           For example: 'x + 1 > 1' is simplified to 'x > 0'.
   3780 
   3781      '-Wstrict-overflow=4'
   3782           Also warn about other simplifications not covered by the above
   3783           cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.
   3784 
   3785      '-Wstrict-overflow=5'
   3786           Also warn about cases where the compiler reduces the magnitude
   3787           of a constant involved in a comparison.  For example: 'x + 2 >
   3788           y' is simplified to 'x + 1 >= y'.  This is reported only at
   3789           the highest warning level because this simplification applies
   3790           to many comparisons, so this warning level gives a very large
   3791           number of false positives.
   3792 
   3793 '-Wsuggest-attribute=[pure|const|noreturn|format]'
   3794      Warn for cases where adding an attribute may be beneficial.  The
   3795      attributes currently supported are listed below.
   3796 
   3797      '-Wsuggest-attribute=pure'
   3798      '-Wsuggest-attribute=const'
   3799      '-Wsuggest-attribute=noreturn'
   3800 
   3801           Warn about functions that might be candidates for attributes
   3802           'pure', 'const' or 'noreturn'.  The compiler only warns for
   3803           functions visible in other compilation units or (in the case
   3804           of 'pure' and 'const') if it cannot prove that the function
   3805           returns normally.  A function returns normally if it doesn't
   3806           contain an infinite loop or return abnormally by throwing,
   3807           calling 'abort()' or trapping.  This analysis requires option
   3808           '-fipa-pure-const', which is enabled by default at '-O' and
   3809           higher.  Higher optimization levels improve the accuracy of
   3810           the analysis.
   3811 
   3812      '-Wsuggest-attribute=format'
   3813      '-Wmissing-format-attribute'
   3814 
   3815           Warn about function pointers that might be candidates for
   3816           'format' attributes.  Note these are only possible candidates,
   3817           not absolute ones.  GCC guesses that function pointers with
   3818           'format' attributes that are used in assignment,
   3819           initialization, parameter passing or return statements should
   3820           have a corresponding 'format' attribute in the resulting type.
   3821           I.e. the left-hand side of the assignment or initialization,
   3822           the type of the parameter variable, or the return type of the
   3823           containing function respectively should also have a 'format'
   3824           attribute to avoid the warning.
   3825 
   3826           GCC also warns about function definitions that might be
   3827           candidates for 'format' attributes.  Again, these are only
   3828           possible candidates.  GCC guesses that 'format' attributes
   3829           might be appropriate for any function that calls a function
   3830           like 'vprintf' or 'vscanf', but this might not always be the
   3831           case, and some functions for which 'format' attributes are
   3832           appropriate may not be detected.
   3833 
   3834 '-Warray-bounds'
   3835      This option is only active when '-ftree-vrp' is active (default for
   3836      '-O2' and above).  It warns about subscripts to arrays that are
   3837      always out of bounds.  This warning is enabled by '-Wall'.
   3838 
   3839 '-Wno-div-by-zero'
   3840      Do not warn about compile-time integer division by zero.
   3841      Floating-point division by zero is not warned about, as it can be a
   3842      legitimate way of obtaining infinities and NaNs.
   3843 
   3844 '-Wsystem-headers'
   3845      Print warning messages for constructs found in system header files.
   3846      Warnings from system headers are normally suppressed, on the
   3847      assumption that they usually do not indicate real problems and
   3848      would only make the compiler output harder to read.  Using this
   3849      command-line option tells GCC to emit warnings from system headers
   3850      as if they occurred in user code.  However, note that using '-Wall'
   3851      in conjunction with this option does _not_ warn about unknown
   3852      pragmas in system headers--for that, '-Wunknown-pragmas' must also
   3853      be used.
   3854 
   3855 '-Wtrampolines'
   3856      Warn about trampolines generated for pointers to nested functions.
   3857 
   3858      A trampoline is a small piece of data or code that is created at
   3859      run time on the stack when the address of a nested function is
   3860      taken, and is used to call the nested function indirectly.  For
   3861      some targets, it is made up of data only and thus requires no
   3862      special treatment.  But, for most targets, it is made up of code
   3863      and thus requires the stack to be made executable in order for the
   3864      program to work properly.
   3865 
   3866 '-Wfloat-equal'
   3867      Warn if floating-point values are used in equality comparisons.
   3868 
   3869      The idea behind this is that sometimes it is convenient (for the
   3870      programmer) to consider floating-point values as approximations to
   3871      infinitely precise real numbers.  If you are doing this, then you
   3872      need to compute (by analyzing the code, or in some other way) the
   3873      maximum or likely maximum error that the computation introduces,
   3874      and allow for it when performing comparisons (and when producing
   3875      output, but that's a different problem).  In particular, instead of
   3876      testing for equality, you should check to see whether the two
   3877      values have ranges that overlap; and this is done with the
   3878      relational operators, so equality comparisons are probably
   3879      mistaken.
   3880 
   3881 '-Wtraditional (C and Objective-C only)'
   3882      Warn about certain constructs that behave differently in
   3883      traditional and ISO C.  Also warn about ISO C constructs that have
   3884      no traditional C equivalent, and/or problematic constructs that
   3885      should be avoided.
   3886 
   3887         * Macro parameters that appear within string literals in the
   3888           macro body.  In traditional C macro replacement takes place
   3889           within string literals, but in ISO C it does not.
   3890 
   3891         * In traditional C, some preprocessor directives did not exist.
   3892           Traditional preprocessors only considered a line to be a
   3893           directive if the '#' appeared in column 1 on the line.
   3894           Therefore '-Wtraditional' warns about directives that
   3895           traditional C understands but ignores because the '#' does not
   3896           appear as the first character on the line.  It also suggests
   3897           you hide directives like '#pragma' not understood by
   3898           traditional C by indenting them.  Some traditional
   3899           implementations do not recognize '#elif', so this option
   3900           suggests avoiding it altogether.
   3901 
   3902         * A function-like macro that appears without arguments.
   3903 
   3904         * The unary plus operator.
   3905 
   3906         * The 'U' integer constant suffix, or the 'F' or 'L'
   3907           floating-point constant suffixes.  (Traditional C does support
   3908           the 'L' suffix on integer constants.)  Note, these suffixes
   3909           appear in macros defined in the system headers of most modern
   3910           systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
   3911           of these macros in user code might normally lead to spurious
   3912           warnings, however GCC's integrated preprocessor has enough
   3913           context to avoid warning in these cases.
   3914 
   3915         * A function declared external in one block and then used after
   3916           the end of the block.
   3917 
   3918         * A 'switch' statement has an operand of type 'long'.
   3919 
   3920         * A non-'static' function declaration follows a 'static' one.
   3921           This construct is not accepted by some traditional C
   3922           compilers.
   3923 
   3924         * The ISO type of an integer constant has a different width or
   3925           signedness from its traditional type.  This warning is only
   3926           issued if the base of the constant is ten.  I.e. hexadecimal
   3927           or octal values, which typically represent bit patterns, are
   3928           not warned about.
   3929 
   3930         * Usage of ISO string concatenation is detected.
   3931 
   3932         * Initialization of automatic aggregates.
   3933 
   3934         * Identifier conflicts with labels.  Traditional C lacks a
   3935           separate namespace for labels.
   3936 
   3937         * Initialization of unions.  If the initializer is zero, the
   3938           warning is omitted.  This is done under the assumption that
   3939           the zero initializer in user code appears conditioned on e.g.
   3940           '__STDC__' to avoid missing initializer warnings and relies on
   3941           default initialization to zero in the traditional C case.
   3942 
   3943         * Conversions by prototypes between fixed/floating-point values
   3944           and vice versa.  The absence of these prototypes when
   3945           compiling with traditional C causes serious problems.  This is
   3946           a subset of the possible conversion warnings; for the full set
   3947           use '-Wtraditional-conversion'.
   3948 
   3949         * Use of ISO C style function definitions.  This warning
   3950           intentionally is _not_ issued for prototype declarations or
   3951           variadic functions because these ISO C features appear in your
   3952           code when using libiberty's traditional C compatibility
   3953           macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
   3954           for nested functions because that feature is already a GCC
   3955           extension and thus not relevant to traditional C
   3956           compatibility.
   3957 
   3958 '-Wtraditional-conversion (C and Objective-C only)'
   3959      Warn if a prototype causes a type conversion that is different from
   3960      what would happen to the same argument in the absence of a
   3961      prototype.  This includes conversions of fixed point to floating
   3962      and vice versa, and conversions changing the width or signedness of
   3963      a fixed-point argument except when the same as the default
   3964      promotion.
   3965 
   3966 '-Wdeclaration-after-statement (C and Objective-C only)'
   3967      Warn when a declaration is found after a statement in a block.
   3968      This construct, known from C++, was introduced with ISO C99 and is
   3969      by default allowed in GCC.  It is not supported by ISO C90 and was
   3970      not supported by GCC versions before GCC 3.0.  *Note Mixed
   3971      Declarations::.
   3972 
   3973 '-Wundef'
   3974      Warn if an undefined identifier is evaluated in an '#if' directive.
   3975 
   3976 '-Wno-endif-labels'
   3977      Do not warn whenever an '#else' or an '#endif' are followed by
   3978      text.
   3979 
   3980 '-Wshadow'
   3981      Warn whenever a local variable or type declaration shadows another
   3982      variable, parameter, type, or class member (in C++), or whenever a
   3983      built-in function is shadowed.  Note that in C++, the compiler
   3984      warns if a local variable shadows an explicit typedef, but not if
   3985      it shadows a struct/class/enum.
   3986 
   3987 '-Wlarger-than=LEN'
   3988      Warn whenever an object of larger than LEN bytes is defined.
   3989 
   3990 '-Wframe-larger-than=LEN'
   3991      Warn if the size of a function frame is larger than LEN bytes.  The
   3992      computation done to determine the stack frame size is approximate
   3993      and not conservative.  The actual requirements may be somewhat
   3994      greater than LEN even if you do not get a warning.  In addition,
   3995      any space allocated via 'alloca', variable-length arrays, or
   3996      related constructs is not included by the compiler when determining
   3997      whether or not to issue a warning.
   3998 
   3999 '-Wno-free-nonheap-object'
   4000      Do not warn when attempting to free an object that was not
   4001      allocated on the heap.
   4002 
   4003 '-Wstack-usage=LEN'
   4004      Warn if the stack usage of a function might be larger than LEN
   4005      bytes.  The computation done to determine the stack usage is
   4006      conservative.  Any space allocated via 'alloca', variable-length
   4007      arrays, or related constructs is included by the compiler when
   4008      determining whether or not to issue a warning.
   4009 
   4010      The message is in keeping with the output of '-fstack-usage'.
   4011 
   4012         * If the stack usage is fully static but exceeds the specified
   4013           amount, it's:
   4014 
   4015                  warning: stack usage is 1120 bytes
   4016         * If the stack usage is (partly) dynamic but bounded, it's:
   4017 
   4018                  warning: stack usage might be 1648 bytes
   4019         * If the stack usage is (partly) dynamic and not bounded, it's:
   4020 
   4021                  warning: stack usage might be unbounded
   4022 
   4023 '-Wunsafe-loop-optimizations'
   4024      Warn if the loop cannot be optimized because the compiler cannot
   4025      assume anything on the bounds of the loop indices.  With
   4026      '-funsafe-loop-optimizations' warn if the compiler makes such
   4027      assumptions.
   4028 
   4029 '-Wno-pedantic-ms-format (MinGW targets only)'
   4030      When used in combination with '-Wformat' and '-pedantic' without
   4031      GNU extensions, this option disables the warnings about non-ISO
   4032      'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
   4033      used on Windows targets, which depend on the MS runtime.
   4034 
   4035 '-Wpointer-arith'
   4036      Warn about anything that depends on the "size of" a function type
   4037      or of 'void'.  GNU C assigns these types a size of 1, for
   4038      convenience in calculations with 'void *' pointers and pointers to
   4039      functions.  In C++, warn also when an arithmetic operation involves
   4040      'NULL'.  This warning is also enabled by '-Wpedantic'.
   4041 
   4042 '-Wtype-limits'
   4043      Warn if a comparison is always true or always false due to the
   4044      limited range of the data type, but do not warn for constant
   4045      expressions.  For example, warn if an unsigned variable is compared
   4046      against zero with '<' or '>='.  This warning is also enabled by
   4047      '-Wextra'.
   4048 
   4049 '-Wbad-function-cast (C and Objective-C only)'
   4050      Warn whenever a function call is cast to a non-matching type.  For
   4051      example, warn if 'int malloc()' is cast to 'anything *'.
   4052 
   4053 '-Wc++-compat (C and Objective-C only)'
   4054      Warn about ISO C constructs that are outside of the common subset
   4055      of ISO C and ISO C++, e.g. request for implicit conversion from
   4056      'void *' to a pointer to non-'void' type.
   4057 
   4058 '-Wc++11-compat (C++ and Objective-C++ only)'
   4059      Warn about C++ constructs whose meaning differs between ISO C++
   4060      1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
   4061      keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
   4062      is enabled by '-Wall'.
   4063 
   4064 '-Wcast-qual'
   4065      Warn whenever a pointer is cast so as to remove a type qualifier
   4066      from the target type.  For example, warn if a 'const char *' is
   4067      cast to an ordinary 'char *'.
   4068 
   4069      Also warn when making a cast that introduces a type qualifier in an
   4070      unsafe way.  For example, casting 'char **' to 'const char **' is
   4071      unsafe, as in this example:
   4072 
   4073             /* p is char ** value.  */
   4074             const char **q = (const char **) p;
   4075             /* Assignment of readonly string to const char * is OK.  */
   4076             *q = "string";
   4077             /* Now char** pointer points to read-only memory.  */
   4078             **p = 'b';
   4079 
   4080 '-Wcast-align'
   4081      Warn whenever a pointer is cast such that the required alignment of
   4082      the target is increased.  For example, warn if a 'char *' is cast
   4083      to an 'int *' on machines where integers can only be accessed at
   4084      two- or four-byte boundaries.
   4085 
   4086 '-Wwrite-strings'
   4087      When compiling C, give string constants the type 'const
   4088      char[LENGTH]' so that copying the address of one into a non-'const'
   4089      'char *' pointer produces a warning.  These warnings help you find
   4090      at compile time code that can try to write into a string constant,
   4091      but only if you have been very careful about using 'const' in
   4092      declarations and prototypes.  Otherwise, it is just a nuisance.
   4093      This is why we did not make '-Wall' request these warnings.
   4094 
   4095      When compiling C++, warn about the deprecated conversion from
   4096      string literals to 'char *'.  This warning is enabled by default
   4097      for C++ programs.
   4098 
   4099 '-Wclobbered'
   4100      Warn for variables that might be changed by 'longjmp' or 'vfork'.
   4101      This warning is also enabled by '-Wextra'.
   4102 
   4103 '-Wconversion'
   4104      Warn for implicit conversions that may alter a value.  This
   4105      includes conversions between real and integer, like 'abs (x)' when
   4106      'x' is 'double'; conversions between signed and unsigned, like
   4107      'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
   4108      (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
   4109      'ui = (unsigned) -1', or if the value is not changed by the
   4110      conversion like in 'abs (2.0)'.  Warnings about conversions between
   4111      signed and unsigned integers can be disabled by using
   4112      '-Wno-sign-conversion'.
   4113 
   4114      For C++, also warn for confusing overload resolution for
   4115      user-defined conversions; and conversions that never use a type
   4116      conversion operator: conversions to 'void', the same type, a base
   4117      class or a reference to them.  Warnings about conversions between
   4118      signed and unsigned integers are disabled by default in C++ unless
   4119      '-Wsign-conversion' is explicitly enabled.
   4120 
   4121 '-Wno-conversion-null (C++ and Objective-C++ only)'
   4122      Do not warn for conversions between 'NULL' and non-pointer types.
   4123      '-Wconversion-null' is enabled by default.
   4124 
   4125 '-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
   4126      Warn when a literal '0' is used as null pointer constant.  This can
   4127      be useful to facilitate the conversion to 'nullptr' in C++11.
   4128 
   4129 '-Wuseless-cast (C++ and Objective-C++ only)'
   4130      Warn when an expression is casted to its own type.
   4131 
   4132 '-Wempty-body'
   4133      Warn if an empty body occurs in an 'if', 'else' or 'do while'
   4134      statement.  This warning is also enabled by '-Wextra'.
   4135 
   4136 '-Wenum-compare'
   4137      Warn about a comparison between values of different enumerated
   4138      types.  In C++ enumeral mismatches in conditional expressions are
   4139      also diagnosed and the warning is enabled by default.  In C this
   4140      warning is enabled by '-Wall'.
   4141 
   4142 '-Wjump-misses-init (C, Objective-C only)'
   4143      Warn if a 'goto' statement or a 'switch' statement jumps forward
   4144      across the initialization of a variable, or jumps backward to a
   4145      label after the variable has been initialized.  This only warns
   4146      about variables that are initialized when they are declared.  This
   4147      warning is only supported for C and Objective-C; in C++ this sort
   4148      of branch is an error in any case.
   4149 
   4150      '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
   4151      disabled with the '-Wno-jump-misses-init' option.
   4152 
   4153 '-Wsign-compare'
   4154      Warn when a comparison between signed and unsigned values could
   4155      produce an incorrect result when the signed value is converted to
   4156      unsigned.  This warning is also enabled by '-Wextra'; to get the
   4157      other warnings of '-Wextra' without this warning, use '-Wextra
   4158      -Wno-sign-compare'.
   4159 
   4160 '-Wsign-conversion'
   4161      Warn for implicit conversions that may change the sign of an
   4162      integer value, like assigning a signed integer expression to an
   4163      unsigned integer variable.  An explicit cast silences the warning.
   4164      In C, this option is enabled also by '-Wconversion'.
   4165 
   4166 '-Wsizeof-pointer-memaccess'
   4167      Warn for suspicious length parameters to certain string and memory
   4168      built-in functions if the argument uses 'sizeof'.  This warning
   4169      warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not
   4170      an array, but a pointer, and suggests a possible fix, or about
   4171      'memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
   4172      '-Wall'.
   4173 
   4174 '-Waddress'
   4175      Warn about suspicious uses of memory addresses.  These include
   4176      using the address of a function in a conditional expression, such
   4177      as 'void func(void); if (func)', and comparisons against the memory
   4178      address of a string literal, such as 'if (x == "abc")'.  Such uses
   4179      typically indicate a programmer error: the address of a function
   4180      always evaluates to true, so their use in a conditional usually
   4181      indicate that the programmer forgot the parentheses in a function
   4182      call; and comparisons against string literals result in unspecified
   4183      behavior and are not portable in C, so they usually indicate that
   4184      the programmer intended to use 'strcmp'.  This warning is enabled
   4185      by '-Wall'.
   4186 
   4187 '-Wlogical-op'
   4188      Warn about suspicious uses of logical operators in expressions.
   4189      This includes using logical operators in contexts where a bit-wise
   4190      operator is likely to be expected.
   4191 
   4192 '-Waggregate-return'
   4193      Warn if any functions that return structures or unions are defined
   4194      or called.  (In languages where you can return an array, this also
   4195      elicits a warning.)
   4196 
   4197 '-Wno-aggressive-loop-optimizations'
   4198      Warn if in a loop with constant number of iterations the compiler
   4199      detects undefined behavior in some statement during one or more of
   4200      the iterations.
   4201 
   4202 '-Wno-attributes'
   4203      Do not warn if an unexpected '__attribute__' is used, such as
   4204      unrecognized attributes, function attributes applied to variables,
   4205      etc.  This does not stop errors for incorrect use of supported
   4206      attributes.
   4207 
   4208 '-Wno-builtin-macro-redefined'
   4209      Do not warn if certain built-in macros are redefined.  This
   4210      suppresses warnings for redefinition of '__TIMESTAMP__',
   4211      '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.
   4212 
   4213 '-Wstrict-prototypes (C and Objective-C only)'
   4214      Warn if a function is declared or defined without specifying the
   4215      argument types.  (An old-style function definition is permitted
   4216      without a warning if preceded by a declaration that specifies the
   4217      argument types.)
   4218 
   4219 '-Wold-style-declaration (C and Objective-C only)'
   4220      Warn for obsolescent usages, according to the C Standard, in a
   4221      declaration.  For example, warn if storage-class specifiers like
   4222      'static' are not the first things in a declaration.  This warning
   4223      is also enabled by '-Wextra'.
   4224 
   4225 '-Wold-style-definition (C and Objective-C only)'
   4226      Warn if an old-style function definition is used.  A warning is
   4227      given even if there is a previous prototype.
   4228 
   4229 '-Wmissing-parameter-type (C and Objective-C only)'
   4230      A function parameter is declared without a type specifier in
   4231      K&R-style functions:
   4232 
   4233           void foo(bar) { }
   4234 
   4235      This warning is also enabled by '-Wextra'.
   4236 
   4237 '-Wmissing-prototypes (C and Objective-C only)'
   4238      Warn if a global function is defined without a previous prototype
   4239      declaration.  This warning is issued even if the definition itself
   4240      provides a prototype.  Use this option to detect global functions
   4241      that do not have a matching prototype declaration in a header file.
   4242      This option is not valid for C++ because all function declarations
   4243      provide prototypes and a non-matching declaration will declare an
   4244      overload rather than conflict with an earlier declaration.  Use
   4245      '-Wmissing-declarations' to detect missing declarations in C++.
   4246 
   4247 '-Wmissing-declarations'
   4248      Warn if a global function is defined without a previous
   4249      declaration.  Do so even if the definition itself provides a
   4250      prototype.  Use this option to detect global functions that are not
   4251      declared in header files.  In C, no warnings are issued for
   4252      functions with previous non-prototype declarations; use
   4253      '-Wmissing-prototype' to detect missing prototypes.  In C++, no
   4254      warnings are issued for function templates, or for inline
   4255      functions, or for functions in anonymous namespaces.
   4256 
   4257 '-Wmissing-field-initializers'
   4258      Warn if a structure's initializer has some fields missing.  For
   4259      example, the following code causes such a warning, because 'x.h' is
   4260      implicitly zero:
   4261 
   4262           struct s { int f, g, h; };
   4263           struct s x = { 3, 4 };
   4264 
   4265      This option does not warn about designated initializers, so the
   4266      following modification does not trigger a warning:
   4267 
   4268           struct s { int f, g, h; };
   4269           struct s x = { .f = 3, .g = 4 };
   4270 
   4271      This warning is included in '-Wextra'.  To get other '-Wextra'
   4272      warnings without this one, use '-Wextra
   4273      -Wno-missing-field-initializers'.
   4274 
   4275 '-Wno-multichar'
   4276      Do not warn if a multicharacter constant (''FOOF'') is used.
   4277      Usually they indicate a typo in the user's code, as they have
   4278      implementation-defined values, and should not be used in portable
   4279      code.
   4280 
   4281 '-Wnormalized=<none|id|nfc|nfkc>'
   4282      In ISO C and ISO C++, two identifiers are different if they are
   4283      different sequences of characters.  However, sometimes when
   4284      characters outside the basic ASCII character set are used, you can
   4285      have two different character sequences that look the same.  To
   4286      avoid confusion, the ISO 10646 standard sets out some
   4287      "normalization rules" which when applied ensure that two sequences
   4288      that look the same are turned into the same sequence.  GCC can warn
   4289      you if you are using identifiers that have not been normalized;
   4290      this option controls that warning.
   4291 
   4292      There are four levels of warning supported by GCC.  The default is
   4293      '-Wnormalized=nfc', which warns about any identifier that is not in
   4294      the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
   4295      form for most uses.
   4296 
   4297      Unfortunately, there are some characters allowed in identifiers by
   4298      ISO C and ISO C++ that, when turned into NFC, are not allowed in
   4299      identifiers.  That is, there's no way to use these symbols in
   4300      portable ISO C or C++ and have all your identifiers in NFC.
   4301      '-Wnormalized=id' suppresses the warning for these characters.  It
   4302      is hoped that future versions of the standards involved will
   4303      correct this, which is why this option is not the default.
   4304 
   4305      You can switch the warning off for all characters by writing
   4306      '-Wnormalized=none'.  You should only do this if you are using some
   4307      other normalization scheme (like "D"), because otherwise you can
   4308      easily create bugs that are literally impossible to see.
   4309 
   4310      Some characters in ISO 10646 have distinct meanings but look
   4311      identical in some fonts or display methodologies, especially once
   4312      formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
   4313      LATIN SMALL LETTER N", displays just like a regular 'n' that has
   4314      been placed in a superscript.  ISO 10646 defines the "NFKC"
   4315      normalization scheme to convert all these into a standard form as
   4316      well, and GCC warns if your code is not in NFKC if you use
   4317      '-Wnormalized=nfkc'.  This warning is comparable to warning about
   4318      every identifier that contains the letter O because it might be
   4319      confused with the digit 0, and so is not the default, but may be
   4320      useful as a local coding convention if the programming environment
   4321      cannot be fixed to display these characters distinctly.
   4322 
   4323 '-Wno-deprecated'
   4324      Do not warn about usage of deprecated features.  *Note Deprecated
   4325      Features::.
   4326 
   4327 '-Wno-deprecated-declarations'
   4328      Do not warn about uses of functions (*note Function Attributes::),
   4329      variables (*note Variable Attributes::), and types (*note Type
   4330      Attributes::) marked as deprecated by using the 'deprecated'
   4331      attribute.
   4332 
   4333 '-Wno-overflow'
   4334      Do not warn about compile-time overflow in constant expressions.
   4335 
   4336 '-Woverride-init (C and Objective-C only)'
   4337      Warn if an initialized field without side effects is overridden
   4338      when using designated initializers (*note Designated Initializers:
   4339      Designated Inits.).
   4340 
   4341      This warning is included in '-Wextra'.  To get other '-Wextra'
   4342      warnings without this one, use '-Wextra -Wno-override-init'.
   4343 
   4344 '-Wpacked'
   4345      Warn if a structure is given the packed attribute, but the packed
   4346      attribute has no effect on the layout or size of the structure.
   4347      Such structures may be mis-aligned for little benefit.  For
   4348      instance, in this code, the variable 'f.x' in 'struct bar' is
   4349      misaligned even though 'struct bar' does not itself have the packed
   4350      attribute:
   4351 
   4352           struct foo {
   4353             int x;
   4354             char a, b, c, d;
   4355           } __attribute__((packed));
   4356           struct bar {
   4357             char z;
   4358             struct foo f;
   4359           };
   4360 
   4361 '-Wpacked-bitfield-compat'
   4362      The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
   4363      bit-fields of type 'char'.  This has been fixed in GCC 4.4 but the
   4364      change can lead to differences in the structure layout.  GCC
   4365      informs you when the offset of such a field has changed in GCC 4.4.
   4366      For example there is no longer a 4-bit padding between field 'a'
   4367      and 'b' in this structure:
   4368 
   4369           struct foo
   4370           {
   4371             char a:4;
   4372             char b:8;
   4373           } __attribute__ ((packed));
   4374 
   4375      This warning is enabled by default.  Use
   4376      '-Wno-packed-bitfield-compat' to disable this warning.
   4377 
   4378 '-Wpadded'
   4379      Warn if padding is included in a structure, either to align an
   4380      element of the structure or to align the whole structure.
   4381      Sometimes when this happens it is possible to rearrange the fields
   4382      of the structure to reduce the padding and so make the structure
   4383      smaller.
   4384 
   4385 '-Wredundant-decls'
   4386      Warn if anything is declared more than once in the same scope, even
   4387      in cases where multiple declaration is valid and changes nothing.
   4388 
   4389 '-Wnested-externs (C and Objective-C only)'
   4390      Warn if an 'extern' declaration is encountered within a function.
   4391 
   4392 '-Wno-inherited-variadic-ctor'
   4393      Suppress warnings about use of C++11 inheriting constructors when
   4394      the base class inherited from has a C variadic constructor; the
   4395      warning is on by default because the ellipsis is not inherited.
   4396 
   4397 '-Winline'
   4398      Warn if a function that is declared as inline cannot be inlined.
   4399      Even with this option, the compiler does not warn about failures to
   4400      inline functions declared in system headers.
   4401 
   4402      The compiler uses a variety of heuristics to determine whether or
   4403      not to inline a function.  For example, the compiler takes into
   4404      account the size of the function being inlined and the amount of
   4405      inlining that has already been done in the current function.
   4406      Therefore, seemingly insignificant changes in the source program
   4407      can cause the warnings produced by '-Winline' to appear or
   4408      disappear.
   4409 
   4410 '-Wno-invalid-offsetof (C++ and Objective-C++ only)'
   4411      Suppress warnings from applying the 'offsetof' macro to a non-POD
   4412      type.  According to the 1998 ISO C++ standard, applying 'offsetof'
   4413      to a non-POD type is undefined.  In existing C++ implementations,
   4414      however, 'offsetof' typically gives meaningful results even when
   4415      applied to certain kinds of non-POD types (such as a simple
   4416      'struct' that fails to be a POD type only by virtue of having a
   4417      constructor).  This flag is for users who are aware that they are
   4418      writing nonportable code and who have deliberately chosen to ignore
   4419      the warning about it.
   4420 
   4421      The restrictions on 'offsetof' may be relaxed in a future version
   4422      of the C++ standard.
   4423 
   4424 '-Wno-int-to-pointer-cast'
   4425      Suppress warnings from casts to pointer type of an integer of a
   4426      different size.  In C++, casting to a pointer type of smaller size
   4427      is an error.  'Wint-to-pointer-cast' is enabled by default.
   4428 
   4429 '-Wno-pointer-to-int-cast (C and Objective-C only)'
   4430      Suppress warnings from casts from a pointer to an integer type of a
   4431      different size.
   4432 
   4433 '-Winvalid-pch'
   4434      Warn if a precompiled header (*note Precompiled Headers::) is found
   4435      in the search path but can't be used.
   4436 
   4437 '-Wlong-long'
   4438      Warn if 'long long' type is used.  This is enabled by either
   4439      '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
   4440      inhibit the warning messages, use '-Wno-long-long'.
   4441 
   4442 '-Wvariadic-macros'
   4443      Warn if variadic macros are used in pedantic ISO C90 mode, or the
   4444      GNU alternate syntax when in pedantic ISO C99 mode.  This is
   4445      default.  To inhibit the warning messages, use
   4446      '-Wno-variadic-macros'.
   4447 
   4448 '-Wvarargs'
   4449      Warn upon questionable usage of the macros used to handle variable
   4450      arguments like 'va_start'.  This is default.  To inhibit the
   4451      warning messages, use '-Wno-varargs'.
   4452 
   4453 '-Wvector-operation-performance'
   4454      Warn if vector operation is not implemented via SIMD capabilities
   4455      of the architecture.  Mainly useful for the performance tuning.
   4456      Vector operation can be implemented 'piecewise', which means that
   4457      the scalar operation is performed on every vector element; 'in
   4458      parallel', which means that the vector operation is implemented
   4459      using scalars of wider type, which normally is more performance
   4460      efficient; and 'as a single scalar', which means that vector fits
   4461      into a scalar type.
   4462 
   4463 '-Wno-virtual-move-assign'
   4464      Suppress warnings about inheriting from a virtual base with a
   4465      non-trivial C++11 move assignment operator.  This is dangerous
   4466      because if the virtual base is reachable along more than one path,
   4467      it will be moved multiple times, which can mean both objects end up
   4468      in the moved-from state.  If the move assignment operator is
   4469      written to avoid moving from a moved-from object, this warning can
   4470      be disabled.
   4471 
   4472 '-Wvla'
   4473      Warn if variable length array is used in the code.  '-Wno-vla'
   4474      prevents the '-Wpedantic' warning of the variable length array.
   4475 
   4476 '-Wvolatile-register-var'
   4477      Warn if a register variable is declared volatile.  The volatile
   4478      modifier does not inhibit all optimizations that may eliminate
   4479      reads and/or writes to register variables.  This warning is enabled
   4480      by '-Wall'.
   4481 
   4482 '-Wdisabled-optimization'
   4483      Warn if a requested optimization pass is disabled.  This warning
   4484      does not generally indicate that there is anything wrong with your
   4485      code; it merely indicates that GCC's optimizers are unable to
   4486      handle the code effectively.  Often, the problem is that your code
   4487      is too big or too complex; GCC refuses to optimize programs when
   4488      the optimization itself is likely to take inordinate amounts of
   4489      time.
   4490 
   4491 '-Wpointer-sign (C and Objective-C only)'
   4492      Warn for pointer argument passing or assignment with different
   4493      signedness.  This option is only supported for C and Objective-C.
   4494      It is implied by '-Wall' and by '-Wpedantic', which can be disabled
   4495      with '-Wno-pointer-sign'.
   4496 
   4497 '-Wstack-protector'
   4498      This option is only active when '-fstack-protector' is active.  It
   4499      warns about functions that are not protected against stack
   4500      smashing.
   4501 
   4502 '-Wno-mudflap'
   4503      Suppress warnings about constructs that cannot be instrumented by
   4504      '-fmudflap'.
   4505 
   4506 '-Woverlength-strings'
   4507      Warn about string constants that are longer than the "minimum
   4508      maximum" length specified in the C standard.  Modern compilers
   4509      generally allow string constants that are much longer than the
   4510      standard's minimum limit, but very portable programs should avoid
   4511      using longer strings.
   4512 
   4513      The limit applies _after_ string constant concatenation, and does
   4514      not count the trailing NUL.  In C90, the limit was 509 characters;
   4515      in C99, it was raised to 4095.  C++98 does not specify a normative
   4516      minimum maximum, so we do not diagnose overlength strings in C++.
   4517 
   4518      This option is implied by '-Wpedantic', and can be disabled with
   4519      '-Wno-overlength-strings'.
   4520 
   4521 '-Wunsuffixed-float-constants (C and Objective-C only)'
   4522 
   4523      Issue a warning for any floating constant that does not have a
   4524      suffix.  When used together with '-Wsystem-headers' it warns about
   4525      such constants in system header files.  This can be useful when
   4526      preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
   4527      the decimal floating-point extension to C99.
   4528 
   4529 
   4530 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
   4531 
   4532 3.9 Options for Debugging Your Program or GCC
   4533 =============================================
   4534 
   4535 GCC has various special options that are used for debugging either your
   4536 program or GCC:
   4537 
   4538 '-g'
   4539      Produce debugging information in the operating system's native
   4540      format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
   4541      debugging information.
   4542 
   4543      On most systems that use stabs format, '-g' enables use of extra
   4544      debugging information that only GDB can use; this extra information
   4545      makes debugging work better in GDB but probably makes other
   4546      debuggers crash or refuse to read the program.  If you want to
   4547      control for certain whether to generate the extra information, use
   4548      '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
   4549      below).
   4550 
   4551      GCC allows you to use '-g' with '-O'.  The shortcuts taken by
   4552      optimized code may occasionally produce surprising results: some
   4553      variables you declared may not exist at all; flow of control may
   4554      briefly move where you did not expect it; some statements may not
   4555      be executed because they compute constant results or their values
   4556      are already at hand; some statements may execute in different
   4557      places because they have been moved out of loops.
   4558 
   4559      Nevertheless it proves possible to debug optimized output.  This
   4560      makes it reasonable to use the optimizer for programs that might
   4561      have bugs.
   4562 
   4563      The following options are useful when GCC is generated with the
   4564      capability for more than one debugging format.
   4565 
   4566 '-gsplit-dwarf'
   4567      Separate as much dwarf debugging information as possible into a
   4568      separate output file with the extension .dwo.  This option allows
   4569      the build system to avoid linking files with debug information.  To
   4570      be useful, this option requires a debugger capable of reading .dwo
   4571      files.
   4572 
   4573 '-ggdb'
   4574      Produce debugging information for use by GDB.  This means to use
   4575      the most expressive format available (DWARF 2, stabs, or the native
   4576      format if neither of those are supported), including GDB extensions
   4577      if at all possible.
   4578 
   4579 '-gpubnames'
   4580      Generate dwarf .debug_pubnames and .debug_pubtypes sections.
   4581 
   4582 '-gstabs'
   4583      Produce debugging information in stabs format (if that is
   4584      supported), without GDB extensions.  This is the format used by DBX
   4585      on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
   4586      this option produces stabs debugging output that is not understood
   4587      by DBX or SDB.  On System V Release 4 systems this option requires
   4588      the GNU assembler.
   4589 
   4590 '-feliminate-unused-debug-symbols'
   4591      Produce debugging information in stabs format (if that is
   4592      supported), for only symbols that are actually used.
   4593 
   4594 '-femit-class-debug-always'
   4595      Instead of emitting debugging information for a C++ class in only
   4596      one object file, emit it in all object files using the class.  This
   4597      option should be used only with debuggers that are unable to handle
   4598      the way GCC normally emits debugging information for classes
   4599      because using this option increases the size of debugging
   4600      information by as much as a factor of two.
   4601 
   4602 '-fdebug-types-section'
   4603      When using DWARF Version 4 or higher, type DIEs can be put into
   4604      their own '.debug_types' section instead of making them part of the
   4605      '.debug_info' section.  It is more efficient to put them in a
   4606      separate comdat sections since the linker can then remove
   4607      duplicates.  But not all DWARF consumers support '.debug_types'
   4608      sections yet and on some objects '.debug_types' produces larger
   4609      instead of smaller debugging information.
   4610 
   4611 '-gstabs+'
   4612      Produce debugging information in stabs format (if that is
   4613      supported), using GNU extensions understood only by the GNU
   4614      debugger (GDB).  The use of these extensions is likely to make
   4615      other debuggers crash or refuse to read the program.
   4616 
   4617 '-gcoff'
   4618      Produce debugging information in COFF format (if that is
   4619      supported).  This is the format used by SDB on most System V
   4620      systems prior to System V Release 4.
   4621 
   4622 '-gxcoff'
   4623      Produce debugging information in XCOFF format (if that is
   4624      supported).  This is the format used by the DBX debugger on IBM
   4625      RS/6000 systems.
   4626 
   4627 '-gxcoff+'
   4628      Produce debugging information in XCOFF format (if that is
   4629      supported), using GNU extensions understood only by the GNU
   4630      debugger (GDB).  The use of these extensions is likely to make
   4631      other debuggers crash or refuse to read the program, and may cause
   4632      assemblers other than the GNU assembler (GAS) to fail with an
   4633      error.
   4634 
   4635 '-gdwarf-VERSION'
   4636      Produce debugging information in DWARF format (if that is
   4637      supported).  The value of VERSION may be either 2, 3 or 4; the
   4638      default version for most targets is 4.
   4639 
   4640      Note that with DWARF Version 2, some ports require and always use
   4641      some non-conflicting DWARF 3 extensions in the unwind tables.
   4642 
   4643      Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
   4644      maximum benefit.
   4645 
   4646 '-grecord-gcc-switches'
   4647      This switch causes the command-line options used to invoke the
   4648      compiler that may affect code generation to be appended to the
   4649      DW_AT_producer attribute in DWARF debugging information.  The
   4650      options are concatenated with spaces separating them from each
   4651      other and from the compiler version.  See also
   4652      '-frecord-gcc-switches' for another way of storing compiler options
   4653      into the object file.  This is the default.
   4654 
   4655 '-gno-record-gcc-switches'
   4656      Disallow appending command-line options to the DW_AT_producer
   4657      attribute in DWARF debugging information.
   4658 
   4659 '-gstrict-dwarf'
   4660      Disallow using extensions of later DWARF standard version than
   4661      selected with '-gdwarf-VERSION'.  On most targets using
   4662      non-conflicting DWARF extensions from later standard versions is
   4663      allowed.
   4664 
   4665 '-gno-strict-dwarf'
   4666      Allow using extensions of later DWARF standard version than
   4667      selected with '-gdwarf-VERSION'.
   4668 
   4669 '-gvms'
   4670      Produce debugging information in Alpha/VMS debug format (if that is
   4671      supported).  This is the format used by DEBUG on Alpha/VMS systems.
   4672 
   4673 '-gLEVEL'
   4674 '-ggdbLEVEL'
   4675 '-gstabsLEVEL'
   4676 '-gcoffLEVEL'
   4677 '-gxcoffLEVEL'
   4678 '-gvmsLEVEL'
   4679      Request debugging information and also use LEVEL to specify how
   4680      much information.  The default level is 2.
   4681 
   4682      Level 0 produces no debug information at all.  Thus, '-g0' negates
   4683      '-g'.
   4684 
   4685      Level 1 produces minimal information, enough for making backtraces
   4686      in parts of the program that you don't plan to debug.  This
   4687      includes descriptions of functions and external variables, but no
   4688      information about local variables and no line numbers.
   4689 
   4690      Level 3 includes extra information, such as all the macro
   4691      definitions present in the program.  Some debuggers support macro
   4692      expansion when you use '-g3'.
   4693 
   4694      '-gdwarf-2' does not accept a concatenated debug level, because GCC
   4695      used to support an option '-gdwarf' that meant to generate debug
   4696      information in version 1 of the DWARF format (which is very
   4697      different from version 2), and it would have been too confusing.
   4698      That debug format is long obsolete, but the option cannot be
   4699      changed now.  Instead use an additional '-gLEVEL' option to change
   4700      the debug level for DWARF.
   4701 
   4702 '-gtoggle'
   4703      Turn off generation of debug info, if leaving out this option
   4704      generates it, or turn it on at level 2 otherwise.  The position of
   4705      this argument in the command line does not matter; it takes effect
   4706      after all other options are processed, and it does so only once, no
   4707      matter how many times it is given.  This is mainly intended to be
   4708      used with '-fcompare-debug'.
   4709 
   4710 '-fsanitize=address'
   4711      Enable AddressSanitizer, a fast memory error detector.  Memory
   4712      access instructions will be instrumented to detect out-of-bounds
   4713      and use-after-free bugs.  See
   4714      <http://code.google.com/p/address-sanitizer/> for more details.
   4715 
   4716 '-fsanitize=thread'
   4717      Enable ThreadSanitizer, a fast data race detector.  Memory access
   4718      instructions will be instrumented to detect data race bugs.  See
   4719      <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for
   4720      more details.
   4721 
   4722 '-fdump-final-insns[=FILE]'
   4723      Dump the final internal representation (RTL) to FILE.  If the
   4724      optional argument is omitted (or if FILE is '.'), the name of the
   4725      dump file is determined by appending '.gkd' to the compilation
   4726      output file name.
   4727 
   4728 '-fcompare-debug[=OPTS]'
   4729      If no error occurs during compilation, run the compiler a second
   4730      time, adding OPTS and '-fcompare-debug-second' to the arguments
   4731      passed to the second compilation.  Dump the final internal
   4732      representation in both compilations, and print an error if they
   4733      differ.
   4734 
   4735      If the equal sign is omitted, the default '-gtoggle' is used.
   4736 
   4737      The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
   4738      and nonzero, implicitly enables '-fcompare-debug'.  If
   4739      'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
   4740      then it is used for OPTS, otherwise the default '-gtoggle' is used.
   4741 
   4742      '-fcompare-debug=', with the equal sign but without OPTS, is
   4743      equivalent to '-fno-compare-debug', which disables the dumping of
   4744      the final representation and the second compilation, preventing
   4745      even 'GCC_COMPARE_DEBUG' from taking effect.
   4746 
   4747      To verify full coverage during '-fcompare-debug' testing, set
   4748      'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
   4749      GCC rejects as an invalid option in any actual compilation (rather
   4750      than preprocessing, assembly or linking).  To get just a warning,
   4751      setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
   4752      will do.
   4753 
   4754 '-fcompare-debug-second'
   4755      This option is implicitly passed to the compiler for the second
   4756      compilation requested by '-fcompare-debug', along with options to
   4757      silence warnings, and omitting other options that would cause
   4758      side-effect compiler outputs to files or to the standard output.
   4759      Dump files and preserved temporary files are renamed so as to
   4760      contain the '.gk' additional extension during the second
   4761      compilation, to avoid overwriting those generated by the first.
   4762 
   4763      When this option is passed to the compiler driver, it causes the
   4764      _first_ compilation to be skipped, which makes it useful for little
   4765      other than debugging the compiler proper.
   4766 
   4767 '-feliminate-dwarf2-dups'
   4768      Compress DWARF 2 debugging information by eliminating duplicated
   4769      information about each symbol.  This option only makes sense when
   4770      generating DWARF 2 debugging information with '-gdwarf-2'.
   4771 
   4772 '-femit-struct-debug-baseonly'
   4773      Emit debug information for struct-like types only when the base
   4774      name of the compilation source file matches the base name of file
   4775      in which the struct is defined.
   4776 
   4777      This option substantially reduces the size of debugging
   4778      information, but at significant potential loss in type information
   4779      to the debugger.  See '-femit-struct-debug-reduced' for a less
   4780      aggressive option.  See '-femit-struct-debug-detailed' for more
   4781      detailed control.
   4782 
   4783      This option works only with DWARF 2.
   4784 
   4785 '-femit-struct-debug-reduced'
   4786      Emit debug information for struct-like types only when the base
   4787      name of the compilation source file matches the base name of file
   4788      in which the type is defined, unless the struct is a template or
   4789      defined in a system header.
   4790 
   4791      This option significantly reduces the size of debugging
   4792      information, with some potential loss in type information to the
   4793      debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
   4794      option.  See '-femit-struct-debug-detailed' for more detailed
   4795      control.
   4796 
   4797      This option works only with DWARF 2.
   4798 
   4799 '-femit-struct-debug-detailed[=SPEC-LIST]'
   4800      Specify the struct-like types for which the compiler generates
   4801      debug information.  The intent is to reduce duplicate struct debug
   4802      information between different object files within the same program.
   4803 
   4804      This option is a detailed version of '-femit-struct-debug-reduced'
   4805      and '-femit-struct-debug-baseonly', which serves for most needs.
   4806 
   4807      A specification has the syntax
   4808      ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')
   4809 
   4810      The optional first word limits the specification to structs that
   4811      are used directly ('dir:') or used indirectly ('ind:').  A struct
   4812      type is used directly when it is the type of a variable, member.
   4813      Indirect uses arise through pointers to structs.  That is, when use
   4814      of an incomplete struct is valid, the use is indirect.  An example
   4815      is 'struct one direct; struct two * indirect;'.
   4816 
   4817      The optional second word limits the specification to ordinary
   4818      structs ('ord:') or generic structs ('gen:').  Generic structs are
   4819      a bit complicated to explain.  For C++, these are non-explicit
   4820      specializations of template classes, or non-template classes within
   4821      the above.  Other programming languages have generics, but
   4822      '-femit-struct-debug-detailed' does not yet implement them.
   4823 
   4824      The third word specifies the source files for those structs for
   4825      which the compiler should emit debug information.  The values
   4826      'none' and 'any' have the normal meaning.  The value 'base' means
   4827      that the base of name of the file in which the type declaration
   4828      appears must match the base of the name of the main compilation
   4829      file.  In practice, this means that when compiling 'foo.c', debug
   4830      information is generated for types declared in that file and
   4831      'foo.h', but not other header files.  The value 'sys' means those
   4832      types satisfying 'base' or declared in system or compiler headers.
   4833 
   4834      You may need to experiment to determine the best settings for your
   4835      application.
   4836 
   4837      The default is '-femit-struct-debug-detailed=all'.
   4838 
   4839      This option works only with DWARF 2.
   4840 
   4841 '-fno-merge-debug-strings'
   4842      Direct the linker to not merge together strings in the debugging
   4843      information that are identical in different object files.  Merging
   4844      is not supported by all assemblers or linkers.  Merging decreases
   4845      the size of the debug information in the output file at the cost of
   4846      increasing link processing time.  Merging is enabled by default.
   4847 
   4848 '-fdebug-prefix-map=OLD=NEW'
   4849      When compiling files in directory 'OLD', record debugging
   4850      information describing them as in 'NEW' instead.
   4851 
   4852 '-fno-dwarf2-cfi-asm'
   4853      Emit DWARF 2 unwind info as compiler generated '.eh_frame' section
   4854      instead of using GAS '.cfi_*' directives.
   4855 
   4856 '-p'
   4857      Generate extra code to write profile information suitable for the
   4858      analysis program 'prof'.  You must use this option when compiling
   4859      the source files you want data about, and you must also use it when
   4860      linking.
   4861 
   4862 '-pg'
   4863      Generate extra code to write profile information suitable for the
   4864      analysis program 'gprof'.  You must use this option when compiling
   4865      the source files you want data about, and you must also use it when
   4866      linking.
   4867 
   4868 '-Q'
   4869      Makes the compiler print out each function name as it is compiled,
   4870      and print some statistics about each pass when it finishes.
   4871 
   4872 '-ftime-report'
   4873      Makes the compiler print some statistics about the time consumed by
   4874      each pass when it finishes.
   4875 
   4876 '-fmem-report'
   4877      Makes the compiler print some statistics about permanent memory
   4878      allocation when it finishes.
   4879 
   4880 '-fmem-report-wpa'
   4881      Makes the compiler print some statistics about permanent memory
   4882      allocation for the WPA phase only.
   4883 
   4884 '-fpre-ipa-mem-report'
   4885 '-fpost-ipa-mem-report'
   4886      Makes the compiler print some statistics about permanent memory
   4887      allocation before or after interprocedural optimization.
   4888 
   4889 '-fprofile-report'
   4890      Makes the compiler print some statistics about consistency of the
   4891      (estimated) profile and effect of individual passes.
   4892 
   4893 '-fstack-usage'
   4894      Makes the compiler output stack usage information for the program,
   4895      on a per-function basis.  The filename for the dump is made by
   4896      appending '.su' to the AUXNAME.  AUXNAME is generated from the name
   4897      of the output file, if explicitly specified and it is not an
   4898      executable, otherwise it is the basename of the source file.  An
   4899      entry is made up of three fields:
   4900 
   4901         * The name of the function.
   4902         * A number of bytes.
   4903         * One or more qualifiers: 'static', 'dynamic', 'bounded'.
   4904 
   4905      The qualifier 'static' means that the function manipulates the
   4906      stack statically: a fixed number of bytes are allocated for the
   4907      frame on function entry and released on function exit; no stack
   4908      adjustments are otherwise made in the function.  The second field
   4909      is this fixed number of bytes.
   4910 
   4911      The qualifier 'dynamic' means that the function manipulates the
   4912      stack dynamically: in addition to the static allocation described
   4913      above, stack adjustments are made in the body of the function, for
   4914      example to push/pop arguments around function calls.  If the
   4915      qualifier 'bounded' is also present, the amount of these
   4916      adjustments is bounded at compile time and the second field is an
   4917      upper bound of the total amount of stack used by the function.  If
   4918      it is not present, the amount of these adjustments is not bounded
   4919      at compile time and the second field only represents the bounded
   4920      part.
   4921 
   4922 '-fprofile-arcs'
   4923      Add code so that program flow "arcs" are instrumented.  During
   4924      execution the program records how many times each branch and call
   4925      is executed and how many times it is taken or returns.  When the
   4926      compiled program exits it saves this data to a file called
   4927      'AUXNAME.gcda' for each source file.  The data may be used for
   4928      profile-directed optimizations ('-fbranch-probabilities'), or for
   4929      test coverage analysis ('-ftest-coverage').  Each object file's
   4930      AUXNAME is generated from the name of the output file, if
   4931      explicitly specified and it is not the final executable, otherwise
   4932      it is the basename of the source file.  In both cases any suffix is
   4933      removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
   4934      'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
   4935      Cross-profiling::.
   4936 
   4937 '--coverage'
   4938 
   4939      This option is used to compile and link code instrumented for
   4940      coverage analysis.  The option is a synonym for '-fprofile-arcs'
   4941      '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
   4942      See the documentation for those options for more details.
   4943 
   4944         * Compile the source files with '-fprofile-arcs' plus
   4945           optimization and code generation options.  For test coverage
   4946           analysis, use the additional '-ftest-coverage' option.  You do
   4947           not need to profile every source file in a program.
   4948 
   4949         * Link your object files with '-lgcov' or '-fprofile-arcs' (the
   4950           latter implies the former).
   4951 
   4952         * Run the program on a representative workload to generate the
   4953           arc profile information.  This may be repeated any number of
   4954           times.  You can run concurrent instances of your program, and
   4955           provided that the file system supports locking, the data files
   4956           will be correctly updated.  Also 'fork' calls are detected and
   4957           correctly handled (double counting will not happen).
   4958 
   4959         * For profile-directed optimizations, compile the source files
   4960           again with the same optimization and code generation options
   4961           plus '-fbranch-probabilities' (*note Options that Control
   4962           Optimization: Optimize Options.).
   4963 
   4964         * For test coverage analysis, use 'gcov' to produce human
   4965           readable information from the '.gcno' and '.gcda' files.
   4966           Refer to the 'gcov' documentation for further information.
   4967 
   4968      With '-fprofile-arcs', for each function of your program GCC
   4969      creates a program flow graph, then finds a spanning tree for the
   4970      graph.  Only arcs that are not on the spanning tree have to be
   4971      instrumented: the compiler adds code to count the number of times
   4972      that these arcs are executed.  When an arc is the only exit or only
   4973      entrance to a block, the instrumentation code can be added to the
   4974      block; otherwise, a new basic block must be created to hold the
   4975      instrumentation code.
   4976 
   4977 '-ftest-coverage'
   4978      Produce a notes file that the 'gcov' code-coverage utility (*note
   4979      'gcov'--a Test Coverage Program: Gcov.) can use to show program
   4980      coverage.  Each source file's note file is called 'AUXNAME.gcno'.
   4981      Refer to the '-fprofile-arcs' option above for a description of
   4982      AUXNAME and instructions on how to generate test coverage data.
   4983      Coverage data matches the source files more closely if you do not
   4984      optimize.
   4985 
   4986 '-fdbg-cnt-list'
   4987      Print the name and the counter upper bound for all debug counters.
   4988 
   4989 '-fdbg-cnt=COUNTER-VALUE-LIST'
   4990      Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
   4991      a comma-separated list of NAME:VALUE pairs which sets the upper
   4992      bound of each debug counter NAME to VALUE.  All debug counters have
   4993      the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt()' returns
   4994      true always unless the upper bound is set by this option.  For
   4995      example, with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)'
   4996      returns true only for first 10 invocations.
   4997 
   4998 '-fenable-KIND-PASS'
   4999 '-fdisable-KIND-PASS=RANGE-LIST'
   5000 
   5001      This is a set of options that are used to explicitly disable/enable
   5002      optimization passes.  These options are intended for use for
   5003      debugging GCC. Compiler users should use regular options for
   5004      enabling/disabling passes instead.
   5005 
   5006      '-fdisable-ipa-PASS'
   5007           Disable IPA pass PASS.  PASS is the pass name.  If the same
   5008           pass is statically invoked in the compiler multiple times, the
   5009           pass name should be appended with a sequential number starting
   5010           from 1.
   5011 
   5012      '-fdisable-rtl-PASS'
   5013      '-fdisable-rtl-PASS=RANGE-LIST'
   5014           Disable RTL pass PASS.  PASS is the pass name.  If the same
   5015           pass is statically invoked in the compiler multiple times, the
   5016           pass name should be appended with a sequential number starting
   5017           from 1.  RANGE-LIST is a comma-separated list of function
   5018           ranges or assembler names.  Each range is a number pair
   5019           separated by a colon.  The range is inclusive in both ends.
   5020           If the range is trivial, the number pair can be simplified as
   5021           a single number.  If the function's call graph node's UID
   5022           falls within one of the specified ranges, the PASS is disabled
   5023           for that function.  The UID is shown in the function header of
   5024           a dump file, and the pass names can be dumped by using option
   5025           '-fdump-passes'.
   5026 
   5027      '-fdisable-tree-PASS'
   5028      '-fdisable-tree-PASS=RANGE-LIST'
   5029           Disable tree pass PASS.  See '-fdisable-rtl' for the
   5030           description of option arguments.
   5031 
   5032      '-fenable-ipa-PASS'
   5033           Enable IPA pass PASS.  PASS is the pass name.  If the same
   5034           pass is statically invoked in the compiler multiple times, the
   5035           pass name should be appended with a sequential number starting
   5036           from 1.
   5037 
   5038      '-fenable-rtl-PASS'
   5039      '-fenable-rtl-PASS=RANGE-LIST'
   5040           Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
   5041           description and examples.
   5042 
   5043      '-fenable-tree-PASS'
   5044      '-fenable-tree-PASS=RANGE-LIST'
   5045           Enable tree pass PASS.  See '-fdisable-rtl' for the
   5046           description of option arguments.
   5047 
   5048      Here are some examples showing uses of these options.
   5049 
   5050 
   5051           # disable ccp1 for all functions
   5052              -fdisable-tree-ccp1
   5053           # disable complete unroll for function whose cgraph node uid is 1
   5054              -fenable-tree-cunroll=1
   5055           # disable gcse2 for functions at the following ranges [1,1],
   5056           # [300,400], and [400,1000]
   5057           # disable gcse2 for functions foo and foo2
   5058              -fdisable-rtl-gcse2=foo,foo2
   5059           # disable early inlining
   5060              -fdisable-tree-einline
   5061           # disable ipa inlining
   5062              -fdisable-ipa-inline
   5063           # enable tree full unroll
   5064              -fenable-tree-unroll
   5065 
   5066 
   5067 '-dLETTERS'
   5068 '-fdump-rtl-PASS'
   5069 '-fdump-rtl-PASS=FILENAME'
   5070      Says to make debugging dumps during compilation at times specified
   5071      by LETTERS.  This is used for debugging the RTL-based passes of the
   5072      compiler.  The file names for most of the dumps are made by
   5073      appending a pass number and a word to the DUMPNAME, and the files
   5074      are created in the directory of the output file.  In case of
   5075      '=FILENAME' option, the dump is output on the given file instead of
   5076      the pass numbered dump files.  Note that the pass number is
   5077      computed statically as passes get registered into the pass manager.
   5078      Thus the numbering is not related to the dynamic order of execution
   5079      of passes.  In particular, a pass installed by a plugin could have
   5080      a number over 200 even if it executed quite early.  DUMPNAME is
   5081      generated from the name of the output file, if explicitly specified
   5082      and it is not an executable, otherwise it is the basename of the
   5083      source file.  These switches may have different effects when '-E'
   5084      is used for preprocessing.
   5085 
   5086      Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
   5087      option LETTERS.  Here are the possible letters for use in PASS and
   5088      LETTERS, and their meanings:
   5089 
   5090      '-fdump-rtl-alignments'
   5091           Dump after branch alignments have been computed.
   5092 
   5093      '-fdump-rtl-asmcons'
   5094           Dump after fixing rtl statements that have unsatisfied in/out
   5095           constraints.
   5096 
   5097      '-fdump-rtl-auto_inc_dec'
   5098           Dump after auto-inc-dec discovery.  This pass is only run on
   5099           architectures that have auto inc or auto dec instructions.
   5100 
   5101      '-fdump-rtl-barriers'
   5102           Dump after cleaning up the barrier instructions.
   5103 
   5104      '-fdump-rtl-bbpart'
   5105           Dump after partitioning hot and cold basic blocks.
   5106 
   5107      '-fdump-rtl-bbro'
   5108           Dump after block reordering.
   5109 
   5110      '-fdump-rtl-btl1'
   5111      '-fdump-rtl-btl2'
   5112           '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
   5113           the two branch target load optimization passes.
   5114 
   5115      '-fdump-rtl-bypass'
   5116           Dump after jump bypassing and control flow optimizations.
   5117 
   5118      '-fdump-rtl-combine'
   5119           Dump after the RTL instruction combination pass.
   5120 
   5121      '-fdump-rtl-compgotos'
   5122           Dump after duplicating the computed gotos.
   5123 
   5124      '-fdump-rtl-ce1'
   5125      '-fdump-rtl-ce2'
   5126      '-fdump-rtl-ce3'
   5127           '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
   5128           enable dumping after the three if conversion passes.
   5129 
   5130      '-fdump-rtl-cprop_hardreg'
   5131           Dump after hard register copy propagation.
   5132 
   5133      '-fdump-rtl-csa'
   5134           Dump after combining stack adjustments.
   5135 
   5136      '-fdump-rtl-cse1'
   5137      '-fdump-rtl-cse2'
   5138           '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
   5139           the two common subexpression elimination passes.
   5140 
   5141      '-fdump-rtl-dce'
   5142           Dump after the standalone dead code elimination passes.
   5143 
   5144      '-fdump-rtl-dbr'
   5145           Dump after delayed branch scheduling.
   5146 
   5147      '-fdump-rtl-dce1'
   5148      '-fdump-rtl-dce2'
   5149           '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
   5150           the two dead store elimination passes.
   5151 
   5152      '-fdump-rtl-eh'
   5153           Dump after finalization of EH handling code.
   5154 
   5155      '-fdump-rtl-eh_ranges'
   5156           Dump after conversion of EH handling range regions.
   5157 
   5158      '-fdump-rtl-expand'
   5159           Dump after RTL generation.
   5160 
   5161      '-fdump-rtl-fwprop1'
   5162      '-fdump-rtl-fwprop2'
   5163           '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
   5164           after the two forward propagation passes.
   5165 
   5166      '-fdump-rtl-gcse1'
   5167      '-fdump-rtl-gcse2'
   5168           '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
   5169           global common subexpression elimination.
   5170 
   5171      '-fdump-rtl-init-regs'
   5172           Dump after the initialization of the registers.
   5173 
   5174      '-fdump-rtl-initvals'
   5175           Dump after the computation of the initial value sets.
   5176 
   5177      '-fdump-rtl-into_cfglayout'
   5178           Dump after converting to cfglayout mode.
   5179 
   5180      '-fdump-rtl-ira'
   5181           Dump after iterated register allocation.
   5182 
   5183      '-fdump-rtl-jump'
   5184           Dump after the second jump optimization.
   5185 
   5186      '-fdump-rtl-loop2'
   5187           '-fdump-rtl-loop2' enables dumping after the rtl loop
   5188           optimization passes.
   5189 
   5190      '-fdump-rtl-mach'
   5191           Dump after performing the machine dependent reorganization
   5192           pass, if that pass exists.
   5193 
   5194      '-fdump-rtl-mode_sw'
   5195           Dump after removing redundant mode switches.
   5196 
   5197      '-fdump-rtl-rnreg'
   5198           Dump after register renumbering.
   5199 
   5200      '-fdump-rtl-outof_cfglayout'
   5201           Dump after converting from cfglayout mode.
   5202 
   5203      '-fdump-rtl-peephole2'
   5204           Dump after the peephole pass.
   5205 
   5206      '-fdump-rtl-postreload'
   5207           Dump after post-reload optimizations.
   5208 
   5209      '-fdump-rtl-pro_and_epilogue'
   5210           Dump after generating the function prologues and epilogues.
   5211 
   5212      '-fdump-rtl-regmove'
   5213           Dump after the register move pass.
   5214 
   5215      '-fdump-rtl-sched1'
   5216      '-fdump-rtl-sched2'
   5217           '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
   5218           after the basic block scheduling passes.
   5219 
   5220      '-fdump-rtl-see'
   5221           Dump after sign extension elimination.
   5222 
   5223      '-fdump-rtl-seqabstr'
   5224           Dump after common sequence discovery.
   5225 
   5226      '-fdump-rtl-shorten'
   5227           Dump after shortening branches.
   5228 
   5229      '-fdump-rtl-sibling'
   5230           Dump after sibling call optimizations.
   5231 
   5232      '-fdump-rtl-split1'
   5233      '-fdump-rtl-split2'
   5234      '-fdump-rtl-split3'
   5235      '-fdump-rtl-split4'
   5236      '-fdump-rtl-split5'
   5237           '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3',
   5238           '-fdump-rtl-split4' and '-fdump-rtl-split5' enable dumping
   5239           after five rounds of instruction splitting.
   5240 
   5241      '-fdump-rtl-sms'
   5242           Dump after modulo scheduling.  This pass is only run on some
   5243           architectures.
   5244 
   5245      '-fdump-rtl-stack'
   5246           Dump after conversion from GCC's "flat register file"
   5247           registers to the x87's stack-like registers.  This pass is
   5248           only run on x86 variants.
   5249 
   5250      '-fdump-rtl-subreg1'
   5251      '-fdump-rtl-subreg2'
   5252           '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
   5253           after the two subreg expansion passes.
   5254 
   5255      '-fdump-rtl-unshare'
   5256           Dump after all rtl has been unshared.
   5257 
   5258      '-fdump-rtl-vartrack'
   5259           Dump after variable tracking.
   5260 
   5261      '-fdump-rtl-vregs'
   5262           Dump after converting virtual registers to hard registers.
   5263 
   5264      '-fdump-rtl-web'
   5265           Dump after live range splitting.
   5266 
   5267      '-fdump-rtl-regclass'
   5268      '-fdump-rtl-subregs_of_mode_init'
   5269      '-fdump-rtl-subregs_of_mode_finish'
   5270      '-fdump-rtl-dfinit'
   5271      '-fdump-rtl-dfinish'
   5272           These dumps are defined but always produce empty files.
   5273 
   5274      '-da'
   5275      '-fdump-rtl-all'
   5276           Produce all the dumps listed above.
   5277 
   5278      '-dA'
   5279           Annotate the assembler output with miscellaneous debugging
   5280           information.
   5281 
   5282      '-dD'
   5283           Dump all macro definitions, at the end of preprocessing, in
   5284           addition to normal output.
   5285 
   5286      '-dH'
   5287           Produce a core dump whenever an error occurs.
   5288 
   5289      '-dp'
   5290           Annotate the assembler output with a comment indicating which
   5291           pattern and alternative is used.  The length of each
   5292           instruction is also printed.
   5293 
   5294      '-dP'
   5295           Dump the RTL in the assembler output as a comment before each
   5296           instruction.  Also turns on '-dp' annotation.
   5297 
   5298      '-dx'
   5299           Just generate RTL for a function instead of compiling it.
   5300           Usually used with '-fdump-rtl-expand'.
   5301 
   5302 '-fdump-noaddr'
   5303      When doing debugging dumps, suppress address output.  This makes it
   5304      more feasible to use diff on debugging dumps for compiler
   5305      invocations with different compiler binaries and/or different text
   5306      / bss / data / heap / stack / dso start locations.
   5307 
   5308 '-fdump-unnumbered'
   5309      When doing debugging dumps, suppress instruction numbers and
   5310      address output.  This makes it more feasible to use diff on
   5311      debugging dumps for compiler invocations with different options, in
   5312      particular with and without '-g'.
   5313 
   5314 '-fdump-unnumbered-links'
   5315      When doing debugging dumps (see '-d' option above), suppress
   5316      instruction numbers for the links to the previous and next
   5317      instructions in a sequence.
   5318 
   5319 '-fdump-translation-unit (C++ only)'
   5320 '-fdump-translation-unit-OPTIONS (C++ only)'
   5321      Dump a representation of the tree structure for the entire
   5322      translation unit to a file.  The file name is made by appending
   5323      '.tu' to the source file name, and the file is created in the same
   5324      directory as the output file.  If the '-OPTIONS' form is used,
   5325      OPTIONS controls the details of the dump as described for the
   5326      '-fdump-tree' options.
   5327 
   5328 '-fdump-class-hierarchy (C++ only)'
   5329 '-fdump-class-hierarchy-OPTIONS (C++ only)'
   5330      Dump a representation of each class's hierarchy and virtual
   5331      function table layout to a file.  The file name is made by
   5332      appending '.class' to the source file name, and the file is created
   5333      in the same directory as the output file.  If the '-OPTIONS' form
   5334      is used, OPTIONS controls the details of the dump as described for
   5335      the '-fdump-tree' options.
   5336 
   5337 '-fdump-ipa-SWITCH'
   5338      Control the dumping at various stages of inter-procedural analysis
   5339      language tree to a file.  The file name is generated by appending a
   5340      switch specific suffix to the source file name, and the file is
   5341      created in the same directory as the output file.  The following
   5342      dumps are possible:
   5343 
   5344      'all'
   5345           Enables all inter-procedural analysis dumps.
   5346 
   5347      'cgraph'
   5348           Dumps information about call-graph optimization, unused
   5349           function removal, and inlining decisions.
   5350 
   5351      'inline'
   5352           Dump after function inlining.
   5353 
   5354 '-fdump-passes'
   5355      Dump the list of optimization passes that are turned on and off by
   5356      the current command-line options.
   5357 
   5358 '-fdump-statistics-OPTION'
   5359      Enable and control dumping of pass statistics in a separate file.
   5360      The file name is generated by appending a suffix ending in
   5361      '.statistics' to the source file name, and the file is created in
   5362      the same directory as the output file.  If the '-OPTION' form is
   5363      used, '-stats' causes counters to be summed over the whole
   5364      compilation unit while '-details' dumps every event as the passes
   5365      generate them.  The default with no option is to sum counters for
   5366      each function compiled.
   5367 
   5368 '-fdump-tree-SWITCH'
   5369 '-fdump-tree-SWITCH-OPTIONS'
   5370 '-fdump-tree-SWITCH-OPTIONS=FILENAME'
   5371      Control the dumping at various stages of processing the
   5372      intermediate language tree to a file.  The file name is generated
   5373      by appending a switch-specific suffix to the source file name, and
   5374      the file is created in the same directory as the output file.  In
   5375      case of '=FILENAME' option, the dump is output on the given file
   5376      instead of the auto named dump files.  If the '-OPTIONS' form is
   5377      used, OPTIONS is a list of '-' separated options which control the
   5378      details of the dump.  Not all options are applicable to all dumps;
   5379      those that are not meaningful are ignored.  The following options
   5380      are available
   5381 
   5382      'address'
   5383           Print the address of each node.  Usually this is not
   5384           meaningful as it changes according to the environment and
   5385           source file.  Its primary use is for tying up a dump file with
   5386           a debug environment.
   5387      'asmname'
   5388           If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
   5389           that in the dump instead of 'DECL_NAME'.  Its primary use is
   5390           ease of use working backward from mangled names in the
   5391           assembly file.
   5392      'slim'
   5393           When dumping front-end intermediate representations, inhibit
   5394           dumping of members of a scope or body of a function merely
   5395           because that scope has been reached.  Only dump such items
   5396           when they are directly reachable by some other path.
   5397 
   5398           When dumping pretty-printed trees, this option inhibits
   5399           dumping the bodies of control structures.
   5400 
   5401           When dumping RTL, print the RTL in slim (condensed) form
   5402           instead of the default LISP-like representation.
   5403      'raw'
   5404           Print a raw representation of the tree.  By default, trees are
   5405           pretty-printed into a C-like representation.
   5406      'details'
   5407           Enable more detailed dumps (not honored by every dump option).
   5408           Also include information from the optimization passes.
   5409      'stats'
   5410           Enable dumping various statistics about the pass (not honored
   5411           by every dump option).
   5412      'blocks'
   5413           Enable showing basic block boundaries (disabled in raw dumps).
   5414      'graph'
   5415           For each of the other indicated dump files
   5416           ('-fdump-rtl-PASS'), dump a representation of the control flow
   5417           graph suitable for viewing with GraphViz to
   5418           'FILE.PASSID.PASS.dot'.  Each function in the file is
   5419           pretty-printed as a subgraph, so that GraphViz can render them
   5420           all in a single plot.
   5421 
   5422           This option currently only works for RTL dumps, and the RTL is
   5423           always dumped in slim form.
   5424      'vops'
   5425           Enable showing virtual operands for every statement.
   5426      'lineno'
   5427           Enable showing line numbers for statements.
   5428      'uid'
   5429           Enable showing the unique ID ('DECL_UID') for each variable.
   5430      'verbose'
   5431           Enable showing the tree dump for each statement.
   5432      'eh'
   5433           Enable showing the EH region number holding each statement.
   5434      'scev'
   5435           Enable showing scalar evolution analysis details.
   5436      'optimized'
   5437           Enable showing optimization information (only available in
   5438           certain passes).
   5439      'missed'
   5440           Enable showing missed optimization information (only available
   5441           in certain passes).
   5442      'notes'
   5443           Enable other detailed optimization information (only available
   5444           in certain passes).
   5445      '=FILENAME'
   5446           Instead of an auto named dump file, output into the given file
   5447           name.  The file names 'stdout' and 'stderr' are treated
   5448           specially and are considered already open standard streams.
   5449           For example,
   5450 
   5451                gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
   5452                     -fdump-tree-pre=stderr file.c
   5453 
   5454           outputs vectorizer dump into 'foo.dump', while the PRE dump is
   5455           output on to 'stderr'.  If two conflicting dump filenames are
   5456           given for the same pass, then the latter option overrides the
   5457           earlier one.
   5458 
   5459      'all'
   5460           Turn on all options, except 'raw', 'slim', 'verbose' and
   5461           'lineno'.
   5462 
   5463      'optall'
   5464           Turn on all optimization options, i.e., 'optimized', 'missed',
   5465           and 'note'.
   5466 
   5467      The following tree dumps are possible:
   5468 
   5469      'original'
   5470           Dump before any tree based optimization, to 'FILE.original'.
   5471 
   5472      'optimized'
   5473           Dump after all tree based optimization, to 'FILE.optimized'.
   5474 
   5475      'gimple'
   5476           Dump each function before and after the gimplification pass to
   5477           a file.  The file name is made by appending '.gimple' to the
   5478           source file name.
   5479 
   5480      'cfg'
   5481           Dump the control flow graph of each function to a file.  The
   5482           file name is made by appending '.cfg' to the source file name.
   5483 
   5484      'ch'
   5485           Dump each function after copying loop headers.  The file name
   5486           is made by appending '.ch' to the source file name.
   5487 
   5488      'ssa'
   5489           Dump SSA related information to a file.  The file name is made
   5490           by appending '.ssa' to the source file name.
   5491 
   5492      'alias'
   5493           Dump aliasing information for each function.  The file name is
   5494           made by appending '.alias' to the source file name.
   5495 
   5496      'ccp'
   5497           Dump each function after CCP.  The file name is made by
   5498           appending '.ccp' to the source file name.
   5499 
   5500      'storeccp'
   5501           Dump each function after STORE-CCP.  The file name is made by
   5502           appending '.storeccp' to the source file name.
   5503 
   5504      'pre'
   5505           Dump trees after partial redundancy elimination.  The file
   5506           name is made by appending '.pre' to the source file name.
   5507 
   5508      'fre'
   5509           Dump trees after full redundancy elimination.  The file name
   5510           is made by appending '.fre' to the source file name.
   5511 
   5512      'copyprop'
   5513           Dump trees after copy propagation.  The file name is made by
   5514           appending '.copyprop' to the source file name.
   5515 
   5516      'store_copyprop'
   5517           Dump trees after store copy-propagation.  The file name is
   5518           made by appending '.store_copyprop' to the source file name.
   5519 
   5520      'dce'
   5521           Dump each function after dead code elimination.  The file name
   5522           is made by appending '.dce' to the source file name.
   5523 
   5524      'mudflap'
   5525           Dump each function after adding mudflap instrumentation.  The
   5526           file name is made by appending '.mudflap' to the source file
   5527           name.
   5528 
   5529      'sra'
   5530           Dump each function after performing scalar replacement of
   5531           aggregates.  The file name is made by appending '.sra' to the
   5532           source file name.
   5533 
   5534      'sink'
   5535           Dump each function after performing code sinking.  The file
   5536           name is made by appending '.sink' to the source file name.
   5537 
   5538      'dom'
   5539           Dump each function after applying dominator tree
   5540           optimizations.  The file name is made by appending '.dom' to
   5541           the source file name.
   5542 
   5543      'dse'
   5544           Dump each function after applying dead store elimination.  The
   5545           file name is made by appending '.dse' to the source file name.
   5546 
   5547      'phiopt'
   5548           Dump each function after optimizing PHI nodes into
   5549           straightline code.  The file name is made by appending
   5550           '.phiopt' to the source file name.
   5551 
   5552      'forwprop'
   5553           Dump each function after forward propagating single use
   5554           variables.  The file name is made by appending '.forwprop' to
   5555           the source file name.
   5556 
   5557      'copyrename'
   5558           Dump each function after applying the copy rename
   5559           optimization.  The file name is made by appending
   5560           '.copyrename' to the source file name.
   5561 
   5562      'nrv'
   5563           Dump each function after applying the named return value
   5564           optimization on generic trees.  The file name is made by
   5565           appending '.nrv' to the source file name.
   5566 
   5567      'vect'
   5568           Dump each function after applying vectorization of loops.  The
   5569           file name is made by appending '.vect' to the source file
   5570           name.
   5571 
   5572      'slp'
   5573           Dump each function after applying vectorization of basic
   5574           blocks.  The file name is made by appending '.slp' to the
   5575           source file name.
   5576 
   5577      'vrp'
   5578           Dump each function after Value Range Propagation (VRP). The
   5579           file name is made by appending '.vrp' to the source file name.
   5580 
   5581      'all'
   5582           Enable all the available tree dumps with the flags provided in
   5583           this option.
   5584 
   5585 '-fopt-info'
   5586 '-fopt-info-OPTIONS'
   5587 '-fopt-info-OPTIONS=FILENAME'
   5588      Controls optimization dumps from various optimization passes.  If
   5589      the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
   5590      options to select the dump details and optimizations.  If OPTIONS
   5591      is not specified, it defaults to 'all' for details and 'optall' for
   5592      optimization groups.  If the FILENAME is not specified, it defaults
   5593      to 'stderr'.  Note that the output FILENAME will be overwritten in
   5594      case of multiple translation units.  If a combined output from
   5595      multiple translation units is desired, 'stderr' should be used
   5596      instead.
   5597 
   5598      The options can be divided into two groups, 1) options describing
   5599      the verbosity of the dump, and 2) options describing which
   5600      optimizations should be included.  The options from both the groups
   5601      can be freely mixed as they are non-overlapping.  However, in case
   5602      of any conflicts, the latter options override the earlier options
   5603      on the command line.  Though multiple -fopt-info options are
   5604      accepted, only one of them can have '=filename'.  If other
   5605      filenames are provided then all but the first one are ignored.
   5606 
   5607      The dump verbosity has the following options
   5608 
   5609      'optimized'
   5610           Print information when an optimization is successfully
   5611           applied.  It is up to a pass to decide which information is
   5612           relevant.  For example, the vectorizer passes print the source
   5613           location of loops which got successfully vectorized.
   5614      'missed'
   5615           Print information about missed optimizations.  Individual
   5616           passes control which information to include in the output.
   5617           For example,
   5618 
   5619                gcc -O2 -ftree-vectorize -fopt-info-vec-missed
   5620 
   5621           will print information about missed optimization opportunities
   5622           from vectorization passes on stderr.
   5623      'note'
   5624           Print verbose information about optimizations, such as certain
   5625           transformations, more detailed messages about decisions etc.
   5626      'all'
   5627           Print detailed optimization information.  This includes
   5628           OPTIMIZED, MISSED, and NOTE.
   5629 
   5630      The second set of options describes a group of optimizations and
   5631      may include one or more of the following.
   5632 
   5633      'ipa'
   5634           Enable dumps from all interprocedural optimizations.
   5635      'loop'
   5636           Enable dumps from all loop optimizations.
   5637      'inline'
   5638           Enable dumps from all inlining optimizations.
   5639      'vec'
   5640           Enable dumps from all vectorization optimizations.
   5641 
   5642      For example,
   5643           gcc -O3 -fopt-info-missed=missed.all
   5644 
   5645      outputs missed optimization report from all the passes into
   5646      'missed.all'.
   5647 
   5648      As another example,
   5649           gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
   5650 
   5651      will output information about missed optimizations as well as
   5652      optimized locations from all the inlining passes into 'inline.txt'.
   5653 
   5654      If the FILENAME is provided, then the dumps from all the applicable
   5655      optimizations are concatenated into the 'filename'.  Otherwise the
   5656      dump is output onto 'stderr'.  If OPTIONS is omitted, it defaults
   5657      to 'all-optall', which means dump all available optimization info
   5658      from all the passes.  In the following example, all optimization
   5659      info is output on to 'stderr'.
   5660 
   5661           gcc -O3 -fopt-info
   5662 
   5663      Note that '-fopt-info-vec-missed' behaves the same as
   5664      '-fopt-info-missed-vec'.
   5665 
   5666      As another example, consider
   5667 
   5668           gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
   5669 
   5670      Here the two output filenames 'vec.miss' and 'loop.opt' are in
   5671      conflict since only one output file is allowed.  In this case, only
   5672      the first option takes effect and the subsequent options are
   5673      ignored.  Thus only the 'vec.miss' is produced which cotaints dumps
   5674      from the vectorizer about missed opportunities.
   5675 
   5676 '-ftree-vectorizer-verbose=N'
   5677      This option is deprecated and is implemented in terms of
   5678      '-fopt-info'.  Please use '-fopt-info-KIND' form instead, where
   5679      KIND is one of the valid opt-info options.  It prints additional
   5680      optimization information.  For N=0 no diagnostic information is
   5681      reported.  If N=1 the vectorizer reports each loop that got
   5682      vectorized, and the total number of loops that got vectorized.  If
   5683      N=2 the vectorizer reports locations which could not be vectorized
   5684      and the reasons for those.  For any higher verbosity levels all the
   5685      analysis and transformation information from the vectorizer is
   5686      reported.
   5687 
   5688      Note that the information output by '-ftree-vectorizer-verbose'
   5689      option is sent to 'stderr'.  If the equivalent form
   5690      '-fopt-info-OPTIONS=FILENAME' is used then the output is sent into
   5691      FILENAME instead.
   5692 
   5693 '-frandom-seed=STRING'
   5694      This option provides a seed that GCC uses in place of random
   5695      numbers in generating certain symbol names that have to be
   5696      different in every compiled file.  It is also used to place unique
   5697      stamps in coverage data files and the object files that produce
   5698      them.  You can use the '-frandom-seed' option to produce
   5699      reproducibly identical object files.
   5700 
   5701      The STRING should be different for every file you compile.
   5702 
   5703 '-fsched-verbose=N'
   5704      On targets that use instruction scheduling, this option controls
   5705      the amount of debugging output the scheduler prints.  This
   5706      information is written to standard error, unless
   5707      '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which
   5708      case it is output to the usual dump listing file, '.sched1' or
   5709      '.sched2' respectively.  However for N greater than nine, the
   5710      output is always printed to standard error.
   5711 
   5712      For N greater than zero, '-fsched-verbose' outputs the same
   5713      information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
   5714      greater than one, it also output basic block probabilities,
   5715      detailed ready list information and unit/insn info.  For N greater
   5716      than two, it includes RTL at abort point, control-flow and regions
   5717      info.  And for N over four, '-fsched-verbose' also includes
   5718      dependence info.
   5719 
   5720 '-save-temps'
   5721 '-save-temps=cwd'
   5722      Store the usual "temporary" intermediate files permanently; place
   5723      them in the current directory and name them based on the source
   5724      file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
   5725      'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
   5726      preprocessed 'foo.i' output file even though the compiler now
   5727      normally uses an integrated preprocessor.
   5728 
   5729      When used in combination with the '-x' command-line option,
   5730      '-save-temps' is sensible enough to avoid over writing an input
   5731      source file with the same extension as an intermediate file.  The
   5732      corresponding intermediate file may be obtained by renaming the
   5733      source file before using '-save-temps'.
   5734 
   5735      If you invoke GCC in parallel, compiling several different source
   5736      files that share a common base name in different subdirectories or
   5737      the same source file compiled for multiple output destinations, it
   5738      is likely that the different parallel compilers will interfere with
   5739      each other, and overwrite the temporary files.  For instance:
   5740 
   5741           gcc -save-temps -o outdir1/foo.o indir1/foo.c&
   5742           gcc -save-temps -o outdir2/foo.o indir2/foo.c&
   5743 
   5744      may result in 'foo.i' and 'foo.o' being written to simultaneously
   5745      by both compilers.
   5746 
   5747 '-save-temps=obj'
   5748      Store the usual "temporary" intermediate files permanently.  If the
   5749      '-o' option is used, the temporary files are based on the object
   5750      file.  If the '-o' option is not used, the '-save-temps=obj' switch
   5751      behaves like '-save-temps'.
   5752 
   5753      For example:
   5754 
   5755           gcc -save-temps=obj -c foo.c
   5756           gcc -save-temps=obj -c bar.c -o dir/xbar.o
   5757           gcc -save-temps=obj foobar.c -o dir2/yfoobar
   5758 
   5759      creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
   5760      'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.
   5761 
   5762 '-time[=FILE]'
   5763      Report the CPU time taken by each subprocess in the compilation
   5764      sequence.  For C source files, this is the compiler proper and
   5765      assembler (plus the linker if linking is done).
   5766 
   5767      Without the specification of an output file, the output looks like
   5768      this:
   5769 
   5770           # cc1 0.12 0.01
   5771           # as 0.00 0.01
   5772 
   5773      The first number on each line is the "user time", that is time
   5774      spent executing the program itself.  The second number is "system
   5775      time", time spent executing operating system routines on behalf of
   5776      the program.  Both numbers are in seconds.
   5777 
   5778      With the specification of an output file, the output is appended to
   5779      the named file, and it looks like this:
   5780 
   5781           0.12 0.01 cc1 OPTIONS
   5782           0.00 0.01 as OPTIONS
   5783 
   5784      The "user time" and the "system time" are moved before the program
   5785      name, and the options passed to the program are displayed, so that
   5786      one can later tell what file was being compiled, and with which
   5787      options.
   5788 
   5789 '-fvar-tracking'
   5790      Run variable tracking pass.  It computes where variables are stored
   5791      at each position in code.  Better debugging information is then
   5792      generated (if the debugging information format supports this
   5793      information).
   5794 
   5795      It is enabled by default when compiling with optimization ('-Os',
   5796      '-O', '-O2', ...), debugging information ('-g') and the debug info
   5797      format supports it.
   5798 
   5799 '-fvar-tracking-assignments'
   5800      Annotate assignments to user variables early in the compilation and
   5801      attempt to carry the annotations over throughout the compilation
   5802      all the way to the end, in an attempt to improve debug information
   5803      while optimizing.  Use of '-gdwarf-4' is recommended along with it.
   5804 
   5805      It can be enabled even if var-tracking is disabled, in which case
   5806      annotations are created and maintained, but discarded at the end.
   5807 
   5808 '-fvar-tracking-assignments-toggle'
   5809      Toggle '-fvar-tracking-assignments', in the same way that
   5810      '-gtoggle' toggles '-g'.
   5811 
   5812 '-print-file-name=LIBRARY'
   5813      Print the full absolute name of the library file LIBRARY that would
   5814      be used when linking--and don't do anything else.  With this
   5815      option, GCC does not compile or link anything; it just prints the
   5816      file name.
   5817 
   5818 '-print-multi-directory'
   5819      Print the directory name corresponding to the multilib selected by
   5820      any other switches present in the command line.  This directory is
   5821      supposed to exist in 'GCC_EXEC_PREFIX'.
   5822 
   5823 '-print-multi-lib'
   5824      Print the mapping from multilib directory names to compiler
   5825      switches that enable them.  The directory name is separated from
   5826      the switches by ';', and each switch starts with an '@' instead of
   5827      the '-', without spaces between multiple switches.  This is
   5828      supposed to ease shell processing.
   5829 
   5830 '-print-multi-os-directory'
   5831      Print the path to OS libraries for the selected multilib, relative
   5832      to some 'lib' subdirectory.  If OS libraries are present in the
   5833      'lib' subdirectory and no multilibs are used, this is usually just
   5834      '.', if OS libraries are present in 'libSUFFIX' sibling directories
   5835      this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
   5836      libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
   5837      'amd64', 'sparcv9' or 'ev6'.
   5838 
   5839 '-print-multiarch'
   5840      Print the path to OS libraries for the selected multiarch, relative
   5841      to some 'lib' subdirectory.
   5842 
   5843 '-print-prog-name=PROGRAM'
   5844      Like '-print-file-name', but searches for a program such as 'cpp'.
   5845 
   5846 '-print-libgcc-file-name'
   5847      Same as '-print-file-name=libgcc.a'.
   5848 
   5849      This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
   5850      do want to link with 'libgcc.a'.  You can do:
   5851 
   5852           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
   5853 
   5854 '-print-search-dirs'
   5855      Print the name of the configured installation directory and a list
   5856      of program and library directories 'gcc' searches--and don't do
   5857      anything else.
   5858 
   5859      This is useful when 'gcc' prints the error message 'installation
   5860      problem, cannot exec cpp0: No such file or directory'.  To resolve
   5861      this you either need to put 'cpp0' and the other compiler
   5862      components where 'gcc' expects to find them, or you can set the
   5863      environment variable 'GCC_EXEC_PREFIX' to the directory where you
   5864      installed them.  Don't forget the trailing '/'.  *Note Environment
   5865      Variables::.
   5866 
   5867 '-print-sysroot'
   5868      Print the target sysroot directory that is used during compilation.
   5869      This is the target sysroot specified either at configure time or
   5870      using the '--sysroot' option, possibly with an extra suffix that
   5871      depends on compilation options.  If no target sysroot is specified,
   5872      the option prints nothing.
   5873 
   5874 '-print-sysroot-headers-suffix'
   5875      Print the suffix added to the target sysroot when searching for
   5876      headers, or give an error if the compiler is not configured with
   5877      such a suffix--and don't do anything else.
   5878 
   5879 '-dumpmachine'
   5880      Print the compiler's target machine (for example,
   5881      'i686-pc-linux-gnu')--and don't do anything else.
   5882 
   5883 '-dumpversion'
   5884      Print the compiler version (for example, '3.0')--and don't do
   5885      anything else.
   5886 
   5887 '-dumpspecs'
   5888      Print the compiler's built-in specs--and don't do anything else.
   5889      (This is used when GCC itself is being built.)  *Note Spec Files::.
   5890 
   5891 '-fno-eliminate-unused-debug-types'
   5892      Normally, when producing DWARF 2 output, GCC avoids producing debug
   5893      symbol output for types that are nowhere used in the source file
   5894      being compiled.  Sometimes it is useful to have GCC emit debugging
   5895      information for all types declared in a compilation unit,
   5896      regardless of whether or not they are actually used in that
   5897      compilation unit, for example if, in the debugger, you want to cast
   5898      a value to a type that is not actually used in your program (but is
   5899      declared).  More often, however, this results in a significant
   5900      amount of wasted space.
   5901 
   5902 
   5903 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
   5904 
   5905 3.10 Options That Control Optimization
   5906 ======================================
   5907 
   5908 These options control various sorts of optimizations.
   5909 
   5910  Without any optimization option, the compiler's goal is to reduce the
   5911 cost of compilation and to make debugging produce the expected results.
   5912 Statements are independent: if you stop the program with a breakpoint
   5913 between statements, you can then assign a new value to any variable or
   5914 change the program counter to any other statement in the function and
   5915 get exactly the results you expect from the source code.
   5916 
   5917  Turning on optimization flags makes the compiler attempt to improve the
   5918 performance and/or code size at the expense of compilation time and
   5919 possibly the ability to debug the program.
   5920 
   5921  The compiler performs optimization based on the knowledge it has of the
   5922 program.  Compiling multiple files at once to a single output file mode
   5923 allows the compiler to use information gained from all of the files when
   5924 compiling each of them.
   5925 
   5926  Not all optimizations are controlled directly by a flag.  Only
   5927 optimizations that have a flag are listed in this section.
   5928 
   5929  Most optimizations are only enabled if an '-O' level is set on the
   5930 command line.  Otherwise they are disabled, even if individual
   5931 optimization flags are specified.
   5932 
   5933  Depending on the target and how GCC was configured, a slightly
   5934 different set of optimizations may be enabled at each '-O' level than
   5935 those listed here.  You can invoke GCC with '-Q --help=optimizers' to
   5936 find out the exact set of optimizations that are enabled at each level.
   5937 *Note Overall Options::, for examples.
   5938 
   5939 '-O'
   5940 '-O1'
   5941      Optimize.  Optimizing compilation takes somewhat more time, and a
   5942      lot more memory for a large function.
   5943 
   5944      With '-O', the compiler tries to reduce code size and execution
   5945      time, without performing any optimizations that take a great deal
   5946      of compilation time.
   5947 
   5948      '-O' turns on the following optimization flags:
   5949           -fauto-inc-dec
   5950           -fcompare-elim
   5951           -fcprop-registers
   5952           -fdce
   5953           -fdefer-pop
   5954           -fdelayed-branch
   5955           -fdse
   5956           -fguess-branch-probability
   5957           -fif-conversion2
   5958           -fif-conversion
   5959           -fipa-pure-const
   5960           -fipa-profile
   5961           -fipa-reference
   5962           -fmerge-constants
   5963           -fsplit-wide-types
   5964           -ftree-bit-ccp
   5965           -ftree-builtin-call-dce
   5966           -ftree-ccp
   5967           -ftree-ch
   5968           -ftree-copyrename
   5969           -ftree-dce
   5970           -ftree-dominator-opts
   5971           -ftree-dse
   5972           -ftree-forwprop
   5973           -ftree-fre
   5974           -ftree-phiprop
   5975           -ftree-slsr
   5976           -ftree-sra
   5977           -ftree-pta
   5978           -ftree-ter
   5979           -funit-at-a-time
   5980 
   5981      '-O' also turns on '-fomit-frame-pointer' on machines where doing
   5982      so does not interfere with debugging.
   5983 
   5984 '-O2'
   5985      Optimize even more.  GCC performs nearly all supported
   5986      optimizations that do not involve a space-speed tradeoff.  As
   5987      compared to '-O', this option increases both compilation time and
   5988      the performance of the generated code.
   5989 
   5990      '-O2' turns on all optimization flags specified by '-O'.  It also
   5991      turns on the following optimization flags:
   5992           -fthread-jumps
   5993           -falign-functions  -falign-jumps
   5994           -falign-loops  -falign-labels
   5995           -fcaller-saves
   5996           -fcrossjumping
   5997           -fcse-follow-jumps  -fcse-skip-blocks
   5998           -fdelete-null-pointer-checks
   5999           -fdevirtualize
   6000           -fexpensive-optimizations
   6001           -fgcse  -fgcse-lm
   6002           -fhoist-adjacent-loads
   6003           -finline-small-functions
   6004           -findirect-inlining
   6005           -fipa-sra
   6006           -foptimize-sibling-calls
   6007           -fpartial-inlining
   6008           -fpeephole2
   6009           -fregmove
   6010           -freorder-blocks  -freorder-functions
   6011           -frerun-cse-after-loop
   6012           -fsched-interblock  -fsched-spec
   6013           -fschedule-insns  -fschedule-insns2
   6014           -fstrict-aliasing -fstrict-overflow
   6015           -ftree-switch-conversion -ftree-tail-merge
   6016           -ftree-pre
   6017           -ftree-vrp
   6018 
   6019      Please note the warning under '-fgcse' about invoking '-O2' on
   6020      programs that use computed gotos.
   6021 
   6022 '-O3'
   6023      Optimize yet more.  '-O3' turns on all optimizations specified by
   6024      '-O2' and also turns on the '-finline-functions',
   6025      '-funswitch-loops', '-fpredictive-commoning',
   6026      '-fgcse-after-reload', '-ftree-vectorize', '-fvect-cost-model',
   6027      '-ftree-partial-pre' and '-fipa-cp-clone' options.
   6028 
   6029 '-O0'
   6030      Reduce compilation time and make debugging produce the expected
   6031      results.  This is the default.
   6032 
   6033 '-Os'
   6034      Optimize for size.  '-Os' enables all '-O2' optimizations that do
   6035      not typically increase code size.  It also performs further
   6036      optimizations designed to reduce code size.
   6037 
   6038      '-Os' disables the following optimization flags:
   6039           -falign-functions  -falign-jumps  -falign-loops
   6040           -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
   6041           -fprefetch-loop-arrays  -ftree-vect-loop-version
   6042 
   6043 '-Ofast'
   6044      Disregard strict standards compliance.  '-Ofast' enables all '-O3'
   6045      optimizations.  It also enables optimizations that are not valid
   6046      for all standard-compliant programs.  It turns on '-ffast-math' and
   6047      the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'.
   6048 
   6049 '-Og'
   6050      Optimize debugging experience.  '-Og' enables optimizations that do
   6051      not interfere with debugging.  It should be the optimization level
   6052      of choice for the standard edit-compile-debug cycle, offering a
   6053      reasonable level of optimization while maintaining fast compilation
   6054      and a good debugging experience.
   6055 
   6056      If you use multiple '-O' options, with or without level numbers,
   6057      the last such option is the one that is effective.
   6058 
   6059  Options of the form '-fFLAG' specify machine-independent flags.  Most
   6060 flags have both positive and negative forms; the negative form of
   6061 '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
   6062 listed--the one you typically use.  You can figure out the other form by
   6063 either removing 'no-' or adding it.
   6064 
   6065  The following options control specific optimizations.  They are either
   6066 activated by '-O' options or are related to ones that are.  You can use
   6067 the following flags in the rare cases when "fine-tuning" of
   6068 optimizations to be performed is desired.
   6069 
   6070 '-fno-default-inline'
   6071      Do not make member functions inline by default merely because they
   6072      are defined inside the class scope (C++ only).  Otherwise, when you
   6073      specify '-O', member functions defined inside class scope are
   6074      compiled inline by default; i.e., you don't need to add 'inline' in
   6075      front of the member function name.
   6076 
   6077 '-fno-defer-pop'
   6078      Always pop the arguments to each function call as soon as that
   6079      function returns.  For machines that must pop arguments after a
   6080      function call, the compiler normally lets arguments accumulate on
   6081      the stack for several function calls and pops them all at once.
   6082 
   6083      Disabled at levels '-O', '-O2', '-O3', '-Os'.
   6084 
   6085 '-fforward-propagate'
   6086      Perform a forward propagation pass on RTL.  The pass tries to
   6087      combine two instructions and checks if the result can be
   6088      simplified.  If loop unrolling is active, two passes are performed
   6089      and the second is scheduled after loop unrolling.
   6090 
   6091      This option is enabled by default at optimization levels '-O',
   6092      '-O2', '-O3', '-Os'.
   6093 
   6094 '-ffp-contract=STYLE'
   6095      '-ffp-contract=off' disables floating-point expression contraction.
   6096      '-ffp-contract=fast' enables floating-point expression contraction
   6097      such as forming of fused multiply-add operations if the target has
   6098      native support for them.  '-ffp-contract=on' enables floating-point
   6099      expression contraction if allowed by the language standard.  This
   6100      is currently not implemented and treated equal to
   6101      '-ffp-contract=off'.
   6102 
   6103      The default is '-ffp-contract=fast'.
   6104 
   6105 '-fomit-frame-pointer'
   6106      Don't keep the frame pointer in a register for functions that don't
   6107      need one.  This avoids the instructions to save, set up and restore
   6108      frame pointers; it also makes an extra register available in many
   6109      functions.  *It also makes debugging impossible on some machines.*
   6110 
   6111      On some machines, such as the VAX, this flag has no effect, because
   6112      the standard calling sequence automatically handles the frame
   6113      pointer and nothing is saved by pretending it doesn't exist.  The
   6114      machine-description macro 'FRAME_POINTER_REQUIRED' controls whether
   6115      a target machine supports this flag.  *Note Register Usage:
   6116      (gccint)Registers.
   6117 
   6118      Starting with GCC version 4.6, the default setting (when not
   6119      optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86
   6120      targets has been changed to '-fomit-frame-pointer'.  The default
   6121      can be reverted to '-fno-omit-frame-pointer' by configuring GCC
   6122      with the '--enable-frame-pointer' configure option.
   6123 
   6124      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   6125 
   6126 '-foptimize-sibling-calls'
   6127      Optimize sibling and tail recursive calls.
   6128 
   6129      Enabled at levels '-O2', '-O3', '-Os'.
   6130 
   6131 '-fno-inline'
   6132      Do not expand any functions inline apart from those marked with the
   6133      'always_inline' attribute.  This is the default when not
   6134      optimizing.
   6135 
   6136      Single functions can be exempted from inlining by marking them with
   6137      the 'noinline' attribute.
   6138 
   6139 '-finline-small-functions'
   6140      Integrate functions into their callers when their body is smaller
   6141      than expected function call code (so overall size of program gets
   6142      smaller).  The compiler heuristically decides which functions are
   6143      simple enough to be worth integrating in this way.  This inlining
   6144      applies to all functions, even those not declared inline.
   6145 
   6146      Enabled at level '-O2'.
   6147 
   6148 '-findirect-inlining'
   6149      Inline also indirect calls that are discovered to be known at
   6150      compile time thanks to previous inlining.  This option has any
   6151      effect only when inlining itself is turned on by the
   6152      '-finline-functions' or '-finline-small-functions' options.
   6153 
   6154      Enabled at level '-O2'.
   6155 
   6156 '-finline-functions'
   6157      Consider all functions for inlining, even if they are not declared
   6158      inline.  The compiler heuristically decides which functions are
   6159      worth integrating in this way.
   6160 
   6161      If all calls to a given function are integrated, and the function
   6162      is declared 'static', then the function is normally not output as
   6163      assembler code in its own right.
   6164 
   6165      Enabled at level '-O3'.
   6166 
   6167 '-finline-functions-called-once'
   6168      Consider all 'static' functions called once for inlining into their
   6169      caller even if they are not marked 'inline'.  If a call to a given
   6170      function is integrated, then the function is not output as
   6171      assembler code in its own right.
   6172 
   6173      Enabled at levels '-O1', '-O2', '-O3' and '-Os'.
   6174 
   6175 '-fearly-inlining'
   6176      Inline functions marked by 'always_inline' and functions whose body
   6177      seems smaller than the function call overhead early before doing
   6178      '-fprofile-generate' instrumentation and real inlining pass.  Doing
   6179      so makes profiling significantly cheaper and usually inlining
   6180      faster on programs having large chains of nested wrapper functions.
   6181 
   6182      Enabled by default.
   6183 
   6184 '-fipa-sra'
   6185      Perform interprocedural scalar replacement of aggregates, removal
   6186      of unused parameters and replacement of parameters passed by
   6187      reference by parameters passed by value.
   6188 
   6189      Enabled at levels '-O2', '-O3' and '-Os'.
   6190 
   6191 '-finline-limit=N'
   6192      By default, GCC limits the size of functions that can be inlined.
   6193      This flag allows coarse control of this limit.  N is the size of
   6194      functions that can be inlined in number of pseudo instructions.
   6195 
   6196      Inlining is actually controlled by a number of parameters, which
   6197      may be specified individually by using '--param NAME=VALUE'.  The
   6198      '-finline-limit=N' option sets some of these parameters as follows:
   6199 
   6200      'max-inline-insns-single'
   6201           is set to N/2.
   6202      'max-inline-insns-auto'
   6203           is set to N/2.
   6204 
   6205      See below for a documentation of the individual parameters
   6206      controlling inlining and for the defaults of these parameters.
   6207 
   6208      _Note:_ there may be no value to '-finline-limit' that results in
   6209      default behavior.
   6210 
   6211      _Note:_ pseudo instruction represents, in this particular context,
   6212      an abstract measurement of function's size.  In no way does it
   6213      represent a count of assembly instructions and as such its exact
   6214      meaning might change from one release to an another.
   6215 
   6216 '-fno-keep-inline-dllexport'
   6217      This is a more fine-grained version of '-fkeep-inline-functions',
   6218      which applies only to functions that are declared using the
   6219      'dllexport' attribute or declspec (*Note Declaring Attributes of
   6220      Functions: Function Attributes.)
   6221 
   6222 '-fkeep-inline-functions'
   6223      In C, emit 'static' functions that are declared 'inline' into the
   6224      object file, even if the function has been inlined into all of its
   6225      callers.  This switch does not affect functions using the 'extern
   6226      inline' extension in GNU C90.  In C++, emit any and all inline
   6227      functions into the object file.
   6228 
   6229 '-fkeep-static-consts'
   6230      Emit variables declared 'static const' when optimization isn't
   6231      turned on, even if the variables aren't referenced.
   6232 
   6233      GCC enables this option by default.  If you want to force the
   6234      compiler to check if a variable is referenced, regardless of
   6235      whether or not optimization is turned on, use the
   6236      '-fno-keep-static-consts' option.
   6237 
   6238 '-fmerge-constants'
   6239      Attempt to merge identical constants (string constants and
   6240      floating-point constants) across compilation units.
   6241 
   6242      This option is the default for optimized compilation if the
   6243      assembler and linker support it.  Use '-fno-merge-constants' to
   6244      inhibit this behavior.
   6245 
   6246      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   6247 
   6248 '-fmerge-all-constants'
   6249      Attempt to merge identical constants and identical variables.
   6250 
   6251      This option implies '-fmerge-constants'.  In addition to
   6252      '-fmerge-constants' this considers e.g. even constant initialized
   6253      arrays or initialized constant variables with integral or
   6254      floating-point types.  Languages like C or C++ require each
   6255      variable, including multiple instances of the same variable in
   6256      recursive calls, to have distinct locations, so using this option
   6257      results in non-conforming behavior.
   6258 
   6259 '-fmodulo-sched'
   6260      Perform swing modulo scheduling immediately before the first
   6261      scheduling pass.  This pass looks at innermost loops and reorders
   6262      their instructions by overlapping different iterations.
   6263 
   6264 '-fmodulo-sched-allow-regmoves'
   6265      Perform more aggressive SMS-based modulo scheduling with register
   6266      moves allowed.  By setting this flag certain anti-dependences edges
   6267      are deleted, which triggers the generation of reg-moves based on
   6268      the life-range analysis.  This option is effective only with
   6269      '-fmodulo-sched' enabled.
   6270 
   6271 '-fno-branch-count-reg'
   6272      Do not use "decrement and branch" instructions on a count register,
   6273      but instead generate a sequence of instructions that decrement a
   6274      register, compare it against zero, then branch based upon the
   6275      result.  This option is only meaningful on architectures that
   6276      support such instructions, which include x86, PowerPC, IA-64 and
   6277      S/390.
   6278 
   6279      The default is '-fbranch-count-reg'.
   6280 
   6281 '-fno-function-cse'
   6282      Do not put function addresses in registers; make each instruction
   6283      that calls a constant function contain the function's address
   6284      explicitly.
   6285 
   6286      This option results in less efficient code, but some strange hacks
   6287      that alter the assembler output may be confused by the
   6288      optimizations performed when this option is not used.
   6289 
   6290      The default is '-ffunction-cse'
   6291 
   6292 '-fno-zero-initialized-in-bss'
   6293      If the target supports a BSS section, GCC by default puts variables
   6294      that are initialized to zero into BSS.  This can save space in the
   6295      resulting code.
   6296 
   6297      This option turns off this behavior because some programs
   6298      explicitly rely on variables going to the data section--e.g., so
   6299      that the resulting executable can find the beginning of that
   6300      section and/or make assumptions based on that.
   6301 
   6302      The default is '-fzero-initialized-in-bss'.
   6303 
   6304 '-fmudflap -fmudflapth -fmudflapir'
   6305      For front-ends that support it (C and C++), instrument all risky
   6306      pointer/array dereferencing operations, some standard library
   6307      string/heap functions, and some other associated constructs with
   6308      range/validity tests.  Modules so instrumented should be immune to
   6309      buffer overflows, invalid heap use, and some other classes of C/C++
   6310      programming errors.  The instrumentation relies on a separate
   6311      runtime library ('libmudflap'), which is linked into a program if
   6312      '-fmudflap' is given at link time.  Run-time behavior of the
   6313      instrumented program is controlled by the 'MUDFLAP_OPTIONS'
   6314      environment variable.  See 'env MUDFLAP_OPTIONS=-help a.out' for
   6315      its options.
   6316 
   6317      Use '-fmudflapth' instead of '-fmudflap' to compile and to link if
   6318      your program is multi-threaded.  Use '-fmudflapir', in addition to
   6319      '-fmudflap' or '-fmudflapth', if instrumentation should ignore
   6320      pointer reads.  This produces less instrumentation (and therefore
   6321      faster execution) and still provides some protection against
   6322      outright memory corrupting writes, but allows erroneously read data
   6323      to propagate within a program.
   6324 
   6325 '-fthread-jumps'
   6326      Perform optimizations that check to see if a jump branches to a
   6327      location where another comparison subsumed by the first is found.
   6328      If so, the first branch is redirected to either the destination of
   6329      the second branch or a point immediately following it, depending on
   6330      whether the condition is known to be true or false.
   6331 
   6332      Enabled at levels '-O2', '-O3', '-Os'.
   6333 
   6334 '-fsplit-wide-types'
   6335      When using a type that occupies multiple registers, such as 'long
   6336      long' on a 32-bit system, split the registers apart and allocate
   6337      them independently.  This normally generates better code for those
   6338      types, but may make debugging more difficult.
   6339 
   6340      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   6341 
   6342 '-fcse-follow-jumps'
   6343      In common subexpression elimination (CSE), scan through jump
   6344      instructions when the target of the jump is not reached by any
   6345      other path.  For example, when CSE encounters an 'if' statement
   6346      with an 'else' clause, CSE follows the jump when the condition
   6347      tested is false.
   6348 
   6349      Enabled at levels '-O2', '-O3', '-Os'.
   6350 
   6351 '-fcse-skip-blocks'
   6352      This is similar to '-fcse-follow-jumps', but causes CSE to follow
   6353      jumps that conditionally skip over blocks.  When CSE encounters a
   6354      simple 'if' statement with no else clause, '-fcse-skip-blocks'
   6355      causes CSE to follow the jump around the body of the 'if'.
   6356 
   6357      Enabled at levels '-O2', '-O3', '-Os'.
   6358 
   6359 '-frerun-cse-after-loop'
   6360      Re-run common subexpression elimination after loop optimizations
   6361      are performed.
   6362 
   6363      Enabled at levels '-O2', '-O3', '-Os'.
   6364 
   6365 '-fgcse'
   6366      Perform a global common subexpression elimination pass.  This pass
   6367      also performs global constant and copy propagation.
   6368 
   6369      _Note:_ When compiling a program using computed gotos, a GCC
   6370      extension, you may get better run-time performance if you disable
   6371      the global common subexpression elimination pass by adding
   6372      '-fno-gcse' to the command line.
   6373 
   6374      Enabled at levels '-O2', '-O3', '-Os'.
   6375 
   6376 '-fgcse-lm'
   6377      When '-fgcse-lm' is enabled, global common subexpression
   6378      elimination attempts to move loads that are only killed by stores
   6379      into themselves.  This allows a loop containing a load/store
   6380      sequence to be changed to a load outside the loop, and a copy/store
   6381      within the loop.
   6382 
   6383      Enabled by default when '-fgcse' is enabled.
   6384 
   6385 '-fgcse-sm'
   6386      When '-fgcse-sm' is enabled, a store motion pass is run after
   6387      global common subexpression elimination.  This pass attempts to
   6388      move stores out of loops.  When used in conjunction with
   6389      '-fgcse-lm', loops containing a load/store sequence can be changed
   6390      to a load before the loop and a store after the loop.
   6391 
   6392      Not enabled at any optimization level.
   6393 
   6394 '-fgcse-las'
   6395      When '-fgcse-las' is enabled, the global common subexpression
   6396      elimination pass eliminates redundant loads that come after stores
   6397      to the same memory location (both partial and full redundancies).
   6398 
   6399      Not enabled at any optimization level.
   6400 
   6401 '-fgcse-after-reload'
   6402      When '-fgcse-after-reload' is enabled, a redundant load elimination
   6403      pass is performed after reload.  The purpose of this pass is to
   6404      clean up redundant spilling.
   6405 
   6406 '-faggressive-loop-optimizations'
   6407      This option tells the loop optimizer to use language constraints to
   6408      derive bounds for the number of iterations of a loop.  This assumes
   6409      that loop code does not invoke undefined behavior by for example
   6410      causing signed integer overflows or out-of-bound array accesses.
   6411      The bounds for the number of iterations of a loop are used to guide
   6412      loop unrolling and peeling and loop exit test optimizations.  This
   6413      option is enabled by default.
   6414 
   6415 '-funsafe-loop-optimizations'
   6416      This option tells the loop optimizer to assume that loop indices do
   6417      not overflow, and that loops with nontrivial exit condition are not
   6418      infinite.  This enables a wider range of loop optimizations even if
   6419      the loop optimizer itself cannot prove that these assumptions are
   6420      valid.  If you use '-Wunsafe-loop-optimizations', the compiler
   6421      warns you if it finds this kind of loop.
   6422 
   6423 '-fcrossjumping'
   6424      Perform cross-jumping transformation.  This transformation unifies
   6425      equivalent code and saves code size.  The resulting code may or may
   6426      not perform better than without cross-jumping.
   6427 
   6428      Enabled at levels '-O2', '-O3', '-Os'.
   6429 
   6430 '-fauto-inc-dec'
   6431      Combine increments or decrements of addresses with memory accesses.
   6432      This pass is always skipped on architectures that do not have
   6433      instructions to support this.  Enabled by default at '-O' and
   6434      higher on architectures that support this.
   6435 
   6436 '-fdce'
   6437      Perform dead code elimination (DCE) on RTL.  Enabled by default at
   6438      '-O' and higher.
   6439 
   6440 '-fdse'
   6441      Perform dead store elimination (DSE) on RTL.  Enabled by default at
   6442      '-O' and higher.
   6443 
   6444 '-fif-conversion'
   6445      Attempt to transform conditional jumps into branch-less
   6446      equivalents.  This includes use of conditional moves, min, max, set
   6447      flags and abs instructions, and some tricks doable by standard
   6448      arithmetics.  The use of conditional execution on chips where it is
   6449      available is controlled by 'if-conversion2'.
   6450 
   6451      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   6452 
   6453 '-fif-conversion2'
   6454      Use conditional execution (where available) to transform
   6455      conditional jumps into branch-less equivalents.
   6456 
   6457      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   6458 
   6459 '-fdelete-null-pointer-checks'
   6460      Assume that programs cannot safely dereference null pointers, and
   6461      that no code or data element resides there.  This enables simple
   6462      constant folding optimizations at all optimization levels.  In
   6463      addition, other optimization passes in GCC use this flag to control
   6464      global dataflow analyses that eliminate useless checks for null
   6465      pointers; these assume that if a pointer is checked after it has
   6466      already been dereferenced, it cannot be null.
   6467 
   6468      Note however that in some environments this assumption is not true.
   6469      Use '-fno-delete-null-pointer-checks' to disable this optimization
   6470      for programs that depend on that behavior.
   6471 
   6472      Some targets, especially embedded ones, disable this option at all
   6473      levels.  Otherwise it is enabled at all levels: '-O0', '-O1',
   6474      '-O2', '-O3', '-Os'.  Passes that use the information are enabled
   6475      independently at different optimization levels.
   6476 
   6477 '-fdevirtualize'
   6478      Attempt to convert calls to virtual functions to direct calls.
   6479      This is done both within a procedure and interprocedurally as part
   6480      of indirect inlining ('-findirect-inlining') and interprocedural
   6481      constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
   6482      '-Os'.
   6483 
   6484 '-fexpensive-optimizations'
   6485      Perform a number of minor optimizations that are relatively
   6486      expensive.
   6487 
   6488      Enabled at levels '-O2', '-O3', '-Os'.
   6489 
   6490 '-free'
   6491      Attempt to remove redundant extension instructions.  This is
   6492      especially helpful for the x86-64 architecture, which implicitly
   6493      zero-extends in 64-bit registers after writing to their lower
   6494      32-bit half.
   6495 
   6496      Enabled for x86 at levels '-O2', '-O3'.
   6497 
   6498 '-foptimize-register-move'
   6499 '-fregmove'
   6500      Attempt to reassign register numbers in move instructions and as
   6501      operands of other simple instructions in order to maximize the
   6502      amount of register tying.  This is especially helpful on machines
   6503      with two-operand instructions.
   6504 
   6505      Note '-fregmove' and '-foptimize-register-move' are the same
   6506      optimization.
   6507 
   6508      Enabled at levels '-O2', '-O3', '-Os'.
   6509 
   6510 '-fira-algorithm=ALGORITHM'
   6511      Use the specified coloring algorithm for the integrated register
   6512      allocator.  The ALGORITHM argument can be 'priority', which
   6513      specifies Chow's priority coloring, or 'CB', which specifies
   6514      Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
   6515      implemented for all architectures, but for those targets that do
   6516      support it, it is the default because it generates better code.
   6517 
   6518 '-fira-region=REGION'
   6519      Use specified regions for the integrated register allocator.  The
   6520      REGION argument should be one of the following:
   6521 
   6522      'all'
   6523           Use all loops as register allocation regions.  This can give
   6524           the best results for machines with a small and/or irregular
   6525           register set.
   6526 
   6527      'mixed'
   6528           Use all loops except for loops with small register pressure as
   6529           the regions.  This value usually gives the best results in
   6530           most cases and for most architectures, and is enabled by
   6531           default when compiling with optimization for speed ('-O',
   6532           '-O2', ...).
   6533 
   6534      'one'
   6535           Use all functions as a single region.  This typically results
   6536           in the smallest code size, and is enabled by default for '-Os'
   6537           or '-O0'.
   6538 
   6539 '-fira-hoist-pressure'
   6540      Use IRA to evaluate register pressure in the code hoisting pass for
   6541      decisions to hoist expressions.  This option usually results in
   6542      smaller code, but it can slow the compiler down.
   6543 
   6544      This option is enabled at level '-Os' for all targets.
   6545 
   6546 '-fira-loop-pressure'
   6547      Use IRA to evaluate register pressure in loops for decisions to
   6548      move loop invariants.  This option usually results in generation of
   6549      faster and smaller code on machines with large register files (>=
   6550      32 registers), but it can slow the compiler down.
   6551 
   6552      This option is enabled at level '-O3' for some targets.
   6553 
   6554 '-fno-ira-share-save-slots'
   6555      Disable sharing of stack slots used for saving call-used hard
   6556      registers living through a call.  Each hard register gets a
   6557      separate stack slot, and as a result function stack frames are
   6558      larger.
   6559 
   6560 '-fno-ira-share-spill-slots'
   6561      Disable sharing of stack slots allocated for pseudo-registers.
   6562      Each pseudo-register that does not get a hard register gets a
   6563      separate stack slot, and as a result function stack frames are
   6564      larger.
   6565 
   6566 '-fira-verbose=N'
   6567      Control the verbosity of the dump file for the integrated register
   6568      allocator.  The default value is 5.  If the value N is greater or
   6569      equal to 10, the dump output is sent to stderr using the same
   6570      format as N minus 10.
   6571 
   6572 '-fdelayed-branch'
   6573      If supported for the target machine, attempt to reorder
   6574      instructions to exploit instruction slots available after delayed
   6575      branch instructions.
   6576 
   6577      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   6578 
   6579 '-fschedule-insns'
   6580      If supported for the target machine, attempt to reorder
   6581      instructions to eliminate execution stalls due to required data
   6582      being unavailable.  This helps machines that have slow floating
   6583      point or memory load instructions by allowing other instructions to
   6584      be issued until the result of the load or floating-point
   6585      instruction is required.
   6586 
   6587      Enabled at levels '-O2', '-O3'.
   6588 
   6589 '-fschedule-insns2'
   6590      Similar to '-fschedule-insns', but requests an additional pass of
   6591      instruction scheduling after register allocation has been done.
   6592      This is especially useful on machines with a relatively small
   6593      number of registers and where memory load instructions take more
   6594      than one cycle.
   6595 
   6596      Enabled at levels '-O2', '-O3', '-Os'.
   6597 
   6598 '-fno-sched-interblock'
   6599      Don't schedule instructions across basic blocks.  This is normally
   6600      enabled by default when scheduling before register allocation, i.e.
   6601      with '-fschedule-insns' or at '-O2' or higher.
   6602 
   6603 '-fno-sched-spec'
   6604      Don't allow speculative motion of non-load instructions.  This is
   6605      normally enabled by default when scheduling before register
   6606      allocation, i.e. with '-fschedule-insns' or at '-O2' or higher.
   6607 
   6608 '-fsched-pressure'
   6609      Enable register pressure sensitive insn scheduling before register
   6610      allocation.  This only makes sense when scheduling before register
   6611      allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
   6612      higher.  Usage of this option can improve the generated code and
   6613      decrease its size by preventing register pressure increase above
   6614      the number of available hard registers and subsequent spills in
   6615      register allocation.
   6616 
   6617 '-fsched-spec-load'
   6618      Allow speculative motion of some load instructions.  This only
   6619      makes sense when scheduling before register allocation, i.e. with
   6620      '-fschedule-insns' or at '-O2' or higher.
   6621 
   6622 '-fsched-spec-load-dangerous'
   6623      Allow speculative motion of more load instructions.  This only
   6624      makes sense when scheduling before register allocation, i.e. with
   6625      '-fschedule-insns' or at '-O2' or higher.
   6626 
   6627 '-fsched-stalled-insns'
   6628 '-fsched-stalled-insns=N'
   6629      Define how many insns (if any) can be moved prematurely from the
   6630      queue of stalled insns into the ready list during the second
   6631      scheduling pass.  '-fno-sched-stalled-insns' means that no insns
   6632      are moved prematurely, '-fsched-stalled-insns=0' means there is no
   6633      limit on how many queued insns can be moved prematurely.
   6634      '-fsched-stalled-insns' without a value is equivalent to
   6635      '-fsched-stalled-insns=1'.
   6636 
   6637 '-fsched-stalled-insns-dep'
   6638 '-fsched-stalled-insns-dep=N'
   6639      Define how many insn groups (cycles) are examined for a dependency
   6640      on a stalled insn that is a candidate for premature removal from
   6641      the queue of stalled insns.  This has an effect only during the
   6642      second scheduling pass, and only if '-fsched-stalled-insns' is
   6643      used.  '-fno-sched-stalled-insns-dep' is equivalent to
   6644      '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
   6645      a value is equivalent to '-fsched-stalled-insns-dep=1'.
   6646 
   6647 '-fsched2-use-superblocks'
   6648      When scheduling after register allocation, use superblock
   6649      scheduling.  This allows motion across basic block boundaries,
   6650      resulting in faster schedules.  This option is experimental, as not
   6651      all machine descriptions used by GCC model the CPU closely enough
   6652      to avoid unreliable results from the algorithm.
   6653 
   6654      This only makes sense when scheduling after register allocation,
   6655      i.e. with '-fschedule-insns2' or at '-O2' or higher.
   6656 
   6657 '-fsched-group-heuristic'
   6658      Enable the group heuristic in the scheduler.  This heuristic favors
   6659      the instruction that belongs to a schedule group.  This is enabled
   6660      by default when scheduling is enabled, i.e. with '-fschedule-insns'
   6661      or '-fschedule-insns2' or at '-O2' or higher.
   6662 
   6663 '-fsched-critical-path-heuristic'
   6664      Enable the critical-path heuristic in the scheduler.  This
   6665      heuristic favors instructions on the critical path.  This is
   6666      enabled by default when scheduling is enabled, i.e. with
   6667      '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.
   6668 
   6669 '-fsched-spec-insn-heuristic'
   6670      Enable the speculative instruction heuristic in the scheduler.
   6671      This heuristic favors speculative instructions with greater
   6672      dependency weakness.  This is enabled by default when scheduling is
   6673      enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
   6674      '-O2' or higher.
   6675 
   6676 '-fsched-rank-heuristic'
   6677      Enable the rank heuristic in the scheduler.  This heuristic favors
   6678      the instruction belonging to a basic block with greater size or
   6679      frequency.  This is enabled by default when scheduling is enabled,
   6680      i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
   6681      higher.
   6682 
   6683 '-fsched-last-insn-heuristic'
   6684      Enable the last-instruction heuristic in the scheduler.  This
   6685      heuristic favors the instruction that is less dependent on the last
   6686      instruction scheduled.  This is enabled by default when scheduling
   6687      is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
   6688      at '-O2' or higher.
   6689 
   6690 '-fsched-dep-count-heuristic'
   6691      Enable the dependent-count heuristic in the scheduler.  This
   6692      heuristic favors the instruction that has more instructions
   6693      depending on it.  This is enabled by default when scheduling is
   6694      enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
   6695      '-O2' or higher.
   6696 
   6697 '-freschedule-modulo-scheduled-loops'
   6698      Modulo scheduling is performed before traditional scheduling.  If a
   6699      loop is modulo scheduled, later scheduling passes may change its
   6700      schedule.  Use this option to control that behavior.
   6701 
   6702 '-fselective-scheduling'
   6703      Schedule instructions using selective scheduling algorithm.
   6704      Selective scheduling runs instead of the first scheduler pass.
   6705 
   6706 '-fselective-scheduling2'
   6707      Schedule instructions using selective scheduling algorithm.
   6708      Selective scheduling runs instead of the second scheduler pass.
   6709 
   6710 '-fsel-sched-pipelining'
   6711      Enable software pipelining of innermost loops during selective
   6712      scheduling.  This option has no effect unless one of
   6713      '-fselective-scheduling' or '-fselective-scheduling2' is turned on.
   6714 
   6715 '-fsel-sched-pipelining-outer-loops'
   6716      When pipelining loops during selective scheduling, also pipeline
   6717      outer loops.  This option has no effect unless
   6718      '-fsel-sched-pipelining' is turned on.
   6719 
   6720 '-fshrink-wrap'
   6721      Emit function prologues only before parts of the function that need
   6722      it, rather than at the top of the function.  This flag is enabled
   6723      by default at '-O' and higher.
   6724 
   6725 '-fcaller-saves'
   6726      Enable allocation of values to registers that are clobbered by
   6727      function calls, by emitting extra instructions to save and restore
   6728      the registers around such calls.  Such allocation is done only when
   6729      it seems to result in better code.
   6730 
   6731      This option is always enabled by default on certain machines,
   6732      usually those which have no call-preserved registers to use
   6733      instead.
   6734 
   6735      Enabled at levels '-O2', '-O3', '-Os'.
   6736 
   6737 '-fcombine-stack-adjustments'
   6738      Tracks stack adjustments (pushes and pops) and stack memory
   6739      references and then tries to find ways to combine them.
   6740 
   6741      Enabled by default at '-O1' and higher.
   6742 
   6743 '-fconserve-stack'
   6744      Attempt to minimize stack usage.  The compiler attempts to use less
   6745      stack space, even if that makes the program slower.  This option
   6746      implies setting the 'large-stack-frame' parameter to 100 and the
   6747      'large-stack-frame-growth' parameter to 400.
   6748 
   6749 '-ftree-reassoc'
   6750      Perform reassociation on trees.  This flag is enabled by default at
   6751      '-O' and higher.
   6752 
   6753 '-ftree-pre'
   6754      Perform partial redundancy elimination (PRE) on trees.  This flag
   6755      is enabled by default at '-O2' and '-O3'.
   6756 
   6757 '-ftree-partial-pre'
   6758      Make partial redundancy elimination (PRE) more aggressive.  This
   6759      flag is enabled by default at '-O3'.
   6760 
   6761 '-ftree-forwprop'
   6762      Perform forward propagation on trees.  This flag is enabled by
   6763      default at '-O' and higher.
   6764 
   6765 '-ftree-fre'
   6766      Perform full redundancy elimination (FRE) on trees.  The difference
   6767      between FRE and PRE is that FRE only considers expressions that are
   6768      computed on all paths leading to the redundant computation.  This
   6769      analysis is faster than PRE, though it exposes fewer redundancies.
   6770      This flag is enabled by default at '-O' and higher.
   6771 
   6772 '-ftree-phiprop'
   6773      Perform hoisting of loads from conditional pointers on trees.  This
   6774      pass is enabled by default at '-O' and higher.
   6775 
   6776 '-fhoist-adjacent-loads'
   6777      Speculatively hoist loads from both branches of an if-then-else if
   6778      the loads are from adjacent locations in the same structure and the
   6779      target architecture has a conditional move instruction.  This flag
   6780      is enabled by default at '-O2' and higher.
   6781 
   6782 '-ftree-copy-prop'
   6783      Perform copy propagation on trees.  This pass eliminates
   6784      unnecessary copy operations.  This flag is enabled by default at
   6785      '-O' and higher.
   6786 
   6787 '-fipa-pure-const'
   6788      Discover which functions are pure or constant.  Enabled by default
   6789      at '-O' and higher.
   6790 
   6791 '-fipa-reference'
   6792      Discover which static variables do not escape the compilation unit.
   6793      Enabled by default at '-O' and higher.
   6794 
   6795 '-fipa-pta'
   6796      Perform interprocedural pointer analysis and interprocedural
   6797      modification and reference analysis.  This option can cause
   6798      excessive memory and compile-time usage on large compilation units.
   6799      It is not enabled by default at any optimization level.
   6800 
   6801 '-fipa-profile'
   6802      Perform interprocedural profile propagation.  The functions called
   6803      only from cold functions are marked as cold.  Also functions
   6804      executed once (such as 'cold', 'noreturn', static constructors or
   6805      destructors) are identified.  Cold functions and loop less parts of
   6806      functions executed once are then optimized for size.  Enabled by
   6807      default at '-O' and higher.
   6808 
   6809 '-fipa-cp'
   6810      Perform interprocedural constant propagation.  This optimization
   6811      analyzes the program to determine when values passed to functions
   6812      are constants and then optimizes accordingly.  This optimization
   6813      can substantially increase performance if the application has
   6814      constants passed to functions.  This flag is enabled by default at
   6815      '-O2', '-Os' and '-O3'.
   6816 
   6817 '-fipa-cp-clone'
   6818      Perform function cloning to make interprocedural constant
   6819      propagation stronger.  When enabled, interprocedural constant
   6820      propagation performs function cloning when externally visible
   6821      function can be called with constant arguments.  Because this
   6822      optimization can create multiple copies of functions, it may
   6823      significantly increase code size (see '--param
   6824      ipcp-unit-growth=VALUE').  This flag is enabled by default at
   6825      '-O3'.
   6826 
   6827 '-ftree-sink'
   6828      Perform forward store motion on trees.  This flag is enabled by
   6829      default at '-O' and higher.
   6830 
   6831 '-ftree-bit-ccp'
   6832      Perform sparse conditional bit constant propagation on trees and
   6833      propagate pointer alignment information.  This pass only operates
   6834      on local scalar variables and is enabled by default at '-O' and
   6835      higher.  It requires that '-ftree-ccp' is enabled.
   6836 
   6837 '-ftree-ccp'
   6838      Perform sparse conditional constant propagation (CCP) on trees.
   6839      This pass only operates on local scalar variables and is enabled by
   6840      default at '-O' and higher.
   6841 
   6842 '-ftree-switch-conversion'
   6843      Perform conversion of simple initializations in a switch to
   6844      initializations from a scalar array.  This flag is enabled by
   6845      default at '-O2' and higher.
   6846 
   6847 '-ftree-tail-merge'
   6848      Look for identical code sequences.  When found, replace one with a
   6849      jump to the other.  This optimization is known as tail merging or
   6850      cross jumping.  This flag is enabled by default at '-O2' and
   6851      higher.  The compilation time in this pass can be limited using
   6852      'max-tail-merge-comparisons' parameter and
   6853      'max-tail-merge-iterations' parameter.
   6854 
   6855 '-ftree-dce'
   6856      Perform dead code elimination (DCE) on trees.  This flag is enabled
   6857      by default at '-O' and higher.
   6858 
   6859 '-ftree-builtin-call-dce'
   6860      Perform conditional dead code elimination (DCE) for calls to
   6861      built-in functions that may set 'errno' but are otherwise
   6862      side-effect free.  This flag is enabled by default at '-O2' and
   6863      higher if '-Os' is not also specified.
   6864 
   6865 '-ftree-dominator-opts'
   6866      Perform a variety of simple scalar cleanups (constant/copy
   6867      propagation, redundancy elimination, range propagation and
   6868      expression simplification) based on a dominator tree traversal.
   6869      This also performs jump threading (to reduce jumps to jumps).  This
   6870      flag is enabled by default at '-O' and higher.
   6871 
   6872 '-ftree-dse'
   6873      Perform dead store elimination (DSE) on trees.  A dead store is a
   6874      store into a memory location that is later overwritten by another
   6875      store without any intervening loads.  In this case the earlier
   6876      store can be deleted.  This flag is enabled by default at '-O' and
   6877      higher.
   6878 
   6879 '-ftree-ch'
   6880      Perform loop header copying on trees.  This is beneficial since it
   6881      increases effectiveness of code motion optimizations.  It also
   6882      saves one jump.  This flag is enabled by default at '-O' and
   6883      higher.  It is not enabled for '-Os', since it usually increases
   6884      code size.
   6885 
   6886 '-ftree-loop-optimize'
   6887      Perform loop optimizations on trees.  This flag is enabled by
   6888      default at '-O' and higher.
   6889 
   6890 '-ftree-loop-linear'
   6891      Perform loop interchange transformations on tree.  Same as
   6892      '-floop-interchange'.  To use this code transformation, GCC has to
   6893      be configured with '--with-ppl' and '--with-cloog' to enable the
   6894      Graphite loop transformation infrastructure.
   6895 
   6896 '-floop-interchange'
   6897      Perform loop interchange transformations on loops.  Interchanging
   6898      two nested loops switches the inner and outer loops.  For example,
   6899      given a loop like:
   6900           DO J = 1, M
   6901             DO I = 1, N
   6902               A(J, I) = A(J, I) * C
   6903             ENDDO
   6904           ENDDO
   6905      loop interchange transforms the loop as if it were written:
   6906           DO I = 1, N
   6907             DO J = 1, M
   6908               A(J, I) = A(J, I) * C
   6909             ENDDO
   6910           ENDDO
   6911      which can be beneficial when 'N' is larger than the caches, because
   6912      in Fortran, the elements of an array are stored in memory
   6913      contiguously by column, and the original loop iterates over rows,
   6914      potentially creating at each access a cache miss.  This
   6915      optimization applies to all the languages supported by GCC and is
   6916      not limited to Fortran.  To use this code transformation, GCC has
   6917      to be configured with '--with-ppl' and '--with-cloog' to enable the
   6918      Graphite loop transformation infrastructure.
   6919 
   6920 '-floop-strip-mine'
   6921      Perform loop strip mining transformations on loops.  Strip mining
   6922      splits a loop into two nested loops.  The outer loop has strides
   6923      equal to the strip size and the inner loop has strides of the
   6924      original loop within a strip.  The strip length can be changed
   6925      using the 'loop-block-tile-size' parameter.  For example, given a
   6926      loop like:
   6927           DO I = 1, N
   6928             A(I) = A(I) + C
   6929           ENDDO
   6930      loop strip mining transforms the loop as if it were written:
   6931           DO II = 1, N, 51
   6932             DO I = II, min (II + 50, N)
   6933               A(I) = A(I) + C
   6934             ENDDO
   6935           ENDDO
   6936      This optimization applies to all the languages supported by GCC and
   6937      is not limited to Fortran.  To use this code transformation, GCC
   6938      has to be configured with '--with-ppl' and '--with-cloog' to enable
   6939      the Graphite loop transformation infrastructure.
   6940 
   6941 '-floop-block'
   6942      Perform loop blocking transformations on loops.  Blocking strip
   6943      mines each loop in the loop nest such that the memory accesses of
   6944      the element loops fit inside caches.  The strip length can be
   6945      changed using the 'loop-block-tile-size' parameter.  For example,
   6946      given a loop like:
   6947           DO I = 1, N
   6948             DO J = 1, M
   6949               A(J, I) = B(I) + C(J)
   6950             ENDDO
   6951           ENDDO
   6952      loop blocking transforms the loop as if it were written:
   6953           DO II = 1, N, 51
   6954             DO JJ = 1, M, 51
   6955               DO I = II, min (II + 50, N)
   6956                 DO J = JJ, min (JJ + 50, M)
   6957                   A(J, I) = B(I) + C(J)
   6958                 ENDDO
   6959               ENDDO
   6960             ENDDO
   6961           ENDDO
   6962      which can be beneficial when 'M' is larger than the caches, because
   6963      the innermost loop iterates over a smaller amount of data which can
   6964      be kept in the caches.  This optimization applies to all the
   6965      languages supported by GCC and is not limited to Fortran.  To use
   6966      this code transformation, GCC has to be configured with
   6967      '--with-ppl' and '--with-cloog' to enable the Graphite loop
   6968      transformation infrastructure.
   6969 
   6970 '-fgraphite-identity'
   6971      Enable the identity transformation for graphite.  For every SCoP we
   6972      generate the polyhedral representation and transform it back to
   6973      gimple.  Using '-fgraphite-identity' we can check the costs or
   6974      benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
   6975      minimal optimizations are also performed by the code generator
   6976      CLooG, like index splitting and dead code elimination in loops.
   6977 
   6978 '-floop-nest-optimize'
   6979      Enable the ISL based loop nest optimizer.  This is a generic loop
   6980      nest optimizer based on the Pluto optimization algorithms.  It
   6981      calculates a loop structure optimized for data-locality and
   6982      parallelism.  This option is experimental.
   6983 
   6984 '-floop-parallelize-all'
   6985      Use the Graphite data dependence analysis to identify loops that
   6986      can be parallelized.  Parallelize all the loops that can be
   6987      analyzed to not contain loop carried dependences without checking
   6988      that it is profitable to parallelize the loops.
   6989 
   6990 '-fcheck-data-deps'
   6991      Compare the results of several data dependence analyzers.  This
   6992      option is used for debugging the data dependence analyzers.
   6993 
   6994 '-ftree-loop-if-convert'
   6995      Attempt to transform conditional jumps in the innermost loops to
   6996      branch-less equivalents.  The intent is to remove control-flow from
   6997      the innermost loops in order to improve the ability of the
   6998      vectorization pass to handle these loops.  This is enabled by
   6999      default if vectorization is enabled.
   7000 
   7001 '-ftree-loop-if-convert-stores'
   7002      Attempt to also if-convert conditional jumps containing memory
   7003      writes.  This transformation can be unsafe for multi-threaded
   7004      programs as it transforms conditional memory writes into
   7005      unconditional memory writes.  For example,
   7006           for (i = 0; i < N; i++)
   7007             if (cond)
   7008               A[i] = expr;
   7009      is transformed to
   7010           for (i = 0; i < N; i++)
   7011             A[i] = cond ? expr : A[i];
   7012      potentially producing data races.
   7013 
   7014 '-ftree-loop-distribution'
   7015      Perform loop distribution.  This flag can improve cache performance
   7016      on big loop bodies and allow further loop optimizations, like
   7017      parallelization or vectorization, to take place.  For example, the
   7018      loop
   7019           DO I = 1, N
   7020             A(I) = B(I) + C
   7021             D(I) = E(I) * F
   7022           ENDDO
   7023      is transformed to
   7024           DO I = 1, N
   7025              A(I) = B(I) + C
   7026           ENDDO
   7027           DO I = 1, N
   7028              D(I) = E(I) * F
   7029           ENDDO
   7030 
   7031 '-ftree-loop-distribute-patterns'
   7032      Perform loop distribution of patterns that can be code generated
   7033      with calls to a library.  This flag is enabled by default at '-O3'.
   7034 
   7035      This pass distributes the initialization loops and generates a call
   7036      to memset zero.  For example, the loop
   7037           DO I = 1, N
   7038             A(I) = 0
   7039             B(I) = A(I) + I
   7040           ENDDO
   7041      is transformed to
   7042           DO I = 1, N
   7043              A(I) = 0
   7044           ENDDO
   7045           DO I = 1, N
   7046              B(I) = A(I) + I
   7047           ENDDO
   7048      and the initialization loop is transformed into a call to memset
   7049      zero.
   7050 
   7051 '-ftree-loop-im'
   7052      Perform loop invariant motion on trees.  This pass moves only
   7053      invariants that are hard to handle at RTL level (function calls,
   7054      operations that expand to nontrivial sequences of insns).  With
   7055      '-funswitch-loops' it also moves operands of conditions that are
   7056      invariant out of the loop, so that we can use just trivial
   7057      invariantness analysis in loop unswitching.  The pass also includes
   7058      store motion.
   7059 
   7060 '-ftree-loop-ivcanon'
   7061      Create a canonical counter for number of iterations in loops for
   7062      which determining number of iterations requires complicated
   7063      analysis.  Later optimizations then may determine the number
   7064      easily.  Useful especially in connection with unrolling.
   7065 
   7066 '-fivopts'
   7067      Perform induction variable optimizations (strength reduction,
   7068      induction variable merging and induction variable elimination) on
   7069      trees.
   7070 
   7071 '-ftree-parallelize-loops=n'
   7072      Parallelize loops, i.e., split their iteration space to run in n
   7073      threads.  This is only possible for loops whose iterations are
   7074      independent and can be arbitrarily reordered.  The optimization is
   7075      only profitable on multiprocessor machines, for loops that are
   7076      CPU-intensive, rather than constrained e.g. by memory bandwidth.
   7077      This option implies '-pthread', and thus is only supported on
   7078      targets that have support for '-pthread'.
   7079 
   7080 '-ftree-pta'
   7081      Perform function-local points-to analysis on trees.  This flag is
   7082      enabled by default at '-O' and higher.
   7083 
   7084 '-ftree-sra'
   7085      Perform scalar replacement of aggregates.  This pass replaces
   7086      structure references with scalars to prevent committing structures
   7087      to memory too early.  This flag is enabled by default at '-O' and
   7088      higher.
   7089 
   7090 '-ftree-copyrename'
   7091      Perform copy renaming on trees.  This pass attempts to rename
   7092      compiler temporaries to other variables at copy locations, usually
   7093      resulting in variable names which more closely resemble the
   7094      original variables.  This flag is enabled by default at '-O' and
   7095      higher.
   7096 
   7097 '-ftree-coalesce-inlined-vars'
   7098      Tell the copyrename pass (see '-ftree-copyrename') to attempt to
   7099      combine small user-defined variables too, but only if they were
   7100      inlined from other functions.  It is a more limited form of
   7101      '-ftree-coalesce-vars'.  This may harm debug information of such
   7102      inlined variables, but it will keep variables of the inlined-into
   7103      function apart from each other, such that they are more likely to
   7104      contain the expected values in a debugging session.  This was the
   7105      default in GCC versions older than 4.7.
   7106 
   7107 '-ftree-coalesce-vars'
   7108      Tell the copyrename pass (see '-ftree-copyrename') to attempt to
   7109      combine small user-defined variables too, instead of just compiler
   7110      temporaries.  This may severely limit the ability to debug an
   7111      optimized program compiled with '-fno-var-tracking-assignments'.
   7112      In the negated form, this flag prevents SSA coalescing of user
   7113      variables, including inlined ones.  This option is enabled by
   7114      default.
   7115 
   7116 '-ftree-ter'
   7117      Perform temporary expression replacement during the SSA->normal
   7118      phase.  Single use/single def temporaries are replaced at their use
   7119      location with their defining expression.  This results in
   7120      non-GIMPLE code, but gives the expanders much more complex trees to
   7121      work on resulting in better RTL generation.  This is enabled by
   7122      default at '-O' and higher.
   7123 
   7124 '-ftree-slsr'
   7125      Perform straight-line strength reduction on trees.  This recognizes
   7126      related expressions involving multiplications and replaces them by
   7127      less expensive calculations when possible.  This is enabled by
   7128      default at '-O' and higher.
   7129 
   7130 '-ftree-vectorize'
   7131      Perform loop vectorization on trees.  This flag is enabled by
   7132      default at '-O3'.
   7133 
   7134 '-ftree-slp-vectorize'
   7135      Perform basic block vectorization on trees.  This flag is enabled
   7136      by default at '-O3' and when '-ftree-vectorize' is enabled.
   7137 
   7138 '-ftree-vect-loop-version'
   7139      Perform loop versioning when doing loop vectorization on trees.
   7140      When a loop appears to be vectorizable except that data alignment
   7141      or data dependence cannot be determined at compile time, then
   7142      vectorized and non-vectorized versions of the loop are generated
   7143      along with run-time checks for alignment or dependence to control
   7144      which version is executed.  This option is enabled by default
   7145      except at level '-Os' where it is disabled.
   7146 
   7147 '-fvect-cost-model'
   7148      Enable cost model for vectorization.  This option is enabled by
   7149      default at '-O3'.
   7150 
   7151 '-ftree-vrp'
   7152      Perform Value Range Propagation on trees.  This is similar to the
   7153      constant propagation pass, but instead of values, ranges of values
   7154      are propagated.  This allows the optimizers to remove unnecessary
   7155      range checks like array bound checks and null pointer checks.  This
   7156      is enabled by default at '-O2' and higher.  Null pointer check
   7157      elimination is only done if '-fdelete-null-pointer-checks' is
   7158      enabled.
   7159 
   7160 '-ftracer'
   7161      Perform tail duplication to enlarge superblock size.  This
   7162      transformation simplifies the control flow of the function allowing
   7163      other optimizations to do a better job.
   7164 
   7165 '-funroll-loops'
   7166      Unroll loops whose number of iterations can be determined at
   7167      compile time or upon entry to the loop.  '-funroll-loops' implies
   7168      '-frerun-cse-after-loop'.  This option makes code larger, and may
   7169      or may not make it run faster.
   7170 
   7171 '-funroll-all-loops'
   7172      Unroll all loops, even if their number of iterations is uncertain
   7173      when the loop is entered.  This usually makes programs run more
   7174      slowly.  '-funroll-all-loops' implies the same options as
   7175      '-funroll-loops',
   7176 
   7177 '-fsplit-ivs-in-unroller'
   7178      Enables expression of values of induction variables in later
   7179      iterations of the unrolled loop using the value in the first
   7180      iteration.  This breaks long dependency chains, thus improving
   7181      efficiency of the scheduling passes.
   7182 
   7183      A combination of '-fweb' and CSE is often sufficient to obtain the
   7184      same effect.  However, that is not reliable in cases where the loop
   7185      body is more complicated than a single basic block.  It also does
   7186      not work at all on some architectures due to restrictions in the
   7187      CSE pass.
   7188 
   7189      This optimization is enabled by default.
   7190 
   7191 '-fvariable-expansion-in-unroller'
   7192      With this option, the compiler creates multiple copies of some
   7193      local variables when unrolling a loop, which can result in superior
   7194      code.
   7195 
   7196 '-fpartial-inlining'
   7197      Inline parts of functions.  This option has any effect only when
   7198      inlining itself is turned on by the '-finline-functions' or
   7199      '-finline-small-functions' options.
   7200 
   7201      Enabled at level '-O2'.
   7202 
   7203 '-fpredictive-commoning'
   7204      Perform predictive commoning optimization, i.e., reusing
   7205      computations (especially memory loads and stores) performed in
   7206      previous iterations of loops.
   7207 
   7208      This option is enabled at level '-O3'.
   7209 
   7210 '-fprefetch-loop-arrays'
   7211      If supported by the target machine, generate instructions to
   7212      prefetch memory to improve the performance of loops that access
   7213      large arrays.
   7214 
   7215      This option may generate better or worse code; results are highly
   7216      dependent on the structure of loops within the source code.
   7217 
   7218      Disabled at level '-Os'.
   7219 
   7220 '-fno-peephole'
   7221 '-fno-peephole2'
   7222      Disable any machine-specific peephole optimizations.  The
   7223      difference between '-fno-peephole' and '-fno-peephole2' is in how
   7224      they are implemented in the compiler; some targets use one, some
   7225      use the other, a few use both.
   7226 
   7227      '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
   7228      levels '-O2', '-O3', '-Os'.
   7229 
   7230 '-fno-guess-branch-probability'
   7231      Do not guess branch probabilities using heuristics.
   7232 
   7233      GCC uses heuristics to guess branch probabilities if they are not
   7234      provided by profiling feedback ('-fprofile-arcs').  These
   7235      heuristics are based on the control flow graph.  If some branch
   7236      probabilities are specified by '__builtin_expect', then the
   7237      heuristics are used to guess branch probabilities for the rest of
   7238      the control flow graph, taking the '__builtin_expect' info into
   7239      account.  The interactions between the heuristics and
   7240      '__builtin_expect' can be complex, and in some cases, it may be
   7241      useful to disable the heuristics so that the effects of
   7242      '__builtin_expect' are easier to understand.
   7243 
   7244      The default is '-fguess-branch-probability' at levels '-O', '-O2',
   7245      '-O3', '-Os'.
   7246 
   7247 '-freorder-blocks'
   7248      Reorder basic blocks in the compiled function in order to reduce
   7249      number of taken branches and improve code locality.
   7250 
   7251      Enabled at levels '-O2', '-O3'.
   7252 
   7253 '-freorder-blocks-and-partition'
   7254      In addition to reordering basic blocks in the compiled function, in
   7255      order to reduce number of taken branches, partitions hot and cold
   7256      basic blocks into separate sections of the assembly and .o files,
   7257      to improve paging and cache locality performance.
   7258 
   7259      This optimization is automatically turned off in the presence of
   7260      exception handling, for linkonce sections, for functions with a
   7261      user-defined section attribute and on any architecture that does
   7262      not support named sections.
   7263 
   7264 '-freorder-functions'
   7265      Reorder functions in the object file in order to improve code
   7266      locality.  This is implemented by using special subsections
   7267      '.text.hot' for most frequently executed functions and
   7268      '.text.unlikely' for unlikely executed functions.  Reordering is
   7269      done by the linker so object file format must support named
   7270      sections and linker must place them in a reasonable way.
   7271 
   7272      Also profile feedback must be available to make this option
   7273      effective.  See '-fprofile-arcs' for details.
   7274 
   7275      Enabled at levels '-O2', '-O3', '-Os'.
   7276 
   7277 '-fstrict-aliasing'
   7278      Allow the compiler to assume the strictest aliasing rules
   7279      applicable to the language being compiled.  For C (and C++), this
   7280      activates optimizations based on the type of expressions.  In
   7281      particular, an object of one type is assumed never to reside at the
   7282      same address as an object of a different type, unless the types are
   7283      almost the same.  For example, an 'unsigned int' can alias an
   7284      'int', but not a 'void*' or a 'double'.  A character type may alias
   7285      any other type.
   7286 
   7287      Pay special attention to code like this:
   7288           union a_union {
   7289             int i;
   7290             double d;
   7291           };
   7292 
   7293           int f() {
   7294             union a_union t;
   7295             t.d = 3.0;
   7296             return t.i;
   7297           }
   7298      The practice of reading from a different union member than the one
   7299      most recently written to (called "type-punning") is common.  Even
   7300      with '-fstrict-aliasing', type-punning is allowed, provided the
   7301      memory is accessed through the union type.  So, the code above
   7302      works as expected.  *Note Structures unions enumerations and
   7303      bit-fields implementation::.  However, this code might not:
   7304           int f() {
   7305             union a_union t;
   7306             int* ip;
   7307             t.d = 3.0;
   7308             ip = &t.i;
   7309             return *ip;
   7310           }
   7311 
   7312      Similarly, access by taking the address, casting the resulting
   7313      pointer and dereferencing the result has undefined behavior, even
   7314      if the cast uses a union type, e.g.:
   7315           int f() {
   7316             double d = 3.0;
   7317             return ((union a_union *) &d)->i;
   7318           }
   7319 
   7320      The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
   7321      '-Os'.
   7322 
   7323 '-fstrict-overflow'
   7324      Allow the compiler to assume strict signed overflow rules,
   7325      depending on the language being compiled.  For C (and C++) this
   7326      means that overflow when doing arithmetic with signed numbers is
   7327      undefined, which means that the compiler may assume that it does
   7328      not happen.  This permits various optimizations.  For example, the
   7329      compiler assumes that an expression like 'i + 10 > i' is always
   7330      true for signed 'i'.  This assumption is only valid if signed
   7331      overflow is undefined, as the expression is false if 'i + 10'
   7332      overflows when using twos complement arithmetic.  When this option
   7333      is in effect any attempt to determine whether an operation on
   7334      signed numbers overflows must be written carefully to not actually
   7335      involve overflow.
   7336 
   7337      This option also allows the compiler to assume strict pointer
   7338      semantics: given a pointer to an object, if adding an offset to
   7339      that pointer does not produce a pointer to the same object, the
   7340      addition is undefined.  This permits the compiler to conclude that
   7341      'p + u > p' is always true for a pointer 'p' and unsigned integer
   7342      'u'.  This assumption is only valid because pointer wraparound is
   7343      undefined, as the expression is false if 'p + u' overflows using
   7344      twos complement arithmetic.
   7345 
   7346      See also the '-fwrapv' option.  Using '-fwrapv' means that integer
   7347      signed overflow is fully defined: it wraps.  When '-fwrapv' is
   7348      used, there is no difference between '-fstrict-overflow' and
   7349      '-fno-strict-overflow' for integers.  With '-fwrapv' certain types
   7350      of overflow are permitted.  For example, if the compiler gets an
   7351      overflow when doing arithmetic on constants, the overflowed value
   7352      can still be used with '-fwrapv', but not otherwise.
   7353 
   7354      The '-fstrict-overflow' option is enabled at levels '-O2', '-O3',
   7355      '-Os'.
   7356 
   7357 '-falign-functions'
   7358 '-falign-functions=N'
   7359      Align the start of functions to the next power-of-two greater than
   7360      N, skipping up to N bytes.  For instance, '-falign-functions=32'
   7361      aligns functions to the next 32-byte boundary, but
   7362      '-falign-functions=24' aligns to the next 32-byte boundary only if
   7363      this can be done by skipping 23 bytes or less.
   7364 
   7365      '-fno-align-functions' and '-falign-functions=1' are equivalent and
   7366      mean that functions are not aligned.
   7367 
   7368      Some assemblers only support this flag when N is a power of two; in
   7369      that case, it is rounded up.
   7370 
   7371      If N is not specified or is zero, use a machine-dependent default.
   7372 
   7373      Enabled at levels '-O2', '-O3'.
   7374 
   7375 '-falign-labels'
   7376 '-falign-labels=N'
   7377      Align all branch targets to a power-of-two boundary, skipping up to
   7378      N bytes like '-falign-functions'.  This option can easily make code
   7379      slower, because it must insert dummy operations for when the branch
   7380      target is reached in the usual flow of the code.
   7381 
   7382      '-fno-align-labels' and '-falign-labels=1' are equivalent and mean
   7383      that labels are not aligned.
   7384 
   7385      If '-falign-loops' or '-falign-jumps' are applicable and are
   7386      greater than this value, then their values are used instead.
   7387 
   7388      If N is not specified or is zero, use a machine-dependent default
   7389      which is very likely to be '1', meaning no alignment.
   7390 
   7391      Enabled at levels '-O2', '-O3'.
   7392 
   7393 '-falign-loops'
   7394 '-falign-loops=N'
   7395      Align loops to a power-of-two boundary, skipping up to N bytes like
   7396      '-falign-functions'.  If the loops are executed many times, this
   7397      makes up for any execution of the dummy operations.
   7398 
   7399      '-fno-align-loops' and '-falign-loops=1' are equivalent and mean
   7400      that loops are not aligned.
   7401 
   7402      If N is not specified or is zero, use a machine-dependent default.
   7403 
   7404      Enabled at levels '-O2', '-O3'.
   7405 
   7406 '-falign-jumps'
   7407 '-falign-jumps=N'
   7408      Align branch targets to a power-of-two boundary, for branch targets
   7409      where the targets can only be reached by jumping, skipping up to N
   7410      bytes like '-falign-functions'.  In this case, no dummy operations
   7411      need be executed.
   7412 
   7413      '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean
   7414      that loops are not aligned.
   7415 
   7416      If N is not specified or is zero, use a machine-dependent default.
   7417 
   7418      Enabled at levels '-O2', '-O3'.
   7419 
   7420 '-funit-at-a-time'
   7421      This option is left for compatibility reasons.  '-funit-at-a-time'
   7422      has no effect, while '-fno-unit-at-a-time' implies
   7423      '-fno-toplevel-reorder' and '-fno-section-anchors'.
   7424 
   7425      Enabled by default.
   7426 
   7427 '-fno-toplevel-reorder'
   7428      Do not reorder top-level functions, variables, and 'asm'
   7429      statements.  Output them in the same order that they appear in the
   7430      input file.  When this option is used, unreferenced static
   7431      variables are not removed.  This option is intended to support
   7432      existing code that relies on a particular ordering.  For new code,
   7433      it is better to use attributes.
   7434 
   7435      Enabled at level '-O0'.  When disabled explicitly, it also implies
   7436      '-fno-section-anchors', which is otherwise enabled at '-O0' on some
   7437      targets.
   7438 
   7439 '-fweb'
   7440      Constructs webs as commonly used for register allocation purposes
   7441      and assign each web individual pseudo register.  This allows the
   7442      register allocation pass to operate on pseudos directly, but also
   7443      strengthens several other optimization passes, such as CSE, loop
   7444      optimizer and trivial dead code remover.  It can, however, make
   7445      debugging impossible, since variables no longer stay in a "home
   7446      register".
   7447 
   7448      Enabled by default with '-funroll-loops'.
   7449 
   7450 '-fwhole-program'
   7451      Assume that the current compilation unit represents the whole
   7452      program being compiled.  All public functions and variables with
   7453      the exception of 'main' and those merged by attribute
   7454      'externally_visible' become static functions and in effect are
   7455      optimized more aggressively by interprocedural optimizers.
   7456 
   7457      This option should not be used in combination with '-flto'.
   7458      Instead relying on a linker plugin should provide safer and more
   7459      precise information.
   7460 
   7461 '-flto[=N]'
   7462      This option runs the standard link-time optimizer.  When invoked
   7463      with source code, it generates GIMPLE (one of GCC's internal
   7464      representations) and writes it to special ELF sections in the
   7465      object file.  When the object files are linked together, all the
   7466      function bodies are read from these ELF sections and instantiated
   7467      as if they had been part of the same translation unit.
   7468 
   7469      To use the link-time optimizer, '-flto' needs to be specified at
   7470      compile time and during the final link.  For example:
   7471 
   7472           gcc -c -O2 -flto foo.c
   7473           gcc -c -O2 -flto bar.c
   7474           gcc -o myprog -flto -O2 foo.o bar.o
   7475 
   7476      The first two invocations to GCC save a bytecode representation of
   7477      GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
   7478      final invocation reads the GIMPLE bytecode from 'foo.o' and
   7479      'bar.o', merges the two files into a single internal image, and
   7480      compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
   7481      merged into a single image, this causes all the interprocedural
   7482      analyses and optimizations in GCC to work across the two files as
   7483      if they were a single one.  This means, for example, that the
   7484      inliner is able to inline functions in 'bar.o' into functions in
   7485      'foo.o' and vice-versa.
   7486 
   7487      Another (simpler) way to enable link-time optimization is:
   7488 
   7489           gcc -o myprog -flto -O2 foo.c bar.c
   7490 
   7491      The above generates bytecode for 'foo.c' and 'bar.c', merges them
   7492      together into a single GIMPLE representation and optimizes them as
   7493      usual to produce 'myprog'.
   7494 
   7495      The only important thing to keep in mind is that to enable
   7496      link-time optimizations the '-flto' flag needs to be passed to both
   7497      the compile and the link commands.
   7498 
   7499      To make whole program optimization effective, it is necessary to
   7500      make certain whole program assumptions.  The compiler needs to know
   7501      what functions and variables can be accessed by libraries and
   7502      runtime outside of the link-time optimized unit.  When supported by
   7503      the linker, the linker plugin (see '-fuse-linker-plugin') passes
   7504      information to the compiler about used and externally visible
   7505      symbols.  When the linker plugin is not available,
   7506      '-fwhole-program' should be used to allow the compiler to make
   7507      these assumptions, which leads to more aggressive optimization
   7508      decisions.
   7509 
   7510      Note that when a file is compiled with '-flto', the generated
   7511      object file is larger than a regular object file because it
   7512      contains GIMPLE bytecodes and the usual final code.  This means
   7513      that object files with LTO information can be linked as normal
   7514      object files; if '-flto' is not passed to the linker, no
   7515      interprocedural optimizations are applied.
   7516 
   7517      Additionally, the optimization flags used to compile individual
   7518      files are not necessarily related to those used at link time.  For
   7519      instance,
   7520 
   7521           gcc -c -O0 -flto foo.c
   7522           gcc -c -O0 -flto bar.c
   7523           gcc -o myprog -flto -O3 foo.o bar.o
   7524 
   7525      This produces individual object files with unoptimized assembler
   7526      code, but the resulting binary 'myprog' is optimized at '-O3'.  If,
   7527      instead, the final binary is generated without '-flto', then
   7528      'myprog' is not optimized.
   7529 
   7530      When producing the final binary with '-flto', GCC only applies
   7531      link-time optimizations to those files that contain bytecode.
   7532      Therefore, you can mix and match object files and libraries with
   7533      GIMPLE bytecodes and final object code.  GCC automatically selects
   7534      which files to optimize in LTO mode and which files to link without
   7535      further processing.
   7536 
   7537      There are some code generation flags preserved by GCC when
   7538      generating bytecodes, as they need to be used during the final link
   7539      stage.  Currently, the following options are saved into the GIMPLE
   7540      bytecode files: '-fPIC', '-fcommon' and all the '-m' target flags.
   7541 
   7542      At link time, these options are read in and reapplied.  Note that
   7543      the current implementation makes no attempt to recognize
   7544      conflicting values for these options.  If different files have
   7545      conflicting option values (e.g., one file is compiled with '-fPIC'
   7546      and another isn't), the compiler simply uses the last value read
   7547      from the bytecode files.  It is recommended, then, that you compile
   7548      all the files participating in the same link with the same options.
   7549 
   7550      If LTO encounters objects with C linkage declared with incompatible
   7551      types in separate translation units to be linked together
   7552      (undefined behavior according to ISO C99 6.2.7), a non-fatal
   7553      diagnostic may be issued.  The behavior is still undefined at run
   7554      time.
   7555 
   7556      Another feature of LTO is that it is possible to apply
   7557      interprocedural optimizations on files written in different
   7558      languages.  This requires support in the language front end.
   7559      Currently, the C, C++ and Fortran front ends are capable of
   7560      emitting GIMPLE bytecodes, so something like this should work:
   7561 
   7562           gcc -c -flto foo.c
   7563           g++ -c -flto bar.cc
   7564           gfortran -c -flto baz.f90
   7565           g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
   7566 
   7567      Notice that the final link is done with 'g++' to get the C++
   7568      runtime libraries and '-lgfortran' is added to get the Fortran
   7569      runtime libraries.  In general, when mixing languages in LTO mode,
   7570      you should use the same link command options as when mixing
   7571      languages in a regular (non-LTO) compilation; all you need to add
   7572      is '-flto' to all the compile and link commands.
   7573 
   7574      If object files containing GIMPLE bytecode are stored in a library
   7575      archive, say 'libfoo.a', it is possible to extract and use them in
   7576      an LTO link if you are using a linker with plugin support.  To
   7577      enable this feature, use the flag '-fuse-linker-plugin' at link
   7578      time:
   7579 
   7580           gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
   7581 
   7582      With the linker plugin enabled, the linker extracts the needed
   7583      GIMPLE files from 'libfoo.a' and passes them on to the running GCC
   7584      to make them part of the aggregated GIMPLE image to be optimized.
   7585 
   7586      If you are not using a linker with plugin support and/or do not
   7587      enable the linker plugin, then the objects inside 'libfoo.a' are
   7588      extracted and linked as usual, but they do not participate in the
   7589      LTO optimization process.
   7590 
   7591      Link-time optimizations do not require the presence of the whole
   7592      program to operate.  If the program does not require any symbols to
   7593      be exported, it is possible to combine '-flto' and
   7594      '-fwhole-program' to allow the interprocedural optimizers to use
   7595      more aggressive assumptions which may lead to improved optimization
   7596      opportunities.  Use of '-fwhole-program' is not needed when linker
   7597      plugin is active (see '-fuse-linker-plugin').
   7598 
   7599      The current implementation of LTO makes no attempt to generate
   7600      bytecode that is portable between different types of hosts.  The
   7601      bytecode files are versioned and there is a strict version check,
   7602      so bytecode files generated in one version of GCC will not work
   7603      with an older/newer version of GCC.
   7604 
   7605      Link-time optimization does not work well with generation of
   7606      debugging information.  Combining '-flto' with '-g' is currently
   7607      experimental and expected to produce wrong results.
   7608 
   7609      If you specify the optional N, the optimization and code generation
   7610      done at link time is executed in parallel using N parallel jobs by
   7611      utilizing an installed 'make' program.  The environment variable
   7612      'MAKE' may be used to override the program used.  The default value
   7613      for N is 1.
   7614 
   7615      You can also specify '-flto=jobserver' to use GNU make's job server
   7616      mode to determine the number of parallel jobs.  This is useful when
   7617      the Makefile calling GCC is already executing in parallel.  You
   7618      must prepend a '+' to the command recipe in the parent Makefile for
   7619      this to work.  This option likely only works if 'MAKE' is GNU make.
   7620 
   7621      This option is disabled by default.
   7622 
   7623 '-flto-partition=ALG'
   7624      Specify the partitioning algorithm used by the link-time optimizer.
   7625      The value is either '1to1' to specify a partitioning mirroring the
   7626      original source files or 'balanced' to specify partitioning into
   7627      equally sized chunks (whenever possible) or 'max' to create new
   7628      partition for every symbol where possible.  Specifying 'none' as an
   7629      algorithm disables partitioning and streaming completely.  The
   7630      default value is 'balanced'.  While '1to1' can be used as an
   7631      workaround for various code ordering issues, the 'max' partitioning
   7632      is intended for internal testing only.
   7633 
   7634 '-flto-compression-level=N'
   7635      This option specifies the level of compression used for
   7636      intermediate language written to LTO object files, and is only
   7637      meaningful in conjunction with LTO mode ('-flto').  Valid values
   7638      are 0 (no compression) to 9 (maximum compression).  Values outside
   7639      this range are clamped to either 0 or 9.  If the option is not
   7640      given, a default balanced compression setting is used.
   7641 
   7642 '-flto-report'
   7643      Prints a report with internal details on the workings of the
   7644      link-time optimizer.  The contents of this report vary from version
   7645      to version.  It is meant to be useful to GCC developers when
   7646      processing object files in LTO mode (via '-flto').
   7647 
   7648      Disabled by default.
   7649 
   7650 '-fuse-linker-plugin'
   7651      Enables the use of a linker plugin during link-time optimization.
   7652      This option relies on plugin support in the linker, which is
   7653      available in gold or in GNU ld 2.21 or newer.
   7654 
   7655      This option enables the extraction of object files with GIMPLE
   7656      bytecode out of library archives.  This improves the quality of
   7657      optimization by exposing more code to the link-time optimizer.
   7658      This information specifies what symbols can be accessed externally
   7659      (by non-LTO object or during dynamic linking).  Resulting code
   7660      quality improvements on binaries (and shared libraries that use
   7661      hidden visibility) are similar to '-fwhole-program'.  See '-flto'
   7662      for a description of the effect of this flag and how to use it.
   7663 
   7664      This option is enabled by default when LTO support in GCC is
   7665      enabled and GCC was configured for use with a linker supporting
   7666      plugins (GNU ld 2.21 or newer or gold).
   7667 
   7668 '-ffat-lto-objects'
   7669      Fat LTO objects are object files that contain both the intermediate
   7670      language and the object code.  This makes them usable for both LTO
   7671      linking and normal linking.  This option is effective only when
   7672      compiling with '-flto' and is ignored at link time.
   7673 
   7674      '-fno-fat-lto-objects' improves compilation time over plain LTO,
   7675      but requires the complete toolchain to be aware of LTO. It requires
   7676      a linker with linker plugin support for basic functionality.
   7677      Additionally, 'nm', 'ar' and 'ranlib' need to support linker
   7678      plugins to allow a full-featured build environment (capable of
   7679      building static libraries etc).  GCC provides the 'gcc-ar',
   7680      'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
   7681      tools.  With non fat LTO makefiles need to be modified to use them.
   7682 
   7683      The default is '-ffat-lto-objects' but this default is intended to
   7684      change in future releases when linker plugin enabled environments
   7685      become more common.
   7686 
   7687 '-fcompare-elim'
   7688      After register allocation and post-register allocation instruction
   7689      splitting, identify arithmetic instructions that compute processor
   7690      flags similar to a comparison operation based on that arithmetic.
   7691      If possible, eliminate the explicit comparison operation.
   7692 
   7693      This pass only applies to certain targets that cannot explicitly
   7694      represent the comparison operation before register allocation is
   7695      complete.
   7696 
   7697      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   7698 
   7699 '-fuse-ld=bfd'
   7700      Use the 'bfd' linker instead of the default linker.
   7701 
   7702 '-fuse-ld=gold'
   7703      Use the 'gold' linker instead of the default linker.
   7704 
   7705 '-fcprop-registers'
   7706      After register allocation and post-register allocation instruction
   7707      splitting, perform a copy-propagation pass to try to reduce
   7708      scheduling dependencies and occasionally eliminate the copy.
   7709 
   7710      Enabled at levels '-O', '-O2', '-O3', '-Os'.
   7711 
   7712 '-fprofile-correction'
   7713      Profiles collected using an instrumented binary for multi-threaded
   7714      programs may be inconsistent due to missed counter updates.  When
   7715      this option is specified, GCC uses heuristics to correct or smooth
   7716      out such inconsistencies.  By default, GCC emits an error message
   7717      when an inconsistent profile is detected.
   7718 
   7719 '-fprofile-dir=PATH'
   7720 
   7721      Set the directory to search for the profile data files in to PATH.
   7722      This option affects only the profile data generated by
   7723      '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
   7724      by '-fprofile-use' and '-fbranch-probabilities' and its related
   7725      options.  Both absolute and relative paths can be used.  By
   7726      default, GCC uses the current directory as PATH, thus the profile
   7727      data file appears in the same directory as the object file.
   7728 
   7729 '-fprofile-generate'
   7730 '-fprofile-generate=PATH'
   7731 
   7732      Enable options usually used for instrumenting application to
   7733      produce profile useful for later recompilation with profile
   7734      feedback based optimization.  You must use '-fprofile-generate'
   7735      both when compiling and when linking your program.
   7736 
   7737      The following options are enabled: '-fprofile-arcs',
   7738      '-fprofile-values', '-fvpt'.
   7739 
   7740      If PATH is specified, GCC looks at the PATH to find the profile
   7741      feedback data files.  See '-fprofile-dir'.
   7742 
   7743 '-fprofile-use'
   7744 '-fprofile-use=PATH'
   7745      Enable profile feedback directed optimizations, and optimizations
   7746      generally profitable only with profile feedback available.
   7747 
   7748      The following options are enabled: '-fbranch-probabilities',
   7749      '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer',
   7750      '-ftree-vectorize', 'ftree-loop-distribute-patterns'
   7751 
   7752      By default, GCC emits an error message if the feedback profiles do
   7753      not match the source code.  This error can be turned into a warning
   7754      by using '-Wcoverage-mismatch'.  Note this may result in poorly
   7755      optimized code.
   7756 
   7757      If PATH is specified, GCC looks at the PATH to find the profile
   7758      feedback data files.  See '-fprofile-dir'.
   7759 
   7760  The following options control compiler behavior regarding
   7761 floating-point arithmetic.  These options trade off between speed and
   7762 correctness.  All must be specifically enabled.
   7763 
   7764 '-ffloat-store'
   7765      Do not store floating-point variables in registers, and inhibit
   7766      other options that might change whether a floating-point value is
   7767      taken from a register or memory.
   7768 
   7769      This option prevents undesirable excess precision on machines such
   7770      as the 68000 where the floating registers (of the 68881) keep more
   7771      precision than a 'double' is supposed to have.  Similarly for the
   7772      x86 architecture.  For most programs, the excess precision does
   7773      only good, but a few programs rely on the precise definition of
   7774      IEEE floating point.  Use '-ffloat-store' for such programs, after
   7775      modifying them to store all pertinent intermediate computations
   7776      into variables.
   7777 
   7778 '-fexcess-precision=STYLE'
   7779      This option allows further control over excess precision on
   7780      machines where floating-point registers have more precision than
   7781      the IEEE 'float' and 'double' types and the processor does not
   7782      support operations rounding to those types.  By default,
   7783      '-fexcess-precision=fast' is in effect; this means that operations
   7784      are carried out in the precision of the registers and that it is
   7785      unpredictable when rounding to the types specified in the source
   7786      code takes place.  When compiling C, if
   7787      '-fexcess-precision=standard' is specified then excess precision
   7788      follows the rules specified in ISO C99; in particular, both casts
   7789      and assignments cause values to be rounded to their semantic types
   7790      (whereas '-ffloat-store' only affects assignments).  This option is
   7791      enabled by default for C if a strict conformance option such as
   7792      '-std=c99' is used.
   7793 
   7794      '-fexcess-precision=standard' is not implemented for languages
   7795      other than C, and has no effect if '-funsafe-math-optimizations' or
   7796      '-ffast-math' is specified.  On the x86, it also has no effect if
   7797      '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former
   7798      case, IEEE semantics apply without excess precision, and in the
   7799      latter, rounding is unpredictable.
   7800 
   7801 '-ffast-math'
   7802      Sets '-fno-math-errno', '-funsafe-math-optimizations',
   7803      '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans'
   7804      and '-fcx-limited-range'.
   7805 
   7806      This option causes the preprocessor macro '__FAST_MATH__' to be
   7807      defined.
   7808 
   7809      This option is not turned on by any '-O' option besides '-Ofast'
   7810      since it can result in incorrect output for programs that depend on
   7811      an exact implementation of IEEE or ISO rules/specifications for
   7812      math functions.  It may, however, yield faster code for programs
   7813      that do not require the guarantees of these specifications.
   7814 
   7815 '-fno-math-errno'
   7816      Do not set 'errno' after calling math functions that are executed
   7817      with a single instruction, e.g., 'sqrt'.  A program that relies on
   7818      IEEE exceptions for math error handling may want to use this flag
   7819      for speed while maintaining IEEE arithmetic compatibility.
   7820 
   7821      This option is not turned on by any '-O' option since it can result
   7822      in incorrect output for programs that depend on an exact
   7823      implementation of IEEE or ISO rules/specifications for math
   7824      functions.  It may, however, yield faster code for programs that do
   7825      not require the guarantees of these specifications.
   7826 
   7827      The default is '-fmath-errno'.
   7828 
   7829      On Darwin systems, the math library never sets 'errno'.  There is
   7830      therefore no reason for the compiler to consider the possibility
   7831      that it might, and '-fno-math-errno' is the default.
   7832 
   7833 '-funsafe-math-optimizations'
   7834 
   7835      Allow optimizations for floating-point arithmetic that (a) assume
   7836      that arguments and results are valid and (b) may violate IEEE or
   7837      ANSI standards.  When used at link-time, it may include libraries
   7838      or startup files that change the default FPU control word or other
   7839      similar optimizations.
   7840 
   7841      This option is not turned on by any '-O' option since it can result
   7842      in incorrect output for programs that depend on an exact
   7843      implementation of IEEE or ISO rules/specifications for math
   7844      functions.  It may, however, yield faster code for programs that do
   7845      not require the guarantees of these specifications.  Enables
   7846      '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
   7847      '-freciprocal-math'.
   7848 
   7849      The default is '-fno-unsafe-math-optimizations'.
   7850 
   7851 '-fassociative-math'
   7852 
   7853      Allow re-association of operands in series of floating-point
   7854      operations.  This violates the ISO C and C++ language standard by
   7855      possibly changing computation result.  NOTE: re-ordering may change
   7856      the sign of zero as well as ignore NaNs and inhibit or create
   7857      underflow or overflow (and thus cannot be used on code that relies
   7858      on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
   7859      floating-point comparisons and thus may not be used when ordered
   7860      comparisons are required.  This option requires that both
   7861      '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
   7862      Moreover, it doesn't make much sense with '-frounding-math'.  For
   7863      Fortran the option is automatically enabled when both
   7864      '-fno-signed-zeros' and '-fno-trapping-math' are in effect.
   7865 
   7866      The default is '-fno-associative-math'.
   7867 
   7868 '-freciprocal-math'
   7869 
   7870      Allow the reciprocal of a value to be used instead of dividing by
   7871      the value if this enables optimizations.  For example 'x / y' can
   7872      be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
   7873      to common subexpression elimination.  Note that this loses
   7874      precision and increases the number of flops operating on the value.
   7875 
   7876      The default is '-fno-reciprocal-math'.
   7877 
   7878 '-ffinite-math-only'
   7879      Allow optimizations for floating-point arithmetic that assume that
   7880      arguments and results are not NaNs or +-Infs.
   7881 
   7882      This option is not turned on by any '-O' option since it can result
   7883      in incorrect output for programs that depend on an exact
   7884      implementation of IEEE or ISO rules/specifications for math
   7885      functions.  It may, however, yield faster code for programs that do
   7886      not require the guarantees of these specifications.
   7887 
   7888      The default is '-fno-finite-math-only'.
   7889 
   7890 '-fno-signed-zeros'
   7891      Allow optimizations for floating-point arithmetic that ignore the
   7892      signedness of zero.  IEEE arithmetic specifies the behavior of
   7893      distinct +0.0 and -0.0 values, which then prohibits simplification
   7894      of expressions such as x+0.0 or 0.0*x (even with
   7895      '-ffinite-math-only').  This option implies that the sign of a zero
   7896      result isn't significant.
   7897 
   7898      The default is '-fsigned-zeros'.
   7899 
   7900 '-fno-trapping-math'
   7901      Compile code assuming that floating-point operations cannot
   7902      generate user-visible traps.  These traps include division by zero,
   7903      overflow, underflow, inexact result and invalid operation.  This
   7904      option requires that '-fno-signaling-nans' be in effect.  Setting
   7905      this option may allow faster code if one relies on "non-stop" IEEE
   7906      arithmetic, for example.
   7907 
   7908      This option should never be turned on by any '-O' option since it
   7909      can result in incorrect output for programs that depend on an exact
   7910      implementation of IEEE or ISO rules/specifications for math
   7911      functions.
   7912 
   7913      The default is '-ftrapping-math'.
   7914 
   7915 '-frounding-math'
   7916      Disable transformations and optimizations that assume default
   7917      floating-point rounding behavior.  This is round-to-zero for all
   7918      floating point to integer conversions, and round-to-nearest for all
   7919      other arithmetic truncations.  This option should be specified for
   7920      programs that change the FP rounding mode dynamically, or that may
   7921      be executed with a non-default rounding mode.  This option disables
   7922      constant folding of floating-point expressions at compile time
   7923      (which may be affected by rounding mode) and arithmetic
   7924      transformations that are unsafe in the presence of sign-dependent
   7925      rounding modes.
   7926 
   7927      The default is '-fno-rounding-math'.
   7928 
   7929      This option is experimental and does not currently guarantee to
   7930      disable all GCC optimizations that are affected by rounding mode.
   7931      Future versions of GCC may provide finer control of this setting
   7932      using C99's 'FENV_ACCESS' pragma.  This command-line option will be
   7933      used to specify the default state for 'FENV_ACCESS'.
   7934 
   7935 '-fsignaling-nans'
   7936      Compile code assuming that IEEE signaling NaNs may generate
   7937      user-visible traps during floating-point operations.  Setting this
   7938      option disables optimizations that may change the number of
   7939      exceptions visible with signaling NaNs.  This option implies
   7940      '-ftrapping-math'.
   7941 
   7942      This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
   7943      defined.
   7944 
   7945      The default is '-fno-signaling-nans'.
   7946 
   7947      This option is experimental and does not currently guarantee to
   7948      disable all GCC optimizations that affect signaling NaN behavior.
   7949 
   7950 '-fsingle-precision-constant'
   7951      Treat floating-point constants as single precision instead of
   7952      implicitly converting them to double-precision constants.
   7953 
   7954 '-fcx-limited-range'
   7955      When enabled, this option states that a range reduction step is not
   7956      needed when performing complex division.  Also, there is no
   7957      checking whether the result of a complex multiplication or division
   7958      is 'NaN + I*NaN', with an attempt to rescue the situation in that
   7959      case.  The default is '-fno-cx-limited-range', but is enabled by
   7960      '-ffast-math'.
   7961 
   7962      This option controls the default setting of the ISO C99
   7963      'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
   7964      languages.
   7965 
   7966 '-fcx-fortran-rules'
   7967      Complex multiplication and division follow Fortran rules.  Range
   7968      reduction is done as part of complex division, but there is no
   7969      checking whether the result of a complex multiplication or division
   7970      is 'NaN + I*NaN', with an attempt to rescue the situation in that
   7971      case.
   7972 
   7973      The default is '-fno-cx-fortran-rules'.
   7974 
   7975  The following options control optimizations that may improve
   7976 performance, but are not enabled by any '-O' options.  This section
   7977 includes experimental options that may produce broken code.
   7978 
   7979 '-fbranch-probabilities'
   7980      After running a program compiled with '-fprofile-arcs' (*note
   7981      Options for Debugging Your Program or 'gcc': Debugging Options.),
   7982      you can compile it a second time using '-fbranch-probabilities', to
   7983      improve optimizations based on the number of times each branch was
   7984      taken.  When a program compiled with '-fprofile-arcs' exits, it
   7985      saves arc execution counts to a file called 'SOURCENAME.gcda' for
   7986      each source file.  The information in this data file is very
   7987      dependent on the structure of the generated code, so you must use
   7988      the same source code and the same optimization options for both
   7989      compilations.
   7990 
   7991      With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
   7992      each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
   7993      optimization.  Currently, they are only used in one place: in
   7994      'reorg.c', instead of guessing which path a branch is most likely
   7995      to take, the 'REG_BR_PROB' values are used to exactly determine
   7996      which path is taken more often.
   7997 
   7998 '-fprofile-values'
   7999      If combined with '-fprofile-arcs', it adds code so that some data
   8000      about values of expressions in the program is gathered.
   8001 
   8002      With '-fbranch-probabilities', it reads back the data gathered from
   8003      profiling values of expressions for usage in optimizations.
   8004 
   8005      Enabled with '-fprofile-generate' and '-fprofile-use'.
   8006 
   8007 '-fvpt'
   8008      If combined with '-fprofile-arcs', this option instructs the
   8009      compiler to add code to gather information about values of
   8010      expressions.
   8011 
   8012      With '-fbranch-probabilities', it reads back the data gathered and
   8013      actually performs the optimizations based on them.  Currently the
   8014      optimizations include specialization of division operations using
   8015      the knowledge about the value of the denominator.
   8016 
   8017 '-frename-registers'
   8018      Attempt to avoid false dependencies in scheduled code by making use
   8019      of registers left over after register allocation.  This
   8020      optimization most benefits processors with lots of registers.
   8021      Depending on the debug information format adopted by the target,
   8022      however, it can make debugging impossible, since variables no
   8023      longer stay in a "home register".
   8024 
   8025      Enabled by default with '-funroll-loops' and '-fpeel-loops'.
   8026 
   8027 '-ftracer'
   8028      Perform tail duplication to enlarge superblock size.  This
   8029      transformation simplifies the control flow of the function allowing
   8030      other optimizations to do a better job.
   8031 
   8032      Enabled with '-fprofile-use'.
   8033 
   8034 '-funroll-loops'
   8035      Unroll loops whose number of iterations can be determined at
   8036      compile time or upon entry to the loop.  '-funroll-loops' implies
   8037      '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
   8038      also turns on complete loop peeling (i.e. complete removal of loops
   8039      with a small constant number of iterations).  This option makes
   8040      code larger, and may or may not make it run faster.
   8041 
   8042      Enabled with '-fprofile-use'.
   8043 
   8044 '-funroll-all-loops'
   8045      Unroll all loops, even if their number of iterations is uncertain
   8046      when the loop is entered.  This usually makes programs run more
   8047      slowly.  '-funroll-all-loops' implies the same options as
   8048      '-funroll-loops'.
   8049 
   8050 '-fpeel-loops'
   8051      Peels loops for which there is enough information that they do not
   8052      roll much (from profile feedback).  It also turns on complete loop
   8053      peeling (i.e. complete removal of loops with small constant number
   8054      of iterations).
   8055 
   8056      Enabled with '-fprofile-use'.
   8057 
   8058 '-fmove-loop-invariants'
   8059      Enables the loop invariant motion pass in the RTL loop optimizer.
   8060      Enabled at level '-O1'
   8061 
   8062 '-funswitch-loops'
   8063      Move branches with loop invariant conditions out of the loop, with
   8064      duplicates of the loop on both branches (modified according to
   8065      result of the condition).
   8066 
   8067 '-ffunction-sections'
   8068 '-fdata-sections'
   8069      Place each function or data item into its own section in the output
   8070      file if the target supports arbitrary sections.  The name of the
   8071      function or the name of the data item determines the section's name
   8072      in the output file.
   8073 
   8074      Use these options on systems where the linker can perform
   8075      optimizations to improve locality of reference in the instruction
   8076      space.  Most systems using the ELF object format and SPARC
   8077      processors running Solaris 2 have linkers with such optimizations.
   8078      AIX may have these optimizations in the future.
   8079 
   8080      Only use these options when there are significant benefits from
   8081      doing so.  When you specify these options, the assembler and linker
   8082      create larger object and executable files and are also slower.  You
   8083      cannot use 'gprof' on all systems if you specify this option, and
   8084      you may have problems with debugging if you specify both this
   8085      option and '-g'.
   8086 
   8087 '-fbranch-target-load-optimize'
   8088      Perform branch target register load optimization before prologue /
   8089      epilogue threading.  The use of target registers can typically be
   8090      exposed only during reload, thus hoisting loads out of loops and
   8091      doing inter-block scheduling needs a separate optimization pass.
   8092 
   8093 '-fbranch-target-load-optimize2'
   8094      Perform branch target register load optimization after prologue /
   8095      epilogue threading.
   8096 
   8097 '-fbtr-bb-exclusive'
   8098      When performing branch target register load optimization, don't
   8099      reuse branch target registers within any basic block.
   8100 
   8101 '-fstack-protector'
   8102      Emit extra code to check for buffer overflows, such as stack
   8103      smashing attacks.  This is done by adding a guard variable to
   8104      functions with vulnerable objects.  This includes functions that
   8105      call 'alloca', and functions with buffers larger than 8 bytes.  The
   8106      guards are initialized when a function is entered and then checked
   8107      when the function exits.  If a guard check fails, an error message
   8108      is printed and the program exits.
   8109 
   8110 '-fstack-protector-all'
   8111      Like '-fstack-protector' except that all functions are protected.
   8112 
   8113 '-fsection-anchors'
   8114      Try to reduce the number of symbolic address calculations by using
   8115      shared "anchor" symbols to address nearby objects.  This
   8116      transformation can help to reduce the number of GOT entries and GOT
   8117      accesses on some targets.
   8118 
   8119      For example, the implementation of the following function 'foo':
   8120 
   8121           static int a, b, c;
   8122           int foo (void) { return a + b + c; }
   8123 
   8124      usually calculates the addresses of all three variables, but if you
   8125      compile it with '-fsection-anchors', it accesses the variables from
   8126      a common anchor point instead.  The effect is similar to the
   8127      following pseudocode (which isn't valid C):
   8128 
   8129           int foo (void)
   8130           {
   8131             register int *xr = &x;
   8132             return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
   8133           }
   8134 
   8135      Not all targets support this option.
   8136 
   8137 '--param NAME=VALUE'
   8138      In some places, GCC uses various constants to control the amount of
   8139      optimization that is done.  For example, GCC does not inline
   8140      functions that contain more than a certain number of instructions.
   8141      You can control some of these constants on the command line using
   8142      the '--param' option.
   8143 
   8144      The names of specific parameters, and the meaning of the values,
   8145      are tied to the internals of the compiler, and are subject to
   8146      change without notice in future releases.
   8147 
   8148      In each case, the VALUE is an integer.  The allowable choices for
   8149      NAME are:
   8150 
   8151      'predictable-branch-outcome'
   8152           When branch is predicted to be taken with probability lower
   8153           than this threshold (in percent), then it is considered well
   8154           predictable.  The default is 10.
   8155 
   8156      'max-crossjump-edges'
   8157           The maximum number of incoming edges to consider for
   8158           cross-jumping.  The algorithm used by '-fcrossjumping' is
   8159           O(N^2) in the number of edges incoming to each block.
   8160           Increasing values mean more aggressive optimization, making
   8161           the compilation time increase with probably small improvement
   8162           in executable size.
   8163 
   8164      'min-crossjump-insns'
   8165           The minimum number of instructions that must be matched at the
   8166           end of two blocks before cross-jumping is performed on them.
   8167           This value is ignored in the case where all instructions in
   8168           the block being cross-jumped from are matched.  The default
   8169           value is 5.
   8170 
   8171      'max-grow-copy-bb-insns'
   8172           The maximum code size expansion factor when copying basic
   8173           blocks instead of jumping.  The expansion is relative to a
   8174           jump instruction.  The default value is 8.
   8175 
   8176      'max-goto-duplication-insns'
   8177           The maximum number of instructions to duplicate to a block
   8178           that jumps to a computed goto.  To avoid O(N^2) behavior in a
   8179           number of passes, GCC factors computed gotos early in the
   8180           compilation process, and unfactors them as late as possible.
   8181           Only computed jumps at the end of a basic blocks with no more
   8182           than max-goto-duplication-insns are unfactored.  The default
   8183           value is 8.
   8184 
   8185      'max-delay-slot-insn-search'
   8186           The maximum number of instructions to consider when looking
   8187           for an instruction to fill a delay slot.  If more than this
   8188           arbitrary number of instructions are searched, the time
   8189           savings from filling the delay slot are minimal, so stop
   8190           searching.  Increasing values mean more aggressive
   8191           optimization, making the compilation time increase with
   8192           probably small improvement in execution time.
   8193 
   8194      'max-delay-slot-live-search'
   8195           When trying to fill delay slots, the maximum number of
   8196           instructions to consider when searching for a block with valid
   8197           live register information.  Increasing this arbitrarily chosen
   8198           value means more aggressive optimization, increasing the
   8199           compilation time.  This parameter should be removed when the
   8200           delay slot code is rewritten to maintain the control-flow
   8201           graph.
   8202 
   8203      'max-gcse-memory'
   8204           The approximate maximum amount of memory that can be allocated
   8205           in order to perform the global common subexpression
   8206           elimination optimization.  If more memory than specified is
   8207           required, the optimization is not done.
   8208 
   8209      'max-gcse-insertion-ratio'
   8210           If the ratio of expression insertions to deletions is larger
   8211           than this value for any expression, then RTL PRE inserts or
   8212           removes the expression and thus leaves partially redundant
   8213           computations in the instruction stream.  The default value is
   8214           20.
   8215 
   8216      'max-pending-list-length'
   8217           The maximum number of pending dependencies scheduling allows
   8218           before flushing the current state and starting over.  Large
   8219           functions with few branches or calls can create excessively
   8220           large lists which needlessly consume memory and resources.
   8221 
   8222      'max-modulo-backtrack-attempts'
   8223           The maximum number of backtrack attempts the scheduler should
   8224           make when modulo scheduling a loop.  Larger values can
   8225           exponentially increase compilation time.
   8226 
   8227      'max-inline-insns-single'
   8228           Several parameters control the tree inliner used in GCC.  This
   8229           number sets the maximum number of instructions (counted in
   8230           GCC's internal representation) in a single function that the
   8231           tree inliner considers for inlining.  This only affects
   8232           functions declared inline and methods implemented in a class
   8233           declaration (C++).  The default value is 400.
   8234 
   8235      'max-inline-insns-auto'
   8236           When you use '-finline-functions' (included in '-O3'), a lot
   8237           of functions that would otherwise not be considered for
   8238           inlining by the compiler are investigated.  To those
   8239           functions, a different (more restrictive) limit compared to
   8240           functions declared inline can be applied.  The default value
   8241           is 40.
   8242 
   8243      'inline-min-speedup'
   8244           When estimated performance improvement of caller + callee
   8245           runtime exceeds this threshold (in precent), the function can
   8246           be inlined regardless the limit on '--param
   8247           max-inline-insns-single' and '--param max-inline-insns-auto'.
   8248 
   8249      'large-function-insns'
   8250           The limit specifying really large functions.  For functions
   8251           larger than this limit after inlining, inlining is constrained
   8252           by '--param large-function-growth'.  This parameter is useful
   8253           primarily to avoid extreme compilation time caused by
   8254           non-linear algorithms used by the back end.  The default value
   8255           is 2700.
   8256 
   8257      'large-function-growth'
   8258           Specifies maximal growth of large function caused by inlining
   8259           in percents.  The default value is 100 which limits large
   8260           function growth to 2.0 times the original size.
   8261 
   8262      'large-unit-insns'
   8263           The limit specifying large translation unit.  Growth caused by
   8264           inlining of units larger than this limit is limited by
   8265           '--param inline-unit-growth'.  For small units this might be
   8266           too tight.  For example, consider a unit consisting of
   8267           function A that is inline and B that just calls A three times.
   8268           If B is small relative to A, the growth of unit is 300\% and
   8269           yet such inlining is very sane.  For very large units
   8270           consisting of small inlineable functions, however, the overall
   8271           unit growth limit is needed to avoid exponential explosion of
   8272           code size.  Thus for smaller units, the size is increased to
   8273           '--param large-unit-insns' before applying '--param
   8274           inline-unit-growth'.  The default is 10000.
   8275 
   8276      'inline-unit-growth'
   8277           Specifies maximal overall growth of the compilation unit
   8278           caused by inlining.  The default value is 30 which limits unit
   8279           growth to 1.3 times the original size.
   8280 
   8281      'ipcp-unit-growth'
   8282           Specifies maximal overall growth of the compilation unit
   8283           caused by interprocedural constant propagation.  The default
   8284           value is 10 which limits unit growth to 1.1 times the original
   8285           size.
   8286 
   8287      'large-stack-frame'
   8288           The limit specifying large stack frames.  While inlining the
   8289           algorithm is trying to not grow past this limit too much.  The
   8290           default value is 256 bytes.
   8291 
   8292      'large-stack-frame-growth'
   8293           Specifies maximal growth of large stack frames caused by
   8294           inlining in percents.  The default value is 1000 which limits
   8295           large stack frame growth to 11 times the original size.
   8296 
   8297      'max-inline-insns-recursive'
   8298      'max-inline-insns-recursive-auto'
   8299           Specifies the maximum number of instructions an out-of-line
   8300           copy of a self-recursive inline function can grow into by
   8301           performing recursive inlining.
   8302 
   8303           For functions declared inline, '--param
   8304           max-inline-insns-recursive' is taken into account.  For
   8305           functions not declared inline, recursive inlining happens only
   8306           when '-finline-functions' (included in '-O3') is enabled and
   8307           '--param max-inline-insns-recursive-auto' is used.  The
   8308           default value is 450.
   8309 
   8310      'max-inline-recursive-depth'
   8311      'max-inline-recursive-depth-auto'
   8312           Specifies the maximum recursion depth used for recursive
   8313           inlining.
   8314 
   8315           For functions declared inline, '--param
   8316           max-inline-recursive-depth' is taken into account.  For
   8317           functions not declared inline, recursive inlining happens only
   8318           when '-finline-functions' (included in '-O3') is enabled and
   8319           '--param max-inline-recursive-depth-auto' is used.  The
   8320           default value is 8.
   8321 
   8322      'min-inline-recursive-probability'
   8323           Recursive inlining is profitable only for function having deep
   8324           recursion in average and can hurt for function having little
   8325           recursion depth by increasing the prologue size or complexity
   8326           of function body to other optimizers.
   8327 
   8328           When profile feedback is available (see '-fprofile-generate')
   8329           the actual recursion depth can be guessed from probability
   8330           that function recurses via a given call expression.  This
   8331           parameter limits inlining only to call expressions whose
   8332           probability exceeds the given threshold (in percents).  The
   8333           default value is 10.
   8334 
   8335      'early-inlining-insns'
   8336           Specify growth that the early inliner can make.  In effect it
   8337           increases the amount of inlining for code having a large
   8338           abstraction penalty.  The default value is 10.
   8339 
   8340      'max-early-inliner-iterations'
   8341      'max-early-inliner-iterations'
   8342           Limit of iterations of the early inliner.  This basically
   8343           bounds the number of nested indirect calls the early inliner
   8344           can resolve.  Deeper chains are still handled by late
   8345           inlining.
   8346 
   8347      'comdat-sharing-probability'
   8348      'comdat-sharing-probability'
   8349           Probability (in percent) that C++ inline function with comdat
   8350           visibility are shared across multiple compilation units.  The
   8351           default value is 20.
   8352 
   8353      'min-vect-loop-bound'
   8354           The minimum number of iterations under which loops are not
   8355           vectorized when '-ftree-vectorize' is used.  The number of
   8356           iterations after vectorization needs to be greater than the
   8357           value specified by this option to allow vectorization.  The
   8358           default value is 0.
   8359 
   8360      'gcse-cost-distance-ratio'
   8361           Scaling factor in calculation of maximum distance an
   8362           expression can be moved by GCSE optimizations.  This is
   8363           currently supported only in the code hoisting pass.  The
   8364           bigger the ratio, the more aggressive code hoisting is with
   8365           simple expressions, i.e., the expressions that have cost less
   8366           than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
   8367           of simple expressions.  The default value is 10.
   8368 
   8369      'gcse-unrestricted-cost'
   8370           Cost, roughly measured as the cost of a single typical machine
   8371           instruction, at which GCSE optimizations do not constrain the
   8372           distance an expression can travel.  This is currently
   8373           supported only in the code hoisting pass.  The lesser the
   8374           cost, the more aggressive code hoisting is.  Specifying 0
   8375           allows all expressions to travel unrestricted distances.  The
   8376           default value is 3.
   8377 
   8378      'max-hoist-depth'
   8379           The depth of search in the dominator tree for expressions to
   8380           hoist.  This is used to avoid quadratic behavior in hoisting
   8381           algorithm.  The value of 0 does not limit on the search, but
   8382           may slow down compilation of huge functions.  The default
   8383           value is 30.
   8384 
   8385      'max-tail-merge-comparisons'
   8386           The maximum amount of similar bbs to compare a bb with.  This
   8387           is used to avoid quadratic behavior in tree tail merging.  The
   8388           default value is 10.
   8389 
   8390      'max-tail-merge-iterations'
   8391           The maximum amount of iterations of the pass over the
   8392           function.  This is used to limit compilation time in tree tail
   8393           merging.  The default value is 2.
   8394 
   8395      'max-unrolled-insns'
   8396           The maximum number of instructions that a loop may have to be
   8397           unrolled.  If a loop is unrolled, this parameter also
   8398           determines how many times the loop code is unrolled.
   8399 
   8400      'max-average-unrolled-insns'
   8401           The maximum number of instructions biased by probabilities of
   8402           their execution that a loop may have to be unrolled.  If a
   8403           loop is unrolled, this parameter also determines how many
   8404           times the loop code is unrolled.
   8405 
   8406      'max-unroll-times'
   8407           The maximum number of unrollings of a single loop.
   8408 
   8409      'max-peeled-insns'
   8410           The maximum number of instructions that a loop may have to be
   8411           peeled.  If a loop is peeled, this parameter also determines
   8412           how many times the loop code is peeled.
   8413 
   8414      'max-peel-times'
   8415           The maximum number of peelings of a single loop.
   8416 
   8417      'max-peel-branches'
   8418           The maximum number of branches on the hot path through the
   8419           peeled sequence.
   8420 
   8421      'max-completely-peeled-insns'
   8422           The maximum number of insns of a completely peeled loop.
   8423 
   8424      'max-completely-peel-times'
   8425           The maximum number of iterations of a loop to be suitable for
   8426           complete peeling.
   8427 
   8428      'max-completely-peel-loop-nest-depth'
   8429           The maximum depth of a loop nest suitable for complete
   8430           peeling.
   8431 
   8432      'max-unswitch-insns'
   8433           The maximum number of insns of an unswitched loop.
   8434 
   8435      'max-unswitch-level'
   8436           The maximum number of branches unswitched in a single loop.
   8437 
   8438      'lim-expensive'
   8439           The minimum cost of an expensive expression in the loop
   8440           invariant motion.
   8441 
   8442      'iv-consider-all-candidates-bound'
   8443           Bound on number of candidates for induction variables, below
   8444           which all candidates are considered for each use in induction
   8445           variable optimizations.  If there are more candidates than
   8446           this, only the most relevant ones are considered to avoid
   8447           quadratic time complexity.
   8448 
   8449      'iv-max-considered-uses'
   8450           The induction variable optimizations give up on loops that
   8451           contain more induction variable uses.
   8452 
   8453      'iv-always-prune-cand-set-bound'
   8454           If the number of candidates in the set is smaller than this
   8455           value, always try to remove unnecessary ivs from the set when
   8456           adding a new one.
   8457 
   8458      'scev-max-expr-size'
   8459           Bound on size of expressions used in the scalar evolutions
   8460           analyzer.  Large expressions slow the analyzer.
   8461 
   8462      'scev-max-expr-complexity'
   8463           Bound on the complexity of the expressions in the scalar
   8464           evolutions analyzer.  Complex expressions slow the analyzer.
   8465 
   8466      'omega-max-vars'
   8467           The maximum number of variables in an Omega constraint system.
   8468           The default value is 128.
   8469 
   8470      'omega-max-geqs'
   8471           The maximum number of inequalities in an Omega constraint
   8472           system.  The default value is 256.
   8473 
   8474      'omega-max-eqs'
   8475           The maximum number of equalities in an Omega constraint
   8476           system.  The default value is 128.
   8477 
   8478      'omega-max-wild-cards'
   8479           The maximum number of wildcard variables that the Omega solver
   8480           is able to insert.  The default value is 18.
   8481 
   8482      'omega-hash-table-size'
   8483           The size of the hash table in the Omega solver.  The default
   8484           value is 550.
   8485 
   8486      'omega-max-keys'
   8487           The maximal number of keys used by the Omega solver.  The
   8488           default value is 500.
   8489 
   8490      'omega-eliminate-redundant-constraints'
   8491           When set to 1, use expensive methods to eliminate all
   8492           redundant constraints.  The default value is 0.
   8493 
   8494      'vect-max-version-for-alignment-checks'
   8495           The maximum number of run-time checks that can be performed
   8496           when doing loop versioning for alignment in the vectorizer.
   8497           See option '-ftree-vect-loop-version' for more information.
   8498 
   8499      'vect-max-version-for-alias-checks'
   8500           The maximum number of run-time checks that can be performed
   8501           when doing loop versioning for alias in the vectorizer.  See
   8502           option '-ftree-vect-loop-version' for more information.
   8503 
   8504      'max-iterations-to-track'
   8505           The maximum number of iterations of a loop the brute-force
   8506           algorithm for analysis of the number of iterations of the loop
   8507           tries to evaluate.
   8508 
   8509      'hot-bb-count-ws-permille'
   8510           A basic block profile count is considered hot if it
   8511           contributes to the given permillage (i.e.  0...1000) of the
   8512           entire profiled execution.
   8513 
   8514      'hot-bb-frequency-fraction'
   8515           Select fraction of the entry block frequency of executions of
   8516           basic block in function given basic block needs to have to be
   8517           considered hot.
   8518 
   8519      'max-predicted-iterations'
   8520           The maximum number of loop iterations we predict statically.
   8521           This is useful in cases where a function contains a single
   8522           loop with known bound and another loop with unknown bound.
   8523           The known number of iterations is predicted correctly, while
   8524           the unknown number of iterations average to roughly 10.  This
   8525           means that the loop without bounds appears artificially cold
   8526           relative to the other one.
   8527 
   8528      'align-threshold'
   8529 
   8530           Select fraction of the maximal frequency of executions of a
   8531           basic block in a function to align the basic block.
   8532 
   8533      'align-loop-iterations'
   8534 
   8535           A loop expected to iterate at least the selected number of
   8536           iterations is aligned.
   8537 
   8538      'tracer-dynamic-coverage'
   8539      'tracer-dynamic-coverage-feedback'
   8540 
   8541           This value is used to limit superblock formation once the
   8542           given percentage of executed instructions is covered.  This
   8543           limits unnecessary code size expansion.
   8544 
   8545           The 'tracer-dynamic-coverage-feedback' is used only when
   8546           profile feedback is available.  The real profiles (as opposed
   8547           to statically estimated ones) are much less balanced allowing
   8548           the threshold to be larger value.
   8549 
   8550      'tracer-max-code-growth'
   8551           Stop tail duplication once code growth has reached given
   8552           percentage.  This is a rather artificial limit, as most of the
   8553           duplicates are eliminated later in cross jumping, so it may be
   8554           set to much higher values than is the desired code growth.
   8555 
   8556      'tracer-min-branch-ratio'
   8557 
   8558           Stop reverse growth when the reverse probability of best edge
   8559           is less than this threshold (in percent).
   8560 
   8561      'tracer-min-branch-ratio'
   8562      'tracer-min-branch-ratio-feedback'
   8563 
   8564           Stop forward growth if the best edge has probability lower
   8565           than this threshold.
   8566 
   8567           Similarly to 'tracer-dynamic-coverage' two values are present,
   8568           one for compilation for profile feedback and one for
   8569           compilation without.  The value for compilation with profile
   8570           feedback needs to be more conservative (higher) in order to
   8571           make tracer effective.
   8572 
   8573      'max-cse-path-length'
   8574 
   8575           The maximum number of basic blocks on path that CSE considers.
   8576           The default is 10.
   8577 
   8578      'max-cse-insns'
   8579           The maximum number of instructions CSE processes before
   8580           flushing.  The default is 1000.
   8581 
   8582      'ggc-min-expand'
   8583 
   8584           GCC uses a garbage collector to manage its own memory
   8585           allocation.  This parameter specifies the minimum percentage
   8586           by which the garbage collector's heap should be allowed to
   8587           expand between collections.  Tuning this may improve
   8588           compilation speed; it has no effect on code generation.
   8589 
   8590           The default is 30% + 70% * (RAM/1GB) with an upper bound of
   8591           100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
   8592           of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
   8593           'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
   8594           particular platform, the lower bound of 30% is used.  Setting
   8595           this parameter and 'ggc-min-heapsize' to zero causes a full
   8596           collection to occur at every opportunity.  This is extremely
   8597           slow, but can be useful for debugging.
   8598 
   8599      'ggc-min-heapsize'
   8600 
   8601           Minimum size of the garbage collector's heap before it begins
   8602           bothering to collect garbage.  The first collection occurs
   8603           after the heap expands by 'ggc-min-expand'% beyond
   8604           'ggc-min-heapsize'.  Again, tuning this may improve
   8605           compilation speed, and has no effect on code generation.
   8606 
   8607           The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
   8608           that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
   8609           exceeded, but with a lower bound of 4096 (four megabytes) and
   8610           an upper bound of 131072 (128 megabytes).  If GCC is not able
   8611           to calculate RAM on a particular platform, the lower bound is
   8612           used.  Setting this parameter very large effectively disables
   8613           garbage collection.  Setting this parameter and
   8614           'ggc-min-expand' to zero causes a full collection to occur at
   8615           every opportunity.
   8616 
   8617      'max-reload-search-insns'
   8618           The maximum number of instruction reload should look backward
   8619           for equivalent register.  Increasing values mean more
   8620           aggressive optimization, making the compilation time increase
   8621           with probably slightly better performance.  The default value
   8622           is 100.
   8623 
   8624      'max-cselib-memory-locations'
   8625           The maximum number of memory locations cselib should take into
   8626           account.  Increasing values mean more aggressive optimization,
   8627           making the compilation time increase with probably slightly
   8628           better performance.  The default value is 500.
   8629 
   8630      'reorder-blocks-duplicate'
   8631      'reorder-blocks-duplicate-feedback'
   8632 
   8633           Used by the basic block reordering pass to decide whether to
   8634           use unconditional branch or duplicate the code on its
   8635           destination.  Code is duplicated when its estimated size is
   8636           smaller than this value multiplied by the estimated size of
   8637           unconditional jump in the hot spots of the program.
   8638 
   8639           The 'reorder-block-duplicate-feedback' is used only when
   8640           profile feedback is available.  It may be set to higher values
   8641           than 'reorder-block-duplicate' since information about the hot
   8642           spots is more accurate.
   8643 
   8644      'max-sched-ready-insns'
   8645           The maximum number of instructions ready to be issued the
   8646           scheduler should consider at any given time during the first
   8647           scheduling pass.  Increasing values mean more thorough
   8648           searches, making the compilation time increase with probably
   8649           little benefit.  The default value is 100.
   8650 
   8651      'max-sched-region-blocks'
   8652           The maximum number of blocks in a region to be considered for
   8653           interblock scheduling.  The default value is 10.
   8654 
   8655      'max-pipeline-region-blocks'
   8656           The maximum number of blocks in a region to be considered for
   8657           pipelining in the selective scheduler.  The default value is
   8658           15.
   8659 
   8660      'max-sched-region-insns'
   8661           The maximum number of insns in a region to be considered for
   8662           interblock scheduling.  The default value is 100.
   8663 
   8664      'max-pipeline-region-insns'
   8665           The maximum number of insns in a region to be considered for
   8666           pipelining in the selective scheduler.  The default value is
   8667           200.
   8668 
   8669      'min-spec-prob'
   8670           The minimum probability (in percents) of reaching a source
   8671           block for interblock speculative scheduling.  The default
   8672           value is 40.
   8673 
   8674      'max-sched-extend-regions-iters'
   8675           The maximum number of iterations through CFG to extend
   8676           regions.  A value of 0 (the default) disables region
   8677           extensions.
   8678 
   8679      'max-sched-insn-conflict-delay'
   8680           The maximum conflict delay for an insn to be considered for
   8681           speculative motion.  The default value is 3.
   8682 
   8683      'sched-spec-prob-cutoff'
   8684           The minimal probability of speculation success (in percents),
   8685           so that speculative insns are scheduled.  The default value is
   8686           40.
   8687 
   8688      'sched-spec-state-edge-prob-cutoff'
   8689           The minimum probability an edge must have for the scheduler to
   8690           save its state across it.  The default value is 10.
   8691 
   8692      'sched-mem-true-dep-cost'
   8693           Minimal distance (in CPU cycles) between store and load
   8694           targeting same memory locations.  The default value is 1.
   8695 
   8696      'selsched-max-lookahead'
   8697           The maximum size of the lookahead window of selective
   8698           scheduling.  It is a depth of search for available
   8699           instructions.  The default value is 50.
   8700 
   8701      'selsched-max-sched-times'
   8702           The maximum number of times that an instruction is scheduled
   8703           during selective scheduling.  This is the limit on the number
   8704           of iterations through which the instruction may be pipelined.
   8705           The default value is 2.
   8706 
   8707      'selsched-max-insns-to-rename'
   8708           The maximum number of best instructions in the ready list that
   8709           are considered for renaming in the selective scheduler.  The
   8710           default value is 2.
   8711 
   8712      'sms-min-sc'
   8713           The minimum value of stage count that swing modulo scheduler
   8714           generates.  The default value is 2.
   8715 
   8716      'max-last-value-rtl'
   8717           The maximum size measured as number of RTLs that can be
   8718           recorded in an expression in combiner for a pseudo register as
   8719           last known value of that register.  The default is 10000.
   8720 
   8721      'integer-share-limit'
   8722           Small integer constants can use a shared data structure,
   8723           reducing the compiler's memory usage and increasing its speed.
   8724           This sets the maximum value of a shared integer constant.  The
   8725           default value is 256.
   8726 
   8727      'ssp-buffer-size'
   8728           The minimum size of buffers (i.e. arrays) that receive stack
   8729           smashing protection when '-fstack-protection' is used.
   8730 
   8731      'max-jump-thread-duplication-stmts'
   8732           Maximum number of statements allowed in a block that needs to
   8733           be duplicated when threading jumps.
   8734 
   8735      'max-fields-for-field-sensitive'
   8736           Maximum number of fields in a structure treated in a field
   8737           sensitive manner during pointer analysis.  The default is zero
   8738           for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'.
   8739 
   8740      'prefetch-latency'
   8741           Estimate on average number of instructions that are executed
   8742           before prefetch finishes.  The distance prefetched ahead is
   8743           proportional to this constant.  Increasing this number may
   8744           also lead to less streams being prefetched (see
   8745           'simultaneous-prefetches').
   8746 
   8747      'simultaneous-prefetches'
   8748           Maximum number of prefetches that can run at the same time.
   8749 
   8750      'l1-cache-line-size'
   8751           The size of cache line in L1 cache, in bytes.
   8752 
   8753      'l1-cache-size'
   8754           The size of L1 cache, in kilobytes.
   8755 
   8756      'l2-cache-size'
   8757           The size of L2 cache, in kilobytes.
   8758 
   8759      'min-insn-to-prefetch-ratio'
   8760           The minimum ratio between the number of instructions and the
   8761           number of prefetches to enable prefetching in a loop.
   8762 
   8763      'prefetch-min-insn-to-mem-ratio'
   8764           The minimum ratio between the number of instructions and the
   8765           number of memory references to enable prefetching in a loop.
   8766 
   8767      'use-canonical-types'
   8768           Whether the compiler should use the "canonical" type system.
   8769           By default, this should always be 1, which uses a more
   8770           efficient internal mechanism for comparing types in C++ and
   8771           Objective-C++.  However, if bugs in the canonical type system
   8772           are causing compilation failures, set this value to 0 to
   8773           disable canonical types.
   8774 
   8775      'switch-conversion-max-branch-ratio'
   8776           Switch initialization conversion refuses to create arrays that
   8777           are bigger than 'switch-conversion-max-branch-ratio' times the
   8778           number of branches in the switch.
   8779 
   8780      'max-partial-antic-length'
   8781           Maximum length of the partial antic set computed during the
   8782           tree partial redundancy elimination optimization
   8783           ('-ftree-pre') when optimizing at '-O3' and above.  For some
   8784           sorts of source code the enhanced partial redundancy
   8785           elimination optimization can run away, consuming all of the
   8786           memory available on the host machine.  This parameter sets a
   8787           limit on the length of the sets that are computed, which
   8788           prevents the runaway behavior.  Setting a value of 0 for this
   8789           parameter allows an unlimited set length.
   8790 
   8791      'sccvn-max-scc-size'
   8792           Maximum size of a strongly connected component (SCC) during
   8793           SCCVN processing.  If this limit is hit, SCCVN processing for
   8794           the whole function is not done and optimizations depending on
   8795           it are disabled.  The default maximum SCC size is 10000.
   8796 
   8797      'sccvn-max-alias-queries-per-access'
   8798           Maximum number of alias-oracle queries we perform when looking
   8799           for redundancies for loads and stores.  If this limit is hit
   8800           the search is aborted and the load or store is not considered
   8801           redundant.  The number of queries is algorithmically limited
   8802           to the number of stores on all paths from the load to the
   8803           function entry.  The default maxmimum number of queries is
   8804           1000.
   8805 
   8806      'ira-max-loops-num'
   8807           IRA uses regional register allocation by default.  If a
   8808           function contains more loops than the number given by this
   8809           parameter, only at most the given number of the most
   8810           frequently-executed loops form regions for regional register
   8811           allocation.  The default value of the parameter is 100.
   8812 
   8813      'ira-max-conflict-table-size'
   8814           Although IRA uses a sophisticated algorithm to compress the
   8815           conflict table, the table can still require excessive amounts
   8816           of memory for huge functions.  If the conflict table for a
   8817           function could be more than the size in MB given by this
   8818           parameter, the register allocator instead uses a faster,
   8819           simpler, and lower-quality algorithm that does not require
   8820           building a pseudo-register conflict table.  The default value
   8821           of the parameter is 2000.
   8822 
   8823      'ira-loop-reserved-regs'
   8824           IRA can be used to evaluate more accurate register pressure in
   8825           loops for decisions to move loop invariants (see '-O3').  The
   8826           number of available registers reserved for some other purposes
   8827           is given by this parameter.  The default value of the
   8828           parameter is 2, which is the minimal number of registers
   8829           needed by typical instructions.  This value is the best found
   8830           from numerous experiments.
   8831 
   8832      'loop-invariant-max-bbs-in-loop'
   8833           Loop invariant motion can be very expensive, both in
   8834           compilation time and in amount of needed compile-time memory,
   8835           with very large loops.  Loops with more basic blocks than this
   8836           parameter won't have loop invariant motion optimization
   8837           performed on them.  The default value of the parameter is 1000
   8838           for '-O1' and 10000 for '-O2' and above.
   8839 
   8840      'loop-max-datarefs-for-datadeps'
   8841           Building data dapendencies is expensive for very large loops.
   8842           This parameter limits the number of data references in loops
   8843           that are considered for data dependence analysis.  These large
   8844           loops are no handled by the optimizations using loop data
   8845           dependencies.  The default value is 1000.
   8846 
   8847      'max-vartrack-size'
   8848           Sets a maximum number of hash table slots to use during
   8849           variable tracking dataflow analysis of any function.  If this
   8850           limit is exceeded with variable tracking at assignments
   8851           enabled, analysis for that function is retried without it,
   8852           after removing all debug insns from the function.  If the
   8853           limit is exceeded even without debug insns, var tracking
   8854           analysis is completely disabled for the function.  Setting the
   8855           parameter to zero makes it unlimited.
   8856 
   8857      'max-vartrack-expr-depth'
   8858           Sets a maximum number of recursion levels when attempting to
   8859           map variable names or debug temporaries to value expressions.
   8860           This trades compilation time for more complete debug
   8861           information.  If this is set too low, value expressions that
   8862           are available and could be represented in debug information
   8863           may end up not being used; setting this higher may enable the
   8864           compiler to find more complex debug expressions, but compile
   8865           time and memory use may grow.  The default is 12.
   8866 
   8867      'min-nondebug-insn-uid'
   8868           Use uids starting at this parameter for nondebug insns.  The
   8869           range below the parameter is reserved exclusively for debug
   8870           insns created by '-fvar-tracking-assignments', but debug insns
   8871           may get (non-overlapping) uids above it if the reserved range
   8872           is exhausted.
   8873 
   8874      'ipa-sra-ptr-growth-factor'
   8875           IPA-SRA replaces a pointer to an aggregate with one or more
   8876           new parameters only when their cumulative size is less or
   8877           equal to 'ipa-sra-ptr-growth-factor' times the size of the
   8878           original pointer parameter.
   8879 
   8880      'tm-max-aggregate-size'
   8881           When making copies of thread-local variables in a transaction,
   8882           this parameter specifies the size in bytes after which
   8883           variables are saved with the logging functions as opposed to
   8884           save/restore code sequence pairs.  This option only applies
   8885           when using '-fgnu-tm'.
   8886 
   8887      'graphite-max-nb-scop-params'
   8888           To avoid exponential effects in the Graphite loop transforms,
   8889           the number of parameters in a Static Control Part (SCoP) is
   8890           bounded.  The default value is 10 parameters.  A variable
   8891           whose value is unknown at compilation time and defined outside
   8892           a SCoP is a parameter of the SCoP.
   8893 
   8894      'graphite-max-bbs-per-function'
   8895           To avoid exponential effects in the detection of SCoPs, the
   8896           size of the functions analyzed by Graphite is bounded.  The
   8897           default value is 100 basic blocks.
   8898 
   8899      'loop-block-tile-size'
   8900           Loop blocking or strip mining transforms, enabled with
   8901           '-floop-block' or '-floop-strip-mine', strip mine each loop in
   8902           the loop nest by a given number of iterations.  The strip
   8903           length can be changed using the 'loop-block-tile-size'
   8904           parameter.  The default value is 51 iterations.
   8905 
   8906      'ipa-cp-value-list-size'
   8907           IPA-CP attempts to track all possible values and types passed
   8908           to a function's parameter in order to propagate them and
   8909           perform devirtualization.  'ipa-cp-value-list-size' is the
   8910           maximum number of values and types it stores per one formal
   8911           parameter of a function.
   8912 
   8913      'lto-partitions'
   8914           Specify desired number of partitions produced during WHOPR
   8915           compilation.  The number of partitions should exceed the
   8916           number of CPUs used for compilation.  The default value is 32.
   8917 
   8918      'lto-minpartition'
   8919           Size of minimal partition for WHOPR (in estimated
   8920           instructions).  This prevents expenses of splitting very small
   8921           programs into too many partitions.
   8922 
   8923      'cxx-max-namespaces-for-diagnostic-help'
   8924           The maximum number of namespaces to consult for suggestions
   8925           when C++ name lookup fails for an identifier.  The default is
   8926           1000.
   8927 
   8928      'sink-frequency-threshold'
   8929           The maximum relative execution frequency (in percents) of the
   8930           target block relative to a statement's original block to allow
   8931           statement sinking of a statement.  Larger numbers result in
   8932           more aggressive statement sinking.  The default value is 75.
   8933           A small positive adjustment is applied for statements with
   8934           memory operands as those are even more profitable so sink.
   8935 
   8936      'max-stores-to-sink'
   8937           The maximum number of conditional stores paires that can be
   8938           sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
   8939           or if-conversion ('-ftree-loop-if-convert') is disabled.  The
   8940           default is 2.
   8941 
   8942      'allow-load-data-races'
   8943           Allow optimizers to introduce new data races on loads.  Set to
   8944           1 to allow, otherwise to 0.  This option is enabled by default
   8945           unless implicitly set by the '-fmemory-model=' option.
   8946 
   8947      'allow-store-data-races'
   8948           Allow optimizers to introduce new data races on stores.  Set
   8949           to 1 to allow, otherwise to 0.  This option is enabled by
   8950           default unless implicitly set by the '-fmemory-model=' option.
   8951 
   8952      'allow-packed-load-data-races'
   8953           Allow optimizers to introduce new data races on packed data
   8954           loads.  Set to 1 to allow, otherwise to 0.  This option is
   8955           enabled by default unless implicitly set by the
   8956           '-fmemory-model=' option.
   8957 
   8958      'allow-packed-store-data-races'
   8959           Allow optimizers to introduce new data races on packed data
   8960           stores.  Set to 1 to allow, otherwise to 0.  This option is
   8961           enabled by default unless implicitly set by the
   8962           '-fmemory-model=' option.
   8963 
   8964      'case-values-threshold'
   8965           The smallest number of different values for which it is best
   8966           to use a jump-table instead of a tree of conditional branches.
   8967           If the value is 0, use the default for the machine.  The
   8968           default is 0.
   8969 
   8970      'tree-reassoc-width'
   8971           Set the maximum number of instructions executed in parallel in
   8972           reassociated tree.  This parameter overrides target dependent
   8973           heuristics used by default if has non zero value.
   8974 
   8975      'sched-pressure-algorithm'
   8976           Choose between the two available implementations of
   8977           '-fsched-pressure'.  Algorithm 1 is the original
   8978           implementation and is the more likely to prevent instructions
   8979           from being reordered.  Algorithm 2 was designed to be a
   8980           compromise between the relatively conservative approach taken
   8981           by algorithm 1 and the rather aggressive approach taken by the
   8982           default scheduler.  It relies more heavily on having a regular
   8983           register file and accurate register pressure classes.  See
   8984           'haifa-sched.c' in the GCC sources for more details.
   8985 
   8986           The default choice depends on the target.
   8987 
   8988      'max-slsr-cand-scan'
   8989           Set the maximum number of existing candidates that will be
   8990           considered when seeking a basis for a new straight-line
   8991           strength reduction candidate.
   8992 
   8993 
   8994 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
   8995 
   8996 3.11 Options Controlling the Preprocessor
   8997 =========================================
   8998 
   8999 These options control the C preprocessor, which is run on each C source
   9000 file before actual compilation.
   9001 
   9002  If you use the '-E' option, nothing is done except preprocessing.  Some
   9003 of these options make sense only together with '-E' because they cause
   9004 the preprocessor output to be unsuitable for actual compilation.
   9005 
   9006 '-Wp,OPTION'
   9007      You can use '-Wp,OPTION' to bypass the compiler driver and pass
   9008      OPTION directly through to the preprocessor.  If OPTION contains
   9009      commas, it is split into multiple options at the commas.  However,
   9010      many options are modified, translated or interpreted by the
   9011      compiler driver before being passed to the preprocessor, and '-Wp'
   9012      forcibly bypasses this phase.  The preprocessor's direct interface
   9013      is undocumented and subject to change, so whenever possible you
   9014      should avoid using '-Wp' and let the driver handle the options
   9015      instead.
   9016 
   9017 '-Xpreprocessor OPTION'
   9018      Pass OPTION as an option to the preprocessor.  You can use this to
   9019      supply system-specific preprocessor options that GCC does not
   9020      recognize.
   9021 
   9022      If you want to pass an option that takes an argument, you must use
   9023      '-Xpreprocessor' twice, once for the option and once for the
   9024      argument.
   9025 
   9026 '-no-integrated-cpp'
   9027      Perform preprocessing as a separate pass before compilation.  By
   9028      default, GCC performs preprocessing as an integrated part of input
   9029      tokenization and parsing.  If this option is provided, the
   9030      appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
   9031      C, C++, and Objective-C, respectively) is instead invoked twice,
   9032      once for preprocessing only and once for actual compilation of the
   9033      preprocessed input.  This option may be useful in conjunction with
   9034      the '-B' or '-wrapper' options to specify an alternate preprocessor
   9035      or perform additional processing of the program source between
   9036      normal preprocessing and compilation.
   9037 
   9038 '-D NAME'
   9039      Predefine NAME as a macro, with definition '1'.
   9040 
   9041 '-D NAME=DEFINITION'
   9042      The contents of DEFINITION are tokenized and processed as if they
   9043      appeared during translation phase three in a '#define' directive.
   9044      In particular, the definition will be truncated by embedded newline
   9045      characters.
   9046 
   9047      If you are invoking the preprocessor from a shell or shell-like
   9048      program you may need to use the shell's quoting syntax to protect
   9049      characters such as spaces that have a meaning in the shell syntax.
   9050 
   9051      If you wish to define a function-like macro on the command line,
   9052      write its argument list with surrounding parentheses before the
   9053      equals sign (if any).  Parentheses are meaningful to most shells,
   9054      so you will need to quote the option.  With 'sh' and 'csh',
   9055      '-D'NAME(ARGS...)=DEFINITION'' works.
   9056 
   9057      '-D' and '-U' options are processed in the order they are given on
   9058      the command line.  All '-imacros FILE' and '-include FILE' options
   9059      are processed after all '-D' and '-U' options.
   9060 
   9061 '-U NAME'
   9062      Cancel any previous definition of NAME, either built in or provided
   9063      with a '-D' option.
   9064 
   9065 '-undef'
   9066      Do not predefine any system-specific or GCC-specific macros.  The
   9067      standard predefined macros remain defined.
   9068 
   9069 '-I DIR'
   9070      Add the directory DIR to the list of directories to be searched for
   9071      header files.  Directories named by '-I' are searched before the
   9072      standard system include directories.  If the directory DIR is a
   9073      standard system include directory, the option is ignored to ensure
   9074      that the default search order for system directories and the
   9075      special treatment of system headers are not defeated .  If DIR
   9076      begins with '=', then the '=' will be replaced by the sysroot
   9077      prefix; see '--sysroot' and '-isysroot'.
   9078 
   9079 '-o FILE'
   9080      Write output to FILE.  This is the same as specifying FILE as the
   9081      second non-option argument to 'cpp'.  'gcc' has a different
   9082      interpretation of a second non-option argument, so you must use
   9083      '-o' to specify the output file.
   9084 
   9085 '-Wall'
   9086      Turns on all optional warnings which are desirable for normal code.
   9087      At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a
   9088      warning about integer promotion causing a change of sign in '#if'
   9089      expressions.  Note that many of the preprocessor's warnings are on
   9090      by default and have no options to control them.
   9091 
   9092 '-Wcomment'
   9093 '-Wcomments'
   9094      Warn whenever a comment-start sequence '/*' appears in a '/*'
   9095      comment, or whenever a backslash-newline appears in a '//' comment.
   9096      (Both forms have the same effect.)
   9097 
   9098 '-Wtrigraphs'
   9099      Most trigraphs in comments cannot affect the meaning of the
   9100      program.  However, a trigraph that would form an escaped newline
   9101      ('??/' at the end of a line) can, by changing where the comment
   9102      begins or ends.  Therefore, only trigraphs that would form escaped
   9103      newlines produce warnings inside a comment.
   9104 
   9105      This option is implied by '-Wall'.  If '-Wall' is not given, this
   9106      option is still enabled unless trigraphs are enabled.  To get
   9107      trigraph conversion without warnings, but get the other '-Wall'
   9108      warnings, use '-trigraphs -Wall -Wno-trigraphs'.
   9109 
   9110 '-Wtraditional'
   9111      Warn about certain constructs that behave differently in
   9112      traditional and ISO C.  Also warn about ISO C constructs that have
   9113      no traditional C equivalent, and problematic constructs which
   9114      should be avoided.
   9115 
   9116 '-Wundef'
   9117      Warn whenever an identifier which is not a macro is encountered in
   9118      an '#if' directive, outside of 'defined'.  Such identifiers are
   9119      replaced with zero.
   9120 
   9121 '-Wunused-macros'
   9122      Warn about macros defined in the main file that are unused.  A
   9123      macro is "used" if it is expanded or tested for existence at least
   9124      once.  The preprocessor will also warn if the macro has not been
   9125      used at the time it is redefined or undefined.
   9126 
   9127      Built-in macros, macros defined on the command line, and macros
   9128      defined in include files are not warned about.
   9129 
   9130      _Note:_ If a macro is actually used, but only used in skipped
   9131      conditional blocks, then CPP will report it as unused.  To avoid
   9132      the warning in such a case, you might improve the scope of the
   9133      macro's definition by, for example, moving it into the first
   9134      skipped block.  Alternatively, you could provide a dummy use with
   9135      something like:
   9136 
   9137           #if defined the_macro_causing_the_warning
   9138           #endif
   9139 
   9140 '-Wendif-labels'
   9141      Warn whenever an '#else' or an '#endif' are followed by text.  This
   9142      usually happens in code of the form
   9143 
   9144           #if FOO
   9145           ...
   9146           #else FOO
   9147           ...
   9148           #endif FOO
   9149 
   9150      The second and third 'FOO' should be in comments, but often are not
   9151      in older programs.  This warning is on by default.
   9152 
   9153 '-Werror'
   9154      Make all warnings into hard errors.  Source code which triggers
   9155      warnings will be rejected.
   9156 
   9157 '-Wsystem-headers'
   9158      Issue warnings for code in system headers.  These are normally
   9159      unhelpful in finding bugs in your own code, therefore suppressed.
   9160      If you are responsible for the system library, you may want to see
   9161      them.
   9162 
   9163 '-w'
   9164      Suppress all warnings, including those which GNU CPP issues by
   9165      default.
   9166 
   9167 '-pedantic'
   9168      Issue all the mandatory diagnostics listed in the C standard.  Some
   9169      of them are left out by default, since they trigger frequently on
   9170      harmless code.
   9171 
   9172 '-pedantic-errors'
   9173      Issue all the mandatory diagnostics, and make all mandatory
   9174      diagnostics into errors.  This includes mandatory diagnostics that
   9175      GCC issues without '-pedantic' but treats as warnings.
   9176 
   9177 '-M'
   9178      Instead of outputting the result of preprocessing, output a rule
   9179      suitable for 'make' describing the dependencies of the main source
   9180      file.  The preprocessor outputs one 'make' rule containing the
   9181      object file name for that source file, a colon, and the names of
   9182      all the included files, including those coming from '-include' or
   9183      '-imacros' command line options.
   9184 
   9185      Unless specified explicitly (with '-MT' or '-MQ'), the object file
   9186      name consists of the name of the source file with any suffix
   9187      replaced with object file suffix and with any leading directory
   9188      parts removed.  If there are many included files then the rule is
   9189      split into several lines using '\'-newline.  The rule has no
   9190      commands.
   9191 
   9192      This option does not suppress the preprocessor's debug output, such
   9193      as '-dM'.  To avoid mixing such debug output with the dependency
   9194      rules you should explicitly specify the dependency output file with
   9195      '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
   9196      (*note Environment Variables::).  Debug output will still be sent
   9197      to the regular output stream as normal.
   9198 
   9199      Passing '-M' to the driver implies '-E', and suppresses warnings
   9200      with an implicit '-w'.
   9201 
   9202 '-MM'
   9203      Like '-M' but do not mention header files that are found in system
   9204      header directories, nor header files that are included, directly or
   9205      indirectly, from such a header.
   9206 
   9207      This implies that the choice of angle brackets or double quotes in
   9208      an '#include' directive does not in itself determine whether that
   9209      header will appear in '-MM' dependency output.  This is a slight
   9210      change in semantics from GCC versions 3.0 and earlier.
   9211 
   9212 '-MF FILE'
   9213      When used with '-M' or '-MM', specifies a file to write the
   9214      dependencies to.  If no '-MF' switch is given the preprocessor
   9215      sends the rules to the same place it would have sent preprocessed
   9216      output.
   9217 
   9218      When used with the driver options '-MD' or '-MMD', '-MF' overrides
   9219      the default dependency output file.
   9220 
   9221 '-MG'
   9222      In conjunction with an option such as '-M' requesting dependency
   9223      generation, '-MG' assumes missing header files are generated files
   9224      and adds them to the dependency list without raising an error.  The
   9225      dependency filename is taken directly from the '#include' directive
   9226      without prepending any path.  '-MG' also suppresses preprocessed
   9227      output, as a missing header file renders this useless.
   9228 
   9229      This feature is used in automatic updating of makefiles.
   9230 
   9231 '-MP'
   9232      This option instructs CPP to add a phony target for each dependency
   9233      other than the main file, causing each to depend on nothing.  These
   9234      dummy rules work around errors 'make' gives if you remove header
   9235      files without updating the 'Makefile' to match.
   9236 
   9237      This is typical output:
   9238 
   9239           test.o: test.c test.h
   9240 
   9241           test.h:
   9242 
   9243 '-MT TARGET'
   9244 
   9245      Change the target of the rule emitted by dependency generation.  By
   9246      default CPP takes the name of the main input file, deletes any
   9247      directory components and any file suffix such as '.c', and appends
   9248      the platform's usual object suffix.  The result is the target.
   9249 
   9250      An '-MT' option will set the target to be exactly the string you
   9251      specify.  If you want multiple targets, you can specify them as a
   9252      single argument to '-MT', or use multiple '-MT' options.
   9253 
   9254      For example, '-MT '$(objpfx)foo.o'' might give
   9255 
   9256           $(objpfx)foo.o: foo.c
   9257 
   9258 '-MQ TARGET'
   9259 
   9260      Same as '-MT', but it quotes any characters which are special to
   9261      Make.  '-MQ '$(objpfx)foo.o'' gives
   9262 
   9263           $$(objpfx)foo.o: foo.c
   9264 
   9265      The default target is automatically quoted, as if it were given
   9266      with '-MQ'.
   9267 
   9268 '-MD'
   9269      '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
   9270      implied.  The driver determines FILE based on whether an '-o'
   9271      option is given.  If it is, the driver uses its argument but with a
   9272      suffix of '.d', otherwise it takes the name of the input file,
   9273      removes any directory components and suffix, and applies a '.d'
   9274      suffix.
   9275 
   9276      If '-MD' is used in conjunction with '-E', any '-o' switch is
   9277      understood to specify the dependency output file (*note -MF:
   9278      dashMF.), but if used without '-E', each '-o' is understood to
   9279      specify a target object file.
   9280 
   9281      Since '-E' is not implied, '-MD' can be used to generate a
   9282      dependency output file as a side-effect of the compilation process.
   9283 
   9284 '-MMD'
   9285      Like '-MD' except mention only user header files, not system header
   9286      files.
   9287 
   9288 '-fpch-deps'
   9289      When using precompiled headers (*note Precompiled Headers::), this
   9290      flag will cause the dependency-output flags to also list the files
   9291      from the precompiled header's dependencies.  If not specified only
   9292      the precompiled header would be listed and not the files that were
   9293      used to create it because those files are not consulted when a
   9294      precompiled header is used.
   9295 
   9296 '-fpch-preprocess'
   9297      This option allows use of a precompiled header (*note Precompiled
   9298      Headers::) together with '-E'.  It inserts a special '#pragma',
   9299      '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
   9300      place where the precompiled header was found, and its FILENAME.
   9301      When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
   9302      loads the PCH.
   9303 
   9304      This option is off by default, because the resulting preprocessed
   9305      output is only really suitable as input to GCC.  It is switched on
   9306      by '-save-temps'.
   9307 
   9308      You should not write this '#pragma' in your own code, but it is
   9309      safe to edit the filename if the PCH file is available in a
   9310      different location.  The filename may be absolute or it may be
   9311      relative to GCC's current directory.
   9312 
   9313 '-x c'
   9314 '-x c++'
   9315 '-x objective-c'
   9316 '-x assembler-with-cpp'
   9317      Specify the source language: C, C++, Objective-C, or assembly.
   9318      This has nothing to do with standards conformance or extensions; it
   9319      merely selects which base syntax to expect.  If you give none of
   9320      these options, cpp will deduce the language from the extension of
   9321      the source file: '.c', '.cc', '.m', or '.S'.  Some other common
   9322      extensions for C++ and assembly are also recognized.  If cpp does
   9323      not recognize the extension, it will treat the file as C; this is
   9324      the most generic mode.
   9325 
   9326      _Note:_ Previous versions of cpp accepted a '-lang' option which
   9327      selected both the language and the standards conformance level.
   9328      This option has been removed, because it conflicts with the '-l'
   9329      option.
   9330 
   9331 '-std=STANDARD'
   9332 '-ansi'
   9333      Specify the standard to which the code should conform.  Currently
   9334      CPP knows about C and C++ standards; others may be added in the
   9335      future.
   9336 
   9337      STANDARD may be one of:
   9338      'c90'
   9339      'c89'
   9340      'iso9899:1990'
   9341           The ISO C standard from 1990.  'c90' is the customary
   9342           shorthand for this version of the standard.
   9343 
   9344           The '-ansi' option is equivalent to '-std=c90'.
   9345 
   9346      'iso9899:199409'
   9347           The 1990 C standard, as amended in 1994.
   9348 
   9349      'iso9899:1999'
   9350      'c99'
   9351      'iso9899:199x'
   9352      'c9x'
   9353           The revised ISO C standard, published in December 1999.
   9354           Before publication, this was known as C9X.
   9355 
   9356      'iso9899:2011'
   9357      'c11'
   9358      'c1x'
   9359           The revised ISO C standard, published in December 2011.
   9360           Before publication, this was known as C1X.
   9361 
   9362      'gnu90'
   9363      'gnu89'
   9364           The 1990 C standard plus GNU extensions.  This is the default.
   9365 
   9366      'gnu99'
   9367      'gnu9x'
   9368           The 1999 C standard plus GNU extensions.
   9369 
   9370      'gnu11'
   9371      'gnu1x'
   9372           The 2011 C standard plus GNU extensions.
   9373 
   9374      'c++98'
   9375           The 1998 ISO C++ standard plus amendments.
   9376 
   9377      'gnu++98'
   9378           The same as '-std=c++98' plus GNU extensions.  This is the
   9379           default for C++ code.
   9380 
   9381 '-I-'
   9382      Split the include path.  Any directories specified with '-I'
   9383      options before '-I-' are searched only for headers requested with
   9384      '#include "FILE"'; they are not searched for '#include <FILE>'.  If
   9385      additional directories are specified with '-I' options after the
   9386      '-I-', those directories are searched for all '#include'
   9387      directives.
   9388 
   9389      In addition, '-I-' inhibits the use of the directory of the current
   9390      file directory as the first search directory for '#include "FILE"'.
   9391      This option has been deprecated.
   9392 
   9393 '-nostdinc'
   9394      Do not search the standard system directories for header files.
   9395      Only the directories you have specified with '-I' options (and the
   9396      directory of the current file, if appropriate) are searched.
   9397 
   9398 '-nostdinc++'
   9399      Do not search for header files in the C++-specific standard
   9400      directories, but do still search the other standard directories.
   9401      (This option is used when building the C++ library.)
   9402 
   9403 '-include FILE'
   9404      Process FILE as if '#include "file"' appeared as the first line of
   9405      the primary source file.  However, the first directory searched for
   9406      FILE is the preprocessor's working directory _instead of_ the
   9407      directory containing the main source file.  If not found there, it
   9408      is searched for in the remainder of the '#include "..."' search
   9409      chain as normal.
   9410 
   9411      If multiple '-include' options are given, the files are included in
   9412      the order they appear on the command line.
   9413 
   9414 '-imacros FILE'
   9415      Exactly like '-include', except that any output produced by
   9416      scanning FILE is thrown away.  Macros it defines remain defined.
   9417      This allows you to acquire all the macros from a header without
   9418      also processing its declarations.
   9419 
   9420      All files specified by '-imacros' are processed before all files
   9421      specified by '-include'.
   9422 
   9423 '-idirafter DIR'
   9424      Search DIR for header files, but do it _after_ all directories
   9425      specified with '-I' and the standard system directories have been
   9426      exhausted.  DIR is treated as a system include directory.  If DIR
   9427      begins with '=', then the '=' will be replaced by the sysroot
   9428      prefix; see '--sysroot' and '-isysroot'.
   9429 
   9430 '-iprefix PREFIX'
   9431      Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
   9432      If the prefix represents a directory, you should include the final
   9433      '/'.
   9434 
   9435 '-iwithprefix DIR'
   9436 '-iwithprefixbefore DIR'
   9437      Append DIR to the prefix specified previously with '-iprefix', and
   9438      add the resulting directory to the include search path.
   9439      '-iwithprefixbefore' puts it in the same place '-I' would;
   9440      '-iwithprefix' puts it where '-idirafter' would.
   9441 
   9442 '-isysroot DIR'
   9443      This option is like the '--sysroot' option, but applies only to
   9444      header files (except for Darwin targets, where it applies to both
   9445      header files and libraries).  See the '--sysroot' option for more
   9446      information.
   9447 
   9448 '-imultilib DIR'
   9449      Use DIR as a subdirectory of the directory containing
   9450      target-specific C++ headers.
   9451 
   9452 '-isystem DIR'
   9453      Search DIR for header files, after all directories specified by
   9454      '-I' but before the standard system directories.  Mark it as a
   9455      system directory, so that it gets the same special treatment as is
   9456      applied to the standard system directories.  If DIR begins with
   9457      '=', then the '=' will be replaced by the sysroot prefix; see
   9458      '--sysroot' and '-isysroot'.
   9459 
   9460 '-iquote DIR'
   9461      Search DIR only for header files requested with '#include "FILE"';
   9462      they are not searched for '#include <FILE>', before all directories
   9463      specified by '-I' and before the standard system directories.  If
   9464      DIR begins with '=', then the '=' will be replaced by the sysroot
   9465      prefix; see '--sysroot' and '-isysroot'.
   9466 
   9467 '-fdirectives-only'
   9468      When preprocessing, handle directives, but do not expand macros.
   9469 
   9470      The option's behavior depends on the '-E' and '-fpreprocessed'
   9471      options.
   9472 
   9473      With '-E', preprocessing is limited to the handling of directives
   9474      such as '#define', '#ifdef', and '#error'.  Other preprocessor
   9475      operations, such as macro expansion and trigraph conversion are not
   9476      performed.  In addition, the '-dD' option is implicitly enabled.
   9477 
   9478      With '-fpreprocessed', predefinition of command line and most
   9479      builtin macros is disabled.  Macros such as '__LINE__', which are
   9480      contextually dependent, are handled normally.  This enables
   9481      compilation of files previously preprocessed with '-E
   9482      -fdirectives-only'.
   9483 
   9484      With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
   9485      take precedence.  This enables full preprocessing of files
   9486      previously preprocessed with '-E -fdirectives-only'.
   9487 
   9488 '-fdollars-in-identifiers'
   9489      Accept '$' in identifiers.
   9490 
   9491 '-fextended-identifiers'
   9492      Accept universal character names in identifiers.  This option is
   9493      experimental; in a future version of GCC, it will be enabled by
   9494      default for C99 and C++.
   9495 
   9496 '-fno-canonical-system-headers'
   9497      When preprocessing, do not shorten system header paths with
   9498      canonicalization.
   9499 
   9500 '-fpreprocessed'
   9501      Indicate to the preprocessor that the input file has already been
   9502      preprocessed.  This suppresses things like macro expansion,
   9503      trigraph conversion, escaped newline splicing, and processing of
   9504      most directives.  The preprocessor still recognizes and removes
   9505      comments, so that you can pass a file preprocessed with '-C' to the
   9506      compiler without problems.  In this mode the integrated
   9507      preprocessor is little more than a tokenizer for the front ends.
   9508 
   9509      '-fpreprocessed' is implicit if the input file has one of the
   9510      extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
   9511      uses for preprocessed files created by '-save-temps'.
   9512 
   9513 '-ftabstop=WIDTH'
   9514      Set the distance between tab stops.  This helps the preprocessor
   9515      report correct column numbers in warnings or errors, even if tabs
   9516      appear on the line.  If the value is less than 1 or greater than
   9517      100, the option is ignored.  The default is 8.
   9518 
   9519 '-fdebug-cpp'
   9520      This option is only useful for debugging GCC. When used with '-E',
   9521      dumps debugging information about location maps.  Every token in
   9522      the output is preceded by the dump of the map its location belongs
   9523      to.  The dump of the map holding the location of a token would be:
   9524           {'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}
   9525 
   9526      When used without '-E', this option has no effect.
   9527 
   9528 '-ftrack-macro-expansion[=LEVEL]'
   9529      Track locations of tokens across macro expansions.  This allows the
   9530      compiler to emit diagnostic about the current macro expansion stack
   9531      when a compilation error occurs in a macro expansion.  Using this
   9532      option makes the preprocessor and the compiler consume more memory.
   9533      The LEVEL parameter can be used to choose the level of precision of
   9534      token location tracking thus decreasing the memory consumption if
   9535      necessary.  Value '0' of LEVEL de-activates this option just as if
   9536      no '-ftrack-macro-expansion' was present on the command line.
   9537      Value '1' tracks tokens locations in a degraded mode for the sake
   9538      of minimal memory overhead.  In this mode all tokens resulting from
   9539      the expansion of an argument of a function-like macro have the same
   9540      location.  Value '2' tracks tokens locations completely.  This
   9541      value is the most memory hungry.  When this option is given no
   9542      argument, the default parameter value is '2'.
   9543 
   9544      Note that -ftrack-macro-expansion=2 is activated by default.
   9545 
   9546 '-fexec-charset=CHARSET'
   9547      Set the execution character set, used for string and character
   9548      constants.  The default is UTF-8.  CHARSET can be any encoding
   9549      supported by the system's 'iconv' library routine.
   9550 
   9551 '-fwide-exec-charset=CHARSET'
   9552      Set the wide execution character set, used for wide string and
   9553      character constants.  The default is UTF-32 or UTF-16, whichever
   9554      corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
   9555      CHARSET can be any encoding supported by the system's 'iconv'
   9556      library routine; however, you will have problems with encodings
   9557      that do not fit exactly in 'wchar_t'.
   9558 
   9559 '-finput-charset=CHARSET'
   9560      Set the input character set, used for translation from the
   9561      character set of the input file to the source character set used by
   9562      GCC.  If the locale does not specify, or GCC cannot get this
   9563      information from the locale, the default is UTF-8.  This can be
   9564      overridden by either the locale or this command line option.
   9565      Currently the command line option takes precedence if there's a
   9566      conflict.  CHARSET can be any encoding supported by the system's
   9567      'iconv' library routine.
   9568 
   9569 '-fworking-directory'
   9570      Enable generation of linemarkers in the preprocessor output that
   9571      will let the compiler know the current working directory at the
   9572      time of preprocessing.  When this option is enabled, the
   9573      preprocessor will emit, after the initial linemarker, a second
   9574      linemarker with the current working directory followed by two
   9575      slashes.  GCC will use this directory, when it's present in the
   9576      preprocessed input, as the directory emitted as the current working
   9577      directory in some debugging information formats.  This option is
   9578      implicitly enabled if debugging information is enabled, but this
   9579      can be inhibited with the negated form '-fno-working-directory'.
   9580      If the '-P' flag is present in the command line, this option has no
   9581      effect, since no '#line' directives are emitted whatsoever.
   9582 
   9583 '-fno-show-column'
   9584      Do not print column numbers in diagnostics.  This may be necessary
   9585      if diagnostics are being scanned by a program that does not
   9586      understand the column numbers, such as 'dejagnu'.
   9587 
   9588 '-A PREDICATE=ANSWER'
   9589      Make an assertion with the predicate PREDICATE and answer ANSWER.
   9590      This form is preferred to the older form '-A PREDICATE(ANSWER)',
   9591      which is still supported, because it does not use shell special
   9592      characters.
   9593 
   9594 '-A -PREDICATE=ANSWER'
   9595      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
   9596 
   9597 '-dCHARS'
   9598      CHARS is a sequence of one or more of the following characters, and
   9599      must not be preceded by a space.  Other characters are interpreted
   9600      by the compiler proper, or reserved for future versions of GCC, and
   9601      so are silently ignored.  If you specify characters whose behavior
   9602      conflicts, the result is undefined.
   9603 
   9604      'M'
   9605           Instead of the normal output, generate a list of '#define'
   9606           directives for all the macros defined during the execution of
   9607           the preprocessor, including predefined macros.  This gives you
   9608           a way of finding out what is predefined in your version of the
   9609           preprocessor.  Assuming you have no file 'foo.h', the command
   9610 
   9611                touch foo.h; cpp -dM foo.h
   9612 
   9613           will show all the predefined macros.
   9614 
   9615           If you use '-dM' without the '-E' option, '-dM' is interpreted
   9616           as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Debugging
   9617           Options::.
   9618 
   9619      'D'
   9620           Like 'M' except in two respects: it does _not_ include the
   9621           predefined macros, and it outputs _both_ the '#define'
   9622           directives and the result of preprocessing.  Both kinds of
   9623           output go to the standard output file.
   9624 
   9625      'N'
   9626           Like 'D', but emit only the macro names, not their expansions.
   9627 
   9628      'I'
   9629           Output '#include' directives in addition to the result of
   9630           preprocessing.
   9631 
   9632      'U'
   9633           Like 'D' except that only macros that are expanded, or whose
   9634           definedness is tested in preprocessor directives, are output;
   9635           the output is delayed until the use or test of the macro; and
   9636           '#undef' directives are also output for macros tested but
   9637           undefined at the time.
   9638 
   9639 '-P'
   9640      Inhibit generation of linemarkers in the output from the
   9641      preprocessor.  This might be useful when running the preprocessor
   9642      on something that is not C code, and will be sent to a program
   9643      which might be confused by the linemarkers.
   9644 
   9645 '-C'
   9646      Do not discard comments.  All comments are passed through to the
   9647      output file, except for comments in processed directives, which are
   9648      deleted along with the directive.
   9649 
   9650      You should be prepared for side effects when using '-C'; it causes
   9651      the preprocessor to treat comments as tokens in their own right.
   9652      For example, comments appearing at the start of what would be a
   9653      directive line have the effect of turning that line into an
   9654      ordinary source line, since the first token on the line is no
   9655      longer a '#'.
   9656 
   9657 '-CC'
   9658      Do not discard comments, including during macro expansion.  This is
   9659      like '-C', except that comments contained within macros are also
   9660      passed through to the output file where the macro is expanded.
   9661 
   9662      In addition to the side-effects of the '-C' option, the '-CC'
   9663      option causes all C++-style comments inside a macro to be converted
   9664      to C-style comments.  This is to prevent later use of that macro
   9665      from inadvertently commenting out the remainder of the source line.
   9666 
   9667      The '-CC' option is generally used to support lint comments.
   9668 
   9669 '-traditional-cpp'
   9670      Try to imitate the behavior of old-fashioned C preprocessors, as
   9671      opposed to ISO C preprocessors.
   9672 
   9673 '-trigraphs'
   9674      Process trigraph sequences.  These are three-character sequences,
   9675      all starting with '??', that are defined by ISO C to stand for
   9676      single characters.  For example, '??/' stands for '\', so ''??/n''
   9677      is a character constant for a newline.  By default, GCC ignores
   9678      trigraphs, but in standard-conforming modes it converts them.  See
   9679      the '-std' and '-ansi' options.
   9680 
   9681      The nine trigraphs and their replacements are
   9682 
   9683           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
   9684           Replacement:      [    ]    {    }    #    \    ^    |    ~
   9685 
   9686 '-remap'
   9687      Enable special code to work around file systems which only permit
   9688      very short file names, such as MS-DOS.
   9689 
   9690 '--help'
   9691 '--target-help'
   9692      Print text describing all the command line options instead of
   9693      preprocessing anything.
   9694 
   9695 '-v'
   9696      Verbose mode.  Print out GNU CPP's version number at the beginning
   9697      of execution, and report the final form of the include path.
   9698 
   9699 '-H'
   9700      Print the name of each header file used, in addition to other
   9701      normal activities.  Each name is indented to show how deep in the
   9702      '#include' stack it is.  Precompiled header files are also printed,
   9703      even if they are found to be invalid; an invalid precompiled header
   9704      file is printed with '...x' and a valid one with '...!' .
   9705 
   9706 '-version'
   9707 '--version'
   9708      Print out GNU CPP's version number.  With one dash, proceed to
   9709      preprocess as normal.  With two dashes, exit immediately.
   9710 
   9711 
   9712 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
   9713 
   9714 3.12 Passing Options to the Assembler
   9715 =====================================
   9716 
   9717 You can pass options to the assembler.
   9718 
   9719 '-Wa,OPTION'
   9720      Pass OPTION as an option to the assembler.  If OPTION contains
   9721      commas, it is split into multiple options at the commas.
   9722 
   9723 '-Xassembler OPTION'
   9724      Pass OPTION as an option to the assembler.  You can use this to
   9725      supply system-specific assembler options that GCC does not
   9726      recognize.
   9727 
   9728      If you want to pass an option that takes an argument, you must use
   9729      '-Xassembler' twice, once for the option and once for the argument.
   9730 
   9731 
   9732 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
   9733 
   9734 3.13 Options for Linking
   9735 ========================
   9736 
   9737 These options come into play when the compiler links object files into
   9738 an executable output file.  They are meaningless if the compiler is not
   9739 doing a link step.
   9740 
   9741 'OBJECT-FILE-NAME'
   9742      A file name that does not end in a special recognized suffix is
   9743      considered to name an object file or library.  (Object files are
   9744      distinguished from libraries by the linker according to the file
   9745      contents.)  If linking is done, these object files are used as
   9746      input to the linker.
   9747 
   9748 '-c'
   9749 '-S'
   9750 '-E'
   9751      If any of these options is used, then the linker is not run, and
   9752      object file names should not be used as arguments.  *Note Overall
   9753      Options::.
   9754 
   9755 '-lLIBRARY'
   9756 '-l LIBRARY'
   9757      Search the library named LIBRARY when linking.  (The second
   9758      alternative with the library as a separate argument is only for
   9759      POSIX compliance and is not recommended.)
   9760 
   9761      It makes a difference where in the command you write this option;
   9762      the linker searches and processes libraries and object files in the
   9763      order they are specified.  Thus, 'foo.o -lz bar.o' searches library
   9764      'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
   9765      functions in 'z', those functions may not be loaded.
   9766 
   9767      The linker searches a standard list of directories for the library,
   9768      which is actually a file named 'libLIBRARY.a'.  The linker then
   9769      uses this file as if it had been specified precisely by name.
   9770 
   9771      The directories searched include several standard system
   9772      directories plus any that you specify with '-L'.
   9773 
   9774      Normally the files found this way are library files--archive files
   9775      whose members are object files.  The linker handles an archive file
   9776      by scanning through it for members which define symbols that have
   9777      so far been referenced but not defined.  But if the file that is
   9778      found is an ordinary object file, it is linked in the usual
   9779      fashion.  The only difference between using an '-l' option and
   9780      specifying a file name is that '-l' surrounds LIBRARY with 'lib'
   9781      and '.a' and searches several directories.
   9782 
   9783 '-lobjc'
   9784      You need this special case of the '-l' option in order to link an
   9785      Objective-C or Objective-C++ program.
   9786 
   9787 '-nostartfiles'
   9788      Do not use the standard system startup files when linking.  The
   9789      standard system libraries are used normally, unless '-nostdlib' or
   9790      '-nodefaultlibs' is used.
   9791 
   9792 '-nodefaultlibs'
   9793      Do not use the standard system libraries when linking.  Only the
   9794      libraries you specify are passed to the linker, and options
   9795      specifying linkage of the system libraries, such as
   9796      '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
   9797      startup files are used normally, unless '-nostartfiles' is used.
   9798 
   9799      The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
   9800      'memmove'.  These entries are usually resolved by entries in libc.
   9801      These entry points should be supplied through some other mechanism
   9802      when this option is specified.
   9803 
   9804 '-nostdlib'
   9805      Do not use the standard system startup files or libraries when
   9806      linking.  No startup files and only the libraries you specify are
   9807      passed to the linker, and options specifying linkage of the system
   9808      libraries, such as '-static-libgcc' or '-shared-libgcc', are
   9809      ignored.
   9810 
   9811      The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
   9812      'memmove'.  These entries are usually resolved by entries in libc.
   9813      These entry points should be supplied through some other mechanism
   9814      when this option is specified.
   9815 
   9816      One of the standard libraries bypassed by '-nostdlib' and
   9817      '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
   9818      which GCC uses to overcome shortcomings of particular machines, or
   9819      special needs for some languages.  (*Note Interfacing to GCC
   9820      Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
   9821      most cases, you need 'libgcc.a' even when you want to avoid other
   9822      standard libraries.  In other words, when you specify '-nostdlib'
   9823      or '-nodefaultlibs' you should usually specify '-lgcc' as well.
   9824      This ensures that you have no unresolved references to internal GCC
   9825      library subroutines.  (An example of such an internal subroutine is
   9826      '__main', used to ensure C++ constructors are called; *note
   9827      'collect2': (gccint)Collect2.)
   9828 
   9829 '-pie'
   9830      Produce a position independent executable on targets that support
   9831      it.  For predictable results, you must also specify the same set of
   9832      options used for compilation ('-fpie', '-fPIE', or model
   9833      suboptions) when you specify this linker option.
   9834 
   9835 '-rdynamic'
   9836      Pass the flag '-export-dynamic' to the ELF linker, on targets that
   9837      support it.  This instructs the linker to add all symbols, not only
   9838      used ones, to the dynamic symbol table.  This option is needed for
   9839      some uses of 'dlopen' or to allow obtaining backtraces from within
   9840      a program.
   9841 
   9842 '-s'
   9843      Remove all symbol table and relocation information from the
   9844      executable.
   9845 
   9846 '-static'
   9847      On systems that support dynamic linking, this prevents linking with
   9848      the shared libraries.  On other systems, this option has no effect.
   9849 
   9850 '-shared'
   9851      Produce a shared object which can then be linked with other objects
   9852      to form an executable.  Not all systems support this option.  For
   9853      predictable results, you must also specify the same set of options
   9854      used for compilation ('-fpic', '-fPIC', or model suboptions) when
   9855      you specify this linker option.(1)
   9856 
   9857 '-shared-libgcc'
   9858 '-static-libgcc'
   9859      On systems that provide 'libgcc' as a shared library, these options
   9860      force the use of either the shared or static version, respectively.
   9861      If no shared version of 'libgcc' was built when the compiler was
   9862      configured, these options have no effect.
   9863 
   9864      There are several situations in which an application should use the
   9865      shared 'libgcc' instead of the static version.  The most common of
   9866      these is when the application wishes to throw and catch exceptions
   9867      across different shared libraries.  In that case, each of the
   9868      libraries as well as the application itself should use the shared
   9869      'libgcc'.
   9870 
   9871      Therefore, the G++ and GCJ drivers automatically add
   9872      '-shared-libgcc' whenever you build a shared library or a main
   9873      executable, because C++ and Java programs typically use exceptions,
   9874      so this is the right thing to do.
   9875 
   9876      If, instead, you use the GCC driver to create shared libraries, you
   9877      may find that they are not always linked with the shared 'libgcc'.
   9878      If GCC finds, at its configuration time, that you have a non-GNU
   9879      linker or a GNU linker that does not support option
   9880      '--eh-frame-hdr', it links the shared version of 'libgcc' into
   9881      shared libraries by default.  Otherwise, it takes advantage of the
   9882      linker and optimizes away the linking with the shared version of
   9883      'libgcc', linking with the static version of libgcc by default.
   9884      This allows exceptions to propagate through such shared libraries,
   9885      without incurring relocation costs at library load time.
   9886 
   9887      However, if a library or main executable is supposed to throw or
   9888      catch exceptions, you must link it using the G++ or GCJ driver, as
   9889      appropriate for the languages used in the program, or using the
   9890      option '-shared-libgcc', such that it is linked with the shared
   9891      'libgcc'.
   9892 
   9893 '-static-libasan'
   9894      When the '-fsanitize=address' option is used to link a program, the
   9895      GCC driver automatically links against 'libasan'.  If 'libasan' is
   9896      available as a shared library, and the '-static' option is not
   9897      used, then this links against the shared version of 'libasan'.  The
   9898      '-static-libasan' option directs the GCC driver to link 'libasan'
   9899      statically, without necessarily linking other libraries statically.
   9900 
   9901 '-static-libtsan'
   9902      When the '-fsanitize=thread' option is used to link a program, the
   9903      GCC driver automatically links against 'libtsan'.  If 'libtsan' is
   9904      available as a shared library, and the '-static' option is not
   9905      used, then this links against the shared version of 'libtsan'.  The
   9906      '-static-libtsan' option directs the GCC driver to link 'libtsan'
   9907      statically, without necessarily linking other libraries statically.
   9908 
   9909 '-static-libstdc++'
   9910      When the 'g++' program is used to link a C++ program, it normally
   9911      automatically links against 'libstdc++'.  If 'libstdc++' is
   9912      available as a shared library, and the '-static' option is not
   9913      used, then this links against the shared version of 'libstdc++'.
   9914      That is normally fine.  However, it is sometimes useful to freeze
   9915      the version of 'libstdc++' used by the program without going all
   9916      the way to a fully static link.  The '-static-libstdc++' option
   9917      directs the 'g++' driver to link 'libstdc++' statically, without
   9918      necessarily linking other libraries statically.
   9919 
   9920 '-symbolic'
   9921      Bind references to global symbols when building a shared object.
   9922      Warn about any unresolved references (unless overridden by the link
   9923      editor option '-Xlinker -z -Xlinker defs').  Only a few systems
   9924      support this option.
   9925 
   9926 '-T SCRIPT'
   9927      Use SCRIPT as the linker script.  This option is supported by most
   9928      systems using the GNU linker.  On some targets, such as bare-board
   9929      targets without an operating system, the '-T' option may be
   9930      required when linking to avoid references to undefined symbols.
   9931 
   9932 '-Xlinker OPTION'
   9933      Pass OPTION as an option to the linker.  You can use this to supply
   9934      system-specific linker options that GCC does not recognize.
   9935 
   9936      If you want to pass an option that takes a separate argument, you
   9937      must use '-Xlinker' twice, once for the option and once for the
   9938      argument.  For example, to pass '-assert definitions', you must
   9939      write '-Xlinker -assert -Xlinker definitions'.  It does not work to
   9940      write '-Xlinker "-assert definitions"', because this passes the
   9941      entire string as a single argument, which is not what the linker
   9942      expects.
   9943 
   9944      When using the GNU linker, it is usually more convenient to pass
   9945      arguments to linker options using the 'OPTION=VALUE' syntax than as
   9946      separate arguments.  For example, you can specify '-Xlinker
   9947      -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
   9948      Other linkers may not support this syntax for command-line options.
   9949 
   9950 '-Wl,OPTION'
   9951      Pass OPTION as an option to the linker.  If OPTION contains commas,
   9952      it is split into multiple options at the commas.  You can use this
   9953      syntax to pass an argument to the option.  For example,
   9954      '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
   9955      using the GNU linker, you can also get the same effect with
   9956      '-Wl,-Map=output.map'.
   9957 
   9958 '-u SYMBOL'
   9959      Pretend the symbol SYMBOL is undefined, to force linking of library
   9960      modules to define it.  You can use '-u' multiple times with
   9961      different symbols to force loading of additional library modules.
   9962 
   9963    ---------- Footnotes ----------
   9964 
   9965    (1) On some systems, 'gcc -shared' needs to build supplementary stub
   9966 code for constructors to work.  On multi-libbed systems, 'gcc -shared'
   9967 must select the correct support libraries to link against.  Failing to
   9968 supply the correct flags may lead to subtle defects.  Supplying them in
   9969 cases where they are not necessary is innocuous.
   9970 
   9971 
   9972 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
   9973 
   9974 3.14 Options for Directory Search
   9975 =================================
   9976 
   9977 These options specify directories to search for header files, for
   9978 libraries and for parts of the compiler:
   9979 
   9980 '-IDIR'
   9981      Add the directory DIR to the head of the list of directories to be
   9982      searched for header files.  This can be used to override a system
   9983      header file, substituting your own version, since these directories
   9984      are searched before the system header file directories.  However,
   9985      you should not use this option to add directories that contain
   9986      vendor-supplied system header files (use '-isystem' for that).  If
   9987      you use more than one '-I' option, the directories are scanned in
   9988      left-to-right order; the standard system directories come after.
   9989 
   9990      If a standard system include directory, or a directory specified
   9991      with '-isystem', is also specified with '-I', the '-I' option is
   9992      ignored.  The directory is still searched but as a system directory
   9993      at its normal position in the system include chain.  This is to
   9994      ensure that GCC's procedure to fix buggy system headers and the
   9995      ordering for the 'include_next' directive are not inadvertently
   9996      changed.  If you really need to change the search order for system
   9997      directories, use the '-nostdinc' and/or '-isystem' options.
   9998 
   9999 '-iplugindir=DIR'
   10000      Set the directory to search for plugins that are passed by
   10001      '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
   10002      not meant to be used by the user, but only passed by the driver.
   10003 
   10004 '-iquoteDIR'
   10005      Add the directory DIR to the head of the list of directories to be
   10006      searched for header files only for the case of '#include "FILE"';
   10007      they are not searched for '#include <FILE>', otherwise just like
   10008      '-I'.
   10009 
   10010 '-LDIR'
   10011      Add directory DIR to the list of directories to be searched for
   10012      '-l'.
   10013 
   10014 '-BPREFIX'
   10015      This option specifies where to find the executables, libraries,
   10016      include files, and data files of the compiler itself.
   10017 
   10018      The compiler driver program runs one or more of the subprograms
   10019      'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
   10020      program it tries to run, both with and without 'MACHINE/VERSION/'
   10021      (*note Target Options::).
   10022 
   10023      For each subprogram to be run, the compiler driver first tries the
   10024      '-B' prefix, if any.  If that name is not found, or if '-B' is not
   10025      specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
   10026      and '/usr/local/lib/gcc/'.  If neither of those results in a file
   10027      name that is found, the unmodified program name is searched for
   10028      using the directories specified in your 'PATH' environment
   10029      variable.
   10030 
   10031      The compiler checks to see if the path provided by the '-B' refers
   10032      to a directory, and if necessary it adds a directory separator
   10033      character at the end of the path.
   10034 
   10035      '-B' prefixes that effectively specify directory names also apply
   10036      to libraries in the linker, because the compiler translates these
   10037      options into '-L' options for the linker.  They also apply to
   10038      includes files in the preprocessor, because the compiler translates
   10039      these options into '-isystem' options for the preprocessor.  In
   10040      this case, the compiler appends 'include' to the prefix.
   10041 
   10042      The runtime support file 'libgcc.a' can also be searched for using
   10043      the '-B' prefix, if needed.  If it is not found there, the two
   10044      standard prefixes above are tried, and that is all.  The file is
   10045      left out of the link if it is not found by those means.
   10046 
   10047      Another way to specify a prefix much like the '-B' prefix is to use
   10048      the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
   10049      Variables::.
   10050 
   10051      As a special kludge, if the path provided by '-B' is
   10052      '[dir/]stageN/', where N is a number in the range 0 to 9, then it
   10053      is replaced by '[dir/]include'.  This is to help with
   10054      boot-strapping the compiler.
   10055 
   10056 '-specs=FILE'
   10057      Process FILE after the compiler reads in the standard 'specs' file,
   10058      in order to override the defaults which the 'gcc' driver program
   10059      uses when determining what switches to pass to 'cc1', 'cc1plus',
   10060      'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
   10061      the command line, and they are processed in order, from left to
   10062      right.
   10063 
   10064 '--sysroot=DIR'
   10065      Use DIR as the logical root directory for headers and libraries.
   10066      For example, if the compiler normally searches for headers in
   10067      '/usr/include' and libraries in '/usr/lib', it instead searches
   10068      'DIR/usr/include' and 'DIR/usr/lib'.
   10069 
   10070      If you use both this option and the '-isysroot' option, then the
   10071      '--sysroot' option applies to libraries, but the '-isysroot' option
   10072      applies to header files.
   10073 
   10074      The GNU linker (beginning with version 2.16) has the necessary
   10075      support for this option.  If your linker does not support this
   10076      option, the header file aspect of '--sysroot' still works, but the
   10077      library aspect does not.
   10078 
   10079 '--no-sysroot-suffix'
   10080      For some targets, a suffix is added to the root directory specified
   10081      with '--sysroot', depending on the other options used, so that
   10082      headers may for example be found in 'DIR/SUFFIX/usr/include'
   10083      instead of 'DIR/usr/include'.  This option disables the addition of
   10084      such a suffix.
   10085 
   10086 '-I-'
   10087      This option has been deprecated.  Please use '-iquote' instead for
   10088      '-I' directories before the '-I-' and remove the '-I-'.  Any
   10089      directories you specify with '-I' options before the '-I-' option
   10090      are searched only for the case of '#include "FILE"'; they are not
   10091      searched for '#include <FILE>'.
   10092 
   10093      If additional directories are specified with '-I' options after the
   10094      '-I-', these directories are searched for all '#include'
   10095      directives.  (Ordinarily _all_ '-I' directories are used this way.)
   10096 
   10097      In addition, the '-I-' option inhibits the use of the current
   10098      directory (where the current input file came from) as the first
   10099      search directory for '#include "FILE"'.  There is no way to
   10100      override this effect of '-I-'.  With '-I.' you can specify
   10101      searching the directory that is current when the compiler is
   10102      invoked.  That is not exactly the same as what the preprocessor
   10103      does by default, but it is often satisfactory.
   10104 
   10105      '-I-' does not inhibit the use of the standard system directories
   10106      for header files.  Thus, '-I-' and '-nostdinc' are independent.
   10107 
   10108 
   10109 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
   10110 
   10111 3.15 Specifying subprocesses and the switches to pass to them
   10112 =============================================================
   10113 
   10114 'gcc' is a driver program.  It performs its job by invoking a sequence
   10115 of other programs to do the work of compiling, assembling and linking.
   10116 GCC interprets its command-line parameters and uses these to deduce
   10117 which programs it should invoke, and which command-line options it ought
   10118 to place on their command lines.  This behavior is controlled by "spec
   10119 strings".  In most cases there is one spec string for each program that
   10120 GCC can invoke, but a few programs have multiple spec strings to control
   10121 their behavior.  The spec strings built into GCC can be overridden by
   10122 using the '-specs=' command-line switch to specify a spec file.
   10123 
   10124  "Spec files" are plaintext files that are used to construct spec
   10125 strings.  They consist of a sequence of directives separated by blank
   10126 lines.  The type of directive is determined by the first non-whitespace
   10127 character on the line, which can be one of the following:
   10128 
   10129 '%COMMAND'
   10130      Issues a COMMAND to the spec file processor.  The commands that can
   10131      appear here are:
   10132 
   10133      '%include <FILE>'
   10134           Search for FILE and insert its text at the current point in
   10135           the specs file.
   10136 
   10137      '%include_noerr <FILE>'
   10138           Just like '%include', but do not generate an error message if
   10139           the include file cannot be found.
   10140 
   10141      '%rename OLD_NAME NEW_NAME'
   10142           Rename the spec string OLD_NAME to NEW_NAME.
   10143 
   10144 '*[SPEC_NAME]:'
   10145      This tells the compiler to create, override or delete the named
   10146      spec string.  All lines after this directive up to the next
   10147      directive or blank line are considered to be the text for the spec
   10148      string.  If this results in an empty string then the spec is
   10149      deleted.  (Or, if the spec did not exist, then nothing happens.)
   10150      Otherwise, if the spec does not currently exist a new spec is
   10151      created.  If the spec does exist then its contents are overridden
   10152      by the text of this directive, unless the first character of that
   10153      text is the '+' character, in which case the text is appended to
   10154      the spec.
   10155 
   10156 '[SUFFIX]:'
   10157      Creates a new '[SUFFIX] spec' pair.  All lines after this directive
   10158      and up to the next directive or blank line are considered to make
   10159      up the spec string for the indicated suffix.  When the compiler
   10160      encounters an input file with the named suffix, it processes the
   10161      spec string in order to work out how to compile that file.  For
   10162      example:
   10163 
   10164           .ZZ:
   10165           z-compile -input %i
   10166 
   10167      This says that any input file whose name ends in '.ZZ' should be
   10168      passed to the program 'z-compile', which should be invoked with the
   10169      command-line switch '-input' and with the result of performing the
   10170      '%i' substitution.  (See below.)
   10171 
   10172      As an alternative to providing a spec string, the text following a
   10173      suffix directive can be one of the following:
   10174 
   10175      '@LANGUAGE'
   10176           This says that the suffix is an alias for a known LANGUAGE.
   10177           This is similar to using the '-x' command-line switch to GCC
   10178           to specify a language explicitly.  For example:
   10179 
   10180                .ZZ:
   10181                @c++
   10182 
   10183           Says that .ZZ files are, in fact, C++ source files.
   10184 
   10185      '#NAME'
   10186           This causes an error messages saying:
   10187 
   10188                NAME compiler not installed on this system.
   10189 
   10190      GCC already has an extensive list of suffixes built into it.  This
   10191      directive adds an entry to the end of the list of suffixes, but
   10192      since the list is searched from the end backwards, it is
   10193      effectively possible to override earlier entries using this
   10194      technique.
   10195 
   10196  GCC has the following spec strings built into it.  Spec files can
   10197 override these strings or create their own.  Note that individual
   10198 targets can also add their own spec strings to this list.
   10199 
   10200      asm          Options to pass to the assembler
   10201      asm_final    Options to pass to the assembler post-processor
   10202      cpp          Options to pass to the C preprocessor
   10203      cc1          Options to pass to the C compiler
   10204      cc1plus      Options to pass to the C++ compiler
   10205      endfile      Object files to include at the end of the link
   10206      link         Options to pass to the linker
   10207      lib          Libraries to include on the command line to the linker
   10208      libgcc       Decides which GCC support library to pass to the linker
   10209      linker       Sets the name of the linker
   10210      predefines   Defines to be passed to the C preprocessor
   10211      signed_char  Defines to pass to CPP to say whether char is signed
   10212                   by default
   10213      startfile    Object files to include at the start of the link
   10214 
   10215  Here is a small example of a spec file:
   10216 
   10217      %rename lib                 old_lib
   10218 
   10219      *lib:
   10220      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
   10221 
   10222  This example renames the spec called 'lib' to 'old_lib' and then
   10223 overrides the previous definition of 'lib' with a new one.  The new
   10224 definition adds in some extra command-line options before including the
   10225 text of the old definition.
   10226 
   10227  "Spec strings" are a list of command-line options to be passed to their
   10228 corresponding program.  In addition, the spec strings can contain
   10229 '%'-prefixed sequences to substitute variable text or to conditionally
   10230 insert text into the command line.  Using these constructs it is
   10231 possible to generate quite complex command lines.
   10232 
   10233  Here is a table of all defined '%'-sequences for spec strings.  Note
   10234 that spaces are not generated automatically around the results of
   10235 expanding these sequences.  Therefore you can concatenate them together
   10236 or combine them with constant text in a single argument.
   10237 
   10238 '%%'
   10239      Substitute one '%' into the program name or argument.
   10240 
   10241 '%i'
   10242      Substitute the name of the input file being processed.
   10243 
   10244 '%b'
   10245      Substitute the basename of the input file being processed.  This is
   10246      the substring up to (and not including) the last period and not
   10247      including the directory.
   10248 
   10249 '%B'
   10250      This is the same as '%b', but include the file suffix (text after
   10251      the last period).
   10252 
   10253 '%d'
   10254      Marks the argument containing or following the '%d' as a temporary
   10255      file name, so that that file is deleted if GCC exits successfully.
   10256      Unlike '%g', this contributes no text to the argument.
   10257 
   10258 '%gSUFFIX'
   10259      Substitute a file name that has suffix SUFFIX and is chosen once
   10260      per compilation, and mark the argument in the same way as '%d'.  To
   10261      reduce exposure to denial-of-service attacks, the file name is now
   10262      chosen in a way that is hard to predict even when previously chosen
   10263      file names are known.  For example, '%g.s ... %g.o ... %g.s' might
   10264      turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
   10265      regexp '[.A-Za-z]*' or the special string '%O', which is treated
   10266      exactly as if '%O' had been preprocessed.  Previously, '%g' was
   10267      simply substituted with a file name chosen once per compilation,
   10268      without regard to any appended suffix (which was therefore treated
   10269      just like ordinary text), making such attacks more likely to
   10270      succeed.
   10271 
   10272 '%uSUFFIX'
   10273      Like '%g', but generates a new temporary file name each time it
   10274      appears instead of once per compilation.
   10275 
   10276 '%USUFFIX'
   10277      Substitutes the last file name generated with '%uSUFFIX',
   10278      generating a new one if there is no such last file name.  In the
   10279      absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
   10280      they don't share the same suffix _space_, so '%g.s ... %U.s ...
   10281      %g.s ... %U.s' involves the generation of two distinct file names,
   10282      one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
   10283      was simply substituted with a file name chosen for the previous
   10284      '%u', without regard to any appended suffix.
   10285 
   10286 '%jSUFFIX'
   10287      Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
   10288      writable, and if '-save-temps' is not used; otherwise, substitute
   10289      the name of a temporary file, just like '%u'.  This temporary file
   10290      is not meant for communication between processes, but rather as a
   10291      junk disposal mechanism.
   10292 
   10293 '%|SUFFIX'
   10294 '%mSUFFIX'
   10295      Like '%g', except if '-pipe' is in effect.  In that case '%|'
   10296      substitutes a single dash and '%m' substitutes nothing at all.
   10297      These are the two most common ways to instruct a program that it
   10298      should read from standard input or write to standard output.  If
   10299      you need something more elaborate you can use an '%{pipe:'X'}'
   10300      construct: see for example 'f/lang-specs.h'.
   10301 
   10302 '%.SUFFIX'
   10303      Substitutes .SUFFIX for the suffixes of a matched switch's args
   10304      when it is subsequently output with '%*'.  SUFFIX is terminated by
   10305      the next space or %.
   10306 
   10307 '%w'
   10308      Marks the argument containing or following the '%w' as the
   10309      designated output file of this compilation.  This puts the argument
   10310      into the sequence of arguments that '%o' substitutes.
   10311 
   10312 '%o'
   10313      Substitutes the names of all the output files, with spaces
   10314      automatically placed around them.  You should write spaces around
   10315      the '%o' as well or the results are undefined.  '%o' is for use in
   10316      the specs for running the linker.  Input files whose names have no
   10317      recognized suffix are not compiled at all, but they are included
   10318      among the output files, so they are linked.
   10319 
   10320 '%O'
   10321      Substitutes the suffix for object files.  Note that this is handled
   10322      specially when it immediately follows '%g, %u, or %U', because of
   10323      the need for those to form complete file names.  The handling is
   10324      such that '%O' is treated exactly as if it had already been
   10325      substituted, except that '%g, %u, and %U' do not currently support
   10326      additional SUFFIX characters following '%O' as they do following,
   10327      for example, '.o'.
   10328 
   10329 '%p'
   10330      Substitutes the standard macro predefinitions for the current
   10331      target machine.  Use this when running 'cpp'.
   10332 
   10333 '%P'
   10334      Like '%p', but puts '__' before and after the name of each
   10335      predefined macro, except for macros that start with '__' or with
   10336      '_L', where L is an uppercase letter.  This is for ISO C.
   10337 
   10338 '%I'
   10339      Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
   10340      '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
   10341      'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.
   10342 
   10343 '%s'
   10344      Current argument is the name of a library or startup file of some
   10345      sort.  Search for that file in a standard list of directories and
   10346      substitute the full name found.  The current working directory is
   10347      included in the list of directories scanned.
   10348 
   10349 '%T'
   10350      Current argument is the name of a linker script.  Search for that
   10351      file in the current list of directories to scan for libraries.  If
   10352      the file is located insert a '--script' option into the command
   10353      line followed by the full path name found.  If the file is not
   10354      found then generate an error message.  Note: the current working
   10355      directory is not searched.
   10356 
   10357 '%eSTR'
   10358      Print STR as an error message.  STR is terminated by a newline.
   10359      Use this when inconsistent options are detected.
   10360 
   10361 '%(NAME)'
   10362      Substitute the contents of spec string NAME at this point.
   10363 
   10364 '%x{OPTION}'
   10365      Accumulate an option for '%X'.
   10366 
   10367 '%X'
   10368      Output the accumulated linker options specified by '-Wl' or a '%x'
   10369      spec string.
   10370 
   10371 '%Y'
   10372      Output the accumulated assembler options specified by '-Wa'.
   10373 
   10374 '%Z'
   10375      Output the accumulated preprocessor options specified by '-Wp'.
   10376 
   10377 '%a'
   10378      Process the 'asm' spec.  This is used to compute the switches to be
   10379      passed to the assembler.
   10380 
   10381 '%A'
   10382      Process the 'asm_final' spec.  This is a spec string for passing
   10383      switches to an assembler post-processor, if such a program is
   10384      needed.
   10385 
   10386 '%l'
   10387      Process the 'link' spec.  This is the spec for computing the
   10388      command line passed to the linker.  Typically it makes use of the
   10389      '%L %G %S %D and %E' sequences.
   10390 
   10391 '%D'
   10392      Dump out a '-L' option for each directory that GCC believes might
   10393      contain startup files.  If the target supports multilibs then the
   10394      current multilib directory is prepended to each of these paths.
   10395 
   10396 '%L'
   10397      Process the 'lib' spec.  This is a spec string for deciding which
   10398      libraries are included on the command line to the linker.
   10399 
   10400 '%G'
   10401      Process the 'libgcc' spec.  This is a spec string for deciding
   10402      which GCC support library is included on the command line to the
   10403      linker.
   10404 
   10405 '%S'
   10406      Process the 'startfile' spec.  This is a spec for deciding which
   10407      object files are the first ones passed to the linker.  Typically
   10408      this might be a file named 'crt0.o'.
   10409 
   10410 '%E'
   10411      Process the 'endfile' spec.  This is a spec string that specifies
   10412      the last object files that are passed to the linker.
   10413 
   10414 '%C'
   10415      Process the 'cpp' spec.  This is used to construct the arguments to
   10416      be passed to the C preprocessor.
   10417 
   10418 '%1'
   10419      Process the 'cc1' spec.  This is used to construct the options to
   10420      be passed to the actual C compiler ('cc1').
   10421 
   10422 '%2'
   10423      Process the 'cc1plus' spec.  This is used to construct the options
   10424      to be passed to the actual C++ compiler ('cc1plus').
   10425 
   10426 '%*'
   10427      Substitute the variable part of a matched option.  See below.  Note
   10428      that each comma in the substituted string is replaced by a single
   10429      space.
   10430 
   10431 '%<S'
   10432      Remove all occurrences of '-S' from the command line.  Note--this
   10433      command is position dependent.  '%' commands in the spec string
   10434      before this one see '-S', '%' commands in the spec string after
   10435      this one do not.
   10436 
   10437 '%:FUNCTION(ARGS)'
   10438      Call the named function FUNCTION, passing it ARGS.  ARGS is first
   10439      processed as a nested spec string, then split into an argument
   10440      vector in the usual fashion.  The function returns a string which
   10441      is processed as if it had appeared literally as part of the current
   10442      spec.
   10443 
   10444      The following built-in spec functions are provided:
   10445 
   10446      'getenv'
   10447           The 'getenv' spec function takes two arguments: an environment
   10448           variable name and a string.  If the environment variable is
   10449           not defined, a fatal error is issued.  Otherwise, the return
   10450           value is the value of the environment variable concatenated
   10451           with the string.  For example, if 'TOPDIR' is defined as
   10452           '/path/to/top', then:
   10453 
   10454                %:getenv(TOPDIR /include)
   10455 
   10456           expands to '/path/to/top/include'.
   10457 
   10458      'if-exists'
   10459           The 'if-exists' spec function takes one argument, an absolute
   10460           pathname to a file.  If the file exists, 'if-exists' returns
   10461           the pathname.  Here is a small example of its usage:
   10462 
   10463                *startfile:
   10464                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
   10465 
   10466      'if-exists-else'
   10467           The 'if-exists-else' spec function is similar to the
   10468           'if-exists' spec function, except that it takes two arguments.
   10469           The first argument is an absolute pathname to a file.  If the
   10470           file exists, 'if-exists-else' returns the pathname.  If it
   10471           does not exist, it returns the second argument.  This way,
   10472           'if-exists-else' can be used to select one file or another,
   10473           based on the existence of the first.  Here is a small example
   10474           of its usage:
   10475 
   10476                *startfile:
   10477                crt0%O%s %:if-exists(crti%O%s) \
   10478                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
   10479 
   10480      'replace-outfile'
   10481           The 'replace-outfile' spec function takes two arguments.  It
   10482           looks for the first argument in the outfiles array and
   10483           replaces it with the second argument.  Here is a small example
   10484           of its usage:
   10485 
   10486                %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
   10487 
   10488      'remove-outfile'
   10489           The 'remove-outfile' spec function takes one argument.  It
   10490           looks for the first argument in the outfiles array and removes
   10491           it.  Here is a small example its usage:
   10492 
   10493                %:remove-outfile(-lm)
   10494 
   10495      'pass-through-libs'
   10496           The 'pass-through-libs' spec function takes any number of
   10497           arguments.  It finds any '-l' options and any non-options
   10498           ending in '.a' (which it assumes are the names of linker input
   10499           library archive files) and returns a result containing all the
   10500           found arguments each prepended by '-plugin-opt=-pass-through='
   10501           and joined by spaces.  This list is intended to be passed to
   10502           the LTO linker plugin.
   10503 
   10504                %:pass-through-libs(%G %L %G)
   10505 
   10506      'print-asm-header'
   10507           The 'print-asm-header' function takes no arguments and simply
   10508           prints a banner like:
   10509 
   10510                Assembler options
   10511                =================
   10512 
   10513                Use "-Wa,OPTION" to pass "OPTION" to the assembler.
   10514 
   10515           It is used to separate compiler options from assembler options
   10516           in the '--target-help' output.
   10517 
   10518 '%{S}'
   10519      Substitutes the '-S' switch, if that switch is given to GCC.  If
   10520      that switch is not specified, this substitutes nothing.  Note that
   10521      the leading dash is omitted when specifying this option, and it is
   10522      automatically inserted if the substitution is performed.  Thus the
   10523      spec string '%{foo}' matches the command-line option '-foo' and
   10524      outputs the command-line option '-foo'.
   10525 
   10526 '%W{S}'
   10527      Like %{'S'} but mark last argument supplied within as a file to be
   10528      deleted on failure.
   10529 
   10530 '%{S*}'
   10531      Substitutes all the switches specified to GCC whose names start
   10532      with '-S', but which also take an argument.  This is used for
   10533      switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
   10534      being one switch whose name starts with 'o'.  %{o*} substitutes
   10535      this text, including the space.  Thus two arguments are generated.
   10536 
   10537 '%{S*&T*}'
   10538      Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
   10539      of 'S' and 'T' in the spec is not significant).  There can be any
   10540      number of ampersand-separated variables; for each the wild card is
   10541      optional.  Useful for CPP as '%{D*&U*&A*}'.
   10542 
   10543 '%{S:X}'
   10544      Substitutes 'X', if the '-S' switch is given to GCC.
   10545 
   10546 '%{!S:X}'
   10547      Substitutes 'X', if the '-S' switch is _not_ given to GCC.
   10548 
   10549 '%{S*:X}'
   10550      Substitutes 'X' if one or more switches whose names start with '-S'
   10551      are specified to GCC.  Normally 'X' is substituted only once, no
   10552      matter how many such switches appeared.  However, if '%*' appears
   10553      somewhere in 'X', then 'X' is substituted once for each matching
   10554      switch, with the '%*' replaced by the part of that switch matching
   10555      the '*'.
   10556 
   10557 '%{.S:X}'
   10558      Substitutes 'X', if processing a file with suffix 'S'.
   10559 
   10560 '%{!.S:X}'
   10561      Substitutes 'X', if _not_ processing a file with suffix 'S'.
   10562 
   10563 '%{,S:X}'
   10564      Substitutes 'X', if processing a file for language 'S'.
   10565 
   10566 '%{!,S:X}'
   10567      Substitutes 'X', if not processing a file for language 'S'.
   10568 
   10569 '%{S|P:X}'
   10570      Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
   10571      be combined with '!', '.', ',', and '*' sequences as well, although
   10572      they have a stronger binding than the '|'.  If '%*' appears in 'X',
   10573      all of the alternatives must be starred, and only the first
   10574      matching alternative is substituted.
   10575 
   10576      For example, a spec string like this:
   10577 
   10578           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
   10579 
   10580      outputs the following command-line options from the following input
   10581      command-line options:
   10582 
   10583           fred.c        -foo -baz
   10584           jim.d         -bar -boggle
   10585           -d fred.c     -foo -baz -boggle
   10586           -d jim.d      -bar -baz -boggle
   10587 
   10588 '%{S:X; T:Y; :D}'
   10589 
   10590      If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
   10591      GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
   10592      clauses as you need.  This may be combined with '.', ',', '!', '|',
   10593      and '*' as needed.
   10594 
   10595  The conditional text 'X' in a %{'S':'X'} or similar construct may
   10596 contain other nested '%' constructs or spaces, or even newlines.  They
   10597 are processed as usual, as described above.  Trailing white space in 'X'
   10598 is ignored.  White space may also appear anywhere on the left side of
   10599 the colon in these constructs, except between '.' or '*' and the
   10600 corresponding word.
   10601 
   10602  The '-O', '-f', '-m', and '-W' switches are handled specifically in
   10603 these constructs.  If another value of '-O' or the negated form of a
   10604 '-f', '-m', or '-W' switch is found later in the command line, the
   10605 earlier switch value is ignored, except with {'S'*} where 'S' is just
   10606 one letter, which passes all matching options.
   10607 
   10608  The character '|' at the beginning of the predicate text is used to
   10609 indicate that a command should be piped to the following command, but
   10610 only if '-pipe' is specified.
   10611 
   10612  It is built into GCC which switches take arguments and which do not.
   10613 (You might think it would be useful to generalize this to allow each
   10614 compiler's spec to say which switches take arguments.  But this cannot
   10615 be done in a consistent fashion.  GCC cannot even decide which input
   10616 files have been specified without knowing which switches take arguments,
   10617 and it must know which input files to compile in order to tell which
   10618 compilers to run).
   10619 
   10620  GCC also knows implicitly that arguments starting in '-l' are to be
   10621 treated as compiler output files, and passed to the linker in their
   10622 proper position among the other output files.
   10623 
   10624 
   10625 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
   10626 
   10627 3.16 Specifying Target Machine and Compiler Version
   10628 ===================================================
   10629 
   10630 The usual way to run GCC is to run the executable called 'gcc', or
   10631 'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
   10632 version other than the one that was installed last.
   10633 
   10634 
   10635 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
   10636 
   10637 3.17 Hardware Models and Configurations
   10638 =======================================
   10639 
   10640 Each target machine types can have its own special options, starting
   10641 with '-m', to choose among various hardware models or
   10642 configurations--for example, 68010 vs 68020, floating coprocessor or
   10643 none.  A single installed version of the compiler can compile for any
   10644 model or configuration, according to the options specified.
   10645 
   10646  Some configurations of the compiler also support additional special
   10647 options, usually for compatibility with other compilers on the same
   10648 platform.
   10649 
   10650 * Menu:
   10651 
   10652 * AArch64 Options::
   10653 * Adapteva Epiphany Options::
   10654 * ARM Options::
   10655 * AVR Options::
   10656 * Blackfin Options::
   10657 * C6X Options::
   10658 * CRIS Options::
   10659 * CR16 Options::
   10660 * Darwin Options::
   10661 * DEC Alpha Options::
   10662 * FR30 Options::
   10663 * FRV Options::
   10664 * GNU/Linux Options::
   10665 * H8/300 Options::
   10666 * HPPA Options::
   10667 * i386 and x86-64 Options::
   10668 * i386 and x86-64 Windows Options::
   10669 * IA-64 Options::
   10670 * LM32 Options::
   10671 * M32C Options::
   10672 * M32R/D Options::
   10673 * M680x0 Options::
   10674 * MCore Options::
   10675 * MeP Options::
   10676 * MicroBlaze Options::
   10677 * MIPS Options::
   10678 * MMIX Options::
   10679 * MN10300 Options::
   10680 * Moxie Options::
   10681 * PDP-11 Options::
   10682 * picoChip Options::
   10683 * PowerPC Options::
   10684 * RL78 Options::
   10685 * RS/6000 and PowerPC Options::
   10686 * RX Options::
   10687 * S/390 and zSeries Options::
   10688 * Score Options::
   10689 * SH Options::
   10690 * Solaris 2 Options::
   10691 * SPARC Options::
   10692 * SPU Options::
   10693 * System V Options::
   10694 * TILE-Gx Options::
   10695 * TILEPro Options::
   10696 * V850 Options::
   10697 * VAX Options::
   10698 * VMS Options::
   10699 * VxWorks Options::
   10700 * x86-64 Options::
   10701 * Xstormy16 Options::
   10702 * Xtensa Options::
   10703 * zSeries Options::
   10704 
   10705 
   10706 File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
   10707 
   10708 3.17.1 AArch64 Options
   10709 ----------------------
   10710 
   10711 These options are defined for AArch64 implementations:
   10712 
   10713 '-mbig-endian'
   10714      Generate big-endian code.  This is the default when GCC is
   10715      configured for an 'aarch64_be-*-*' target.
   10716 
   10717 '-mgeneral-regs-only'
   10718      Generate code which uses only the general registers.
   10719 
   10720 '-mlittle-endian'
   10721      Generate little-endian code.  This is the default when GCC is
   10722      configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.
   10723 
   10724 '-mcmodel=tiny'
   10725      Generate code for the tiny code model.  The program and its
   10726      statically defined symbols must be within 1GB of each other.
   10727      Pointers are 64 bits.  Programs can be statically or dynamically
   10728      linked.  This model is not fully implemented and mostly treated as
   10729      'small'.
   10730 
   10731 '-mcmodel=small'
   10732      Generate code for the small code model.  The program and its
   10733      statically defined symbols must be within 4GB of each other.
   10734      Pointers are 64 bits.  Programs can be statically or dynamically
   10735      linked.  This is the default code model.
   10736 
   10737 '-mcmodel=large'
   10738      Generate code for the large code model.  This makes no assumptions
   10739      about addresses and sizes of sections.  Pointers are 64 bits.
   10740      Programs can be statically linked only.
   10741 
   10742 '-mstrict-align'
   10743      Do not assume that unaligned memory references will be handled by
   10744      the system.
   10745 
   10746 '-momit-leaf-frame-pointer'
   10747 '-mno-omit-leaf-frame-pointer'
   10748      Omit or keep the frame pointer in leaf functions.  The former
   10749      behaviour is the default.
   10750 
   10751 '-mtls-dialect=desc'
   10752      Use TLS descriptors as the thread-local storage mechanism for
   10753      dynamic accesses of TLS variables.  This is the default.
   10754 
   10755 '-mtls-dialect=traditional'
   10756      Use traditional TLS as the thread-local storage mechanism for
   10757      dynamic accesses of TLS variables.
   10758 
   10759 '-march=NAME'
   10760      Specify the name of the target architecture, optionally suffixed by
   10761      one or more feature modifiers.  This option has the form
   10762      '-march=ARCH{+[no]FEATURE}*', where the only value for ARCH is
   10763      'armv8-a'.  The possible values for FEATURE are documented in the
   10764      sub-section below.
   10765 
   10766      Where conflicting feature modifiers are specified, the right-most
   10767      feature is used.
   10768 
   10769      GCC uses this name to determine what kind of instructions it can
   10770      emit when generating assembly code.  This option can be used in
   10771      conjunction with or instead of the '-mcpu=' option.
   10772 
   10773 '-mcpu=NAME'
   10774      Specify the name of the target processor, optionally suffixed by
   10775      one or more feature modifiers.  This option has the form
   10776      '-mcpu=CPU{+[no]FEATURE}*', where the possible values for CPU are
   10777      'generic', 'large'.  The possible values for FEATURE are documented
   10778      in the sub-section below.
   10779 
   10780      Where conflicting feature modifiers are specified, the right-most
   10781      feature is used.
   10782 
   10783      GCC uses this name to determine what kind of instructions it can
   10784      emit when generating assembly code.
   10785 
   10786 '-mtune=NAME'
   10787      Specify the name of the processor to tune the performance for.  The
   10788      code will be tuned as if the target processor were of the type
   10789      specified in this option, but still using instructions compatible
   10790      with the target processor specified by a '-mcpu=' option.  This
   10791      option cannot be suffixed by feature modifiers.
   10792 
   10793 3.17.1.1 '-march' and '-mcpu' feature modifiers
   10794 ...............................................
   10795 
   10796 Feature modifiers used with '-march' and '-mcpu' can be one the
   10797 following:
   10798 
   10799 'crypto'
   10800      Enable Crypto extension.  This implies Advanced SIMD is enabled.
   10801 'fp'
   10802      Enable floating-point instructions.
   10803 'simd'
   10804      Enable Advanced SIMD instructions.  This implies floating-point
   10805      instructions are enabled.  This is the default for all current
   10806      possible values for options '-march' and '-mcpu='.
   10807 
   10808 
   10809 File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARM Options,  Prev: AArch64 Options,  Up: Submodel Options
   10810 
   10811 3.17.2 Adapteva Epiphany Options
   10812 --------------------------------
   10813 
   10814 These '-m' options are defined for Adapteva Epiphany:
   10815 
   10816 '-mhalf-reg-file'
   10817      Don't allocate any register in the range 'r32'...'r63'.  That
   10818      allows code to run on hardware variants that lack these registers.
   10819 
   10820 '-mprefer-short-insn-regs'
   10821      Preferrentially allocate registers that allow short instruction
   10822      generation.  This can result in increased instruction count, so
   10823      this may either reduce or increase overall code size.
   10824 
   10825 '-mbranch-cost=NUM'
   10826      Set the cost of branches to roughly NUM "simple" instructions.
   10827      This cost is only a heuristic and is not guaranteed to produce
   10828      consistent results across releases.
   10829 
   10830 '-mcmove'
   10831      Enable the generation of conditional moves.
   10832 
   10833 '-mnops=NUM'
   10834      Emit NUM NOPs before every other generated instruction.
   10835 
   10836 '-mno-soft-cmpsf'
   10837      For single-precision floating-point comparisons, emit an 'fsub'
   10838      instruction and test the flags.  This is faster than a software
   10839      comparison, but can get incorrect results in the presence of NaNs,
   10840      or when two different small numbers are compared such that their
   10841      difference is calculated as zero.  The default is '-msoft-cmpsf',
   10842      which uses slower, but IEEE-compliant, software comparisons.
   10843 
   10844 '-mstack-offset=NUM'
   10845      Set the offset between the top of the stack and the stack pointer.
   10846      E.g., a value of 8 means that the eight bytes in the range
   10847      'sp+0...sp+7' can be used by leaf functions without stack
   10848      allocation.  Values other than '8' or '16' are untested and
   10849      unlikely to work.  Note also that this option changes the ABI;
   10850      compiling a program with a different stack offset than the
   10851      libraries have been compiled with generally does not work.  This
   10852      option can be useful if you want to evaluate if a different stack
   10853      offset would give you better code, but to actually use a different
   10854      stack offset to build working programs, it is recommended to
   10855      configure the toolchain with the appropriate
   10856      '--with-stack-offset=NUM' option.
   10857 
   10858 '-mno-round-nearest'
   10859      Make the scheduler assume that the rounding mode has been set to
   10860      truncating.  The default is '-mround-nearest'.
   10861 
   10862 '-mlong-calls'
   10863      If not otherwise specified by an attribute, assume all calls might
   10864      be beyond the offset range of the 'b' / 'bl' instructions, and
   10865      therefore load the function address into a register before
   10866      performing a (otherwise direct) call.  This is the default.
   10867 
   10868 '-mshort-calls'
   10869      If not otherwise specified by an attribute, assume all direct calls
   10870      are in the range of the 'b' / 'bl' instructions, so use these
   10871      instructions for direct calls.  The default is '-mlong-calls'.
   10872 
   10873 '-msmall16'
   10874      Assume addresses can be loaded as 16-bit unsigned values.  This
   10875      does not apply to function addresses for which '-mlong-calls'
   10876      semantics are in effect.
   10877 
   10878 '-mfp-mode=MODE'
   10879      Set the prevailing mode of the floating-point unit.  This
   10880      determines the floating-point mode that is provided and expected at
   10881      function call and return time.  Making this mode match the mode you
   10882      predominantly need at function start can make your programs smaller
   10883      and faster by avoiding unnecessary mode switches.
   10884 
   10885      MODE can be set to one the following values:
   10886 
   10887      'caller'
   10888           Any mode at function entry is valid, and retained or restored
   10889           when the function returns, and when it calls other functions.
   10890           This mode is useful for compiling libraries or other
   10891           compilation units you might want to incorporate into different
   10892           programs with different prevailing FPU modes, and the
   10893           convenience of being able to use a single object file
   10894           outweighs the size and speed overhead for any extra mode
   10895           switching that might be needed, compared with what would be
   10896           needed with a more specific choice of prevailing FPU mode.
   10897 
   10898      'truncate'
   10899           This is the mode used for floating-point calculations with
   10900           truncating (i.e. round towards zero) rounding mode.  That
   10901           includes conversion from floating point to integer.
   10902 
   10903      'round-nearest'
   10904           This is the mode used for floating-point calculations with
   10905           round-to-nearest-or-even rounding mode.
   10906 
   10907      'int'
   10908           This is the mode used to perform integer calculations in the
   10909           FPU, e.g. integer multiply, or integer
   10910           multiply-and-accumulate.
   10911 
   10912      The default is '-mfp-mode=caller'
   10913 
   10914 '-mnosplit-lohi'
   10915 '-mno-postinc'
   10916 '-mno-postmodify'
   10917      Code generation tweaks that disable, respectively, splitting of
   10918      32-bit loads, generation of post-increment addresses, and
   10919      generation of post-modify addresses.  The defaults are
   10920      'msplit-lohi', '-mpost-inc', and '-mpost-modify'.
   10921 
   10922 '-mnovect-double'
   10923      Change the preferred SIMD mode to SImode.  The default is
   10924      '-mvect-double', which uses DImode as preferred SIMD mode.
   10925 
   10926 '-max-vect-align=NUM'
   10927      The maximum alignment for SIMD vector mode types.  NUM may be 4 or
   10928      8.  The default is 8.  Note that this is an ABI change, even though
   10929      many library function interfaces are unaffected if they don't use
   10930      SIMD vector modes in places that affect size and/or alignment of
   10931      relevant types.
   10932 
   10933 '-msplit-vecmove-early'
   10934      Split vector moves into single word moves before reload.  In theory
   10935      this can give better register allocation, but so far the reverse
   10936      seems to be generally the case.
   10937 
   10938 '-m1reg-REG'
   10939      Specify a register to hold the constant -1, which makes loading
   10940      small negative constants and certain bitmasks faster.  Allowable
   10941      values for REG are 'r43' and 'r63', which specify use of that
   10942      register as a fixed register, and 'none', which means that no
   10943      register is used for this purpose.  The default is '-m1reg-none'.
   10944 
   10945 
   10946 File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
   10947 
   10948 3.17.3 ARM Options
   10949 ------------------
   10950 
   10951 These '-m' options are defined for Advanced RISC Machines (ARM)
   10952 architectures:
   10953 
   10954 '-mabi=NAME'
   10955      Generate code for the specified ABI.  Permissible values are:
   10956      'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.
   10957 
   10958 '-mapcs-frame'
   10959      Generate a stack frame that is compliant with the ARM Procedure
   10960      Call Standard for all functions, even if this is not strictly
   10961      necessary for correct execution of the code.  Specifying
   10962      '-fomit-frame-pointer' with this option causes the stack frames not
   10963      to be generated for leaf functions.  The default is
   10964      '-mno-apcs-frame'.
   10965 
   10966 '-mapcs'
   10967      This is a synonym for '-mapcs-frame'.
   10968 
   10969 '-mthumb-interwork'
   10970      Generate code that supports calling between the ARM and Thumb
   10971      instruction sets.  Without this option, on pre-v5 architectures,
   10972      the two instruction sets cannot be reliably used inside one
   10973      program.  The default is '-mno-thumb-interwork', since slightly
   10974      larger code is generated when '-mthumb-interwork' is specified.  In
   10975      AAPCS configurations this option is meaningless.
   10976 
   10977 '-mno-sched-prolog'
   10978      Prevent the reordering of instructions in the function prologue, or
   10979      the merging of those instruction with the instructions in the
   10980      function's body.  This means that all functions start with a
   10981      recognizable set of instructions (or in fact one of a choice from a
   10982      small set of different function prologues), and this information
   10983      can be used to locate the start of functions inside an executable
   10984      piece of code.  The default is '-msched-prolog'.
   10985 
   10986 '-mfloat-abi=NAME'
   10987      Specifies which floating-point ABI to use.  Permissible values are:
   10988      'soft', 'softfp' and 'hard'.
   10989 
   10990      Specifying 'soft' causes GCC to generate output containing library
   10991      calls for floating-point operations.  'softfp' allows the
   10992      generation of code using hardware floating-point instructions, but
   10993      still uses the soft-float calling conventions.  'hard' allows
   10994      generation of floating-point instructions and uses FPU-specific
   10995      calling conventions.
   10996 
   10997      The default depends on the specific target configuration.  Note
   10998      that the hard-float and soft-float ABIs are not link-compatible;
   10999      you must compile your entire program with the same ABI, and link
   11000      with a compatible set of libraries.
   11001 
   11002 '-mlittle-endian'
   11003      Generate code for a processor running in little-endian mode.  This
   11004      is the default for all standard configurations.
   11005 
   11006 '-mbig-endian'
   11007      Generate code for a processor running in big-endian mode; the
   11008      default is to compile code for a little-endian processor.
   11009 
   11010 '-mwords-little-endian'
   11011      This option only applies when generating code for big-endian
   11012      processors.  Generate code for a little-endian word order but a
   11013      big-endian byte order.  That is, a byte order of the form
   11014      '32107654'.  Note: this option should only be used if you require
   11015      compatibility with code for big-endian ARM processors generated by
   11016      versions of the compiler prior to 2.8.  This option is now
   11017      deprecated.
   11018 
   11019 '-march=NAME'
   11020      This specifies the name of the target ARM architecture.  GCC uses
   11021      this name to determine what kind of instructions it can emit when
   11022      generating assembly code.  This option can be used in conjunction
   11023      with or instead of the '-mcpu=' option.  Permissible names are:
   11024      'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5',
   11025      'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2',
   11026      'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r',
   11027      'armv7-m', 'armv7e-m' 'armv8-a', 'iwmmxt', 'iwmmxt2', 'ep9312'.
   11028 
   11029      '-march=native' causes the compiler to auto-detect the architecture
   11030      of the build computer.  At present, this feature is only supported
   11031      on Linux, and not all architectures are recognized.  If the
   11032      auto-detect is unsuccessful the option has no effect.
   11033 
   11034 '-mtune=NAME'
   11035      This option specifies the name of the target ARM processor for
   11036      which GCC should tune the performance of the code.  For some ARM
   11037      implementations better performance can be obtained by using this
   11038      option.  Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6',
   11039      'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d',
   11040      'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i',
   11041      'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe',
   11042      'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t',
   11043      'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110',
   11044      'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t',
   11045      'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t',
   11046      'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e',
   11047      'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore',
   11048      'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s',
   11049      'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9',
   11050      'cortex-a15', 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-m4',
   11051      'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus',
   11052      'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526',
   11053      'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te'.
   11054 
   11055      '-mtune=generic-ARCH' specifies that GCC should tune the
   11056      performance for a blend of processors within architecture ARCH.
   11057      The aim is to generate code that run well on the current most
   11058      popular processors, balancing between optimizations that benefit
   11059      some CPUs in the range, and avoiding performance pitfalls of other
   11060      CPUs.  The effects of this option may change in future GCC versions
   11061      as CPU models come and go.
   11062 
   11063      '-mtune=native' causes the compiler to auto-detect the CPU of the
   11064      build computer.  At present, this feature is only supported on
   11065      Linux, and not all architectures are recognized.  If the
   11066      auto-detect is unsuccessful the option has no effect.
   11067 
   11068 '-mcpu=NAME'
   11069      This specifies the name of the target ARM processor.  GCC uses this
   11070      name to derive the name of the target ARM architecture (as if
   11071      specified by '-march') and the ARM processor type for which to tune
   11072      for performance (as if specified by '-mtune').  Where this option
   11073      is used in conjunction with '-march' or '-mtune', those options
   11074      take precedence over the appropriate part of this option.
   11075 
   11076      Permissible names for this option are the same as those for
   11077      '-mtune'.
   11078 
   11079      '-mcpu=generic-ARCH' is also permissible, and is equivalent to
   11080      '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
   11081      information.
   11082 
   11083      '-mcpu=native' causes the compiler to auto-detect the CPU of the
   11084      build computer.  At present, this feature is only supported on
   11085      Linux, and not all architectures are recognized.  If the
   11086      auto-detect is unsuccessful the option has no effect.
   11087 
   11088 '-mfpu=NAME'
   11089      This specifies what floating-point hardware (or hardware emulation)
   11090      is available on the target.  Permissible names are: 'vfp', 'vfpv3',
   11091      'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd',
   11092      'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16',
   11093      'fpv4-sp-d16', 'neon-vfpv4', 'fp-armv8', 'neon-fp-armv8', and
   11094      'crypto-neon-fp-armv8'.
   11095 
   11096      If '-msoft-float' is specified this specifies the format of
   11097      floating-point values.
   11098 
   11099      If the selected floating-point hardware includes the NEON extension
   11100      (e.g.  '-mfpu'='neon'), note that floating-point operations are not
   11101      generated by GCC's auto-vectorization pass unless
   11102      '-funsafe-math-optimizations' is also specified.  This is because
   11103      NEON hardware does not fully implement the IEEE 754 standard for
   11104      floating-point arithmetic (in particular denormal values are
   11105      treated as zero), so the use of NEON instructions may lead to a
   11106      loss of precision.
   11107 
   11108 '-mfp16-format=NAME'
   11109      Specify the format of the '__fp16' half-precision floating-point
   11110      type.  Permissible names are 'none', 'ieee', and 'alternative'; the
   11111      default is 'none', in which case the '__fp16' type is not defined.
   11112      *Note Half-Precision::, for more information.
   11113 
   11114 '-mstructure-size-boundary=N'
   11115      The sizes of all structures and unions are rounded up to a multiple
   11116      of the number of bits set by this option.  Permissible values are
   11117      8, 32 and 64.  The default value varies for different toolchains.
   11118      For the COFF targeted toolchain the default value is 8.  A value of
   11119      64 is only allowed if the underlying ABI supports it.
   11120 
   11121      Specifying a larger number can produce faster, more efficient code,
   11122      but can also increase the size of the program.  Different values
   11123      are potentially incompatible.  Code compiled with one value cannot
   11124      necessarily expect to work with code or libraries compiled with
   11125      another value, if they exchange information using structures or
   11126      unions.
   11127 
   11128 '-mabort-on-noreturn'
   11129      Generate a call to the function 'abort' at the end of a 'noreturn'
   11130      function.  It is executed if the function tries to return.
   11131 
   11132 '-mlong-calls'
   11133 '-mno-long-calls'
   11134      Tells the compiler to perform function calls by first loading the
   11135      address of the function into a register and then performing a
   11136      subroutine call on this register.  This switch is needed if the
   11137      target function lies outside of the 64-megabyte addressing range of
   11138      the offset-based version of subroutine call instruction.
   11139 
   11140      Even if this switch is enabled, not all function calls are turned
   11141      into long calls.  The heuristic is that static functions, functions
   11142      that have the 'short-call' attribute, functions that are inside the
   11143      scope of a '#pragma no_long_calls' directive, and functions whose
   11144      definitions have already been compiled within the current
   11145      compilation unit are not turned into long calls.  The exceptions to
   11146      this rule are that weak function definitions, functions with the
   11147      'long-call' attribute or the 'section' attribute, and functions
   11148      that are within the scope of a '#pragma long_calls' directive are
   11149      always turned into long calls.
   11150 
   11151      This feature is not enabled by default.  Specifying
   11152      '-mno-long-calls' restores the default behavior, as does placing
   11153      the function calls within the scope of a '#pragma long_calls_off'
   11154      directive.  Note these switches have no effect on how the compiler
   11155      generates code to handle function calls via function pointers.
   11156 
   11157 '-msingle-pic-base'
   11158      Treat the register used for PIC addressing as read-only, rather
   11159      than loading it in the prologue for each function.  The runtime
   11160      system is responsible for initializing this register with an
   11161      appropriate value before execution begins.
   11162 
   11163 '-mpic-register=REG'
   11164      Specify the register to be used for PIC addressing.  For standard
   11165      PIC base case, the default will be any suitable register determined
   11166      by compiler.  For single PIC base case, the default is 'R9' if
   11167      target is EABI based or stack-checking is enabled, otherwise the
   11168      default is 'R10'.
   11169 
   11170 '-mpoke-function-name'
   11171      Write the name of each function into the text section, directly
   11172      preceding the function prologue.  The generated code is similar to
   11173      this:
   11174 
   11175                t0
   11176                    .ascii "arm_poke_function_name", 0
   11177                    .align
   11178                t1
   11179                    .word 0xff000000 + (t1 - t0)
   11180                arm_poke_function_name
   11181                    mov     ip, sp
   11182                    stmfd   sp!, {fp, ip, lr, pc}
   11183                    sub     fp, ip, #4
   11184 
   11185      When performing a stack backtrace, code can inspect the value of
   11186      'pc' stored at 'fp + 0'.  If the trace function then looks at
   11187      location 'pc - 12' and the top 8 bits are set, then we know that
   11188      there is a function name embedded immediately preceding this
   11189      location and has length '((pc[-3]) & 0xff000000)'.
   11190 
   11191 '-mthumb'
   11192 '-marm'
   11193 
   11194      Select between generating code that executes in ARM and Thumb
   11195      states.  The default for most configurations is to generate code
   11196      that executes in ARM state, but the default can be changed by
   11197      configuring GCC with the '--with-mode='STATE configure option.
   11198 
   11199 '-mtpcs-frame'
   11200      Generate a stack frame that is compliant with the Thumb Procedure
   11201      Call Standard for all non-leaf functions.  (A leaf function is one
   11202      that does not call any other functions.)  The default is
   11203      '-mno-tpcs-frame'.
   11204 
   11205 '-mtpcs-leaf-frame'
   11206      Generate a stack frame that is compliant with the Thumb Procedure
   11207      Call Standard for all leaf functions.  (A leaf function is one that
   11208      does not call any other functions.)  The default is
   11209      '-mno-apcs-leaf-frame'.
   11210 
   11211 '-mcallee-super-interworking'
   11212      Gives all externally visible functions in the file being compiled
   11213      an ARM instruction set header which switches to Thumb mode before
   11214      executing the rest of the function.  This allows these functions to
   11215      be called from non-interworking code.  This option is not valid in
   11216      AAPCS configurations because interworking is enabled by default.
   11217 
   11218 '-mcaller-super-interworking'
   11219      Allows calls via function pointers (including virtual functions) to
   11220      execute correctly regardless of whether the target code has been
   11221      compiled for interworking or not.  There is a small overhead in the
   11222      cost of executing a function pointer if this option is enabled.
   11223      This option is not valid in AAPCS configurations because
   11224      interworking is enabled by default.
   11225 
   11226 '-mtp=NAME'
   11227      Specify the access model for the thread local storage pointer.  The
   11228      valid models are 'soft', which generates calls to
   11229      '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
   11230      'cp15' directly (supported in the arm6k architecture), and 'auto',
   11231      which uses the best available method for the selected processor.
   11232      The default setting is 'auto'.
   11233 
   11234 '-mtls-dialect=DIALECT'
   11235      Specify the dialect to use for accessing thread local storage.  Two
   11236      DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
   11237      selects the original GNU scheme for supporting local and global
   11238      dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
   11239      scheme, which provides better performance for shared libraries.
   11240      The GNU descriptor scheme is compatible with the original scheme,
   11241      but does require new assembler, linker and library support.
   11242      Initial and local exec TLS models are unaffected by this option and
   11243      always use the original scheme.
   11244 
   11245 '-mword-relocations'
   11246      Only generate absolute relocations on word-sized values (i.e.
   11247      R_ARM_ABS32).  This is enabled by default on targets (uClinux,
   11248      SymbianOS) where the runtime loader imposes this restriction, and
   11249      when '-fpic' or '-fPIC' is specified.
   11250 
   11251 '-mfix-cortex-m3-ldrd'
   11252      Some Cortex-M3 cores can cause data corruption when 'ldrd'
   11253      instructions with overlapping destination and base registers are
   11254      used.  This option avoids generating these instructions.  This
   11255      option is enabled by default when '-mcpu=cortex-m3' is specified.
   11256 
   11257 '-munaligned-access'
   11258 '-mno-unaligned-access'
   11259      Enables (or disables) reading and writing of 16- and 32- bit values
   11260      from addresses that are not 16- or 32- bit aligned.  By default
   11261      unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
   11262      architectures, and enabled for all other architectures.  If
   11263      unaligned access is not enabled then words in packed data
   11264      structures will be accessed a byte at a time.
   11265 
   11266      The ARM attribute 'Tag_CPU_unaligned_access' will be set in the
   11267      generated object file to either true or false, depending upon the
   11268      setting of this option.  If unaligned access is enabled then the
   11269      preprocessor symbol '__ARM_FEATURE_UNALIGNED' will also be defined.
   11270 
   11271 
   11272 File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
   11273 
   11274 3.17.4 AVR Options
   11275 ------------------
   11276 
   11277 These options are defined for AVR implementations:
   11278 
   11279 '-mmcu=MCU'
   11280      Specify Atmel AVR instruction set architectures (ISA) or MCU type.
   11281 
   11282      The default for this option is 'avr2'.
   11283 
   11284      GCC supports the following AVR devices and ISAs:
   11285 
   11286      'avr2'
   11287           "Classic" devices with up to 8 KiB of program memory.
   11288           MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313',
   11289           'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414',
   11290           'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'.
   11291 
   11292      'avr25'
   11293           "Classic" devices with up to 8 KiB of program memory and with
   11294           the 'MOVW' instruction.
   11295           MCU = 'ata5272', 'ata6289', 'attiny13', 'attiny13a',
   11296           'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a',
   11297           'attiny25', 'attiny261', 'attiny261a', 'attiny43u',
   11298           'attiny4313', 'attiny44', 'attiny44a', 'attiny45',
   11299           'attiny461', 'attiny461a', 'attiny48', 'attiny84',
   11300           'attiny84a', 'attiny85', 'attiny861', 'attiny861a',
   11301           'attiny87', 'attiny88', 'at86rf401'.
   11302 
   11303      'avr3'
   11304           "Classic" devices with 16 KiB up to 64 KiB of program memory.
   11305           MCU = 'at43usb355', 'at76c711'.
   11306 
   11307      'avr31'
   11308           "Classic" devices with 128 KiB of program memory.
   11309           MCU = 'atmega103', 'at43usb320'.
   11310 
   11311      'avr35'
   11312           "Classic" devices with 16 KiB up to 64 KiB of program memory
   11313           and with the 'MOVW' instruction.
   11314           MCU = 'ata5505', 'atmega16u2', 'atmega32u2', 'atmega8u2',
   11315           'attiny1634', 'attiny167', 'at90usb162', 'at90usb82'.
   11316 
   11317      'avr4'
   11318           "Enhanced" devices with up to 8 KiB of program memory.
   11319           MCU = 'ata6285', 'ata6286', 'atmega48', 'atmega48a',
   11320           'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a',
   11321           'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88',
   11322           'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1',
   11323           'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'.
   11324 
   11325      'avr5'
   11326           "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
   11327 
   11328           MCU = 'ata5790', 'ata5790n', 'ata5795', 'atmega16',
   11329           'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb',
   11330           'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161',
   11331           'atmega162', 'atmega163', 'atmega164a', 'atmega164p',
   11332           'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p',
   11333           'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p',
   11334           'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p',
   11335           'atmega169pa', 'atmega26hvg', 'atmega32', 'atmega32a',
   11336           'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1',
   11337           'atmega32u4', 'atmega32u6', 'atmega323', 'atmega324a',
   11338           'atmega324p', 'atmega324pa', 'atmega325', 'atmega325a',
   11339           'atmega325p', 'atmega3250', 'atmega3250a', 'atmega3250p',
   11340           'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329',
   11341           'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290',
   11342           'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406',
   11343           'atmega48hvf', 'atmega64', 'atmega64a', 'atmega64c1',
   11344           'atmega64hve', 'atmega64m1', 'atmega64rfa2', 'atmega64rfr2',
   11345           'atmega640', 'atmega644', 'atmega644a', 'atmega644p',
   11346           'atmega644pa', 'atmega645', 'atmega645a', 'atmega645p',
   11347           'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649',
   11348           'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a',
   11349           'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161',
   11350           'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646',
   11351           'at90usb647', 'at94k', 'm3000'.
   11352 
   11353      'avr51'
   11354           "Enhanced" devices with 128 KiB of program memory.
   11355           MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
   11356           'atmega1280', 'atmega1281', 'atmega1284', 'atmega1284p',
   11357           'at90can128', 'at90usb1286', 'at90usb1287'.
   11358 
   11359      'avr6'
   11360           "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
   11361           of program memory.
   11362           MCU = 'atmega2560', 'atmega2561'.
   11363 
   11364      'avrxmega2'
   11365           "XMEGA" devices with more than 8 KiB and up to 64 KiB of
   11366           program memory.
   11367           MCU = 'atmxt112sl', 'atmxt224', 'atmxt224e', 'atmxt336s',
   11368           'atxmega16a4', 'atxmega16a4u', 'atxmega16c4', 'atxmega16d4',
   11369           'atxmega16x1', 'atxmega32a4', 'atxmega32a4u', 'atxmega32c4',
   11370           'atxmega32d4', 'atxmega32e5', 'atxmega32x1'.
   11371 
   11372      'avrxmega4'
   11373           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
   11374           program memory.
   11375           MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
   11376           'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
   11377           'atxmega64d4'.
   11378 
   11379      'avrxmega5'
   11380           "XMEGA" devices with more than 64 KiB and up to 128 KiB of
   11381           program memory and more than 64 KiB of RAM.
   11382           MCU = 'atxmega64a1', 'atxmega64a1u'.
   11383 
   11384      'avrxmega6'
   11385           "XMEGA" devices with more than 128 KiB of program memory.
   11386           MCU = 'atmxt540s', 'atmxt540sreva', 'atxmega128a3',
   11387           'atxmega128a3u', 'atxmega128b1', 'atxmega128b3',
   11388           'atxmega128c3', 'atxmega128d3', 'atxmega128d4',
   11389           'atxmega192a3', 'atxmega192a3u', 'atxmega192c3',
   11390           'atxmega192d3', 'atxmega256a3', 'atxmega256a3b',
   11391           'atxmega256a3bu', 'atxmega256a3u', 'atxmega256c3',
   11392           'atxmega256d3', 'atxmega384c3', 'atxmega384d3'.
   11393 
   11394      'avrxmega7'
   11395           "XMEGA" devices with more than 128 KiB of program memory and
   11396           more than 64 KiB of RAM.
   11397           MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.
   11398 
   11399      'avr1'
   11400           This ISA is implemented by the minimal AVR core and supported
   11401           for assembler only.
   11402           MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
   11403           'at90s1200'.
   11404 
   11405 '-maccumulate-args'
   11406      Accumulate outgoing function arguments and acquire/release the
   11407      needed stack space for outgoing function arguments once in function
   11408      prologue/epilogue.  Without this option, outgoing arguments are
   11409      pushed before calling a function and popped afterwards.
   11410 
   11411      Popping the arguments after the function call can be expensive on
   11412      AVR so that accumulating the stack space might lead to smaller
   11413      executables because arguments need not to be removed from the stack
   11414      after such a function call.
   11415 
   11416      This option can lead to reduced code size for functions that
   11417      perform several calls to functions that get their arguments on the
   11418      stack like calls to printf-like functions.
   11419 
   11420 '-mbranch-cost=COST'
   11421      Set the branch costs for conditional branch instructions to COST.
   11422      Reasonable values for COST are small, non-negative integers.  The
   11423      default branch cost is 0.
   11424 
   11425 '-mcall-prologues'
   11426      Functions prologues/epilogues are expanded as calls to appropriate
   11427      subroutines.  Code size is smaller.
   11428 
   11429 '-mint8'
   11430      Assume 'int' to be 8-bit integer.  This affects the sizes of all
   11431      types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
   11432      and 'long long' is 4 bytes.  Please note that this option does not
   11433      conform to the C standards, but it results in smaller code size.
   11434 
   11435 '-mno-interrupts'
   11436      Generated code is not compatible with hardware interrupts.  Code
   11437      size is smaller.
   11438 
   11439 '-mrelax'
   11440      Try to replace 'CALL' resp. 'JMP' instruction by the shorter
   11441      'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
   11442      just adds the '--relax' option to the linker command line when the
   11443      linker is called.
   11444 
   11445      Jump relaxing is performed by the linker because jump offsets are
   11446      not known before code is located.  Therefore, the assembler code
   11447      generated by the compiler is the same, but the instructions in the
   11448      executable may differ from instructions in the assembler code.
   11449 
   11450      Relaxing must be turned on if linker stubs are needed, see the
   11451      section on 'EIND' and linker stubs below.
   11452 
   11453 '-msp8'
   11454      Treat the stack pointer register as an 8-bit register, i.e. assume
   11455      the high byte of the stack pointer is zero.  In general, you don't
   11456      need to set this option by hand.
   11457 
   11458      This option is used internally by the compiler to select and build
   11459      multilibs for architectures 'avr2' and 'avr25'.  These
   11460      architectures mix devices with and without 'SPH'.  For any setting
   11461      other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver will
   11462      add or remove this option from the compiler proper's command line,
   11463      because the compiler then knows if the device or architecture has
   11464      an 8-bit stack pointer and thus no 'SPH' register or not.
   11465 
   11466 '-mstrict-X'
   11467      Use address register 'X' in a way proposed by the hardware.  This
   11468      means that 'X' is only used in indirect, post-increment or
   11469      pre-decrement addressing.
   11470 
   11471      Without this option, the 'X' register may be used in the same way
   11472      as 'Y' or 'Z' which then is emulated by additional instructions.
   11473      For example, loading a value with 'X+const' addressing with a small
   11474      non-negative 'const < 64' to a register RN is performed as
   11475 
   11476           adiw r26, const   ; X += const
   11477           ld   RN, X        ; RN = *X
   11478           sbiw r26, const   ; X -= const
   11479 
   11480 '-mtiny-stack'
   11481      Only change the lower 8 bits of the stack pointer.
   11482 
   11483 '-Waddr-space-convert'
   11484      Warn about conversions between address spaces in the case where the
   11485      resulting address space is not contained in the incoming address
   11486      space.
   11487 
   11488 3.17.4.1 'EIND' and Devices with more than 128 Ki Bytes of Flash
   11489 ................................................................
   11490 
   11491 Pointers in the implementation are 16 bits wide.  The address of a
   11492 function or label is represented as word address so that indirect jumps
   11493 and calls can target any code address in the range of 64 Ki words.
   11494 
   11495  In order to facilitate indirect jump on devices with more than 128 Ki
   11496 bytes of program memory space, there is a special function register
   11497 called 'EIND' that serves as most significant part of the target address
   11498 when 'EICALL' or 'EIJMP' instructions are used.
   11499 
   11500  Indirect jumps and calls on these devices are handled as follows by the
   11501 compiler and are subject to some limitations:
   11502 
   11503    * The compiler never sets 'EIND'.
   11504 
   11505    * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP'
   11506      instructions or might read 'EIND' directly in order to emulate an
   11507      indirect call/jump by means of a 'RET' instruction.
   11508 
   11509    * The compiler assumes that 'EIND' never changes during the startup
   11510      code or during the application.  In particular, 'EIND' is not
   11511      saved/restored in function or interrupt service routine
   11512      prologue/epilogue.
   11513 
   11514    * For indirect calls to functions and computed goto, the linker
   11515      generates _stubs_.  Stubs are jump pads sometimes also called
   11516      _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
   11517      The stub contains a direct jump to the desired address.
   11518 
   11519    * Linker relaxation must be turned on so that the linker will
   11520      generate the stubs correctly an all situaltion.  See the compiler
   11521      option '-mrelax' and the linler option '--relax'.  There are corner
   11522      cases where the linker is supposed to generate stubs but aborts
   11523      without relaxation and without a helpful error message.
   11524 
   11525    * The default linker script is arranged for code with 'EIND = 0'.  If
   11526      code is supposed to work for a setup with 'EIND != 0', a custom
   11527      linker script has to be used in order to place the sections whose
   11528      name start with '.trampolines' into the segment where 'EIND' points
   11529      to.
   11530 
   11531    * The startup code from libgcc never sets 'EIND'.  Notice that
   11532      startup code is a blend of code from libgcc and AVR-LibC. For the
   11533      impact of AVR-LibC on 'EIND', see the
   11534      AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
   11535 
   11536    * It is legitimate for user-specific startup code to set up 'EIND'
   11537      early, for example by means of initialization code located in
   11538      section '.init3'.  Such code runs prior to general startup code
   11539      that initializes RAM and calls constructors, but after the bit of
   11540      startup code from AVR-LibC that sets 'EIND' to the segment where
   11541      the vector table is located.
   11542           #include <avr/io.h>
   11543 
   11544           static void
   11545           __attribute__((section(".init3"),naked,used,no_instrument_function))
   11546           init3_set_eind (void)
   11547           {
   11548             __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
   11549                             "out %i0,r24" :: "n" (&EIND) : "r24","memory");
   11550           }
   11551 
   11552      The '__trampolines_start' symbol is defined in the linker script.
   11553 
   11554    * Stubs are generated automatically by the linker if the following
   11555      two conditions are met:
   11556 
   11557         - The address of a label is taken by means of the 'gs' modifier
   11558           (short for _generate stubs_) like so:
   11559                LDI r24, lo8(gs(FUNC))
   11560                LDI r25, hi8(gs(FUNC))
   11561         - The final location of that label is in a code segment
   11562           _outside_ the segment where the stubs are located.
   11563 
   11564    * The compiler emits such 'gs' modifiers for code labels in the
   11565      following situations:
   11566         - Taking address of a function or code label.
   11567         - Computed goto.
   11568         - If prologue-save function is used, see '-mcall-prologues'
   11569           command-line option.
   11570         - Switch/case dispatch tables.  If you do not want such dispatch
   11571           tables you can specify the '-fno-jump-tables' command-line
   11572           option.
   11573         - C and C++ constructors/destructors called during
   11574           startup/shutdown.
   11575         - If the tools hit a 'gs()' modifier explained above.
   11576 
   11577    * Jumping to non-symbolic addresses like so is _not_ supported:
   11578 
   11579           int main (void)
   11580           {
   11581               /* Call function at word address 0x2 */
   11582               return ((int(*)(void)) 0x2)();
   11583           }
   11584 
   11585      Instead, a stub has to be set up, i.e. the function has to be
   11586      called through a symbol ('func_4' in the example):
   11587 
   11588           int main (void)
   11589           {
   11590               extern int func_4 (void);
   11591 
   11592               /* Call function at byte address 0x4 */
   11593               return func_4();
   11594           }
   11595 
   11596      and the application be linked with '-Wl,--defsym,func_4=0x4'.
   11597      Alternatively, 'func_4' can be defined in the linker script.
   11598 
   11599 3.17.4.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
   11600 .........................................................................................
   11601 
   11602 Some AVR devices support memories larger than the 64 KiB range that can
   11603 be accessed with 16-bit pointers.  To access memory locations outside
   11604 this 64 KiB range, the contentent of a 'RAMP' register is used as high
   11605 part of the address: The 'X', 'Y', 'Z' address register is concatenated
   11606 with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register,
   11607 respectively, to get a wide address.  Similarly, 'RAMPD' is used
   11608 together with direct addressing.
   11609 
   11610    * The startup code initializes the 'RAMP' special function registers
   11611      with zero.
   11612 
   11613    * If a *note named address space: AVR Named Address Spaces. other
   11614      than generic or '__flash' is used, then 'RAMPZ' is set as needed
   11615      before the operation.
   11616 
   11617    * If the device supports RAM larger than 64  and the compiler needs
   11618      to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is reset to
   11619      zero after the operation.
   11620 
   11621    * If the device comes with a specific 'RAMP' register, the ISR
   11622      prologue/epilogue saves/restores that SFR and initializes it with
   11623      zero in case the ISR code might (implicitly) use it.
   11624 
   11625    * RAM larger than 64  is not supported by GCC for AVR targets.  If
   11626      you use inline assembler to read from locations outside the 16-bit
   11627      address range and change one of the 'RAMP' registers, you must
   11628      reset it to zero after the access.
   11629 
   11630 3.17.4.3 AVR Built-in Macros
   11631 ............................
   11632 
   11633 GCC defines several built-in macros so that the user code can test for
   11634 the presence or absence of features.  Almost any of the following
   11635 built-in macros are deduced from device capabilities and thus triggered
   11636 by the '-mmcu=' command-line option.
   11637 
   11638  For even more AVR-specific built-in macros see *note AVR Named Address
   11639 Spaces:: and *note AVR Built-in Functions::.
   11640 
   11641 '__AVR_ARCH__'
   11642      Build-in macro that resolves to a decimal number that identifies
   11643      the architecture and depends on the '-mmcu=MCU' option.  Possible
   11644      values are:
   11645 
   11646      '2', '25', '3', '31', '35', '4', '5', '51', '6', '102', '104',
   11647      '105', '106', '107'
   11648 
   11649      for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
   11650      'avr51', 'avr6', 'avrxmega2', 'avrxmega4', 'avrxmega5',
   11651      'avrxmega6', 'avrxmega7', respectively.  If MCU specifies a device,
   11652      this built-in macro is set accordingly.  For example, with
   11653      '-mmcu=atmega8' the macro will be defined to '4'.
   11654 
   11655 '__AVR_DEVICE__'
   11656      Setting '-mmcu=DEVICE' defines this built-in macro which reflects
   11657      the device's name.  For example, '-mmcu=atmega8' defines the
   11658      built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
   11659      '__AVR_ATtiny261A__', etc.
   11660 
   11661      The built-in macros' names follow the scheme '__AVR_DEVICE__' where
   11662      DEVICE is the device name as from the AVR user manual.  The
   11663      difference between DEVICE in the built-in macro and DEVICE in
   11664      '-mmcu=DEVICE' is that the latter is always lowercase.
   11665 
   11666      If DEVICE is not a device but only a core architecture like
   11667      'avr51', this macro will not be defined.
   11668 
   11669 '__AVR_XMEGA__'
   11670      The device / architecture belongs to the XMEGA family of devices.
   11671 
   11672 '__AVR_HAVE_ELPM__'
   11673      The device has the the 'ELPM' instruction.
   11674 
   11675 '__AVR_HAVE_ELPMX__'
   11676      The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.
   11677 
   11678 '__AVR_HAVE_MOVW__'
   11679      The device has the 'MOVW' instruction to perform 16-bit
   11680      register-register moves.
   11681 
   11682 '__AVR_HAVE_LPMX__'
   11683      The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.
   11684 
   11685 '__AVR_HAVE_MUL__'
   11686      The device has a hardware multiplier.
   11687 
   11688 '__AVR_HAVE_JMP_CALL__'
   11689      The device has the 'JMP' and 'CALL' instructions.  This is the case
   11690      for devices with at least 16 KiB of program memory.
   11691 
   11692 '__AVR_HAVE_EIJMP_EICALL__'
   11693 '__AVR_3_BYTE_PC__'
   11694      The device has the 'EIJMP' and 'EICALL' instructions.  This is the
   11695      case for devices with more than 128 KiB of program memory.  This
   11696      also means that the program counter (PC) is 3 bytes wide.
   11697 
   11698 '__AVR_2_BYTE_PC__'
   11699      The program counter (PC) is 2 bytes wide.  This is the case for
   11700      devices with up to 128 KiB of program memory.
   11701 
   11702 '__AVR_HAVE_8BIT_SP__'
   11703 '__AVR_HAVE_16BIT_SP__'
   11704      The stack pointer (SP) register is treated as 8-bit respectively
   11705      16-bit register by the compiler.  The definition of these macros is
   11706      affected by '-mtiny-stack'.
   11707 
   11708 '__AVR_HAVE_SPH__'
   11709 '__AVR_SP8__'
   11710      The device has the SPH (high part of stack pointer) special
   11711      function register or has an 8-bit stack pointer, respectively.  The
   11712      definition of these macros is affected by '-mmcu=' and in the cases
   11713      of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.
   11714 
   11715 '__AVR_HAVE_RAMPD__'
   11716 '__AVR_HAVE_RAMPX__'
   11717 '__AVR_HAVE_RAMPY__'
   11718 '__AVR_HAVE_RAMPZ__'
   11719      The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
   11720      function register, respectively.
   11721 
   11722 '__NO_INTERRUPTS__'
   11723      This macro reflects the '-mno-interrupts' command line option.
   11724 
   11725 '__AVR_ERRATA_SKIP__'
   11726 '__AVR_ERRATA_SKIP_JMP_CALL__'
   11727      Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
   11728      instructions because of a hardware erratum.  Skip instructions are
   11729      'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
   11730      only defined if '__AVR_HAVE_JMP_CALL__' is also set.
   11731 
   11732 '__AVR_SFR_OFFSET__=OFFSET'
   11733      Instructions that can address I/O special function registers
   11734      directly like 'IN', 'OUT', 'SBI', etc. may use a different address
   11735      as if addressed by an instruction to access RAM like 'LD' or 'STS'.
   11736      This offset depends on the device architecture and has to be
   11737      subtracted from the RAM address in order to get the respective
   11738      I/O address.
   11739 
   11740 '__WITH_AVRLIBC__'
   11741      The compiler is configured to be used together with AVR-Libc.  See
   11742      the '--with-avrlibc' configure option.
   11743 
   11744 
   11745 File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
   11746 
   11747 3.17.5 Blackfin Options
   11748 -----------------------
   11749 
   11750 '-mcpu=CPU[-SIREVISION]'
   11751      Specifies the name of the target Blackfin processor.  Currently,
   11752      CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
   11753      'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
   11754      'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
   11755      'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
   11756      'bf548m', 'bf549m', 'bf561', 'bf592'.
   11757 
   11758      The optional SIREVISION specifies the silicon revision of the
   11759      target Blackfin processor.  Any workarounds available for the
   11760      targeted silicon revision are enabled.  If SIREVISION is 'none', no
   11761      workarounds are enabled.  If SIREVISION is 'any', all workarounds
   11762      for the targeted processor are enabled.  The '__SILICON_REVISION__'
   11763      macro is defined to two hexadecimal digits representing the major
   11764      and minor numbers in the silicon revision.  If SIREVISION is
   11765      'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
   11766      is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
   11767      this optional SIREVISION is not used, GCC assumes the latest known
   11768      silicon revision of the targeted Blackfin processor.
   11769 
   11770      GCC defines a preprocessor macro for the specified CPU.  For the
   11771      'bfin-elf' toolchain, this option causes the hardware BSP provided
   11772      by libgloss to be linked in if '-msim' is not given.
   11773 
   11774      Without this option, 'bf532' is used as the processor by default.
   11775 
   11776      Note that support for 'bf561' is incomplete.  For 'bf561', only the
   11777      preprocessor macro is defined.
   11778 
   11779 '-msim'
   11780      Specifies that the program will be run on the simulator.  This
   11781      causes the simulator BSP provided by libgloss to be linked in.
   11782      This option has effect only for 'bfin-elf' toolchain.  Certain
   11783      other options, such as '-mid-shared-library' and '-mfdpic', imply
   11784      '-msim'.
   11785 
   11786 '-momit-leaf-frame-pointer'
   11787      Don't keep the frame pointer in a register for leaf functions.
   11788      This avoids the instructions to save, set up and restore frame
   11789      pointers and makes an extra register available in leaf functions.
   11790      The option '-fomit-frame-pointer' removes the frame pointer for all
   11791      functions, which might make debugging harder.
   11792 
   11793 '-mspecld-anomaly'
   11794      When enabled, the compiler ensures that the generated code does not
   11795      contain speculative loads after jump instructions.  If this option
   11796      is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.
   11797 
   11798 '-mno-specld-anomaly'
   11799      Don't generate extra code to prevent speculative loads from
   11800      occurring.
   11801 
   11802 '-mcsync-anomaly'
   11803      When enabled, the compiler ensures that the generated code does not
   11804      contain CSYNC or SSYNC instructions too soon after conditional
   11805      branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
   11806      is defined.
   11807 
   11808 '-mno-csync-anomaly'
   11809      Don't generate extra code to prevent CSYNC or SSYNC instructions
   11810      from occurring too soon after a conditional branch.
   11811 
   11812 '-mlow-64k'
   11813      When enabled, the compiler is free to take advantage of the
   11814      knowledge that the entire program fits into the low 64k of memory.
   11815 
   11816 '-mno-low-64k'
   11817      Assume that the program is arbitrarily large.  This is the default.
   11818 
   11819 '-mstack-check-l1'
   11820      Do stack checking using information placed into L1 scratchpad
   11821      memory by the uClinux kernel.
   11822 
   11823 '-mid-shared-library'
   11824      Generate code that supports shared libraries via the library ID
   11825      method.  This allows for execute in place and shared libraries in
   11826      an environment without virtual memory management.  This option
   11827      implies '-fPIC'.  With a 'bfin-elf' target, this option implies
   11828      '-msim'.
   11829 
   11830 '-mno-id-shared-library'
   11831      Generate code that doesn't assume ID-based shared libraries are
   11832      being used.  This is the default.
   11833 
   11834 '-mleaf-id-shared-library'
   11835      Generate code that supports shared libraries via the library ID
   11836      method, but assumes that this library or executable won't link
   11837      against any other ID shared libraries.  That allows the compiler to
   11838      use faster code for jumps and calls.
   11839 
   11840 '-mno-leaf-id-shared-library'
   11841      Do not assume that the code being compiled won't link against any
   11842      ID shared libraries.  Slower code is generated for jump and call
   11843      insns.
   11844 
   11845 '-mshared-library-id=n'
   11846      Specifies the identification number of the ID-based shared library
   11847      being compiled.  Specifying a value of 0 generates more compact
   11848      code; specifying other values forces the allocation of that number
   11849      to the current library but is no more space- or time-efficient than
   11850      omitting this option.
   11851 
   11852 '-msep-data'
   11853      Generate code that allows the data segment to be located in a
   11854      different area of memory from the text segment.  This allows for
   11855      execute in place in an environment without virtual memory
   11856      management by eliminating relocations against the text section.
   11857 
   11858 '-mno-sep-data'
   11859      Generate code that assumes that the data segment follows the text
   11860      segment.  This is the default.
   11861 
   11862 '-mlong-calls'
   11863 '-mno-long-calls'
   11864      Tells the compiler to perform function calls by first loading the
   11865      address of the function into a register and then performing a
   11866      subroutine call on this register.  This switch is needed if the
   11867      target function lies outside of the 24-bit addressing range of the
   11868      offset-based version of subroutine call instruction.
   11869 
   11870      This feature is not enabled by default.  Specifying
   11871      '-mno-long-calls' restores the default behavior.  Note these
   11872      switches have no effect on how the compiler generates code to
   11873      handle function calls via function pointers.
   11874 
   11875 '-mfast-fp'
   11876      Link with the fast floating-point library.  This library relaxes
   11877      some of the IEEE floating-point standard's rules for checking
   11878      inputs against Not-a-Number (NAN), in the interest of performance.
   11879 
   11880 '-minline-plt'
   11881      Enable inlining of PLT entries in function calls to functions that
   11882      are not known to bind locally.  It has no effect without '-mfdpic'.
   11883 
   11884 '-mmulticore'
   11885      Build a standalone application for multicore Blackfin processors.
   11886      This option causes proper start files and link scripts supporting
   11887      multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
   11888      can only be used with '-mcpu=bf561[-SIREVISION]'.
   11889 
   11890      This option can be used with '-mcorea' or '-mcoreb', which selects
   11891      the one-application-per-core programming model.  Without '-mcorea'
   11892      or '-mcoreb', the single-application/dual-core programming model is
   11893      used.  In this model, the main function of Core B should be named
   11894      as 'coreb_main'.
   11895 
   11896      If this option is not used, the single-core application programming
   11897      model is used.
   11898 
   11899 '-mcorea'
   11900      Build a standalone application for Core A of BF561 when using the
   11901      one-application-per-core programming model.  Proper start files and
   11902      link scripts are used to support Core A, and the macro
   11903      '__BFIN_COREA' is defined.  This option can only be used in
   11904      conjunction with '-mmulticore'.
   11905 
   11906 '-mcoreb'
   11907      Build a standalone application for Core B of BF561 when using the
   11908      one-application-per-core programming model.  Proper start files and
   11909      link scripts are used to support Core B, and the macro
   11910      '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
   11911      should be used instead of 'main'.  This option can only be used in
   11912      conjunction with '-mmulticore'.
   11913 
   11914 '-msdram'
   11915      Build a standalone application for SDRAM. Proper start files and
   11916      link scripts are used to put the application into SDRAM, and the
   11917      macro '__BFIN_SDRAM' is defined.  The loader should initialize
   11918      SDRAM before loading the application.
   11919 
   11920 '-micplb'
   11921      Assume that ICPLBs are enabled at run time.  This has an effect on
   11922      certain anomaly workarounds.  For Linux targets, the default is to
   11923      assume ICPLBs are enabled; for standalone applications the default
   11924      is off.
   11925 
   11926 
   11927 File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
   11928 
   11929 3.17.6 C6X Options
   11930 ------------------
   11931 
   11932 '-march=NAME'
   11933      This specifies the name of the target architecture.  GCC uses this
   11934      name to determine what kind of instructions it can emit when
   11935      generating assembly code.  Permissible names are: 'c62x', 'c64x',
   11936      'c64x+', 'c67x', 'c67x+', 'c674x'.
   11937 
   11938 '-mbig-endian'
   11939      Generate code for a big-endian target.
   11940 
   11941 '-mlittle-endian'
   11942      Generate code for a little-endian target.  This is the default.
   11943 
   11944 '-msim'
   11945      Choose startup files and linker script suitable for the simulator.
   11946 
   11947 '-msdata=default'
   11948      Put small global and static data in the '.neardata' section, which
   11949      is pointed to by register 'B14'.  Put small uninitialized global
   11950      and static data in the '.bss' section, which is adjacent to the
   11951      '.neardata' section.  Put small read-only data into the '.rodata'
   11952      section.  The corresponding sections used for large pieces of data
   11953      are '.fardata', '.far' and '.const'.
   11954 
   11955 '-msdata=all'
   11956      Put all data, not just small objects, into the sections reserved
   11957      for small data, and use addressing relative to the 'B14' register
   11958      to access them.
   11959 
   11960 '-msdata=none'
   11961      Make no use of the sections reserved for small data, and use
   11962      absolute addresses to access all data.  Put all initialized global
   11963      and static data in the '.fardata' section, and all uninitialized
   11964      data in the '.far' section.  Put all constant data into the
   11965      '.const' section.
   11966 
   11967 
   11968 File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
   11969 
   11970 3.17.7 CRIS Options
   11971 -------------------
   11972 
   11973 These options are defined specifically for the CRIS ports.
   11974 
   11975 '-march=ARCHITECTURE-TYPE'
   11976 '-mcpu=ARCHITECTURE-TYPE'
   11977      Generate code for the specified architecture.  The choices for
   11978      ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
   11979      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
   11980      cris-axis-linux-gnu, where the default is 'v10'.
   11981 
   11982 '-mtune=ARCHITECTURE-TYPE'
   11983      Tune to ARCHITECTURE-TYPE everything applicable about the generated
   11984      code, except for the ABI and the set of available instructions.
   11985      The choices for ARCHITECTURE-TYPE are the same as for
   11986      '-march=ARCHITECTURE-TYPE'.
   11987 
   11988 '-mmax-stack-frame=N'
   11989      Warn when the stack frame of a function exceeds N bytes.
   11990 
   11991 '-metrax4'
   11992 '-metrax100'
   11993      The options '-metrax4' and '-metrax100' are synonyms for
   11994      '-march=v3' and '-march=v8' respectively.
   11995 
   11996 '-mmul-bug-workaround'
   11997 '-mno-mul-bug-workaround'
   11998      Work around a bug in the 'muls' and 'mulu' instructions for CPU
   11999      models where it applies.  This option is active by default.
   12000 
   12001 '-mpdebug'
   12002      Enable CRIS-specific verbose debug-related information in the
   12003      assembly code.  This option also has the effect of turning off the
   12004      '#NO_APP' formatted-code indicator to the assembler at the
   12005      beginning of the assembly file.
   12006 
   12007 '-mcc-init'
   12008      Do not use condition-code results from previous instruction; always
   12009      emit compare and test instructions before use of condition codes.
   12010 
   12011 '-mno-side-effects'
   12012      Do not emit instructions with side effects in addressing modes
   12013      other than post-increment.
   12014 
   12015 '-mstack-align'
   12016 '-mno-stack-align'
   12017 '-mdata-align'
   12018 '-mno-data-align'
   12019 '-mconst-align'
   12020 '-mno-const-align'
   12021      These options ('no-' options) arrange (eliminate arrangements) for
   12022      the stack frame, individual data and constants to be aligned for
   12023      the maximum single data access size for the chosen CPU model.  The
   12024      default is to arrange for 32-bit alignment.  ABI details such as
   12025      structure layout are not affected by these options.
   12026 
   12027 '-m32-bit'
   12028 '-m16-bit'
   12029 '-m8-bit'
   12030      Similar to the stack- data- and const-align options above, these
   12031      options arrange for stack frame, writable data and constants to all
   12032      be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
   12033      alignment.
   12034 
   12035 '-mno-prologue-epilogue'
   12036 '-mprologue-epilogue'
   12037      With '-mno-prologue-epilogue', the normal function prologue and
   12038      epilogue which set up the stack frame are omitted and no return
   12039      instructions or return sequences are generated in the code.  Use
   12040      this option only together with visual inspection of the compiled
   12041      code: no warnings or errors are generated when call-saved registers
   12042      must be saved, or storage for local variables needs to be
   12043      allocated.
   12044 
   12045 '-mno-gotplt'
   12046 '-mgotplt'
   12047      With '-fpic' and '-fPIC', don't generate (do generate) instruction
   12048      sequences that load addresses for functions from the PLT part of
   12049      the GOT rather than (traditional on other architectures) calls to
   12050      the PLT.  The default is '-mgotplt'.
   12051 
   12052 '-melf'
   12053      Legacy no-op option only recognized with the cris-axis-elf and
   12054      cris-axis-linux-gnu targets.
   12055 
   12056 '-mlinux'
   12057      Legacy no-op option only recognized with the cris-axis-linux-gnu
   12058      target.
   12059 
   12060 '-sim'
   12061      This option, recognized for the cris-axis-elf, arranges to link
   12062      with input-output functions from a simulator library.  Code,
   12063      initialized data and zero-initialized data are allocated
   12064      consecutively.
   12065 
   12066 '-sim2'
   12067      Like '-sim', but pass linker options to locate initialized data at
   12068      0x40000000 and zero-initialized data at 0x80000000.
   12069 
   12070 
   12071 File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
   12072 
   12073 3.17.8 CR16 Options
   12074 -------------------
   12075 
   12076 These options are defined specifically for the CR16 ports.
   12077 
   12078 '-mmac'
   12079      Enable the use of multiply-accumulate instructions.  Disabled by
   12080      default.
   12081 
   12082 '-mcr16cplus'
   12083 '-mcr16c'
   12084      Generate code for CR16C or CR16C+ architecture.  CR16C+
   12085      architecture is default.
   12086 
   12087 '-msim'
   12088      Links the library libsim.a which is in compatible with simulator.
   12089      Applicable to ELF compiler only.
   12090 
   12091 '-mint32'
   12092      Choose integer type as 32-bit wide.
   12093 
   12094 '-mbit-ops'
   12095      Generates 'sbit'/'cbit' instructions for bit manipulations.
   12096 
   12097 '-mdata-model=MODEL'
   12098      Choose a data model.  The choices for MODEL are 'near', 'far' or
   12099      'medium'.  'medium' is default.  However, 'far' is not valid with
   12100      '-mcr16c', as the CR16C architecture does not support the far data
   12101      model.
   12102 
   12103 
   12104 File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
   12105 
   12106 3.17.9 Darwin Options
   12107 ---------------------
   12108 
   12109 These options are defined for all architectures running the Darwin
   12110 operating system.
   12111 
   12112  FSF GCC on Darwin does not create "fat" object files; it creates an
   12113 object file for the single architecture that GCC was built to target.
   12114 Apple's GCC on Darwin does create "fat" files if multiple '-arch'
   12115 options are used; it does so by running the compiler or linker multiple
   12116 times and joining the results together with 'lipo'.
   12117 
   12118  The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
   12119 is determined by the flags that specify the ISA that GCC is targeting,
   12120 like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
   12121 used to override this.
   12122 
   12123  The Darwin tools vary in their behavior when presented with an ISA
   12124 mismatch.  The assembler, 'as', only permits instructions to be used
   12125 that are valid for the subtype of the file it is generating, so you
   12126 cannot put 64-bit instructions in a 'ppc750' object file.  The linker
   12127 for shared libraries, '/usr/bin/libtool', fails and prints an error if
   12128 asked to create a shared library with a less restrictive subtype than
   12129 its input files (for instance, trying to put a 'ppc970' object file in a
   12130 'ppc7400' library).  The linker for executables, 'ld', quietly gives the
   12131 executable the most restrictive subtype of any of its input files.
   12132 
   12133 '-FDIR'
   12134      Add the framework directory DIR to the head of the list of
   12135      directories to be searched for header files.  These directories are
   12136      interleaved with those specified by '-I' options and are scanned in
   12137      a left-to-right order.
   12138 
   12139      A framework directory is a directory with frameworks in it.  A
   12140      framework is a directory with a 'Headers' and/or 'PrivateHeaders'
   12141      directory contained directly in it that ends in '.framework'.  The
   12142      name of a framework is the name of this directory excluding the
   12143      '.framework'.  Headers associated with the framework are found in
   12144      one of those two directories, with 'Headers' being searched first.
   12145      A subframework is a framework directory that is in a framework's
   12146      'Frameworks' directory.  Includes of subframework headers can only
   12147      appear in a header of a framework that contains the subframework,
   12148      or in a sibling subframework header.  Two subframeworks are
   12149      siblings if they occur in the same framework.  A subframework
   12150      should not have the same name as a framework; a warning is issued
   12151      if this is violated.  Currently a subframework cannot have
   12152      subframeworks; in the future, the mechanism may be extended to
   12153      support this.  The standard frameworks can be found in
   12154      '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
   12155      include looks like '#include <Framework/header.h>', where
   12156      'Framework' denotes the name of the framework and 'header.h' is
   12157      found in the 'PrivateHeaders' or 'Headers' directory.
   12158 
   12159 '-iframeworkDIR'
   12160      Like '-F' except the directory is a treated as a system directory.
   12161      The main difference between this '-iframework' and '-F' is that
   12162      with '-iframework' the compiler does not warn about constructs
   12163      contained within header files found via DIR.  This option is valid
   12164      only for the C family of languages.
   12165 
   12166 '-gused'
   12167      Emit debugging information for symbols that are used.  For stabs
   12168      debugging format, this enables '-feliminate-unused-debug-symbols'.
   12169      This is by default ON.
   12170 
   12171 '-gfull'
   12172      Emit debugging information for all symbols and types.
   12173 
   12174 '-mmacosx-version-min=VERSION'
   12175      The earliest version of MacOS X that this executable will run on is
   12176      VERSION.  Typical values of VERSION include '10.1', '10.2', and
   12177      '10.3.9'.
   12178 
   12179      If the compiler was built to use the system's headers by default,
   12180      then the default for this option is the system version on which the
   12181      compiler is running, otherwise the default is to make choices that
   12182      are compatible with as many systems and code bases as possible.
   12183 
   12184 '-mkernel'
   12185      Enable kernel development mode.  The '-mkernel' option sets
   12186      '-static', '-fno-common', '-fno-cxa-atexit', '-fno-exceptions',
   12187      '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
   12188      '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
   12189      '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
   12190      targets.
   12191 
   12192 '-mone-byte-bool'
   12193      Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
   12194      default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
   12195      '1' when compiling for Darwin/x86, so this option has no effect on
   12196      x86.
   12197 
   12198      *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
   12199      that is not binary compatible with code generated without that
   12200      switch.  Using this switch may require recompiling all other
   12201      modules in a program, including system libraries.  Use this switch
   12202      to conform to a non-default data model.
   12203 
   12204 '-mfix-and-continue'
   12205 '-ffix-and-continue'
   12206 '-findirect-data'
   12207      Generate code suitable for fast turnaround development, such as to
   12208      allow GDB to dynamically load '.o' files into already-running
   12209      programs.  '-findirect-data' and '-ffix-and-continue' are provided
   12210      for backwards compatibility.
   12211 
   12212 '-all_load'
   12213      Loads all members of static archive libraries.  See man ld(1) for
   12214      more information.
   12215 
   12216 '-arch_errors_fatal'
   12217      Cause the errors having to do with files that have the wrong
   12218      architecture to be fatal.
   12219 
   12220 '-bind_at_load'
   12221      Causes the output file to be marked such that the dynamic linker
   12222      will bind all undefined references when the file is loaded or
   12223      launched.
   12224 
   12225 '-bundle'
   12226      Produce a Mach-o bundle format file.  See man ld(1) for more
   12227      information.
   12228 
   12229 '-bundle_loader EXECUTABLE'
   12230      This option specifies the EXECUTABLE that will load the build
   12231      output file being linked.  See man ld(1) for more information.
   12232 
   12233 '-dynamiclib'
   12234      When passed this option, GCC produces a dynamic library instead of
   12235      an executable when linking, using the Darwin 'libtool' command.
   12236 
   12237 '-force_cpusubtype_ALL'
   12238      This causes GCC's output file to have the ALL subtype, instead of
   12239      one controlled by the '-mcpu' or '-march' option.
   12240 
   12241 '-allowable_client CLIENT_NAME'
   12242 '-client_name'
   12243 '-compatibility_version'
   12244 '-current_version'
   12245 '-dead_strip'
   12246 '-dependency-file'
   12247 '-dylib_file'
   12248 '-dylinker_install_name'
   12249 '-dynamic'
   12250 '-exported_symbols_list'
   12251 '-filelist'
   12252 '-flat_namespace'
   12253 '-force_flat_namespace'
   12254 '-headerpad_max_install_names'
   12255 '-image_base'
   12256 '-init'
   12257 '-install_name'
   12258 '-keep_private_externs'
   12259 '-multi_module'
   12260 '-multiply_defined'
   12261 '-multiply_defined_unused'
   12262 '-noall_load'
   12263 '-no_dead_strip_inits_and_terms'
   12264 '-nofixprebinding'
   12265 '-nomultidefs'
   12266 '-noprebind'
   12267 '-noseglinkedit'
   12268 '-pagezero_size'
   12269 '-prebind'
   12270 '-prebind_all_twolevel_modules'
   12271 '-private_bundle'
   12272 '-read_only_relocs'
   12273 '-sectalign'
   12274 '-sectobjectsymbols'
   12275 '-whyload'
   12276 '-seg1addr'
   12277 '-sectcreate'
   12278 '-sectobjectsymbols'
   12279 '-sectorder'
   12280 '-segaddr'
   12281 '-segs_read_only_addr'
   12282 '-segs_read_write_addr'
   12283 '-seg_addr_table'
   12284 '-seg_addr_table_filename'
   12285 '-seglinkedit'
   12286 '-segprot'
   12287 '-segs_read_only_addr'
   12288 '-segs_read_write_addr'
   12289 '-single_module'
   12290 '-static'
   12291 '-sub_library'
   12292 '-sub_umbrella'
   12293 '-twolevel_namespace'
   12294 '-umbrella'
   12295 '-undefined'
   12296 '-unexported_symbols_list'
   12297 '-weak_reference_mismatches'
   12298 '-whatsloaded'
   12299      These options are passed to the Darwin linker.  The Darwin linker
   12300      man page describes them in detail.
   12301 
   12302 
   12303 File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
   12304 
   12305 3.17.10 DEC Alpha Options
   12306 -------------------------
   12307 
   12308 These '-m' options are defined for the DEC Alpha implementations:
   12309 
   12310 '-mno-soft-float'
   12311 '-msoft-float'
   12312      Use (do not use) the hardware floating-point instructions for
   12313      floating-point operations.  When '-msoft-float' is specified,
   12314      functions in 'libgcc.a' are used to perform floating-point
   12315      operations.  Unless they are replaced by routines that emulate the
   12316      floating-point operations, or compiled in such a way as to call
   12317      such emulations routines, these routines issue floating-point
   12318      operations.  If you are compiling for an Alpha without
   12319      floating-point operations, you must ensure that the library is
   12320      built so as not to call them.
   12321 
   12322      Note that Alpha implementations without floating-point operations
   12323      are required to have floating-point registers.
   12324 
   12325 '-mfp-reg'
   12326 '-mno-fp-regs'
   12327      Generate code that uses (does not use) the floating-point register
   12328      set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
   12329      register set is not used, floating-point operands are passed in
   12330      integer registers as if they were integers and floating-point
   12331      results are passed in '$0' instead of '$f0'.  This is a
   12332      non-standard calling sequence, so any function with a
   12333      floating-point argument or return value called by code compiled
   12334      with '-mno-fp-regs' must also be compiled with that option.
   12335 
   12336      A typical use of this option is building a kernel that does not
   12337      use, and hence need not save and restore, any floating-point
   12338      registers.
   12339 
   12340 '-mieee'
   12341      The Alpha architecture implements floating-point hardware optimized
   12342      for maximum performance.  It is mostly compliant with the IEEE
   12343      floating-point standard.  However, for full compliance, software
   12344      assistance is required.  This option generates code fully
   12345      IEEE-compliant code _except_ that the INEXACT-FLAG is not
   12346      maintained (see below).  If this option is turned on, the
   12347      preprocessor macro '_IEEE_FP' is defined during compilation.  The
   12348      resulting code is less efficient but is able to correctly support
   12349      denormalized numbers and exceptional IEEE values such as
   12350      not-a-number and plus/minus infinity.  Other Alpha compilers call
   12351      this option '-ieee_with_no_inexact'.
   12352 
   12353 '-mieee-with-inexact'
   12354      This is like '-mieee' except the generated code also maintains the
   12355      IEEE INEXACT-FLAG.  Turning on this option causes the generated
   12356      code to implement fully-compliant IEEE math.  In addition to
   12357      '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
   12358      On some Alpha implementations the resulting code may execute
   12359      significantly slower than the code generated by default.  Since
   12360      there is very little code that depends on the INEXACT-FLAG, you
   12361      should normally not specify this option.  Other Alpha compilers
   12362      call this option '-ieee_with_inexact'.
   12363 
   12364 '-mfp-trap-mode=TRAP-MODE'
   12365      This option controls what floating-point related traps are enabled.
   12366      Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
   12367      mode can be set to one of four values:
   12368 
   12369      'n'
   12370           This is the default (normal) setting.  The only traps that are
   12371           enabled are the ones that cannot be disabled in software
   12372           (e.g., division by zero trap).
   12373 
   12374      'u'
   12375           In addition to the traps enabled by 'n', underflow traps are
   12376           enabled as well.
   12377 
   12378      'su'
   12379           Like 'u', but the instructions are marked to be safe for
   12380           software completion (see Alpha architecture manual for
   12381           details).
   12382 
   12383      'sui'
   12384           Like 'su', but inexact traps are enabled as well.
   12385 
   12386 '-mfp-rounding-mode=ROUNDING-MODE'
   12387      Selects the IEEE rounding mode.  Other Alpha compilers call this
   12388      option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
   12389 
   12390      'n'
   12391           Normal IEEE rounding mode.  Floating-point numbers are rounded
   12392           towards the nearest machine number or towards the even machine
   12393           number in case of a tie.
   12394 
   12395      'm'
   12396           Round towards minus infinity.
   12397 
   12398      'c'
   12399           Chopped rounding mode.  Floating-point numbers are rounded
   12400           towards zero.
   12401 
   12402      'd'
   12403           Dynamic rounding mode.  A field in the floating-point control
   12404           register (FPCR, see Alpha architecture reference manual)
   12405           controls the rounding mode in effect.  The C library
   12406           initializes this register for rounding towards plus infinity.
   12407           Thus, unless your program modifies the FPCR, 'd' corresponds
   12408           to round towards plus infinity.
   12409 
   12410 '-mtrap-precision=TRAP-PRECISION'
   12411      In the Alpha architecture, floating-point traps are imprecise.
   12412      This means without software assistance it is impossible to recover
   12413      from a floating trap and program execution normally needs to be
   12414      terminated.  GCC can generate code that can assist operating system
   12415      trap handlers in determining the exact location that caused a
   12416      floating-point trap.  Depending on the requirements of an
   12417      application, different levels of precisions can be selected:
   12418 
   12419      'p'
   12420           Program precision.  This option is the default and means a
   12421           trap handler can only identify which program caused a
   12422           floating-point exception.
   12423 
   12424      'f'
   12425           Function precision.  The trap handler can determine the
   12426           function that caused a floating-point exception.
   12427 
   12428      'i'
   12429           Instruction precision.  The trap handler can determine the
   12430           exact instruction that caused a floating-point exception.
   12431 
   12432      Other Alpha compilers provide the equivalent options called
   12433      '-scope_safe' and '-resumption_safe'.
   12434 
   12435 '-mieee-conformant'
   12436      This option marks the generated code as IEEE conformant.  You must
   12437      not use this option unless you also specify '-mtrap-precision=i'
   12438      and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
   12439      effect is to emit the line '.eflag 48' in the function prologue of
   12440      the generated assembly file.
   12441 
   12442 '-mbuild-constants'
   12443      Normally GCC examines a 32- or 64-bit integer constant to see if it
   12444      can construct it from smaller constants in two or three
   12445      instructions.  If it cannot, it outputs the constant as a literal
   12446      and generates code to load it from the data segment at run time.
   12447 
   12448      Use this option to require GCC to construct _all_ integer constants
   12449      using code, even if it takes more instructions (the maximum is
   12450      six).
   12451 
   12452      You typically use this option to build a shared library dynamic
   12453      loader.  Itself a shared library, it must relocate itself in memory
   12454      before it can find the variables and constants in its own data
   12455      segment.
   12456 
   12457 '-mbwx'
   12458 '-mno-bwx'
   12459 '-mcix'
   12460 '-mno-cix'
   12461 '-mfix'
   12462 '-mno-fix'
   12463 '-mmax'
   12464 '-mno-max'
   12465      Indicate whether GCC should generate code to use the optional BWX,
   12466      CIX, FIX and MAX instruction sets.  The default is to use the
   12467      instruction sets supported by the CPU type specified via '-mcpu='
   12468      option or that of the CPU on which GCC was built if none is
   12469      specified.
   12470 
   12471 '-mfloat-vax'
   12472 '-mfloat-ieee'
   12473      Generate code that uses (does not use) VAX F and G floating-point
   12474      arithmetic instead of IEEE single and double precision.
   12475 
   12476 '-mexplicit-relocs'
   12477 '-mno-explicit-relocs'
   12478      Older Alpha assemblers provided no way to generate symbol
   12479      relocations except via assembler macros.  Use of these macros does
   12480      not allow optimal instruction scheduling.  GNU binutils as of
   12481      version 2.12 supports a new syntax that allows the compiler to
   12482      explicitly mark which relocations should apply to which
   12483      instructions.  This option is mostly useful for debugging, as GCC
   12484      detects the capabilities of the assembler when it is built and sets
   12485      the default accordingly.
   12486 
   12487 '-msmall-data'
   12488 '-mlarge-data'
   12489      When '-mexplicit-relocs' is in effect, static data is accessed via
   12490      "gp-relative" relocations.  When '-msmall-data' is used, objects 8
   12491      bytes long or smaller are placed in a "small data area" (the
   12492      '.sdata' and '.sbss' sections) and are accessed via 16-bit
   12493      relocations off of the '$gp' register.  This limits the size of the
   12494      small data area to 64KB, but allows the variables to be directly
   12495      accessed via a single instruction.
   12496 
   12497      The default is '-mlarge-data'.  With this option the data area is
   12498      limited to just below 2GB.  Programs that require more than 2GB of
   12499      data must use 'malloc' or 'mmap' to allocate the data in the heap
   12500      instead of in the program's data segment.
   12501 
   12502      When generating code for shared libraries, '-fpic' implies
   12503      '-msmall-data' and '-fPIC' implies '-mlarge-data'.
   12504 
   12505 '-msmall-text'
   12506 '-mlarge-text'
   12507      When '-msmall-text' is used, the compiler assumes that the code of
   12508      the entire program (or shared library) fits in 4MB, and is thus
   12509      reachable with a branch instruction.  When '-msmall-data' is used,
   12510      the compiler can assume that all local symbols share the same '$gp'
   12511      value, and thus reduce the number of instructions required for a
   12512      function call from 4 to 1.
   12513 
   12514      The default is '-mlarge-text'.
   12515 
   12516 '-mcpu=CPU_TYPE'
   12517      Set the instruction set and instruction scheduling parameters for
   12518      machine type CPU_TYPE.  You can specify either the 'EV' style name
   12519      or the corresponding chip number.  GCC supports scheduling
   12520      parameters for the EV4, EV5 and EV6 family of processors and
   12521      chooses the default values for the instruction set from the
   12522      processor you specify.  If you do not specify a processor type, GCC
   12523      defaults to the processor on which the compiler was built.
   12524 
   12525      Supported values for CPU_TYPE are
   12526 
   12527      'ev4'
   12528      'ev45'
   12529      '21064'
   12530           Schedules as an EV4 and has no instruction set extensions.
   12531 
   12532      'ev5'
   12533      '21164'
   12534           Schedules as an EV5 and has no instruction set extensions.
   12535 
   12536      'ev56'
   12537      '21164a'
   12538           Schedules as an EV5 and supports the BWX extension.
   12539 
   12540      'pca56'
   12541      '21164pc'
   12542      '21164PC'
   12543           Schedules as an EV5 and supports the BWX and MAX extensions.
   12544 
   12545      'ev6'
   12546      '21264'
   12547           Schedules as an EV6 and supports the BWX, FIX, and MAX
   12548           extensions.
   12549 
   12550      'ev67'
   12551      '21264a'
   12552           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
   12553           extensions.
   12554 
   12555      Native toolchains also support the value 'native', which selects
   12556      the best architecture option for the host processor.
   12557      '-mcpu=native' has no effect if GCC does not recognize the
   12558      processor.
   12559 
   12560 '-mtune=CPU_TYPE'
   12561      Set only the instruction scheduling parameters for machine type
   12562      CPU_TYPE.  The instruction set is not changed.
   12563 
   12564      Native toolchains also support the value 'native', which selects
   12565      the best architecture option for the host processor.
   12566      '-mtune=native' has no effect if GCC does not recognize the
   12567      processor.
   12568 
   12569 '-mmemory-latency=TIME'
   12570      Sets the latency the scheduler should assume for typical memory
   12571      references as seen by the application.  This number is highly
   12572      dependent on the memory access patterns used by the application and
   12573      the size of the external cache on the machine.
   12574 
   12575      Valid options for TIME are
   12576 
   12577      'NUMBER'
   12578           A decimal number representing clock cycles.
   12579 
   12580      'L1'
   12581      'L2'
   12582      'L3'
   12583      'main'
   12584           The compiler contains estimates of the number of clock cycles
   12585           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
   12586           (also called Dcache, Scache, and Bcache), as well as to main
   12587           memory.  Note that L3 is only valid for EV5.
   12588 
   12589 
   12590 File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
   12591 
   12592 3.17.11 FR30 Options
   12593 --------------------
   12594 
   12595 These options are defined specifically for the FR30 port.
   12596 
   12597 '-msmall-model'
   12598      Use the small address space model.  This can produce smaller code,
   12599      but it does assume that all symbolic values and addresses fit into
   12600      a 20-bit range.
   12601 
   12602 '-mno-lsim'
   12603      Assume that runtime support has been provided and so there is no
   12604      need to include the simulator library ('libsim.a') on the linker
   12605      command line.
   12606 
   12607 
   12608 File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
   12609 
   12610 3.17.12 FRV Options
   12611 -------------------
   12612 
   12613 '-mgpr-32'
   12614 
   12615      Only use the first 32 general-purpose registers.
   12616 
   12617 '-mgpr-64'
   12618 
   12619      Use all 64 general-purpose registers.
   12620 
   12621 '-mfpr-32'
   12622 
   12623      Use only the first 32 floating-point registers.
   12624 
   12625 '-mfpr-64'
   12626 
   12627      Use all 64 floating-point registers.
   12628 
   12629 '-mhard-float'
   12630 
   12631      Use hardware instructions for floating-point operations.
   12632 
   12633 '-msoft-float'
   12634 
   12635      Use library routines for floating-point operations.
   12636 
   12637 '-malloc-cc'
   12638 
   12639      Dynamically allocate condition code registers.
   12640 
   12641 '-mfixed-cc'
   12642 
   12643      Do not try to dynamically allocate condition code registers, only
   12644      use 'icc0' and 'fcc0'.
   12645 
   12646 '-mdword'
   12647 
   12648      Change ABI to use double word insns.
   12649 
   12650 '-mno-dword'
   12651 
   12652      Do not use double word instructions.
   12653 
   12654 '-mdouble'
   12655 
   12656      Use floating-point double instructions.
   12657 
   12658 '-mno-double'
   12659 
   12660      Do not use floating-point double instructions.
   12661 
   12662 '-mmedia'
   12663 
   12664      Use media instructions.
   12665 
   12666 '-mno-media'
   12667 
   12668      Do not use media instructions.
   12669 
   12670 '-mmuladd'
   12671 
   12672      Use multiply and add/subtract instructions.
   12673 
   12674 '-mno-muladd'
   12675 
   12676      Do not use multiply and add/subtract instructions.
   12677 
   12678 '-mfdpic'
   12679 
   12680      Select the FDPIC ABI, which uses function descriptors to represent
   12681      pointers to functions.  Without any PIC/PIE-related options, it
   12682      implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
   12683      and small data are within a 12-bit range from the GOT base address;
   12684      with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
   12685      With a 'bfin-elf' target, this option implies '-msim'.
   12686 
   12687 '-minline-plt'
   12688 
   12689      Enable inlining of PLT entries in function calls to functions that
   12690      are not known to bind locally.  It has no effect without '-mfdpic'.
   12691      It's enabled by default if optimizing for speed and compiling for
   12692      shared libraries (i.e., '-fPIC' or '-fpic'), or when an
   12693      optimization option such as '-O3' or above is present in the
   12694      command line.
   12695 
   12696 '-mTLS'
   12697 
   12698      Assume a large TLS segment when generating thread-local code.
   12699 
   12700 '-mtls'
   12701 
   12702      Do not assume a large TLS segment when generating thread-local
   12703      code.
   12704 
   12705 '-mgprel-ro'
   12706 
   12707      Enable the use of 'GPREL' relocations in the FDPIC ABI for data
   12708      that is known to be in read-only sections.  It's enabled by
   12709      default, except for '-fpic' or '-fpie': even though it may help
   12710      make the global offset table smaller, it trades 1 instruction for
   12711      4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
   12712      which may be shared by multiple symbols, and it avoids the need for
   12713      a GOT entry for the referenced symbol, so it's more likely to be a
   12714      win.  If it is not, '-mno-gprel-ro' can be used to disable it.
   12715 
   12716 '-multilib-library-pic'
   12717 
   12718      Link with the (library, not FD) pic libraries.  It's implied by
   12719      '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
   12720      '-mfdpic'.  You should never have to use it explicitly.
   12721 
   12722 '-mlinked-fp'
   12723 
   12724      Follow the EABI requirement of always creating a frame pointer
   12725      whenever a stack frame is allocated.  This option is enabled by
   12726      default and can be disabled with '-mno-linked-fp'.
   12727 
   12728 '-mlong-calls'
   12729 
   12730      Use indirect addressing to call functions outside the current
   12731      compilation unit.  This allows the functions to be placed anywhere
   12732      within the 32-bit address space.
   12733 
   12734 '-malign-labels'
   12735 
   12736      Try to align labels to an 8-byte boundary by inserting NOPs into
   12737      the previous packet.  This option only has an effect when VLIW
   12738      packing is enabled.  It doesn't create new packets; it merely adds
   12739      NOPs to existing ones.
   12740 
   12741 '-mlibrary-pic'
   12742 
   12743      Generate position-independent EABI code.
   12744 
   12745 '-macc-4'
   12746 
   12747      Use only the first four media accumulator registers.
   12748 
   12749 '-macc-8'
   12750 
   12751      Use all eight media accumulator registers.
   12752 
   12753 '-mpack'
   12754 
   12755      Pack VLIW instructions.
   12756 
   12757 '-mno-pack'
   12758 
   12759      Do not pack VLIW instructions.
   12760 
   12761 '-mno-eflags'
   12762 
   12763      Do not mark ABI switches in e_flags.
   12764 
   12765 '-mcond-move'
   12766 
   12767      Enable the use of conditional-move instructions (default).
   12768 
   12769      This switch is mainly for debugging the compiler and will likely be
   12770      removed in a future version.
   12771 
   12772 '-mno-cond-move'
   12773 
   12774      Disable the use of conditional-move instructions.
   12775 
   12776      This switch is mainly for debugging the compiler and will likely be
   12777      removed in a future version.
   12778 
   12779 '-mscc'
   12780 
   12781      Enable the use of conditional set instructions (default).
   12782 
   12783      This switch is mainly for debugging the compiler and will likely be
   12784      removed in a future version.
   12785 
   12786 '-mno-scc'
   12787 
   12788      Disable the use of conditional set instructions.
   12789 
   12790      This switch is mainly for debugging the compiler and will likely be
   12791      removed in a future version.
   12792 
   12793 '-mcond-exec'
   12794 
   12795      Enable the use of conditional execution (default).
   12796 
   12797      This switch is mainly for debugging the compiler and will likely be
   12798      removed in a future version.
   12799 
   12800 '-mno-cond-exec'
   12801 
   12802      Disable the use of conditional execution.
   12803 
   12804      This switch is mainly for debugging the compiler and will likely be
   12805      removed in a future version.
   12806 
   12807 '-mvliw-branch'
   12808 
   12809      Run a pass to pack branches into VLIW instructions (default).
   12810 
   12811      This switch is mainly for debugging the compiler and will likely be
   12812      removed in a future version.
   12813 
   12814 '-mno-vliw-branch'
   12815 
   12816      Do not run a pass to pack branches into VLIW instructions.
   12817 
   12818      This switch is mainly for debugging the compiler and will likely be
   12819      removed in a future version.
   12820 
   12821 '-mmulti-cond-exec'
   12822 
   12823      Enable optimization of '&&' and '||' in conditional execution
   12824      (default).
   12825 
   12826      This switch is mainly for debugging the compiler and will likely be
   12827      removed in a future version.
   12828 
   12829 '-mno-multi-cond-exec'
   12830 
   12831      Disable optimization of '&&' and '||' in conditional execution.
   12832 
   12833      This switch is mainly for debugging the compiler and will likely be
   12834      removed in a future version.
   12835 
   12836 '-mnested-cond-exec'
   12837 
   12838      Enable nested conditional execution optimizations (default).
   12839 
   12840      This switch is mainly for debugging the compiler and will likely be
   12841      removed in a future version.
   12842 
   12843 '-mno-nested-cond-exec'
   12844 
   12845      Disable nested conditional execution optimizations.
   12846 
   12847      This switch is mainly for debugging the compiler and will likely be
   12848      removed in a future version.
   12849 
   12850 '-moptimize-membar'
   12851 
   12852      This switch removes redundant 'membar' instructions from the
   12853      compiler-generated code.  It is enabled by default.
   12854 
   12855 '-mno-optimize-membar'
   12856 
   12857      This switch disables the automatic removal of redundant 'membar'
   12858      instructions from the generated code.
   12859 
   12860 '-mtomcat-stats'
   12861 
   12862      Cause gas to print out tomcat statistics.
   12863 
   12864 '-mcpu=CPU'
   12865 
   12866      Select the processor type for which to generate code.  Possible
   12867      values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
   12868      'fr400', 'fr300' and 'simple'.
   12869 
   12870 
   12871 File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
   12872 
   12873 3.17.13 GNU/Linux Options
   12874 -------------------------
   12875 
   12876 These '-m' options are defined for GNU/Linux targets:
   12877 
   12878 '-mglibc'
   12879      Use the GNU C library.  This is the default except on
   12880      '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets.
   12881 
   12882 '-muclibc'
   12883      Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
   12884      targets.
   12885 
   12886 '-mbionic'
   12887      Use Bionic C library.  This is the default on '*-*-linux-*android*'
   12888      targets.
   12889 
   12890 '-mandroid'
   12891      Compile code compatible with Android platform.  This is the default
   12892      on '*-*-linux-*android*' targets.
   12893 
   12894      When compiling, this option enables '-mbionic', '-fPIC',
   12895      '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
   12896      option makes the GCC driver pass Android-specific options to the
   12897      linker.  Finally, this option causes the preprocessor macro
   12898      '__ANDROID__' to be defined.
   12899 
   12900 '-tno-android-cc'
   12901      Disable compilation effects of '-mandroid', i.e., do not enable
   12902      '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.
   12903 
   12904 '-tno-android-ld'
   12905      Disable linking effects of '-mandroid', i.e., pass standard Linux
   12906      linking options to the linker.
   12907 
   12908 
   12909 File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
   12910 
   12911 3.17.14 H8/300 Options
   12912 ----------------------
   12913 
   12914 These '-m' options are defined for the H8/300 implementations:
   12915 
   12916 '-mrelax'
   12917      Shorten some address references at link time, when possible; uses
   12918      the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
   12919      for a fuller description.
   12920 
   12921 '-mh'
   12922      Generate code for the H8/300H.
   12923 
   12924 '-ms'
   12925      Generate code for the H8S.
   12926 
   12927 '-mn'
   12928      Generate code for the H8S and H8/300H in the normal mode.  This
   12929      switch must be used either with '-mh' or '-ms'.
   12930 
   12931 '-ms2600'
   12932      Generate code for the H8S/2600.  This switch must be used with
   12933      '-ms'.
   12934 
   12935 '-mexr'
   12936      Extended registers are stored on stack before execution of function
   12937      with monitor attribute.  Default option is '-mexr'.  This option is
   12938      valid only for H8S targets.
   12939 
   12940 '-mno-exr'
   12941      Extended registers are not stored on stack before execution of
   12942      function with monitor attribute.  Default option is '-mno-exr'.
   12943      This option is valid only for H8S targets.
   12944 
   12945 '-mint32'
   12946      Make 'int' data 32 bits by default.
   12947 
   12948 '-malign-300'
   12949      On the H8/300H and H8S, use the same alignment rules as for the
   12950      H8/300.  The default for the H8/300H and H8S is to align longs and
   12951      floats on 4-byte boundaries.  '-malign-300' causes them to be
   12952      aligned on 2-byte boundaries.  This option has no effect on the
   12953      H8/300.
   12954 
   12955 
   12956 File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
   12957 
   12958 3.17.15 HPPA Options
   12959 --------------------
   12960 
   12961 These '-m' options are defined for the HPPA family of computers:
   12962 
   12963 '-march=ARCHITECTURE-TYPE'
   12964      Generate code for the specified architecture.  The choices for
   12965      ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
   12966      for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
   12967      HP-UX system to determine the proper architecture option for your
   12968      machine.  Code compiled for lower numbered architectures runs on
   12969      higher numbered architectures, but not the other way around.
   12970 
   12971 '-mpa-risc-1-0'
   12972 '-mpa-risc-1-1'
   12973 '-mpa-risc-2-0'
   12974      Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
   12975      respectively.
   12976 
   12977 '-mbig-switch'
   12978      Generate code suitable for big switch tables.  Use this option only
   12979      if the assembler/linker complain about out-of-range branches within
   12980      a switch table.
   12981 
   12982 '-mjump-in-delay'
   12983      Fill delay slots of function calls with unconditional jump
   12984      instructions by modifying the return pointer for the function call
   12985      to be the target of the conditional jump.
   12986 
   12987 '-mdisable-fpregs'
   12988      Prevent floating-point registers from being used in any manner.
   12989      This is necessary for compiling kernels that perform lazy context
   12990      switching of floating-point registers.  If you use this option and
   12991      attempt to perform floating-point operations, the compiler aborts.
   12992 
   12993 '-mdisable-indexing'
   12994      Prevent the compiler from using indexing address modes.  This
   12995      avoids some rather obscure problems when compiling MIG generated
   12996      code under MACH.
   12997 
   12998 '-mno-space-regs'
   12999      Generate code that assumes the target has no space registers.  This
   13000      allows GCC to generate faster indirect calls and use unscaled index
   13001      address modes.
   13002 
   13003      Such code is suitable for level 0 PA systems and kernels.
   13004 
   13005 '-mfast-indirect-calls'
   13006      Generate code that assumes calls never cross space boundaries.
   13007      This allows GCC to emit code that performs faster indirect calls.
   13008 
   13009      This option does not work in the presence of shared libraries or
   13010      nested functions.
   13011 
   13012 '-mfixed-range=REGISTER-RANGE'
   13013      Generate code treating the given register range as fixed registers.
   13014      A fixed register is one that the register allocator cannot use.
   13015      This is useful when compiling kernel code.  A register range is
   13016      specified as two registers separated by a dash.  Multiple register
   13017      ranges can be specified separated by a comma.
   13018 
   13019 '-mlong-load-store'
   13020      Generate 3-instruction load and store sequences as sometimes
   13021      required by the HP-UX 10 linker.  This is equivalent to the '+k'
   13022      option to the HP compilers.
   13023 
   13024 '-mportable-runtime'
   13025      Use the portable calling conventions proposed by HP for ELF
   13026      systems.
   13027 
   13028 '-mgas'
   13029      Enable the use of assembler directives only GAS understands.
   13030 
   13031 '-mschedule=CPU-TYPE'
   13032      Schedule code according to the constraints for the machine type
   13033      CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
   13034      '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
   13035      HP-UX system to determine the proper scheduling option for your
   13036      machine.  The default scheduling is '8000'.
   13037 
   13038 '-mlinker-opt'
   13039      Enable the optimization pass in the HP-UX linker.  Note this makes
   13040      symbolic debugging impossible.  It also triggers a bug in the HP-UX
   13041      8 and HP-UX 9 linkers in which they give bogus error messages when
   13042      linking some programs.
   13043 
   13044 '-msoft-float'
   13045      Generate output containing library calls for floating point.
   13046      *Warning:* the requisite libraries are not available for all HPPA
   13047      targets.  Normally the facilities of the machine's usual C compiler
   13048      are used, but this cannot be done directly in cross-compilation.
   13049      You must make your own arrangements to provide suitable library
   13050      functions for cross-compilation.
   13051 
   13052      '-msoft-float' changes the calling convention in the output file;
   13053      therefore, it is only useful if you compile _all_ of a program with
   13054      this option.  In particular, you need to compile 'libgcc.a', the
   13055      library that comes with GCC, with '-msoft-float' in order for this
   13056      to work.
   13057 
   13058 '-msio'
   13059      Generate the predefine, '_SIO', for server IO.  The default is
   13060      '-mwsio'.  This generates the predefines, '__hp9000s700',
   13061      '__hp9000s700__' and '_WSIO', for workstation IO.  These options
   13062      are available under HP-UX and HI-UX.
   13063 
   13064 '-mgnu-ld'
   13065      Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
   13066      when building a shared library.  It is the default when GCC is
   13067      configured, explicitly or implicitly, with the GNU linker.  This
   13068      option does not affect which 'ld' is called; it only changes what
   13069      parameters are passed to that 'ld'.  The 'ld' that is called is
   13070      determined by the '--with-ld' configure option, GCC's program
   13071      search path, and finally by the user's 'PATH'.  The linker used by
   13072      GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
   13073      option is only available on the 64-bit HP-UX GCC, i.e. configured
   13074      with 'hppa*64*-*-hpux*'.
   13075 
   13076 '-mhp-ld'
   13077      Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
   13078      building a shared library and passes '+Accept TypeMismatch' to 'ld'
   13079      on all links.  It is the default when GCC is configured, explicitly
   13080      or implicitly, with the HP linker.  This option does not affect
   13081      which 'ld' is called; it only changes what parameters are passed to
   13082      that 'ld'.  The 'ld' that is called is determined by the
   13083      '--with-ld' configure option, GCC's program search path, and
   13084      finally by the user's 'PATH'.  The linker used by GCC can be
   13085      printed using 'which `gcc -print-prog-name=ld`'.  This option is
   13086      only available on the 64-bit HP-UX GCC, i.e. configured with
   13087      'hppa*64*-*-hpux*'.
   13088 
   13089 '-mlong-calls'
   13090      Generate code that uses long call sequences.  This ensures that a
   13091      call is always able to reach linker generated stubs.  The default
   13092      is to generate long calls only when the distance from the call site
   13093      to the beginning of the function or translation unit, as the case
   13094      may be, exceeds a predefined limit set by the branch type being
   13095      used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
   13096      respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
   13097      always limited at 240,000 bytes.
   13098 
   13099      Distances are measured from the beginning of functions when using
   13100      the '-ffunction-sections' option, or when using the '-mgas' and
   13101      '-mno-portable-runtime' options together under HP-UX with the SOM
   13102      linker.
   13103 
   13104      It is normally not desirable to use this option as it degrades
   13105      performance.  However, it may be useful in large applications,
   13106      particularly when partial linking is used to build the application.
   13107 
   13108      The types of long calls used depends on the capabilities of the
   13109      assembler and linker, and the type of code being generated.  The
   13110      impact on systems that support long absolute calls, and long pic
   13111      symbol-difference or pc-relative calls should be relatively small.
   13112      However, an indirect call is used on 32-bit ELF systems in pic code
   13113      and it is quite long.
   13114 
   13115 '-munix=UNIX-STD'
   13116      Generate compiler predefines and select a startfile for the
   13117      specified UNIX standard.  The choices for UNIX-STD are '93', '95'
   13118      and '98'.  '93' is supported on all HP-UX versions.  '95' is
   13119      available on HP-UX 10.10 and later.  '98' is available on HP-UX
   13120      11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
   13121      for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
   13122      later.
   13123 
   13124      '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
   13125      '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
   13126      '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
   13127      '-munix=98' provides additional predefines for '_XOPEN_UNIX',
   13128      '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
   13129      '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.
   13130 
   13131      It is _important_ to note that this option changes the interfaces
   13132      for various library routines.  It also affects the operational
   13133      behavior of the C library.  Thus, _extreme_ care is needed in using
   13134      this option.
   13135 
   13136      Library code that is intended to operate with more than one UNIX
   13137      standard must test, set and restore the variable
   13138      __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
   13139      provide this capability.
   13140 
   13141 '-nolibdld'
   13142      Suppress the generation of link options to search libdld.sl when
   13143      the '-static' option is specified on HP-UX 10 and later.
   13144 
   13145 '-static'
   13146      The HP-UX implementation of setlocale in libc has a dependency on
   13147      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
   13148      when the '-static' option is specified, special link options are
   13149      needed to resolve this dependency.
   13150 
   13151      On HP-UX 10 and later, the GCC driver adds the necessary options to
   13152      link with libdld.sl when the '-static' option is specified.  This
   13153      causes the resulting binary to be dynamic.  On the 64-bit port, the
   13154      linkers generate dynamic binaries by default in any case.  The
   13155      '-nolibdld' option can be used to prevent the GCC driver from
   13156      adding these link options.
   13157 
   13158 '-threads'
   13159      Add support for multithreading with the "dce thread" library under
   13160      HP-UX.  This option sets flags for both the preprocessor and
   13161      linker.
   13162 
   13163 
   13164 File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
   13165 
   13166 3.17.16 Intel 386 and AMD x86-64 Options
   13167 ----------------------------------------
   13168 
   13169 These '-m' options are defined for the i386 and x86-64 family of
   13170 computers:
   13171 
   13172 '-march=CPU-TYPE'
   13173      Generate instructions for the machine type CPU-TYPE.  In contrast
   13174      to '-mtune=CPU-TYPE', which merely tunes the generated code for the
   13175      specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
   13176      that may not run at all on processors other than the one indicated.
   13177      Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.
   13178 
   13179      The choices for CPU-TYPE are:
   13180 
   13181      'native'
   13182           This selects the CPU to generate code for at compilation time
   13183           by determining the processor type of the compiling machine.
   13184           Using '-march=native' enables all instruction subsets
   13185           supported by the local machine (hence the result might not run
   13186           on different machines).  Using '-mtune=native' produces code
   13187           optimized for the local machine under the constraints of the
   13188           selected instruction set.
   13189 
   13190      'i386'
   13191           Original Intel i386 CPU.
   13192 
   13193      'i486'
   13194           Intel i486 CPU.  (No scheduling is implemented for this chip.)
   13195 
   13196      'i586'
   13197      'pentium'
   13198           Intel Pentium CPU with no MMX support.
   13199 
   13200      'pentium-mmx'
   13201           Intel Pentium MMX CPU, based on Pentium core with MMX
   13202           instruction set support.
   13203 
   13204      'pentiumpro'
   13205           Intel Pentium Pro CPU.
   13206 
   13207      'i686'
   13208           When used with '-march', the Pentium Pro instruction set is
   13209           used, so the code runs on all i686 family chips.  When used
   13210           with '-mtune', it has the same meaning as 'generic'.
   13211 
   13212      'pentium2'
   13213           Intel Pentium II CPU, based on Pentium Pro core with MMX
   13214           instruction set support.
   13215 
   13216      'pentium3'
   13217      'pentium3m'
   13218           Intel Pentium III CPU, based on Pentium Pro core with MMX and
   13219           SSE instruction set support.
   13220 
   13221      'pentium-m'
   13222           Intel Pentium M; low-power version of Intel Pentium III CPU
   13223           with MMX, SSE and SSE2 instruction set support.  Used by
   13224           Centrino notebooks.
   13225 
   13226      'pentium4'
   13227      'pentium4m'
   13228           Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
   13229           support.
   13230 
   13231      'prescott'
   13232           Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
   13233           and SSE3 instruction set support.
   13234 
   13235      'nocona'
   13236           Improved version of Intel Pentium 4 CPU with 64-bit
   13237           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
   13238 
   13239      'core2'
   13240           Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
   13241           and SSSE3 instruction set support.
   13242 
   13243      'corei7'
   13244           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
   13245           SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
   13246 
   13247      'corei7-avx'
   13248           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
   13249           SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
   13250           set support.
   13251 
   13252      'core-avx-i'
   13253           Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
   13254           SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
   13255           F16C instruction set support.
   13256 
   13257      'core-avx2'
   13258           Intel Core CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
   13259           SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE,
   13260           RDRND, FMA, BMI, BMI2 and F16C instruction set support.
   13261 
   13262      'atom'
   13263           Intel Atom CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2,
   13264           SSE3 and SSSE3 instruction set support.
   13265 
   13266      'k6'
   13267           AMD K6 CPU with MMX instruction set support.
   13268 
   13269      'k6-2'
   13270      'k6-3'
   13271           Improved versions of AMD K6 CPU with MMX and 3DNow!
   13272           instruction set support.
   13273 
   13274      'athlon'
   13275      'athlon-tbird'
   13276           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
   13277           prefetch instructions support.
   13278 
   13279      'athlon-4'
   13280      'athlon-xp'
   13281      'athlon-mp'
   13282           Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
   13283           full SSE instruction set support.
   13284 
   13285      'k8'
   13286      'opteron'
   13287      'athlon64'
   13288      'athlon-fx'
   13289           Processors based on the AMD K8 core with x86-64 instruction
   13290           set support, including the AMD Opteron, Athlon 64, and Athlon
   13291           64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
   13292           enhanced 3DNow! and 64-bit instruction set extensions.)
   13293 
   13294      'k8-sse3'
   13295      'opteron-sse3'
   13296      'athlon64-sse3'
   13297           Improved versions of AMD K8 cores with SSE3 instruction set
   13298           support.
   13299 
   13300      'amdfam10'
   13301      'barcelona'
   13302           CPUs based on AMD Family 10h cores with x86-64 instruction set
   13303           support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
   13304           enhanced 3DNow!, ABM and 64-bit instruction set extensions.)
   13305 
   13306      'bdver1'
   13307           CPUs based on AMD Family 15h cores with x86-64 instruction set
   13308           support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
   13309           CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
   13310           and 64-bit instruction set extensions.)
   13311      'bdver2'
   13312           AMD Family 15h core based CPUs with x86-64 instruction set
   13313           support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
   13314           AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
   13315           SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
   13316      'bdver3'
   13317           AMD Family 15h core based CPUs with x86-64 instruction set
   13318           support.  (This supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP,
   13319           AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
   13320           SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.
   13321 
   13322      'btver1'
   13323           CPUs based on AMD Family 14h cores with x86-64 instruction set
   13324           support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
   13325           CX16, ABM and 64-bit instruction set extensions.)
   13326 
   13327      'btver2'
   13328           CPUs based on AMD Family 16h cores with x86-64 instruction set
   13329           support.  This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
   13330           SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
   13331           and 64-bit instruction set extensions.
   13332 
   13333      'winchip-c6'
   13334           IDT WinChip C6 CPU, dealt in same way as i486 with additional
   13335           MMX instruction set support.
   13336 
   13337      'winchip2'
   13338           IDT WinChip 2 CPU, dealt in same way as i486 with additional
   13339           MMX and 3DNow! instruction set support.
   13340 
   13341      'c3'
   13342           VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
   13343           scheduling is implemented for this chip.)
   13344 
   13345      'c3-2'
   13346           VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
   13347           support.  (No scheduling is implemented for this chip.)
   13348 
   13349      'geode'
   13350           AMD Geode embedded processor with MMX and 3DNow! instruction
   13351           set support.
   13352 
   13353 '-mtune=CPU-TYPE'
   13354      Tune to CPU-TYPE everything applicable about the generated code,
   13355      except for the ABI and the set of available instructions.  While
   13356      picking a specific CPU-TYPE schedules things appropriately for that
   13357      particular chip, the compiler does not generate any code that
   13358      cannot run on the default machine type unless you use a
   13359      '-march=CPU-TYPE' option.  For example, if GCC is configured for
   13360      i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
   13361      tuned for Pentium 4 but still runs on i686 machines.
   13362 
   13363      The choices for CPU-TYPE are the same as for '-march'.  In
   13364      addition, '-mtune' supports an extra choice for CPU-TYPE:
   13365 
   13366      'generic'
   13367           Produce code optimized for the most common IA32/AMD64/EM64T
   13368           processors.  If you know the CPU on which your code will run,
   13369           then you should use the corresponding '-mtune' or '-march'
   13370           option instead of '-mtune=generic'.  But, if you do not know
   13371           exactly what CPU users of your application will have, then you
   13372           should use this option.
   13373 
   13374           As new processors are deployed in the marketplace, the
   13375           behavior of this option will change.  Therefore, if you
   13376           upgrade to a newer version of GCC, code generation controlled
   13377           by this option will change to reflect the processors that are
   13378           most common at the time that version of GCC is released.
   13379 
   13380           There is no '-march=generic' option because '-march' indicates
   13381           the instruction set the compiler can use, and there is no
   13382           generic instruction set applicable to all processors.  In
   13383           contrast, '-mtune' indicates the processor (or, in this case,
   13384           collection of processors) for which the code is optimized.
   13385 
   13386 '-mcpu=CPU-TYPE'
   13387      A deprecated synonym for '-mtune'.
   13388 
   13389 '-mfpmath=UNIT'
   13390      Generate floating-point arithmetic for selected unit UNIT.  The
   13391      choices for UNIT are:
   13392 
   13393      '387'
   13394           Use the standard 387 floating-point coprocessor present on the
   13395           majority of chips and emulated otherwise.  Code compiled with
   13396           this option runs almost everywhere.  The temporary results are
   13397           computed in 80-bit precision instead of the precision
   13398           specified by the type, resulting in slightly different results
   13399           compared to most of other chips.  See '-ffloat-store' for more
   13400           detailed description.
   13401 
   13402           This is the default choice for i386 compiler.
   13403 
   13404      'sse'
   13405           Use scalar floating-point instructions present in the SSE
   13406           instruction set.  This instruction set is supported by Pentium
   13407           III and newer chips, and in the AMD line by Athlon-4, Athlon
   13408           XP and Athlon MP chips.  The earlier version of the SSE
   13409           instruction set supports only single-precision arithmetic,
   13410           thus the double and extended-precision arithmetic are still
   13411           done using 387.  A later version, present only in Pentium 4
   13412           and AMD x86-64 chips, supports double-precision arithmetic
   13413           too.
   13414 
   13415           For the i386 compiler, you must use '-march=CPU-TYPE', '-msse'
   13416           or '-msse2' switches to enable SSE extensions and make this
   13417           option effective.  For the x86-64 compiler, these extensions
   13418           are enabled by default.
   13419 
   13420           The resulting code should be considerably faster in the
   13421           majority of cases and avoid the numerical instability problems
   13422           of 387 code, but may break some existing code that expects
   13423           temporaries to be 80 bits.
   13424 
   13425           This is the default choice for the x86-64 compiler.
   13426 
   13427      'sse,387'
   13428      'sse+387'
   13429      'both'
   13430           Attempt to utilize both instruction sets at once.  This
   13431           effectively doubles the amount of available registers, and on
   13432           chips with separate execution units for 387 and SSE the
   13433           execution resources too.  Use this option with care, as it is
   13434           still experimental, because the GCC register allocator does
   13435           not model separate functional units well, resulting in
   13436           unstable performance.
   13437 
   13438 '-masm=DIALECT'
   13439      Output assembly instructions using selected DIALECT.  Supported
   13440      choices are 'intel' or 'att' (the default).  Darwin does not
   13441      support 'intel'.
   13442 
   13443 '-mieee-fp'
   13444 '-mno-ieee-fp'
   13445      Control whether or not the compiler uses IEEE floating-point
   13446      comparisons.  These correctly handle the case where the result of a
   13447      comparison is unordered.
   13448 
   13449 '-msoft-float'
   13450      Generate output containing library calls for floating point.
   13451 
   13452      *Warning:* the requisite libraries are not part of GCC.  Normally
   13453      the facilities of the machine's usual C compiler are used, but this
   13454      can't be done directly in cross-compilation.  You must make your
   13455      own arrangements to provide suitable library functions for
   13456      cross-compilation.
   13457 
   13458      On machines where a function returns floating-point results in the
   13459      80387 register stack, some floating-point opcodes may be emitted
   13460      even if '-msoft-float' is used.
   13461 
   13462 '-mno-fp-ret-in-387'
   13463      Do not use the FPU registers for return values of functions.
   13464 
   13465      The usual calling convention has functions return values of types
   13466      'float' and 'double' in an FPU register, even if there is no FPU.
   13467      The idea is that the operating system should emulate an FPU.
   13468 
   13469      The option '-mno-fp-ret-in-387' causes such values to be returned
   13470      in ordinary CPU registers instead.
   13471 
   13472 '-mno-fancy-math-387'
   13473      Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
   13474      instructions for the 387.  Specify this option to avoid generating
   13475      those instructions.  This option is the default on FreeBSD, OpenBSD
   13476      and NetBSD.  This option is overridden when '-march' indicates that
   13477      the target CPU always has an FPU and so the instruction does not
   13478      need emulation.  These instructions are not generated unless you
   13479      also use the '-funsafe-math-optimizations' switch.
   13480 
   13481 '-malign-double'
   13482 '-mno-align-double'
   13483      Control whether GCC aligns 'double', 'long double', and 'long long'
   13484      variables on a two-word boundary or a one-word boundary.  Aligning
   13485      'double' variables on a two-word boundary produces code that runs
   13486      somewhat faster on a Pentium at the expense of more memory.
   13487 
   13488      On x86-64, '-malign-double' is enabled by default.
   13489 
   13490      *Warning:* if you use the '-malign-double' switch, structures
   13491      containing the above types are aligned differently than the
   13492      published application binary interface specifications for the 386
   13493      and are not binary compatible with structures in code compiled
   13494      without that switch.
   13495 
   13496 '-m96bit-long-double'
   13497 '-m128bit-long-double'
   13498      These switches control the size of 'long double' type.  The i386
   13499      application binary interface specifies the size to be 96 bits, so
   13500      '-m96bit-long-double' is the default in 32-bit mode.
   13501 
   13502      Modern architectures (Pentium and newer) prefer 'long double' to be
   13503      aligned to an 8- or 16-byte boundary.  In arrays or structures
   13504      conforming to the ABI, this is not possible.  So specifying
   13505      '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
   13506      by padding the 'long double' with an additional 32-bit zero.
   13507 
   13508      In the x86-64 compiler, '-m128bit-long-double' is the default
   13509      choice as its ABI specifies that 'long double' is aligned on
   13510      16-byte boundary.
   13511 
   13512      Notice that neither of these options enable any extra precision
   13513      over the x87 standard of 80 bits for a 'long double'.
   13514 
   13515      *Warning:* if you override the default value for your target ABI,
   13516      this changes the size of structures and arrays containing 'long
   13517      double' variables, as well as modifying the function calling
   13518      convention for functions taking 'long double'.  Hence they are not
   13519      binary-compatible with code compiled without that switch.
   13520 
   13521 '-mlong-double-64'
   13522 '-mlong-double-80'
   13523      These switches control the size of 'long double' type.  A size of
   13524      64 bits makes the 'long double' type equivalent to the 'double'
   13525      type.  This is the default for Bionic C library.
   13526 
   13527      *Warning:* if you override the default value for your target ABI,
   13528      this changes the size of structures and arrays containing 'long
   13529      double' variables, as well as modifying the function calling
   13530      convention for functions taking 'long double'.  Hence they are not
   13531      binary-compatible with code compiled without that switch.
   13532 
   13533 '-mlarge-data-threshold=THRESHOLD'
   13534      When '-mcmodel=medium' is specified, data objects larger than
   13535      THRESHOLD are placed in the large data section.  This value must be
   13536      the same across all objects linked into the binary, and defaults to
   13537      65535.
   13538 
   13539 '-mrtd'
   13540      Use a different function-calling convention, in which functions
   13541      that take a fixed number of arguments return with the 'ret NUM'
   13542      instruction, which pops their arguments while returning.  This
   13543      saves one instruction in the caller since there is no need to pop
   13544      the arguments there.
   13545 
   13546      You can specify that an individual function is called with this
   13547      calling sequence with the function attribute 'stdcall'.  You can
   13548      also override the '-mrtd' option by using the function attribute
   13549      'cdecl'.  *Note Function Attributes::.
   13550 
   13551      *Warning:* this calling convention is incompatible with the one
   13552      normally used on Unix, so you cannot use it if you need to call
   13553      libraries compiled with the Unix compiler.
   13554 
   13555      Also, you must provide function prototypes for all functions that
   13556      take variable numbers of arguments (including 'printf'); otherwise
   13557      incorrect code is generated for calls to those functions.
   13558 
   13559      In addition, seriously incorrect code results if you call a
   13560      function with too many arguments.  (Normally, extra arguments are
   13561      harmlessly ignored.)
   13562 
   13563 '-mregparm=NUM'
   13564      Control how many registers are used to pass integer arguments.  By
   13565      default, no registers are used to pass arguments, and at most 3
   13566      registers can be used.  You can control this behavior for a
   13567      specific function by using the function attribute 'regparm'.  *Note
   13568      Function Attributes::.
   13569 
   13570      *Warning:* if you use this switch, and NUM is nonzero, then you
   13571      must build all modules with the same value, including any
   13572      libraries.  This includes the system libraries and startup modules.
   13573 
   13574 '-msseregparm'
   13575      Use SSE register passing conventions for float and double arguments
   13576      and return values.  You can control this behavior for a specific
   13577      function by using the function attribute 'sseregparm'.  *Note
   13578      Function Attributes::.
   13579 
   13580      *Warning:* if you use this switch then you must build all modules
   13581      with the same value, including any libraries.  This includes the
   13582      system libraries and startup modules.
   13583 
   13584 '-mvect8-ret-in-mem'
   13585      Return 8-byte vectors in memory instead of MMX registers.  This is
   13586      the default on Solaris 8 and 9 and VxWorks to match the ABI of the
   13587      Sun Studio compilers until version 12.  Later compiler versions
   13588      (starting with Studio 12 Update 1) follow the ABI used by other x86
   13589      targets, which is the default on Solaris 10 and later.  _Only_ use
   13590      this option if you need to remain compatible with existing code
   13591      produced by those previous compiler versions or older versions of
   13592      GCC.
   13593 
   13594 '-mpc32'
   13595 '-mpc64'
   13596 '-mpc80'
   13597 
   13598      Set 80387 floating-point precision to 32, 64 or 80 bits.  When
   13599      '-mpc32' is specified, the significands of results of
   13600      floating-point operations are rounded to 24 bits (single
   13601      precision); '-mpc64' rounds the significands of results of
   13602      floating-point operations to 53 bits (double precision) and
   13603      '-mpc80' rounds the significands of results of floating-point
   13604      operations to 64 bits (extended double precision), which is the
   13605      default.  When this option is used, floating-point operations in
   13606      higher precisions are not available to the programmer without
   13607      setting the FPU control word explicitly.
   13608 
   13609      Setting the rounding of floating-point operations to less than the
   13610      default 80 bits can speed some programs by 2% or more.  Note that
   13611      some mathematical libraries assume that extended-precision (80-bit)
   13612      floating-point operations are enabled by default; routines in such
   13613      libraries could suffer significant loss of accuracy, typically
   13614      through so-called "catastrophic cancellation", when this option is
   13615      used to set the precision to less than extended precision.
   13616 
   13617 '-mstackrealign'
   13618      Realign the stack at entry.  On the Intel x86, the '-mstackrealign'
   13619      option generates an alternate prologue and epilogue that realigns
   13620      the run-time stack if necessary.  This supports mixing legacy codes
   13621      that keep 4-byte stack alignment with modern codes that keep
   13622      16-byte stack alignment for SSE compatibility.  See also the
   13623      attribute 'force_align_arg_pointer', applicable to individual
   13624      functions.
   13625 
   13626 '-mpreferred-stack-boundary=NUM'
   13627      Attempt to keep the stack boundary aligned to a 2 raised to NUM
   13628      byte boundary.  If '-mpreferred-stack-boundary' is not specified,
   13629      the default is 4 (16 bytes or 128 bits).
   13630 
   13631      *Warning:* When generating code for the x86-64 architecture with
   13632      SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
   13633      to keep the stack boundary aligned to 8 byte boundary.  Since
   13634      x86-64 ABI require 16 byte stack alignment, this is ABI
   13635      incompatible and intended to be used in controlled environment
   13636      where stack space is important limitation.  This option will lead
   13637      to wrong code when functions compiled with 16 byte stack alignment
   13638      (such as functions from a standard library) are called with
   13639      misaligned stack.  In this case, SSE instructions may lead to
   13640      misaligned memory access traps.  In addition, variable arguments
   13641      will be handled incorrectly for 16 byte aligned objects (including
   13642      x87 long double and __int128), leading to wrong results.  You must
   13643      build all modules with '-mpreferred-stack-boundary=3', including
   13644      any libraries.  This includes the system libraries and startup
   13645      modules.
   13646 
   13647 '-mincoming-stack-boundary=NUM'
   13648      Assume the incoming stack is aligned to a 2 raised to NUM byte
   13649      boundary.  If '-mincoming-stack-boundary' is not specified, the one
   13650      specified by '-mpreferred-stack-boundary' is used.
   13651 
   13652      On Pentium and Pentium Pro, 'double' and 'long double' values
   13653      should be aligned to an 8-byte boundary (see '-malign-double') or
   13654      suffer significant run time performance penalties.  On Pentium III,
   13655      the Streaming SIMD Extension (SSE) data type '__m128' may not work
   13656      properly if it is not 16-byte aligned.
   13657 
   13658      To ensure proper alignment of this values on the stack, the stack
   13659      boundary must be as aligned as that required by any value stored on
   13660      the stack.  Further, every function must be generated such that it
   13661      keeps the stack aligned.  Thus calling a function compiled with a
   13662      higher preferred stack boundary from a function compiled with a
   13663      lower preferred stack boundary most likely misaligns the stack.  It
   13664      is recommended that libraries that use callbacks always use the
   13665      default setting.
   13666 
   13667      This extra alignment does consume extra stack space, and generally
   13668      increases code size.  Code that is sensitive to stack space usage,
   13669      such as embedded systems and operating system kernels, may want to
   13670      reduce the preferred alignment to '-mpreferred-stack-boundary=2'.
   13671 
   13672 '-mmmx'
   13673 '-mno-mmx'
   13674 '-msse'
   13675 '-mno-sse'
   13676 '-msse2'
   13677 '-mno-sse2'
   13678 '-msse3'
   13679 '-mno-sse3'
   13680 '-mssse3'
   13681 '-mno-ssse3'
   13682 '-msse4.1'
   13683 '-mno-sse4.1'
   13684 '-msse4.2'
   13685 '-mno-sse4.2'
   13686 '-msse4'
   13687 '-mno-sse4'
   13688 '-mavx'
   13689 '-mno-avx'
   13690 '-mavx2'
   13691 '-mno-avx2'
   13692 '-maes'
   13693 '-mno-aes'
   13694 '-mpclmul'
   13695 '-mno-pclmul'
   13696 '-mfsgsbase'
   13697 '-mno-fsgsbase'
   13698 '-mrdrnd'
   13699 '-mno-rdrnd'
   13700 '-mf16c'
   13701 '-mno-f16c'
   13702 '-mfma'
   13703 '-mno-fma'
   13704 '-msse4a'
   13705 '-mno-sse4a'
   13706 '-mfma4'
   13707 '-mno-fma4'
   13708 '-mxop'
   13709 '-mno-xop'
   13710 '-mlwp'
   13711 '-mno-lwp'
   13712 '-m3dnow'
   13713 '-mno-3dnow'
   13714 '-mpopcnt'
   13715 '-mno-popcnt'
   13716 '-mabm'
   13717 '-mno-abm'
   13718 '-mbmi'
   13719 '-mbmi2'
   13720 '-mno-bmi'
   13721 '-mno-bmi2'
   13722 '-mlzcnt'
   13723 '-mno-lzcnt'
   13724 '-mrtm'
   13725 '-mtbm'
   13726 '-mno-tbm'
   13727      These switches enable or disable the use of instructions in the
   13728      MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL,
   13729      FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2,
   13730      LZCNT, RTM or 3DNow! extended instruction sets.  These extensions
   13731      are also available as built-in functions: see *note X86 Built-in
   13732      Functions::, for details of the functions enabled and disabled by
   13733      these switches.
   13734 
   13735      To generate SSE/SSE2 instructions automatically from floating-point
   13736      code (as opposed to 387 instructions), see '-mfpmath=sse'.
   13737 
   13738      GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
   13739      generates new AVX instructions or AVX equivalence for all SSEx
   13740      instructions when needed.
   13741 
   13742      These options enable GCC to use these extended instructions in
   13743      generated code, even without '-mfpmath=sse'.  Applications that
   13744      perform run-time CPU detection must compile separate files for each
   13745      supported architecture, using the appropriate flags.  In
   13746      particular, the file containing the CPU detection code should be
   13747      compiled without these options.
   13748 
   13749 '-mcld'
   13750      This option instructs GCC to emit a 'cld' instruction in the
   13751      prologue of functions that use string instructions.  String
   13752      instructions depend on the DF flag to select between autoincrement
   13753      or autodecrement mode.  While the ABI specifies the DF flag to be
   13754      cleared on function entry, some operating systems violate this
   13755      specification by not clearing the DF flag in their exception
   13756      dispatchers.  The exception handler can be invoked with the DF flag
   13757      set, which leads to wrong direction mode when string instructions
   13758      are used.  This option can be enabled by default on 32-bit x86
   13759      targets by configuring GCC with the '--enable-cld' configure
   13760      option.  Generation of 'cld' instructions can be suppressed with
   13761      the '-mno-cld' compiler option in this case.
   13762 
   13763 '-mvzeroupper'
   13764      This option instructs GCC to emit a 'vzeroupper' instruction before
   13765      a transfer of control flow out of the function to minimize the AVX
   13766      to SSE transition penalty as well as remove unnecessary 'zeroupper'
   13767      intrinsics.
   13768 
   13769 '-mprefer-avx128'
   13770      This option instructs GCC to use 128-bit AVX instructions instead
   13771      of 256-bit AVX instructions in the auto-vectorizer.
   13772 
   13773 '-mcx16'
   13774      This option enables GCC to generate 'CMPXCHG16B' instructions.
   13775      'CMPXCHG16B' allows for atomic operations on 128-bit double
   13776      quadword (or oword) data types.  This is useful for high-resolution
   13777      counters that can be updated by multiple processors (or cores).
   13778      This instruction is generated as part of atomic built-in functions:
   13779      see *note __sync Builtins:: or *note __atomic Builtins:: for
   13780      details.
   13781 
   13782 '-msahf'
   13783      This option enables generation of 'SAHF' instructions in 64-bit
   13784      code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
   13785      the introduction of Pentium 4 G1 step in December 2005, lacked the
   13786      'LAHF' and 'SAHF' instructions which were supported by AMD64.
   13787      These are load and store instructions, respectively, for certain
   13788      status flags.  In 64-bit mode, the 'SAHF' instruction is used to
   13789      optimize 'fmod', 'drem', and 'remainder' built-in functions; see
   13790      *note Other Builtins:: for details.
   13791 
   13792 '-mmovbe'
   13793      This option enables use of the 'movbe' instruction to implement
   13794      '__builtin_bswap32' and '__builtin_bswap64'.
   13795 
   13796 '-mcrc32'
   13797      This option enables built-in functions '__builtin_ia32_crc32qi',
   13798      '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
   13799      '__builtin_ia32_crc32di' to generate the 'crc32' machine
   13800      instruction.
   13801 
   13802 '-mrecip'
   13803      This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
   13804      their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
   13805      Newton-Raphson step to increase precision instead of 'DIVSS' and
   13806      'SQRTSS' (and their vectorized variants) for single-precision
   13807      floating-point arguments.  These instructions are generated only
   13808      when '-funsafe-math-optimizations' is enabled together with
   13809      '-finite-math-only' and '-fno-trapping-math'.  Note that while the
   13810      throughput of the sequence is higher than the throughput of the
   13811      non-reciprocal instruction, the precision of the sequence can be
   13812      decreased by up to 2 ulp (i.e.  the inverse of 1.0 equals
   13813      0.99999994).
   13814 
   13815      Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
   13816      'RSQRTPS') already with '-ffast-math' (or the above option
   13817      combination), and doesn't need '-mrecip'.
   13818 
   13819      Also note that GCC emits the above sequence with additional
   13820      Newton-Raphson step for vectorized single-float division and
   13821      vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
   13822      option combination), and doesn't need '-mrecip'.
   13823 
   13824 '-mrecip=OPT'
   13825      This option controls which reciprocal estimate instructions may be
   13826      used.  OPT is a comma-separated list of options, which may be
   13827      preceded by a '!' to invert the option:
   13828 
   13829      'all'
   13830           Enable all estimate instructions.
   13831 
   13832      'default'
   13833           Enable the default instructions, equivalent to '-mrecip'.
   13834 
   13835      'none'
   13836           Disable all estimate instructions, equivalent to '-mno-recip'.
   13837 
   13838      'div'
   13839           Enable the approximation for scalar division.
   13840 
   13841      'vec-div'
   13842           Enable the approximation for vectorized division.
   13843 
   13844      'sqrt'
   13845           Enable the approximation for scalar square root.
   13846 
   13847      'vec-sqrt'
   13848           Enable the approximation for vectorized square root.
   13849 
   13850      So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
   13851      approximations, except for square root.
   13852 
   13853 '-mveclibabi=TYPE'
   13854      Specifies the ABI type to use for vectorizing intrinsics using an
   13855      external library.  Supported values for TYPE are 'svml' for the
   13856      Intel short vector math library and 'acml' for the AMD math core
   13857      library.  To use this option, both '-ftree-vectorize' and
   13858      '-funsafe-math-optimizations' have to be enabled, and an SVML or
   13859      ACML ABI-compatible library must be specified at link time.
   13860 
   13861      GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
   13862      'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2',
   13863      'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2',
   13864      'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2',
   13865      'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4',
   13866      'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4',
   13867      'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4',
   13868      'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function
   13869      type when '-mveclibabi=svml' is used, and '__vrd2_sin',
   13870      '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2',
   13871      '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf',
   13872      '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf'
   13873      for the corresponding function type when '-mveclibabi=acml' is
   13874      used.
   13875 
   13876 '-mabi=NAME'
   13877      Generate code for the specified calling convention.  Permissible
   13878      values are 'sysv' for the ABI used on GNU/Linux and other systems,
   13879      and 'ms' for the Microsoft ABI. The default is to use the Microsoft
   13880      ABI when targeting Microsoft Windows and the SysV ABI on all other
   13881      systems.  You can control this behavior for a specific function by
   13882      using the function attribute 'ms_abi'/'sysv_abi'.  *Note Function
   13883      Attributes::.
   13884 
   13885 '-mtls-dialect=TYPE'
   13886      Generate code to access thread-local storage using the 'gnu' or
   13887      'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
   13888      more efficient, but it may add compile- and run-time requirements
   13889      that cannot be satisfied on all systems.
   13890 
   13891 '-mpush-args'
   13892 '-mno-push-args'
   13893      Use PUSH operations to store outgoing parameters.  This method is
   13894      shorter and usually equally fast as method using SUB/MOV operations
   13895      and is enabled by default.  In some cases disabling it may improve
   13896      performance because of improved scheduling and reduced
   13897      dependencies.
   13898 
   13899 '-maccumulate-outgoing-args'
   13900      If enabled, the maximum amount of space required for outgoing
   13901      arguments is computed in the function prologue.  This is faster on
   13902      most modern CPUs because of reduced dependencies, improved
   13903      scheduling and reduced stack usage when the preferred stack
   13904      boundary is not equal to 2.  The drawback is a notable increase in
   13905      code size.  This switch implies '-mno-push-args'.
   13906 
   13907 '-mthreads'
   13908      Support thread-safe exception handling on MinGW. Programs that rely
   13909      on thread-safe exception handling must compile and link all code
   13910      with the '-mthreads' option.  When compiling, '-mthreads' defines
   13911      '-D_MT'; when linking, it links in a special thread helper library
   13912      '-lmingwthrd' which cleans up per-thread exception-handling data.
   13913 
   13914 '-mno-align-stringops'
   13915      Do not align the destination of inlined string operations.  This
   13916      switch reduces code size and improves performance in case the
   13917      destination is already aligned, but GCC doesn't know about it.
   13918 
   13919 '-minline-all-stringops'
   13920      By default GCC inlines string operations only when the destination
   13921      is known to be aligned to least a 4-byte boundary.  This enables
   13922      more inlining and increases code size, but may improve performance
   13923      of code that depends on fast 'memcpy', 'strlen', and 'memset' for
   13924      short lengths.
   13925 
   13926 '-minline-stringops-dynamically'
   13927      For string operations of unknown size, use run-time checks with
   13928      inline code for small blocks and a library call for large blocks.
   13929 
   13930 '-mstringop-strategy=ALG'
   13931      Override the internal decision heuristic for the particular
   13932      algorithm to use for inlining string operations.  The allowed
   13933      values for ALG are:
   13934 
   13935      'rep_byte'
   13936      'rep_4byte'
   13937      'rep_8byte'
   13938           Expand using i386 'rep' prefix of the specified size.
   13939 
   13940      'byte_loop'
   13941      'loop'
   13942      'unrolled_loop'
   13943           Expand into an inline loop.
   13944 
   13945      'libcall'
   13946           Always use a library call.
   13947 
   13948 '-momit-leaf-frame-pointer'
   13949      Don't keep the frame pointer in a register for leaf functions.
   13950      This avoids the instructions to save, set up, and restore frame
   13951      pointers and makes an extra register available in leaf functions.
   13952      The option '-fomit-leaf-frame-pointer' removes the frame pointer
   13953      for leaf functions, which might make debugging harder.
   13954 
   13955 '-mtls-direct-seg-refs'
   13956 '-mno-tls-direct-seg-refs'
   13957      Controls whether TLS variables may be accessed with offsets from
   13958      the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
   13959      whether the thread base pointer must be added.  Whether or not this
   13960      is valid depends on the operating system, and whether it maps the
   13961      segment to cover the entire TLS area.
   13962 
   13963      For systems that use the GNU C Library, the default is on.
   13964 
   13965 '-msse2avx'
   13966 '-mno-sse2avx'
   13967      Specify that the assembler should encode SSE instructions with VEX
   13968      prefix.  The option '-mavx' turns this on by default.
   13969 
   13970 '-mfentry'
   13971 '-mno-fentry'
   13972      If profiling is active ('-pg'), put the profiling counter call
   13973      before the prologue.  Note: On x86 architectures the attribute
   13974      'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
   13975      '-pg'.
   13976 
   13977 '-m8bit-idiv'
   13978 '-mno-8bit-idiv'
   13979      On some processors, like Intel Atom, 8-bit unsigned integer divide
   13980      is much faster than 32-bit/64-bit integer divide.  This option
   13981      generates a run-time check.  If both dividend and divisor are
   13982      within range of 0 to 255, 8-bit unsigned integer divide is used
   13983      instead of 32-bit/64-bit integer divide.
   13984 
   13985 '-mavx256-split-unaligned-load'
   13986 '-mavx256-split-unaligned-store'
   13987      Split 32-byte AVX unaligned load and store.
   13988 
   13989  These '-m' switches are supported in addition to the above on x86-64
   13990 processors in 64-bit environments.
   13991 
   13992 '-m32'
   13993 '-m64'
   13994 '-mx32'
   13995      Generate code for a 32-bit or 64-bit environment.  The '-m32'
   13996      option sets 'int', 'long', and pointer types to 32 bits, and
   13997      generates code that runs on any i386 system.
   13998 
   13999      The '-m64' option sets 'int' to 32 bits and 'long' and pointer
   14000      types to 64 bits, and generates code for the x86-64 architecture.
   14001      For Darwin only the '-m64' option also turns off the '-fno-pic' and
   14002      '-mdynamic-no-pic' options.
   14003 
   14004      The '-mx32' option sets 'int', 'long', and pointer types to 32
   14005      bits, and generates code for the x86-64 architecture.
   14006 
   14007 '-mno-red-zone'
   14008      Do not use a so-called "red zone" for x86-64 code.  The red zone is
   14009      mandated by the x86-64 ABI; it is a 128-byte area beyond the
   14010      location of the stack pointer that is not modified by signal or
   14011      interrupt handlers and therefore can be used for temporary data
   14012      without adjusting the stack pointer.  The flag '-mno-red-zone'
   14013      disables this red zone.
   14014 
   14015 '-mcmodel=small'
   14016      Generate code for the small code model: the program and its symbols
   14017      must be linked in the lower 2 GB of the address space.  Pointers
   14018      are 64 bits.  Programs can be statically or dynamically linked.
   14019      This is the default code model.
   14020 
   14021 '-mcmodel=kernel'
   14022      Generate code for the kernel code model.  The kernel runs in the
   14023      negative 2 GB of the address space.  This model has to be used for
   14024      Linux kernel code.
   14025 
   14026 '-mcmodel=medium'
   14027      Generate code for the medium model: the program is linked in the
   14028      lower 2 GB of the address space.  Small symbols are also placed
   14029      there.  Symbols with sizes larger than '-mlarge-data-threshold' are
   14030      put into large data or BSS sections and can be located above 2GB.
   14031      Programs can be statically or dynamically linked.
   14032 
   14033 '-mcmodel=large'
   14034      Generate code for the large model.  This model makes no assumptions
   14035      about addresses and sizes of sections.
   14036 
   14037 '-maddress-mode=long'
   14038      Generate code for long address mode.  This is only supported for
   14039      64-bit and x32 environments.  It is the default address mode for
   14040      64-bit environments.
   14041 
   14042 '-maddress-mode=short'
   14043      Generate code for short address mode.  This is only supported for
   14044      32-bit and x32 environments.  It is the default address mode for
   14045      32-bit and x32 environments.
   14046 
   14047 
   14048 File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
   14049 
   14050 3.17.17 i386 and x86-64 Windows Options
   14051 ---------------------------------------
   14052 
   14053 These additional options are available for Microsoft Windows targets:
   14054 
   14055 '-mconsole'
   14056      This option specifies that a console application is to be
   14057      generated, by instructing the linker to set the PE header subsystem
   14058      type required for console applications.  This option is available
   14059      for Cygwin and MinGW targets and is enabled by default on those
   14060      targets.
   14061 
   14062 '-mdll'
   14063      This option is available for Cygwin and MinGW targets.  It
   14064      specifies that a DLL--a dynamic link library--is to be generated,
   14065      enabling the selection of the required runtime startup object and
   14066      entry point.
   14067 
   14068 '-mnop-fun-dllimport'
   14069      This option is available for Cygwin and MinGW targets.  It
   14070      specifies that the 'dllimport' attribute should be ignored.
   14071 
   14072 '-mthread'
   14073      This option is available for MinGW targets.  It specifies that
   14074      MinGW-specific thread support is to be used.
   14075 
   14076 '-municode'
   14077      This option is available for MinGW-w64 targets.  It causes the
   14078      'UNICODE' preprocessor macro to be predefined, and chooses
   14079      Unicode-capable runtime startup code.
   14080 
   14081 '-mwin32'
   14082      This option is available for Cygwin and MinGW targets.  It
   14083      specifies that the typical Microsoft Windows predefined macros are
   14084      to be set in the pre-processor, but does not influence the choice
   14085      of runtime library/startup code.
   14086 
   14087 '-mwindows'
   14088      This option is available for Cygwin and MinGW targets.  It
   14089      specifies that a GUI application is to be generated by instructing
   14090      the linker to set the PE header subsystem type appropriately.
   14091 
   14092 '-fno-set-stack-executable'
   14093      This option is available for MinGW targets.  It specifies that the
   14094      executable flag for the stack used by nested functions isn't set.
   14095      This is necessary for binaries running in kernel mode of Microsoft
   14096      Windows, as there the User32 API, which is used to set executable
   14097      privileges, isn't available.
   14098 
   14099 '-fwritable-relocated-rdata'
   14100      This option is available for MinGW and Cygwin targets.  It
   14101      specifies that relocated-data in read-only section is put into
   14102      .data section.  This is a necessary for older runtimes not
   14103      supporting modification of .rdata sections for pseudo-relocation.
   14104 
   14105 '-mpe-aligned-commons'
   14106      This option is available for Cygwin and MinGW targets.  It
   14107      specifies that the GNU extension to the PE file format that permits
   14108      the correct alignment of COMMON variables should be used when
   14109      generating code.  It is enabled by default if GCC detects that the
   14110      target assembler found during configuration supports the feature.
   14111 
   14112  See also under *note i386 and x86-64 Options:: for standard options.
   14113 
   14114 
   14115 File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
   14116 
   14117 3.17.18 IA-64 Options
   14118 ---------------------
   14119 
   14120 These are the '-m' options defined for the Intel IA-64 architecture.
   14121 
   14122 '-mbig-endian'
   14123      Generate code for a big-endian target.  This is the default for
   14124      HP-UX.
   14125 
   14126 '-mlittle-endian'
   14127      Generate code for a little-endian target.  This is the default for
   14128      AIX5 and GNU/Linux.
   14129 
   14130 '-mgnu-as'
   14131 '-mno-gnu-as'
   14132      Generate (or don't) code for the GNU assembler.  This is the
   14133      default.
   14134 
   14135 '-mgnu-ld'
   14136 '-mno-gnu-ld'
   14137      Generate (or don't) code for the GNU linker.  This is the default.
   14138 
   14139 '-mno-pic'
   14140      Generate code that does not use a global pointer register.  The
   14141      result is not position independent code, and violates the IA-64
   14142      ABI.
   14143 
   14144 '-mvolatile-asm-stop'
   14145 '-mno-volatile-asm-stop'
   14146      Generate (or don't) a stop bit immediately before and after
   14147      volatile asm statements.
   14148 
   14149 '-mregister-names'
   14150 '-mno-register-names'
   14151      Generate (or don't) 'in', 'loc', and 'out' register names for the
   14152      stacked registers.  This may make assembler output more readable.
   14153 
   14154 '-mno-sdata'
   14155 '-msdata'
   14156      Disable (or enable) optimizations that use the small data section.
   14157      This may be useful for working around optimizer bugs.
   14158 
   14159 '-mconstant-gp'
   14160      Generate code that uses a single constant global pointer value.
   14161      This is useful when compiling kernel code.
   14162 
   14163 '-mauto-pic'
   14164      Generate code that is self-relocatable.  This implies
   14165      '-mconstant-gp'.  This is useful when compiling firmware code.
   14166 
   14167 '-minline-float-divide-min-latency'
   14168      Generate code for inline divides of floating-point values using the
   14169      minimum latency algorithm.
   14170 
   14171 '-minline-float-divide-max-throughput'
   14172      Generate code for inline divides of floating-point values using the
   14173      maximum throughput algorithm.
   14174 
   14175 '-mno-inline-float-divide'
   14176      Do not generate inline code for divides of floating-point values.
   14177 
   14178 '-minline-int-divide-min-latency'
   14179      Generate code for inline divides of integer values using the
   14180      minimum latency algorithm.
   14181 
   14182 '-minline-int-divide-max-throughput'
   14183      Generate code for inline divides of integer values using the
   14184      maximum throughput algorithm.
   14185 
   14186 '-mno-inline-int-divide'
   14187      Do not generate inline code for divides of integer values.
   14188 
   14189 '-minline-sqrt-min-latency'
   14190      Generate code for inline square roots using the minimum latency
   14191      algorithm.
   14192 
   14193 '-minline-sqrt-max-throughput'
   14194      Generate code for inline square roots using the maximum throughput
   14195      algorithm.
   14196 
   14197 '-mno-inline-sqrt'
   14198      Do not generate inline code for 'sqrt'.
   14199 
   14200 '-mfused-madd'
   14201 '-mno-fused-madd'
   14202      Do (don't) generate code that uses the fused multiply/add or
   14203      multiply/subtract instructions.  The default is to use these
   14204      instructions.
   14205 
   14206 '-mno-dwarf2-asm'
   14207 '-mdwarf2-asm'
   14208      Don't (or do) generate assembler code for the DWARF 2 line number
   14209      debugging info.  This may be useful when not using the GNU
   14210      assembler.
   14211 
   14212 '-mearly-stop-bits'
   14213 '-mno-early-stop-bits'
   14214      Allow stop bits to be placed earlier than immediately preceding the
   14215      instruction that triggered the stop bit.  This can improve
   14216      instruction scheduling, but does not always do so.
   14217 
   14218 '-mfixed-range=REGISTER-RANGE'
   14219      Generate code treating the given register range as fixed registers.
   14220      A fixed register is one that the register allocator cannot use.
   14221      This is useful when compiling kernel code.  A register range is
   14222      specified as two registers separated by a dash.  Multiple register
   14223      ranges can be specified separated by a comma.
   14224 
   14225 '-mtls-size=TLS-SIZE'
   14226      Specify bit size of immediate TLS offsets.  Valid values are 14,
   14227      22, and 64.
   14228 
   14229 '-mtune=CPU-TYPE'
   14230      Tune the instruction scheduling for a particular CPU, Valid values
   14231      are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.
   14232 
   14233 '-milp32'
   14234 '-mlp64'
   14235      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   14236      environment sets int, long and pointer to 32 bits.  The 64-bit
   14237      environment sets int to 32 bits and long and pointer to 64 bits.
   14238      These are HP-UX specific flags.
   14239 
   14240 '-mno-sched-br-data-spec'
   14241 '-msched-br-data-spec'
   14242      (Dis/En)able data speculative scheduling before reload.  This
   14243      results in generation of 'ld.a' instructions and the corresponding
   14244      check instructions ('ld.c' / 'chk.a').  The default is 'disable'.
   14245 
   14246 '-msched-ar-data-spec'
   14247 '-mno-sched-ar-data-spec'
   14248      (En/Dis)able data speculative scheduling after reload.  This
   14249      results in generation of 'ld.a' instructions and the corresponding
   14250      check instructions ('ld.c' / 'chk.a').  The default is 'enable'.
   14251 
   14252 '-mno-sched-control-spec'
   14253 '-msched-control-spec'
   14254      (Dis/En)able control speculative scheduling.  This feature is
   14255      available only during region scheduling (i.e. before reload).  This
   14256      results in generation of the 'ld.s' instructions and the
   14257      corresponding check instructions 'chk.s'.  The default is
   14258      'disable'.
   14259 
   14260 '-msched-br-in-data-spec'
   14261 '-mno-sched-br-in-data-spec'
   14262      (En/Dis)able speculative scheduling of the instructions that are
   14263      dependent on the data speculative loads before reload.  This is
   14264      effective only with '-msched-br-data-spec' enabled.  The default is
   14265      'enable'.
   14266 
   14267 '-msched-ar-in-data-spec'
   14268 '-mno-sched-ar-in-data-spec'
   14269      (En/Dis)able speculative scheduling of the instructions that are
   14270      dependent on the data speculative loads after reload.  This is
   14271      effective only with '-msched-ar-data-spec' enabled.  The default is
   14272      'enable'.
   14273 
   14274 '-msched-in-control-spec'
   14275 '-mno-sched-in-control-spec'
   14276      (En/Dis)able speculative scheduling of the instructions that are
   14277      dependent on the control speculative loads.  This is effective only
   14278      with '-msched-control-spec' enabled.  The default is 'enable'.
   14279 
   14280 '-mno-sched-prefer-non-data-spec-insns'
   14281 '-msched-prefer-non-data-spec-insns'
   14282      If enabled, data-speculative instructions are chosen for schedule
   14283      only if there are no other choices at the moment.  This makes the
   14284      use of the data speculation much more conservative.  The default is
   14285      'disable'.
   14286 
   14287 '-mno-sched-prefer-non-control-spec-insns'
   14288 '-msched-prefer-non-control-spec-insns'
   14289      If enabled, control-speculative instructions are chosen for
   14290      schedule only if there are no other choices at the moment.  This
   14291      makes the use of the control speculation much more conservative.
   14292      The default is 'disable'.
   14293 
   14294 '-mno-sched-count-spec-in-critical-path'
   14295 '-msched-count-spec-in-critical-path'
   14296      If enabled, speculative dependencies are considered during
   14297      computation of the instructions priorities.  This makes the use of
   14298      the speculation a bit more conservative.  The default is 'disable'.
   14299 
   14300 '-msched-spec-ldc'
   14301      Use a simple data speculation check.  This option is on by default.
   14302 
   14303 '-msched-control-spec-ldc'
   14304      Use a simple check for control speculation.  This option is on by
   14305      default.
   14306 
   14307 '-msched-stop-bits-after-every-cycle'
   14308      Place a stop bit after every cycle when scheduling.  This option is
   14309      on by default.
   14310 
   14311 '-msched-fp-mem-deps-zero-cost'
   14312      Assume that floating-point stores and loads are not likely to cause
   14313      a conflict when placed into the same instruction group.  This
   14314      option is disabled by default.
   14315 
   14316 '-msel-sched-dont-check-control-spec'
   14317      Generate checks for control speculation in selective scheduling.
   14318      This flag is disabled by default.
   14319 
   14320 '-msched-max-memory-insns=MAX-INSNS'
   14321      Limit on the number of memory insns per instruction group, giving
   14322      lower priority to subsequent memory insns attempting to schedule in
   14323      the same instruction group.  Frequently useful to prevent cache
   14324      bank conflicts.  The default value is 1.
   14325 
   14326 '-msched-max-memory-insns-hard-limit'
   14327      Makes the limit specified by 'msched-max-memory-insns' a hard
   14328      limit, disallowing more than that number in an instruction group.
   14329      Otherwise, the limit is "soft", meaning that non-memory operations
   14330      are preferred when the limit is reached, but memory operations may
   14331      still be scheduled.
   14332 
   14333 
   14334 File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
   14335 
   14336 3.17.19 LM32 Options
   14337 --------------------
   14338 
   14339 These '-m' options are defined for the LatticeMico32 architecture:
   14340 
   14341 '-mbarrel-shift-enabled'
   14342      Enable barrel-shift instructions.
   14343 
   14344 '-mdivide-enabled'
   14345      Enable divide and modulus instructions.
   14346 
   14347 '-mmultiply-enabled'
   14348      Enable multiply instructions.
   14349 
   14350 '-msign-extend-enabled'
   14351      Enable sign extend instructions.
   14352 
   14353 '-muser-enabled'
   14354      Enable user-defined instructions.
   14355 
   14356 
   14357 File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
   14358 
   14359 3.17.20 M32C Options
   14360 --------------------
   14361 
   14362 '-mcpu=NAME'
   14363      Select the CPU for which code is generated.  NAME may be one of
   14364      'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
   14365      series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
   14366      series.
   14367 
   14368 '-msim'
   14369      Specifies that the program will be run on the simulator.  This
   14370      causes an alternate runtime library to be linked in which supports,
   14371      for example, file I/O.  You must not use this option when
   14372      generating programs that will run on real hardware; you must
   14373      provide your own runtime library for whatever I/O functions are
   14374      needed.
   14375 
   14376 '-memregs=NUMBER'
   14377      Specifies the number of memory-based pseudo-registers GCC uses
   14378      during code generation.  These pseudo-registers are used like real
   14379      registers, so there is a tradeoff between GCC's ability to fit the
   14380      code into available registers, and the performance penalty of using
   14381      memory instead of registers.  Note that all modules in a program
   14382      must be compiled with the same value for this option.  Because of
   14383      that, you must not use this option with GCC's default runtime
   14384      libraries.
   14385 
   14386 
   14387 File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
   14388 
   14389 3.17.21 M32R/D Options
   14390 ----------------------
   14391 
   14392 These '-m' options are defined for Renesas M32R/D architectures:
   14393 
   14394 '-m32r2'
   14395      Generate code for the M32R/2.
   14396 
   14397 '-m32rx'
   14398      Generate code for the M32R/X.
   14399 
   14400 '-m32r'
   14401      Generate code for the M32R.  This is the default.
   14402 
   14403 '-mmodel=small'
   14404      Assume all objects live in the lower 16MB of memory (so that their
   14405      addresses can be loaded with the 'ld24' instruction), and assume
   14406      all subroutines are reachable with the 'bl' instruction.  This is
   14407      the default.
   14408 
   14409      The addressability of a particular object can be set with the
   14410      'model' attribute.
   14411 
   14412 '-mmodel=medium'
   14413      Assume objects may be anywhere in the 32-bit address space (the
   14414      compiler generates 'seth/add3' instructions to load their
   14415      addresses), and assume all subroutines are reachable with the 'bl'
   14416      instruction.
   14417 
   14418 '-mmodel=large'
   14419      Assume objects may be anywhere in the 32-bit address space (the
   14420      compiler generates 'seth/add3' instructions to load their
   14421      addresses), and assume subroutines may not be reachable with the
   14422      'bl' instruction (the compiler generates the much slower
   14423      'seth/add3/jl' instruction sequence).
   14424 
   14425 '-msdata=none'
   14426      Disable use of the small data area.  Variables are put into one of
   14427      '.data', '.bss', or '.rodata' (unless the 'section' attribute has
   14428      been specified).  This is the default.
   14429 
   14430      The small data area consists of sections '.sdata' and '.sbss'.
   14431      Objects may be explicitly put in the small data area with the
   14432      'section' attribute using one of these sections.
   14433 
   14434 '-msdata=sdata'
   14435      Put small global and static data in the small data area, but do not
   14436      generate special code to reference them.
   14437 
   14438 '-msdata=use'
   14439      Put small global and static data in the small data area, and
   14440      generate special instructions to reference them.
   14441 
   14442 '-G NUM'
   14443      Put global and static objects less than or equal to NUM bytes into
   14444      the small data or BSS sections instead of the normal data or BSS
   14445      sections.  The default value of NUM is 8.  The '-msdata' option
   14446      must be set to one of 'sdata' or 'use' for this option to have any
   14447      effect.
   14448 
   14449      All modules should be compiled with the same '-G NUM' value.
   14450      Compiling with different values of NUM may or may not work; if it
   14451      doesn't the linker gives an error message--incorrect code is not
   14452      generated.
   14453 
   14454 '-mdebug'
   14455      Makes the M32R-specific code in the compiler display some
   14456      statistics that might help in debugging programs.
   14457 
   14458 '-malign-loops'
   14459      Align all loops to a 32-byte boundary.
   14460 
   14461 '-mno-align-loops'
   14462      Do not enforce a 32-byte alignment for loops.  This is the default.
   14463 
   14464 '-missue-rate=NUMBER'
   14465      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
   14466 
   14467 '-mbranch-cost=NUMBER'
   14468      NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
   14469      over conditional code, if it is 2, then the opposite applies.
   14470 
   14471 '-mflush-trap=NUMBER'
   14472      Specifies the trap number to use to flush the cache.  The default
   14473      is 12.  Valid numbers are between 0 and 15 inclusive.
   14474 
   14475 '-mno-flush-trap'
   14476      Specifies that the cache cannot be flushed by using a trap.
   14477 
   14478 '-mflush-func=NAME'
   14479      Specifies the name of the operating system function to call to
   14480      flush the cache.  The default is __flush_cache_, but a function
   14481      call is only used if a trap is not available.
   14482 
   14483 '-mno-flush-func'
   14484      Indicates that there is no OS function for flushing the cache.
   14485 
   14486 
   14487 File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
   14488 
   14489 3.17.22 M680x0 Options
   14490 ----------------------
   14491 
   14492 These are the '-m' options defined for M680x0 and ColdFire processors.
   14493 The default settings depend on which architecture was selected when the
   14494 compiler was configured; the defaults for the most common choices are
   14495 given below.
   14496 
   14497 '-march=ARCH'
   14498      Generate code for a specific M680x0 or ColdFire instruction set
   14499      architecture.  Permissible values of ARCH for M680x0 architectures
   14500      are: '68000', '68010', '68020', '68030', '68040', '68060' and
   14501      'cpu32'.  ColdFire architectures are selected according to
   14502      Freescale's ISA classification and the permissible values are:
   14503      'isaa', 'isaaplus', 'isab' and 'isac'.
   14504 
   14505      GCC defines a macro '__mcfARCH__' whenever it is generating code
   14506      for a ColdFire target.  The ARCH in this macro is one of the
   14507      '-march' arguments given above.
   14508 
   14509      When used together, '-march' and '-mtune' select code that runs on
   14510      a family of similar processors but that is optimized for a
   14511      particular microarchitecture.
   14512 
   14513 '-mcpu=CPU'
   14514      Generate code for a specific M680x0 or ColdFire processor.  The
   14515      M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
   14516      '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
   14517      by the table below, which also classifies the CPUs into families:
   14518 
   14519      *Family*       *'-mcpu' arguments*
   14520      '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
   14521                     '51jm' '51mm' '51qe' '51qm'
   14522      '5206'         '5202' '5204' '5206'
   14523      '5206e'        '5206e'
   14524      '5208'         '5207' '5208'
   14525      '5211a'        '5210a' '5211a'
   14526      '5213'         '5211' '5212' '5213'
   14527      '5216'         '5214' '5216'
   14528      '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
   14529      '5225'         '5224' '5225'
   14530      '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
   14531      '5235'         '5232' '5233' '5234' '5235' '523x'
   14532      '5249'         '5249'
   14533      '5250'         '5250'
   14534      '5271'         '5270' '5271'
   14535      '5272'         '5272'
   14536      '5275'         '5274' '5275'
   14537      '5282'         '5280' '5281' '5282' '528x'
   14538      '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
   14539      '5307'         '5307'
   14540      '5329'         '5327' '5328' '5329' '532x'
   14541      '5373'         '5372' '5373' '537x'
   14542      '5407'         '5407'
   14543      '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
   14544                     '5481' '5482' '5483' '5484' '5485'
   14545 
   14546      '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
   14547      Other combinations of '-mcpu' and '-march' are rejected.
   14548 
   14549      GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
   14550      selected.  It also defines '__mcf_family_FAMILY', where the value
   14551      of FAMILY is given by the table above.
   14552 
   14553 '-mtune=TUNE'
   14554      Tune the code for a particular microarchitecture within the
   14555      constraints set by '-march' and '-mcpu'.  The M680x0
   14556      microarchitectures are: '68000', '68010', '68020', '68030',
   14557      '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
   14558      'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.
   14559 
   14560      You can also use '-mtune=68020-40' for code that needs to run
   14561      relatively well on 68020, 68030 and 68040 targets.
   14562      '-mtune=68020-60' is similar but includes 68060 targets as well.
   14563      These two options select the same tuning decisions as '-m68020-40'
   14564      and '-m68020-60' respectively.
   14565 
   14566      GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
   14567      680x0 architecture ARCH.  It also defines 'mcARCH' unless either
   14568      '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
   14569      range of architectures, as selected by '-mtune=68020-40' or
   14570      '-mtune=68020-60', it defines the macros for every architecture in
   14571      the range.
   14572 
   14573      GCC also defines the macro '__mUARCH__' when tuning for ColdFire
   14574      microarchitecture UARCH, where UARCH is one of the arguments given
   14575      above.
   14576 
   14577 '-m68000'
   14578 '-mc68000'
   14579      Generate output for a 68000.  This is the default when the compiler
   14580      is configured for 68000-based systems.  It is equivalent to
   14581      '-march=68000'.
   14582 
   14583      Use this option for microcontrollers with a 68000 or EC000 core,
   14584      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
   14585 
   14586 '-m68010'
   14587      Generate output for a 68010.  This is the default when the compiler
   14588      is configured for 68010-based systems.  It is equivalent to
   14589      '-march=68010'.
   14590 
   14591 '-m68020'
   14592 '-mc68020'
   14593      Generate output for a 68020.  This is the default when the compiler
   14594      is configured for 68020-based systems.  It is equivalent to
   14595      '-march=68020'.
   14596 
   14597 '-m68030'
   14598      Generate output for a 68030.  This is the default when the compiler
   14599      is configured for 68030-based systems.  It is equivalent to
   14600      '-march=68030'.
   14601 
   14602 '-m68040'
   14603      Generate output for a 68040.  This is the default when the compiler
   14604      is configured for 68040-based systems.  It is equivalent to
   14605      '-march=68040'.
   14606 
   14607      This option inhibits the use of 68881/68882 instructions that have
   14608      to be emulated by software on the 68040.  Use this option if your
   14609      68040 does not have code to emulate those instructions.
   14610 
   14611 '-m68060'
   14612      Generate output for a 68060.  This is the default when the compiler
   14613      is configured for 68060-based systems.  It is equivalent to
   14614      '-march=68060'.
   14615 
   14616      This option inhibits the use of 68020 and 68881/68882 instructions
   14617      that have to be emulated by software on the 68060.  Use this option
   14618      if your 68060 does not have code to emulate those instructions.
   14619 
   14620 '-mcpu32'
   14621      Generate output for a CPU32.  This is the default when the compiler
   14622      is configured for CPU32-based systems.  It is equivalent to
   14623      '-march=cpu32'.
   14624 
   14625      Use this option for microcontrollers with a CPU32 or CPU32+ core,
   14626      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
   14627      68341, 68349 and 68360.
   14628 
   14629 '-m5200'
   14630      Generate output for a 520X ColdFire CPU.  This is the default when
   14631      the compiler is configured for 520X-based systems.  It is
   14632      equivalent to '-mcpu=5206', and is now deprecated in favor of that
   14633      option.
   14634 
   14635      Use this option for microcontroller with a 5200 core, including the
   14636      MCF5202, MCF5203, MCF5204 and MCF5206.
   14637 
   14638 '-m5206e'
   14639      Generate output for a 5206e ColdFire CPU.  The option is now
   14640      deprecated in favor of the equivalent '-mcpu=5206e'.
   14641 
   14642 '-m528x'
   14643      Generate output for a member of the ColdFire 528X family.  The
   14644      option is now deprecated in favor of the equivalent '-mcpu=528x'.
   14645 
   14646 '-m5307'
   14647      Generate output for a ColdFire 5307 CPU.  The option is now
   14648      deprecated in favor of the equivalent '-mcpu=5307'.
   14649 
   14650 '-m5407'
   14651      Generate output for a ColdFire 5407 CPU.  The option is now
   14652      deprecated in favor of the equivalent '-mcpu=5407'.
   14653 
   14654 '-mcfv4e'
   14655      Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
   14656      This includes use of hardware floating-point instructions.  The
   14657      option is equivalent to '-mcpu=547x', and is now deprecated in
   14658      favor of that option.
   14659 
   14660 '-m68020-40'
   14661      Generate output for a 68040, without using any of the new
   14662      instructions.  This results in code that can run relatively
   14663      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   14664      generated code does use the 68881 instructions that are emulated on
   14665      the 68040.
   14666 
   14667      The option is equivalent to '-march=68020' '-mtune=68020-40'.
   14668 
   14669 '-m68020-60'
   14670      Generate output for a 68060, without using any of the new
   14671      instructions.  This results in code that can run relatively
   14672      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   14673      generated code does use the 68881 instructions that are emulated on
   14674      the 68060.
   14675 
   14676      The option is equivalent to '-march=68020' '-mtune=68020-60'.
   14677 
   14678 '-mhard-float'
   14679 '-m68881'
   14680      Generate floating-point instructions.  This is the default for
   14681      68020 and above, and for ColdFire devices that have an FPU.  It
   14682      defines the macro '__HAVE_68881__' on M680x0 targets and
   14683      '__mcffpu__' on ColdFire targets.
   14684 
   14685 '-msoft-float'
   14686      Do not generate floating-point instructions; use library calls
   14687      instead.  This is the default for 68000, 68010, and 68832 targets.
   14688      It is also the default for ColdFire devices that have no FPU.
   14689 
   14690 '-mdiv'
   14691 '-mno-div'
   14692      Generate (do not generate) ColdFire hardware divide and remainder
   14693      instructions.  If '-march' is used without '-mcpu', the default is
   14694      "on" for ColdFire architectures and "off" for M680x0 architectures.
   14695      Otherwise, the default is taken from the target CPU (either the
   14696      default CPU, or the one specified by '-mcpu').  For example, the
   14697      default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.
   14698 
   14699      GCC defines the macro '__mcfhwdiv__' when this option is enabled.
   14700 
   14701 '-mshort'
   14702      Consider type 'int' to be 16 bits wide, like 'short int'.
   14703      Additionally, parameters passed on the stack are also aligned to a
   14704      16-bit boundary even on targets whose API mandates promotion to
   14705      32-bit.
   14706 
   14707 '-mno-short'
   14708      Do not consider type 'int' to be 16 bits wide.  This is the
   14709      default.
   14710 
   14711 '-mnobitfield'
   14712 '-mno-bitfield'
   14713      Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
   14714      and '-m5200' options imply '-mnobitfield'.
   14715 
   14716 '-mbitfield'
   14717      Do use the bit-field instructions.  The '-m68020' option implies
   14718      '-mbitfield'.  This is the default if you use a configuration
   14719      designed for a 68020.
   14720 
   14721 '-mrtd'
   14722      Use a different function-calling convention, in which functions
   14723      that take a fixed number of arguments return with the 'rtd'
   14724      instruction, which pops their arguments while returning.  This
   14725      saves one instruction in the caller since there is no need to pop
   14726      the arguments there.
   14727 
   14728      This calling convention is incompatible with the one normally used
   14729      on Unix, so you cannot use it if you need to call libraries
   14730      compiled with the Unix compiler.
   14731 
   14732      Also, you must provide function prototypes for all functions that
   14733      take variable numbers of arguments (including 'printf'); otherwise
   14734      incorrect code is generated for calls to those functions.
   14735 
   14736      In addition, seriously incorrect code results if you call a
   14737      function with too many arguments.  (Normally, extra arguments are
   14738      harmlessly ignored.)
   14739 
   14740      The 'rtd' instruction is supported by the 68010, 68020, 68030,
   14741      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
   14742 
   14743 '-mno-rtd'
   14744      Do not use the calling conventions selected by '-mrtd'.  This is
   14745      the default.
   14746 
   14747 '-malign-int'
   14748 '-mno-align-int'
   14749      Control whether GCC aligns 'int', 'long', 'long long', 'float',
   14750      'double', and 'long double' variables on a 32-bit boundary
   14751      ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
   14752      variables on 32-bit boundaries produces code that runs somewhat
   14753      faster on processors with 32-bit busses at the expense of more
   14754      memory.
   14755 
   14756      *Warning:* if you use the '-malign-int' switch, GCC aligns
   14757      structures containing the above types differently than most
   14758      published application binary interface specifications for the m68k.
   14759 
   14760 '-mpcrel'
   14761      Use the pc-relative addressing mode of the 68000 directly, instead
   14762      of using a global offset table.  At present, this option implies
   14763      '-fpic', allowing at most a 16-bit offset for pc-relative
   14764      addressing.  '-fPIC' is not presently supported with '-mpcrel',
   14765      though this could be supported for 68020 and higher processors.
   14766 
   14767 '-mno-strict-align'
   14768 '-mstrict-align'
   14769      Do not (do) assume that unaligned memory references are handled by
   14770      the system.
   14771 
   14772 '-msep-data'
   14773      Generate code that allows the data segment to be located in a
   14774      different area of memory from the text segment.  This allows for
   14775      execute-in-place in an environment without virtual memory
   14776      management.  This option implies '-fPIC'.
   14777 
   14778 '-mno-sep-data'
   14779      Generate code that assumes that the data segment follows the text
   14780      segment.  This is the default.
   14781 
   14782 '-mid-shared-library'
   14783      Generate code that supports shared libraries via the library ID
   14784      method.  This allows for execute-in-place and shared libraries in
   14785      an environment without virtual memory management.  This option
   14786      implies '-fPIC'.
   14787 
   14788 '-mno-id-shared-library'
   14789      Generate code that doesn't assume ID-based shared libraries are
   14790      being used.  This is the default.
   14791 
   14792 '-mshared-library-id=n'
   14793      Specifies the identification number of the ID-based shared library
   14794      being compiled.  Specifying a value of 0 generates more compact
   14795      code; specifying other values forces the allocation of that number
   14796      to the current library, but is no more space- or time-efficient
   14797      than omitting this option.
   14798 
   14799 '-mxgot'
   14800 '-mno-xgot'
   14801      When generating position-independent code for ColdFire, generate
   14802      code that works if the GOT has more than 8192 entries.  This code
   14803      is larger and slower than code generated without this option.  On
   14804      M680x0 processors, this option is not needed; '-fPIC' suffices.
   14805 
   14806      GCC normally uses a single instruction to load values from the GOT.
   14807      While this is relatively efficient, it only works if the GOT is
   14808      smaller than about 64k.  Anything larger causes the linker to
   14809      report an error such as:
   14810 
   14811           relocation truncated to fit: R_68K_GOT16O foobar
   14812 
   14813      If this happens, you should recompile your code with '-mxgot'.  It
   14814      should then work with very large GOTs.  However, code generated
   14815      with '-mxgot' is less efficient, since it takes 4 instructions to
   14816      fetch the value of a global symbol.
   14817 
   14818      Note that some linkers, including newer versions of the GNU linker,
   14819      can create multiple GOTs and sort GOT entries.  If you have such a
   14820      linker, you should only need to use '-mxgot' when compiling a
   14821      single object file that accesses more than 8192 GOT entries.  Very
   14822      few do.
   14823 
   14824      These options have no effect unless GCC is generating
   14825      position-independent code.
   14826 
   14827 
   14828 File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
   14829 
   14830 3.17.23 MCore Options
   14831 ---------------------
   14832 
   14833 These are the '-m' options defined for the Motorola M*Core processors.
   14834 
   14835 '-mhardlit'
   14836 '-mno-hardlit'
   14837      Inline constants into the code stream if it can be done in two
   14838      instructions or less.
   14839 
   14840 '-mdiv'
   14841 '-mno-div'
   14842      Use the divide instruction.  (Enabled by default).
   14843 
   14844 '-mrelax-immediate'
   14845 '-mno-relax-immediate'
   14846      Allow arbitrary-sized immediates in bit operations.
   14847 
   14848 '-mwide-bitfields'
   14849 '-mno-wide-bitfields'
   14850      Always treat bit-fields as 'int'-sized.
   14851 
   14852 '-m4byte-functions'
   14853 '-mno-4byte-functions'
   14854      Force all functions to be aligned to a 4-byte boundary.
   14855 
   14856 '-mcallgraph-data'
   14857 '-mno-callgraph-data'
   14858      Emit callgraph information.
   14859 
   14860 '-mslow-bytes'
   14861 '-mno-slow-bytes'
   14862      Prefer word access when reading byte quantities.
   14863 
   14864 '-mlittle-endian'
   14865 '-mbig-endian'
   14866      Generate code for a little-endian target.
   14867 
   14868 '-m210'
   14869 '-m340'
   14870      Generate code for the 210 processor.
   14871 
   14872 '-mno-lsim'
   14873      Assume that runtime support has been provided and so omit the
   14874      simulator library ('libsim.a)' from the linker command line.
   14875 
   14876 '-mstack-increment=SIZE'
   14877      Set the maximum amount for a single stack increment operation.
   14878      Large values can increase the speed of programs that contain
   14879      functions that need a large amount of stack space, but they can
   14880      also trigger a segmentation fault if the stack is extended too
   14881      much.  The default value is 0x1000.
   14882 
   14883 
   14884 File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
   14885 
   14886 3.17.24 MeP Options
   14887 -------------------
   14888 
   14889 '-mabsdiff'
   14890      Enables the 'abs' instruction, which is the absolute difference
   14891      between two registers.
   14892 
   14893 '-mall-opts'
   14894      Enables all the optional instructions--average, multiply, divide,
   14895      bit operations, leading zero, absolute difference, min/max, clip,
   14896      and saturation.
   14897 
   14898 '-maverage'
   14899      Enables the 'ave' instruction, which computes the average of two
   14900      registers.
   14901 
   14902 '-mbased=N'
   14903      Variables of size N bytes or smaller are placed in the '.based'
   14904      section by default.  Based variables use the '$tp' register as a
   14905      base register, and there is a 128-byte limit to the '.based'
   14906      section.
   14907 
   14908 '-mbitops'
   14909      Enables the bit operation instructions--bit test ('btstm'), set
   14910      ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
   14911      ('tas').
   14912 
   14913 '-mc=NAME'
   14914      Selects which section constant data is placed in.  NAME may be
   14915      'tiny', 'near', or 'far'.
   14916 
   14917 '-mclip'
   14918      Enables the 'clip' instruction.  Note that '-mclip' is not useful
   14919      unless you also provide '-mminmax'.
   14920 
   14921 '-mconfig=NAME'
   14922      Selects one of the built-in core configurations.  Each MeP chip has
   14923      one or more modules in it; each module has a core CPU and a variety
   14924      of coprocessors, optional instructions, and peripherals.  The
   14925      'MeP-Integrator' tool, not part of GCC, provides these
   14926      configurations through this option; using this option is the same
   14927      as using all the corresponding command-line options.  The default
   14928      configuration is 'default'.
   14929 
   14930 '-mcop'
   14931      Enables the coprocessor instructions.  By default, this is a 32-bit
   14932      coprocessor.  Note that the coprocessor is normally enabled via the
   14933      '-mconfig=' option.
   14934 
   14935 '-mcop32'
   14936      Enables the 32-bit coprocessor's instructions.
   14937 
   14938 '-mcop64'
   14939      Enables the 64-bit coprocessor's instructions.
   14940 
   14941 '-mivc2'
   14942      Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
   14943 
   14944 '-mdc'
   14945      Causes constant variables to be placed in the '.near' section.
   14946 
   14947 '-mdiv'
   14948      Enables the 'div' and 'divu' instructions.
   14949 
   14950 '-meb'
   14951      Generate big-endian code.
   14952 
   14953 '-mel'
   14954      Generate little-endian code.
   14955 
   14956 '-mio-volatile'
   14957      Tells the compiler that any variable marked with the 'io' attribute
   14958      is to be considered volatile.
   14959 
   14960 '-ml'
   14961      Causes variables to be assigned to the '.far' section by default.
   14962 
   14963 '-mleadz'
   14964      Enables the 'leadz' (leading zero) instruction.
   14965 
   14966 '-mm'
   14967      Causes variables to be assigned to the '.near' section by default.
   14968 
   14969 '-mminmax'
   14970      Enables the 'min' and 'max' instructions.
   14971 
   14972 '-mmult'
   14973      Enables the multiplication and multiply-accumulate instructions.
   14974 
   14975 '-mno-opts'
   14976      Disables all the optional instructions enabled by '-mall-opts'.
   14977 
   14978 '-mrepeat'
   14979      Enables the 'repeat' and 'erepeat' instructions, used for
   14980      low-overhead looping.
   14981 
   14982 '-ms'
   14983      Causes all variables to default to the '.tiny' section.  Note that
   14984      there is a 65536-byte limit to this section.  Accesses to these
   14985      variables use the '%gp' base register.
   14986 
   14987 '-msatur'
   14988      Enables the saturation instructions.  Note that the compiler does
   14989      not currently generate these itself, but this option is included
   14990      for compatibility with other tools, like 'as'.
   14991 
   14992 '-msdram'
   14993      Link the SDRAM-based runtime instead of the default ROM-based
   14994      runtime.
   14995 
   14996 '-msim'
   14997      Link the simulator runtime libraries.
   14998 
   14999 '-msimnovec'
   15000      Link the simulator runtime libraries, excluding built-in support
   15001      for reset and exception vectors and tables.
   15002 
   15003 '-mtf'
   15004      Causes all functions to default to the '.far' section.  Without
   15005      this option, functions default to the '.near' section.
   15006 
   15007 '-mtiny=N'
   15008      Variables that are N bytes or smaller are allocated to the '.tiny'
   15009      section.  These variables use the '$gp' base register.  The default
   15010      for this option is 4, but note that there's a 65536-byte limit to
   15011      the '.tiny' section.
   15012 
   15013 
   15014 File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
   15015 
   15016 3.17.25 MicroBlaze Options
   15017 --------------------------
   15018 
   15019 '-msoft-float'
   15020      Use software emulation for floating point (default).
   15021 
   15022 '-mhard-float'
   15023      Use hardware floating-point instructions.
   15024 
   15025 '-mmemcpy'
   15026      Do not optimize block moves, use 'memcpy'.
   15027 
   15028 '-mno-clearbss'
   15029      This option is deprecated.  Use '-fno-zero-initialized-in-bss'
   15030      instead.
   15031 
   15032 '-mcpu=CPU-TYPE'
   15033      Use features of, and schedule code for, the given CPU. Supported
   15034      values are in the format 'vX.YY.Z', where X is a major version, YY
   15035      is the minor version, and Z is compatibility code.  Example values
   15036      are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b',
   15037      'v6.00.a'.
   15038 
   15039 '-mxl-soft-mul'
   15040      Use software multiply emulation (default).
   15041 
   15042 '-mxl-soft-div'
   15043      Use software emulation for divides (default).
   15044 
   15045 '-mxl-barrel-shift'
   15046      Use the hardware barrel shifter.
   15047 
   15048 '-mxl-pattern-compare'
   15049      Use pattern compare instructions.
   15050 
   15051 '-msmall-divides'
   15052      Use table lookup optimization for small signed integer divisions.
   15053 
   15054 '-mxl-stack-check'
   15055      This option is deprecated.  Use '-fstack-check' instead.
   15056 
   15057 '-mxl-gp-opt'
   15058      Use GP-relative '.sdata'/'.sbss' sections.
   15059 
   15060 '-mxl-multiply-high'
   15061      Use multiply high instructions for high part of 32x32 multiply.
   15062 
   15063 '-mxl-float-convert'
   15064      Use hardware floating-point conversion instructions.
   15065 
   15066 '-mxl-float-sqrt'
   15067      Use hardware floating-point square root instruction.
   15068 
   15069 '-mbig-endian'
   15070      Generate code for a big-endian target.
   15071 
   15072 '-mlittle-endian'
   15073      Generate code for a little-endian target.
   15074 
   15075 '-mxl-reorder'
   15076      Use reorder instructions (swap and byte reversed load/store).
   15077 
   15078 '-mxl-mode-APP-MODEL'
   15079      Select application model APP-MODEL.  Valid models are
   15080      'executable'
   15081           normal executable (default), uses startup code 'crt0.o'.
   15082 
   15083      'xmdstub'
   15084           for use with Xilinx Microprocessor Debugger (XMD) based
   15085           software intrusive debug agent called xmdstub.  This uses
   15086           startup file 'crt1.o' and sets the start address of the
   15087           program to 0x800.
   15088 
   15089      'bootstrap'
   15090           for applications that are loaded using a bootloader.  This
   15091           model uses startup file 'crt2.o' which does not contain a
   15092           processor reset vector handler.  This is suitable for
   15093           transferring control on a processor reset to the bootloader
   15094           rather than the application.
   15095 
   15096      'novectors'
   15097           for applications that do not require any of the MicroBlaze
   15098           vectors.  This option may be useful for applications running
   15099           within a monitoring application.  This model uses 'crt3.o' as
   15100           a startup file.
   15101 
   15102      Option '-xl-mode-APP-MODEL' is a deprecated alias for
   15103      '-mxl-mode-APP-MODEL'.
   15104 
   15105 
   15106 File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
   15107 
   15108 3.17.26 MIPS Options
   15109 --------------------
   15110 
   15111 '-EB'
   15112      Generate big-endian code.
   15113 
   15114 '-EL'
   15115      Generate little-endian code.  This is the default for 'mips*el-*-*'
   15116      configurations.
   15117 
   15118 '-march=ARCH'
   15119      Generate code that runs on ARCH, which can be the name of a generic
   15120      MIPS ISA, or the name of a particular processor.  The ISA names
   15121      are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
   15122      'mips64' and 'mips64r2'.  The processor names are: '4kc', '4km',
   15123      '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc', '5kf',
   15124      '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
   15125      '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
   15126      '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
   15127      '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k',
   15128      'octeon', 'octeon+', 'octeon2', 'orion', 'r2000', 'r3000', 'r3900',
   15129      'r4000', 'r4400', 'r4600', 'r4650', 'r4700', 'r6000', 'r8000',
   15130      'rm7000', 'rm9000', 'r10000', 'r12000', 'r14000', 'r16000', 'sb1',
   15131      'sr71000', 'vr4100', 'vr4111', 'vr4120', 'vr4130', 'vr4300',
   15132      'vr5000', 'vr5400', 'vr5500', 'xlr' and 'xlp'.  The special value
   15133      'from-abi' selects the most compatible architecture for the
   15134      selected ABI (that is, 'mips1' for 32-bit ABIs and 'mips3' for
   15135      64-bit ABIs).
   15136 
   15137      The native Linux/GNU toolchain also supports the value 'native',
   15138      which selects the best architecture option for the host processor.
   15139      '-march=native' has no effect if GCC does not recognize the
   15140      processor.
   15141 
   15142      In processor names, a final '000' can be abbreviated as 'k' (for
   15143      example, '-march=r2k').  Prefixes are optional, and 'vr' may be
   15144      written 'r'.
   15145 
   15146      Names of the form 'Nf2_1' refer to processors with FPUs clocked at
   15147      half the rate of the core, names of the form 'Nf1_1' refer to
   15148      processors with FPUs clocked at the same rate as the core, and
   15149      names of the form 'Nf3_2' refer to processors with FPUs clocked a
   15150      ratio of 3:2 with respect to the core.  For compatibility reasons,
   15151      'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
   15152      accepted as synonyms for 'Nf1_1'.
   15153 
   15154      GCC defines two macros based on the value of this option.  The
   15155      first is '_MIPS_ARCH', which gives the name of target architecture,
   15156      as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
   15157      is the capitalized value of '_MIPS_ARCH'.  For example,
   15158      '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
   15159      '_MIPS_ARCH_R2000'.
   15160 
   15161      Note that the '_MIPS_ARCH' macro uses the processor names given
   15162      above.  In other words, it has the full prefix and does not
   15163      abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
   15164      names the resolved architecture (either '"mips1"' or '"mips3"').
   15165      It names the default architecture when no '-march' option is given.
   15166 
   15167 '-mtune=ARCH'
   15168      Optimize for ARCH.  Among other things, this option controls the
   15169      way instructions are scheduled, and the perceived cost of
   15170      arithmetic operations.  The list of ARCH values is the same as for
   15171      '-march'.
   15172 
   15173      When this option is not used, GCC optimizes for the processor
   15174      specified by '-march'.  By using '-march' and '-mtune' together, it
   15175      is possible to generate code that runs on a family of processors,
   15176      but optimize the code for one particular member of that family.
   15177 
   15178      '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
   15179      which work in the same way as the '-march' ones described above.
   15180 
   15181 '-mips1'
   15182      Equivalent to '-march=mips1'.
   15183 
   15184 '-mips2'
   15185      Equivalent to '-march=mips2'.
   15186 
   15187 '-mips3'
   15188      Equivalent to '-march=mips3'.
   15189 
   15190 '-mips4'
   15191      Equivalent to '-march=mips4'.
   15192 
   15193 '-mips32'
   15194      Equivalent to '-march=mips32'.
   15195 
   15196 '-mips32r2'
   15197      Equivalent to '-march=mips32r2'.
   15198 
   15199 '-mips64'
   15200      Equivalent to '-march=mips64'.
   15201 
   15202 '-mips64r2'
   15203      Equivalent to '-march=mips64r2'.
   15204 
   15205 '-mips16'
   15206 '-mno-mips16'
   15207      Generate (do not generate) MIPS16 code.  If GCC is targeting a
   15208      MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
   15209 
   15210      MIPS16 code generation can also be controlled on a per-function
   15211      basis by means of 'mips16' and 'nomips16' attributes.  *Note
   15212      Function Attributes::, for more information.
   15213 
   15214 '-mflip-mips16'
   15215      Generate MIPS16 code on alternating functions.  This option is
   15216      provided for regression testing of mixed MIPS16/non-MIPS16 code
   15217      generation, and is not intended for ordinary use in compiling user
   15218      code.
   15219 
   15220 '-minterlink-mips16'
   15221 '-mno-interlink-mips16'
   15222      Require (do not require) that non-MIPS16 code be link-compatible
   15223      with MIPS16 code.
   15224 
   15225      For example, non-MIPS16 code cannot jump directly to MIPS16 code;
   15226      it must either use a call or an indirect jump.
   15227      '-minterlink-mips16' therefore disables direct jumps unless GCC
   15228      knows that the target of the jump is not MIPS16.
   15229 
   15230 '-mabi=32'
   15231 '-mabi=o64'
   15232 '-mabi=n32'
   15233 '-mabi=64'
   15234 '-mabi=eabi'
   15235      Generate code for the given ABI.
   15236 
   15237      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
   15238      generates 64-bit code when you select a 64-bit architecture, but
   15239      you can use '-mgp32' to get 32-bit code instead.
   15240 
   15241      For information about the O64 ABI, see
   15242      <http://gcc.gnu.org/projects/mipso64-abi.html>.
   15243 
   15244      GCC supports a variant of the o32 ABI in which floating-point
   15245      registers are 64 rather than 32 bits wide.  You can select this
   15246      combination with '-mabi=32' '-mfp64'.  This ABI relies on the
   15247      'mthc1' and 'mfhc1' instructions and is therefore only supported
   15248      for MIPS32R2 processors.
   15249 
   15250      The register assignments for arguments and return values remain the
   15251      same, but each scalar value is passed in a single 64-bit register
   15252      rather than a pair of 32-bit registers.  For example, scalar
   15253      floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
   15254      pair.  The set of call-saved registers also remains the same, but
   15255      all 64 bits are saved.
   15256 
   15257 '-mabicalls'
   15258 '-mno-abicalls'
   15259      Generate (do not generate) code that is suitable for SVR4-style
   15260      dynamic objects.  '-mabicalls' is the default for SVR4-based
   15261      systems.
   15262 
   15263 '-mshared'
   15264 '-mno-shared'
   15265      Generate (do not generate) code that is fully position-independent,
   15266      and that can therefore be linked into shared libraries.  This
   15267      option only affects '-mabicalls'.
   15268 
   15269      All '-mabicalls' code has traditionally been position-independent,
   15270      regardless of options like '-fPIC' and '-fpic'.  However, as an
   15271      extension, the GNU toolchain allows executables to use absolute
   15272      accesses for locally-binding symbols.  It can also use shorter GP
   15273      initialization sequences and generate direct calls to
   15274      locally-defined functions.  This mode is selected by '-mno-shared'.
   15275 
   15276      '-mno-shared' depends on binutils 2.16 or higher and generates
   15277      objects that can only be linked by the GNU linker.  However, the
   15278      option does not affect the ABI of the final executable; it only
   15279      affects the ABI of relocatable objects.  Using '-mno-shared'
   15280      generally makes executables both smaller and quicker.
   15281 
   15282      '-mshared' is the default.
   15283 
   15284 '-mplt'
   15285 '-mno-plt'
   15286      Assume (do not assume) that the static and dynamic linkers support
   15287      PLTs and copy relocations.  This option only affects '-mno-shared
   15288      -mabicalls'.  For the n64 ABI, this option has no effect without
   15289      '-msym32'.
   15290 
   15291      You can make '-mplt' the default by configuring GCC with
   15292      '--with-mips-plt'.  The default is '-mno-plt' otherwise.
   15293 
   15294 '-mxgot'
   15295 '-mno-xgot'
   15296      Lift (do not lift) the usual restrictions on the size of the global
   15297      offset table.
   15298 
   15299      GCC normally uses a single instruction to load values from the GOT.
   15300      While this is relatively efficient, it only works if the GOT is
   15301      smaller than about 64k.  Anything larger causes the linker to
   15302      report an error such as:
   15303 
   15304           relocation truncated to fit: R_MIPS_GOT16 foobar
   15305 
   15306      If this happens, you should recompile your code with '-mxgot'.
   15307      This works with very large GOTs, although the code is also less
   15308      efficient, since it takes three instructions to fetch the value of
   15309      a global symbol.
   15310 
   15311      Note that some linkers can create multiple GOTs.  If you have such
   15312      a linker, you should only need to use '-mxgot' when a single object
   15313      file accesses more than 64k's worth of GOT entries.  Very few do.
   15314 
   15315      These options have no effect unless GCC is generating position
   15316      independent code.
   15317 
   15318 '-mgp32'
   15319      Assume that general-purpose registers are 32 bits wide.
   15320 
   15321 '-mgp64'
   15322      Assume that general-purpose registers are 64 bits wide.
   15323 
   15324 '-mfp32'
   15325      Assume that floating-point registers are 32 bits wide.
   15326 
   15327 '-mfp64'
   15328      Assume that floating-point registers are 64 bits wide.
   15329 
   15330 '-mhard-float'
   15331      Use floating-point coprocessor instructions.
   15332 
   15333 '-msoft-float'
   15334      Do not use floating-point coprocessor instructions.  Implement
   15335      floating-point calculations using library calls instead.
   15336 
   15337 '-mno-float'
   15338      Equivalent to '-msoft-float', but additionally asserts that the
   15339      program being compiled does not perform any floating-point
   15340      operations.  This option is presently supported only by some
   15341      bare-metal MIPS configurations, where it may select a special set
   15342      of libraries that lack all floating-point support (including, for
   15343      example, the floating-point 'printf' formats).  If code compiled
   15344      with '-mno-float' accidentally contains floating-point operations,
   15345      it is likely to suffer a link-time or run-time failure.
   15346 
   15347 '-msingle-float'
   15348      Assume that the floating-point coprocessor only supports
   15349      single-precision operations.
   15350 
   15351 '-mdouble-float'
   15352      Assume that the floating-point coprocessor supports
   15353      double-precision operations.  This is the default.
   15354 
   15355 '-mllsc'
   15356 '-mno-llsc'
   15357      Use (do not use) 'll', 'sc', and 'sync' instructions to implement
   15358      atomic memory built-in functions.  When neither option is
   15359      specified, GCC uses the instructions if the target architecture
   15360      supports them.
   15361 
   15362      '-mllsc' is useful if the runtime environment can emulate the
   15363      instructions and '-mno-llsc' can be useful when compiling for
   15364      nonstandard ISAs.  You can make either option the default by
   15365      configuring GCC with '--with-llsc' and '--without-llsc'
   15366      respectively.  '--with-llsc' is the default for some
   15367      configurations; see the installation documentation for details.
   15368 
   15369 '-mdsp'
   15370 '-mno-dsp'
   15371      Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
   15372      Built-in Functions::.  This option defines the preprocessor macro
   15373      '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.
   15374 
   15375 '-mdspr2'
   15376 '-mno-dspr2'
   15377      Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
   15378      Built-in Functions::.  This option defines the preprocessor macros
   15379      '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
   15380      to 2.
   15381 
   15382 '-msmartmips'
   15383 '-mno-smartmips'
   15384      Use (do not use) the MIPS SmartMIPS ASE.
   15385 
   15386 '-mpaired-single'
   15387 '-mno-paired-single'
   15388      Use (do not use) paired-single floating-point instructions.  *Note
   15389      MIPS Paired-Single Support::.  This option requires hardware
   15390      floating-point support to be enabled.
   15391 
   15392 '-mdmx'
   15393 '-mno-mdmx'
   15394      Use (do not use) MIPS Digital Media Extension instructions.  This
   15395      option can only be used when generating 64-bit code and requires
   15396      hardware floating-point support to be enabled.
   15397 
   15398 '-mips3d'
   15399 '-mno-mips3d'
   15400      Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
   15401      Functions::.  The option '-mips3d' implies '-mpaired-single'.
   15402 
   15403 '-mmt'
   15404 '-mno-mt'
   15405      Use (do not use) MT Multithreading instructions.
   15406 
   15407 '-mmcu'
   15408 '-mno-mcu'
   15409      Use (do not use) the MIPS MCU ASE instructions.
   15410 
   15411 '-mlong64'
   15412      Force 'long' types to be 64 bits wide.  See '-mlong32' for an
   15413      explanation of the default and the way that the pointer size is
   15414      determined.
   15415 
   15416 '-mlong32'
   15417      Force 'long', 'int', and pointer types to be 32 bits wide.
   15418 
   15419      The default size of 'int's, 'long's and pointers depends on the
   15420      ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
   15421      64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
   15422      'long's.  Pointers are the same size as 'long's, or the same size
   15423      as integer registers, whichever is smaller.
   15424 
   15425 '-msym32'
   15426 '-mno-sym32'
   15427      Assume (do not assume) that all symbols have 32-bit values,
   15428      regardless of the selected ABI.  This option is useful in
   15429      combination with '-mabi=64' and '-mno-abicalls' because it allows
   15430      GCC to generate shorter and faster references to symbolic
   15431      addresses.
   15432 
   15433 '-G NUM'
   15434      Put definitions of externally-visible data in a small data section
   15435      if that data is no bigger than NUM bytes.  GCC can then generate
   15436      more efficient accesses to the data; see '-mgpopt' for details.
   15437 
   15438      The default '-G' option depends on the configuration.
   15439 
   15440 '-mlocal-sdata'
   15441 '-mno-local-sdata'
   15442      Extend (do not extend) the '-G' behavior to local data too, such as
   15443      to static variables in C.  '-mlocal-sdata' is the default for all
   15444      configurations.
   15445 
   15446      If the linker complains that an application is using too much small
   15447      data, you might want to try rebuilding the less
   15448      performance-critical parts with '-mno-local-sdata'.  You might also
   15449      want to build large libraries with '-mno-local-sdata', so that the
   15450      libraries leave more room for the main program.
   15451 
   15452 '-mextern-sdata'
   15453 '-mno-extern-sdata'
   15454      Assume (do not assume) that externally-defined data is in a small
   15455      data section if the size of that data is within the '-G' limit.
   15456      '-mextern-sdata' is the default for all configurations.
   15457 
   15458      If you compile a module MOD with '-mextern-sdata' '-G NUM'
   15459      '-mgpopt', and MOD references a variable VAR that is no bigger than
   15460      NUM bytes, you must make sure that VAR is placed in a small data
   15461      section.  If VAR is defined by another module, you must either
   15462      compile that module with a high-enough '-G' setting or attach a
   15463      'section' attribute to VAR's definition.  If VAR is common, you
   15464      must link the application with a high-enough '-G' setting.
   15465 
   15466      The easiest way of satisfying these restrictions is to compile and
   15467      link every module with the same '-G' option.  However, you may wish
   15468      to build a library that supports several different small data
   15469      limits.  You can do this by compiling the library with the highest
   15470      supported '-G' setting and additionally using '-mno-extern-sdata'
   15471      to stop the library from making assumptions about
   15472      externally-defined data.
   15473 
   15474 '-mgpopt'
   15475 '-mno-gpopt'
   15476      Use (do not use) GP-relative accesses for symbols that are known to
   15477      be in a small data section; see '-G', '-mlocal-sdata' and
   15478      '-mextern-sdata'.  '-mgpopt' is the default for all configurations.
   15479 
   15480      '-mno-gpopt' is useful for cases where the '$gp' register might not
   15481      hold the value of '_gp'.  For example, if the code is part of a
   15482      library that might be used in a boot monitor, programs that call
   15483      boot monitor routines pass an unknown value in '$gp'.  (In such
   15484      situations, the boot monitor itself is usually compiled with
   15485      '-G0'.)
   15486 
   15487      '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.
   15488 
   15489 '-membedded-data'
   15490 '-mno-embedded-data'
   15491      Allocate variables to the read-only data section first if possible,
   15492      then next in the small data section if possible, otherwise in data.
   15493      This gives slightly slower code than the default, but reduces the
   15494      amount of RAM required when executing, and thus may be preferred
   15495      for some embedded systems.
   15496 
   15497 '-muninit-const-in-rodata'
   15498 '-mno-uninit-const-in-rodata'
   15499      Put uninitialized 'const' variables in the read-only data section.
   15500      This option is only meaningful in conjunction with
   15501      '-membedded-data'.
   15502 
   15503 '-mcode-readable=SETTING'
   15504      Specify whether GCC may generate code that reads from executable
   15505      sections.  There are three possible settings:
   15506 
   15507      '-mcode-readable=yes'
   15508           Instructions may freely access executable sections.  This is
   15509           the default setting.
   15510 
   15511      '-mcode-readable=pcrel'
   15512           MIPS16 PC-relative load instructions can access executable
   15513           sections, but other instructions must not do so.  This option
   15514           is useful on 4KSc and 4KSd processors when the code TLBs have
   15515           the Read Inhibit bit set.  It is also useful on processors
   15516           that can be configured to have a dual instruction/data SRAM
   15517           interface and that, like the M4K, automatically redirect
   15518           PC-relative loads to the instruction RAM.
   15519 
   15520      '-mcode-readable=no'
   15521           Instructions must not access executable sections.  This option
   15522           can be useful on targets that are configured to have a dual
   15523           instruction/data SRAM interface but that (unlike the M4K) do
   15524           not automatically redirect PC-relative loads to the
   15525           instruction RAM.
   15526 
   15527 '-msplit-addresses'
   15528 '-mno-split-addresses'
   15529      Enable (disable) use of the '%hi()' and '%lo()' assembler
   15530      relocation operators.  This option has been superseded by
   15531      '-mexplicit-relocs' but is retained for backwards compatibility.
   15532 
   15533 '-mexplicit-relocs'
   15534 '-mno-explicit-relocs'
   15535      Use (do not use) assembler relocation operators when dealing with
   15536      symbolic addresses.  The alternative, selected by
   15537      '-mno-explicit-relocs', is to use assembler macros instead.
   15538 
   15539      '-mexplicit-relocs' is the default if GCC was configured to use an
   15540      assembler that supports relocation operators.
   15541 
   15542 '-mcheck-zero-division'
   15543 '-mno-check-zero-division'
   15544      Trap (do not trap) on integer division by zero.
   15545 
   15546      The default is '-mcheck-zero-division'.
   15547 
   15548 '-mdivide-traps'
   15549 '-mdivide-breaks'
   15550      MIPS systems check for division by zero by generating either a
   15551      conditional trap or a break instruction.  Using traps results in
   15552      smaller code, but is only supported on MIPS II and later.  Also,
   15553      some versions of the Linux kernel have a bug that prevents trap
   15554      from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
   15555      to allow conditional traps on architectures that support them and
   15556      '-mdivide-breaks' to force the use of breaks.
   15557 
   15558      The default is usually '-mdivide-traps', but this can be overridden
   15559      at configure time using '--with-divide=breaks'.  Divide-by-zero
   15560      checks can be completely disabled using '-mno-check-zero-division'.
   15561 
   15562 '-mmemcpy'
   15563 '-mno-memcpy'
   15564      Force (do not force) the use of 'memcpy()' for non-trivial block
   15565      moves.  The default is '-mno-memcpy', which allows GCC to inline
   15566      most constant-sized copies.
   15567 
   15568 '-mlong-calls'
   15569 '-mno-long-calls'
   15570      Disable (do not disable) use of the 'jal' instruction.  Calling
   15571      functions using 'jal' is more efficient but requires the caller and
   15572      callee to be in the same 256 megabyte segment.
   15573 
   15574      This option has no effect on abicalls code.  The default is
   15575      '-mno-long-calls'.
   15576 
   15577 '-mmad'
   15578 '-mno-mad'
   15579      Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
   15580      as provided by the R4650 ISA.
   15581 
   15582 '-mfused-madd'
   15583 '-mno-fused-madd'
   15584      Enable (disable) use of the floating-point multiply-accumulate
   15585      instructions, when they are available.  The default is
   15586      '-mfused-madd'.
   15587 
   15588      On the R8000 CPU when multiply-accumulate instructions are used,
   15589      the intermediate product is calculated to infinite precision and is
   15590      not subject to the FCSR Flush to Zero bit.  This may be undesirable
   15591      in some circumstances.  On other processors the result is
   15592      numerically identical to the equivalent computation using separate
   15593      multiply, add, subtract and negate instructions.
   15594 
   15595 '-nocpp'
   15596      Tell the MIPS assembler to not run its preprocessor over user
   15597      assembler files (with a '.s' suffix) when assembling them.
   15598 
   15599 '-mfix-24k'
   15600 '-mno-fix-24k'
   15601      Work around the 24K E48 (lost data on stores during refill) errata.
   15602      The workarounds are implemented by the assembler rather than by
   15603      GCC.
   15604 
   15605 '-mfix-r4000'
   15606 '-mno-fix-r4000'
   15607      Work around certain R4000 CPU errata:
   15608         - A double-word or a variable shift may give an incorrect result
   15609           if executed immediately after starting an integer division.
   15610         - A double-word or a variable shift may give an incorrect result
   15611           if executed while an integer multiplication is in progress.
   15612         - An integer division may give an incorrect result if started in
   15613           a delay slot of a taken branch or a jump.
   15614 
   15615 '-mfix-r4400'
   15616 '-mno-fix-r4400'
   15617      Work around certain R4400 CPU errata:
   15618         - A double-word or a variable shift may give an incorrect result
   15619           if executed immediately after starting an integer division.
   15620 
   15621 '-mfix-r10000'
   15622 '-mno-fix-r10000'
   15623      Work around certain R10000 errata:
   15624         - 'll'/'sc' sequences may not behave atomically on revisions
   15625           prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
   15626 
   15627      This option can only be used if the target architecture supports
   15628      branch-likely instructions.  '-mfix-r10000' is the default when
   15629      '-march=r10000' is used; '-mno-fix-r10000' is the default
   15630      otherwise.
   15631 
   15632 '-mfix-vr4120'
   15633 '-mno-fix-vr4120'
   15634      Work around certain VR4120 errata:
   15635         - 'dmultu' does not always produce the correct result.
   15636         - 'div' and 'ddiv' do not always produce the correct result if
   15637           one of the operands is negative.
   15638      The workarounds for the division errata rely on special functions
   15639      in 'libgcc.a'.  At present, these functions are only provided by
   15640      the 'mips64vr*-elf' configurations.
   15641 
   15642      Other VR4120 errata require a NOP to be inserted between certain
   15643      pairs of instructions.  These errata are handled by the assembler,
   15644      not by GCC itself.
   15645 
   15646 '-mfix-vr4130'
   15647      Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
   15648      implemented by the assembler rather than by GCC, although GCC
   15649      avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
   15650      'dmacc' and 'dmacchi' instructions are available instead.
   15651 
   15652 '-mfix-sb1'
   15653 '-mno-fix-sb1'
   15654      Work around certain SB-1 CPU core errata.  (This flag currently
   15655      works around the SB-1 revision 2 "F1" and "F2" floating-point
   15656      errata.)
   15657 
   15658 '-mr10k-cache-barrier=SETTING'
   15659      Specify whether GCC should insert cache barriers to avoid the
   15660      side-effects of speculation on R10K processors.
   15661 
   15662      In common with many processors, the R10K tries to predict the
   15663      outcome of a conditional branch and speculatively executes
   15664      instructions from the "taken" branch.  It later aborts these
   15665      instructions if the predicted outcome is wrong.  However, on the
   15666      R10K, even aborted instructions can have side effects.
   15667 
   15668      This problem only affects kernel stores and, depending on the
   15669      system, kernel loads.  As an example, a speculatively-executed
   15670      store may load the target memory into cache and mark the cache line
   15671      as dirty, even if the store itself is later aborted.  If a DMA
   15672      operation writes to the same area of memory before the "dirty" line
   15673      is flushed, the cached data overwrites the DMA-ed data.  See the
   15674      R10K processor manual for a full description, including other
   15675      potential problems.
   15676 
   15677      One workaround is to insert cache barrier instructions before every
   15678      memory access that might be speculatively executed and that might
   15679      have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
   15680      controls GCC's implementation of this workaround.  It assumes that
   15681      aborted accesses to any byte in the following regions does not have
   15682      side effects:
   15683 
   15684        1. the memory occupied by the current function's stack frame;
   15685 
   15686        2. the memory occupied by an incoming stack argument;
   15687 
   15688        3. the memory occupied by an object with a link-time-constant
   15689           address.
   15690 
   15691      It is the kernel's responsibility to ensure that speculative
   15692      accesses to these regions are indeed safe.
   15693 
   15694      If the input program contains a function declaration such as:
   15695 
   15696           void foo (void);
   15697 
   15698      then the implementation of 'foo' must allow 'j foo' and 'jal foo'
   15699      to be executed speculatively.  GCC honors this restriction for
   15700      functions it compiles itself.  It expects non-GCC functions (such
   15701      as hand-written assembly code) to do the same.
   15702 
   15703      The option has three forms:
   15704 
   15705      '-mr10k-cache-barrier=load-store'
   15706           Insert a cache barrier before a load or store that might be
   15707           speculatively executed and that might have side effects even
   15708           if aborted.
   15709 
   15710      '-mr10k-cache-barrier=store'
   15711           Insert a cache barrier before a store that might be
   15712           speculatively executed and that might have side effects even
   15713           if aborted.
   15714 
   15715      '-mr10k-cache-barrier=none'
   15716           Disable the insertion of cache barriers.  This is the default
   15717           setting.
   15718 
   15719 '-mflush-func=FUNC'
   15720 '-mno-flush-func'
   15721      Specifies the function to call to flush the I and D caches, or to
   15722      not call any such function.  If called, the function must take the
   15723      same arguments as the common '_flush_func()', that is, the address
   15724      of the memory range for which the cache is being flushed, the size
   15725      of the memory range, and the number 3 (to flush both caches).  The
   15726      default depends on the target GCC was configured for, but commonly
   15727      is either '_flush_func' or '__cpu_flush'.
   15728 
   15729 'mbranch-cost=NUM'
   15730      Set the cost of branches to roughly NUM "simple" instructions.
   15731      This cost is only a heuristic and is not guaranteed to produce
   15732      consistent results across releases.  A zero cost redundantly
   15733      selects the default, which is based on the '-mtune' setting.
   15734 
   15735 '-mbranch-likely'
   15736 '-mno-branch-likely'
   15737      Enable or disable use of Branch Likely instructions, regardless of
   15738      the default for the selected architecture.  By default, Branch
   15739      Likely instructions may be generated if they are supported by the
   15740      selected architecture.  An exception is for the MIPS32 and MIPS64
   15741      architectures and processors that implement those architectures;
   15742      for those, Branch Likely instructions are not be generated by
   15743      default because the MIPS32 and MIPS64 architectures specifically
   15744      deprecate their use.
   15745 
   15746 '-mfp-exceptions'
   15747 '-mno-fp-exceptions'
   15748      Specifies whether FP exceptions are enabled.  This affects how FP
   15749      instructions are scheduled for some processors.  The default is
   15750      that FP exceptions are enabled.
   15751 
   15752      For instance, on the SB-1, if FP exceptions are disabled, and we
   15753      are emitting 64-bit code, then we can use both FP pipes.
   15754      Otherwise, we can only use one FP pipe.
   15755 
   15756 '-mvr4130-align'
   15757 '-mno-vr4130-align'
   15758      The VR4130 pipeline is two-way superscalar, but can only issue two
   15759      instructions together if the first one is 8-byte aligned.  When
   15760      this option is enabled, GCC aligns pairs of instructions that it
   15761      thinks should execute in parallel.
   15762 
   15763      This option only has an effect when optimizing for the VR4130.  It
   15764      normally makes code faster, but at the expense of making it bigger.
   15765      It is enabled by default at optimization level '-O3'.
   15766 
   15767 '-msynci'
   15768 '-mno-synci'
   15769      Enable (disable) generation of 'synci' instructions on
   15770      architectures that support it.  The 'synci' instructions (if
   15771      enabled) are generated when '__builtin___clear_cache()' is
   15772      compiled.
   15773 
   15774      This option defaults to '-mno-synci', but the default can be
   15775      overridden by configuring with '--with-synci'.
   15776 
   15777      When compiling code for single processor systems, it is generally
   15778      safe to use 'synci'.  However, on many multi-core (SMP) systems, it
   15779      does not invalidate the instruction caches on all cores and may
   15780      lead to undefined behavior.
   15781 
   15782 '-mrelax-pic-calls'
   15783 '-mno-relax-pic-calls'
   15784      Try to turn PIC calls that are normally dispatched via register
   15785      '$25' into direct calls.  This is only possible if the linker can
   15786      resolve the destination at link-time and if the destination is
   15787      within range for a direct call.
   15788 
   15789      '-mrelax-pic-calls' is the default if GCC was configured to use an
   15790      assembler and a linker that support the '.reloc' assembly directive
   15791      and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
   15792      this optimization can be performed by the assembler and the linker
   15793      alone without help from the compiler.
   15794 
   15795 '-mmcount-ra-address'
   15796 '-mno-mcount-ra-address'
   15797      Emit (do not emit) code that allows '_mcount' to modify the calling
   15798      function's return address.  When enabled, this option extends the
   15799      usual '_mcount' interface with a new RA-ADDRESS parameter, which
   15800      has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
   15801      can then modify the return address by doing both of the following:
   15802         * Returning the new address in register '$31'.
   15803         * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
   15804           nonnull.
   15805 
   15806      The default is '-mno-mcount-ra-address'.
   15807 
   15808 
   15809 File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
   15810 
   15811 3.17.27 MMIX Options
   15812 --------------------
   15813 
   15814 These options are defined for the MMIX:
   15815 
   15816 '-mlibfuncs'
   15817 '-mno-libfuncs'
   15818      Specify that intrinsic library functions are being compiled,
   15819      passing all values in registers, no matter the size.
   15820 
   15821 '-mepsilon'
   15822 '-mno-epsilon'
   15823      Generate floating-point comparison instructions that compare with
   15824      respect to the 'rE' epsilon register.
   15825 
   15826 '-mabi=mmixware'
   15827 '-mabi=gnu'
   15828      Generate code that passes function parameters and return values
   15829      that (in the called function) are seen as registers '$0' and up, as
   15830      opposed to the GNU ABI which uses global registers '$231' and up.
   15831 
   15832 '-mzero-extend'
   15833 '-mno-zero-extend'
   15834      When reading data from memory in sizes shorter than 64 bits, use
   15835      (do not use) zero-extending load instructions by default, rather
   15836      than sign-extending ones.
   15837 
   15838 '-mknuthdiv'
   15839 '-mno-knuthdiv'
   15840      Make the result of a division yielding a remainder have the same
   15841      sign as the divisor.  With the default, '-mno-knuthdiv', the sign
   15842      of the remainder follows the sign of the dividend.  Both methods
   15843      are arithmetically valid, the latter being almost exclusively used.
   15844 
   15845 '-mtoplevel-symbols'
   15846 '-mno-toplevel-symbols'
   15847      Prepend (do not prepend) a ':' to all global symbols, so the
   15848      assembly code can be used with the 'PREFIX' assembly directive.
   15849 
   15850 '-melf'
   15851      Generate an executable in the ELF format, rather than the default
   15852      'mmo' format used by the 'mmix' simulator.
   15853 
   15854 '-mbranch-predict'
   15855 '-mno-branch-predict'
   15856      Use (do not use) the probable-branch instructions, when static
   15857      branch prediction indicates a probable branch.
   15858 
   15859 '-mbase-addresses'
   15860 '-mno-base-addresses'
   15861      Generate (do not generate) code that uses _base addresses_.  Using
   15862      a base address automatically generates a request (handled by the
   15863      assembler and the linker) for a constant to be set up in a global
   15864      register.  The register is used for one or more base address
   15865      requests within the range 0 to 255 from the value held in the
   15866      register.  The generally leads to short and fast code, but the
   15867      number of different data items that can be addressed is limited.
   15868      This means that a program that uses lots of static data may require
   15869      '-mno-base-addresses'.
   15870 
   15871 '-msingle-exit'
   15872 '-mno-single-exit'
   15873      Force (do not force) generated code to have a single exit point in
   15874      each function.
   15875 
   15876 
   15877 File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
   15878 
   15879 3.17.28 MN10300 Options
   15880 -----------------------
   15881 
   15882 These '-m' options are defined for Matsushita MN10300 architectures:
   15883 
   15884 '-mmult-bug'
   15885      Generate code to avoid bugs in the multiply instructions for the
   15886      MN10300 processors.  This is the default.
   15887 
   15888 '-mno-mult-bug'
   15889      Do not generate code to avoid bugs in the multiply instructions for
   15890      the MN10300 processors.
   15891 
   15892 '-mam33'
   15893      Generate code using features specific to the AM33 processor.
   15894 
   15895 '-mno-am33'
   15896      Do not generate code using features specific to the AM33 processor.
   15897      This is the default.
   15898 
   15899 '-mam33-2'
   15900      Generate code using features specific to the AM33/2.0 processor.
   15901 
   15902 '-mam34'
   15903      Generate code using features specific to the AM34 processor.
   15904 
   15905 '-mtune=CPU-TYPE'
   15906      Use the timing characteristics of the indicated CPU type when
   15907      scheduling instructions.  This does not change the targeted
   15908      processor type.  The CPU type must be one of 'mn10300', 'am33',
   15909      'am33-2' or 'am34'.
   15910 
   15911 '-mreturn-pointer-on-d0'
   15912      When generating a function that returns a pointer, return the
   15913      pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
   15914      only in 'a0', and attempts to call such functions without a
   15915      prototype result in errors.  Note that this option is on by
   15916      default; use '-mno-return-pointer-on-d0' to disable it.
   15917 
   15918 '-mno-crt0'
   15919      Do not link in the C run-time initialization object file.
   15920 
   15921 '-mrelax'
   15922      Indicate to the linker that it should perform a relaxation
   15923      optimization pass to shorten branches, calls and absolute memory
   15924      addresses.  This option only has an effect when used on the command
   15925      line for the final link step.
   15926 
   15927      This option makes symbolic debugging impossible.
   15928 
   15929 '-mliw'
   15930      Allow the compiler to generate _Long Instruction Word_ instructions
   15931      if the target is the 'AM33' or later.  This is the default.  This
   15932      option defines the preprocessor macro '__LIW__'.
   15933 
   15934 '-mnoliw'
   15935      Do not allow the compiler to generate _Long Instruction Word_
   15936      instructions.  This option defines the preprocessor macro
   15937      '__NO_LIW__'.
   15938 
   15939 '-msetlb'
   15940      Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
   15941      if the target is the 'AM33' or later.  This is the default.  This
   15942      option defines the preprocessor macro '__SETLB__'.
   15943 
   15944 '-mnosetlb'
   15945      Do not allow the compiler to generate _SETLB_ or _Lcc_
   15946      instructions.  This option defines the preprocessor macro
   15947      '__NO_SETLB__'.
   15948 
   15949 
   15950 File: gcc.info,  Node: Moxie Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
   15951 
   15952 3.17.29 Moxie Options
   15953 ---------------------
   15954 
   15955 '-meb'
   15956      Generate big-endian code.  This is the default for 'moxie-*-*'
   15957      configurations.
   15958 
   15959 '-mel'
   15960      Generate little-endian code.
   15961 
   15962 '-mno-crt0'
   15963      Do not link in the C run-time initialization object file.
   15964 
   15965 
   15966 File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Moxie Options,  Up: Submodel Options
   15967 
   15968 3.17.30 PDP-11 Options
   15969 ----------------------
   15970 
   15971 These options are defined for the PDP-11:
   15972 
   15973 '-mfpu'
   15974      Use hardware FPP floating point.  This is the default.  (FIS
   15975      floating point on the PDP-11/40 is not supported.)
   15976 
   15977 '-msoft-float'
   15978      Do not use hardware floating point.
   15979 
   15980 '-mac0'
   15981      Return floating-point results in ac0 (fr0 in Unix assembler
   15982      syntax).
   15983 
   15984 '-mno-ac0'
   15985      Return floating-point results in memory.  This is the default.
   15986 
   15987 '-m40'
   15988      Generate code for a PDP-11/40.
   15989 
   15990 '-m45'
   15991      Generate code for a PDP-11/45.  This is the default.
   15992 
   15993 '-m10'
   15994      Generate code for a PDP-11/10.
   15995 
   15996 '-mbcopy-builtin'
   15997      Use inline 'movmemhi' patterns for copying memory.  This is the
   15998      default.
   15999 
   16000 '-mbcopy'
   16001      Do not use inline 'movmemhi' patterns for copying memory.
   16002 
   16003 '-mint16'
   16004 '-mno-int32'
   16005      Use 16-bit 'int'.  This is the default.
   16006 
   16007 '-mint32'
   16008 '-mno-int16'
   16009      Use 32-bit 'int'.
   16010 
   16011 '-mfloat64'
   16012 '-mno-float32'
   16013      Use 64-bit 'float'.  This is the default.
   16014 
   16015 '-mfloat32'
   16016 '-mno-float64'
   16017      Use 32-bit 'float'.
   16018 
   16019 '-mabshi'
   16020      Use 'abshi2' pattern.  This is the default.
   16021 
   16022 '-mno-abshi'
   16023      Do not use 'abshi2' pattern.
   16024 
   16025 '-mbranch-expensive'
   16026      Pretend that branches are expensive.  This is for experimenting
   16027      with code generation only.
   16028 
   16029 '-mbranch-cheap'
   16030      Do not pretend that branches are expensive.  This is the default.
   16031 
   16032 '-munix-asm'
   16033      Use Unix assembler syntax.  This is the default when configured for
   16034      'pdp11-*-bsd'.
   16035 
   16036 '-mdec-asm'
   16037      Use DEC assembler syntax.  This is the default when configured for
   16038      any PDP-11 target other than 'pdp11-*-bsd'.
   16039 
   16040 
   16041 File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
   16042 
   16043 3.17.31 picoChip Options
   16044 ------------------------
   16045 
   16046 These '-m' options are defined for picoChip implementations:
   16047 
   16048 '-mae=AE_TYPE'
   16049      Set the instruction set, register set, and instruction scheduling
   16050      parameters for array element type AE_TYPE.  Supported values for
   16051      AE_TYPE are 'ANY', 'MUL', and 'MAC'.
   16052 
   16053      '-mae=ANY' selects a completely generic AE type.  Code generated
   16054      with this option runs on any of the other AE types.  The code is
   16055      not as efficient as it would be if compiled for a specific AE type,
   16056      and some types of operation (e.g., multiplication) do not work
   16057      properly on all types of AE.
   16058 
   16059      '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
   16060      for compiled code, and is the default.
   16061 
   16062      '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
   16063      option may suffer from poor performance of byte (char)
   16064      manipulation, since the DSP AE does not provide hardware support
   16065      for byte load/stores.
   16066 
   16067 '-msymbol-as-address'
   16068      Enable the compiler to directly use a symbol name as an address in
   16069      a load/store instruction, without first loading it into a register.
   16070      Typically, the use of this option generates larger programs, which
   16071      run faster than when the option isn't used.  However, the results
   16072      vary from program to program, so it is left as a user option,
   16073      rather than being permanently enabled.
   16074 
   16075 '-mno-inefficient-warnings'
   16076      Disables warnings about the generation of inefficient code.  These
   16077      warnings can be generated, for example, when compiling code that
   16078      performs byte-level memory operations on the MAC AE type.  The MAC
   16079      AE has no hardware support for byte-level memory operations, so all
   16080      byte load/stores must be synthesized from word load/store
   16081      operations.  This is inefficient and a warning is generated to
   16082      indicate that you should rewrite the code to avoid byte operations,
   16083      or to target an AE type that has the necessary hardware support.
   16084      This option disables these warnings.
   16085 
   16086 
   16087 File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
   16088 
   16089 3.17.32 PowerPC Options
   16090 -----------------------
   16091 
   16092 These are listed under *Note RS/6000 and PowerPC Options::.
   16093 
   16094 
   16095 File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
   16096 
   16097 3.17.33 RL78 Options
   16098 --------------------
   16099 
   16100 '-msim'
   16101      Links in additional target libraries to support operation within a
   16102      simulator.
   16103 
   16104 '-mmul=none'
   16105 '-mmul=g13'
   16106 '-mmul=rl78'
   16107      Specifies the type of hardware multiplication support to be used.
   16108      The default is 'none', which uses software multiplication
   16109      functions.  The 'g13' option is for the hardware multiply/divide
   16110      peripheral only on the RL78/G13 targets.  The 'rl78' option is for
   16111      the standard hardware multiplication defined in the RL78 software
   16112      manual.
   16113 
   16114 
   16115 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
   16116 
   16117 3.17.34 IBM RS/6000 and PowerPC Options
   16118 ---------------------------------------
   16119 
   16120 These '-m' options are defined for the IBM RS/6000 and PowerPC:
   16121 '-mpowerpc-gpopt'
   16122 '-mno-powerpc-gpopt'
   16123 '-mpowerpc-gfxopt'
   16124 '-mno-powerpc-gfxopt'
   16125 '-mpowerpc64'
   16126 '-mno-powerpc64'
   16127 '-mmfcrf'
   16128 '-mno-mfcrf'
   16129 '-mpopcntb'
   16130 '-mno-popcntb'
   16131 '-mpopcntd'
   16132 '-mno-popcntd'
   16133 '-mfprnd'
   16134 '-mno-fprnd'
   16135 '-mcmpb'
   16136 '-mno-cmpb'
   16137 '-mmfpgpr'
   16138 '-mno-mfpgpr'
   16139 '-mhard-dfp'
   16140 '-mno-hard-dfp'
   16141      You use these options to specify which instructions are available
   16142      on the processor you are using.  The default value of these options
   16143      is determined when configuring GCC.  Specifying the
   16144      '-mcpu=CPU_TYPE' overrides the specification of these options.  We
   16145      recommend you use the '-mcpu=CPU_TYPE' option rather than the
   16146      options listed above.
   16147 
   16148      Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
   16149      architecture instructions in the General Purpose group, including
   16150      floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
   16151      GCC to use the optional PowerPC architecture instructions in the
   16152      Graphics group, including floating-point select.
   16153 
   16154      The '-mmfcrf' option allows GCC to generate the move from condition
   16155      register field instruction implemented on the POWER4 processor and
   16156      other processors that support the PowerPC V2.01 architecture.  The
   16157      '-mpopcntb' option allows GCC to generate the popcount and
   16158      double-precision FP reciprocal estimate instruction implemented on
   16159      the POWER5 processor and other processors that support the PowerPC
   16160      V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
   16161      the popcount instruction implemented on the POWER7 processor and
   16162      other processors that support the PowerPC V2.06 architecture.  The
   16163      '-mfprnd' option allows GCC to generate the FP round to integer
   16164      instructions implemented on the POWER5+ processor and other
   16165      processors that support the PowerPC V2.03 architecture.  The
   16166      '-mcmpb' option allows GCC to generate the compare bytes
   16167      instruction implemented on the POWER6 processor and other
   16168      processors that support the PowerPC V2.05 architecture.  The
   16169      '-mmfpgpr' option allows GCC to generate the FP move to/from
   16170      general-purpose register instructions implemented on the POWER6X
   16171      processor and other processors that support the extended PowerPC
   16172      V2.05 architecture.  The '-mhard-dfp' option allows GCC to generate
   16173      the decimal floating-point instructions implemented on some POWER
   16174      processors.
   16175 
   16176      The '-mpowerpc64' option allows GCC to generate the additional
   16177      64-bit instructions that are found in the full PowerPC64
   16178      architecture and to treat GPRs as 64-bit, doubleword quantities.
   16179      GCC defaults to '-mno-powerpc64'.
   16180 
   16181 '-mcpu=CPU_TYPE'
   16182      Set architecture type, register usage, and instruction scheduling
   16183      parameters for machine type CPU_TYPE.  Supported values for
   16184      CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
   16185      '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
   16186      '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
   16187      '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
   16188      'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
   16189      'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
   16190      'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'.
   16191 
   16192      '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC
   16193      and 64-bit PowerPC architecture machine types, with an appropriate,
   16194      generic processor model assumed for scheduling purposes.
   16195 
   16196      The other options specify a specific processor.  Code generated
   16197      under those options runs best on that processor, and may not run at
   16198      all on others.
   16199 
   16200      The '-mcpu' options automatically enable or disable the following
   16201      options:
   16202 
   16203           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
   16204           -mpopcntb -mpopcntd  -mpowerpc64
   16205           -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
   16206           -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
   16207           -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
   16208           -mquad-memory -mquad-memory-atomic
   16209 
   16210      The particular options set for any particular CPU varies between
   16211      compiler versions, depending on what setting seems to produce
   16212      optimal code for that CPU; it doesn't necessarily reflect the
   16213      actual hardware's capabilities.  If you wish to set an individual
   16214      option to a particular value, you may specify it after the '-mcpu'
   16215      option, like '-mcpu=970 -mno-altivec'.
   16216 
   16217      On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
   16218      or disabled by the '-mcpu' option at present because AIX does not
   16219      have full support for these options.  You may still enable or
   16220      disable them individually if you're sure it'll work in your
   16221      environment.
   16222 
   16223 '-mtune=CPU_TYPE'
   16224      Set the instruction scheduling parameters for machine type
   16225      CPU_TYPE, but do not set the architecture type or register usage,
   16226      as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
   16227      for '-mtune' as for '-mcpu'.  If both are specified, the code
   16228      generated uses the architecture and registers set by '-mcpu', but
   16229      the scheduling parameters set by '-mtune'.
   16230 
   16231 '-mcmodel=small'
   16232      Generate PowerPC64 code for the small model: The TOC is limited to
   16233      64k.
   16234 
   16235 '-mcmodel=medium'
   16236      Generate PowerPC64 code for the medium model: The TOC and other
   16237      static data may be up to a total of 4G in size.
   16238 
   16239 '-mcmodel=large'
   16240      Generate PowerPC64 code for the large model: The TOC may be up to
   16241      4G in size.  Other data and code is only limited by the 64-bit
   16242      address space.
   16243 
   16244 '-maltivec'
   16245 '-mno-altivec'
   16246      Generate code that uses (does not use) AltiVec instructions, and
   16247      also enable the use of built-in functions that allow more direct
   16248      access to the AltiVec instruction set.  You may also need to set
   16249      '-mabi=altivec' to adjust the current ABI with AltiVec ABI
   16250      enhancements.
   16251 
   16252      When '-maltivec' is used, rather than '-maltivec=le' or
   16253      '-maltivec=be', the element order for Altivec intrinsics such as
   16254      'vec_splat', 'vec_extract', and 'vec_insert' will match array
   16255      element order corresponding to the endianness of the target.  That
   16256      is, element zero identifies the leftmost element in a vector
   16257      register when targeting a big-endian platform, and identifies the
   16258      rightmost element in a vector register when targeting a
   16259      little-endian platform.
   16260 
   16261 '-maltivec=be'
   16262      Generate Altivec instructions using big-endian element order,
   16263      regardless of whether the target is big- or little-endian.  This is
   16264      the default when targeting a big-endian platform.
   16265 
   16266      The element order is used to interpret element numbers in Altivec
   16267      intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
   16268      By default, these will match array element order corresponding to
   16269      the endianness for the target.
   16270 
   16271 '-maltivec=le'
   16272      Generate Altivec instructions using little-endian element order,
   16273      regardless of whether the target is big- or little-endian.  This is
   16274      the default when targeting a little-endian platform.  This option
   16275      is currently ignored when targeting a big-endian platform.
   16276 
   16277      The element order is used to interpret element numbers in Altivec
   16278      intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
   16279      By default, these will match array element order corresponding to
   16280      the endianness for the target.
   16281 
   16282 '-mvrsave'
   16283 '-mno-vrsave'
   16284      Generate VRSAVE instructions when generating AltiVec code.
   16285 
   16286 '-mgen-cell-microcode'
   16287      Generate Cell microcode instructions.
   16288 
   16289 '-mwarn-cell-microcode'
   16290      Warn when a Cell microcode instruction is emitted.  An example of a
   16291      Cell microcode instruction is a variable shift.
   16292 
   16293 '-msecure-plt'
   16294      Generate code that allows 'ld' and 'ld.so' to build executables and
   16295      shared libraries with non-executable '.plt' and '.got' sections.
   16296      This is a PowerPC 32-bit SYSV ABI option.
   16297 
   16298 '-mbss-plt'
   16299      Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
   16300      and requires '.plt' and '.got' sections that are both writable and
   16301      executable.  This is a PowerPC 32-bit SYSV ABI option.
   16302 
   16303 '-misel'
   16304 '-mno-isel'
   16305      This switch enables or disables the generation of ISEL
   16306      instructions.
   16307 
   16308 '-misel=YES/NO'
   16309      This switch has been deprecated.  Use '-misel' and '-mno-isel'
   16310      instead.
   16311 
   16312 '-mspe'
   16313 '-mno-spe'
   16314      This switch enables or disables the generation of SPE simd
   16315      instructions.
   16316 
   16317 '-mpaired'
   16318 '-mno-paired'
   16319      This switch enables or disables the generation of PAIRED simd
   16320      instructions.
   16321 
   16322 '-mspe=YES/NO'
   16323      This option has been deprecated.  Use '-mspe' and '-mno-spe'
   16324      instead.
   16325 
   16326 '-mvsx'
   16327 '-mno-vsx'
   16328      Generate code that uses (does not use) vector/scalar (VSX)
   16329      instructions, and also enable the use of built-in functions that
   16330      allow more direct access to the VSX instruction set.
   16331 
   16332 '-mcrypto'
   16333 '-mno-crypto'
   16334      Enable the use (disable) of the built-in functions that allow
   16335      direct access to the cryptographic instructions that were added in
   16336      version 2.07 of the PowerPC ISA.
   16337 
   16338 '-mdirect-move'
   16339 '-mno-direct-move'
   16340      Generate code that uses (does not use) the instructions to move
   16341      data between the general purpose registers and the vector/scalar
   16342      (VSX) registers that were added in version 2.07 of the PowerPC ISA.
   16343 
   16344 '-mpower8-fusion'
   16345 '-mno-power8-fusion'
   16346      Generate code that keeps (does not keeps) some integer operations
   16347      adjacent so that the instructions can be fused together on power8
   16348      and later processors.
   16349 
   16350 '-mpower8-vector'
   16351 '-mno-power8-vector'
   16352      Generate code that uses (does not use) the vector and scalar
   16353      instructions that were added in version 2.07 of the PowerPC ISA.
   16354      Also enable the use of built-in functions that allow more direct
   16355      access to the vector instructions.
   16356 
   16357 '-mquad-memory'
   16358 '-mno-quad-memory'
   16359      Generate code that uses (does not use) the non-atomic quad word
   16360      memory instructions.  The '-mquad-memory' option requires use of
   16361      64-bit mode.
   16362 
   16363 '-mquad-memory-atomic'
   16364 '-mno-quad-memory-atomic'
   16365      Generate code that uses (does not use) the atomic quad word memory
   16366      instructions.  The '-mquad-memory-atomic' option requires use of
   16367      64-bit mode.
   16368 
   16369 '-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
   16370 '-mfloat-gprs'
   16371      This switch enables or disables the generation of floating-point
   16372      operations on the general-purpose registers for architectures that
   16373      support it.
   16374 
   16375      The argument YES or SINGLE enables the use of single-precision
   16376      floating-point operations.
   16377 
   16378      The argument DOUBLE enables the use of single and double-precision
   16379      floating-point operations.
   16380 
   16381      The argument NO disables floating-point operations on the
   16382      general-purpose registers.
   16383 
   16384      This option is currently only available on the MPC854x.
   16385 
   16386 '-m32'
   16387 '-m64'
   16388      Generate code for 32-bit or 64-bit environments of Darwin and SVR4
   16389      targets (including GNU/Linux).  The 32-bit environment sets int,
   16390      long and pointer to 32 bits and generates code that runs on any
   16391      PowerPC variant.  The 64-bit environment sets int to 32 bits and
   16392      long and pointer to 64 bits, and generates code for PowerPC64, as
   16393      for '-mpowerpc64'.
   16394 
   16395 '-mfull-toc'
   16396 '-mno-fp-in-toc'
   16397 '-mno-sum-in-toc'
   16398 '-mminimal-toc'
   16399      Modify generation of the TOC (Table Of Contents), which is created
   16400      for every executable file.  The '-mfull-toc' option is selected by
   16401      default.  In that case, GCC allocates at least one TOC entry for
   16402      each unique non-automatic variable reference in your program.  GCC
   16403      also places floating-point constants in the TOC.  However, only
   16404      16,384 entries are available in the TOC.
   16405 
   16406      If you receive a linker error message that saying you have
   16407      overflowed the available TOC space, you can reduce the amount of
   16408      TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
   16409      options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
   16410      constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
   16411      code to calculate the sum of an address and a constant at run time
   16412      instead of putting that sum into the TOC.  You may specify one or
   16413      both of these options.  Each causes GCC to produce very slightly
   16414      slower and larger code at the expense of conserving TOC space.
   16415 
   16416      If you still run out of space in the TOC even when you specify both
   16417      of these options, specify '-mminimal-toc' instead.  This option
   16418      causes GCC to make only one TOC entry for every file.  When you
   16419      specify this option, GCC produces code that is slower and larger
   16420      but which uses extremely little TOC space.  You may wish to use
   16421      this option only on files that contain less frequently-executed
   16422      code.
   16423 
   16424 '-maix64'
   16425 '-maix32'
   16426      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
   16427      64-bit 'long' type, and the infrastructure needed to support them.
   16428      Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
   16429      disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
   16430      to '-maix32'.
   16431 
   16432 '-mxl-compat'
   16433 '-mno-xl-compat'
   16434      Produce code that conforms more closely to IBM XL compiler
   16435      semantics when using AIX-compatible ABI.  Pass floating-point
   16436      arguments to prototyped functions beyond the register save area
   16437      (RSA) on the stack in addition to argument FPRs.  Do not assume
   16438      that most significant double in 128-bit long double value is
   16439      properly rounded when comparing values and converting to double.
   16440      Use XL symbol names for long double support routines.
   16441 
   16442      The AIX calling convention was extended but not initially
   16443      documented to handle an obscure K&R C case of calling a function
   16444      that takes the address of its arguments with fewer arguments than
   16445      declared.  IBM XL compilers access floating-point arguments that do
   16446      not fit in the RSA from the stack when a subroutine is compiled
   16447      without optimization.  Because always storing floating-point
   16448      arguments on the stack is inefficient and rarely needed, this
   16449      option is not enabled by default and only is necessary when calling
   16450      subroutines compiled by IBM XL compilers without optimization.
   16451 
   16452 '-mpe'
   16453      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
   16454      application written to use message passing with special startup
   16455      code to enable the application to run.  The system must have PE
   16456      installed in the standard location ('/usr/lpp/ppe.poe/'), or the
   16457      'specs' file must be overridden with the '-specs=' option to
   16458      specify the appropriate directory location.  The Parallel
   16459      Environment does not support threads, so the '-mpe' option and the
   16460      '-pthread' option are incompatible.
   16461 
   16462 '-malign-natural'
   16463 '-malign-power'
   16464      On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
   16465      '-malign-natural' overrides the ABI-defined alignment of larger
   16466      types, such as floating-point doubles, on their natural size-based
   16467      boundary.  The option '-malign-power' instructs GCC to follow the
   16468      ABI-specified alignment rules.  GCC defaults to the standard
   16469      alignment defined in the ABI.
   16470 
   16471      On 64-bit Darwin, natural alignment is the default, and
   16472      '-malign-power' is not supported.
   16473 
   16474 '-msoft-float'
   16475 '-mhard-float'
   16476      Generate code that does not use (uses) the floating-point register
   16477      set.  Software floating-point emulation is provided if you use the
   16478      '-msoft-float' option, and pass the option to GCC when linking.
   16479 
   16480 '-msingle-float'
   16481 '-mdouble-float'
   16482      Generate code for single- or double-precision floating-point
   16483      operations.  '-mdouble-float' implies '-msingle-float'.
   16484 
   16485 '-msimple-fpu'
   16486      Do not generate 'sqrt' and 'div' instructions for hardware
   16487      floating-point unit.
   16488 
   16489 '-mfpu=NAME'
   16490      Specify type of floating-point unit.  Valid values for NAME are
   16491      'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite'
   16492      (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full'
   16493      (equivalent to '-msingle-float'), and 'dp_full' (equivalent to
   16494      '-mdouble-float').
   16495 
   16496 '-mxilinx-fpu'
   16497      Perform optimizations for the floating-point unit on Xilinx PPC
   16498      405/440.
   16499 
   16500 '-mmultiple'
   16501 '-mno-multiple'
   16502      Generate code that uses (does not use) the load multiple word
   16503      instructions and the store multiple word instructions.  These
   16504      instructions are generated by default on POWER systems, and not
   16505      generated on PowerPC systems.  Do not use '-mmultiple' on
   16506      little-endian PowerPC systems, since those instructions do not work
   16507      when the processor is in little-endian mode.  The exceptions are
   16508      PPC740 and PPC750 which permit these instructions in little-endian
   16509      mode.
   16510 
   16511 '-mstring'
   16512 '-mno-string'
   16513      Generate code that uses (does not use) the load string instructions
   16514      and the store string word instructions to save multiple registers
   16515      and do small block moves.  These instructions are generated by
   16516      default on POWER systems, and not generated on PowerPC systems.  Do
   16517      not use '-mstring' on little-endian PowerPC systems, since those
   16518      instructions do not work when the processor is in little-endian
   16519      mode.  The exceptions are PPC740 and PPC750 which permit these
   16520      instructions in little-endian mode.
   16521 
   16522 '-mupdate'
   16523 '-mno-update'
   16524      Generate code that uses (does not use) the load or store
   16525      instructions that update the base register to the address of the
   16526      calculated memory location.  These instructions are generated by
   16527      default.  If you use '-mno-update', there is a small window between
   16528      the time that the stack pointer is updated and the address of the
   16529      previous frame is stored, which means code that walks the stack
   16530      frame across interrupts or signals may get corrupted data.
   16531 
   16532 '-mavoid-indexed-addresses'
   16533 '-mno-avoid-indexed-addresses'
   16534      Generate code that tries to avoid (not avoid) the use of indexed
   16535      load or store instructions.  These instructions can incur a
   16536      performance penalty on Power6 processors in certain situations,
   16537      such as when stepping through large arrays that cross a 16M
   16538      boundary.  This option is enabled by default when targeting Power6
   16539      and disabled otherwise.
   16540 
   16541 '-mfused-madd'
   16542 '-mno-fused-madd'
   16543      Generate code that uses (does not use) the floating-point multiply
   16544      and accumulate instructions.  These instructions are generated by
   16545      default if hardware floating point is used.  The machine-dependent
   16546      '-mfused-madd' option is now mapped to the machine-independent
   16547      '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
   16548      '-ffp-contract=off'.
   16549 
   16550 '-mmulhw'
   16551 '-mno-mulhw'
   16552      Generate code that uses (does not use) the half-word multiply and
   16553      multiply-accumulate instructions on the IBM 405, 440, 464 and 476
   16554      processors.  These instructions are generated by default when
   16555      targeting those processors.
   16556 
   16557 '-mdlmzb'
   16558 '-mno-dlmzb'
   16559      Generate code that uses (does not use) the string-search 'dlmzb'
   16560      instruction on the IBM 405, 440, 464 and 476 processors.  This
   16561      instruction is generated by default when targeting those
   16562      processors.
   16563 
   16564 '-mno-bit-align'
   16565 '-mbit-align'
   16566      On System V.4 and embedded PowerPC systems do not (do) force
   16567      structures and unions that contain bit-fields to be aligned to the
   16568      base type of the bit-field.
   16569 
   16570      For example, by default a structure containing nothing but 8
   16571      'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
   16572      and has a size of 4 bytes.  By using '-mno-bit-align', the
   16573      structure is aligned to a 1-byte boundary and is 1 byte in size.
   16574 
   16575 '-mno-strict-align'
   16576 '-mstrict-align'
   16577      On System V.4 and embedded PowerPC systems do not (do) assume that
   16578      unaligned memory references are handled by the system.
   16579 
   16580 '-mrelocatable'
   16581 '-mno-relocatable'
   16582      Generate code that allows (does not allow) a static executable to
   16583      be relocated to a different address at run time.  A simple embedded
   16584      PowerPC system loader should relocate the entire contents of
   16585      '.got2' and 4-byte locations listed in the '.fixup' section, a
   16586      table of 32-bit addresses generated by this option.  For this to
   16587      work, all objects linked together must be compiled with
   16588      '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
   16589      aligns the stack to an 8-byte boundary.
   16590 
   16591 '-mrelocatable-lib'
   16592 '-mno-relocatable-lib'
   16593      Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
   16594      section to allow static executables to be relocated at run time,
   16595      but '-mrelocatable-lib' does not use the smaller stack alignment of
   16596      '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
   16597      linked with objects compiled with any combination of the
   16598      '-mrelocatable' options.
   16599 
   16600 '-mno-toc'
   16601 '-mtoc'
   16602      On System V.4 and embedded PowerPC systems do not (do) assume that
   16603      register 2 contains a pointer to a global area pointing to the
   16604      addresses used in the program.
   16605 
   16606 '-mlittle'
   16607 '-mlittle-endian'
   16608      On System V.4 and embedded PowerPC systems compile code for the
   16609      processor in little-endian mode.  The '-mlittle-endian' option is
   16610      the same as '-mlittle'.
   16611 
   16612 '-mbig'
   16613 '-mbig-endian'
   16614      On System V.4 and embedded PowerPC systems compile code for the
   16615      processor in big-endian mode.  The '-mbig-endian' option is the
   16616      same as '-mbig'.
   16617 
   16618 '-mdynamic-no-pic'
   16619      On Darwin and Mac OS X systems, compile code so that it is not
   16620      relocatable, but that its external references are relocatable.  The
   16621      resulting code is suitable for applications, but not shared
   16622      libraries.
   16623 
   16624 '-msingle-pic-base'
   16625      Treat the register used for PIC addressing as read-only, rather
   16626      than loading it in the prologue for each function.  The runtime
   16627      system is responsible for initializing this register with an
   16628      appropriate value before execution begins.
   16629 
   16630 '-mprioritize-restricted-insns=PRIORITY'
   16631      This option controls the priority that is assigned to dispatch-slot
   16632      restricted instructions during the second scheduling pass.  The
   16633      argument PRIORITY takes the value '0', '1', or '2' to assign no,
   16634      highest, or second-highest (respectively) priority to dispatch-slot
   16635      restricted instructions.
   16636 
   16637 '-msched-costly-dep=DEPENDENCE_TYPE'
   16638      This option controls which dependences are considered costly by the
   16639      target during instruction scheduling.  The argument DEPENDENCE_TYPE
   16640      takes one of the following values:
   16641 
   16642      'no'
   16643           No dependence is costly.
   16644 
   16645      'all'
   16646           All dependences are costly.
   16647 
   16648      'true_store_to_load'
   16649           A true dependence from store to load is costly.
   16650 
   16651      'store_to_load'
   16652           Any dependence from store to load is costly.
   16653 
   16654      NUMBER
   16655           Any dependence for which the latency is greater than or equal
   16656           to NUMBER is costly.
   16657 
   16658 '-minsert-sched-nops=SCHEME'
   16659      This option controls which NOP insertion scheme is used during the
   16660      second scheduling pass.  The argument SCHEME takes one of the
   16661      following values:
   16662 
   16663      'no'
   16664           Don't insert NOPs.
   16665 
   16666      'pad'
   16667           Pad with NOPs any dispatch group that has vacant issue slots,
   16668           according to the scheduler's grouping.
   16669 
   16670      'regroup_exact'
   16671           Insert NOPs to force costly dependent insns into separate
   16672           groups.  Insert exactly as many NOPs as needed to force an
   16673           insn to a new group, according to the estimated processor
   16674           grouping.
   16675 
   16676      NUMBER
   16677           Insert NOPs to force costly dependent insns into separate
   16678           groups.  Insert NUMBER NOPs to force an insn to a new group.
   16679 
   16680 '-mcall-sysv'
   16681      On System V.4 and embedded PowerPC systems compile code using
   16682      calling conventions that adhere to the March 1995 draft of the
   16683      System V Application Binary Interface, PowerPC processor
   16684      supplement.  This is the default unless you configured GCC using
   16685      'powerpc-*-eabiaix'.
   16686 
   16687 '-mcall-sysv-eabi'
   16688 '-mcall-eabi'
   16689      Specify both '-mcall-sysv' and '-meabi' options.
   16690 
   16691 '-mcall-sysv-noeabi'
   16692      Specify both '-mcall-sysv' and '-mno-eabi' options.
   16693 
   16694 '-mcall-aixdesc'
   16695      On System V.4 and embedded PowerPC systems compile code for the AIX
   16696      operating system.
   16697 
   16698 '-mcall-linux'
   16699      On System V.4 and embedded PowerPC systems compile code for the
   16700      Linux-based GNU system.
   16701 
   16702 '-mcall-freebsd'
   16703      On System V.4 and embedded PowerPC systems compile code for the
   16704      FreeBSD operating system.
   16705 
   16706 '-mcall-netbsd'
   16707      On System V.4 and embedded PowerPC systems compile code for the
   16708      NetBSD operating system.
   16709 
   16710 '-mcall-openbsd'
   16711      On System V.4 and embedded PowerPC systems compile code for the
   16712      OpenBSD operating system.
   16713 
   16714 '-maix-struct-return'
   16715      Return all structures in memory (as specified by the AIX ABI).
   16716 
   16717 '-msvr4-struct-return'
   16718      Return structures smaller than 8 bytes in registers (as specified
   16719      by the SVR4 ABI).
   16720 
   16721 '-mabi=ABI-TYPE'
   16722      Extend the current ABI with a particular extension, or remove such
   16723      extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
   16724      IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2.
   16725 
   16726 '-mabi=spe'
   16727      Extend the current ABI with SPE ABI extensions.  This does not
   16728      change the default ABI, instead it adds the SPE ABI extensions to
   16729      the current ABI.
   16730 
   16731 '-mabi=no-spe'
   16732      Disable Book-E SPE ABI extensions for the current ABI.
   16733 
   16734 '-mabi=ibmlongdouble'
   16735      Change the current ABI to use IBM extended-precision long double.
   16736      This is a PowerPC 32-bit SYSV ABI option.
   16737 
   16738 '-mabi=ieeelongdouble'
   16739      Change the current ABI to use IEEE extended-precision long double.
   16740      This is a PowerPC 32-bit Linux ABI option.
   16741 
   16742 '-mabi=elfv1'
   16743      Change the current ABI to use the ELFv1 ABI. This is the default
   16744      ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
   16745      ABI requires special system support and is likely to fail in
   16746      spectacular ways.
   16747 
   16748 '-mabi=elfv2'
   16749      Change the current ABI to use the ELFv2 ABI. This is the default
   16750      ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
   16751      ABI requires special system support and is likely to fail in
   16752      spectacular ways.
   16753 
   16754 '-mprototype'
   16755 '-mno-prototype'
   16756      On System V.4 and embedded PowerPC systems assume that all calls to
   16757      variable argument functions are properly prototyped.  Otherwise,
   16758      the compiler must insert an instruction before every non-prototyped
   16759      call to set or clear bit 6 of the condition code register (CR) to
   16760      indicate whether floating-point values are passed in the
   16761      floating-point registers in case the function takes variable
   16762      arguments.  With '-mprototype', only calls to prototyped variable
   16763      argument functions set or clear the bit.
   16764 
   16765 '-msim'
   16766      On embedded PowerPC systems, assume that the startup module is
   16767      called 'sim-crt0.o' and that the standard C libraries are
   16768      'libsim.a' and 'libc.a'.  This is the default for
   16769      'powerpc-*-eabisim' configurations.
   16770 
   16771 '-mmvme'
   16772      On embedded PowerPC systems, assume that the startup module is
   16773      called 'crt0.o' and the standard C libraries are 'libmvme.a' and
   16774      'libc.a'.
   16775 
   16776 '-mads'
   16777      On embedded PowerPC systems, assume that the startup module is
   16778      called 'crt0.o' and the standard C libraries are 'libads.a' and
   16779      'libc.a'.
   16780 
   16781 '-myellowknife'
   16782      On embedded PowerPC systems, assume that the startup module is
   16783      called 'crt0.o' and the standard C libraries are 'libyk.a' and
   16784      'libc.a'.
   16785 
   16786 '-mvxworks'
   16787      On System V.4 and embedded PowerPC systems, specify that you are
   16788      compiling for a VxWorks system.
   16789 
   16790 '-memb'
   16791      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
   16792      header to indicate that 'eabi' extended relocations are used.
   16793 
   16794 '-meabi'
   16795 '-mno-eabi'
   16796      On System V.4 and embedded PowerPC systems do (do not) adhere to
   16797      the Embedded Applications Binary Interface (EABI), which is a set
   16798      of modifications to the System V.4 specifications.  Selecting
   16799      '-meabi' means that the stack is aligned to an 8-byte boundary, a
   16800      function '__eabi' is called from 'main' to set up the EABI
   16801      environment, and the '-msdata' option can use both 'r2' and 'r13'
   16802      to point to two separate small data areas.  Selecting '-mno-eabi'
   16803      means that the stack is aligned to a 16-byte boundary, no EABI
   16804      initialization function is called from 'main', and the '-msdata'
   16805      option only uses 'r13' to point to a single small data area.  The
   16806      '-meabi' option is on by default if you configured GCC using one of
   16807      the 'powerpc*-*-eabi*' options.
   16808 
   16809 '-msdata=eabi'
   16810      On System V.4 and embedded PowerPC systems, put small initialized
   16811      'const' global and static data in the '.sdata2' section, which is
   16812      pointed to by register 'r2'.  Put small initialized non-'const'
   16813      global and static data in the '.sdata' section, which is pointed to
   16814      by register 'r13'.  Put small uninitialized global and static data
   16815      in the '.sbss' section, which is adjacent to the '.sdata' section.
   16816      The '-msdata=eabi' option is incompatible with the '-mrelocatable'
   16817      option.  The '-msdata=eabi' option also sets the '-memb' option.
   16818 
   16819 '-msdata=sysv'
   16820      On System V.4 and embedded PowerPC systems, put small global and
   16821      static data in the '.sdata' section, which is pointed to by
   16822      register 'r13'.  Put small uninitialized global and static data in
   16823      the '.sbss' section, which is adjacent to the '.sdata' section.
   16824      The '-msdata=sysv' option is incompatible with the '-mrelocatable'
   16825      option.
   16826 
   16827 '-msdata=default'
   16828 '-msdata'
   16829      On System V.4 and embedded PowerPC systems, if '-meabi' is used,
   16830      compile code the same as '-msdata=eabi', otherwise compile code the
   16831      same as '-msdata=sysv'.
   16832 
   16833 '-msdata=data'
   16834      On System V.4 and embedded PowerPC systems, put small global data
   16835      in the '.sdata' section.  Put small uninitialized global data in
   16836      the '.sbss' section.  Do not use register 'r13' to address small
   16837      data however.  This is the default behavior unless other '-msdata'
   16838      options are used.
   16839 
   16840 '-msdata=none'
   16841 '-mno-sdata'
   16842      On embedded PowerPC systems, put all initialized global and static
   16843      data in the '.data' section, and all uninitialized data in the
   16844      '.bss' section.
   16845 
   16846 '-mblock-move-inline-limit=NUM'
   16847      Inline all block moves (such as calls to 'memcpy' or structure
   16848      copies) less than or equal to NUM bytes.  The minimum value for NUM
   16849      is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
   16850      default value is target-specific.
   16851 
   16852 '-G NUM'
   16853      On embedded PowerPC systems, put global and static items less than
   16854      or equal to NUM bytes into the small data or BSS sections instead
   16855      of the normal data or BSS section.  By default, NUM is 8.  The '-G
   16856      NUM' switch is also passed to the linker.  All modules should be
   16857      compiled with the same '-G NUM' value.
   16858 
   16859 '-mregnames'
   16860 '-mno-regnames'
   16861      On System V.4 and embedded PowerPC systems do (do not) emit
   16862      register names in the assembly language output using symbolic
   16863      forms.
   16864 
   16865 '-mlongcall'
   16866 '-mno-longcall'
   16867      By default assume that all calls are far away so that a longer and
   16868      more expensive calling sequence is required.  This is required for
   16869      calls farther than 32 megabytes (33,554,432 bytes) from the current
   16870      location.  A short call is generated if the compiler knows the call
   16871      cannot be that far away.  This setting can be overridden by the
   16872      'shortcall' function attribute, or by '#pragma longcall(0)'.
   16873 
   16874      Some linkers are capable of detecting out-of-range calls and
   16875      generating glue code on the fly.  On these systems, long calls are
   16876      unnecessary and generate slower code.  As of this writing, the AIX
   16877      linker can do this, as can the GNU linker for PowerPC/64.  It is
   16878      planned to add this feature to the GNU linker for 32-bit PowerPC
   16879      systems as well.
   16880 
   16881      On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
   16882      L42', plus a "branch island" (glue code).  The two target addresses
   16883      represent the callee and the branch island.  The Darwin/PPC linker
   16884      prefers the first address and generates a 'bl callee' if the PPC
   16885      'bl' instruction reaches the callee directly; otherwise, the linker
   16886      generates 'bl L42' to call the branch island.  The branch island is
   16887      appended to the body of the calling function; it computes the full
   16888      32-bit address of the callee and jumps to it.
   16889 
   16890      On Mach-O (Darwin) systems, this option directs the compiler emit
   16891      to the glue for every direct call, and the Darwin linker decides
   16892      whether to use or discard it.
   16893 
   16894      In the future, GCC may ignore all longcall specifications when the
   16895      linker is known to generate glue.
   16896 
   16897 '-mtls-markers'
   16898 '-mno-tls-markers'
   16899      Mark (do not mark) calls to '__tls_get_addr' with a relocation
   16900      specifying the function argument.  The relocation allows the linker
   16901      to reliably associate function call with argument setup
   16902      instructions for TLS optimization, which in turn allows GCC to
   16903      better schedule the sequence.
   16904 
   16905 '-pthread'
   16906      Adds support for multithreading with the "pthreads" library.  This
   16907      option sets flags for both the preprocessor and linker.
   16908 
   16909 '-mrecip'
   16910 '-mno-recip'
   16911      This option enables use of the reciprocal estimate and reciprocal
   16912      square root estimate instructions with additional Newton-Raphson
   16913      steps to increase precision instead of doing a divide or square
   16914      root and divide for floating-point arguments.  You should use the
   16915      '-ffast-math' option when using '-mrecip' (or at least
   16916      '-funsafe-math-optimizations', '-finite-math-only',
   16917      '-freciprocal-math' and '-fno-trapping-math').  Note that while the
   16918      throughput of the sequence is generally higher than the throughput
   16919      of the non-reciprocal instruction, the precision of the sequence
   16920      can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
   16921      0.99999994) for reciprocal square roots.
   16922 
   16923 '-mrecip=OPT'
   16924      This option controls which reciprocal estimate instructions may be
   16925      used.  OPT is a comma-separated list of options, which may be
   16926      preceded by a '!' to invert the option: 'all': enable all estimate
   16927      instructions, 'default': enable the default instructions,
   16928      equivalent to '-mrecip', 'none': disable all estimate instructions,
   16929      equivalent to '-mno-recip'; 'div': enable the reciprocal
   16930      approximation instructions for both single and double precision;
   16931      'divf': enable the single-precision reciprocal approximation
   16932      instructions; 'divd': enable the double-precision reciprocal
   16933      approximation instructions; 'rsqrt': enable the reciprocal square
   16934      root approximation instructions for both single and double
   16935      precision; 'rsqrtf': enable the single-precision reciprocal square
   16936      root approximation instructions; 'rsqrtd': enable the
   16937      double-precision reciprocal square root approximation instructions;
   16938 
   16939      So, for example, '-mrecip=all,!rsqrtd' enables all of the
   16940      reciprocal estimate instructions, except for the 'FRSQRTE',
   16941      'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
   16942      double-precision reciprocal square root calculations.
   16943 
   16944 '-mrecip-precision'
   16945 '-mno-recip-precision'
   16946      Assume (do not assume) that the reciprocal estimate instructions
   16947      provide higher-precision estimates than is mandated by the PowerPC
   16948      ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
   16949      automatically selects '-mrecip-precision'.  The double-precision
   16950      square root estimate instructions are not generated by default on
   16951      low-precision machines, since they do not provide an estimate that
   16952      converges after three steps.
   16953 
   16954 '-mveclibabi=TYPE'
   16955      Specifies the ABI type to use for vectorizing intrinsics using an
   16956      external library.  The only type supported at present is 'mass',
   16957      which specifies to use IBM's Mathematical Acceleration Subsystem
   16958      (MASS) libraries for vectorizing intrinsics using external
   16959      libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
   16960      'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
   16961      'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
   16962      'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
   16963      'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
   16964      'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
   16965      'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
   16966      'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
   16967      'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
   16968      'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
   16969      and '-funsafe-math-optimizations' must also be enabled.  The MASS
   16970      libraries must be specified at link time.
   16971 
   16972 '-mfriz'
   16973 '-mno-friz'
   16974      Generate (do not generate) the 'friz' instruction when the
   16975      '-funsafe-math-optimizations' option is used to optimize rounding
   16976      of floating-point values to 64-bit integer and back to floating
   16977      point.  The 'friz' instruction does not return the same value if
   16978      the floating-point number is too large to fit in an integer.
   16979 
   16980 '-mpointers-to-nested-functions'
   16981 '-mno-pointers-to-nested-functions'
   16982      Generate (do not generate) code to load up the static chain
   16983      register (R11) when calling through a pointer on AIX and 64-bit
   16984      Linux systems where a function pointer points to a 3-word
   16985      descriptor giving the function address, TOC value to be loaded in
   16986      register R2, and static chain value to be loaded in register R11.
   16987      The '-mpointers-to-nested-functions' is on by default.  You cannot
   16988      call through pointers to nested functions or pointers to functions
   16989      compiled in other languages that use the static chain if you use
   16990      the '-mno-pointers-to-nested-functions'.
   16991 
   16992 '-msave-toc-indirect'
   16993 '-mno-save-toc-indirect'
   16994      Generate (do not generate) code to save the TOC value in the
   16995      reserved stack location in the function prologue if the function
   16996      calls through a pointer on AIX and 64-bit Linux systems.  If the
   16997      TOC value is not saved in the prologue, it is saved just before the
   16998      call through the pointer.  The '-mno-save-toc-indirect' option is
   16999      the default.
   17000 
   17001 '-mcompat-align-parm'
   17002 '-mno-compat-align-parm'
   17003      Generate (do not generate) code to pass structure parameters with a
   17004      maximum alignment of 64 bits, for compatibility with older versions
   17005      of GCC.
   17006 
   17007      Older versions of GCC (prior to 4.9.0) incorrectly did not align a
   17008      structure parameter on a 128-bit boundary when that structure
   17009      contained a member requiring 128-bit alignment.  This is corrected
   17010      in more recent versions of GCC. This option may be used to generate
   17011      code that is compatible with functions compiled with older versions
   17012      of GCC.
   17013 
   17014      In this version of the compiler, the '-mcompat-align-parm' is the
   17015      default, except when using the Linux ELFv2 ABI.
   17016 
   17017 
   17018 File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
   17019 
   17020 3.17.35 RX Options
   17021 ------------------
   17022 
   17023 These command-line options are defined for RX targets:
   17024 
   17025 '-m64bit-doubles'
   17026 '-m32bit-doubles'
   17027      Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
   17028      bits ('-m32bit-doubles') in size.  The default is
   17029      '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
   17030      32-bit values, which is why the default is '-m32bit-doubles'.
   17031 
   17032 '-fpu'
   17033 '-nofpu'
   17034      Enables ('-fpu') or disables ('-nofpu') the use of RX
   17035      floating-point hardware.  The default is enabled for the RX600
   17036      series and disabled for the RX200 series.
   17037 
   17038      Floating-point instructions are only generated for 32-bit
   17039      floating-point values, however, so the FPU hardware is not used for
   17040      doubles if the '-m64bit-doubles' option is used.
   17041 
   17042      _Note_ If the '-fpu' option is enabled then
   17043      '-funsafe-math-optimizations' is also enabled automatically.  This
   17044      is because the RX FPU instructions are themselves unsafe.
   17045 
   17046 '-mcpu=NAME'
   17047      Selects the type of RX CPU to be targeted.  Currently three types
   17048      are supported, the generic RX600 and RX200 series hardware and the
   17049      specific RX610 CPU. The default is RX600.
   17050 
   17051      The only difference between RX600 and RX610 is that the RX610 does
   17052      not support the 'MVTIPL' instruction.
   17053 
   17054      The RX200 series does not have a hardware floating-point unit and
   17055      so '-nofpu' is enabled by default when this type is selected.
   17056 
   17057 '-mbig-endian-data'
   17058 '-mlittle-endian-data'
   17059      Store data (but not code) in the big-endian format.  The default is
   17060      '-mlittle-endian-data', i.e. to store data in the little-endian
   17061      format.
   17062 
   17063 '-msmall-data-limit=N'
   17064      Specifies the maximum size in bytes of global and static variables
   17065      which can be placed into the small data area.  Using the small data
   17066      area can lead to smaller and faster code, but the size of area is
   17067      limited and it is up to the programmer to ensure that the area does
   17068      not overflow.  Also when the small data area is used one of the
   17069      RX's registers (usually 'r13') is reserved for use pointing to this
   17070      area, so it is no longer available for use by the compiler.  This
   17071      could result in slower and/or larger code if variables are pushed
   17072      onto the stack instead of being held in this register.
   17073 
   17074      Note, common variables (variables that have not been initialized)
   17075      and constants are not placed into the small data area as they are
   17076      assigned to other sections in the output executable.
   17077 
   17078      The default value is zero, which disables this feature.  Note, this
   17079      feature is not enabled by default with higher optimization levels
   17080      ('-O2' etc) because of the potentially detrimental effects of
   17081      reserving a register.  It is up to the programmer to experiment and
   17082      discover whether this feature is of benefit to their program.  See
   17083      the description of the '-mpid' option for a description of how the
   17084      actual register to hold the small data area pointer is chosen.
   17085 
   17086 '-msim'
   17087 '-mno-sim'
   17088      Use the simulator runtime.  The default is to use the libgloss
   17089      board-specific runtime.
   17090 
   17091 '-mas100-syntax'
   17092 '-mno-as100-syntax'
   17093      When generating assembler output use a syntax that is compatible
   17094      with Renesas's AS100 assembler.  This syntax can also be handled by
   17095      the GAS assembler, but it has some restrictions so it is not
   17096      generated by default.
   17097 
   17098 '-mmax-constant-size=N'
   17099      Specifies the maximum size, in bytes, of a constant that can be
   17100      used as an operand in a RX instruction.  Although the RX
   17101      instruction set does allow constants of up to 4 bytes in length to
   17102      be used in instructions, a longer value equates to a longer
   17103      instruction.  Thus in some circumstances it can be beneficial to
   17104      restrict the size of constants that are used in instructions.
   17105      Constants that are too big are instead placed into a constant pool
   17106      and referenced via register indirection.
   17107 
   17108      The value N can be between 0 and 4.  A value of 0 (the default) or
   17109      4 means that constants of any size are allowed.
   17110 
   17111 '-mrelax'
   17112      Enable linker relaxation.  Linker relaxation is a process whereby
   17113      the linker attempts to reduce the size of a program by finding
   17114      shorter versions of various instructions.  Disabled by default.
   17115 
   17116 '-mint-register=N'
   17117      Specify the number of registers to reserve for fast interrupt
   17118      handler functions.  The value N can be between 0 and 4.  A value of
   17119      1 means that register 'r13' is reserved for the exclusive use of
   17120      fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
   17121      value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
   17122      reserves 'r13' through 'r10'.  A value of 0, the default, does not
   17123      reserve any registers.
   17124 
   17125 '-msave-acc-in-interrupts'
   17126      Specifies that interrupt handler functions should preserve the
   17127      accumulator register.  This is only necessary if normal code might
   17128      use the accumulator register, for example because it performs
   17129      64-bit multiplications.  The default is to ignore the accumulator
   17130      as this makes the interrupt handlers faster.
   17131 
   17132 '-mpid'
   17133 '-mno-pid'
   17134      Enables the generation of position independent data.  When enabled
   17135      any access to constant data is done via an offset from a base
   17136      address held in a register.  This allows the location of constant
   17137      data to be determined at run time without requiring the executable
   17138      to be relocated, which is a benefit to embedded applications with
   17139      tight memory constraints.  Data that can be modified is not
   17140      affected by this option.
   17141 
   17142      Note, using this feature reserves a register, usually 'r13', for
   17143      the constant data base address.  This can result in slower and/or
   17144      larger code, especially in complicated functions.
   17145 
   17146      The actual register chosen to hold the constant data base address
   17147      depends upon whether the '-msmall-data-limit' and/or the
   17148      '-mint-register' command-line options are enabled.  Starting with
   17149      register 'r13' and proceeding downwards, registers are allocated
   17150      first to satisfy the requirements of '-mint-register', then '-mpid'
   17151      and finally '-msmall-data-limit'.  Thus it is possible for the
   17152      small data area register to be 'r8' if both '-mint-register=4' and
   17153      '-mpid' are specified on the command line.
   17154 
   17155      By default this feature is not enabled.  The default can be
   17156      restored via the '-mno-pid' command-line option.
   17157 
   17158 '-mno-warn-multiple-fast-interrupts'
   17159 '-mwarn-multiple-fast-interrupts'
   17160      Prevents GCC from issuing a warning message if it finds more than
   17161      one fast interrupt handler when it is compiling a file.  The
   17162      default is to issue a warning for each extra fast interrupt handler
   17163      found, as the RX only supports one such interrupt.
   17164 
   17165  _Note:_ The generic GCC command-line option '-ffixed-REG' has special
   17166 significance to the RX port when used with the 'interrupt' function
   17167 attribute.  This attribute indicates a function intended to process fast
   17168 interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
   17169 'r12' and/or 'r13' and only provided that the normal use of the
   17170 corresponding registers have been restricted via the '-ffixed-REG' or
   17171 '-mint-register' command-line options.
   17172 
   17173 
   17174 File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
   17175 
   17176 3.17.36 S/390 and zSeries Options
   17177 ---------------------------------
   17178 
   17179 These are the '-m' options defined for the S/390 and zSeries
   17180 architecture.
   17181 
   17182 '-mhard-float'
   17183 '-msoft-float'
   17184      Use (do not use) the hardware floating-point instructions and
   17185      registers for floating-point operations.  When '-msoft-float' is
   17186      specified, functions in 'libgcc.a' are used to perform
   17187      floating-point operations.  When '-mhard-float' is specified, the
   17188      compiler generates IEEE floating-point instructions.  This is the
   17189      default.
   17190 
   17191 '-mhard-dfp'
   17192 '-mno-hard-dfp'
   17193      Use (do not use) the hardware decimal-floating-point instructions
   17194      for decimal-floating-point operations.  When '-mno-hard-dfp' is
   17195      specified, functions in 'libgcc.a' are used to perform
   17196      decimal-floating-point operations.  When '-mhard-dfp' is specified,
   17197      the compiler generates decimal-floating-point hardware
   17198      instructions.  This is the default for '-march=z9-ec' or higher.
   17199 
   17200 '-mlong-double-64'
   17201 '-mlong-double-128'
   17202      These switches control the size of 'long double' type.  A size of
   17203      64 bits makes the 'long double' type equivalent to the 'double'
   17204      type.  This is the default.
   17205 
   17206 '-mbackchain'
   17207 '-mno-backchain'
   17208      Store (do not store) the address of the caller's frame as backchain
   17209      pointer into the callee's stack frame.  A backchain may be needed
   17210      to allow debugging using tools that do not understand DWARF 2 call
   17211      frame information.  When '-mno-packed-stack' is in effect, the
   17212      backchain pointer is stored at the bottom of the stack frame; when
   17213      '-mpacked-stack' is in effect, the backchain is placed into the
   17214      topmost word of the 96/160 byte register save area.
   17215 
   17216      In general, code compiled with '-mbackchain' is call-compatible
   17217      with code compiled with '-mmo-backchain'; however, use of the
   17218      backchain for debugging purposes usually requires that the whole
   17219      binary is built with '-mbackchain'.  Note that the combination of
   17220      '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
   17221      supported.  In order to build a linux kernel use '-msoft-float'.
   17222 
   17223      The default is to not maintain the backchain.
   17224 
   17225 '-mpacked-stack'
   17226 '-mno-packed-stack'
   17227      Use (do not use) the packed stack layout.  When '-mno-packed-stack'
   17228      is specified, the compiler uses the all fields of the 96/160 byte
   17229      register save area only for their default purpose; unused fields
   17230      still take up stack space.  When '-mpacked-stack' is specified,
   17231      register save slots are densely packed at the top of the register
   17232      save area; unused space is reused for other purposes, allowing for
   17233      more efficient use of the available stack space.  However, when
   17234      '-mbackchain' is also in effect, the topmost word of the save area
   17235      is always used to store the backchain, and the return address
   17236      register is always saved two words below the backchain.
   17237 
   17238      As long as the stack frame backchain is not used, code generated
   17239      with '-mpacked-stack' is call-compatible with code generated with
   17240      '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
   17241      for S/390 or zSeries generated code that uses the stack frame
   17242      backchain at run time, not just for debugging purposes.  Such code
   17243      is not call-compatible with code compiled with '-mpacked-stack'.
   17244      Also, note that the combination of '-mbackchain', '-mpacked-stack'
   17245      and '-mhard-float' is not supported.  In order to build a linux
   17246      kernel use '-msoft-float'.
   17247 
   17248      The default is to not use the packed stack layout.
   17249 
   17250 '-msmall-exec'
   17251 '-mno-small-exec'
   17252      Generate (or do not generate) code using the 'bras' instruction to
   17253      do subroutine calls.  This only works reliably if the total
   17254      executable size does not exceed 64k.  The default is to use the
   17255      'basr' instruction instead, which does not have this limitation.
   17256 
   17257 '-m64'
   17258 '-m31'
   17259      When '-m31' is specified, generate code compliant to the GNU/Linux
   17260      for S/390 ABI.  When '-m64' is specified, generate code compliant
   17261      to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
   17262      generate 64-bit instructions.  For the 's390' targets, the default
   17263      is '-m31', while the 's390x' targets default to '-m64'.
   17264 
   17265 '-mzarch'
   17266 '-mesa'
   17267      When '-mzarch' is specified, generate code using the instructions
   17268      available on z/Architecture.  When '-mesa' is specified, generate
   17269      code using the instructions available on ESA/390.  Note that
   17270      '-mesa' is not possible with '-m64'.  When generating code
   17271      compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
   17272      When generating code compliant to the GNU/Linux for zSeries ABI,
   17273      the default is '-mzarch'.
   17274 
   17275 '-mmvcle'
   17276 '-mno-mvcle'
   17277      Generate (or do not generate) code using the 'mvcle' instruction to
   17278      perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
   17279      loop instead.  This is the default unless optimizing for size.
   17280 
   17281 '-mdebug'
   17282 '-mno-debug'
   17283      Print (or do not print) additional debug information when
   17284      compiling.  The default is to not print debug information.
   17285 
   17286 '-march=CPU-TYPE'
   17287      Generate code that runs on CPU-TYPE, which is the name of a system
   17288      representing a certain processor type.  Possible values for
   17289      CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and
   17290      'z10'.  When generating code using the instructions available on
   17291      z/Architecture, the default is '-march=z900'.  Otherwise, the
   17292      default is '-march=g5'.
   17293 
   17294 '-mtune=CPU-TYPE'
   17295      Tune to CPU-TYPE everything applicable about the generated code,
   17296      except for the ABI and the set of available instructions.  The list
   17297      of CPU-TYPE values is the same as for '-march'.  The default is the
   17298      value used for '-march'.
   17299 
   17300 '-mtpf-trace'
   17301 '-mno-tpf-trace'
   17302      Generate code that adds (does not add) in TPF OS specific branches
   17303      to trace routines in the operating system.  This option is off by
   17304      default, even when compiling for the TPF OS.
   17305 
   17306 '-mfused-madd'
   17307 '-mno-fused-madd'
   17308      Generate code that uses (does not use) the floating-point multiply
   17309      and accumulate instructions.  These instructions are generated by
   17310      default if hardware floating point is used.
   17311 
   17312 '-mwarn-framesize=FRAMESIZE'
   17313      Emit a warning if the current function exceeds the given frame
   17314      size.  Because this is a compile-time check it doesn't need to be a
   17315      real problem when the program runs.  It is intended to identify
   17316      functions that most probably cause a stack overflow.  It is useful
   17317      to be used in an environment with limited stack size e.g. the linux
   17318      kernel.
   17319 
   17320 '-mwarn-dynamicstack'
   17321      Emit a warning if the function calls 'alloca' or uses
   17322      dynamically-sized arrays.  This is generally a bad idea with a
   17323      limited stack size.
   17324 
   17325 '-mstack-guard=STACK-GUARD'
   17326 '-mstack-size=STACK-SIZE'
   17327      If these options are provided the S/390 back end emits additional
   17328      instructions in the function prologue that trigger a trap if the
   17329      stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
   17330      the stack on S/390 grows downward).  If the STACK-GUARD option is
   17331      omitted the smallest power of 2 larger than the frame size of the
   17332      compiled function is chosen.  These options are intended to be used
   17333      to help debugging stack overflow problems.  The additionally
   17334      emitted code causes only little overhead and hence can also be used
   17335      in production-like systems without greater performance degradation.
   17336      The given values have to be exact powers of 2 and STACK-SIZE has to
   17337      be greater than STACK-GUARD without exceeding 64k.  In order to be
   17338      efficient the extra code makes the assumption that the stack starts
   17339      at an address aligned to the value given by STACK-SIZE.  The
   17340      STACK-GUARD option can only be used in conjunction with STACK-SIZE.
   17341 
   17342 '-mhotpatch[=HALFWORDS]'
   17343 '-mno-hotpatch'
   17344      If the hotpatch option is enabled, a "hot-patching" function
   17345      prologue is generated for all functions in the compilation unit.
   17346      The funtion label is prepended with the given number of two-byte
   17347      Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop
   17348      instructions if no argument is present.  Functions with a
   17349      hot-patching prologue are never inlined automatically, and a
   17350      hot-patching prologue is never generated for functions functions
   17351      that are explicitly inline.
   17352 
   17353      This option can be overridden for individual functions with the
   17354      'hotpatch' attribute.
   17355 
   17356 
   17357 File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
   17358 
   17359 3.17.37 Score Options
   17360 ---------------------
   17361 
   17362 These options are defined for Score implementations:
   17363 
   17364 '-meb'
   17365      Compile code for big-endian mode.  This is the default.
   17366 
   17367 '-mel'
   17368      Compile code for little-endian mode.
   17369 
   17370 '-mnhwloop'
   17371      Disable generation of 'bcnz' instructions.
   17372 
   17373 '-muls'
   17374      Enable generation of unaligned load and store instructions.
   17375 
   17376 '-mmac'
   17377      Enable the use of multiply-accumulate instructions.  Disabled by
   17378      default.
   17379 
   17380 '-mscore5'
   17381      Specify the SCORE5 as the target architecture.
   17382 
   17383 '-mscore5u'
   17384      Specify the SCORE5U of the target architecture.
   17385 
   17386 '-mscore7'
   17387      Specify the SCORE7 as the target architecture.  This is the
   17388      default.
   17389 
   17390 '-mscore7d'
   17391      Specify the SCORE7D as the target architecture.
   17392 
   17393 
   17394 File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
   17395 
   17396 3.17.38 SH Options
   17397 ------------------
   17398 
   17399 These '-m' options are defined for the SH implementations:
   17400 
   17401 '-m1'
   17402      Generate code for the SH1.
   17403 
   17404 '-m2'
   17405      Generate code for the SH2.
   17406 
   17407 '-m2e'
   17408      Generate code for the SH2e.
   17409 
   17410 '-m2a-nofpu'
   17411      Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
   17412      way that the floating-point unit is not used.
   17413 
   17414 '-m2a-single-only'
   17415      Generate code for the SH2a-FPU, in such a way that no
   17416      double-precision floating-point operations are used.
   17417 
   17418 '-m2a-single'
   17419      Generate code for the SH2a-FPU assuming the floating-point unit is
   17420      in single-precision mode by default.
   17421 
   17422 '-m2a'
   17423      Generate code for the SH2a-FPU assuming the floating-point unit is
   17424      in double-precision mode by default.
   17425 
   17426 '-m3'
   17427      Generate code for the SH3.
   17428 
   17429 '-m3e'
   17430      Generate code for the SH3e.
   17431 
   17432 '-m4-nofpu'
   17433      Generate code for the SH4 without a floating-point unit.
   17434 
   17435 '-m4-single-only'
   17436      Generate code for the SH4 with a floating-point unit that only
   17437      supports single-precision arithmetic.
   17438 
   17439 '-m4-single'
   17440      Generate code for the SH4 assuming the floating-point unit is in
   17441      single-precision mode by default.
   17442 
   17443 '-m4'
   17444      Generate code for the SH4.
   17445 
   17446 '-m4a-nofpu'
   17447      Generate code for the SH4al-dsp, or for a SH4a in such a way that
   17448      the floating-point unit is not used.
   17449 
   17450 '-m4a-single-only'
   17451      Generate code for the SH4a, in such a way that no double-precision
   17452      floating-point operations are used.
   17453 
   17454 '-m4a-single'
   17455      Generate code for the SH4a assuming the floating-point unit is in
   17456      single-precision mode by default.
   17457 
   17458 '-m4a'
   17459      Generate code for the SH4a.
   17460 
   17461 '-m4al'
   17462      Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
   17463      the assembler.  GCC doesn't generate any DSP instructions at the
   17464      moment.
   17465 
   17466 '-mb'
   17467      Compile code for the processor in big-endian mode.
   17468 
   17469 '-ml'
   17470      Compile code for the processor in little-endian mode.
   17471 
   17472 '-mdalign'
   17473      Align doubles at 64-bit boundaries.  Note that this changes the
   17474      calling conventions, and thus some functions from the standard C
   17475      library do not work unless you recompile it first with '-mdalign'.
   17476 
   17477 '-mrelax'
   17478      Shorten some address references at link time, when possible; uses
   17479      the linker option '-relax'.
   17480 
   17481 '-mbigtable'
   17482      Use 32-bit offsets in 'switch' tables.  The default is to use
   17483      16-bit offsets.
   17484 
   17485 '-mbitops'
   17486      Enable the use of bit manipulation instructions on SH2A.
   17487 
   17488 '-mfmovd'
   17489      Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
   17490      alignment constraints.
   17491 
   17492 '-mhitachi'
   17493      Comply with the calling conventions defined by Renesas.
   17494 
   17495 '-mrenesas'
   17496      Comply with the calling conventions defined by Renesas.
   17497 
   17498 '-mno-renesas'
   17499      Comply with the calling conventions defined for GCC before the
   17500      Renesas conventions were available.  This option is the default for
   17501      all targets of the SH toolchain.
   17502 
   17503 '-mnomacsave'
   17504      Mark the 'MAC' register as call-clobbered, even if '-mhitachi' is
   17505      given.
   17506 
   17507 '-mieee'
   17508 '-mno-ieee'
   17509      Control the IEEE compliance of floating-point comparisons, which
   17510      affects the handling of cases where the result of a comparison is
   17511      unordered.  By default '-mieee' is implicitly enabled.  If
   17512      '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
   17513      which results in faster floating-point greater-equal and less-equal
   17514      comparisons.  The implcit settings can be overridden by specifying
   17515      either '-mieee' or '-mno-ieee'.
   17516 
   17517 '-minline-ic_invalidate'
   17518      Inline code to invalidate instruction cache entries after setting
   17519      up nested function trampolines.  This option has no effect if
   17520      '-musermode' is in effect and the selected code generation option
   17521      (e.g.  '-m4') does not allow the use of the 'icbi' instruction.  If
   17522      the selected code generation option does not allow the use of the
   17523      'icbi' instruction, and '-musermode' is not in effect, the inlined
   17524      code manipulates the instruction cache address array directly with
   17525      an associative write.  This not only requires privileged mode at
   17526      run time, but it also fails if the cache line had been mapped via
   17527      the TLB and has become unmapped.
   17528 
   17529 '-misize'
   17530      Dump instruction size and location in the assembly code.
   17531 
   17532 '-mpadstruct'
   17533      This option is deprecated.  It pads structures to multiple of 4
   17534      bytes, which is incompatible with the SH ABI.
   17535 
   17536 '-matomic-model=MODEL'
   17537      Sets the model of atomic operations and additional parameters as a
   17538      comma separated list.  For details on the atomic built-in functions
   17539      see *note __atomic Builtins::.  The following models and parameters
   17540      are supported:
   17541 
   17542      'none'
   17543           Disable compiler generated atomic sequences and emit library
   17544           calls for atomic operations.  This is the default if the
   17545           target is not 'sh-*-linux*'.
   17546 
   17547      'soft-gusa'
   17548           Generate GNU/Linux compatible gUSA software atomic sequences
   17549           for the atomic built-in functions.  The generated atomic
   17550           sequences require additional support from the
   17551           interrupt/exception handling code of the system and are only
   17552           suitable for SH3* and SH4* single-core systems.  This option
   17553           is enabled by default when the target is 'sh-*-linux*' and
   17554           SH3* or SH4*.  When the target is SH4A, this option will also
   17555           partially utilize the hardware atomic instructions 'movli.l'
   17556           and 'movco.l' to create more efficient code, unless 'strict'
   17557           is specified.
   17558 
   17559      'soft-tcb'
   17560           Generate software atomic sequences that use a variable in the
   17561           thread control block.  This is a variation of the gUSA
   17562           sequences which can also be used on SH1* and SH2* targets.
   17563           The generated atomic sequences require additional support from
   17564           the interrupt/exception handling code of the system and are
   17565           only suitable for single-core systems.  When using this model,
   17566           the 'gbr-offset=' parameter has to be specified as well.
   17567 
   17568      'soft-imask'
   17569           Generate software atomic sequences that temporarily disable
   17570           interrupts by setting 'SR.IMASK = 1111'.  This model works
   17571           only when the program runs in privileged mode and is only
   17572           suitable for single-core systems.  Additional support from the
   17573           interrupt/exception handling code of the system is not
   17574           required.  This model is enabled by default when the target is
   17575           'sh-*-linux*' and SH1* or SH2*.
   17576 
   17577      'hard-llcs'
   17578           Generate hardware atomic sequences using the 'movli.l' and
   17579           'movco.l' instructions only.  This is only available on SH4A
   17580           and is suitable for multi-core systems.  Since the hardware
   17581           instructions support only 32 bit atomic variables access to 8
   17582           or 16 bit variables is emulated with 32 bit accesses.  Code
   17583           compiled with this option will also be compatible with other
   17584           software atomic model interrupt/exception handling systems if
   17585           executed on an SH4A system.  Additional support from the
   17586           interrupt/exception handling code of the system is not
   17587           required for this model.
   17588 
   17589      'gbr-offset='
   17590           This parameter specifies the offset in bytes of the variable
   17591           in the thread control block structure that should be used by
   17592           the generated atomic sequences when the 'soft-tcb' model has
   17593           been selected.  For other models this parameter is ignored.
   17594           The specified value must be an integer multiple of four and in
   17595           the range 0-1020.
   17596 
   17597      'strict'
   17598           This parameter prevents mixed usage of multiple atomic models,
   17599           even though they would be compatible, and will make the
   17600           compiler generate atomic sequences of the specified model
   17601           only.
   17602 
   17603 '-mtas'
   17604      Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
   17605      that depending on the particular hardware and software
   17606      configuration this can degrade overall performance due to the
   17607      operand cache line flushes that are implied by the 'tas.b'
   17608      instruction.  On multi-core SH4A processors the 'tas.b' instruction
   17609      must be used with caution since it can result in data corruption
   17610      for certain cache configurations.
   17611 
   17612 '-mspace'
   17613      Optimize for space instead of speed.  Implied by '-Os'.
   17614 
   17615 '-mprefergot'
   17616      When generating position-independent code, emit function calls
   17617      using the Global Offset Table instead of the Procedure Linkage
   17618      Table.
   17619 
   17620 '-musermode'
   17621      Don't generate privileged mode only code.  This option implies
   17622      '-mno-inline-ic_invalidate' if the inlined code would not work in
   17623      user mode.  This is the default when the target is 'sh-*-linux*'.
   17624 
   17625 '-multcost=NUMBER'
   17626      Set the cost to assume for a multiply insn.
   17627 
   17628 '-mdiv=STRATEGY'
   17629      Set the division strategy to be used for integer division
   17630      operations.  For SHmedia STRATEGY can be one of:
   17631 
   17632      'fp'
   17633           Performs the operation in floating point.  This has a very
   17634           high latency, but needs only a few instructions, so it might
   17635           be a good choice if your code has enough easily-exploitable
   17636           ILP to allow the compiler to schedule the floating-point
   17637           instructions together with other instructions.  Division by
   17638           zero causes a floating-point exception.
   17639 
   17640      'inv'
   17641           Uses integer operations to calculate the inverse of the
   17642           divisor, and then multiplies the dividend with the inverse.
   17643           This strategy allows CSE and hoisting of the inverse
   17644           calculation.  Division by zero calculates an unspecified
   17645           result, but does not trap.
   17646 
   17647      'inv:minlat'
   17648           A variant of 'inv' where, if no CSE or hoisting opportunities
   17649           have been found, or if the entire operation has been hoisted
   17650           to the same place, the last stages of the inverse calculation
   17651           are intertwined with the final multiply to reduce the overall
   17652           latency, at the expense of using a few more instructions, and
   17653           thus offering fewer scheduling opportunities with other code.
   17654 
   17655      'call'
   17656           Calls a library function that usually implements the
   17657           'inv:minlat' strategy.  This gives high code density for
   17658           'm5-*media-nofpu' compilations.
   17659 
   17660      'call2'
   17661           Uses a different entry point of the same library function,
   17662           where it assumes that a pointer to a lookup table has already
   17663           been set up, which exposes the pointer load to CSE and code
   17664           hoisting optimizations.
   17665 
   17666      'inv:call'
   17667      'inv:call2'
   17668      'inv:fp'
   17669           Use the 'inv' algorithm for initial code generation, but if
   17670           the code stays unoptimized, revert to the 'call', 'call2', or
   17671           'fp' strategies, respectively.  Note that the
   17672           potentially-trapping side effect of division by zero is
   17673           carried by a separate instruction, so it is possible that all
   17674           the integer instructions are hoisted out, but the marker for
   17675           the side effect stays where it is.  A recombination to
   17676           floating-point operations or a call is not possible in that
   17677           case.
   17678 
   17679      'inv20u'
   17680      'inv20l'
   17681           Variants of the 'inv:minlat' strategy.  In the case that the
   17682           inverse calculation is not separated from the multiply, they
   17683           speed up division where the dividend fits into 20 bits (plus
   17684           sign where applicable) by inserting a test to skip a number of
   17685           operations in this case; this test slows down the case of
   17686           larger dividends.  'inv20u' assumes the case of a such a small
   17687           dividend to be unlikely, and 'inv20l' assumes it to be likely.
   17688 
   17689      For targets other than SHmedia STRATEGY can be one of:
   17690 
   17691      'call-div1'
   17692           Calls a library function that uses the single-step division
   17693           instruction 'div1' to perform the operation.  Division by zero
   17694           calculates an unspecified result and does not trap.  This is
   17695           the default except for SH4, SH2A and SHcompact.
   17696 
   17697      'call-fp'
   17698           Calls a library function that performs the operation in double
   17699           precision floating point.  Division by zero causes a
   17700           floating-point exception.  This is the default for SHcompact
   17701           with FPU. Specifying this for targets that do not have a
   17702           double precision FPU will default to 'call-div1'.
   17703 
   17704      'call-table'
   17705           Calls a library function that uses a lookup table for small
   17706           divisors and the 'div1' instruction with case distinction for
   17707           larger divisors.  Division by zero calculates an unspecified
   17708           result and does not trap.  This is the default for SH4.
   17709           Specifying this for targets that do not have dynamic shift
   17710           instructions will default to 'call-div1'.
   17711 
   17712      When a division strategy has not been specified the default
   17713      strategy will be selected based on the current target.  For SH2A
   17714      the default strategy is to use the 'divs' and 'divu' instructions
   17715      instead of library function calls.
   17716 
   17717 '-maccumulate-outgoing-args'
   17718      Reserve space once for outgoing arguments in the function prologue
   17719      rather than around each call.  Generally beneficial for performance
   17720      and size.  Also needed for unwinding to avoid changing the stack
   17721      frame around conditional code.
   17722 
   17723 '-mdivsi3_libfunc=NAME'
   17724      Set the name of the library function used for 32-bit signed
   17725      division to NAME.  This only affects the name used in the 'call'
   17726      and 'inv:call' division strategies, and the compiler still expects
   17727      the same sets of input/output/clobbered registers as if this option
   17728      were not present.
   17729 
   17730 '-mfixed-range=REGISTER-RANGE'
   17731      Generate code treating the given register range as fixed registers.
   17732      A fixed register is one that the register allocator can not use.
   17733      This is useful when compiling kernel code.  A register range is
   17734      specified as two registers separated by a dash.  Multiple register
   17735      ranges can be specified separated by a comma.
   17736 
   17737 '-mindexed-addressing'
   17738      Enable the use of the indexed addressing mode for
   17739      SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
   17740      implement 32-bit wrap-around semantics for the indexed addressing
   17741      mode.  The architecture allows the implementation of processors
   17742      with 64-bit MMU, which the OS could use to get 32-bit addressing,
   17743      but since no current hardware implementation supports this or any
   17744      other way to make the indexed addressing mode safe to use in the
   17745      32-bit ABI, the default is '-mno-indexed-addressing'.
   17746 
   17747 '-mgettrcost=NUMBER'
   17748      Set the cost assumed for the 'gettr' instruction to NUMBER.  The
   17749      default is 2 if '-mpt-fixed' is in effect, 100 otherwise.
   17750 
   17751 '-mpt-fixed'
   17752      Assume 'pt*' instructions won't trap.  This generally generates
   17753      better-scheduled code, but is unsafe on current hardware.  The
   17754      current architecture definition says that 'ptabs' and 'ptrel' trap
   17755      when the target anded with 3 is 3.  This has the unintentional
   17756      effect of making it unsafe to schedule these instructions before a
   17757      branch, or hoist them out of a loop.  For example,
   17758      '__do_global_ctors', a part of 'libgcc' that runs constructors at
   17759      program startup, calls functions in a list which is delimited by
   17760      -1.  With the '-mpt-fixed' option, the 'ptabs' is done before
   17761      testing against -1.  That means that all the constructors run a bit
   17762      more quickly, but when the loop comes to the end of the list, the
   17763      program crashes because 'ptabs' loads -1 into a target register.
   17764 
   17765      Since this option is unsafe for any hardware implementing the
   17766      current architecture specification, the default is '-mno-pt-fixed'.
   17767      Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed'
   17768      also implies '-mgettrcost=100'; this deters register allocation
   17769      from using target registers for storing ordinary integers.
   17770 
   17771 '-minvalid-symbols'
   17772      Assume symbols might be invalid.  Ordinary function symbols
   17773      generated by the compiler are always valid to load with
   17774      'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with
   17775      assembler and/or linker tricks it is possible to generate symbols
   17776      that cause 'ptabs' or 'ptrel' to trap.  This option is only
   17777      meaningful when '-mno-pt-fixed' is in effect.  It prevents
   17778      cross-basic-block CSE, hoisting and most scheduling of symbol
   17779      loads.  The default is '-mno-invalid-symbols'.
   17780 
   17781 '-mbranch-cost=NUM'
   17782      Assume NUM to be the cost for a branch instruction.  Higher numbers
   17783      make the compiler try to generate more branch-free code if
   17784      possible.  If not specified the value is selected depending on the
   17785      processor type that is being compiled for.
   17786 
   17787 '-mzdcbranch'
   17788 '-mno-zdcbranch'
   17789      Assume (do not assume) that zero displacement conditional branch
   17790      instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
   17791      specified, the compiler will try to prefer zero displacement branch
   17792      code sequences.  This is enabled by default when generating code
   17793      for SH4 and SH4A. It can be explicitly disabled by specifying
   17794      '-mno-zdcbranch'.
   17795 
   17796 '-mcbranchdi'
   17797      Enable the 'cbranchdi4' instruction pattern.
   17798 
   17799 '-mcmpeqdi'
   17800      Emit the 'cmpeqdi_t' instruction pattern even when '-mcbranchdi' is
   17801      in effect.
   17802 
   17803 '-mfused-madd'
   17804 '-mno-fused-madd'
   17805      Generate code that uses (does not use) the floating-point multiply
   17806      and accumulate instructions.  These instructions are generated by
   17807      default if hardware floating point is used.  The machine-dependent
   17808      '-mfused-madd' option is now mapped to the machine-independent
   17809      '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
   17810      '-ffp-contract=off'.
   17811 
   17812 '-mfsca'
   17813 '-mno-fsca'
   17814      Allow or disallow the compiler to emit the 'fsca' instruction for
   17815      sine and cosine approximations.  The option '-mfsca' must be used
   17816      in combination with '-funsafe-math-optimizations'.  It is enabled
   17817      by default when generating code for SH4A. Using '-mno-fsca'
   17818      disables sine and cosine approximations even if
   17819      '-funsafe-math-optimizations' is in effect.
   17820 
   17821 '-mfsrra'
   17822 '-mno-fsrra'
   17823      Allow or disallow the compiler to emit the 'fsrra' instruction for
   17824      reciprocal square root approximations.  The option '-mfsrra' must
   17825      be used in combination with '-funsafe-math-optimizations' and
   17826      '-ffinite-math-only'.  It is enabled by default when generating
   17827      code for SH4A. Using '-mno-fsrra' disables reciprocal square root
   17828      approximations even if '-funsafe-math-optimizations' and
   17829      '-ffinite-math-only' are in effect.
   17830 
   17831 '-mpretend-cmove'
   17832      Prefer zero-displacement conditional branches for conditional move
   17833      instruction patterns.  This can result in faster code on the SH4
   17834      processor.
   17835 
   17836 
   17837 File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
   17838 
   17839 3.17.39 Solaris 2 Options
   17840 -------------------------
   17841 
   17842 These '-m' options are supported on Solaris 2:
   17843 
   17844 '-mimpure-text'
   17845      '-mimpure-text', used in addition to '-shared', tells the compiler
   17846      to not pass '-z text' to the linker when linking a shared object.
   17847      Using this option, you can link position-dependent code into a
   17848      shared object.
   17849 
   17850      '-mimpure-text' suppresses the "relocations remain against
   17851      allocatable but non-writable sections" linker error message.
   17852      However, the necessary relocations trigger copy-on-write, and the
   17853      shared object is not actually shared across processes.  Instead of
   17854      using '-mimpure-text', you should compile all source code with
   17855      '-fpic' or '-fPIC'.
   17856 
   17857  These switches are supported in addition to the above on Solaris 2:
   17858 
   17859 '-pthreads'
   17860      Add support for multithreading using the POSIX threads library.
   17861      This option sets flags for both the preprocessor and linker.  This
   17862      option does not affect the thread safety of object code produced by
   17863      the compiler or that of libraries supplied with it.
   17864 
   17865 '-pthread'
   17866      This is a synonym for '-pthreads'.
   17867 
   17868 
   17869 File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
   17870 
   17871 3.17.40 SPARC Options
   17872 ---------------------
   17873 
   17874 These '-m' options are supported on the SPARC:
   17875 
   17876 '-mno-app-regs'
   17877 '-mapp-regs'
   17878      Specify '-mapp-regs' to generate output using the global registers
   17879      2 through 4, which the SPARC SVR4 ABI reserves for applications.
   17880      Like the global register 1, each global register 2 through 4 is
   17881      then treated as an allocable register that is clobbered by function
   17882      calls.  This is the default.
   17883 
   17884      To be fully SVR4 ABI-compliant at the cost of some performance
   17885      loss, specify '-mno-app-regs'.  You should compile libraries and
   17886      system software with this option.
   17887 
   17888 '-mflat'
   17889 '-mno-flat'
   17890      With '-mflat', the compiler does not generate save/restore
   17891      instructions and uses a "flat" or single register window model.
   17892      This model is compatible with the regular register window model.
   17893      The local registers and the input registers (0-5) are still treated
   17894      as "call-saved" registers and are saved on the stack as needed.
   17895 
   17896      With '-mno-flat' (the default), the compiler generates save/restore
   17897      instructions (except for leaf functions).  This is the normal
   17898      operating mode.
   17899 
   17900 '-mfpu'
   17901 '-mhard-float'
   17902      Generate output containing floating-point instructions.  This is
   17903      the default.
   17904 
   17905 '-mno-fpu'
   17906 '-msoft-float'
   17907      Generate output containing library calls for floating point.
   17908      *Warning:* the requisite libraries are not available for all SPARC
   17909      targets.  Normally the facilities of the machine's usual C compiler
   17910      are used, but this cannot be done directly in cross-compilation.
   17911      You must make your own arrangements to provide suitable library
   17912      functions for cross-compilation.  The embedded targets
   17913      'sparc-*-aout' and 'sparclite-*-*' do provide software
   17914      floating-point support.
   17915 
   17916      '-msoft-float' changes the calling convention in the output file;
   17917      therefore, it is only useful if you compile _all_ of a program with
   17918      this option.  In particular, you need to compile 'libgcc.a', the
   17919      library that comes with GCC, with '-msoft-float' in order for this
   17920      to work.
   17921 
   17922 '-mhard-quad-float'
   17923      Generate output containing quad-word (long double) floating-point
   17924      instructions.
   17925 
   17926 '-msoft-quad-float'
   17927      Generate output containing library calls for quad-word (long
   17928      double) floating-point instructions.  The functions called are
   17929      those specified in the SPARC ABI.  This is the default.
   17930 
   17931      As of this writing, there are no SPARC implementations that have
   17932      hardware support for the quad-word floating-point instructions.
   17933      They all invoke a trap handler for one of these instructions, and
   17934      then the trap handler emulates the effect of the instruction.
   17935      Because of the trap handler overhead, this is much slower than
   17936      calling the ABI library routines.  Thus the '-msoft-quad-float'
   17937      option is the default.
   17938 
   17939 '-mno-unaligned-doubles'
   17940 '-munaligned-doubles'
   17941      Assume that doubles have 8-byte alignment.  This is the default.
   17942 
   17943      With '-munaligned-doubles', GCC assumes that doubles have 8-byte
   17944      alignment only if they are contained in another type, or if they
   17945      have an absolute address.  Otherwise, it assumes they have 4-byte
   17946      alignment.  Specifying this option avoids some rare compatibility
   17947      problems with code generated by other compilers.  It is not the
   17948      default because it results in a performance loss, especially for
   17949      floating-point code.
   17950 
   17951 '-muser-mode'
   17952 '-mno-user-mode'
   17953      Do not generate code that can only run in supervisor mode.  This is
   17954      relevant only for the 'casa' instruction emitted for the LEON3
   17955      processor.  The default is '-mno-user-mode'.
   17956 
   17957 '-mno-faster-structs'
   17958 '-mfaster-structs'
   17959      With '-mfaster-structs', the compiler assumes that structures
   17960      should have 8-byte alignment.  This enables the use of pairs of
   17961      'ldd' and 'std' instructions for copies in structure assignment, in
   17962      place of twice as many 'ld' and 'st' pairs.  However, the use of
   17963      this changed alignment directly violates the SPARC ABI.  Thus, it's
   17964      intended only for use on targets where the developer acknowledges
   17965      that their resulting code is not directly in line with the rules of
   17966      the ABI.
   17967 
   17968 '-mcpu=CPU_TYPE'
   17969      Set the instruction set, register set, and instruction scheduling
   17970      parameters for machine type CPU_TYPE.  Supported values for
   17971      CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
   17972      'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x',
   17973      'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara',
   17974      'niagara2', 'niagara3' and 'niagara4'.
   17975 
   17976      Native Solaris and GNU/Linux toolchains also support the value
   17977      'native', which selects the best architecture option for the host
   17978      processor.  '-mcpu=native' has no effect if GCC does not recognize
   17979      the processor.
   17980 
   17981      Default instruction scheduling parameters are used for values that
   17982      select an architecture and not an implementation.  These are 'v7',
   17983      'v8', 'sparclite', 'sparclet', 'v9'.
   17984 
   17985      Here is a list of each supported architecture and their supported
   17986      implementations.
   17987 
   17988      v7
   17989           cypress
   17990 
   17991      v8
   17992           supersparc, hypersparc, leon, leon3
   17993 
   17994      sparclite
   17995           f930, f934, sparclite86x
   17996 
   17997      sparclet
   17998           tsc701
   17999 
   18000      v9
   18001           ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
   18002 
   18003      By default (unless configured otherwise), GCC generates code for
   18004      the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
   18005      the compiler additionally optimizes it for the Cypress CY7C602
   18006      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
   18007      also appropriate for the older SPARCStation 1, 2, IPX etc.
   18008 
   18009      With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
   18010      architecture.  The only difference from V7 code is that the
   18011      compiler emits the integer multiply and integer divide instructions
   18012      which exist in SPARC-V8 but not in SPARC-V7.  With
   18013      '-mcpu=supersparc', the compiler additionally optimizes it for the
   18014      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
   18015      series.
   18016 
   18017      With '-mcpu=sparclite', GCC generates code for the SPARClite
   18018      variant of the SPARC architecture.  This adds the integer multiply,
   18019      integer divide step and scan ('ffs') instructions which exist in
   18020      SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
   18021      additionally optimizes it for the Fujitsu MB86930 chip, which is
   18022      the original SPARClite, with no FPU.  With '-mcpu=f934', the
   18023      compiler additionally optimizes it for the Fujitsu MB86934 chip,
   18024      which is the more recent SPARClite with FPU.
   18025 
   18026      With '-mcpu=sparclet', GCC generates code for the SPARClet variant
   18027      of the SPARC architecture.  This adds the integer multiply,
   18028      multiply/accumulate, integer divide step and scan ('ffs')
   18029      instructions which exist in SPARClet but not in SPARC-V7.  With
   18030      '-mcpu=tsc701', the compiler additionally optimizes it for the
   18031      TEMIC SPARClet chip.
   18032 
   18033      With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
   18034      architecture.  This adds 64-bit integer and floating-point move
   18035      instructions, 3 additional floating-point condition code registers
   18036      and conditional move instructions.  With '-mcpu=ultrasparc', the
   18037      compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
   18038      chips.  With '-mcpu=ultrasparc3', the compiler additionally
   18039      optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
   18040      chips.  With '-mcpu=niagara', the compiler additionally optimizes
   18041      it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
   18042      compiler additionally optimizes it for Sun UltraSPARC T2 chips.
   18043      With '-mcpu=niagara3', the compiler additionally optimizes it for
   18044      Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
   18045      additionally optimizes it for Sun UltraSPARC T4 chips.
   18046 
   18047 '-mtune=CPU_TYPE'
   18048      Set the instruction scheduling parameters for machine type
   18049      CPU_TYPE, but do not set the instruction set or register set that
   18050      the option '-mcpu=CPU_TYPE' does.
   18051 
   18052      The same values for '-mcpu=CPU_TYPE' can be used for
   18053      '-mtune=CPU_TYPE', but the only useful values are those that select
   18054      a particular CPU implementation.  Those are 'cypress',
   18055      'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934',
   18056      'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara',
   18057      'niagara2', 'niagara3' and 'niagara4'.  With native Solaris and
   18058      GNU/Linux toolchains, 'native' can also be used.
   18059 
   18060 '-mv8plus'
   18061 '-mno-v8plus'
   18062      With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
   18063      difference from the V8 ABI is that the global and out registers are
   18064      considered 64 bits wide.  This is enabled by default on Solaris in
   18065      32-bit mode for all SPARC-V9 processors.
   18066 
   18067 '-mvis'
   18068 '-mno-vis'
   18069      With '-mvis', GCC generates code that takes advantage of the
   18070      UltraSPARC Visual Instruction Set extensions.  The default is
   18071      '-mno-vis'.
   18072 
   18073 '-mvis2'
   18074 '-mno-vis2'
   18075      With '-mvis2', GCC generates code that takes advantage of version
   18076      2.0 of the UltraSPARC Visual Instruction Set extensions.  The
   18077      default is '-mvis2' when targeting a cpu that supports such
   18078      instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
   18079      also sets '-mvis'.
   18080 
   18081 '-mvis3'
   18082 '-mno-vis3'
   18083      With '-mvis3', GCC generates code that takes advantage of version
   18084      3.0 of the UltraSPARC Visual Instruction Set extensions.  The
   18085      default is '-mvis3' when targeting a cpu that supports such
   18086      instructions, such as niagara-3 and later.  Setting '-mvis3' also
   18087      sets '-mvis2' and '-mvis'.
   18088 
   18089 '-mcbcond'
   18090 '-mno-cbcond'
   18091      With '-mcbcond', GCC generates code that takes advantage of
   18092      compare-and-branch instructions, as defined in the Sparc
   18093      Architecture 2011.  The default is '-mcbcond' when targeting a cpu
   18094      that supports such instructions, such as niagara-4 and later.
   18095 
   18096 '-mpopc'
   18097 '-mno-popc'
   18098      With '-mpopc', GCC generates code that takes advantage of the
   18099      UltraSPARC population count instruction.  The default is '-mpopc'
   18100      when targeting a cpu that supports such instructions, such as
   18101      Niagara-2 and later.
   18102 
   18103 '-mfmaf'
   18104 '-mno-fmaf'
   18105      With '-mfmaf', GCC generates code that takes advantage of the
   18106      UltraSPARC Fused Multiply-Add Floating-point extensions.  The
   18107      default is '-mfmaf' when targeting a cpu that supports such
   18108      instructions, such as Niagara-3 and later.
   18109 
   18110 '-mfix-at697f'
   18111      Enable the documented workaround for the single erratum of the
   18112      Atmel AT697F processor (which corresponds to erratum #13 of the
   18113      AT697E processor).
   18114 
   18115 '-mfix-ut699'
   18116      Enable the documented workarounds for the floating-point errata and
   18117      the data cache nullify errata of the UT699 processor.
   18118 
   18119  These '-m' options are supported in addition to the above on SPARC-V9
   18120 processors in 64-bit environments:
   18121 
   18122 '-m32'
   18123 '-m64'
   18124      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   18125      environment sets int, long and pointer to 32 bits.  The 64-bit
   18126      environment sets int to 32 bits and long and pointer to 64 bits.
   18127 
   18128 '-mcmodel=WHICH'
   18129      Set the code model to one of
   18130 
   18131      'medlow'
   18132           The Medium/Low code model: 64-bit addresses, programs must be
   18133           linked in the low 32 bits of memory.  Programs can be
   18134           statically or dynamically linked.
   18135 
   18136      'medmid'
   18137           The Medium/Middle code model: 64-bit addresses, programs must
   18138           be linked in the low 44 bits of memory, the text and data
   18139           segments must be less than 2GB in size and the data segment
   18140           must be located within 2GB of the text segment.
   18141 
   18142      'medany'
   18143           The Medium/Anywhere code model: 64-bit addresses, programs may
   18144           be linked anywhere in memory, the text and data segments must
   18145           be less than 2GB in size and the data segment must be located
   18146           within 2GB of the text segment.
   18147 
   18148      'embmedany'
   18149           The Medium/Anywhere code model for embedded systems: 64-bit
   18150           addresses, the text and data segments must be less than 2GB in
   18151           size, both starting anywhere in memory (determined at link
   18152           time).  The global register %g4 points to the base of the data
   18153           segment.  Programs are statically linked and PIC is not
   18154           supported.
   18155 
   18156 '-mmemory-model=MEM-MODEL'
   18157      Set the memory model in force on the processor to one of
   18158 
   18159      'default'
   18160           The default memory model for the processor and operating
   18161           system.
   18162 
   18163      'rmo'
   18164           Relaxed Memory Order
   18165 
   18166      'pso'
   18167           Partial Store Order
   18168 
   18169      'tso'
   18170           Total Store Order
   18171 
   18172      'sc'
   18173           Sequential Consistency
   18174 
   18175      These memory models are formally defined in Appendix D of the Sparc
   18176      V9 architecture manual, as set in the processor's 'PSTATE.MM'
   18177      field.
   18178 
   18179 '-mstack-bias'
   18180 '-mno-stack-bias'
   18181      With '-mstack-bias', GCC assumes that the stack pointer, and frame
   18182      pointer if present, are offset by -2047 which must be added back
   18183      when making stack frame references.  This is the default in 64-bit
   18184      mode.  Otherwise, assume no such offset is present.
   18185 
   18186 
   18187 File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
   18188 
   18189 3.17.41 SPU Options
   18190 -------------------
   18191 
   18192 These '-m' options are supported on the SPU:
   18193 
   18194 '-mwarn-reloc'
   18195 '-merror-reloc'
   18196 
   18197      The loader for SPU does not handle dynamic relocations.  By
   18198      default, GCC gives an error when it generates code that requires a
   18199      dynamic relocation.  '-mno-error-reloc' disables the error,
   18200      '-mwarn-reloc' generates a warning instead.
   18201 
   18202 '-msafe-dma'
   18203 '-munsafe-dma'
   18204 
   18205      Instructions that initiate or test completion of DMA must not be
   18206      reordered with respect to loads and stores of the memory that is
   18207      being accessed.  With '-munsafe-dma' you must use the 'volatile'
   18208      keyword to protect memory accesses, but that can lead to
   18209      inefficient code in places where the memory is known to not change.
   18210      Rather than mark the memory as volatile, you can use '-msafe-dma'
   18211      to tell the compiler to treat the DMA instructions as potentially
   18212      affecting all memory.
   18213 
   18214 '-mbranch-hints'
   18215 
   18216      By default, GCC generates a branch hint instruction to avoid
   18217      pipeline stalls for always-taken or probably-taken branches.  A
   18218      hint is not generated closer than 8 instructions away from its
   18219      branch.  There is little reason to disable them, except for
   18220      debugging purposes, or to make an object a little bit smaller.
   18221 
   18222 '-msmall-mem'
   18223 '-mlarge-mem'
   18224 
   18225      By default, GCC generates code assuming that addresses are never
   18226      larger than 18 bits.  With '-mlarge-mem' code is generated that
   18227      assumes a full 32-bit address.
   18228 
   18229 '-mstdmain'
   18230 
   18231      By default, GCC links against startup code that assumes the
   18232      SPU-style main function interface (which has an unconventional
   18233      parameter list).  With '-mstdmain', GCC links your program against
   18234      startup code that assumes a C99-style interface to 'main',
   18235      including a local copy of 'argv' strings.
   18236 
   18237 '-mfixed-range=REGISTER-RANGE'
   18238      Generate code treating the given register range as fixed registers.
   18239      A fixed register is one that the register allocator cannot use.
   18240      This is useful when compiling kernel code.  A register range is
   18241      specified as two registers separated by a dash.  Multiple register
   18242      ranges can be specified separated by a comma.
   18243 
   18244 '-mea32'
   18245 '-mea64'
   18246      Compile code assuming that pointers to the PPU address space
   18247      accessed via the '__ea' named address space qualifier are either 32
   18248      or 64 bits wide.  The default is 32 bits.  As this is an
   18249      ABI-changing option, all object code in an executable must be
   18250      compiled with the same setting.
   18251 
   18252 '-maddress-space-conversion'
   18253 '-mno-address-space-conversion'
   18254      Allow/disallow treating the '__ea' address space as superset of the
   18255      generic address space.  This enables explicit type casts between
   18256      '__ea' and generic pointer as well as implicit conversions of
   18257      generic pointers to '__ea' pointers.  The default is to allow
   18258      address space pointer conversions.
   18259 
   18260 '-mcache-size=CACHE-SIZE'
   18261      This option controls the version of libgcc that the compiler links
   18262      to an executable and selects a software-managed cache for accessing
   18263      variables in the '__ea' address space with a particular cache size.
   18264      Possible options for CACHE-SIZE are '8', '16', '32', '64' and
   18265      '128'.  The default cache size is 64KB.
   18266 
   18267 '-matomic-updates'
   18268 '-mno-atomic-updates'
   18269      This option controls the version of libgcc that the compiler links
   18270      to an executable and selects whether atomic updates to the
   18271      software-managed cache of PPU-side variables are used.  If you use
   18272      atomic updates, changes to a PPU variable from SPU code using the
   18273      '__ea' named address space qualifier do not interfere with changes
   18274      to other PPU variables residing in the same cache line from PPU
   18275      code.  If you do not use atomic updates, such interference may
   18276      occur; however, writing back cache lines is more efficient.  The
   18277      default behavior is to use atomic updates.
   18278 
   18279 '-mdual-nops'
   18280 '-mdual-nops=N'
   18281      By default, GCC inserts nops to increase dual issue when it expects
   18282      it to increase performance.  N can be a value from 0 to 10.  A
   18283      smaller N inserts fewer nops.  10 is the default, 0 is the same as
   18284      '-mno-dual-nops'.  Disabled with '-Os'.
   18285 
   18286 '-mhint-max-nops=N'
   18287      Maximum number of nops to insert for a branch hint.  A branch hint
   18288      must be at least 8 instructions away from the branch it is
   18289      affecting.  GCC inserts up to N nops to enforce this, otherwise it
   18290      does not generate the branch hint.
   18291 
   18292 '-mhint-max-distance=N'
   18293      The encoding of the branch hint instruction limits the hint to be
   18294      within 256 instructions of the branch it is affecting.  By default,
   18295      GCC makes sure it is within 125.
   18296 
   18297 '-msafe-hints'
   18298      Work around a hardware bug that causes the SPU to stall
   18299      indefinitely.  By default, GCC inserts the 'hbrp' instruction to
   18300      make sure this stall won't happen.
   18301 
   18302 
   18303 File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
   18304 
   18305 3.17.42 Options for System V
   18306 ----------------------------
   18307 
   18308 These additional options are available on System V Release 4 for
   18309 compatibility with other compilers on those systems:
   18310 
   18311 '-G'
   18312      Create a shared object.  It is recommended that '-symbolic' or
   18313      '-shared' be used instead.
   18314 
   18315 '-Qy'
   18316      Identify the versions of each tool used by the compiler, in a
   18317      '.ident' assembler directive in the output.
   18318 
   18319 '-Qn'
   18320      Refrain from adding '.ident' directives to the output file (this is
   18321      the default).
   18322 
   18323 '-YP,DIRS'
   18324      Search the directories DIRS, and no others, for libraries specified
   18325      with '-l'.
   18326 
   18327 '-Ym,DIR'
   18328      Look in the directory DIR to find the M4 preprocessor.  The
   18329      assembler uses this option.
   18330 
   18331 
   18332 File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
   18333 
   18334 3.17.43 TILE-Gx Options
   18335 -----------------------
   18336 
   18337 These '-m' options are supported on the TILE-Gx:
   18338 
   18339 '-mcmodel=small'
   18340      Generate code for the small model.  The distance for direct calls
   18341      is limited to 500M in either direction.  PC-relative addresses are
   18342      32 bits.  Absolute addresses support the full address range.
   18343 
   18344 '-mcmodel=large'
   18345      Generate code for the large model.  There is no limitation on call
   18346      distance, pc-relative addresses, or absolute addresses.
   18347 
   18348 '-mcpu=NAME'
   18349      Selects the type of CPU to be targeted.  Currently the only
   18350      supported type is 'tilegx'.
   18351 
   18352 '-m32'
   18353 '-m64'
   18354      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   18355      environment sets int, long, and pointer to 32 bits.  The 64-bit
   18356      environment sets int to 32 bits and long and pointer to 64 bits.
   18357 
   18358 
   18359 File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
   18360 
   18361 3.17.44 TILEPro Options
   18362 -----------------------
   18363 
   18364 These '-m' options are supported on the TILEPro:
   18365 
   18366 '-mcpu=NAME'
   18367      Selects the type of CPU to be targeted.  Currently the only
   18368      supported type is 'tilepro'.
   18369 
   18370 '-m32'
   18371      Generate code for a 32-bit environment, which sets int, long, and
   18372      pointer to 32 bits.  This is the only supported behavior so the
   18373      flag is essentially ignored.
   18374 
   18375 
   18376 File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
   18377 
   18378 3.17.45 V850 Options
   18379 --------------------
   18380 
   18381 These '-m' options are defined for V850 implementations:
   18382 
   18383 '-mlong-calls'
   18384 '-mno-long-calls'
   18385      Treat all calls as being far away (near).  If calls are assumed to
   18386      be far away, the compiler always loads the function's address into
   18387      a register, and calls indirect through the pointer.
   18388 
   18389 '-mno-ep'
   18390 '-mep'
   18391      Do not optimize (do optimize) basic blocks that use the same index
   18392      pointer 4 or more times to copy pointer into the 'ep' register, and
   18393      use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
   18394      on by default if you optimize.
   18395 
   18396 '-mno-prolog-function'
   18397 '-mprolog-function'
   18398      Do not use (do use) external functions to save and restore
   18399      registers at the prologue and epilogue of a function.  The external
   18400      functions are slower, but use less code space if more than one
   18401      function saves the same number of registers.  The
   18402      '-mprolog-function' option is on by default if you optimize.
   18403 
   18404 '-mspace'
   18405      Try to make the code as small as possible.  At present, this just
   18406      turns on the '-mep' and '-mprolog-function' options.
   18407 
   18408 '-mtda=N'
   18409      Put static or global variables whose size is N bytes or less into
   18410      the tiny data area that register 'ep' points to.  The tiny data
   18411      area can hold up to 256 bytes in total (128 bytes for byte
   18412      references).
   18413 
   18414 '-msda=N'
   18415      Put static or global variables whose size is N bytes or less into
   18416      the small data area that register 'gp' points to.  The small data
   18417      area can hold up to 64 kilobytes.
   18418 
   18419 '-mzda=N'
   18420      Put static or global variables whose size is N bytes or less into
   18421      the first 32 kilobytes of memory.
   18422 
   18423 '-mv850'
   18424      Specify that the target processor is the V850.
   18425 
   18426 '-mv850e3v5'
   18427      Specify that the target processor is the V850E3V5.  The
   18428      preprocessor constant '__v850e3v5__' is defined if this option is
   18429      used.
   18430 
   18431 '-mv850e2v4'
   18432      Specify that the target processor is the V850E3V5.  This is an
   18433      alias for the '-mv850e3v5' option.
   18434 
   18435 '-mv850e2v3'
   18436      Specify that the target processor is the V850E2V3.  The
   18437      preprocessor constant '__v850e2v3__' is defined if this option is
   18438      used.
   18439 
   18440 '-mv850e2'
   18441      Specify that the target processor is the V850E2.  The preprocessor
   18442      constant '__v850e2__' is defined if this option is used.
   18443 
   18444 '-mv850e1'
   18445      Specify that the target processor is the V850E1.  The preprocessor
   18446      constants '__v850e1__' and '__v850e__' are defined if this option
   18447      is used.
   18448 
   18449 '-mv850es'
   18450      Specify that the target processor is the V850ES. This is an alias
   18451      for the '-mv850e1' option.
   18452 
   18453 '-mv850e'
   18454      Specify that the target processor is the V850E.  The preprocessor
   18455      constant '__v850e__' is defined if this option is used.
   18456 
   18457      If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
   18458      '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
   18459      processor is chosen and the relevant '__v850*__' preprocessor
   18460      constant is defined.
   18461 
   18462      The preprocessor constants '__v850' and '__v851__' are always
   18463      defined, regardless of which processor variant is the target.
   18464 
   18465 '-mdisable-callt'
   18466 '-mno-disable-callt'
   18467      This option suppresses generation of the 'CALLT' instruction for
   18468      the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
   18469      v850 architecture.
   18470 
   18471      This option is enabled by default when the RH850 ABI is in use (see
   18472      '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
   18473      If 'CALLT' instructions are being generated then the C preprocessor
   18474      symbol '__V850_CALLT__' will be defined.
   18475 
   18476 '-mrelax'
   18477 '-mno-relax'
   18478      Pass on (or do not pass on) the '-mrelax' command line option to
   18479      the assembler.
   18480 
   18481 '-mlong-jumps'
   18482 '-mno-long-jumps'
   18483      Disable (or re-enable) the generation of PC-relative jump
   18484      instructions.
   18485 
   18486 '-msoft-float'
   18487 '-mhard-float'
   18488      Disable (or re-enable) the generation of hardware floating point
   18489      instructions.  This option is only significant when the target
   18490      architecture is 'V850E2V3' or higher.  If hardware floating point
   18491      instructions are being generated then the C preprocessor symbol
   18492      '__FPU_OK__' will be defined, otherwise the symbol '__NO_FPU__'
   18493      will be defined.
   18494 
   18495 '-mloop'
   18496      Enables the use of the e3v5 LOOP instruction.  The use of this
   18497      instruction is not enabled by default when the e3v5 architecture is
   18498      selected because its use is still experimental.
   18499 
   18500 '-mrh850-abi'
   18501 '-mghs'
   18502      Enables support for the RH850 version of the V850 ABI. This is the
   18503      default.  With this version of the ABI the following rules apply:
   18504 
   18505         * Integer sized structures and unions are returned via a memory
   18506           pointer rather than a register.
   18507 
   18508         * Large structures and unions (more than 8 bytes in size) are
   18509           passed by value.
   18510 
   18511         * Functions are aligned to 16-bit boundaries.
   18512 
   18513         * The '-m8byte-align' command line option is supported.
   18514 
   18515         * The '-mdisable-callt' command line option is enabled by
   18516           default.  The '-mno-disable-callt' command line option is not
   18517           supported.
   18518 
   18519      When this version of the ABI is enabled the C preprocessor symbol
   18520      '__V850_RH850_ABI__' is defined.
   18521 
   18522 '-mgcc-abi'
   18523      Enables support for the old GCC version of the V850 ABI. With this
   18524      version of the ABI the following rules apply:
   18525 
   18526         * Integer sized structures and unions are returned in register
   18527           'r10'.
   18528 
   18529         * Large structures and unions (more than 8 bytes in size) are
   18530           passed by reference.
   18531 
   18532         * Functions are aligned to 32-bit boundaries, unless optimizing
   18533           for size.
   18534 
   18535         * The '-m8byte-align' command line option is not supported.
   18536 
   18537         * The '-mdisable-callt' command line option is supported but not
   18538           enabled by default.
   18539 
   18540      When this version of the ABI is enabled the C preprocessor symbol
   18541      '__V850_GCC_ABI__' is defined.
   18542 
   18543 '-m8byte-align'
   18544 '-mno-8byte-align'
   18545      Enables support for 'doubles' and 'long long' types to be aligned
   18546      on 8-byte boundaries.  The default is to restrict the alignment of
   18547      all objects to at most 4-bytes.  When '-m8byte-align' is in effect
   18548      the C preprocessor symbol '__V850_8BYTE_ALIGN__' will be defined.
   18549 
   18550 '-mbig-switch'
   18551      Generate code suitable for big switch tables.  Use this option only
   18552      if the assembler/linker complain about out of range branches within
   18553      a switch table.
   18554 
   18555 '-mapp-regs'
   18556      This option causes r2 and r5 to be used in the code generated by
   18557      the compiler.  This setting is the default.
   18558 
   18559 '-mno-app-regs'
   18560      This option causes r2 and r5 to be treated as fixed registers.
   18561 
   18562 
   18563 File: gcc.info,  Node: VAX Options,  Next: VMS Options,  Prev: V850 Options,  Up: Submodel Options
   18564 
   18565 3.17.46 VAX Options
   18566 -------------------
   18567 
   18568 These '-m' options are defined for the VAX:
   18569 
   18570 '-munix'
   18571      Do not output certain jump instructions ('aobleq' and so on) that
   18572      the Unix assembler for the VAX cannot handle across long ranges.
   18573 
   18574 '-mgnu'
   18575      Do output those jump instructions, on the assumption that the GNU
   18576      assembler is being used.
   18577 
   18578 '-mg'
   18579      Output code for G-format floating-point numbers instead of
   18580      D-format.
   18581 
   18582 
   18583 File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: VAX Options,  Up: Submodel Options
   18584 
   18585 3.17.47 VMS Options
   18586 -------------------
   18587 
   18588 These '-m' options are defined for the VMS implementations:
   18589 
   18590 '-mvms-return-codes'
   18591      Return VMS condition codes from 'main'.  The default is to return
   18592      POSIX-style condition (e.g. error) codes.
   18593 
   18594 '-mdebug-main=PREFIX'
   18595      Flag the first routine whose name starts with PREFIX as the main
   18596      routine for the debugger.
   18597 
   18598 '-mmalloc64'
   18599      Default to 64-bit memory allocation routines.
   18600 
   18601 '-mpointer-size=SIZE'
   18602      Set the default size of pointers.  Possible options for SIZE are
   18603      '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
   18604      pointers, and 'no' for supporting only 32 bit pointers.  The later
   18605      option disables 'pragma pointer_size'.
   18606 
   18607 
   18608 File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VMS Options,  Up: Submodel Options
   18609 
   18610 3.17.48 VxWorks Options
   18611 -----------------------
   18612 
   18613 The options in this section are defined for all VxWorks targets.
   18614 Options specific to the target hardware are listed with the other
   18615 options for that target.
   18616 
   18617 '-mrtp'
   18618      GCC can generate code for both VxWorks kernels and real time
   18619      processes (RTPs).  This option switches from the former to the
   18620      latter.  It also defines the preprocessor macro '__RTP__'.
   18621 
   18622 '-non-static'
   18623      Link an RTP executable against shared libraries rather than static
   18624      libraries.  The options '-static' and '-shared' can also be used
   18625      for RTPs (*note Link Options::); '-static' is the default.
   18626 
   18627 '-Bstatic'
   18628 '-Bdynamic'
   18629      These options are passed down to the linker.  They are defined for
   18630      compatibility with Diab.
   18631 
   18632 '-Xbind-lazy'
   18633      Enable lazy binding of function calls.  This option is equivalent
   18634      to '-Wl,-z,now' and is defined for compatibility with Diab.
   18635 
   18636 '-Xbind-now'
   18637      Disable lazy binding of function calls.  This option is the default
   18638      and is defined for compatibility with Diab.
   18639 
   18640 
   18641 File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
   18642 
   18643 3.17.49 x86-64 Options
   18644 ----------------------
   18645 
   18646 These are listed under *Note i386 and x86-64 Options::.
   18647 
   18648 
   18649 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
   18650 
   18651 3.17.50 Xstormy16 Options
   18652 -------------------------
   18653 
   18654 These options are defined for Xstormy16:
   18655 
   18656 '-msim'
   18657      Choose startup files and linker script suitable for the simulator.
   18658 
   18659 
   18660 File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
   18661 
   18662 3.17.51 Xtensa Options
   18663 ----------------------
   18664 
   18665 These options are supported for Xtensa targets:
   18666 
   18667 '-mconst16'
   18668 '-mno-const16'
   18669      Enable or disable use of 'CONST16' instructions for loading
   18670      constant values.  The 'CONST16' instruction is currently not a
   18671      standard option from Tensilica.  When enabled, 'CONST16'
   18672      instructions are always used in place of the standard 'L32R'
   18673      instructions.  The use of 'CONST16' is enabled by default only if
   18674      the 'L32R' instruction is not available.
   18675 
   18676 '-mfused-madd'
   18677 '-mno-fused-madd'
   18678      Enable or disable use of fused multiply/add and multiply/subtract
   18679      instructions in the floating-point option.  This has no effect if
   18680      the floating-point option is not also enabled.  Disabling fused
   18681      multiply/add and multiply/subtract instructions forces the compiler
   18682      to use separate instructions for the multiply and add/subtract
   18683      operations.  This may be desirable in some cases where strict IEEE
   18684      754-compliant results are required: the fused multiply add/subtract
   18685      instructions do not round the intermediate result, thereby
   18686      producing results with _more_ bits of precision than specified by
   18687      the IEEE standard.  Disabling fused multiply add/subtract
   18688      instructions also ensures that the program output is not sensitive
   18689      to the compiler's ability to combine multiply and add/subtract
   18690      operations.
   18691 
   18692 '-mserialize-volatile'
   18693 '-mno-serialize-volatile'
   18694      When this option is enabled, GCC inserts 'MEMW' instructions before
   18695      'volatile' memory references to guarantee sequential consistency.
   18696      The default is '-mserialize-volatile'.  Use
   18697      '-mno-serialize-volatile' to omit the 'MEMW' instructions.
   18698 
   18699 '-mforce-no-pic'
   18700      For targets, like GNU/Linux, where all user-mode Xtensa code must
   18701      be position-independent code (PIC), this option disables PIC for
   18702      compiling kernel code.
   18703 
   18704 '-mtext-section-literals'
   18705 '-mno-text-section-literals'
   18706      Control the treatment of literal pools.  The default is
   18707      '-mno-text-section-literals', which places literals in a separate
   18708      section in the output file.  This allows the literal pool to be
   18709      placed in a data RAM/ROM, and it also allows the linker to combine
   18710      literal pools from separate object files to remove redundant
   18711      literals and improve code size.  With '-mtext-section-literals',
   18712      the literals are interspersed in the text section in order to keep
   18713      them as close as possible to their references.  This may be
   18714      necessary for large assembly files.
   18715 
   18716 '-mtarget-align'
   18717 '-mno-target-align'
   18718      When this option is enabled, GCC instructs the assembler to
   18719      automatically align instructions to reduce branch penalties at the
   18720      expense of some code density.  The assembler attempts to widen
   18721      density instructions to align branch targets and the instructions
   18722      following call instructions.  If there are not enough preceding
   18723      safe density instructions to align a target, no widening is
   18724      performed.  The default is '-mtarget-align'.  These options do not
   18725      affect the treatment of auto-aligned instructions like 'LOOP',
   18726      which the assembler always aligns, either by widening density
   18727      instructions or by inserting NOP instructions.
   18728 
   18729 '-mlongcalls'
   18730 '-mno-longcalls'
   18731      When this option is enabled, GCC instructs the assembler to
   18732      translate direct calls to indirect calls unless it can determine
   18733      that the target of a direct call is in the range allowed by the
   18734      call instruction.  This translation typically occurs for calls to
   18735      functions in other source files.  Specifically, the assembler
   18736      translates a direct 'CALL' instruction into an 'L32R' followed by a
   18737      'CALLX' instruction.  The default is '-mno-longcalls'.  This option
   18738      should be used in programs where the call target can potentially be
   18739      out of range.  This option is implemented in the assembler, not the
   18740      compiler, so the assembly code generated by GCC still shows direct
   18741      call instructions--look at the disassembled object code to see the
   18742      actual instructions.  Note that the assembler uses an indirect call
   18743      for every cross-file call, not just those that really are out of
   18744      range.
   18745 
   18746 
   18747 File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
   18748 
   18749 3.17.52 zSeries Options
   18750 -----------------------
   18751 
   18752 These are listed under *Note S/390 and zSeries Options::.
   18753 
   18754 
   18755 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
   18756 
   18757 3.18 Options for Code Generation Conventions
   18758 ============================================
   18759 
   18760 These machine-independent options control the interface conventions used
   18761 in code generation.
   18762 
   18763  Most of them have both positive and negative forms; the negative form
   18764 of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
   18765 listed--the one that is not the default.  You can figure out the other
   18766 form by either removing 'no-' or adding it.
   18767 
   18768 '-fbounds-check'
   18769      For front ends that support it, generate additional code to check
   18770      that indices used to access arrays are within the declared range.
   18771      This is currently only supported by the Java and Fortran front
   18772      ends, where this option defaults to true and false respectively.
   18773 
   18774 '-fstack-reuse=REUSE-LEVEL'
   18775      This option controls stack space reuse for user declared local/auto
   18776      variables and compiler generated temporaries.  REUSE_LEVEL can be
   18777      'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
   18778      local variables and temporaries, 'named_vars' enables the reuse
   18779      only for user defined local variables with names, and 'none'
   18780      disables stack reuse completely.  The default value is 'all'.  The
   18781      option is needed when the program extends the lifetime of a scoped
   18782      local variable or a compiler generated temporary beyond the end
   18783      point defined by the language.  When a lifetime of a variable ends,
   18784      and if the variable lives in memory, the optimizing compiler has
   18785      the freedom to reuse its stack space with other temporaries or
   18786      scoped local variables whose live range does not overlap with it.
   18787      Legacy code extending local lifetime will likely to break with the
   18788      stack reuse optimization.
   18789 
   18790      For example,
   18791 
   18792              int *p;
   18793              {
   18794                int local1;
   18795 
   18796                p = &local1;
   18797                local1 = 10;
   18798                ....
   18799              }
   18800              {
   18801                 int local2;
   18802                 local2 = 20;
   18803                 ...
   18804              }
   18805 
   18806              if (*p == 10)  // out of scope use of local1
   18807                {
   18808 
   18809                }
   18810 
   18811      Another example:
   18812 
   18813              struct A
   18814              {
   18815                  A(int k) : i(k), j(k) { }
   18816                  int i;
   18817                  int j;
   18818              };
   18819 
   18820              A *ap;
   18821 
   18822              void foo(const A& ar)
   18823              {
   18824                 ap = &ar;
   18825              }
   18826 
   18827              void bar()
   18828              {
   18829                 foo(A(10)); // temp object's lifetime ends when foo returns
   18830 
   18831                 {
   18832                   A a(20);
   18833                   ....
   18834                 }
   18835                 ap->i+= 10;  // ap references out of scope temp whose space
   18836                              // is reused with a. What is the value of ap->i?
   18837              }
   18838 
   18839 
   18840      The lifetime of a compiler generated temporary is well defined by
   18841      the C++ standard.  When a lifetime of a temporary ends, and if the
   18842      temporary lives in memory, the optimizing compiler has the freedom
   18843      to reuse its stack space with other temporaries or scoped local
   18844      variables whose live range does not overlap with it.  However some
   18845      of the legacy code relies on the behavior of older compilers in
   18846      which temporaries' stack space is not reused, the aggressive stack
   18847      reuse can lead to runtime errors.  This option is used to control
   18848      the temporary stack reuse optimization.
   18849 
   18850 '-ftrapv'
   18851      This option generates traps for signed overflow on addition,
   18852      subtraction, multiplication operations.
   18853 
   18854 '-fwrapv'
   18855      This option instructs the compiler to assume that signed arithmetic
   18856      overflow of addition, subtraction and multiplication wraps around
   18857      using twos-complement representation.  This flag enables some
   18858      optimizations and disables others.  This option is enabled by
   18859      default for the Java front end, as required by the Java language
   18860      specification.
   18861 
   18862 '-fexceptions'
   18863      Enable exception handling.  Generates extra code needed to
   18864      propagate exceptions.  For some targets, this implies GCC generates
   18865      frame unwind information for all functions, which can produce
   18866      significant data size overhead, although it does not affect
   18867      execution.  If you do not specify this option, GCC enables it by
   18868      default for languages like C++ that normally require exception
   18869      handling, and disables it for languages like C that do not normally
   18870      require it.  However, you may need to enable this option when
   18871      compiling C code that needs to interoperate properly with exception
   18872      handlers written in C++.  You may also wish to disable this option
   18873      if you are compiling older C++ programs that don't use exception
   18874      handling.
   18875 
   18876 '-fnon-call-exceptions'
   18877      Generate code that allows trapping instructions to throw
   18878      exceptions.  Note that this requires platform-specific runtime
   18879      support that does not exist everywhere.  Moreover, it only allows
   18880      _trapping_ instructions to throw exceptions, i.e. memory references
   18881      or floating-point instructions.  It does not allow exceptions to be
   18882      thrown from arbitrary signal handlers such as 'SIGALRM'.
   18883 
   18884 '-fdelete-dead-exceptions'
   18885      Consider that instructions that may throw exceptions but don't
   18886      otherwise contribute to the execution of the program can be
   18887      optimized away.  This option is enabled by default for the Ada
   18888      front end, as permitted by the Ada language specification.
   18889      Optimization passes that cause dead exceptions to be removed are
   18890      enabled independently at different optimization levels.
   18891 
   18892 '-funwind-tables'
   18893      Similar to '-fexceptions', except that it just generates any needed
   18894      static data, but does not affect the generated code in any other
   18895      way.  You normally do not need to enable this option; instead, a
   18896      language processor that needs this handling enables it on your
   18897      behalf.
   18898 
   18899 '-fasynchronous-unwind-tables'
   18900      Generate unwind table in DWARF 2 format, if supported by target
   18901      machine.  The table is exact at each instruction boundary, so it
   18902      can be used for stack unwinding from asynchronous events (such as
   18903      debugger or garbage collector).
   18904 
   18905 '-fpcc-struct-return'
   18906      Return "short" 'struct' and 'union' values in memory like longer
   18907      ones, rather than in registers.  This convention is less efficient,
   18908      but it has the advantage of allowing intercallability between
   18909      GCC-compiled files and files compiled with other compilers,
   18910      particularly the Portable C Compiler (pcc).
   18911 
   18912      The precise convention for returning structures in memory depends
   18913      on the target configuration macros.
   18914 
   18915      Short structures and unions are those whose size and alignment
   18916      match that of some integer type.
   18917 
   18918      *Warning:* code compiled with the '-fpcc-struct-return' switch is
   18919      not binary compatible with code compiled with the
   18920      '-freg-struct-return' switch.  Use it to conform to a non-default
   18921      application binary interface.
   18922 
   18923 '-freg-struct-return'
   18924      Return 'struct' and 'union' values in registers when possible.
   18925      This is more efficient for small structures than
   18926      '-fpcc-struct-return'.
   18927 
   18928      If you specify neither '-fpcc-struct-return' nor
   18929      '-freg-struct-return', GCC defaults to whichever convention is
   18930      standard for the target.  If there is no standard convention, GCC
   18931      defaults to '-fpcc-struct-return', except on targets where GCC is
   18932      the principal compiler.  In those cases, we can choose the
   18933      standard, and we chose the more efficient register return
   18934      alternative.
   18935 
   18936      *Warning:* code compiled with the '-freg-struct-return' switch is
   18937      not binary compatible with code compiled with the
   18938      '-fpcc-struct-return' switch.  Use it to conform to a non-default
   18939      application binary interface.
   18940 
   18941 '-fshort-enums'
   18942      Allocate to an 'enum' type only as many bytes as it needs for the
   18943      declared range of possible values.  Specifically, the 'enum' type
   18944      is equivalent to the smallest integer type that has enough room.
   18945 
   18946      *Warning:* the '-fshort-enums' switch causes GCC to generate code
   18947      that is not binary compatible with code generated without that
   18948      switch.  Use it to conform to a non-default application binary
   18949      interface.
   18950 
   18951 '-fshort-double'
   18952      Use the same size for 'double' as for 'float'.
   18953 
   18954      *Warning:* the '-fshort-double' switch causes GCC to generate code
   18955      that is not binary compatible with code generated without that
   18956      switch.  Use it to conform to a non-default application binary
   18957      interface.
   18958 
   18959 '-fshort-wchar'
   18960      Override the underlying type for 'wchar_t' to be 'short unsigned
   18961      int' instead of the default for the target.  This option is useful
   18962      for building programs to run under WINE.
   18963 
   18964      *Warning:* the '-fshort-wchar' switch causes GCC to generate code
   18965      that is not binary compatible with code generated without that
   18966      switch.  Use it to conform to a non-default application binary
   18967      interface.
   18968 
   18969 '-fno-common'
   18970      In C code, controls the placement of uninitialized global
   18971      variables.  Unix C compilers have traditionally permitted multiple
   18972      definitions of such variables in different compilation units by
   18973      placing the variables in a common block.  This is the behavior
   18974      specified by '-fcommon', and is the default for GCC on most
   18975      targets.  On the other hand, this behavior is not required by ISO
   18976      C, and on some targets may carry a speed or code size penalty on
   18977      variable references.  The '-fno-common' option specifies that the
   18978      compiler should place uninitialized global variables in the data
   18979      section of the object file, rather than generating them as common
   18980      blocks.  This has the effect that if the same variable is declared
   18981      (without 'extern') in two different compilations, you get a
   18982      multiple-definition error when you link them.  In this case, you
   18983      must compile with '-fcommon' instead.  Compiling with '-fno-common'
   18984      is useful on targets for which it provides better performance, or
   18985      if you wish to verify that the program will work on other systems
   18986      that always treat uninitialized variable declarations this way.
   18987 
   18988 '-fno-ident'
   18989      Ignore the '#ident' directive.
   18990 
   18991 '-finhibit-size-directive'
   18992      Don't output a '.size' assembler directive, or anything else that
   18993      would cause trouble if the function is split in the middle, and the
   18994      two halves are placed at locations far apart in memory.  This
   18995      option is used when compiling 'crtstuff.c'; you should not need to
   18996      use it for anything else.
   18997 
   18998 '-fverbose-asm'
   18999      Put extra commentary information in the generated assembly code to
   19000      make it more readable.  This option is generally only of use to
   19001      those who actually need to read the generated assembly code
   19002      (perhaps while debugging the compiler itself).
   19003 
   19004      '-fno-verbose-asm', the default, causes the extra information to be
   19005      omitted and is useful when comparing two assembler files.
   19006 
   19007 '-frecord-gcc-switches'
   19008      This switch causes the command line used to invoke the compiler to
   19009      be recorded into the object file that is being created.  This
   19010      switch is only implemented on some targets and the exact format of
   19011      the recording is target and binary file format dependent, but it
   19012      usually takes the form of a section containing ASCII text.  This
   19013      switch is related to the '-fverbose-asm' switch, but that switch
   19014      only records information in the assembler output file as comments,
   19015      so it never reaches the object file.  See also
   19016      '-grecord-gcc-switches' for another way of storing compiler options
   19017      into the object file.
   19018 
   19019 '-fpic'
   19020      Generate position-independent code (PIC) suitable for use in a
   19021      shared library, if supported for the target machine.  Such code
   19022      accesses all constant addresses through a global offset table
   19023      (GOT).  The dynamic loader resolves the GOT entries when the
   19024      program starts (the dynamic loader is not part of GCC; it is part
   19025      of the operating system).  If the GOT size for the linked
   19026      executable exceeds a machine-specific maximum size, you get an
   19027      error message from the linker indicating that '-fpic' does not
   19028      work; in that case, recompile with '-fPIC' instead.  (These
   19029      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
   19030      386 has no such limit.)
   19031 
   19032      Position-independent code requires special support, and therefore
   19033      works only on certain machines.  For the 386, GCC supports PIC for
   19034      System V but not for the Sun 386i.  Code generated for the IBM
   19035      RS/6000 is always position-independent.
   19036 
   19037      When this flag is set, the macros '__pic__' and '__PIC__' are
   19038      defined to 1.
   19039 
   19040 '-fPIC'
   19041      If supported for the target machine, emit position-independent
   19042      code, suitable for dynamic linking and avoiding any limit on the
   19043      size of the global offset table.  This option makes a difference on
   19044      the m68k, PowerPC and SPARC.
   19045 
   19046      Position-independent code requires special support, and therefore
   19047      works only on certain machines.
   19048 
   19049      When this flag is set, the macros '__pic__' and '__PIC__' are
   19050      defined to 2.
   19051 
   19052 '-fpie'
   19053 '-fPIE'
   19054      These options are similar to '-fpic' and '-fPIC', but generated
   19055      position independent code can be only linked into executables.
   19056      Usually these options are used when '-pie' GCC option is used
   19057      during linking.
   19058 
   19059      '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
   19060      The macros have the value 1 for '-fpie' and 2 for '-fPIE'.
   19061 
   19062 '-fno-jump-tables'
   19063      Do not use jump tables for switch statements even where it would be
   19064      more efficient than other code generation strategies.  This option
   19065      is of use in conjunction with '-fpic' or '-fPIC' for building code
   19066      that forms part of a dynamic linker and cannot reference the
   19067      address of a jump table.  On some targets, jump tables do not
   19068      require a GOT and this option is not needed.
   19069 
   19070 '-ffixed-REG'
   19071      Treat the register named REG as a fixed register; generated code
   19072      should never refer to it (except perhaps as a stack pointer, frame
   19073      pointer or in some other fixed role).
   19074 
   19075      REG must be the name of a register.  The register names accepted
   19076      are machine-specific and are defined in the 'REGISTER_NAMES' macro
   19077      in the machine description macro file.
   19078 
   19079      This flag does not have a negative form, because it specifies a
   19080      three-way choice.
   19081 
   19082 '-fcall-used-REG'
   19083      Treat the register named REG as an allocable register that is
   19084      clobbered by function calls.  It may be allocated for temporaries
   19085      or variables that do not live across a call.  Functions compiled
   19086      this way do not save and restore the register REG.
   19087 
   19088      It is an error to use this flag with the frame pointer or stack
   19089      pointer.  Use of this flag for other registers that have fixed
   19090      pervasive roles in the machine's execution model produces
   19091      disastrous results.
   19092 
   19093      This flag does not have a negative form, because it specifies a
   19094      three-way choice.
   19095 
   19096 '-fcall-saved-REG'
   19097      Treat the register named REG as an allocable register saved by
   19098      functions.  It may be allocated even for temporaries or variables
   19099      that live across a call.  Functions compiled this way save and
   19100      restore the register REG if they use it.
   19101 
   19102      It is an error to use this flag with the frame pointer or stack
   19103      pointer.  Use of this flag for other registers that have fixed
   19104      pervasive roles in the machine's execution model produces
   19105      disastrous results.
   19106 
   19107      A different sort of disaster results from the use of this flag for
   19108      a register in which function values may be returned.
   19109 
   19110      This flag does not have a negative form, because it specifies a
   19111      three-way choice.
   19112 
   19113 '-fpack-struct[=N]'
   19114      Without a value specified, pack all structure members together
   19115      without holes.  When a value is specified (which must be a small
   19116      power of two), pack structure members according to this value,
   19117      representing the maximum alignment (that is, objects with default
   19118      alignment requirements larger than this are output potentially
   19119      unaligned at the next fitting location.
   19120 
   19121      *Warning:* the '-fpack-struct' switch causes GCC to generate code
   19122      that is not binary compatible with code generated without that
   19123      switch.  Additionally, it makes the code suboptimal.  Use it to
   19124      conform to a non-default application binary interface.
   19125 
   19126 '-finstrument-functions'
   19127      Generate instrumentation calls for entry and exit to functions.
   19128      Just after function entry and just before function exit, the
   19129      following profiling functions are called with the address of the
   19130      current function and its call site.  (On some platforms,
   19131      '__builtin_return_address' does not work beyond the current
   19132      function, so the call site information may not be available to the
   19133      profiling functions otherwise.)
   19134 
   19135           void __cyg_profile_func_enter (void *this_fn,
   19136                                          void *call_site);
   19137           void __cyg_profile_func_exit  (void *this_fn,
   19138                                          void *call_site);
   19139 
   19140      The first argument is the address of the start of the current
   19141      function, which may be looked up exactly in the symbol table.
   19142 
   19143      This instrumentation is also done for functions expanded inline in
   19144      other functions.  The profiling calls indicate where, conceptually,
   19145      the inline function is entered and exited.  This means that
   19146      addressable versions of such functions must be available.  If all
   19147      your uses of a function are expanded inline, this may mean an
   19148      additional expansion of code size.  If you use 'extern inline' in
   19149      your C code, an addressable version of such functions must be
   19150      provided.  (This is normally the case anyway, but if you get lucky
   19151      and the optimizer always expands the functions inline, you might
   19152      have gotten away without providing static copies.)
   19153 
   19154      A function may be given the attribute 'no_instrument_function', in
   19155      which case this instrumentation is not done.  This can be used, for
   19156      example, for the profiling functions listed above, high-priority
   19157      interrupt routines, and any functions from which the profiling
   19158      functions cannot safely be called (perhaps signal handlers, if the
   19159      profiling routines generate output or allocate memory).
   19160 
   19161 '-finstrument-functions-exclude-file-list=FILE,FILE,...'
   19162 
   19163      Set the list of functions that are excluded from instrumentation
   19164      (see the description of '-finstrument-functions').  If the file
   19165      that contains a function definition matches with one of FILE, then
   19166      that function is not instrumented.  The match is done on
   19167      substrings: if the FILE parameter is a substring of the file name,
   19168      it is considered to be a match.
   19169 
   19170      For example:
   19171 
   19172           -finstrument-functions-exclude-file-list=/bits/stl,include/sys
   19173 
   19174      excludes any inline function defined in files whose pathnames
   19175      contain '/bits/stl' or 'include/sys'.
   19176 
   19177      If, for some reason, you want to include letter '','' in one of
   19178      SYM, write ''\,''.  For example,
   19179      '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
   19180      single quote surrounding the option).
   19181 
   19182 '-finstrument-functions-exclude-function-list=SYM,SYM,...'
   19183 
   19184      This is similar to '-finstrument-functions-exclude-file-list', but
   19185      this option sets the list of function names to be excluded from
   19186      instrumentation.  The function name to be matched is its
   19187      user-visible name, such as 'vector<int> blah(const vector<int> &)',
   19188      not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
   19189      The match is done on substrings: if the SYM parameter is a
   19190      substring of the function name, it is considered to be a match.
   19191      For C99 and C++ extended identifiers, the function name must be
   19192      given in UTF-8, not using universal character names.
   19193 
   19194 '-fstack-check'
   19195      Generate code to verify that you do not go beyond the boundary of
   19196      the stack.  You should specify this flag if you are running in an
   19197      environment with multiple threads, but you only rarely need to
   19198      specify it in a single-threaded environment since stack overflow is
   19199      automatically detected on nearly all systems if there is only one
   19200      stack.
   19201 
   19202      Note that this switch does not actually cause checking to be done;
   19203      the operating system or the language runtime must do that.  The
   19204      switch causes generation of code to ensure that they see the stack
   19205      being extended.
   19206 
   19207      You can additionally specify a string parameter: 'no' means no
   19208      checking, 'generic' means force the use of old-style checking,
   19209      'specific' means use the best checking method and is equivalent to
   19210      bare '-fstack-check'.
   19211 
   19212      Old-style checking is a generic mechanism that requires no specific
   19213      target support in the compiler but comes with the following
   19214      drawbacks:
   19215 
   19216        1. Modified allocation strategy for large objects: they are
   19217           always allocated dynamically if their size exceeds a fixed
   19218           threshold.
   19219 
   19220        2. Fixed limit on the size of the static frame of functions: when
   19221           it is topped by a particular function, stack checking is not
   19222           reliable and a warning is issued by the compiler.
   19223 
   19224        3. Inefficiency: because of both the modified allocation strategy
   19225           and the generic implementation, code performance is hampered.
   19226 
   19227      Note that old-style stack checking is also the fallback method for
   19228      'specific' if no target support has been added in the compiler.
   19229 
   19230 '-fstack-limit-register=REG'
   19231 '-fstack-limit-symbol=SYM'
   19232 '-fno-stack-limit'
   19233      Generate code to ensure that the stack does not grow beyond a
   19234      certain value, either the value of a register or the address of a
   19235      symbol.  If a larger stack is required, a signal is raised at run
   19236      time.  For most targets, the signal is raised before the stack
   19237      overruns the boundary, so it is possible to catch the signal
   19238      without taking special precautions.
   19239 
   19240      For instance, if the stack starts at absolute address '0x80000000'
   19241      and grows downwards, you can use the flags
   19242      '-fstack-limit-symbol=__stack_limit' and
   19243      '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
   19244      128KB.  Note that this may only work with the GNU linker.
   19245 
   19246 '-fsplit-stack'
   19247      Generate code to automatically split the stack before it overflows.
   19248      The resulting program has a discontiguous stack which can only
   19249      overflow if the program is unable to allocate any more memory.
   19250      This is most useful when running threaded programs, as it is no
   19251      longer necessary to calculate a good stack size to use for each
   19252      thread.  This is currently only implemented for the i386 and x86_64
   19253      back ends running GNU/Linux.
   19254 
   19255      When code compiled with '-fsplit-stack' calls code compiled without
   19256      '-fsplit-stack', there may not be much stack space available for
   19257      the latter code to run.  If compiling all code, including library
   19258      code, with '-fsplit-stack' is not an option, then the linker can
   19259      fix up these calls so that the code compiled without
   19260      '-fsplit-stack' always has a large stack.  Support for this is
   19261      implemented in the gold linker in GNU binutils release 2.21 and
   19262      later.
   19263 
   19264 '-fleading-underscore'
   19265      This option and its counterpart, '-fno-leading-underscore',
   19266      forcibly change the way C symbols are represented in the object
   19267      file.  One use is to help link with legacy assembly code.
   19268 
   19269      *Warning:* the '-fleading-underscore' switch causes GCC to generate
   19270      code that is not binary compatible with code generated without that
   19271      switch.  Use it to conform to a non-default application binary
   19272      interface.  Not all targets provide complete support for this
   19273      switch.
   19274 
   19275 '-ftls-model=MODEL'
   19276      Alter the thread-local storage model to be used (*note
   19277      Thread-Local::).  The MODEL argument should be one of
   19278      'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
   19279 
   19280      The default without '-fpic' is 'initial-exec'; with '-fpic' the
   19281      default is 'global-dynamic'.
   19282 
   19283 '-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
   19284      Set the default ELF image symbol visibility to the specified
   19285      option--all symbols are marked with this unless overridden within
   19286      the code.  Using this feature can very substantially improve
   19287      linking and load times of shared object libraries, produce more
   19288      optimized code, provide near-perfect API export and prevent symbol
   19289      clashes.  It is *strongly* recommended that you use this in any
   19290      shared objects you distribute.
   19291 
   19292      Despite the nomenclature, 'default' always means public; i.e.,
   19293      available to be linked against from outside the shared object.
   19294      'protected' and 'internal' are pretty useless in real-world usage
   19295      so the only other commonly used option is 'hidden'.  The default if
   19296      '-fvisibility' isn't specified is 'default', i.e., make every
   19297      symbol public--this causes the same behavior as previous versions
   19298      of GCC.
   19299 
   19300      A good explanation of the benefits offered by ensuring ELF symbols
   19301      have the correct visibility is given by "How To Write Shared
   19302      Libraries" by Ulrich Drepper (which can be found at
   19303      <http://people.redhat.com/~drepper/>)--however a superior solution
   19304      made possible by this option to marking things hidden when the
   19305      default is public is to make the default hidden and mark things
   19306      public.  This is the norm with DLLs on Windows and with
   19307      '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
   19308      instead of '__declspec(dllexport)' you get almost identical
   19309      semantics with identical syntax.  This is a great boon to those
   19310      working with cross-platform projects.
   19311 
   19312      For those adding visibility support to existing code, you may find
   19313      '#pragma GCC visibility' of use.  This works by you enclosing the
   19314      declarations you wish to set visibility for with (for example)
   19315      '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
   19316      pop'.  Bear in mind that symbol visibility should be viewed *as
   19317      part of the API interface contract* and thus all new code should
   19318      always specify visibility when it is not the default; i.e.,
   19319      declarations only for use within the local DSO should *always* be
   19320      marked explicitly as hidden as so to avoid PLT indirection
   19321      overheads--making this abundantly clear also aids readability and
   19322      self-documentation of the code.  Note that due to ISO C++
   19323      specification requirements, 'operator new' and 'operator delete'
   19324      must always be of default visibility.
   19325 
   19326      Be aware that headers from outside your project, in particular
   19327      system headers and headers from any other library you use, may not
   19328      be expecting to be compiled with visibility other than the default.
   19329      You may need to explicitly say '#pragma GCC visibility
   19330      push(default)' before including any such headers.
   19331 
   19332      'extern' declarations are not affected by '-fvisibility', so a lot
   19333      of code can be recompiled with '-fvisibility=hidden' with no
   19334      modifications.  However, this means that calls to 'extern'
   19335      functions with no explicit visibility use the PLT, so it is more
   19336      effective to use '__attribute ((visibility))' and/or '#pragma GCC
   19337      visibility' to tell the compiler which 'extern' declarations should
   19338      be treated as hidden.
   19339 
   19340      Note that '-fvisibility' does affect C++ vague linkage entities.
   19341      This means that, for instance, an exception class that is be thrown
   19342      between DSOs must be explicitly marked with default visibility so
   19343      that the 'type_info' nodes are unified between the DSOs.
   19344 
   19345      An overview of these techniques, their benefits and how to use them
   19346      is at <http://gcc.gnu.org/wiki/Visibility>.
   19347 
   19348 '-fstrict-volatile-bitfields'
   19349      This option should be used if accesses to volatile bit-fields (or
   19350      other structure fields, although the compiler usually honors those
   19351      types anyway) should use a single access of the width of the
   19352      field's type, aligned to a natural alignment if possible.  For
   19353      example, targets with memory-mapped peripheral registers might
   19354      require all such accesses to be 16 bits wide; with this flag you
   19355      can declare all peripheral bit-fields as 'unsigned short' (assuming
   19356      short is 16 bits on these targets) to force GCC to use 16-bit
   19357      accesses instead of, perhaps, a more efficient 32-bit access.
   19358 
   19359      If this option is disabled, the compiler uses the most efficient
   19360      instruction.  In the previous example, that might be a 32-bit load
   19361      instruction, even though that accesses bytes that do not contain
   19362      any portion of the bit-field, or memory-mapped registers unrelated
   19363      to the one being updated.
   19364 
   19365      If the target requires strict alignment, and honoring the field
   19366      type would require violating this alignment, a warning is issued.
   19367      If the field has 'packed' attribute, the access is done without
   19368      honoring the field type.  If the field doesn't have 'packed'
   19369      attribute, the access is done honoring the field type.  In both
   19370      cases, GCC assumes that the user knows something about the target
   19371      hardware that it is unaware of.
   19372 
   19373      The default value of this option is determined by the application
   19374      binary interface for the target processor.
   19375 
   19376 '-fsync-libcalls'
   19377      This option controls whether any out-of-line instance of the
   19378      '__sync' family of functions may be used to implement the C++11
   19379      '__atomic' family of functions.
   19380 
   19381      The default value of this option is enabled, thus the only useful
   19382      form of the option is '-fno-sync-libcalls'.  This option is used in
   19383      the implementation of the 'libatomic' runtime library.
   19384 
   19385 
   19386 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
   19387 
   19388 3.19 Environment Variables Affecting GCC
   19389 ========================================
   19390 
   19391 This section describes several environment variables that affect how GCC
   19392 operates.  Some of them work by specifying directories or prefixes to
   19393 use when searching for various kinds of files.  Some are used to specify
   19394 other aspects of the compilation environment.
   19395 
   19396  Note that you can also specify places to search using options such as
   19397 '-B', '-I' and '-L' (*note Directory Options::).  These take precedence
   19398 over places specified using environment variables, which in turn take
   19399 precedence over those specified by the configuration of GCC.  *Note
   19400 Controlling the Compilation Driver 'gcc': (gccint)Driver.
   19401 
   19402 'LANG'
   19403 'LC_CTYPE'
   19404 'LC_MESSAGES'
   19405 'LC_ALL'
   19406      These environment variables control the way that GCC uses
   19407      localization information which allows GCC to work with different
   19408      national conventions.  GCC inspects the locale categories
   19409      'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
   19410      These locale categories can be set to any value supported by your
   19411      installation.  A typical value is 'en_GB.UTF-8' for English in the
   19412      United Kingdom encoded in UTF-8.
   19413 
   19414      The 'LC_CTYPE' environment variable specifies character
   19415      classification.  GCC uses it to determine the character boundaries
   19416      in a string; this is needed for some multibyte encodings that
   19417      contain quote and escape characters that are otherwise interpreted
   19418      as a string end or escape.
   19419 
   19420      The 'LC_MESSAGES' environment variable specifies the language to
   19421      use in diagnostic messages.
   19422 
   19423      If the 'LC_ALL' environment variable is set, it overrides the value
   19424      of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
   19425      'LC_MESSAGES' default to the value of the 'LANG' environment
   19426      variable.  If none of these variables are set, GCC defaults to
   19427      traditional C English behavior.
   19428 
   19429 'TMPDIR'
   19430      If 'TMPDIR' is set, it specifies the directory to use for temporary
   19431      files.  GCC uses temporary files to hold the output of one stage of
   19432      compilation which is to be used as input to the next stage: for
   19433      example, the output of the preprocessor, which is the input to the
   19434      compiler proper.
   19435 
   19436 'GCC_COMPARE_DEBUG'
   19437      Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
   19438      '-fcompare-debug' to the compiler driver.  See the documentation of
   19439      this option for more details.
   19440 
   19441 'GCC_EXEC_PREFIX'
   19442      If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
   19443      names of the subprograms executed by the compiler.  No slash is
   19444      added when this prefix is combined with the name of a subprogram,
   19445      but you can specify a prefix that ends with a slash if you wish.
   19446 
   19447      If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
   19448      appropriate prefix to use based on the pathname it is invoked with.
   19449 
   19450      If GCC cannot find the subprogram using the specified prefix, it
   19451      tries looking in the usual places for the subprogram.
   19452 
   19453      The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
   19454      PREFIX is the prefix to the installed compiler.  In many cases
   19455      PREFIX is the value of 'prefix' when you ran the 'configure'
   19456      script.
   19457 
   19458      Other prefixes specified with '-B' take precedence over this
   19459      prefix.
   19460 
   19461      This prefix is also used for finding files such as 'crt0.o' that
   19462      are used for linking.
   19463 
   19464      In addition, the prefix is used in an unusual way in finding the
   19465      directories to search for header files.  For each of the standard
   19466      directories whose name normally begins with '/usr/local/lib/gcc'
   19467      (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
   19468      replacing that beginning with the specified prefix to produce an
   19469      alternate directory name.  Thus, with '-Bfoo/', GCC searches
   19470      'foo/bar' just before it searches the standard directory
   19471      '/usr/local/lib/bar'.  If a standard directory begins with the
   19472      configured PREFIX then the value of PREFIX is replaced by
   19473      'GCC_EXEC_PREFIX' when looking for header files.
   19474 
   19475 'COMPILER_PATH'
   19476      The value of 'COMPILER_PATH' is a colon-separated list of
   19477      directories, much like 'PATH'.  GCC tries the directories thus
   19478      specified when searching for subprograms, if it can't find the
   19479      subprograms using 'GCC_EXEC_PREFIX'.
   19480 
   19481 'LIBRARY_PATH'
   19482      The value of 'LIBRARY_PATH' is a colon-separated list of
   19483      directories, much like 'PATH'.  When configured as a native
   19484      compiler, GCC tries the directories thus specified when searching
   19485      for special linker files, if it can't find them using
   19486      'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
   19487      when searching for ordinary libraries for the '-l' option (but
   19488      directories specified with '-L' come first).
   19489 
   19490 'LANG'
   19491      This variable is used to pass locale information to the compiler.
   19492      One way in which this information is used is to determine the
   19493      character set to be used when character literals, string literals
   19494      and comments are parsed in C and C++.  When the compiler is
   19495      configured to allow multibyte characters, the following values for
   19496      'LANG' are recognized:
   19497 
   19498      'C-JIS'
   19499           Recognize JIS characters.
   19500      'C-SJIS'
   19501           Recognize SJIS characters.
   19502      'C-EUCJP'
   19503           Recognize EUCJP characters.
   19504 
   19505      If 'LANG' is not defined, or if it has some other value, then the
   19506      compiler uses 'mblen' and 'mbtowc' as defined by the default locale
   19507      to recognize and translate multibyte characters.
   19508 
   19509 Some additional environment variables affect the behavior of the
   19510 preprocessor.
   19511 
   19512 'CPATH'
   19513 'C_INCLUDE_PATH'
   19514 'CPLUS_INCLUDE_PATH'
   19515 'OBJC_INCLUDE_PATH'
   19516      Each variable's value is a list of directories separated by a
   19517      special character, much like 'PATH', in which to look for header
   19518      files.  The special character, 'PATH_SEPARATOR', is
   19519      target-dependent and determined at GCC build time.  For Microsoft
   19520      Windows-based targets it is a semicolon, and for almost all other
   19521      targets it is a colon.
   19522 
   19523      'CPATH' specifies a list of directories to be searched as if
   19524      specified with '-I', but after any paths given with '-I' options on
   19525      the command line.  This environment variable is used regardless of
   19526      which language is being preprocessed.
   19527 
   19528      The remaining environment variables apply only when preprocessing
   19529      the particular language indicated.  Each specifies a list of
   19530      directories to be searched as if specified with '-isystem', but
   19531      after any paths given with '-isystem' options on the command line.
   19532 
   19533      In all these variables, an empty element instructs the compiler to
   19534      search its current working directory.  Empty elements can appear at
   19535      the beginning or end of a path.  For instance, if the value of
   19536      'CPATH' is ':/special/include', that has the same effect as
   19537      '-I. -I/special/include'.
   19538 
   19539 'DEPENDENCIES_OUTPUT'
   19540      If this variable is set, its value specifies how to output
   19541      dependencies for Make based on the non-system header files
   19542      processed by the compiler.  System header files are ignored in the
   19543      dependency output.
   19544 
   19545      The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
   19546      which case the Make rules are written to that file, guessing the
   19547      target name from the source file name.  Or the value can have the
   19548      form 'FILE TARGET', in which case the rules are written to file
   19549      FILE using TARGET as the target name.
   19550 
   19551      In other words, this environment variable is equivalent to
   19552      combining the options '-MM' and '-MF' (*note Preprocessor
   19553      Options::), with an optional '-MT' switch too.
   19554 
   19555 'SUNPRO_DEPENDENCIES'
   19556      This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
   19557      except that system header files are not ignored, so it implies '-M'
   19558      rather than '-MM'.  However, the dependence on the main input file
   19559      is omitted.  *Note Preprocessor Options::.
   19560 
   19561 
   19562 File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
   19563 
   19564 3.20 Using Precompiled Headers
   19565 ==============================
   19566 
   19567 Often large projects have many header files that are included in every
   19568 source file.  The time the compiler takes to process these header files
   19569 over and over again can account for nearly all of the time required to
   19570 build the project.  To make builds faster, GCC allows you to
   19571 "precompile" a header file.
   19572 
   19573  To create a precompiled header file, simply compile it as you would any
   19574 other file, if necessary using the '-x' option to make the driver treat
   19575 it as a C or C++ header file.  You may want to use a tool like 'make' to
   19576 keep the precompiled header up-to-date when the headers it contains
   19577 change.
   19578 
   19579  A precompiled header file is searched for when '#include' is seen in
   19580 the compilation.  As it searches for the included file (*note Search
   19581 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
   19582 each directory just before it looks for the include file in that
   19583 directory.  The name searched for is the name specified in the
   19584 '#include' with '.gch' appended.  If the precompiled header file can't
   19585 be used, it is ignored.
   19586 
   19587  For instance, if you have '#include "all.h"', and you have 'all.h.gch'
   19588 in the same directory as 'all.h', then the precompiled header file is
   19589 used if possible, and the original header is used otherwise.
   19590 
   19591  Alternatively, you might decide to put the precompiled header file in a
   19592 directory and use '-I' to ensure that directory is searched before (or
   19593 instead of) the directory containing the original header.  Then, if you
   19594 want to check that the precompiled header file is always used, you can
   19595 put a file of the same name as the original header in this directory
   19596 containing an '#error' command.
   19597 
   19598  This also works with '-include'.  So yet another way to use precompiled
   19599 headers, good for projects not designed with precompiled header files in
   19600 mind, is to simply take most of the header files used by a project,
   19601 include them from another header file, precompile that header file, and
   19602 '-include' the precompiled header.  If the header files have guards
   19603 against multiple inclusion, they are skipped because they've already
   19604 been included (in the precompiled header).
   19605 
   19606  If you need to precompile the same header file for different languages,
   19607 targets, or compiler options, you can instead make a _directory_ named
   19608 like 'all.h.gch', and put each precompiled header in the directory,
   19609 perhaps using '-o'.  It doesn't matter what you call the files in the
   19610 directory; every precompiled header in the directory is considered.  The
   19611 first precompiled header encountered in the directory that is valid for
   19612 this compilation is used; they're searched in no particular order.
   19613 
   19614  There are many other possibilities, limited only by your imagination,
   19615 good sense, and the constraints of your build system.
   19616 
   19617  A precompiled header file can be used only when these conditions apply:
   19618 
   19619    * Only one precompiled header can be used in a particular
   19620      compilation.
   19621 
   19622    * A precompiled header can't be used once the first C token is seen.
   19623      You can have preprocessor directives before a precompiled header;
   19624      you cannot include a precompiled header from inside another header.
   19625 
   19626    * The precompiled header file must be produced for the same language
   19627      as the current compilation.  You can't use a C precompiled header
   19628      for a C++ compilation.
   19629 
   19630    * The precompiled header file must have been produced by the same
   19631      compiler binary as the current compilation is using.
   19632 
   19633    * Any macros defined before the precompiled header is included must
   19634      either be defined in the same way as when the precompiled header
   19635      was generated, or must not affect the precompiled header, which
   19636      usually means that they don't appear in the precompiled header at
   19637      all.
   19638 
   19639      The '-D' option is one way to define a macro before a precompiled
   19640      header is included; using a '#define' can also do it.  There are
   19641      also some options that define macros implicitly, like '-O' and
   19642      '-Wdeprecated'; the same rule applies to macros defined this way.
   19643 
   19644    * If debugging information is output when using the precompiled
   19645      header, using '-g' or similar, the same kind of debugging
   19646      information must have been output when building the precompiled
   19647      header.  However, a precompiled header built using '-g' can be used
   19648      in a compilation when no debugging information is being output.
   19649 
   19650    * The same '-m' options must generally be used when building and
   19651      using the precompiled header.  *Note Submodel Options::, for any
   19652      cases where this rule is relaxed.
   19653 
   19654    * Each of the following options must be the same when building and
   19655      using the precompiled header:
   19656 
   19657           -fexceptions
   19658 
   19659    * Some other command-line options starting with '-f', '-p', or '-O'
   19660      must be defined in the same way as when the precompiled header was
   19661      generated.  At present, it's not clear which options are safe to
   19662      change and which are not; the safest choice is to use exactly the
   19663      same options when generating and using the precompiled header.  The
   19664      following are known to be safe:
   19665 
   19666           -fmessage-length=  -fpreprocessed  -fsched-interblock
   19667           -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
   19668           -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
   19669           -pedantic-errors
   19670 
   19671  For all of these except the last, the compiler automatically ignores
   19672 the precompiled header if the conditions aren't met.  If you find an
   19673 option combination that doesn't work and doesn't cause the precompiled
   19674 header to be ignored, please consider filing a bug report, see *note
   19675 Bugs::.
   19676 
   19677  If you do use differing options when generating and using the
   19678 precompiled header, the actual behavior is a mixture of the behavior for
   19679 the options.  For instance, if you use '-g' to generate the precompiled
   19680 header but not when using it, you may or may not get debugging
   19681 information for routines in the precompiled header.
   19682 
   19683 
   19684 File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
   19685 
   19686 4 C Implementation-defined behavior
   19687 ***********************************
   19688 
   19689 A conforming implementation of ISO C is required to document its choice
   19690 of behavior in each of the areas that are designated "implementation
   19691 defined".  The following lists all such areas, along with the section
   19692 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
   19693 Some areas are only implementation-defined in one version of the
   19694 standard.
   19695 
   19696  Some choices depend on the externally determined ABI for the platform
   19697 (including standard character encodings) which GCC follows; these are
   19698 listed as "determined by ABI" below.  *Note Binary Compatibility:
   19699 Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
   19700 documented in the preprocessor manual.  *Note Implementation-defined
   19701 behavior: (cpp)Implementation-defined behavior.  Some choices are made
   19702 by the library and operating system (or other environment when compiling
   19703 for a freestanding environment); refer to their documentation for
   19704 details.
   19705 
   19706 * Menu:
   19707 
   19708 * Translation implementation::
   19709 * Environment implementation::
   19710 * Identifiers implementation::
   19711 * Characters implementation::
   19712 * Integers implementation::
   19713 * Floating point implementation::
   19714 * Arrays and pointers implementation::
   19715 * Hints implementation::
   19716 * Structures unions enumerations and bit-fields implementation::
   19717 * Qualifiers implementation::
   19718 * Declarators implementation::
   19719 * Statements implementation::
   19720 * Preprocessing directives implementation::
   19721 * Library functions implementation::
   19722 * Architecture implementation::
   19723 * Locale-specific behavior implementation::
   19724 
   19725 
   19726 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
   19727 
   19728 4.1 Translation
   19729 ===============
   19730 
   19731    * 'How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
   19732      5.1.1.3).'
   19733 
   19734      Diagnostics consist of all the output sent to stderr by GCC.
   19735 
   19736    * 'Whether each nonempty sequence of white-space characters other
   19737      than new-line is retained or replaced by one space character in
   19738      translation phase 3 (C90 and C99 5.1.1.2).'
   19739 
   19740      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19741      behavior.
   19742 
   19743 
   19744 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
   19745 
   19746 4.2 Environment
   19747 ===============
   19748 
   19749 The behavior of most of these points are dependent on the implementation
   19750 of the C library, and are not defined by GCC itself.
   19751 
   19752    * 'The mapping between physical source file multibyte characters and
   19753      the source character set in translation phase 1 (C90 and C99
   19754      5.1.1.2).'
   19755 
   19756      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19757      behavior.
   19758 
   19759 
   19760 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
   19761 
   19762 4.3 Identifiers
   19763 ===============
   19764 
   19765    * 'Which additional multibyte characters may appear in identifiers
   19766      and their correspondence to universal character names (C99 6.4.2).'
   19767 
   19768      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19769      behavior.
   19770 
   19771    * 'The number of significant initial characters in an identifier (C90
   19772      6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
   19773 
   19774      For internal names, all characters are significant.  For external
   19775      names, the number of significant characters are defined by the
   19776      linker; for almost all targets, all characters are significant.
   19777 
   19778    * 'Whether case distinctions are significant in an identifier with
   19779      external linkage (C90 6.1.2).'
   19780 
   19781      This is a property of the linker.  C99 requires that case
   19782      distinctions are always significant in identifiers with external
   19783      linkage and systems without this property are not supported by GCC.
   19784 
   19785 
   19786 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
   19787 
   19788 4.4 Characters
   19789 ==============
   19790 
   19791    * 'The number of bits in a byte (C90 3.4, C99 3.6).'
   19792 
   19793      Determined by ABI.
   19794 
   19795    * 'The values of the members of the execution character set (C90 and
   19796      C99 5.2.1).'
   19797 
   19798      Determined by ABI.
   19799 
   19800    * 'The unique value of the member of the execution character set
   19801      produced for each of the standard alphabetic escape sequences (C90
   19802      and C99 5.2.2).'
   19803 
   19804      Determined by ABI.
   19805 
   19806    * 'The value of a 'char' object into which has been stored any
   19807      character other than a member of the basic execution character set
   19808      (C90 6.1.2.5, C99 6.2.5).'
   19809 
   19810      Determined by ABI.
   19811 
   19812    * 'Which of 'signed char' or 'unsigned char' has the same range,
   19813      representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
   19814      6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
   19815 
   19816      Determined by ABI.  The options '-funsigned-char' and
   19817      '-fsigned-char' change the default.  *Note Options Controlling C
   19818      Dialect: C Dialect Options.
   19819 
   19820    * 'The mapping of members of the source character set (in character
   19821      constants and string literals) to members of the execution
   19822      character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
   19823 
   19824      Determined by ABI.
   19825 
   19826    * 'The value of an integer character constant containing more than
   19827      one character or containing a character or escape sequence that
   19828      does not map to a single-byte execution character (C90 6.1.3.4, C99
   19829      6.4.4.4).'
   19830 
   19831      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19832      behavior.
   19833 
   19834    * 'The value of a wide character constant containing more than one
   19835      multibyte character, or containing a multibyte character or escape
   19836      sequence not represented in the extended execution character set
   19837      (C90 6.1.3.4, C99 6.4.4.4).'
   19838 
   19839      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19840      behavior.
   19841 
   19842    * 'The current locale used to convert a wide character constant
   19843      consisting of a single multibyte character that maps to a member of
   19844      the extended execution character set into a corresponding wide
   19845      character code (C90 6.1.3.4, C99 6.4.4.4).'
   19846 
   19847      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19848      behavior.
   19849 
   19850    * 'The current locale used to convert a wide string literal into
   19851      corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
   19852 
   19853      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19854      behavior.
   19855 
   19856    * 'The value of a string literal containing a multibyte character or
   19857      escape sequence not represented in the execution character set (C90
   19858      6.1.4, C99 6.4.5).'
   19859 
   19860      *Note Implementation-defined behavior: (cpp)Implementation-defined
   19861      behavior.
   19862 
   19863 
   19864 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
   19865 
   19866 4.5 Integers
   19867 ============
   19868 
   19869    * 'Any extended integer types that exist in the implementation (C99
   19870      6.2.5).'
   19871 
   19872      GCC does not support any extended integer types.
   19873 
   19874    * 'Whether signed integer types are represented using sign and
   19875      magnitude, two's complement, or one's complement, and whether the
   19876      extraordinary value is a trap representation or an ordinary value
   19877      (C99 6.2.6.2).'
   19878 
   19879      GCC supports only two's complement integer types, and all bit
   19880      patterns are ordinary values.
   19881 
   19882    * 'The rank of any extended integer type relative to another extended
   19883      integer type with the same precision (C99 6.3.1.1).'
   19884 
   19885      GCC does not support any extended integer types.
   19886 
   19887    * 'The result of, or the signal raised by, converting an integer to a
   19888      signed integer type when the value cannot be represented in an
   19889      object of that type (C90 6.2.1.2, C99 6.3.1.3).'
   19890 
   19891      For conversion to a type of width N, the value is reduced modulo
   19892      2^N to be within range of the type; no signal is raised.
   19893 
   19894    * 'The results of some bitwise operations on signed integers (C90
   19895      6.3, C99 6.5).'
   19896 
   19897      Bitwise operators act on the representation of the value including
   19898      both the sign and value bits, where the sign bit is considered
   19899      immediately above the highest-value value bit.  Signed '>>' acts on
   19900      negative numbers by sign extension.
   19901 
   19902      GCC does not use the latitude given in C99 only to treat certain
   19903      aspects of signed '<<' as undefined, but this is subject to change.
   19904 
   19905    * 'The sign of the remainder on integer division (C90 6.3.5).'
   19906 
   19907      GCC always follows the C99 requirement that the result of division
   19908      is truncated towards zero.
   19909 
   19910 
   19911 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
   19912 
   19913 4.6 Floating point
   19914 ==================
   19915 
   19916    * 'The accuracy of the floating-point operations and of the library
   19917      functions in '<math.h>' and '<complex.h>' that return
   19918      floating-point results (C90 and C99 5.2.4.2.2).'
   19919 
   19920      The accuracy is unknown.
   19921 
   19922    * 'The rounding behaviors characterized by non-standard values of
   19923      'FLT_ROUNDS' (C90 and C99 5.2.4.2.2).'
   19924 
   19925      GCC does not use such values.
   19926 
   19927    * 'The evaluation methods characterized by non-standard negative
   19928      values of 'FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
   19929 
   19930      GCC does not use such values.
   19931 
   19932    * 'The direction of rounding when an integer is converted to a
   19933      floating-point number that cannot exactly represent the original
   19934      value (C90 6.2.1.3, C99 6.3.1.4).'
   19935 
   19936      C99 Annex F is followed.
   19937 
   19938    * 'The direction of rounding when a floating-point number is
   19939      converted to a narrower floating-point number (C90 6.2.1.4, C99
   19940      6.3.1.5).'
   19941 
   19942      C99 Annex F is followed.
   19943 
   19944    * 'How the nearest representable value or the larger or smaller
   19945      representable value immediately adjacent to the nearest
   19946      representable value is chosen for certain floating constants (C90
   19947      6.1.3.1, C99 6.4.4.2).'
   19948 
   19949      C99 Annex F is followed.
   19950 
   19951    * 'Whether and how floating expressions are contracted when not
   19952      disallowed by the 'FP_CONTRACT' pragma (C99 6.5).'
   19953 
   19954      Expressions are currently only contracted if
   19955      '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
   19956      subject to change.
   19957 
   19958    * 'The default state for the 'FENV_ACCESS' pragma (C99 7.6.1).'
   19959 
   19960      This pragma is not implemented, but the default is to "off" unless
   19961      '-frounding-math' is used in which case it is "on".
   19962 
   19963    * 'Additional floating-point exceptions, rounding modes,
   19964      environments, and classifications, and their macro names (C99 7.6,
   19965      C99 7.12).'
   19966 
   19967      This is dependent on the implementation of the C library, and is
   19968      not defined by GCC itself.
   19969 
   19970    * 'The default state for the 'FP_CONTRACT' pragma (C99 7.12.2).'
   19971 
   19972      This pragma is not implemented.  Expressions are currently only
   19973      contracted if '-funsafe-math-optimizations' or '-ffast-math' are
   19974      used.  This is subject to change.
   19975 
   19976    * 'Whether the "inexact" floating-point exception can be raised when
   19977      the rounded result actually does equal the mathematical result in
   19978      an IEC 60559 conformant implementation (C99 F.9).'
   19979 
   19980      This is dependent on the implementation of the C library, and is
   19981      not defined by GCC itself.
   19982 
   19983    * 'Whether the "underflow" (and "inexact") floating-point exception
   19984      can be raised when a result is tiny but not inexact in an IEC 60559
   19985      conformant implementation (C99 F.9).'
   19986 
   19987      This is dependent on the implementation of the C library, and is
   19988      not defined by GCC itself.
   19989 
   19990 
   19991 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
   19992 
   19993 4.7 Arrays and pointers
   19994 =======================
   19995 
   19996    * 'The result of converting a pointer to an integer or vice versa
   19997      (C90 6.3.4, C99 6.3.2.3).'
   19998 
   19999      A cast from pointer to integer discards most-significant bits if
   20000      the pointer representation is larger than the integer type,
   20001      sign-extends(1) if the pointer representation is smaller than the
   20002      integer type, otherwise the bits are unchanged.
   20003 
   20004      A cast from integer to pointer discards most-significant bits if
   20005      the pointer representation is smaller than the integer type,
   20006      extends according to the signedness of the integer type if the
   20007      pointer representation is larger than the integer type, otherwise
   20008      the bits are unchanged.
   20009 
   20010      When casting from pointer to integer and back again, the resulting
   20011      pointer must reference the same object as the original pointer,
   20012      otherwise the behavior is undefined.  That is, one may not use
   20013      integer arithmetic to avoid the undefined behavior of pointer
   20014      arithmetic as proscribed in C99 6.5.6/8.
   20015 
   20016    * 'The size of the result of subtracting two pointers to elements of
   20017      the same array (C90 6.3.6, C99 6.5.6).'
   20018 
   20019      The value is as specified in the standard and the type is
   20020      determined by the ABI.
   20021 
   20022    ---------- Footnotes ----------
   20023 
   20024    (1) Future versions of GCC may zero-extend, or use a target-defined
   20025 'ptr_extend' pattern.  Do not rely on sign extension.
   20026 
   20027 
   20028 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
   20029 
   20030 4.8 Hints
   20031 =========
   20032 
   20033    * 'The extent to which suggestions made by using the 'register'
   20034      storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
   20035 
   20036      The 'register' specifier affects code generation only in these
   20037      ways:
   20038 
   20039         * When used as part of the register variable extension, see
   20040           *note Explicit Reg Vars::.
   20041 
   20042         * When '-O0' is in use, the compiler allocates distinct stack
   20043           memory for all variables that do not have the 'register'
   20044           storage-class specifier; if 'register' is specified, the
   20045           variable may have a shorter lifespan than the code would
   20046           indicate and may never be placed in memory.
   20047 
   20048         * On some rare x86 targets, 'setjmp' doesn't save the registers
   20049           in all circumstances.  In those cases, GCC doesn't allocate
   20050           any variables in registers unless they are marked 'register'.
   20051 
   20052    * 'The extent to which suggestions made by using the inline function
   20053      specifier are effective (C99 6.7.4).'
   20054 
   20055      GCC will not inline any functions if the '-fno-inline' option is
   20056      used or if '-O0' is used.  Otherwise, GCC may still be unable to
   20057      inline a function for many reasons; the '-Winline' option may be
   20058      used to determine if a function has not been inlined and why not.
   20059 
   20060 
   20061 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
   20062 
   20063 4.9 Structures, unions, enumerations, and bit-fields
   20064 ====================================================
   20065 
   20066    * 'A member of a union object is accessed using a member of a
   20067      different type (C90 6.3.2.3).'
   20068 
   20069      The relevant bytes of the representation of the object are treated
   20070      as an object of the type used for the access.  *Note
   20071      Type-punning::.  This may be a trap representation.
   20072 
   20073    * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
   20074      bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
   20075      6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
   20076 
   20077      By default it is treated as 'signed int' but this may be changed by
   20078      the '-funsigned-bitfields' option.
   20079 
   20080    * 'Allowable bit-field types other than '_Bool', 'signed int', and
   20081      'unsigned int' (C99 6.7.2.1).'
   20082 
   20083      No other types are permitted in strictly conforming mode.
   20084 
   20085    * 'Whether a bit-field can straddle a storage-unit boundary (C90
   20086      6.5.2.1, C99 6.7.2.1).'
   20087 
   20088      Determined by ABI.
   20089 
   20090    * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
   20091      C99 6.7.2.1).'
   20092 
   20093      Determined by ABI.
   20094 
   20095    * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
   20096      C99 6.7.2.1).'
   20097 
   20098      Determined by ABI.
   20099 
   20100    * 'The integer type compatible with each enumerated type (C90
   20101      6.5.2.2, C99 6.7.2.2).'
   20102 
   20103      Normally, the type is 'unsigned int' if there are no negative
   20104      values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
   20105      specified, then if there are negative values it is the first of
   20106      'signed char', 'short' and 'int' that can represent all the values,
   20107      otherwise it is the first of 'unsigned char', 'unsigned short' and
   20108      'unsigned int' that can represent all the values.
   20109 
   20110      On some targets, '-fshort-enums' is the default; this is determined
   20111      by the ABI.
   20112 
   20113 
   20114 File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
   20115 
   20116 4.10 Qualifiers
   20117 ===============
   20118 
   20119    * 'What constitutes an access to an object that has
   20120      volatile-qualified type (C90 6.5.3, C99 6.7.3).'
   20121 
   20122      Such an object is normally accessed by pointers and used for
   20123      accessing hardware.  In most expressions, it is intuitively obvious
   20124      what is a read and what is a write.  For example
   20125 
   20126           volatile int *dst = SOMEVALUE;
   20127           volatile int *src = SOMEOTHERVALUE;
   20128           *dst = *src;
   20129 
   20130      will cause a read of the volatile object pointed to by SRC and
   20131      store the value into the volatile object pointed to by DST.  There
   20132      is no guarantee that these reads and writes are atomic, especially
   20133      for objects larger than 'int'.
   20134 
   20135      However, if the volatile storage is not being modified, and the
   20136      value of the volatile storage is not used, then the situation is
   20137      less obvious.  For example
   20138 
   20139           volatile int *src = SOMEVALUE;
   20140           *src;
   20141 
   20142      According to the C standard, such an expression is an rvalue whose
   20143      type is the unqualified version of its original type, i.e.  'int'.
   20144      Whether GCC interprets this as a read of the volatile object being
   20145      pointed to or only as a request to evaluate the expression for its
   20146      side-effects depends on this type.
   20147 
   20148      If it is a scalar type, or on most targets an aggregate type whose
   20149      only member object is of a scalar type, or a union type whose
   20150      member objects are of scalar types, the expression is interpreted
   20151      by GCC as a read of the volatile object; in the other cases, the
   20152      expression is only evaluated for its side-effects.
   20153 
   20154 
   20155 File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
   20156 
   20157 4.11 Declarators
   20158 ================
   20159 
   20160    * 'The maximum number of declarators that may modify an arithmetic,
   20161      structure or union type (C90 6.5.4).'
   20162 
   20163      GCC is only limited by available memory.
   20164 
   20165 
   20166 File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
   20167 
   20168 4.12 Statements
   20169 ===============
   20170 
   20171    * 'The maximum number of 'case' values in a 'switch' statement (C90
   20172      6.6.4.2).'
   20173 
   20174      GCC is only limited by available memory.
   20175 
   20176 
   20177 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
   20178 
   20179 4.13 Preprocessing directives
   20180 =============================
   20181 
   20182 *Note Implementation-defined behavior: (cpp)Implementation-defined
   20183 behavior, for details of these aspects of implementation-defined
   20184 behavior.
   20185 
   20186    * 'How sequences in both forms of header names are mapped to headers
   20187      or external source file names (C90 6.1.7, C99 6.4.7).'
   20188 
   20189    * 'Whether the value of a character constant in a constant expression
   20190      that controls conditional inclusion matches the value of the same
   20191      character constant in the execution character set (C90 6.8.1, C99
   20192      6.10.1).'
   20193 
   20194    * 'Whether the value of a single-character character constant in a
   20195      constant expression that controls conditional inclusion may have a
   20196      negative value (C90 6.8.1, C99 6.10.1).'
   20197 
   20198    * 'The places that are searched for an included '<>' delimited
   20199      header, and how the places are specified or the header is
   20200      identified (C90 6.8.2, C99 6.10.2).'
   20201 
   20202    * 'How the named source file is searched for in an included '""'
   20203      delimited header (C90 6.8.2, C99 6.10.2).'
   20204 
   20205    * 'The method by which preprocessing tokens (possibly resulting from
   20206      macro expansion) in a '#include' directive are combined into a
   20207      header name (C90 6.8.2, C99 6.10.2).'
   20208 
   20209    * 'The nesting limit for '#include' processing (C90 6.8.2, C99
   20210      6.10.2).'
   20211 
   20212    * 'Whether the '#' operator inserts a '\' character before the '\'
   20213      character that begins a universal character name in a character
   20214      constant or string literal (C99 6.10.3.2).'
   20215 
   20216    * 'The behavior on each recognized non-'STDC #pragma' directive (C90
   20217      6.8.6, C99 6.10.6).'
   20218 
   20219      *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
   20220      on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
   20221      details of target-specific pragmas.
   20222 
   20223    * 'The definitions for '__DATE__' and '__TIME__' when respectively,
   20224      the date and time of translation are not available (C90 6.8.8, C99
   20225      6.10.8).'
   20226 
   20227 
   20228 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
   20229 
   20230 4.14 Library functions
   20231 ======================
   20232 
   20233 The behavior of most of these points are dependent on the implementation
   20234 of the C library, and are not defined by GCC itself.
   20235 
   20236    * 'The null pointer constant to which the macro 'NULL' expands (C90
   20237      7.1.6, C99 7.17).'
   20238 
   20239      In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
   20240      provide the other headers which define 'NULL' and some library
   20241      implementations may use other definitions in those headers.
   20242 
   20243 
   20244 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
   20245 
   20246 4.15 Architecture
   20247 =================
   20248 
   20249    * 'The values or expressions assigned to the macros specified in the
   20250      headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90 and C99
   20251      5.2.4.2, C99 7.18.2, C99 7.18.3).'
   20252 
   20253      Determined by ABI.
   20254 
   20255    * 'The number, order, and encoding of bytes in any object (when not
   20256      explicitly specified in this International Standard) (C99
   20257      6.2.6.1).'
   20258 
   20259      Determined by ABI.
   20260 
   20261    * 'The value of the result of the 'sizeof' operator (C90 6.3.3.4, C99
   20262      6.5.3.4).'
   20263 
   20264      Determined by ABI.
   20265 
   20266 
   20267 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
   20268 
   20269 4.16 Locale-specific behavior
   20270 =============================
   20271 
   20272 The behavior of these points are dependent on the implementation of the
   20273 C library, and are not defined by GCC itself.
   20274 
   20275 
   20276 File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
   20277 
   20278 5 C++ Implementation-defined behavior
   20279 *************************************
   20280 
   20281 A conforming implementation of ISO C++ is required to document its
   20282 choice of behavior in each of the areas that are designated
   20283 "implementation defined".  The following lists all such areas, along
   20284 with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
   20285 14882:2003 standards.  Some areas are only implementation-defined in one
   20286 version of the standard.
   20287 
   20288  Some choices depend on the externally determined ABI for the platform
   20289 (including standard character encodings) which GCC follows; these are
   20290 listed as "determined by ABI" below.  *Note Binary Compatibility:
   20291 Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
   20292 documented in the preprocessor manual.  *Note Implementation-defined
   20293 behavior: (cpp)Implementation-defined behavior.  Some choices are
   20294 documented in the corresponding document for the C language.  *Note C
   20295 Implementation::.  Some choices are made by the library and operating
   20296 system (or other environment when compiling for a freestanding
   20297 environment); refer to their documentation for details.
   20298 
   20299 * Menu:
   20300 
   20301 * Conditionally-supported behavior::
   20302 * Exception handling::
   20303 
   20304 
   20305 File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
   20306 
   20307 5.1 Conditionally-supported behavior
   20308 ====================================
   20309 
   20310 'Each implementation shall include documentation that identifies all
   20311 conditionally-supported constructs that it does not support (C++0x
   20312 1.4).'
   20313 
   20314    * 'Whether an argument of class type with a non-trivial copy
   20315      constructor or destructor can be passed to ... (C++0x 5.2.2).'
   20316 
   20317      Such argument passing is not supported.
   20318 
   20319 
   20320 File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
   20321 
   20322 5.2 Exception handling
   20323 ======================
   20324 
   20325    * 'In the situation where no matching handler is found, it is
   20326      implementation-defined whether or not the stack is unwound before
   20327      std::terminate() is called (C++98 15.5.1).'
   20328 
   20329      The stack is not unwound before std::terminate is called.
   20330 
   20331 
   20332 File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
   20333 
   20334 6 Extensions to the C Language Family
   20335 *************************************
   20336 
   20337 GNU C provides several language features not found in ISO standard C.
   20338 (The '-pedantic' option directs GCC to print a warning message if any of
   20339 these features is used.)  To test for the availability of these features
   20340 in conditional compilation, check for a predefined macro '__GNUC__',
   20341 which is always defined under GCC.
   20342 
   20343  These extensions are available in C and Objective-C.  Most of them are
   20344 also available in C++.  *Note Extensions to the C++ Language: C++
   20345 Extensions, for extensions that apply _only_ to C++.
   20346 
   20347  Some features that are in ISO C99 but not C90 or C++ are also, as
   20348 extensions, accepted by GCC in C90 mode and in C++.
   20349 
   20350 * Menu:
   20351 
   20352 * Statement Exprs::     Putting statements and declarations inside expressions.
   20353 * Local Labels::        Labels local to a block.
   20354 * Labels as Values::    Getting pointers to labels, and computed gotos.
   20355 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
   20356 * Constructing Calls::  Dispatching a call to another function.
   20357 * Typeof::              'typeof': referring to the type of an expression.
   20358 * Conditionals::        Omitting the middle operand of a '?:' expression.
   20359 * __int128::			128-bit integers--'__int128'.
   20360 * Long Long::           Double-word integers--'long long int'.
   20361 * Complex::             Data types for complex numbers.
   20362 * Floating Types::      Additional Floating Types.
   20363 * Half-Precision::      Half-Precision Floating Point.
   20364 * Decimal Float::       Decimal Floating Types.
   20365 * Hex Floats::          Hexadecimal floating-point constants.
   20366 * Fixed-Point::         Fixed-Point Types.
   20367 * Named Address Spaces::Named address spaces.
   20368 * Zero Length::         Zero-length arrays.
   20369 * Empty Structures::    Structures with no members.
   20370 * Variable Length::     Arrays whose length is computed at run time.
   20371 * Variadic Macros::     Macros with a variable number of arguments.
   20372 * Escaped Newlines::    Slightly looser rules for escaped newlines.
   20373 * Subscripting::        Any array can be subscripted, even if not an lvalue.
   20374 * Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
   20375 * Initializers::        Non-constant initializers.
   20376 * Compound Literals::   Compound literals give structures, unions
   20377                         or arrays as values.
   20378 * Designated Inits::    Labeling elements of initializers.
   20379 * Case Ranges::         'case 1 ... 9' and such.
   20380 * Cast to Union::       Casting to union type from any member of the union.
   20381 * Mixed Declarations::  Mixing declarations and code.
   20382 * Function Attributes:: Declaring that functions have no side effects,
   20383                         or that they can never return.
   20384 * Attribute Syntax::    Formal syntax for attributes.
   20385 * Function Prototypes:: Prototype declarations and old-style definitions.
   20386 * C++ Comments::        C++ comments are recognized.
   20387 * Dollar Signs::        Dollar sign is allowed in identifiers.
   20388 * Character Escapes::   '\e' stands for the character <ESC>.
   20389 * Variable Attributes:: Specifying attributes of variables.
   20390 * Type Attributes::     Specifying attributes of types.
   20391 * Alignment::           Inquiring about the alignment of a type or variable.
   20392 * Inline::              Defining inline functions (as fast as macros).
   20393 * Volatiles::           What constitutes an access to a volatile object.
   20394 * Extended Asm::        Assembler instructions with C expressions as operands.
   20395                         (With them you can define "built-in" functions.)
   20396 * Constraints::         Constraints for asm operands
   20397 * Asm Labels::          Specifying the assembler name to use for a C symbol.
   20398 * Explicit Reg Vars::   Defining variables residing in specified registers.
   20399 * Alternate Keywords::  '__const__', '__asm__', etc., for header files.
   20400 * Incomplete Enums::    'enum foo;', with details to follow.
   20401 * Function Names::      Printable strings which are the name of the current
   20402                         function.
   20403 * Return Address::      Getting the return or frame address of a function.
   20404 * Vector Extensions::   Using vector instructions through built-in functions.
   20405 * Offsetof::            Special syntax for implementing 'offsetof'.
   20406 * __sync Builtins::     Legacy built-in functions for atomic memory access.
   20407 * __atomic Builtins::   Atomic built-in functions with memory model.
   20408 * x86 specific memory model extensions for transactional memory:: x86 memory models.
   20409 * Object Size Checking:: Built-in functions for limited buffer overflow
   20410                         checking.
   20411 * Other Builtins::      Other built-in functions.
   20412 * Target Builtins::     Built-in functions specific to particular targets.
   20413 * Target Format Checks:: Format checks specific to particular targets.
   20414 * Pragmas::             Pragmas accepted by GCC.
   20415 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
   20416 * Thread-Local::        Per-thread variables.
   20417 * Binary constants::    Binary constants using the '0b' prefix.
   20418 
   20419 
   20420 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
   20421 
   20422 6.1 Statements and Declarations in Expressions
   20423 ==============================================
   20424 
   20425 A compound statement enclosed in parentheses may appear as an expression
   20426 in GNU C.  This allows you to use loops, switches, and local variables
   20427 within an expression.
   20428 
   20429  Recall that a compound statement is a sequence of statements surrounded
   20430 by braces; in this construct, parentheses go around the braces.  For
   20431 example:
   20432 
   20433      ({ int y = foo (); int z;
   20434         if (y > 0) z = y;
   20435         else z = - y;
   20436         z; })
   20437 
   20438 is a valid (though slightly more complex than necessary) expression for
   20439 the absolute value of 'foo ()'.
   20440 
   20441  The last thing in the compound statement should be an expression
   20442 followed by a semicolon; the value of this subexpression serves as the
   20443 value of the entire construct.  (If you use some other kind of statement
   20444 last within the braces, the construct has type 'void', and thus
   20445 effectively no value.)
   20446 
   20447  This feature is especially useful in making macro definitions "safe"
   20448 (so that they evaluate each operand exactly once).  For example, the
   20449 "maximum" function is commonly defined as a macro in standard C as
   20450 follows:
   20451 
   20452      #define max(a,b) ((a) > (b) ? (a) : (b))
   20453 
   20454 But this definition computes either A or B twice, with bad results if
   20455 the operand has side effects.  In GNU C, if you know the type of the
   20456 operands (here taken as 'int'), you can define the macro safely as
   20457 follows:
   20458 
   20459      #define maxint(a,b) \
   20460        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
   20461 
   20462  Embedded statements are not allowed in constant expressions, such as
   20463 the value of an enumeration constant, the width of a bit-field, or the
   20464 initial value of a static variable.
   20465 
   20466  If you don't know the type of the operand, you can still do this, but
   20467 you must use 'typeof' (*note Typeof::).
   20468 
   20469  In G++, the result value of a statement expression undergoes array and
   20470 function pointer decay, and is returned by value to the enclosing
   20471 expression.  For instance, if 'A' is a class, then
   20472 
   20473              A a;
   20474 
   20475              ({a;}).Foo ()
   20476 
   20477 constructs a temporary 'A' object to hold the result of the statement
   20478 expression, and that is used to invoke 'Foo'.  Therefore the 'this'
   20479 pointer observed by 'Foo' is not the address of 'a'.
   20480 
   20481  In a statement expression, any temporaries created within a statement
   20482 are destroyed at that statement's end.  This makes statement expressions
   20483 inside macros slightly different from function calls.  In the latter
   20484 case temporaries introduced during argument evaluation are destroyed at
   20485 the end of the statement that includes the function call.  In the
   20486 statement expression case they are destroyed during the statement
   20487 expression.  For instance,
   20488 
   20489      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
   20490      template<typename T> T function(T a) { T b = a; return b + 3; }
   20491 
   20492      void foo ()
   20493      {
   20494        macro (X ());
   20495        function (X ());
   20496      }
   20497 
   20498 has different places where temporaries are destroyed.  For the 'macro'
   20499 case, the temporary 'X' is destroyed just after the initialization of
   20500 'b'.  In the 'function' case that temporary is destroyed when the
   20501 function returns.
   20502 
   20503  These considerations mean that it is probably a bad idea to use
   20504 statement expressions of this form in header files that are designed to
   20505 work with C++.  (Note that some versions of the GNU C Library contained
   20506 header files using statement expressions that lead to precisely this
   20507 bug.)
   20508 
   20509  Jumping into a statement expression with 'goto' or using a 'switch'
   20510 statement outside the statement expression with a 'case' or 'default'
   20511 label inside the statement expression is not permitted.  Jumping into a
   20512 statement expression with a computed 'goto' (*note Labels as Values::)
   20513 has undefined behavior.  Jumping out of a statement expression is
   20514 permitted, but if the statement expression is part of a larger
   20515 expression then it is unspecified which other subexpressions of that
   20516 expression have been evaluated except where the language definition
   20517 requires certain subexpressions to be evaluated before or after the
   20518 statement expression.  In any case, as with a function call, the
   20519 evaluation of a statement expression is not interleaved with the
   20520 evaluation of other parts of the containing expression.  For example,
   20521 
   20522        foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
   20523 
   20524 calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
   20525 'bar2'.  If 'bar2' is called, it is called after 'foo' and before
   20526 'bar1'.
   20527 
   20528 
   20529 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
   20530 
   20531 6.2 Locally Declared Labels
   20532 ===========================
   20533 
   20534 GCC allows you to declare "local labels" in any nested block scope.  A
   20535 local label is just like an ordinary label, but you can only reference
   20536 it (with a 'goto' statement, or by taking its address) within the block
   20537 in which it is declared.
   20538 
   20539  A local label declaration looks like this:
   20540 
   20541      __label__ LABEL;
   20542 
   20543 or
   20544 
   20545      __label__ LABEL1, LABEL2, /* ... */;
   20546 
   20547  Local label declarations must come at the beginning of the block,
   20548 before any ordinary declarations or statements.
   20549 
   20550  The label declaration defines the label _name_, but does not define the
   20551 label itself.  You must do this in the usual way, with 'LABEL:', within
   20552 the statements of the statement expression.
   20553 
   20554  The local label feature is useful for complex macros.  If a macro
   20555 contains nested loops, a 'goto' can be useful for breaking out of them.
   20556 However, an ordinary label whose scope is the whole function cannot be
   20557 used: if the macro can be expanded several times in one function, the
   20558 label is multiply defined in that function.  A local label avoids this
   20559 problem.  For example:
   20560 
   20561      #define SEARCH(value, array, target)              \
   20562      do {                                              \
   20563        __label__ found;                                \
   20564        typeof (target) _SEARCH_target = (target);      \
   20565        typeof (*(array)) *_SEARCH_array = (array);     \
   20566        int i, j;                                       \
   20567        int value;                                      \
   20568        for (i = 0; i < max; i++)                       \
   20569          for (j = 0; j < max; j++)                     \
   20570            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   20571              { (value) = i; goto found; }              \
   20572        (value) = -1;                                   \
   20573       found:;                                          \
   20574      } while (0)
   20575 
   20576  This could also be written using a statement expression:
   20577 
   20578      #define SEARCH(array, target)                     \
   20579      ({                                                \
   20580        __label__ found;                                \
   20581        typeof (target) _SEARCH_target = (target);      \
   20582        typeof (*(array)) *_SEARCH_array = (array);     \
   20583        int i, j;                                       \
   20584        int value;                                      \
   20585        for (i = 0; i < max; i++)                       \
   20586          for (j = 0; j < max; j++)                     \
   20587            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   20588              { value = i; goto found; }                \
   20589        value = -1;                                     \
   20590       found:                                           \
   20591        value;                                          \
   20592      })
   20593 
   20594  Local label declarations also make the labels they declare visible to
   20595 nested functions, if there are any.  *Note Nested Functions::, for
   20596 details.
   20597 
   20598 
   20599 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
   20600 
   20601 6.3 Labels as Values
   20602 ====================
   20603 
   20604 You can get the address of a label defined in the current function (or a
   20605 containing function) with the unary operator '&&'.  The value has type
   20606 'void *'.  This value is a constant and can be used wherever a constant
   20607 of that type is valid.  For example:
   20608 
   20609      void *ptr;
   20610      /* ... */
   20611      ptr = &&foo;
   20612 
   20613  To use these values, you need to be able to jump to one.  This is done
   20614 with the computed goto statement(1), 'goto *EXP;'.  For example,
   20615 
   20616      goto *ptr;
   20617 
   20618 Any expression of type 'void *' is allowed.
   20619 
   20620  One way of using these constants is in initializing a static array that
   20621 serves as a jump table:
   20622 
   20623      static void *array[] = { &&foo, &&bar, &&hack };
   20624 
   20625 Then you can select a label with indexing, like this:
   20626 
   20627      goto *array[i];
   20628 
   20629 Note that this does not check whether the subscript is in bounds--array
   20630 indexing in C never does that.
   20631 
   20632  Such an array of label values serves a purpose much like that of the
   20633 'switch' statement.  The 'switch' statement is cleaner, so use that
   20634 rather than an array unless the problem does not fit a 'switch'
   20635 statement very well.
   20636 
   20637  Another use of label values is in an interpreter for threaded code.
   20638 The labels within the interpreter function can be stored in the threaded
   20639 code for super-fast dispatching.
   20640 
   20641  You may not use this mechanism to jump to code in a different function.
   20642 If you do that, totally unpredictable things happen.  The best way to
   20643 avoid this is to store the label address only in automatic variables and
   20644 never pass it as an argument.
   20645 
   20646  An alternate way to write the above example is
   20647 
   20648      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
   20649                                   &&hack - &&foo };
   20650      goto *(&&foo + array[i]);
   20651 
   20652 This is more friendly to code living in shared libraries, as it reduces
   20653 the number of dynamic relocations that are needed, and by consequence,
   20654 allows the data to be read-only.
   20655 
   20656  The '&&foo' expressions for the same label might have different values
   20657 if the containing function is inlined or cloned.  If a program relies on
   20658 them being always the same, '__attribute__((__noinline__,__noclone__))'
   20659 should be used to prevent inlining and cloning.  If '&&foo' is used in a
   20660 static variable initializer, inlining and cloning is forbidden.
   20661 
   20662    ---------- Footnotes ----------
   20663 
   20664    (1) The analogous feature in Fortran is called an assigned goto, but
   20665 that name seems inappropriate in C, where one can do more than simply
   20666 store label addresses in label variables.
   20667 
   20668 
   20669 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
   20670 
   20671 6.4 Nested Functions
   20672 ====================
   20673 
   20674 A "nested function" is a function defined inside another function.
   20675 Nested functions are supported as an extension in GNU C, but are not
   20676 supported by GNU C++.
   20677 
   20678  The nested function's name is local to the block where it is defined.
   20679 For example, here we define a nested function named 'square', and call
   20680 it twice:
   20681 
   20682      foo (double a, double b)
   20683      {
   20684        double square (double z) { return z * z; }
   20685 
   20686        return square (a) + square (b);
   20687      }
   20688 
   20689  The nested function can access all the variables of the containing
   20690 function that are visible at the point of its definition.  This is
   20691 called "lexical scoping".  For example, here we show a nested function
   20692 which uses an inherited variable named 'offset':
   20693 
   20694      bar (int *array, int offset, int size)
   20695      {
   20696        int access (int *array, int index)
   20697          { return array[index + offset]; }
   20698        int i;
   20699        /* ... */
   20700        for (i = 0; i < size; i++)
   20701          /* ... */ access (array, i) /* ... */
   20702      }
   20703 
   20704  Nested function definitions are permitted within functions in the
   20705 places where variable definitions are allowed; that is, in any block,
   20706 mixed with the other declarations and statements in the block.
   20707 
   20708  It is possible to call the nested function from outside the scope of
   20709 its name by storing its address or passing the address to another
   20710 function:
   20711 
   20712      hack (int *array, int size)
   20713      {
   20714        void store (int index, int value)
   20715          { array[index] = value; }
   20716 
   20717        intermediate (store, size);
   20718      }
   20719 
   20720  Here, the function 'intermediate' receives the address of 'store' as an
   20721 argument.  If 'intermediate' calls 'store', the arguments given to
   20722 'store' are used to store into 'array'.  But this technique works only
   20723 so long as the containing function ('hack', in this example) does not
   20724 exit.
   20725 
   20726  If you try to call the nested function through its address after the
   20727 containing function exits, all hell breaks loose.  If you try to call it
   20728 after a containing scope level exits, and if it refers to some of the
   20729 variables that are no longer in scope, you may be lucky, but it's not
   20730 wise to take the risk.  If, however, the nested function does not refer
   20731 to anything that has gone out of scope, you should be safe.
   20732 
   20733  GCC implements taking the address of a nested function using a
   20734 technique called "trampolines".  This technique was described in
   20735 'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
   20736 Proceedings, October 17-21, 1988).
   20737 
   20738  A nested function can jump to a label inherited from a containing
   20739 function, provided the label is explicitly declared in the containing
   20740 function (*note Local Labels::).  Such a jump returns instantly to the
   20741 containing function, exiting the nested function that did the 'goto' and
   20742 any intermediate functions as well.  Here is an example:
   20743 
   20744      bar (int *array, int offset, int size)
   20745      {
   20746        __label__ failure;
   20747        int access (int *array, int index)
   20748          {
   20749            if (index > size)
   20750              goto failure;
   20751            return array[index + offset];
   20752          }
   20753        int i;
   20754        /* ... */
   20755        for (i = 0; i < size; i++)
   20756          /* ... */ access (array, i) /* ... */
   20757        /* ... */
   20758        return 0;
   20759 
   20760       /* Control comes here from 'access'
   20761          if it detects an error.  */
   20762       failure:
   20763        return -1;
   20764      }
   20765 
   20766  A nested function always has no linkage.  Declaring one with 'extern'
   20767 or 'static' is erroneous.  If you need to declare the nested function
   20768 before its definition, use 'auto' (which is otherwise meaningless for
   20769 function declarations).
   20770 
   20771      bar (int *array, int offset, int size)
   20772      {
   20773        __label__ failure;
   20774        auto int access (int *, int);
   20775        /* ... */
   20776        int access (int *array, int index)
   20777          {
   20778            if (index > size)
   20779              goto failure;
   20780            return array[index + offset];
   20781          }
   20782        /* ... */
   20783      }
   20784 
   20785 
   20786 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
   20787 
   20788 6.5 Constructing Function Calls
   20789 ===============================
   20790 
   20791 Using the built-in functions described below, you can record the
   20792 arguments a function received, and call another function with the same
   20793 arguments, without knowing the number or types of the arguments.
   20794 
   20795  You can also record the return value of that function call, and later
   20796 return that value, without knowing what data type the function tried to
   20797 return (as long as your caller expects that data type).
   20798 
   20799  However, these built-in functions may interact badly with some
   20800 sophisticated features or other extensions of the language.  It is,
   20801 therefore, not recommended to use them outside very simple functions
   20802 acting as mere forwarders for their arguments.
   20803 
   20804  -- Built-in Function: void * __builtin_apply_args ()
   20805      This built-in function returns a pointer to data describing how to
   20806      perform a call with the same arguments as are passed to the current
   20807      function.
   20808 
   20809      The function saves the arg pointer register, structure value
   20810      address, and all registers that might be used to pass arguments to
   20811      a function into a block of memory allocated on the stack.  Then it
   20812      returns the address of that block.
   20813 
   20814  -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
   20815           *ARGUMENTS, size_t SIZE)
   20816      This built-in function invokes FUNCTION with a copy of the
   20817      parameters described by ARGUMENTS and SIZE.
   20818 
   20819      The value of ARGUMENTS should be the value returned by
   20820      '__builtin_apply_args'.  The argument SIZE specifies the size of
   20821      the stack argument data, in bytes.
   20822 
   20823      This function returns a pointer to data describing how to return
   20824      whatever value is returned by FUNCTION.  The data is saved in a
   20825      block of memory allocated on the stack.
   20826 
   20827      It is not always simple to compute the proper value for SIZE.  The
   20828      value is used by '__builtin_apply' to compute the amount of data
   20829      that should be pushed on the stack and copied from the incoming
   20830      argument area.
   20831 
   20832  -- Built-in Function: void __builtin_return (void *RESULT)
   20833      This built-in function returns the value described by RESULT from
   20834      the containing function.  You should specify, for RESULT, a value
   20835      returned by '__builtin_apply'.
   20836 
   20837  -- Built-in Function: __builtin_va_arg_pack ()
   20838      This built-in function represents all anonymous arguments of an
   20839      inline function.  It can be used only in inline functions that are
   20840      always inlined, never compiled as a separate function, such as
   20841      those using '__attribute__ ((__always_inline__))' or '__attribute__
   20842      ((__gnu_inline__))' extern inline functions.  It must be only
   20843      passed as last argument to some other function with variable
   20844      arguments.  This is useful for writing small wrapper inlines for
   20845      variable argument functions, when using preprocessor macros is
   20846      undesirable.  For example:
   20847           extern int myprintf (FILE *f, const char *format, ...);
   20848           extern inline __attribute__ ((__gnu_inline__)) int
   20849           myprintf (FILE *f, const char *format, ...)
   20850           {
   20851             int r = fprintf (f, "myprintf: ");
   20852             if (r < 0)
   20853               return r;
   20854             int s = fprintf (f, format, __builtin_va_arg_pack ());
   20855             if (s < 0)
   20856               return s;
   20857             return r + s;
   20858           }
   20859 
   20860  -- Built-in Function: size_t __builtin_va_arg_pack_len ()
   20861      This built-in function returns the number of anonymous arguments of
   20862      an inline function.  It can be used only in inline functions that
   20863      are always inlined, never compiled as a separate function, such as
   20864      those using '__attribute__ ((__always_inline__))' or '__attribute__
   20865      ((__gnu_inline__))' extern inline functions.  For example following
   20866      does link- or run-time checking of open arguments for optimized
   20867      code:
   20868           #ifdef __OPTIMIZE__
   20869           extern inline __attribute__((__gnu_inline__)) int
   20870           myopen (const char *path, int oflag, ...)
   20871           {
   20872             if (__builtin_va_arg_pack_len () > 1)
   20873               warn_open_too_many_arguments ();
   20874 
   20875             if (__builtin_constant_p (oflag))
   20876               {
   20877                 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
   20878                   {
   20879                     warn_open_missing_mode ();
   20880                     return __open_2 (path, oflag);
   20881                   }
   20882                 return open (path, oflag, __builtin_va_arg_pack ());
   20883               }
   20884 
   20885             if (__builtin_va_arg_pack_len () < 1)
   20886               return __open_2 (path, oflag);
   20887 
   20888             return open (path, oflag, __builtin_va_arg_pack ());
   20889           }
   20890           #endif
   20891 
   20892 
   20893 File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
   20894 
   20895 6.6 Referring to a Type with 'typeof'
   20896 =====================================
   20897 
   20898 Another way to refer to the type of an expression is with 'typeof'.  The
   20899 syntax of using of this keyword looks like 'sizeof', but the construct
   20900 acts semantically like a type name defined with 'typedef'.
   20901 
   20902  There are two ways of writing the argument to 'typeof': with an
   20903 expression or with a type.  Here is an example with an expression:
   20904 
   20905      typeof (x[0](1))
   20906 
   20907 This assumes that 'x' is an array of pointers to functions; the type
   20908 described is that of the values of the functions.
   20909 
   20910  Here is an example with a typename as the argument:
   20911 
   20912      typeof (int *)
   20913 
   20914 Here the type described is that of pointers to 'int'.
   20915 
   20916  If you are writing a header file that must work when included in ISO C
   20917 programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
   20918 Keywords::.
   20919 
   20920  A 'typeof' construct can be used anywhere a typedef name can be used.
   20921 For example, you can use it in a declaration, in a cast, or inside of
   20922 'sizeof' or 'typeof'.
   20923 
   20924  The operand of 'typeof' is evaluated for its side effects if and only
   20925 if it is an expression of variably modified type or the name of such a
   20926 type.
   20927 
   20928  'typeof' is often useful in conjunction with statement expressions
   20929 (*note Statement Exprs::).  Here is how the two together can be used to
   20930 define a safe "maximum" macro which operates on any arithmetic type and
   20931 evaluates each of its arguments exactly once:
   20932 
   20933      #define max(a,b) \
   20934        ({ typeof (a) _a = (a); \
   20935            typeof (b) _b = (b); \
   20936          _a > _b ? _a : _b; })
   20937 
   20938  The reason for using names that start with underscores for the local
   20939 variables is to avoid conflicts with variable names that occur within
   20940 the expressions that are substituted for 'a' and 'b'.  Eventually we
   20941 hope to design a new form of declaration syntax that allows you to
   20942 declare variables whose scopes start only after their initializers; this
   20943 will be a more reliable way to prevent such conflicts.
   20944 
   20945 Some more examples of the use of 'typeof':
   20946 
   20947    * This declares 'y' with the type of what 'x' points to.
   20948 
   20949           typeof (*x) y;
   20950 
   20951    * This declares 'y' as an array of such values.
   20952 
   20953           typeof (*x) y[4];
   20954 
   20955    * This declares 'y' as an array of pointers to characters:
   20956 
   20957           typeof (typeof (char *)[4]) y;
   20958 
   20959      It is equivalent to the following traditional C declaration:
   20960 
   20961           char *y[4];
   20962 
   20963      To see the meaning of the declaration using 'typeof', and why it
   20964      might be a useful way to write, rewrite it with these macros:
   20965 
   20966           #define pointer(T)  typeof(T *)
   20967           #define array(T, N) typeof(T [N])
   20968 
   20969      Now the declaration can be rewritten this way:
   20970 
   20971           array (pointer (char), 4) y;
   20972 
   20973      Thus, 'array (pointer (char), 4)' is the type of arrays of 4
   20974      pointers to 'char'.
   20975 
   20976  _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more
   20977 limited extension that permitted one to write
   20978 
   20979      typedef T = EXPR;
   20980 
   20981 with the effect of declaring T to have the type of the expression EXPR.
   20982 This extension does not work with GCC 3 (versions between 3.0 and 3.2
   20983 crash; 3.2.1 and later give an error).  Code that relies on it should be
   20984 rewritten to use 'typeof':
   20985 
   20986      typedef typeof(EXPR) T;
   20987 
   20988 This works with all versions of GCC.
   20989 
   20990 
   20991 File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
   20992 
   20993 6.7 Conditionals with Omitted Operands
   20994 ======================================
   20995 
   20996 The middle operand in a conditional expression may be omitted.  Then if
   20997 the first operand is nonzero, its value is the value of the conditional
   20998 expression.
   20999 
   21000  Therefore, the expression
   21001 
   21002      x ? : y
   21003 
   21004 has the value of 'x' if that is nonzero; otherwise, the value of 'y'.
   21005 
   21006  This example is perfectly equivalent to
   21007 
   21008      x ? x : y
   21009 
   21010 In this simple case, the ability to omit the middle operand is not
   21011 especially useful.  When it becomes useful is when the first operand
   21012 does, or may (if it is a macro argument), contain a side effect.  Then
   21013 repeating the operand in the middle would perform the side effect twice.
   21014 Omitting the middle operand uses the value already computed without the
   21015 undesirable effects of recomputing it.
   21016 
   21017 
   21018 File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
   21019 
   21020 6.8 128-bit integers
   21021 ====================
   21022 
   21023 As an extension the integer scalar type '__int128' is supported for
   21024 targets which have an integer mode wide enough to hold 128 bits.  Simply
   21025 write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
   21026 for an unsigned 128-bit integer.  There is no support in GCC for
   21027 expressing an integer constant of type '__int128' for targets with 'long
   21028 long' integer less than 128 bits wide.
   21029 
   21030 
   21031 File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
   21032 
   21033 6.9 Double-Word Integers
   21034 ========================
   21035 
   21036 ISO C99 supports data types for integers that are at least 64 bits wide,
   21037 and as an extension GCC supports them in C90 mode and in C++.  Simply
   21038 write 'long long int' for a signed integer, or 'unsigned long long int'
   21039 for an unsigned integer.  To make an integer constant of type 'long long
   21040 int', add the suffix 'LL' to the integer.  To make an integer constant
   21041 of type 'unsigned long long int', add the suffix 'ULL' to the integer.
   21042 
   21043  You can use these types in arithmetic like any other integer types.
   21044 Addition, subtraction, and bitwise boolean operations on these types are
   21045 open-coded on all types of machines.  Multiplication is open-coded if
   21046 the machine supports a fullword-to-doubleword widening multiply
   21047 instruction.  Division and shifts are open-coded only on machines that
   21048 provide special support.  The operations that are not open-coded use
   21049 special library routines that come with GCC.
   21050 
   21051  There may be pitfalls when you use 'long long' types for function
   21052 arguments without function prototypes.  If a function expects type 'int'
   21053 for its argument, and you pass a value of type 'long long int',
   21054 confusion results because the caller and the subroutine disagree about
   21055 the number of bytes for the argument.  Likewise, if the function expects
   21056 'long long int' and you pass 'int'.  The best way to avoid such problems
   21057 is to use prototypes.
   21058 
   21059 
   21060 File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
   21061 
   21062 6.10 Complex Numbers
   21063 ====================
   21064 
   21065 ISO C99 supports complex floating data types, and as an extension GCC
   21066 supports them in C90 mode and in C++.  GCC also supports complex integer
   21067 data types which are not part of ISO C99.  You can declare complex types
   21068 using the keyword '_Complex'.  As an extension, the older GNU keyword
   21069 '__complex__' is also supported.
   21070 
   21071  For example, '_Complex double x;' declares 'x' as a variable whose real
   21072 part and imaginary part are both of type 'double'.  '_Complex short int
   21073 y;' declares 'y' to have real and imaginary parts of type 'short int';
   21074 this is not likely to be useful, but it shows that the set of complex
   21075 types is complete.
   21076 
   21077  To write a constant with a complex data type, use the suffix 'i' or 'j'
   21078 (either one; they are equivalent).  For example, '2.5fi' has type
   21079 '_Complex float' and '3i' has type '_Complex int'.  Such a constant
   21080 always has a pure imaginary value, but you can form any complex value
   21081 you like by adding one to a real constant.  This is a GNU extension; if
   21082 you have an ISO C99 conforming C library (such as the GNU C Library),
   21083 and want to construct complex constants of floating type, you should
   21084 include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.
   21085 
   21086  To extract the real part of a complex-valued expression EXP, write
   21087 '__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
   21088 This is a GNU extension; for values of floating type, you should use the
   21089 ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
   21090 'cimagl', declared in '<complex.h>' and also provided as built-in
   21091 functions by GCC.
   21092 
   21093  The operator '~' performs complex conjugation when used on a value with
   21094 a complex type.  This is a GNU extension; for values of floating type,
   21095 you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
   21096 declared in '<complex.h>' and also provided as built-in functions by
   21097 GCC.
   21098 
   21099  GCC can allocate complex automatic variables in a noncontiguous
   21100 fashion; it's even possible for the real part to be in a register while
   21101 the imaginary part is on the stack (or vice versa).  Only the DWARF 2
   21102 debug info format can represent this, so use of DWARF 2 is recommended.
   21103 If you are using the stabs debug info format, GCC describes a
   21104 noncontiguous complex variable as if it were two separate variables of
   21105 noncomplex type.  If the variable's actual name is 'foo', the two
   21106 fictitious variables are named 'foo$real' and 'foo$imag'.  You can
   21107 examine and set these two fictitious variables with your debugger.
   21108 
   21109 
   21110 File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
   21111 
   21112 6.11 Additional Floating Types
   21113 ==============================
   21114 
   21115 As an extension, GNU C supports additional floating types, '__float80'
   21116 and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode')
   21117 floating types.  Support for additional types includes the arithmetic
   21118 operators: add, subtract, multiply, divide; unary arithmetic operators;
   21119 relational operators; equality operators; and conversions to and from
   21120 integer and other floating types.  Use a suffix 'w' or 'W' in a literal
   21121 constant of type '__float80' and 'q' or 'Q' for '_float128'.  You can
   21122 declare complex types using the corresponding internal complex type,
   21123 'XCmode' for '__float80' type and 'TCmode' for '__float128' type:
   21124 
   21125      typedef _Complex float __attribute__((mode(TC))) _Complex128;
   21126      typedef _Complex float __attribute__((mode(XC))) _Complex80;
   21127 
   21128  Not all targets support additional floating-point types.  '__float80'
   21129 and '__float128' types are supported on i386, x86_64 and IA-64 targets.
   21130 The '__float128' type is supported on hppa HP-UX targets.
   21131 
   21132 
   21133 File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
   21134 
   21135 6.12 Half-Precision Floating Point
   21136 ==================================
   21137 
   21138 On ARM targets, GCC supports half-precision (16-bit) floating point via
   21139 the '__fp16' type.  You must enable this type explicitly with the
   21140 '-mfp16-format' command-line option in order to use it.
   21141 
   21142  ARM supports two incompatible representations for half-precision
   21143 floating-point values.  You must choose one of the representations and
   21144 use it consistently in your program.
   21145 
   21146  Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
   21147 format can represent normalized values in the range of 2^{-14} to 65504.
   21148 There are 11 bits of significand precision, approximately 3 decimal
   21149 digits.
   21150 
   21151  Specifying '-mfp16-format=alternative' selects the ARM alternative
   21152 format.  This representation is similar to the IEEE format, but does not
   21153 support infinities or NaNs.  Instead, the range of exponents is
   21154 extended, so that this format can represent normalized values in the
   21155 range of 2^{-14} to 131008.
   21156 
   21157  The '__fp16' type is a storage format only.  For purposes of arithmetic
   21158 and other operations, '__fp16' values in C or C++ expressions are
   21159 automatically promoted to 'float'.  In addition, you cannot declare a
   21160 function with a return value or parameters of type '__fp16'.
   21161 
   21162  Note that conversions from 'double' to '__fp16' involve an intermediate
   21163 conversion to 'float'.  Because of rounding, this can sometimes produce
   21164 a different result than a direct conversion.
   21165 
   21166  ARM provides hardware support for conversions between '__fp16' and
   21167 'float' values as an extension to VFP and NEON (Advanced SIMD). GCC
   21168 generates code using these hardware instructions if you compile with
   21169 options to select an FPU that provides them; for example,
   21170 '-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format'
   21171 option to select a half-precision format.
   21172 
   21173  Language-level support for the '__fp16' data type is independent of
   21174 whether GCC generates code using hardware floating-point instructions.
   21175 In cases where hardware support is not specified, GCC implements
   21176 conversions between '__fp16' and 'float' values as library calls.
   21177 
   21178 
   21179 File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
   21180 
   21181 6.13 Decimal Floating Types
   21182 ===========================
   21183 
   21184 As an extension, GNU C supports decimal floating types as defined in the
   21185 N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
   21186 GCC will evolve as the draft technical report changes.  Calling
   21187 conventions for any target might also change.  Not all targets support
   21188 decimal floating types.
   21189 
   21190  The decimal floating types are '_Decimal32', '_Decimal64', and
   21191 '_Decimal128'.  They use a radix of ten, unlike the floating types
   21192 'float', 'double', and 'long double' whose radix is not specified by the
   21193 C standard but is usually two.
   21194 
   21195  Support for decimal floating types includes the arithmetic operators
   21196 add, subtract, multiply, divide; unary arithmetic operators; relational
   21197 operators; equality operators; and conversions to and from integer and
   21198 other floating types.  Use a suffix 'df' or 'DF' in a literal constant
   21199 of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
   21200 for '_Decimal128'.
   21201 
   21202  GCC support of decimal float as specified by the draft technical report
   21203 is incomplete:
   21204 
   21205    * When the value of a decimal floating type cannot be represented in
   21206      the integer type to which it is being converted, the result is
   21207      undefined rather than the result value specified by the draft
   21208      technical report.
   21209 
   21210    * GCC does not provide the C library functionality associated with
   21211      'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
   21212      must come from a separate C library implementation.  Because of
   21213      this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
   21214      indicate that the implementation conforms to the technical report.
   21215 
   21216  Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
   21217 the DWARF 2 debug information format.
   21218 
   21219 
   21220 File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
   21221 
   21222 6.14 Hex Floats
   21223 ===============
   21224 
   21225 ISO C99 supports floating-point numbers written not only in the usual
   21226 decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3'
   21227 written in hexadecimal format.  As a GNU extension, GCC supports this in
   21228 C90 mode (except in some cases when strictly conforming) and in C++.  In
   21229 that format the '0x' hex introducer and the 'p' or 'P' exponent field
   21230 are mandatory.  The exponent is a decimal number that indicates the
   21231 power of 2 by which the significant part is multiplied.  Thus '0x1.f' is
   21232 1 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same
   21233 as '1.55e1'.
   21234 
   21235  Unlike for floating-point numbers in the decimal notation the exponent
   21236 is always required in the hexadecimal notation.  Otherwise the compiler
   21237 would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
   21238 could mean '1.0f' or '1.9375' since 'f' is also the extension for
   21239 floating-point constants of type 'float'.
   21240 
   21241 
   21242 File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
   21243 
   21244 6.15 Fixed-Point Types
   21245 ======================
   21246 
   21247 As an extension, GNU C supports fixed-point types as defined in the
   21248 N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
   21249 will evolve as the draft technical report changes.  Calling conventions
   21250 for any target might also change.  Not all targets support fixed-point
   21251 types.
   21252 
   21253  The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
   21254 'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
   21255 'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
   21256 _Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
   21257 '_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
   21258 long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
   21259 '_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
   21260 'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
   21261 '_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
   21262 _Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
   21263 unsigned long _Accum', '_Sat unsigned long long _Accum'.
   21264 
   21265  Fixed-point data values contain fractional and optional integral parts.
   21266 The format of fixed-point data varies and depends on the target machine.
   21267 
   21268  Support for fixed-point types includes:
   21269    * prefix and postfix increment and decrement operators ('++', '--')
   21270    * unary arithmetic operators ('+', '-', '!')
   21271    * binary arithmetic operators ('+', '-', '*', '/')
   21272    * binary shift operators ('<<', '>>')
   21273    * relational operators ('<', '<=', '>=', '>')
   21274    * equality operators ('==', '!=')
   21275    * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
   21276    * conversions to and from integer, floating-point, or fixed-point
   21277      types
   21278 
   21279  Use a suffix in a fixed-point literal constant:
   21280    * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
   21281    * 'r' or 'R' for '_Fract' and '_Sat _Fract'
   21282    * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
   21283    * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
   21284    * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
   21285      _Fract'
   21286    * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
   21287    * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
   21288      _Fract'
   21289    * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
   21290      long long _Fract'
   21291    * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
   21292    * 'k' or 'K' for '_Accum' and '_Sat _Accum'
   21293    * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
   21294    * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
   21295    * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
   21296      _Accum'
   21297    * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
   21298    * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
   21299      _Accum'
   21300    * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
   21301      long long _Accum'
   21302 
   21303  GCC support of fixed-point types as specified by the draft technical
   21304 report is incomplete:
   21305 
   21306    * Pragmas to control overflow and rounding behaviors are not
   21307      implemented.
   21308 
   21309  Fixed-point types are supported by the DWARF 2 debug information
   21310 format.
   21311 
   21312 
   21313 File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
   21314 
   21315 6.16 Named Address Spaces
   21316 =========================
   21317 
   21318 As an extension, GNU C supports named address spaces as defined in the
   21319 N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
   21320 GCC will evolve as the draft technical report changes.  Calling
   21321 conventions for any target might also change.  At present, only the AVR,
   21322 SPU, M32C, and RL78 targets support address spaces other than the
   21323 generic address space.
   21324 
   21325  Address space identifiers may be used exactly like any other C type
   21326 qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
   21327 more details.
   21328 
   21329 6.16.1 AVR Named Address Spaces
   21330 -------------------------------
   21331 
   21332 On the AVR target, there are several address spaces that can be used in
   21333 order to put read-only data into the flash memory and access that data
   21334 by means of the special instructions 'LPM' or 'ELPM' needed to read from
   21335 flash.
   21336 
   21337  Per default, any data including read-only data is located in RAM (the
   21338 generic address space) so that non-generic address spaces are needed to
   21339 locate read-only data in flash memory _and_ to generate the right
   21340 instructions to access this data without using (inline) assembler code.
   21341 
   21342 '__flash'
   21343      The '__flash' qualifier locates data in the '.progmem.data'
   21344      section.  Data is read using the 'LPM' instruction.  Pointers to
   21345      this address space are 16 bits wide.
   21346 
   21347 '__flash1'
   21348 '__flash2'
   21349 '__flash3'
   21350 '__flash4'
   21351 '__flash5'
   21352      These are 16-bit address spaces locating data in section
   21353      '.progmemN.data' where N refers to address space '__flashN'.  The
   21354      compiler sets the 'RAMPZ' segment register appropriately before
   21355      reading data by means of the 'ELPM' instruction.
   21356 
   21357 '__memx'
   21358      This is a 24-bit address space that linearizes flash and RAM: If
   21359      the high bit of the address is set, data is read from RAM using the
   21360      lower two bytes as RAM address.  If the high bit of the address is
   21361      clear, data is read from flash with 'RAMPZ' set according to the
   21362      high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
   21363      Built-in Functions.
   21364 
   21365      Objects in this address space are located in '.progmemx.data'.
   21366 
   21367  Example
   21368 
   21369      char my_read (const __flash char ** p)
   21370      {
   21371          /* p is a pointer to RAM that points to a pointer to flash.
   21372             The first indirection of p reads that flash pointer
   21373             from RAM and the second indirection reads a char from this
   21374             flash address.  */
   21375 
   21376          return **p;
   21377      }
   21378 
   21379      /* Locate array[] in flash memory */
   21380      const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
   21381 
   21382      int i = 1;
   21383 
   21384      int main (void)
   21385      {
   21386         /* Return 17 by reading from flash memory */
   21387         return array[array[i]];
   21388      }
   21389 
   21390 For each named address space supported by avr-gcc there is an equally
   21391 named but uppercase built-in macro defined.  The purpose is to
   21392 facilitate testing if respective address space support is available or
   21393 not:
   21394 
   21395      #ifdef __FLASH
   21396      const __flash int var = 1;
   21397 
   21398      int read_var (void)
   21399      {
   21400          return var;
   21401      }
   21402      #else
   21403      #include <avr/pgmspace.h> /* From AVR-LibC */
   21404 
   21405      const int var PROGMEM = 1;
   21406 
   21407      int read_var (void)
   21408      {
   21409          return (int) pgm_read_word (&var);
   21410      }
   21411      #endif /* __FLASH */
   21412 
   21413 Notice that attribute *note 'progmem': AVR Variable Attributes. locates
   21414 data in flash but accesses to these data read from generic address
   21415 space, i.e. from RAM, so that you need special accessors like
   21416 'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
   21417 together with attribute 'progmem'.
   21418 
   21419 Limitations and caveats
   21420 
   21421    * Reading across the 64 KiB section boundary of the '__flash' or
   21422      '__flashN' address spaces shows undefined behavior.  The only
   21423      address space that supports reading across the 64 KiB flash segment
   21424      boundaries is '__memx'.
   21425 
   21426    * If you use one of the '__flashN' address spaces you must arrange
   21427      your linker script to locate the '.progmemN.data' sections
   21428      according to your needs.
   21429 
   21430    * Any data or pointers to the non-generic address spaces must be
   21431      qualified as 'const', i.e. as read-only data.  This still applies
   21432      if the data in one of these address spaces like software version
   21433      number or calibration lookup table are intended to be changed after
   21434      load time by, say, a boot loader.  In this case the right
   21435      qualification is 'const' 'volatile' so that the compiler must not
   21436      optimize away known values or insert them as immediates into
   21437      operands of instructions.
   21438 
   21439    * The following code initializes a variable 'pfoo' located in static
   21440      storage with a 24-bit address:
   21441           extern const __memx char foo;
   21442           const __memx void *pfoo = &foo;
   21443 
   21444      Such code requires at least binutils 2.23, see
   21445      PR13503 (http://sourceware.org/PR13503).
   21446 
   21447 6.16.2 M32C Named Address Spaces
   21448 --------------------------------
   21449 
   21450 On the M32C target, with the R8C and M16C CPU variants, variables
   21451 qualified with '__far' are accessed using 32-bit addresses in order to
   21452 access memory beyond the first 64 Ki bytes.  If '__far' is used with the
   21453 M32CM or M32C CPU variants, it has no effect.
   21454 
   21455 6.16.3 RL78 Named Address Spaces
   21456 --------------------------------
   21457 
   21458 On the RL78 target, variables qualified with '__far' are accessed with
   21459 32-bit pointers (20-bit addresses) rather than the default 16-bit
   21460 addresses.  Non-far variables are assumed to appear in the topmost
   21461 64 KiB of the address space.
   21462 
   21463 6.16.4 SPU Named Address Spaces
   21464 -------------------------------
   21465 
   21466 On the SPU target variables may be declared as belonging to another
   21467 address space by qualifying the type with the '__ea' address space
   21468 identifier:
   21469 
   21470      extern int __ea i;
   21471 
   21472 The compiler generates special code to access the variable 'i'.  It may
   21473 use runtime library support, or generate special machine instructions to
   21474 access that address space.
   21475 
   21476 
   21477 File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
   21478 
   21479 6.17 Arrays of Length Zero
   21480 ==========================
   21481 
   21482 Zero-length arrays are allowed in GNU C.  They are very useful as the
   21483 last element of a structure that is really a header for a
   21484 variable-length object:
   21485 
   21486      struct line {
   21487        int length;
   21488        char contents[0];
   21489      };
   21490 
   21491      struct line *thisline = (struct line *)
   21492        malloc (sizeof (struct line) + this_length);
   21493      thisline->length = this_length;
   21494 
   21495  In ISO C90, you would have to give 'contents' a length of 1, which
   21496 means either you waste space or complicate the argument to 'malloc'.
   21497 
   21498  In ISO C99, you would use a "flexible array member", which is slightly
   21499 different in syntax and semantics:
   21500 
   21501    * Flexible array members are written as 'contents[]' without the '0'.
   21502 
   21503    * Flexible array members have incomplete type, and so the 'sizeof'
   21504      operator may not be applied.  As a quirk of the original
   21505      implementation of zero-length arrays, 'sizeof' evaluates to zero.
   21506 
   21507    * Flexible array members may only appear as the last member of a
   21508      'struct' that is otherwise non-empty.
   21509 
   21510    * A structure containing a flexible array member, or a union
   21511      containing such a structure (possibly recursively), may not be a
   21512      member of a structure or an element of an array.  (However, these
   21513      uses are permitted by GCC as extensions.)
   21514 
   21515  GCC versions before 3.0 allowed zero-length arrays to be statically
   21516 initialized, as if they were flexible arrays.  In addition to those
   21517 cases that were useful, it also allowed initializations in situations
   21518 that would corrupt later data.  Non-empty initialization of zero-length
   21519 arrays is now treated like any case where there are more initializer
   21520 elements than the array holds, in that a suitable warning about "excess
   21521 elements in array" is given, and the excess elements (all of them, in
   21522 this case) are ignored.
   21523 
   21524  Instead GCC allows static initialization of flexible array members.
   21525 This is equivalent to defining a new structure containing the original
   21526 structure followed by an array of sufficient size to contain the data.
   21527 E.g. in the following, 'f1' is constructed as if it were declared like
   21528 'f2'.
   21529 
   21530      struct f1 {
   21531        int x; int y[];
   21532      } f1 = { 1, { 2, 3, 4 } };
   21533 
   21534      struct f2 {
   21535        struct f1 f1; int data[3];
   21536      } f2 = { { 1 }, { 2, 3, 4 } };
   21537 
   21538 The convenience of this extension is that 'f1' has the desired type,
   21539 eliminating the need to consistently refer to 'f2.f1'.
   21540 
   21541  This has symmetry with normal static arrays, in that an array of
   21542 unknown size is also written with '[]'.
   21543 
   21544  Of course, this extension only makes sense if the extra data comes at
   21545 the end of a top-level object, as otherwise we would be overwriting data
   21546 at subsequent offsets.  To avoid undue complication and confusion with
   21547 initialization of deeply nested arrays, we simply disallow any non-empty
   21548 initialization except when the structure is the top-level object.  For
   21549 example:
   21550 
   21551      struct foo { int x; int y[]; };
   21552      struct bar { struct foo z; };
   21553 
   21554      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
   21555      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
   21556      struct bar c = { { 1, { } } };            // Valid.
   21557      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
   21558 
   21559 
   21560 File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
   21561 
   21562 6.18 Structures With No Members
   21563 ===============================
   21564 
   21565 GCC permits a C structure to have no members:
   21566 
   21567      struct empty {
   21568      };
   21569 
   21570  The structure has size zero.  In C++, empty structures are part of the
   21571 language.  G++ treats empty structures as if they had a single member of
   21572 type 'char'.
   21573 
   21574 
   21575 File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
   21576 
   21577 6.19 Arrays of Variable Length
   21578 ==============================
   21579 
   21580 Variable-length automatic arrays are allowed in ISO C99, and as an
   21581 extension GCC accepts them in C90 mode and in C++.  These arrays are
   21582 declared like any other automatic arrays, but with a length that is not
   21583 a constant expression.  The storage is allocated at the point of
   21584 declaration and deallocated when the block scope containing the
   21585 declaration exits.  For example:
   21586 
   21587      FILE *
   21588      concat_fopen (char *s1, char *s2, char *mode)
   21589      {
   21590        char str[strlen (s1) + strlen (s2) + 1];
   21591        strcpy (str, s1);
   21592        strcat (str, s2);
   21593        return fopen (str, mode);
   21594      }
   21595 
   21596  Jumping or breaking out of the scope of the array name deallocates the
   21597 storage.  Jumping into the scope is not allowed; you get an error
   21598 message for it.
   21599 
   21600  You can use the function 'alloca' to get an effect much like
   21601 variable-length arrays.  The function 'alloca' is available in many
   21602 other C implementations (but not in all).  On the other hand,
   21603 variable-length arrays are more elegant.
   21604 
   21605  There are other differences between these two methods.  Space allocated
   21606 with 'alloca' exists until the containing _function_ returns.  The space
   21607 for a variable-length array is deallocated as soon as the array name's
   21608 scope ends.  (If you use both variable-length arrays and 'alloca' in the
   21609 same function, deallocation of a variable-length array also deallocates
   21610 anything more recently allocated with 'alloca'.)
   21611 
   21612  You can also use variable-length arrays as arguments to functions:
   21613 
   21614      struct entry
   21615      tester (int len, char data[len][len])
   21616      {
   21617        /* ... */
   21618      }
   21619 
   21620  The length of an array is computed once when the storage is allocated
   21621 and is remembered for the scope of the array in case you access it with
   21622 'sizeof'.
   21623 
   21624  If you want to pass the array first and the length afterward, you can
   21625 use a forward declaration in the parameter list--another GNU extension.
   21626 
   21627      struct entry
   21628      tester (int len; char data[len][len], int len)
   21629      {
   21630        /* ... */
   21631      }
   21632 
   21633  The 'int len' before the semicolon is a "parameter forward
   21634 declaration", and it serves the purpose of making the name 'len' known
   21635 when the declaration of 'data' is parsed.
   21636 
   21637  You can write any number of such parameter forward declarations in the
   21638 parameter list.  They can be separated by commas or semicolons, but the
   21639 last one must end with a semicolon, which is followed by the "real"
   21640 parameter declarations.  Each forward declaration must match a "real"
   21641 declaration in parameter name and data type.  ISO C99 does not support
   21642 parameter forward declarations.
   21643 
   21644 
   21645 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
   21646 
   21647 6.20 Macros with a Variable Number of Arguments.
   21648 ================================================
   21649 
   21650 In the ISO C standard of 1999, a macro can be declared to accept a
   21651 variable number of arguments much as a function can.  The syntax for
   21652 defining the macro is similar to that of a function.  Here is an
   21653 example:
   21654 
   21655      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
   21656 
   21657 Here '...' is a "variable argument".  In the invocation of such a macro,
   21658 it represents the zero or more tokens until the closing parenthesis that
   21659 ends the invocation, including any commas.  This set of tokens replaces
   21660 the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
   21661 the CPP manual for more information.
   21662 
   21663  GCC has long supported variadic macros, and used a different syntax
   21664 that allowed you to give a name to the variable arguments just like any
   21665 other argument.  Here is an example:
   21666 
   21667      #define debug(format, args...) fprintf (stderr, format, args)
   21668 
   21669 This is in all ways equivalent to the ISO C example above, but arguably
   21670 more readable and descriptive.
   21671 
   21672  GNU CPP has two further variadic macro extensions, and permits them to
   21673 be used with either of the above forms of macro definition.
   21674 
   21675  In standard C, you are not allowed to leave the variable argument out
   21676 entirely; but you are allowed to pass an empty argument.  For example,
   21677 this invocation is invalid in ISO C, because there is no comma after the
   21678 string:
   21679 
   21680      debug ("A message")
   21681 
   21682  GNU CPP permits you to completely omit the variable arguments in this
   21683 way.  In the above examples, the compiler would complain, though since
   21684 the expansion of the macro still has the extra comma after the format
   21685 string.
   21686 
   21687  To help solve this problem, CPP behaves specially for variable
   21688 arguments used with the token paste operator, '##'.  If instead you
   21689 write
   21690 
   21691      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
   21692 
   21693 and if the variable arguments are omitted or empty, the '##' operator
   21694 causes the preprocessor to remove the comma before it.  If you do
   21695 provide some variable arguments in your macro invocation, GNU CPP does
   21696 not complain about the paste operation and instead places the variable
   21697 arguments after the comma.  Just like any other pasted macro argument,
   21698 these arguments are not macro expanded.
   21699 
   21700 
   21701 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
   21702 
   21703 6.21 Slightly Looser Rules for Escaped Newlines
   21704 ===============================================
   21705 
   21706 Recently, the preprocessor has relaxed its treatment of escaped
   21707 newlines.  Previously, the newline had to immediately follow a
   21708 backslash.  The current implementation allows whitespace in the form of
   21709 spaces, horizontal and vertical tabs, and form feeds between the
   21710 backslash and the subsequent newline.  The preprocessor issues a
   21711 warning, but treats it as a valid escaped newline and combines the two
   21712 lines to form a single logical line.  This works within comments and
   21713 tokens, as well as between tokens.  Comments are _not_ treated as
   21714 whitespace for the purposes of this relaxation, since they have not yet
   21715 been replaced with spaces.
   21716 
   21717 
   21718 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
   21719 
   21720 6.22 Non-Lvalue Arrays May Have Subscripts
   21721 ==========================================
   21722 
   21723 In ISO C99, arrays that are not lvalues still decay to pointers, and may
   21724 be subscripted, although they may not be modified or used after the next
   21725 sequence point and the unary '&' operator may not be applied to them.
   21726 As an extension, GNU C allows such arrays to be subscripted in C90 mode,
   21727 though otherwise they do not decay to pointers outside C99 mode.  For
   21728 example, this is valid in GNU C though not valid in C90:
   21729 
   21730      struct foo {int a[4];};
   21731 
   21732      struct foo f();
   21733 
   21734      bar (int index)
   21735      {
   21736        return f().a[index];
   21737      }
   21738 
   21739 
   21740 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
   21741 
   21742 6.23 Arithmetic on 'void'- and Function-Pointers
   21743 ================================================
   21744 
   21745 In GNU C, addition and subtraction operations are supported on pointers
   21746 to 'void' and on pointers to functions.  This is done by treating the
   21747 size of a 'void' or of a function as 1.
   21748 
   21749  A consequence of this is that 'sizeof' is also allowed on 'void' and on
   21750 function types, and returns 1.
   21751 
   21752  The option '-Wpointer-arith' requests a warning if these extensions are
   21753 used.
   21754 
   21755 
   21756 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
   21757 
   21758 6.24 Non-Constant Initializers
   21759 ==============================
   21760 
   21761 As in standard C++ and ISO C99, the elements of an aggregate initializer
   21762 for an automatic variable are not required to be constant expressions in
   21763 GNU C.  Here is an example of an initializer with run-time varying
   21764 elements:
   21765 
   21766      foo (float f, float g)
   21767      {
   21768        float beat_freqs[2] = { f-g, f+g };
   21769        /* ... */
   21770      }
   21771 
   21772 
   21773 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
   21774 
   21775 6.25 Compound Literals
   21776 ======================
   21777 
   21778 ISO C99 supports compound literals.  A compound literal looks like a
   21779 cast containing an initializer.  Its value is an object of the type
   21780 specified in the cast, containing the elements specified in the
   21781 initializer; it is an lvalue.  As an extension, GCC supports compound
   21782 literals in C90 mode and in C++, though the semantics are somewhat
   21783 different in C++.
   21784 
   21785  Usually, the specified type is a structure.  Assume that 'struct foo'
   21786 and 'structure' are declared as shown:
   21787 
   21788      struct foo {int a; char b[2];} structure;
   21789 
   21790 Here is an example of constructing a 'struct foo' with a compound
   21791 literal:
   21792 
   21793      structure = ((struct foo) {x + y, 'a', 0});
   21794 
   21795 This is equivalent to writing the following:
   21796 
   21797      {
   21798        struct foo temp = {x + y, 'a', 0};
   21799        structure = temp;
   21800      }
   21801 
   21802  You can also construct an array, though this is dangerous in C++, as
   21803 explained below.  If all the elements of the compound literal are (made
   21804 up of) simple constant expressions, suitable for use in initializers of
   21805 objects of static storage duration, then the compound literal can be
   21806 coerced to a pointer to its first element and used in such an
   21807 initializer, as shown here:
   21808 
   21809      char **foo = (char *[]) { "x", "y", "z" };
   21810 
   21811  Compound literals for scalar types and union types are also allowed,
   21812 but then the compound literal is equivalent to a cast.
   21813 
   21814  As a GNU extension, GCC allows initialization of objects with static
   21815 storage duration by compound literals (which is not possible in ISO C99,
   21816 because the initializer is not a constant).  It is handled as if the
   21817 object is initialized only with the bracket enclosed list if the types
   21818 of the compound literal and the object match.  The initializer list of
   21819 the compound literal must be constant.  If the object being initialized
   21820 has array type of unknown size, the size is determined by compound
   21821 literal size.
   21822 
   21823      static struct foo x = (struct foo) {1, 'a', 'b'};
   21824      static int y[] = (int []) {1, 2, 3};
   21825      static int z[] = (int [3]) {1};
   21826 
   21827 The above lines are equivalent to the following:
   21828      static struct foo x = {1, 'a', 'b'};
   21829      static int y[] = {1, 2, 3};
   21830      static int z[] = {1, 0, 0};
   21831 
   21832  In C, a compound literal designates an unnamed object with static or
   21833 automatic storage duration.  In C++, a compound literal designates a
   21834 temporary object, which only lives until the end of its full-expression.
   21835 As a result, well-defined C code that takes the address of a subobject
   21836 of a compound literal can be undefined in C++.  For instance, if the
   21837 array compound literal example above appeared inside a function, any
   21838 subsequent use of 'foo' in C++ has undefined behavior because the
   21839 lifetime of the array ends after the declaration of 'foo'.  As a result,
   21840 the C++ compiler now rejects the conversion of a temporary array to a
   21841 pointer.
   21842 
   21843  As an optimization, the C++ compiler sometimes gives array compound
   21844 literals longer lifetimes: when the array either appears outside a
   21845 function or has const-qualified type.  If 'foo' and its initializer had
   21846 elements of 'char *const' type rather than 'char *', or if 'foo' were a
   21847 global variable, the array would have static storage duration.  But it
   21848 is probably safest just to avoid the use of array compound literals in
   21849 code compiled as C++.
   21850 
   21851 
   21852 File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
   21853 
   21854 6.26 Designated Initializers
   21855 ============================
   21856 
   21857 Standard C90 requires the elements of an initializer to appear in a
   21858 fixed order, the same as the order of the elements in the array or
   21859 structure being initialized.
   21860 
   21861  In ISO C99 you can give the elements in any order, specifying the array
   21862 indices or structure field names they apply to, and GNU C allows this as
   21863 an extension in C90 mode as well.  This extension is not implemented in
   21864 GNU C++.
   21865 
   21866  To specify an array index, write '[INDEX] =' before the element value.
   21867 For example,
   21868 
   21869      int a[6] = { [4] = 29, [2] = 15 };
   21870 
   21871 is equivalent to
   21872 
   21873      int a[6] = { 0, 0, 15, 0, 29, 0 };
   21874 
   21875 The index values must be constant expressions, even if the array being
   21876 initialized is automatic.
   21877 
   21878  An alternative syntax for this that has been obsolete since GCC 2.5 but
   21879 GCC still accepts is to write '[INDEX]' before the element value, with
   21880 no '='.
   21881 
   21882  To initialize a range of elements to the same value, write '[FIRST ...
   21883 LAST] = VALUE'.  This is a GNU extension.  For example,
   21884 
   21885      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
   21886 
   21887 If the value in it has side-effects, the side-effects happen only once,
   21888 not for each initialized field by the range initializer.
   21889 
   21890 Note that the length of the array is the highest value specified plus
   21891 one.
   21892 
   21893  In a structure initializer, specify the name of a field to initialize
   21894 with '.FIELDNAME =' before the element value.  For example, given the
   21895 following structure,
   21896 
   21897      struct point { int x, y; };
   21898 
   21899 the following initialization
   21900 
   21901      struct point p = { .y = yvalue, .x = xvalue };
   21902 
   21903 is equivalent to
   21904 
   21905      struct point p = { xvalue, yvalue };
   21906 
   21907  Another syntax that has the same meaning, obsolete since GCC 2.5, is
   21908 'FIELDNAME:', as shown here:
   21909 
   21910      struct point p = { y: yvalue, x: xvalue };
   21911 
   21912  The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
   21913 use a designator (or the obsolete colon syntax) when initializing a
   21914 union, to specify which element of the union should be used.  For
   21915 example,
   21916 
   21917      union foo { int i; double d; };
   21918 
   21919      union foo f = { .d = 4 };
   21920 
   21921 converts 4 to a 'double' to store it in the union using the second
   21922 element.  By contrast, casting 4 to type 'union foo' stores it into the
   21923 union as the integer 'i', since it is an integer.  (*Note Cast to
   21924 Union::.)
   21925 
   21926  You can combine this technique of naming elements with ordinary C
   21927 initialization of successive elements.  Each initializer element that
   21928 does not have a designator applies to the next consecutive element of
   21929 the array or structure.  For example,
   21930 
   21931      int a[6] = { [1] = v1, v2, [4] = v4 };
   21932 
   21933 is equivalent to
   21934 
   21935      int a[6] = { 0, v1, v2, 0, v4, 0 };
   21936 
   21937  Labeling the elements of an array initializer is especially useful when
   21938 the indices are characters or belong to an 'enum' type.  For example:
   21939 
   21940      int whitespace[256]
   21941        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
   21942            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
   21943 
   21944  You can also write a series of '.FIELDNAME' and '[INDEX]' designators
   21945 before an '=' to specify a nested subobject to initialize; the list is
   21946 taken relative to the subobject corresponding to the closest surrounding
   21947 brace pair.  For example, with the 'struct point' declaration above:
   21948 
   21949      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
   21950 
   21951 If the same field is initialized multiple times, it has the value from
   21952 the last initialization.  If any such overridden initialization has
   21953 side-effect, it is unspecified whether the side-effect happens or not.
   21954 Currently, GCC discards them and issues a warning.
   21955 
   21956 
   21957 File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
   21958 
   21959 6.27 Case Ranges
   21960 ================
   21961 
   21962 You can specify a range of consecutive values in a single 'case' label,
   21963 like this:
   21964 
   21965      case LOW ... HIGH:
   21966 
   21967 This has the same effect as the proper number of individual 'case'
   21968 labels, one for each integer value from LOW to HIGH, inclusive.
   21969 
   21970  This feature is especially useful for ranges of ASCII character codes:
   21971 
   21972      case 'A' ... 'Z':
   21973 
   21974  *Be careful:* Write spaces around the '...', for otherwise it may be
   21975 parsed wrong when you use it with integer values.  For example, write
   21976 this:
   21977 
   21978      case 1 ... 5:
   21979 
   21980 rather than this:
   21981 
   21982      case 1...5:
   21983 
   21984 
   21985 File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
   21986 
   21987 6.28 Cast to a Union Type
   21988 =========================
   21989 
   21990 A cast to union type is similar to other casts, except that the type
   21991 specified is a union type.  You can specify the type either with 'union
   21992 TAG' or with a typedef name.  A cast to union is actually a constructor,
   21993 not a cast, and hence does not yield an lvalue like normal casts.
   21994 (*Note Compound Literals::.)
   21995 
   21996  The types that may be cast to the union type are those of the members
   21997 of the union.  Thus, given the following union and variables:
   21998 
   21999      union foo { int i; double d; };
   22000      int x;
   22001      double y;
   22002 
   22003 both 'x' and 'y' can be cast to type 'union foo'.
   22004 
   22005  Using the cast as the right-hand side of an assignment to a variable of
   22006 union type is equivalent to storing in a member of the union:
   22007 
   22008      union foo u;
   22009      /* ... */
   22010      u = (union foo) x  ==  u.i = x
   22011      u = (union foo) y  ==  u.d = y
   22012 
   22013  You can also use the union cast as a function argument:
   22014 
   22015      void hack (union foo);
   22016      /* ... */
   22017      hack ((union foo) x);
   22018 
   22019 
   22020 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
   22021 
   22022 6.29 Mixed Declarations and Code
   22023 ================================
   22024 
   22025 ISO C99 and ISO C++ allow declarations and code to be freely mixed
   22026 within compound statements.  As an extension, GNU C also allows this in
   22027 C90 mode.  For example, you could do:
   22028 
   22029      int i;
   22030      /* ... */
   22031      i++;
   22032      int j = i + 2;
   22033 
   22034  Each identifier is visible from where it is declared until the end of
   22035 the enclosing block.
   22036 
   22037 
   22038 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
   22039 
   22040 6.30 Declaring Attributes of Functions
   22041 ======================================
   22042 
   22043 In GNU C, you declare certain things about functions called in your
   22044 program which help the compiler optimize function calls and check your
   22045 code more carefully.
   22046 
   22047  The keyword '__attribute__' allows you to specify special attributes
   22048 when making a declaration.  This keyword is followed by an attribute
   22049 specification inside double parentheses.  The following attributes are
   22050 currently defined for functions on all targets: 'aligned', 'alloc_size',
   22051 'noreturn', 'returns_twice', 'noinline', 'noclone', 'always_inline',
   22052 'flatten', 'pure', 'const', 'nothrow', 'sentinel', 'format',
   22053 'format_arg', 'no_instrument_function', 'no_split_stack', 'section',
   22054 'constructor', 'destructor', 'used', 'unused', 'deprecated', 'weak',
   22055 'malloc', 'alias', 'ifunc', 'warn_unused_result', 'nonnull',
   22056 'gnu_inline', 'externally_visible', 'hot', 'cold', 'artificial',
   22057 'no_sanitize_address', 'no_address_safety_analysis', 'error' and
   22058 'warning'.  Several other attributes are defined for functions on
   22059 particular target systems.  Other attributes, including 'section' are
   22060 supported for variables declarations (*note Variable Attributes::) and
   22061 for types (*note Type Attributes::).
   22062 
   22063  GCC plugins may provide their own attributes.
   22064 
   22065  You may also specify attributes with '__' preceding and following each
   22066 keyword.  This allows you to use them in header files without being
   22067 concerned about a possible macro of the same name.  For example, you may
   22068 use '__noreturn__' instead of 'noreturn'.
   22069 
   22070  *Note Attribute Syntax::, for details of the exact syntax for using
   22071 attributes.
   22072 
   22073 'alias ("TARGET")'
   22074      The 'alias' attribute causes the declaration to be emitted as an
   22075      alias for another symbol, which must be specified.  For instance,
   22076 
   22077           void __f () { /* Do something. */; }
   22078           void f () __attribute__ ((weak, alias ("__f")));
   22079 
   22080      defines 'f' to be a weak alias for '__f'.  In C++, the mangled name
   22081      for the target must be used.  It is an error if '__f' is not
   22082      defined in the same translation unit.
   22083 
   22084      Not all target machines support this attribute.
   22085 
   22086 'aligned (ALIGNMENT)'
   22087      This attribute specifies a minimum alignment for the function,
   22088      measured in bytes.
   22089 
   22090      You cannot use this attribute to decrease the alignment of a
   22091      function, only to increase it.  However, when you explicitly
   22092      specify a function alignment this overrides the effect of the
   22093      '-falign-functions' (*note Optimize Options::) option for this
   22094      function.
   22095 
   22096      Note that the effectiveness of 'aligned' attributes may be limited
   22097      by inherent limitations in your linker.  On many systems, the
   22098      linker is only able to arrange for functions to be aligned up to a
   22099      certain maximum alignment.  (For some linkers, the maximum
   22100      supported alignment may be very very small.)  See your linker
   22101      documentation for further information.
   22102 
   22103      The 'aligned' attribute can also be used for variables and fields
   22104      (*note Variable Attributes::.)
   22105 
   22106 'alloc_size'
   22107      The 'alloc_size' attribute is used to tell the compiler that the
   22108      function return value points to memory, where the size is given by
   22109      one or two of the functions parameters.  GCC uses this information
   22110      to improve the correctness of '__builtin_object_size'.
   22111 
   22112      The function parameter(s) denoting the allocated size are specified
   22113      by one or two integer arguments supplied to the attribute.  The
   22114      allocated size is either the value of the single function argument
   22115      specified or the product of the two function arguments specified.
   22116      Argument numbering starts at one.
   22117 
   22118      For instance,
   22119 
   22120           void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
   22121           void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
   22122 
   22123      declares that 'my_calloc' returns memory of the size given by the
   22124      product of parameter 1 and 2 and that 'my_realloc' returns memory
   22125      of the size given by parameter 2.
   22126 
   22127 'always_inline'
   22128      Generally, functions are not inlined unless optimization is
   22129      specified.  For functions declared inline, this attribute inlines
   22130      the function even if no optimization level is specified.
   22131 
   22132 'gnu_inline'
   22133      This attribute should be used with a function that is also declared
   22134      with the 'inline' keyword.  It directs GCC to treat the function as
   22135      if it were defined in gnu90 mode even when compiling in C99 or
   22136      gnu99 mode.
   22137 
   22138      If the function is declared 'extern', then this definition of the
   22139      function is used only for inlining.  In no case is the function
   22140      compiled as a standalone function, not even if you take its address
   22141      explicitly.  Such an address becomes an external reference, as if
   22142      you had only declared the function, and had not defined it.  This
   22143      has almost the effect of a macro.  The way to use this is to put a
   22144      function definition in a header file with this attribute, and put
   22145      another copy of the function, without 'extern', in a library file.
   22146      The definition in the header file causes most calls to the function
   22147      to be inlined.  If any uses of the function remain, they refer to
   22148      the single copy in the library.  Note that the two definitions of
   22149      the functions need not be precisely the same, although if they do
   22150      not have the same effect your program may behave oddly.
   22151 
   22152      In C, if the function is neither 'extern' nor 'static', then the
   22153      function is compiled as a standalone function, as well as being
   22154      inlined where possible.
   22155 
   22156      This is how GCC traditionally handled functions declared 'inline'.
   22157      Since ISO C99 specifies a different semantics for 'inline', this
   22158      function attribute is provided as a transition measure and as a
   22159      useful feature in its own right.  This attribute is available in
   22160      GCC 4.1.3 and later.  It is available if either of the preprocessor
   22161      macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
   22162      *Note An Inline Function is As Fast As a Macro: Inline.
   22163 
   22164      In C++, this attribute does not depend on 'extern' in any way, but
   22165      it still requires the 'inline' keyword to enable its special
   22166      behavior.
   22167 
   22168 'artificial'
   22169      This attribute is useful for small inline wrappers that if possible
   22170      should appear during debugging as a unit.  Depending on the debug
   22171      info format it either means marking the function as artificial or
   22172      using the caller location for all instructions within the inlined
   22173      body.
   22174 
   22175 'bank_switch'
   22176      When added to an interrupt handler with the M32C port, causes the
   22177      prologue and epilogue to use bank switching to preserve the
   22178      registers rather than saving them on the stack.
   22179 
   22180 'flatten'
   22181      Generally, inlining into a function is limited.  For a function
   22182      marked with this attribute, every call inside this function is
   22183      inlined, if possible.  Whether the function itself is considered
   22184      for inlining depends on its size and the current inlining
   22185      parameters.
   22186 
   22187 'error ("MESSAGE")'
   22188      If this attribute is used on a function declaration and a call to
   22189      such a function is not eliminated through dead code elimination or
   22190      other optimizations, an error that includes MESSAGE is diagnosed.
   22191      This is useful for compile-time checking, especially together with
   22192      '__builtin_constant_p' and inline functions where checking the
   22193      inline function arguments is not possible through 'extern char
   22194      [(condition) ? 1 : -1];' tricks.  While it is possible to leave the
   22195      function undefined and thus invoke a link failure, when using this
   22196      attribute the problem is diagnosed earlier and with exact location
   22197      of the call even in presence of inline functions or when not
   22198      emitting debugging information.
   22199 
   22200 'warning ("MESSAGE")'
   22201      If this attribute is used on a function declaration and a call to
   22202      such a function is not eliminated through dead code elimination or
   22203      other optimizations, a warning that includes MESSAGE is diagnosed.
   22204      This is useful for compile-time checking, especially together with
   22205      '__builtin_constant_p' and inline functions.  While it is possible
   22206      to define the function with a message in '.gnu.warning*' section,
   22207      when using this attribute the problem is diagnosed earlier and with
   22208      exact location of the call even in presence of inline functions or
   22209      when not emitting debugging information.
   22210 
   22211 'cdecl'
   22212      On the Intel 386, the 'cdecl' attribute causes the compiler to
   22213      assume that the calling function pops off the stack space used to
   22214      pass arguments.  This is useful to override the effects of the
   22215      '-mrtd' switch.
   22216 
   22217 'const'
   22218      Many functions do not examine any values except their arguments,
   22219      and have no effects except the return value.  Basically this is
   22220      just slightly more strict class than the 'pure' attribute below,
   22221      since function is not allowed to read global memory.
   22222 
   22223      Note that a function that has pointer arguments and examines the
   22224      data pointed to must _not_ be declared 'const'.  Likewise, a
   22225      function that calls a non-'const' function usually must not be
   22226      'const'.  It does not make sense for a 'const' function to return
   22227      'void'.
   22228 
   22229      The attribute 'const' is not implemented in GCC versions earlier
   22230      than 2.5.  An alternative way to declare that a function has no
   22231      side effects, which works in the current version and in some older
   22232      versions, is as follows:
   22233 
   22234           typedef int intfn ();
   22235 
   22236           extern const intfn square;
   22237 
   22238      This approach does not work in GNU C++ from 2.6.0 on, since the
   22239      language specifies that the 'const' must be attached to the return
   22240      value.
   22241 
   22242 'constructor'
   22243 'destructor'
   22244 'constructor (PRIORITY)'
   22245 'destructor (PRIORITY)'
   22246      The 'constructor' attribute causes the function to be called
   22247      automatically before execution enters 'main ()'.  Similarly, the
   22248      'destructor' attribute causes the function to be called
   22249      automatically after 'main ()' completes or 'exit ()' is called.
   22250      Functions with these attributes are useful for initializing data
   22251      that is used implicitly during the execution of the program.
   22252 
   22253      You may provide an optional integer priority to control the order
   22254      in which constructor and destructor functions are run.  A
   22255      constructor with a smaller priority number runs before a
   22256      constructor with a larger priority number; the opposite
   22257      relationship holds for destructors.  So, if you have a constructor
   22258      that allocates a resource and a destructor that deallocates the
   22259      same resource, both functions typically have the same priority.
   22260      The priorities for constructor and destructor functions are the
   22261      same as those specified for namespace-scope C++ objects (*note C++
   22262      Attributes::).
   22263 
   22264      These attributes are not currently implemented for Objective-C.
   22265 
   22266 'deprecated'
   22267 'deprecated (MSG)'
   22268      The 'deprecated' attribute results in a warning if the function is
   22269      used anywhere in the source file.  This is useful when identifying
   22270      functions that are expected to be removed in a future version of a
   22271      program.  The warning also includes the location of the declaration
   22272      of the deprecated function, to enable users to easily find further
   22273      information about why the function is deprecated, or what they
   22274      should do instead.  Note that the warnings only occurs for uses:
   22275 
   22276           int old_fn () __attribute__ ((deprecated));
   22277           int old_fn ();
   22278           int (*fn_ptr)() = old_fn;
   22279 
   22280      results in a warning on line 3 but not line 2.  The optional MSG
   22281      argument, which must be a string, is printed in the warning if
   22282      present.
   22283 
   22284      The 'deprecated' attribute can also be used for variables and types
   22285      (*note Variable Attributes::, *note Type Attributes::.)
   22286 
   22287 'disinterrupt'
   22288      On Epiphany and MeP targets, this attribute causes the compiler to
   22289      emit instructions to disable interrupts for the duration of the
   22290      given function.
   22291 
   22292 'dllexport'
   22293      On Microsoft Windows targets and Symbian OS targets the 'dllexport'
   22294      attribute causes the compiler to provide a global pointer to a
   22295      pointer in a DLL, so that it can be referenced with the 'dllimport'
   22296      attribute.  On Microsoft Windows targets, the pointer name is
   22297      formed by combining '_imp__' and the function or variable name.
   22298 
   22299      You can use '__declspec(dllexport)' as a synonym for '__attribute__
   22300      ((dllexport))' for compatibility with other compilers.
   22301 
   22302      On systems that support the 'visibility' attribute, this attribute
   22303      also implies "default" visibility.  It is an error to explicitly
   22304      specify any other visibility.
   22305 
   22306      In previous versions of GCC, the 'dllexport' attribute was ignored
   22307      for inlined functions, unless the '-fkeep-inline-functions' flag
   22308      had been used.  The default behavior now is to emit all dllexported
   22309      inline functions; however, this can cause object file-size bloat,
   22310      in which case the old behavior can be restored by using
   22311      '-fno-keep-inline-dllexport'.
   22312 
   22313      The attribute is also ignored for undefined symbols.
   22314 
   22315      When applied to C++ classes, the attribute marks defined
   22316      non-inlined member functions and static data members as exports.
   22317      Static consts initialized in-class are not marked unless they are
   22318      also defined out-of-class.
   22319 
   22320      For Microsoft Windows targets there are alternative methods for
   22321      including the symbol in the DLL's export table such as using a
   22322      '.def' file with an 'EXPORTS' section or, with GNU ld, using the
   22323      '--export-all' linker flag.
   22324 
   22325 'dllimport'
   22326      On Microsoft Windows and Symbian OS targets, the 'dllimport'
   22327      attribute causes the compiler to reference a function or variable
   22328      via a global pointer to a pointer that is set up by the DLL
   22329      exporting the symbol.  The attribute implies 'extern'.  On
   22330      Microsoft Windows targets, the pointer name is formed by combining
   22331      '_imp__' and the function or variable name.
   22332 
   22333      You can use '__declspec(dllimport)' as a synonym for '__attribute__
   22334      ((dllimport))' for compatibility with other compilers.
   22335 
   22336      On systems that support the 'visibility' attribute, this attribute
   22337      also implies "default" visibility.  It is an error to explicitly
   22338      specify any other visibility.
   22339 
   22340      Currently, the attribute is ignored for inlined functions.  If the
   22341      attribute is applied to a symbol _definition_, an error is
   22342      reported.  If a symbol previously declared 'dllimport' is later
   22343      defined, the attribute is ignored in subsequent references, and a
   22344      warning is emitted.  The attribute is also overridden by a
   22345      subsequent declaration as 'dllexport'.
   22346 
   22347      When applied to C++ classes, the attribute marks non-inlined member
   22348      functions and static data members as imports.  However, the
   22349      attribute is ignored for virtual methods to allow creation of
   22350      vtables using thunks.
   22351 
   22352      On the SH Symbian OS target the 'dllimport' attribute also has
   22353      another affect--it can cause the vtable and run-time type
   22354      information for a class to be exported.  This happens when the
   22355      class has a dllimported constructor or a non-inline, non-pure
   22356      virtual function and, for either of those two conditions, the class
   22357      also has an inline constructor or destructor and has a key function
   22358      that is defined in the current translation unit.
   22359 
   22360      For Microsoft Windows targets the use of the 'dllimport' attribute
   22361      on functions is not necessary, but provides a small performance
   22362      benefit by eliminating a thunk in the DLL.  The use of the
   22363      'dllimport' attribute on imported variables was required on older
   22364      versions of the GNU linker, but can now be avoided by passing the
   22365      '--enable-auto-import' switch to the GNU linker.  As with
   22366      functions, using the attribute for a variable eliminates a thunk in
   22367      the DLL.
   22368 
   22369      One drawback to using this attribute is that a pointer to a
   22370      _variable_ marked as 'dllimport' cannot be used as a constant
   22371      address.  However, a pointer to a _function_ with the 'dllimport'
   22372      attribute can be used as a constant initializer; in this case, the
   22373      address of a stub function in the import lib is referenced.  On
   22374      Microsoft Windows targets, the attribute can be disabled for
   22375      functions by setting the '-mnop-fun-dllimport' flag.
   22376 
   22377 'eightbit_data'
   22378      Use this attribute on the H8/300, H8/300H, and H8S to indicate that
   22379      the specified variable should be placed into the eight-bit data
   22380      section.  The compiler generates more efficient code for certain
   22381      operations on data in the eight-bit data area.  Note the eight-bit
   22382      data area is limited to 256 bytes of data.
   22383 
   22384      You must use GAS and GLD from GNU binutils version 2.7 or later for
   22385      this attribute to work correctly.
   22386 
   22387 'exception_handler'
   22388      Use this attribute on the Blackfin to indicate that the specified
   22389      function is an exception handler.  The compiler generates function
   22390      entry and exit sequences suitable for use in an exception handler
   22391      when this attribute is present.
   22392 
   22393 'externally_visible'
   22394      This attribute, attached to a global variable or function,
   22395      nullifies the effect of the '-fwhole-program' command-line option,
   22396      so the object remains visible outside the current compilation unit.
   22397 
   22398      If '-fwhole-program' is used together with '-flto' and 'gold' is
   22399      used as the linker plugin, 'externally_visible' attributes are
   22400      automatically added to functions (not variable yet due to a current
   22401      'gold' issue) that are accessed outside of LTO objects according to
   22402      resolution file produced by 'gold'.  For other linkers that cannot
   22403      generate resolution file, explicit 'externally_visible' attributes
   22404      are still necessary.
   22405 
   22406 'far'
   22407      On 68HC11 and 68HC12 the 'far' attribute causes the compiler to use
   22408      a calling convention that takes care of switching memory banks when
   22409      entering and leaving a function.  This calling convention is also
   22410      the default when using the '-mlong-calls' option.
   22411 
   22412      On 68HC12 the compiler uses the 'call' and 'rtc' instructions to
   22413      call and return from a function.
   22414 
   22415      On 68HC11 the compiler generates a sequence of instructions to
   22416      invoke a board-specific routine to switch the memory bank and call
   22417      the real function.  The board-specific routine simulates a 'call'.
   22418      At the end of a function, it jumps to a board-specific routine
   22419      instead of using 'rts'.  The board-specific return routine
   22420      simulates the 'rtc'.
   22421 
   22422      On MeP targets this causes the compiler to use a calling convention
   22423      that assumes the called function is too far away for the built-in
   22424      addressing modes.
   22425 
   22426 'fast_interrupt'
   22427      Use this attribute on the M32C and RX ports to indicate that the
   22428      specified function is a fast interrupt handler.  This is just like
   22429      the 'interrupt' attribute, except that 'freit' is used to return
   22430      instead of 'reit'.
   22431 
   22432 'fastcall'
   22433      On the Intel 386, the 'fastcall' attribute causes the compiler to
   22434      pass the first argument (if of integral type) in the register ECX
   22435      and the second argument (if of integral type) in the register EDX.
   22436      Subsequent and other typed arguments are passed on the stack.  The
   22437      called function pops the arguments off the stack.  If the number of
   22438      arguments is variable all arguments are pushed on the stack.
   22439 
   22440 'thiscall'
   22441      On the Intel 386, the 'thiscall' attribute causes the compiler to
   22442      pass the first argument (if of integral type) in the register ECX.
   22443      Subsequent and other typed arguments are passed on the stack.  The
   22444      called function pops the arguments off the stack.  If the number of
   22445      arguments is variable all arguments are pushed on the stack.  The
   22446      'thiscall' attribute is intended for C++ non-static member
   22447      functions.  As a GCC extension, this calling convention can be used
   22448      for C functions and for static member methods.
   22449 
   22450 'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
   22451      The 'format' attribute specifies that a function takes 'printf',
   22452      'scanf', 'strftime' or 'strfmon' style arguments that should be
   22453      type-checked against a format string.  For example, the
   22454      declaration:
   22455 
   22456           extern int
   22457           my_printf (void *my_object, const char *my_format, ...)
   22458                 __attribute__ ((format (printf, 2, 3)));
   22459 
   22460      causes the compiler to check the arguments in calls to 'my_printf'
   22461      for consistency with the 'printf' style format string argument
   22462      'my_format'.
   22463 
   22464      The parameter ARCHETYPE determines how the format string is
   22465      interpreted, and should be 'printf', 'scanf', 'strftime',
   22466      'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
   22467      also use '__printf__', '__scanf__', '__strftime__' or
   22468      '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
   22469      'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
   22470      refer to the formats accepted by the system's C runtime library,
   22471      while values prefixed with 'gnu_' always refer to the formats
   22472      accepted by the GNU C Library.  On Microsoft Windows targets,
   22473      values prefixed with 'ms_' refer to the formats accepted by the
   22474      'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
   22475      argument is the format string argument (starting from 1), while
   22476      FIRST-TO-CHECK is the number of the first argument to check against
   22477      the format string.  For functions where the arguments are not
   22478      available to be checked (such as 'vprintf'), specify the third
   22479      parameter as zero.  In this case the compiler only checks the
   22480      format string for consistency.  For 'strftime' formats, the third
   22481      parameter is required to be zero.  Since non-static C++ methods
   22482      have an implicit 'this' argument, the arguments of such methods
   22483      should be counted from two, not one, when giving values for
   22484      STRING-INDEX and FIRST-TO-CHECK.
   22485 
   22486      In the example above, the format string ('my_format') is the second
   22487      argument of the function 'my_print', and the arguments to check
   22488      start with the third argument, so the correct parameters for the
   22489      format attribute are 2 and 3.
   22490 
   22491      The 'format' attribute allows you to identify your own functions
   22492      that take format strings as arguments, so that GCC can check the
   22493      calls to these functions for errors.  The compiler always (unless
   22494      '-ffreestanding' or '-fno-builtin' is used) checks formats for the
   22495      standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
   22496      'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
   22497      'vsprintf' whenever such warnings are requested (using '-Wformat'),
   22498      so there is no need to modify the header file 'stdio.h'.  In C99
   22499      mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
   22500      and 'vsscanf' are also checked.  Except in strictly conforming C
   22501      standard modes, the X/Open function 'strfmon' is also checked as
   22502      are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
   22503      Controlling C Dialect: C Dialect Options.
   22504 
   22505      For Objective-C dialects, 'NSString' (or '__NSString__') is
   22506      recognized in the same context.  Declarations including these
   22507      format attributes are parsed for correct syntax, however the result
   22508      of checking of such format strings is not yet defined, and is not
   22509      carried out by this version of the compiler.
   22510 
   22511      The target may also provide additional types of format checks.
   22512      *Note Format Checks Specific to Particular Target Machines: Target
   22513      Format Checks.
   22514 
   22515 'format_arg (STRING-INDEX)'
   22516      The 'format_arg' attribute specifies that a function takes a format
   22517      string for a 'printf', 'scanf', 'strftime' or 'strfmon' style
   22518      function and modifies it (for example, to translate it into another
   22519      language), so the result can be passed to a 'printf', 'scanf',
   22520      'strftime' or 'strfmon' style function (with the remaining
   22521      arguments to the format function the same as they would have been
   22522      for the unmodified string).  For example, the declaration:
   22523 
   22524           extern char *
   22525           my_dgettext (char *my_domain, const char *my_format)
   22526                 __attribute__ ((format_arg (2)));
   22527 
   22528      causes the compiler to check the arguments in calls to a 'printf',
   22529      'scanf', 'strftime' or 'strfmon' type function, whose format string
   22530      argument is a call to the 'my_dgettext' function, for consistency
   22531      with the format string argument 'my_format'.  If the 'format_arg'
   22532      attribute had not been specified, all the compiler could tell in
   22533      such calls to format functions would be that the format string
   22534      argument is not constant; this would generate a warning when
   22535      '-Wformat-nonliteral' is used, but the calls could not be checked
   22536      without the attribute.
   22537 
   22538      The parameter STRING-INDEX specifies which argument is the format
   22539      string argument (starting from one).  Since non-static C++ methods
   22540      have an implicit 'this' argument, the arguments of such methods
   22541      should be counted from two.
   22542 
   22543      The 'format_arg' attribute allows you to identify your own
   22544      functions that modify format strings, so that GCC can check the
   22545      calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
   22546      whose operands are a call to one of your own function.  The
   22547      compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
   22548      this manner except when strict ISO C support is requested by
   22549      '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
   22550      '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
   22551      Dialect Options.
   22552 
   22553      For Objective-C dialects, the 'format-arg' attribute may refer to
   22554      an 'NSString' reference for compatibility with the 'format'
   22555      attribute above.
   22556 
   22557      The target may also allow additional types in 'format-arg'
   22558      attributes.  *Note Format Checks Specific to Particular Target
   22559      Machines: Target Format Checks.
   22560 
   22561 'function_vector'
   22562      Use this attribute on the H8/300, H8/300H, and H8S to indicate that
   22563      the specified function should be called through the function
   22564      vector.  Calling a function through the function vector reduces
   22565      code size, however; the function vector has a limited size (maximum
   22566      128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
   22567      and shares space with the interrupt vector.
   22568 
   22569      On SH2A targets, this attribute declares a function to be called
   22570      using the TBR relative addressing mode.  The argument to this
   22571      attribute is the entry number of the same function in a vector
   22572      table containing all the TBR relative addressable functions.  For
   22573      correct operation the TBR must be setup accordingly to point to the
   22574      start of the vector table before any functions with this attribute
   22575      are invoked.  Usually a good place to do the initialization is the
   22576      startup routine.  The TBR relative vector table can have at max 256
   22577      function entries.  The jumps to these functions are generated using
   22578      a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
   22579      You must use GAS and GLD from GNU binutils version 2.7 or later for
   22580      this attribute to work correctly.
   22581 
   22582      Please refer the example of M16C target, to see the use of this
   22583      attribute while declaring a function,
   22584 
   22585      In an application, for a function being called once, this attribute
   22586      saves at least 8 bytes of code; and if other successive calls are
   22587      being made to the same function, it saves 2 bytes of code per each
   22588      of these calls.
   22589 
   22590      On M16C/M32C targets, the 'function_vector' attribute declares a
   22591      special page subroutine call function.  Use of this attribute
   22592      reduces the code size by 2 bytes for each call generated to the
   22593      subroutine.  The argument to the attribute is the vector number
   22594      entry from the special page vector table which contains the 16
   22595      low-order bits of the subroutine's entry address.  Each vector
   22596      table has special page number (18 to 255) that is used in 'jsrs'
   22597      instructions.  Jump addresses of the routines are generated by
   22598      adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
   22599      M32C targets), to the 2-byte addresses set in the vector table.
   22600      Therefore you need to ensure that all the special page vector
   22601      routines should get mapped within the address range 0x0F0000 to
   22602      0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
   22603 
   22604      In the following example 2 bytes are saved for each call to
   22605      function 'foo'.
   22606 
   22607           void foo (void) __attribute__((function_vector(0x18)));
   22608           void foo (void)
   22609           {
   22610           }
   22611 
   22612           void bar (void)
   22613           {
   22614               foo();
   22615           }
   22616 
   22617      If functions are defined in one file and are called in another
   22618      file, then be sure to write this declaration in both files.
   22619 
   22620      This attribute is ignored for R8C target.
   22621 
   22622 'ifunc ("RESOLVER")'
   22623      The 'ifunc' attribute is used to mark a function as an indirect
   22624      function using the STT_GNU_IFUNC symbol type extension to the ELF
   22625      standard.  This allows the resolution of the symbol value to be
   22626      determined dynamically at load time, and an optimized version of
   22627      the routine can be selected for the particular processor or other
   22628      system characteristics determined then.  To use this attribute,
   22629      first define the implementation functions available, and a resolver
   22630      function that returns a pointer to the selected implementation
   22631      function.  The implementation functions' declarations must match
   22632      the API of the function being implemented, the resolver's
   22633      declaration is be a function returning pointer to void function
   22634      returning void:
   22635 
   22636           void *my_memcpy (void *dst, const void *src, size_t len)
   22637           {
   22638             ...
   22639           }
   22640 
   22641           static void (*resolve_memcpy (void)) (void)
   22642           {
   22643             return my_memcpy; // we'll just always select this routine
   22644           }
   22645 
   22646      The exported header file declaring the function the user calls
   22647      would contain:
   22648 
   22649           extern void *memcpy (void *, const void *, size_t);
   22650 
   22651      allowing the user to call this as a regular function, unaware of
   22652      the implementation.  Finally, the indirect function needs to be
   22653      defined in the same translation unit as the resolver function:
   22654 
   22655           void *memcpy (void *, const void *, size_t)
   22656                __attribute__ ((ifunc ("resolve_memcpy")));
   22657 
   22658      Indirect functions cannot be weak, and require a recent binutils
   22659      (at least version 2.20.1), and GNU C library (at least version
   22660      2.11.1).
   22661 
   22662 'interrupt'
   22663      Use this attribute on the ARM, AVR, CR16, Epiphany, M32C, M32R/D,
   22664      m68k, MeP, MIPS, RL78, RX and Xstormy16 ports to indicate that the
   22665      specified function is an interrupt handler.  The compiler generates
   22666      function entry and exit sequences suitable for use in an interrupt
   22667      handler when this attribute is present.  With Epiphany targets it
   22668      may also generate a special section with code to initialize the
   22669      interrupt vector table.
   22670 
   22671      Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
   22672      MicroBlaze, and SH processors can be specified via the
   22673      'interrupt_handler' attribute.
   22674 
   22675      Note, on the AVR, the hardware globally disables interrupts when an
   22676      interrupt is executed.  The first instruction of an interrupt
   22677      handler declared with this attribute is a 'SEI' instruction to
   22678      re-enable interrupts.  See also the 'signal' function attribute
   22679      that does not insert a 'SEI' instruction.  If both 'signal' and
   22680      'interrupt' are specified for the same function, 'signal' is
   22681      silently ignored.
   22682 
   22683      Note, for the ARM, you can specify the kind of interrupt to be
   22684      handled by adding an optional parameter to the interrupt attribute
   22685      like this:
   22686 
   22687           void f () __attribute__ ((interrupt ("IRQ")));
   22688 
   22689      Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
   22690      'ABORT' and 'UNDEF'.
   22691 
   22692      On ARMv7-M the interrupt type is ignored, and the attribute means
   22693      the function may be called with a word-aligned stack pointer.
   22694 
   22695      On Epiphany targets one or more optional parameters can be added
   22696      like this:
   22697 
   22698           void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
   22699 
   22700      Permissible values for these parameters are: 'reset',
   22701      'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
   22702      'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
   22703      that multiple entries in the interrupt vector table should be
   22704      initialized for this function, i.e. for each parameter NAME, a jump
   22705      to the function is emitted in the section ivt_entry_NAME.  The
   22706      parameter(s) may be omitted entirely, in which case no interrupt
   22707      vector table entry is provided.
   22708 
   22709      Note, on Epiphany targets, interrupts are enabled inside the
   22710      function unless the 'disinterrupt' attribute is also specified.
   22711 
   22712      On Epiphany targets, you can also use the following attribute to
   22713      modify the behavior of an interrupt handler:
   22714      'forwarder_section'
   22715           The interrupt handler may be in external memory which cannot
   22716           be reached by a branch instruction, so generate a local memory
   22717           trampoline to transfer control.  The single parameter
   22718           identifies the section where the trampoline is placed.
   22719 
   22720      The following examples are all valid uses of these attributes on
   22721      Epiphany targets:
   22722           void __attribute__ ((interrupt)) universal_handler ();
   22723           void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
   22724           void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
   22725           void __attribute__ ((interrupt ("timer0"), disinterrupt))
   22726             fast_timer_handler ();
   22727           void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
   22728             external_dma_handler ();
   22729 
   22730      On MIPS targets, you can use the following attributes to modify the
   22731      behavior of an interrupt handler:
   22732      'use_shadow_register_set'
   22733           Assume that the handler uses a shadow register set, instead of
   22734           the main general-purpose registers.
   22735 
   22736      'keep_interrupts_masked'
   22737           Keep interrupts masked for the whole function.  Without this
   22738           attribute, GCC tries to reenable interrupts for as much of the
   22739           function as it can.
   22740 
   22741      'use_debug_exception_return'
   22742           Return using the 'deret' instruction.  Interrupt handlers that
   22743           don't have this attribute return using 'eret' instead.
   22744 
   22745      You can use any combination of these attributes, as shown below:
   22746           void __attribute__ ((interrupt)) v0 ();
   22747           void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
   22748           void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
   22749           void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
   22750           void __attribute__ ((interrupt, use_shadow_register_set,
   22751                                keep_interrupts_masked)) v4 ();
   22752           void __attribute__ ((interrupt, use_shadow_register_set,
   22753                                use_debug_exception_return)) v5 ();
   22754           void __attribute__ ((interrupt, keep_interrupts_masked,
   22755                                use_debug_exception_return)) v6 ();
   22756           void __attribute__ ((interrupt, use_shadow_register_set,
   22757                                keep_interrupts_masked,
   22758                                use_debug_exception_return)) v7 ();
   22759 
   22760      On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers
   22761      intended to be used with the 'BRK' opcode (i.e. those that must end
   22762      with 'RETB' instead of 'RETI').
   22763 
   22764 'interrupt_handler'
   22765      Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and
   22766      SH to indicate that the specified function is an interrupt handler.
   22767      The compiler generates function entry and exit sequences suitable
   22768      for use in an interrupt handler when this attribute is present.
   22769 
   22770 'interrupt_thread'
   22771      Use this attribute on fido, a subarchitecture of the m68k, to
   22772      indicate that the specified function is an interrupt handler that
   22773      is designed to run as a thread.  The compiler omits generate
   22774      prologue/epilogue sequences and replaces the return instruction
   22775      with a 'sleep' instruction.  This attribute is available only on
   22776      fido.
   22777 
   22778 'isr'
   22779      Use this attribute on ARM to write Interrupt Service Routines.
   22780      This is an alias to the 'interrupt' attribute above.
   22781 
   22782 'kspisusp'
   22783      When used together with 'interrupt_handler', 'exception_handler' or
   22784      'nmi_handler', code is generated to load the stack pointer from the
   22785      USP register in the function prologue.
   22786 
   22787 'l1_text'
   22788      This attribute specifies a function to be placed into L1
   22789      Instruction SRAM.  The function is put into a specific section
   22790      named '.l1.text'.  With '-mfdpic', function calls with a such
   22791      function as the callee or caller uses inlined PLT.
   22792 
   22793 'l2'
   22794      On the Blackfin, this attribute specifies a function to be placed
   22795      into L2 SRAM. The function is put into a specific section named
   22796      '.l1.text'.  With '-mfdpic', callers of such functions use an
   22797      inlined PLT.
   22798 
   22799 'leaf'
   22800      Calls to external functions with this attribute must return to the
   22801      current compilation unit only by return or by exception handling.
   22802      In particular, leaf functions are not allowed to call callback
   22803      function passed to it from the current compilation unit or directly
   22804      call functions exported by the unit or longjmp into the unit.  Leaf
   22805      function might still call functions from other compilation units
   22806      and thus they are not necessarily leaf in the sense that they
   22807      contain no function calls at all.
   22808 
   22809      The attribute is intended for library functions to improve dataflow
   22810      analysis.  The compiler takes the hint that any data not escaping
   22811      the current compilation unit can not be used or modified by the
   22812      leaf function.  For example, the 'sin' function is a leaf function,
   22813      but 'qsort' is not.
   22814 
   22815      Note that leaf functions might invoke signals and signal handlers
   22816      might be defined in the current compilation unit and use static
   22817      variables.  The only compliant way to write such a signal handler
   22818      is to declare such variables 'volatile'.
   22819 
   22820      The attribute has no effect on functions defined within the current
   22821      compilation unit.  This is to allow easy merging of multiple
   22822      compilation units into one, for example, by using the link-time
   22823      optimization.  For this reason the attribute is not allowed on
   22824      types to annotate indirect calls.
   22825 
   22826 'long_call/short_call'
   22827      This attribute specifies how a particular function is called on ARM
   22828      and Epiphany.  Both attributes override the '-mlong-calls' (*note
   22829      ARM Options::) command-line switch and '#pragma long_calls'
   22830      settings.  The 'long_call' attribute indicates that the function
   22831      might be far away from the call site and require a different (more
   22832      expensive) calling sequence.  The 'short_call' attribute always
   22833      places the offset to the function from the call site into the 'BL'
   22834      instruction directly.
   22835 
   22836 'longcall/shortcall'
   22837      On the Blackfin, RS/6000 and PowerPC, the 'longcall' attribute
   22838      indicates that the function might be far away from the call site
   22839      and require a different (more expensive) calling sequence.  The
   22840      'shortcall' attribute indicates that the function is always close
   22841      enough for the shorter calling sequence to be used.  These
   22842      attributes override both the '-mlongcall' switch and, on the
   22843      RS/6000 and PowerPC, the '#pragma longcall' setting.
   22844 
   22845      *Note RS/6000 and PowerPC Options::, for more information on
   22846      whether long calls are necessary.
   22847 
   22848 'long_call/near/far'
   22849      These attributes specify how a particular function is called on
   22850      MIPS.  The attributes override the '-mlong-calls' (*note MIPS
   22851      Options::) command-line switch.  The 'long_call' and 'far'
   22852      attributes are synonyms, and cause the compiler to always call the
   22853      function by first loading its address into a register, and then
   22854      using the contents of that register.  The 'near' attribute has the
   22855      opposite effect; it specifies that non-PIC calls should be made
   22856      using the more efficient 'jal' instruction.
   22857 
   22858 'malloc'
   22859      The 'malloc' attribute is used to tell the compiler that a function
   22860      may be treated as if any non-'NULL' pointer it returns cannot alias
   22861      any other pointer valid when the function returns and that the
   22862      memory has undefined content.  This often improves optimization.
   22863      Standard functions with this property include 'malloc' and
   22864      'calloc'.  'realloc'-like functions do not have this property as
   22865      the memory pointed to does not have undefined content.
   22866 
   22867 'mips16/nomips16'
   22868 
   22869      On MIPS targets, you can use the 'mips16' and 'nomips16' function
   22870      attributes to locally select or turn off MIPS16 code generation.  A
   22871      function with the 'mips16' attribute is emitted as MIPS16 code,
   22872      while MIPS16 code generation is disabled for functions with the
   22873      'nomips16' attribute.  These attributes override the '-mips16' and
   22874      '-mno-mips16' options on the command line (*note MIPS Options::).
   22875 
   22876      When compiling files containing mixed MIPS16 and non-MIPS16 code,
   22877      the preprocessor symbol '__mips16' reflects the setting on the
   22878      command line, not that within individual functions.  Mixed MIPS16
   22879      and non-MIPS16 code may interact badly with some GCC extensions
   22880      such as '__builtin_apply' (*note Constructing Calls::).
   22881 
   22882 'model (MODEL-NAME)'
   22883 
   22884      On the M32R/D, use this attribute to set the addressability of an
   22885      object, and of the code generated for a function.  The identifier
   22886      MODEL-NAME is one of 'small', 'medium', or 'large', representing
   22887      each of the code models.
   22888 
   22889      Small model objects live in the lower 16MB of memory (so that their
   22890      addresses can be loaded with the 'ld24' instruction), and are
   22891      callable with the 'bl' instruction.
   22892 
   22893      Medium model objects may live anywhere in the 32-bit address space
   22894      (the compiler generates 'seth/add3' instructions to load their
   22895      addresses), and are callable with the 'bl' instruction.
   22896 
   22897      Large model objects may live anywhere in the 32-bit address space
   22898      (the compiler generates 'seth/add3' instructions to load their
   22899      addresses), and may not be reachable with the 'bl' instruction (the
   22900      compiler generates the much slower 'seth/add3/jl' instruction
   22901      sequence).
   22902 
   22903      On IA-64, use this attribute to set the addressability of an
   22904      object.  At present, the only supported identifier for MODEL-NAME
   22905      is 'small', indicating addressability via "small" (22-bit)
   22906      addresses (so that their addresses can be loaded with the 'addl'
   22907      instruction).  Caveat: such addressing is by definition not
   22908      position independent and hence this attribute must not be used for
   22909      objects defined by shared libraries.
   22910 
   22911 'ms_abi/sysv_abi'
   22912 
   22913      On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI
   22914      attribute to indicate which calling convention should be used for a
   22915      function.  The 'ms_abi' attribute tells the compiler to use the
   22916      Microsoft ABI, while the 'sysv_abi' attribute tells the compiler to
   22917      use the ABI used on GNU/Linux and other systems.  The default is to
   22918      use the Microsoft ABI when targeting Windows.  On all other
   22919      systems, the default is the x86/AMD ABI.
   22920 
   22921      Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
   22922      currently requires the '-maccumulate-outgoing-args' option.
   22923 
   22924 'callee_pop_aggregate_return (NUMBER)'
   22925 
   22926      On 32-bit i?86-*-* targets, you can use this attribute to control
   22927      how aggregates are returned in memory.  If the caller is
   22928      responsible for popping the hidden pointer together with the rest
   22929      of the arguments, specify NUMBER equal to zero.  If callee is
   22930      responsible for popping the hidden pointer, specify NUMBER equal to
   22931      one.
   22932 
   22933      The default i386 ABI assumes that the callee pops the stack for
   22934      hidden pointer.  However, on 32-bit i386 Microsoft Windows targets,
   22935      the compiler assumes that the caller pops the stack for hidden
   22936      pointer.
   22937 
   22938 'ms_hook_prologue'
   22939 
   22940      On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, you
   22941      can use this function attribute to make GCC generate the
   22942      "hot-patching" function prologue used in Win32 API functions in
   22943      Microsoft Windows XP Service Pack 2 and newer.
   22944 
   22945 'hotpatch [(PROLOGUE-HALFWORDS)]'
   22946 
   22947      On S/390 System z targets, you can use this function attribute to
   22948      make GCC generate a "hot-patching" function prologue.  The
   22949      'hotpatch' has no effect on funtions that are explicitly inline.
   22950      If the '-mhotpatch' or '-mno-hotpatch' command-line option is used
   22951      at the same time, the 'hotpatch' attribute takes precedence.  If an
   22952      argument is given, the maximum allowed value is 1000000.
   22953 
   22954 'naked'
   22955      Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
   22956      indicate that the specified function does not need
   22957      prologue/epilogue sequences generated by the compiler.  It is up to
   22958      the programmer to provide these sequences.  The only statements
   22959      that can be safely included in naked functions are 'asm' statements
   22960      that do not have operands.  All other statements, including
   22961      declarations of local variables, 'if' statements, and so forth,
   22962      should be avoided.  Naked functions should be used to implement the
   22963      body of an assembly function, while allowing the compiler to
   22964      construct the requisite function declaration for the assembler.
   22965 
   22966 'near'
   22967      On 68HC11 and 68HC12 the 'near' attribute causes the compiler to
   22968      use the normal calling convention based on 'jsr' and 'rts'.  This
   22969      attribute can be used to cancel the effect of the '-mlong-calls'
   22970      option.
   22971 
   22972      On MeP targets this attribute causes the compiler to assume the
   22973      called function is close enough to use the normal calling
   22974      convention, overriding the '-mtf' command-line option.
   22975 
   22976 'nesting'
   22977      Use this attribute together with 'interrupt_handler',
   22978      'exception_handler' or 'nmi_handler' to indicate that the function
   22979      entry code should enable nested interrupts or exceptions.
   22980 
   22981 'nmi_handler'
   22982      Use this attribute on the Blackfin to indicate that the specified
   22983      function is an NMI handler.  The compiler generates function entry
   22984      and exit sequences suitable for use in an NMI handler when this
   22985      attribute is present.
   22986 
   22987 'no_instrument_function'
   22988      If '-finstrument-functions' is given, profiling function calls are
   22989      generated at entry and exit of most user-compiled functions.
   22990      Functions with this attribute are not so instrumented.
   22991 
   22992 'no_split_stack'
   22993      If '-fsplit-stack' is given, functions have a small prologue which
   22994      decides whether to split the stack.  Functions with the
   22995      'no_split_stack' attribute do not have that prologue, and thus may
   22996      run with only a small amount of stack space available.
   22997 
   22998 'noinline'
   22999      This function attribute prevents a function from being considered
   23000      for inlining.  If the function does not have side-effects, there
   23001      are optimizations other than inlining that cause function calls to
   23002      be optimized away, although the function call is live.  To keep
   23003      such calls from being optimized away, put
   23004           asm ("");
   23005 
   23006      (*note Extended Asm::) in the called function, to serve as a
   23007      special side-effect.
   23008 
   23009 'noclone'
   23010      This function attribute prevents a function from being considered
   23011      for cloning--a mechanism that produces specialized copies of
   23012      functions and which is (currently) performed by interprocedural
   23013      constant propagation.
   23014 
   23015 'nonnull (ARG-INDEX, ...)'
   23016      The 'nonnull' attribute specifies that some function parameters
   23017      should be non-null pointers.  For instance, the declaration:
   23018 
   23019           extern void *
   23020           my_memcpy (void *dest, const void *src, size_t len)
   23021                   __attribute__((nonnull (1, 2)));
   23022 
   23023      causes the compiler to check that, in calls to 'my_memcpy',
   23024      arguments DEST and SRC are non-null.  If the compiler determines
   23025      that a null pointer is passed in an argument slot marked as
   23026      non-null, and the '-Wnonnull' option is enabled, a warning is
   23027      issued.  The compiler may also choose to make optimizations based
   23028      on the knowledge that certain function arguments will never be
   23029      null.
   23030 
   23031      If no argument index list is given to the 'nonnull' attribute, all
   23032      pointer arguments are marked as non-null.  To illustrate, the
   23033      following declaration is equivalent to the previous example:
   23034 
   23035           extern void *
   23036           my_memcpy (void *dest, const void *src, size_t len)
   23037                   __attribute__((nonnull));
   23038 
   23039 'noreturn'
   23040      A few standard library functions, such as 'abort' and 'exit',
   23041      cannot return.  GCC knows this automatically.  Some programs define
   23042      their own functions that never return.  You can declare them
   23043      'noreturn' to tell the compiler this fact.  For example,
   23044 
   23045           void fatal () __attribute__ ((noreturn));
   23046 
   23047           void
   23048           fatal (/* ... */)
   23049           {
   23050             /* ... */ /* Print error message. */ /* ... */
   23051             exit (1);
   23052           }
   23053 
   23054      The 'noreturn' keyword tells the compiler to assume that 'fatal'
   23055      cannot return.  It can then optimize without regard to what would
   23056      happen if 'fatal' ever did return.  This makes slightly better
   23057      code.  More importantly, it helps avoid spurious warnings of
   23058      uninitialized variables.
   23059 
   23060      The 'noreturn' keyword does not affect the exceptional path when
   23061      that applies: a 'noreturn'-marked function may still return to the
   23062      caller by throwing an exception or calling 'longjmp'.
   23063 
   23064      Do not assume that registers saved by the calling function are
   23065      restored before calling the 'noreturn' function.
   23066 
   23067      It does not make sense for a 'noreturn' function to have a return
   23068      type other than 'void'.
   23069 
   23070      The attribute 'noreturn' is not implemented in GCC versions earlier
   23071      than 2.5.  An alternative way to declare that a function does not
   23072      return, which works in the current version and in some older
   23073      versions, is as follows:
   23074 
   23075           typedef void voidfn ();
   23076 
   23077           volatile voidfn fatal;
   23078 
   23079      This approach does not work in GNU C++.
   23080 
   23081 'nothrow'
   23082      The 'nothrow' attribute is used to inform the compiler that a
   23083      function cannot throw an exception.  For example, most functions in
   23084      the standard C library can be guaranteed not to throw an exception
   23085      with the notable exceptions of 'qsort' and 'bsearch' that take
   23086      function pointer arguments.  The 'nothrow' attribute is not
   23087      implemented in GCC versions earlier than 3.3.
   23088 
   23089 'nosave_low_regs'
   23090      Use this attribute on SH targets to indicate that an
   23091      'interrupt_handler' function should not save and restore registers
   23092      R0..R7.  This can be used on SH3* and SH4* targets that have a
   23093      second R0..R7 register bank for non-reentrant interrupt handlers.
   23094 
   23095 'optimize'
   23096      The 'optimize' attribute is used to specify that a function is to
   23097      be compiled with different optimization options than specified on
   23098      the command line.  Arguments can either be numbers or strings.
   23099      Numbers are assumed to be an optimization level.  Strings that
   23100      begin with 'O' are assumed to be an optimization option, while
   23101      other options are assumed to be used with a '-f' prefix.  You can
   23102      also use the '#pragma GCC optimize' pragma to set the optimization
   23103      options that affect more than one function.  *Note Function
   23104      Specific Option Pragmas::, for details about the '#pragma GCC
   23105      optimize' pragma.
   23106 
   23107      This can be used for instance to have frequently-executed functions
   23108      compiled with more aggressive optimization options that produce
   23109      faster and larger code, while other functions can be compiled with
   23110      less aggressive options.
   23111 
   23112 'OS_main/OS_task'
   23113      On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
   23114      save/restore any call-saved register in their prologue/epilogue.
   23115 
   23116      The 'OS_main' attribute can be used when there _is guarantee_ that
   23117      interrupts are disabled at the time when the function is entered.
   23118      This saves resources when the stack pointer has to be changed to
   23119      set up a frame for local variables.
   23120 
   23121      The 'OS_task' attribute can be used when there is _no guarantee_
   23122      that interrupts are disabled at that time when the function is
   23123      entered like for, e.g.  task functions in a multi-threading
   23124      operating system.  In that case, changing the stack pointer
   23125      register is guarded by save/clear/restore of the global interrupt
   23126      enable flag.
   23127 
   23128      The differences to the 'naked' function attribute are:
   23129         * 'naked' functions do not have a return instruction whereas
   23130           'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
   23131           return instruction.
   23132         * 'naked' functions do not set up a frame for local variables or
   23133           a frame pointer whereas 'OS_main' and 'OS_task' do this as
   23134           needed.
   23135 
   23136 'pcs'
   23137 
   23138      The 'pcs' attribute can be used to control the calling convention
   23139      used for a function on ARM. The attribute takes an argument that
   23140      specifies the calling convention to use.
   23141 
   23142      When compiling using the AAPCS ABI (or a variant of it) then valid
   23143      values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
   23144      to use a variant other than '"aapcs"' then the compiler must be
   23145      permitted to use the appropriate co-processor registers (i.e., the
   23146      VFP registers must be available in order to use '"aapcs-vfp"').
   23147      For example,
   23148 
   23149           /* Argument passed in r0, and result returned in r0+r1.  */
   23150           double f2d (float) __attribute__((pcs("aapcs")));
   23151 
   23152      Variadic functions always use the '"aapcs"' calling convention and
   23153      the compiler rejects attempts to specify an alternative.
   23154 
   23155 'pure'
   23156      Many functions have no effects except the return value and their
   23157      return value depends only on the parameters and/or global
   23158      variables.  Such a function can be subject to common subexpression
   23159      elimination and loop optimization just as an arithmetic operator
   23160      would be.  These functions should be declared with the attribute
   23161      'pure'.  For example,
   23162 
   23163           int square (int) __attribute__ ((pure));
   23164 
   23165      says that the hypothetical function 'square' is safe to call fewer
   23166      times than the program says.
   23167 
   23168      Some of common examples of pure functions are 'strlen' or 'memcmp'.
   23169      Interesting non-pure functions are functions with infinite loops or
   23170      those depending on volatile memory or other system resource, that
   23171      may change between two consecutive calls (such as 'feof' in a
   23172      multithreading environment).
   23173 
   23174      The attribute 'pure' is not implemented in GCC versions earlier
   23175      than 2.96.
   23176 
   23177 'hot'
   23178      The 'hot' attribute on a function is used to inform the compiler
   23179      that the function is a hot spot of the compiled program.  The
   23180      function is optimized more aggressively and on many target it is
   23181      placed into special subsection of the text section so all hot
   23182      functions appears close together improving locality.
   23183 
   23184      When profile feedback is available, via '-fprofile-use', hot
   23185      functions are automatically detected and this attribute is ignored.
   23186 
   23187      The 'hot' attribute on functions is not implemented in GCC versions
   23188      earlier than 4.3.
   23189 
   23190      The 'hot' attribute on a label is used to inform the compiler that
   23191      path following the label are more likely than paths that are not so
   23192      annotated.  This attribute is used in cases where
   23193      '__builtin_expect' cannot be used, for instance with computed goto
   23194      or 'asm goto'.
   23195 
   23196      The 'hot' attribute on labels is not implemented in GCC versions
   23197      earlier than 4.8.
   23198 
   23199 'cold'
   23200      The 'cold' attribute on functions is used to inform the compiler
   23201      that the function is unlikely to be executed.  The function is
   23202      optimized for size rather than speed and on many targets it is
   23203      placed into special subsection of the text section so all cold
   23204      functions appears close together improving code locality of
   23205      non-cold parts of program.  The paths leading to call of cold
   23206      functions within code are marked as unlikely by the branch
   23207      prediction mechanism.  It is thus useful to mark functions used to
   23208      handle unlikely conditions, such as 'perror', as cold to improve
   23209      optimization of hot functions that do call marked functions in rare
   23210      occasions.
   23211 
   23212      When profile feedback is available, via '-fprofile-use', cold
   23213      functions are automatically detected and this attribute is ignored.
   23214 
   23215      The 'cold' attribute on functions is not implemented in GCC
   23216      versions earlier than 4.3.
   23217 
   23218      The 'cold' attribute on labels is used to inform the compiler that
   23219      the path following the label is unlikely to be executed.  This
   23220      attribute is used in cases where '__builtin_expect' cannot be used,
   23221      for instance with computed goto or 'asm goto'.
   23222 
   23223      The 'cold' attribute on labels is not implemented in GCC versions
   23224      earlier than 4.8.
   23225 
   23226 'no_sanitize_address'
   23227 'no_address_safety_analysis'
   23228      The 'no_sanitize_address' attribute on functions is used to inform
   23229      the compiler that it should not instrument memory accesses in the
   23230      function when compiling with the '-fsanitize=address' option.  The
   23231      'no_address_safety_analysis' is a deprecated alias of the
   23232      'no_sanitize_address' attribute, new code should use
   23233      'no_sanitize_address'.
   23234 
   23235 'regparm (NUMBER)'
   23236      On the Intel 386, the 'regparm' attribute causes the compiler to
   23237      pass arguments number one to NUMBER if they are of integral type in
   23238      registers EAX, EDX, and ECX instead of on the stack.  Functions
   23239      that take a variable number of arguments continue to be passed all
   23240      of their arguments on the stack.
   23241 
   23242      Beware that on some ELF systems this attribute is unsuitable for
   23243      global functions in shared libraries with lazy binding (which is
   23244      the default).  Lazy binding sends the first call via resolving code
   23245      in the loader, which might assume EAX, EDX and ECX can be
   23246      clobbered, as per the standard calling conventions.  Solaris 8 is
   23247      affected by this.  Systems with the GNU C Library version 2.1 or
   23248      higher and FreeBSD are believed to be safe since the loaders there
   23249      save EAX, EDX and ECX. (Lazy binding can be disabled with the
   23250      linker or the loader if desired, to avoid the problem.)
   23251 
   23252 'sseregparm'
   23253      On the Intel 386 with SSE support, the 'sseregparm' attribute
   23254      causes the compiler to pass up to 3 floating-point arguments in SSE
   23255      registers instead of on the stack.  Functions that take a variable
   23256      number of arguments continue to pass all of their floating-point
   23257      arguments on the stack.
   23258 
   23259 'force_align_arg_pointer'
   23260      On the Intel x86, the 'force_align_arg_pointer' attribute may be
   23261      applied to individual function definitions, generating an alternate
   23262      prologue and epilogue that realigns the run-time stack if
   23263      necessary.  This supports mixing legacy codes that run with a
   23264      4-byte aligned stack with modern codes that keep a 16-byte stack
   23265      for SSE compatibility.
   23266 
   23267 'renesas'
   23268      On SH targets this attribute specifies that the function or struct
   23269      follows the Renesas ABI.
   23270 
   23271 'resbank'
   23272      On the SH2A target, this attribute enables the high-speed register
   23273      saving and restoration using a register bank for
   23274      'interrupt_handler' routines.  Saving to the bank is performed
   23275      automatically after the CPU accepts an interrupt that uses a
   23276      register bank.
   23277 
   23278      The nineteen 32-bit registers comprising general register R0 to
   23279      R14, control register GBR, and system registers MACH, MACL, and PR
   23280      and the vector table address offset are saved into a register bank.
   23281      Register banks are stacked in first-in last-out (FILO) sequence.
   23282      Restoration from the bank is executed by issuing a RESBANK
   23283      instruction.
   23284 
   23285 'returns_twice'
   23286      The 'returns_twice' attribute tells the compiler that a function
   23287      may return more than one time.  The compiler ensures that all
   23288      registers are dead before calling such a function and emits a
   23289      warning about the variables that may be clobbered after the second
   23290      return from the function.  Examples of such functions are 'setjmp'
   23291      and 'vfork'.  The 'longjmp'-like counterpart of such function, if
   23292      any, might need to be marked with the 'noreturn' attribute.
   23293 
   23294 'saveall'
   23295      Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
   23296      indicate that all registers except the stack pointer should be
   23297      saved in the prologue regardless of whether they are used or not.
   23298 
   23299 'save_volatiles'
   23300      Use this attribute on the MicroBlaze to indicate that the function
   23301      is an interrupt handler.  All volatile registers (in addition to
   23302      non-volatile registers) are saved in the function prologue.  If the
   23303      function is a leaf function, only volatiles used by the function
   23304      are saved.  A normal function return is generated instead of a
   23305      return from interrupt.
   23306 
   23307 'section ("SECTION-NAME")'
   23308      Normally, the compiler places the code it generates in the 'text'
   23309      section.  Sometimes, however, you need additional sections, or you
   23310      need certain particular functions to appear in special sections.
   23311      The 'section' attribute specifies that a function lives in a
   23312      particular section.  For example, the declaration:
   23313 
   23314           extern void foobar (void) __attribute__ ((section ("bar")));
   23315 
   23316      puts the function 'foobar' in the 'bar' section.
   23317 
   23318      Some file formats do not support arbitrary sections so the
   23319      'section' attribute is not available on all platforms.  If you need
   23320      to map the entire contents of a module to a particular section,
   23321      consider using the facilities of the linker instead.
   23322 
   23323 'sentinel'
   23324      This function attribute ensures that a parameter in a function call
   23325      is an explicit 'NULL'.  The attribute is only valid on variadic
   23326      functions.  By default, the sentinel is located at position zero,
   23327      the last parameter of the function call.  If an optional integer
   23328      position argument P is supplied to the attribute, the sentinel must
   23329      be located at position P counting backwards from the end of the
   23330      argument list.
   23331 
   23332           __attribute__ ((sentinel))
   23333           is equivalent to
   23334           __attribute__ ((sentinel(0)))
   23335 
   23336      The attribute is automatically set with a position of 0 for the
   23337      built-in functions 'execl' and 'execlp'.  The built-in function
   23338      'execle' has the attribute set with a position of 1.
   23339 
   23340      A valid 'NULL' in this context is defined as zero with any pointer
   23341      type.  If your system defines the 'NULL' macro with an integer type
   23342      then you need to add an explicit cast.  GCC replaces 'stddef.h'
   23343      with a copy that redefines NULL appropriately.
   23344 
   23345      The warnings for missing or incorrect sentinels are enabled with
   23346      '-Wformat'.
   23347 
   23348 'short_call'
   23349      See 'long_call/short_call'.
   23350 
   23351 'shortcall'
   23352      See 'longcall/shortcall'.
   23353 
   23354 'signal'
   23355      Use this attribute on the AVR to indicate that the specified
   23356      function is an interrupt handler.  The compiler generates function
   23357      entry and exit sequences suitable for use in an interrupt handler
   23358      when this attribute is present.
   23359 
   23360      See also the 'interrupt' function attribute.
   23361 
   23362      The AVR hardware globally disables interrupts when an interrupt is
   23363      executed.  Interrupt handler functions defined with the 'signal'
   23364      attribute do not re-enable interrupts.  It is save to enable
   23365      interrupts in a 'signal' handler.  This "save" only applies to the
   23366      code generated by the compiler and not to the IRQ layout of the
   23367      application which is responsibility of the application.
   23368 
   23369      If both 'signal' and 'interrupt' are specified for the same
   23370      function, 'signal' is silently ignored.
   23371 
   23372 'sp_switch'
   23373      Use this attribute on the SH to indicate an 'interrupt_handler'
   23374      function should switch to an alternate stack.  It expects a string
   23375      argument that names a global variable holding the address of the
   23376      alternate stack.
   23377 
   23378           void *alt_stack;
   23379           void f () __attribute__ ((interrupt_handler,
   23380                                     sp_switch ("alt_stack")));
   23381 
   23382 'stdcall'
   23383      On the Intel 386, the 'stdcall' attribute causes the compiler to
   23384      assume that the called function pops off the stack space used to
   23385      pass arguments, unless it takes a variable number of arguments.
   23386 
   23387 'syscall_linkage'
   23388      This attribute is used to modify the IA-64 calling convention by
   23389      marking all input registers as live at all function exits.  This
   23390      makes it possible to restart a system call after an interrupt
   23391      without having to save/restore the input registers.  This also
   23392      prevents kernel data from leaking into application code.
   23393 
   23394 'target'
   23395      The 'target' attribute is used to specify that a function is to be
   23396      compiled with different target options than specified on the
   23397      command line.  This can be used for instance to have functions
   23398      compiled with a different ISA (instruction set architecture) than
   23399      the default.  You can also use the '#pragma GCC target' pragma to
   23400      set more than one function to be compiled with specific target
   23401      options.  *Note Function Specific Option Pragmas::, for details
   23402      about the '#pragma GCC target' pragma.
   23403 
   23404      For instance on a 386, you could compile one function with
   23405      'target("sse4.1,arch=core2")' and another with
   23406      'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
   23407      the first function with '-msse4.1' and '-march=core2' options, and
   23408      the second function with '-msse4a' and '-march=amdfam10' options.
   23409      It is up to the user to make sure that a function is only invoked
   23410      on a machine that supports the particular ISA it is compiled for
   23411      (for example by using 'cpuid' on 386 to determine what feature bits
   23412      and architecture family are used).
   23413 
   23414           int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
   23415           int sse3_func (void) __attribute__ ((__target__ ("sse3")));
   23416 
   23417      On the 386, the following options are allowed:
   23418 
   23419      'abm'
   23420      'no-abm'
   23421           Enable/disable the generation of the advanced bit
   23422           instructions.
   23423 
   23424      'aes'
   23425      'no-aes'
   23426           Enable/disable the generation of the AES instructions.
   23427 
   23428      'default'
   23429           *Note Function Multiversioning::, where it is used to specify
   23430           the default function version.
   23431 
   23432      'mmx'
   23433      'no-mmx'
   23434           Enable/disable the generation of the MMX instructions.
   23435 
   23436      'pclmul'
   23437      'no-pclmul'
   23438           Enable/disable the generation of the PCLMUL instructions.
   23439 
   23440      'popcnt'
   23441      'no-popcnt'
   23442           Enable/disable the generation of the POPCNT instruction.
   23443 
   23444      'sse'
   23445      'no-sse'
   23446           Enable/disable the generation of the SSE instructions.
   23447 
   23448      'sse2'
   23449      'no-sse2'
   23450           Enable/disable the generation of the SSE2 instructions.
   23451 
   23452      'sse3'
   23453      'no-sse3'
   23454           Enable/disable the generation of the SSE3 instructions.
   23455 
   23456      'sse4'
   23457      'no-sse4'
   23458           Enable/disable the generation of the SSE4 instructions (both
   23459           SSE4.1 and SSE4.2).
   23460 
   23461      'sse4.1'
   23462      'no-sse4.1'
   23463           Enable/disable the generation of the sse4.1 instructions.
   23464 
   23465      'sse4.2'
   23466      'no-sse4.2'
   23467           Enable/disable the generation of the sse4.2 instructions.
   23468 
   23469      'sse4a'
   23470      'no-sse4a'
   23471           Enable/disable the generation of the SSE4A instructions.
   23472 
   23473      'fma4'
   23474      'no-fma4'
   23475           Enable/disable the generation of the FMA4 instructions.
   23476 
   23477      'xop'
   23478      'no-xop'
   23479           Enable/disable the generation of the XOP instructions.
   23480 
   23481      'lwp'
   23482      'no-lwp'
   23483           Enable/disable the generation of the LWP instructions.
   23484 
   23485      'ssse3'
   23486      'no-ssse3'
   23487           Enable/disable the generation of the SSSE3 instructions.
   23488 
   23489      'cld'
   23490      'no-cld'
   23491           Enable/disable the generation of the CLD before string moves.
   23492 
   23493      'fancy-math-387'
   23494      'no-fancy-math-387'
   23495           Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
   23496           instructions on the 387 floating-point unit.
   23497 
   23498      'fused-madd'
   23499      'no-fused-madd'
   23500           Enable/disable the generation of the fused multiply/add
   23501           instructions.
   23502 
   23503      'ieee-fp'
   23504      'no-ieee-fp'
   23505           Enable/disable the generation of floating point that depends
   23506           on IEEE arithmetic.
   23507 
   23508      'inline-all-stringops'
   23509      'no-inline-all-stringops'
   23510           Enable/disable inlining of string operations.
   23511 
   23512      'inline-stringops-dynamically'
   23513      'no-inline-stringops-dynamically'
   23514           Enable/disable the generation of the inline code to do small
   23515           string operations and calling the library routines for large
   23516           operations.
   23517 
   23518      'align-stringops'
   23519      'no-align-stringops'
   23520           Do/do not align destination of inlined string operations.
   23521 
   23522      'recip'
   23523      'no-recip'
   23524           Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
   23525           RSQRTPS instructions followed an additional Newton-Raphson
   23526           step instead of doing a floating-point division.
   23527 
   23528      'arch=ARCH'
   23529           Specify the architecture to generate code for in compiling the
   23530           function.
   23531 
   23532      'tune=TUNE'
   23533           Specify the architecture to tune for in compiling the
   23534           function.
   23535 
   23536      'fpmath=FPMATH'
   23537           Specify which floating-point unit to use.  The
   23538           'target("fpmath=sse,387")' option must be specified as
   23539           'target("fpmath=sse+387")' because the comma would separate
   23540           different options.
   23541 
   23542      On the PowerPC, the following options are allowed:
   23543 
   23544      'altivec'
   23545      'no-altivec'
   23546           Generate code that uses (does not use) AltiVec instructions.
   23547           In 32-bit code, you cannot enable AltiVec instructions unless
   23548           '-mabi=altivec' is used on the command line.
   23549 
   23550      'cmpb'
   23551      'no-cmpb'
   23552           Generate code that uses (does not use) the compare bytes
   23553           instruction implemented on the POWER6 processor and other
   23554           processors that support the PowerPC V2.05 architecture.
   23555 
   23556      'dlmzb'
   23557      'no-dlmzb'
   23558           Generate code that uses (does not use) the string-search
   23559           'dlmzb' instruction on the IBM 405, 440, 464 and 476
   23560           processors.  This instruction is generated by default when
   23561           targeting those processors.
   23562 
   23563      'fprnd'
   23564      'no-fprnd'
   23565           Generate code that uses (does not use) the FP round to integer
   23566           instructions implemented on the POWER5+ processor and other
   23567           processors that support the PowerPC V2.03 architecture.
   23568 
   23569      'hard-dfp'
   23570      'no-hard-dfp'
   23571           Generate code that uses (does not use) the decimal
   23572           floating-point instructions implemented on some POWER
   23573           processors.
   23574 
   23575      'isel'
   23576      'no-isel'
   23577           Generate code that uses (does not use) ISEL instruction.
   23578 
   23579      'mfcrf'
   23580      'no-mfcrf'
   23581           Generate code that uses (does not use) the move from condition
   23582           register field instruction implemented on the POWER4 processor
   23583           and other processors that support the PowerPC V2.01
   23584           architecture.
   23585 
   23586      'mfpgpr'
   23587      'no-mfpgpr'
   23588           Generate code that uses (does not use) the FP move to/from
   23589           general purpose register instructions implemented on the
   23590           POWER6X processor and other processors that support the
   23591           extended PowerPC V2.05 architecture.
   23592 
   23593      'mulhw'
   23594      'no-mulhw'
   23595           Generate code that uses (does not use) the half-word multiply
   23596           and multiply-accumulate instructions on the IBM 405, 440, 464
   23597           and 476 processors.  These instructions are generated by
   23598           default when targeting those processors.
   23599 
   23600      'multiple'
   23601      'no-multiple'
   23602           Generate code that uses (does not use) the load multiple word
   23603           instructions and the store multiple word instructions.
   23604 
   23605      'update'
   23606      'no-update'
   23607           Generate code that uses (does not use) the load or store
   23608           instructions that update the base register to the address of
   23609           the calculated memory location.
   23610 
   23611      'popcntb'
   23612      'no-popcntb'
   23613           Generate code that uses (does not use) the popcount and
   23614           double-precision FP reciprocal estimate instruction
   23615           implemented on the POWER5 processor and other processors that
   23616           support the PowerPC V2.02 architecture.
   23617 
   23618      'popcntd'
   23619      'no-popcntd'
   23620           Generate code that uses (does not use) the popcount
   23621           instruction implemented on the POWER7 processor and other
   23622           processors that support the PowerPC V2.06 architecture.
   23623 
   23624      'powerpc-gfxopt'
   23625      'no-powerpc-gfxopt'
   23626           Generate code that uses (does not use) the optional PowerPC
   23627           architecture instructions in the Graphics group, including
   23628           floating-point select.
   23629 
   23630      'powerpc-gpopt'
   23631      'no-powerpc-gpopt'
   23632           Generate code that uses (does not use) the optional PowerPC
   23633           architecture instructions in the General Purpose group,
   23634           including floating-point square root.
   23635 
   23636      'recip-precision'
   23637      'no-recip-precision'
   23638           Assume (do not assume) that the reciprocal estimate
   23639           instructions provide higher-precision estimates than is
   23640           mandated by the powerpc ABI.
   23641 
   23642      'string'
   23643      'no-string'
   23644           Generate code that uses (does not use) the load string
   23645           instructions and the store string word instructions to save
   23646           multiple registers and do small block moves.
   23647 
   23648      'vsx'
   23649      'no-vsx'
   23650           Generate code that uses (does not use) vector/scalar (VSX)
   23651           instructions, and also enable the use of built-in functions
   23652           that allow more direct access to the VSX instruction set.  In
   23653           32-bit code, you cannot enable VSX or AltiVec instructions
   23654           unless '-mabi=altivec' is used on the command line.
   23655 
   23656      'friz'
   23657      'no-friz'
   23658           Generate (do not generate) the 'friz' instruction when the
   23659           '-funsafe-math-optimizations' option is used to optimize
   23660           rounding a floating-point value to 64-bit integer and back to
   23661           floating point.  The 'friz' instruction does not return the
   23662           same value if the floating-point number is too large to fit in
   23663           an integer.
   23664 
   23665      'avoid-indexed-addresses'
   23666      'no-avoid-indexed-addresses'
   23667           Generate code that tries to avoid (not avoid) the use of
   23668           indexed load or store instructions.
   23669 
   23670      'paired'
   23671      'no-paired'
   23672           Generate code that uses (does not use) the generation of
   23673           PAIRED simd instructions.
   23674 
   23675      'longcall'
   23676      'no-longcall'
   23677           Generate code that assumes (does not assume) that all calls
   23678           are far away so that a longer more expensive calling sequence
   23679           is required.
   23680 
   23681      'cpu=CPU'
   23682           Specify the architecture to generate code for when compiling
   23683           the function.  If you select the 'target("cpu=power7")'
   23684           attribute when generating 32-bit code, VSX and AltiVec
   23685           instructions are not generated unless you use the
   23686           '-mabi=altivec' option on the command line.
   23687 
   23688      'tune=TUNE'
   23689           Specify the architecture to tune for when compiling the
   23690           function.  If you do not specify the 'target("tune=TUNE")'
   23691           attribute and you do specify the 'target("cpu=CPU")'
   23692           attribute, compilation tunes for the CPU architecture, and not
   23693           the default tuning specified on the command line.
   23694 
   23695      On the 386/x86_64 and PowerPC back ends, you can use either
   23696      multiple strings to specify multiple options, or you can separate
   23697      the option with a comma (',').
   23698 
   23699      On the 386/x86_64 and PowerPC back ends, the inliner does not
   23700      inline a function that has different target options than the
   23701      caller, unless the callee has a subset of the target options of the
   23702      caller.  For example a function declared with 'target("sse3")' can
   23703      inline a function with 'target("sse2")', since '-msse3' implies
   23704      '-msse2'.
   23705 
   23706      The 'target' attribute is not implemented in GCC versions earlier
   23707      than 4.4 for the i386/x86_64 and 4.6 for the PowerPC back ends.  It
   23708      is not currently implemented for other back ends.
   23709 
   23710 'tiny_data'
   23711      Use this attribute on the H8/300H and H8S to indicate that the
   23712      specified variable should be placed into the tiny data section.
   23713      The compiler generates more efficient code for loads and stores on
   23714      data in the tiny data section.  Note the tiny data area is limited
   23715      to slightly under 32KB of data.
   23716 
   23717 'trap_exit'
   23718      Use this attribute on the SH for an 'interrupt_handler' to return
   23719      using 'trapa' instead of 'rte'.  This attribute expects an integer
   23720      argument specifying the trap number to be used.
   23721 
   23722 'trapa_handler'
   23723      On SH targets this function attribute is similar to
   23724      'interrupt_handler' but it does not save and restore all registers.
   23725 
   23726 'unused'
   23727      This attribute, attached to a function, means that the function is
   23728      meant to be possibly unused.  GCC does not produce a warning for
   23729      this function.
   23730 
   23731 'used'
   23732      This attribute, attached to a function, means that code must be
   23733      emitted for the function even if it appears that the function is
   23734      not referenced.  This is useful, for example, when the function is
   23735      referenced only in inline assembly.
   23736 
   23737      When applied to a member function of a C++ class template, the
   23738      attribute also means that the function is instantiated if the class
   23739      itself is instantiated.
   23740 
   23741 'version_id'
   23742      This IA-64 HP-UX attribute, attached to a global variable or
   23743      function, renames a symbol to contain a version string, thus
   23744      allowing for function level versioning.  HP-UX system header files
   23745      may use version level functioning for some system calls.
   23746 
   23747           extern int foo () __attribute__((version_id ("20040821")));
   23748 
   23749      Calls to FOO are mapped to calls to FOO{20040821}.
   23750 
   23751 'visibility ("VISIBILITY_TYPE")'
   23752      This attribute affects the linkage of the declaration to which it
   23753      is attached.  There are four supported VISIBILITY_TYPE values:
   23754      default, hidden, protected or internal visibility.
   23755 
   23756           void __attribute__ ((visibility ("protected")))
   23757           f () { /* Do something. */; }
   23758           int i __attribute__ ((visibility ("hidden")));
   23759 
   23760      The possible values of VISIBILITY_TYPE correspond to the visibility
   23761      settings in the ELF gABI.
   23762 
   23763      "default"
   23764           Default visibility is the normal case for the object file
   23765           format.  This value is available for the visibility attribute
   23766           to override other options that may change the assumed
   23767           visibility of entities.
   23768 
   23769           On ELF, default visibility means that the declaration is
   23770           visible to other modules and, in shared libraries, means that
   23771           the declared entity may be overridden.
   23772 
   23773           On Darwin, default visibility means that the declaration is
   23774           visible to other modules.
   23775 
   23776           Default visibility corresponds to "external linkage" in the
   23777           language.
   23778 
   23779      "hidden"
   23780           Hidden visibility indicates that the entity declared has a new
   23781           form of linkage, which we call "hidden linkage".  Two
   23782           declarations of an object with hidden linkage refer to the
   23783           same object if they are in the same shared object.
   23784 
   23785      "internal"
   23786           Internal visibility is like hidden visibility, but with
   23787           additional processor specific semantics.  Unless otherwise
   23788           specified by the psABI, GCC defines internal visibility to
   23789           mean that a function is _never_ called from another module.
   23790           Compare this with hidden functions which, while they cannot be
   23791           referenced directly by other modules, can be referenced
   23792           indirectly via function pointers.  By indicating that a
   23793           function cannot be called from outside the module, GCC may for
   23794           instance omit the load of a PIC register since it is known
   23795           that the calling function loaded the correct value.
   23796 
   23797      "protected"
   23798           Protected visibility is like default visibility except that it
   23799           indicates that references within the defining module bind to
   23800           the definition in that module.  That is, the declared entity
   23801           cannot be overridden by another module.
   23802 
   23803      All visibilities are supported on many, but not all, ELF targets
   23804      (supported when the assembler supports the '.visibility'
   23805      pseudo-op).  Default visibility is supported everywhere.  Hidden
   23806      visibility is supported on Darwin targets.
   23807 
   23808      The visibility attribute should be applied only to declarations
   23809      that would otherwise have external linkage.  The attribute should
   23810      be applied consistently, so that the same entity should not be
   23811      declared with different settings of the attribute.
   23812 
   23813      In C++, the visibility attribute applies to types as well as
   23814      functions and objects, because in C++ types have linkage.  A class
   23815      must not have greater visibility than its non-static data member
   23816      types and bases, and class members default to the visibility of
   23817      their class.  Also, a declaration without explicit visibility is
   23818      limited to the visibility of its type.
   23819 
   23820      In C++, you can mark member functions and static member variables
   23821      of a class with the visibility attribute.  This is useful if you
   23822      know a particular method or static member variable should only be
   23823      used from one shared object; then you can mark it hidden while the
   23824      rest of the class has default visibility.  Care must be taken to
   23825      avoid breaking the One Definition Rule; for example, it is usually
   23826      not useful to mark an inline method as hidden without marking the
   23827      whole class as hidden.
   23828 
   23829      A C++ namespace declaration can also have the visibility attribute.
   23830      This attribute applies only to the particular namespace body, not
   23831      to other definitions of the same namespace; it is equivalent to
   23832      using '#pragma GCC visibility' before and after the namespace
   23833      definition (*note Visibility Pragmas::).
   23834 
   23835      In C++, if a template argument has limited visibility, this
   23836      restriction is implicitly propagated to the template instantiation.
   23837      Otherwise, template instantiations and specializations default to
   23838      the visibility of their template.
   23839 
   23840      If both the template and enclosing class have explicit visibility,
   23841      the visibility from the template is used.
   23842 
   23843 'vliw'
   23844      On MeP, the 'vliw' attribute tells the compiler to emit
   23845      instructions in VLIW mode instead of core mode.  Note that this
   23846      attribute is not allowed unless a VLIW coprocessor has been
   23847      configured and enabled through command-line options.
   23848 
   23849 'warn_unused_result'
   23850      The 'warn_unused_result' attribute causes a warning to be emitted
   23851      if a caller of the function with this attribute does not use its
   23852      return value.  This is useful for functions where not checking the
   23853      result is either a security problem or always a bug, such as
   23854      'realloc'.
   23855 
   23856           int fn () __attribute__ ((warn_unused_result));
   23857           int foo ()
   23858           {
   23859             if (fn () < 0) return -1;
   23860             fn ();
   23861             return 0;
   23862           }
   23863 
   23864      results in warning on line 5.
   23865 
   23866 'weak'
   23867      The 'weak' attribute causes the declaration to be emitted as a weak
   23868      symbol rather than a global.  This is primarily useful in defining
   23869      library functions that can be overridden in user code, though it
   23870      can also be used with non-function declarations.  Weak symbols are
   23871      supported for ELF targets, and also for a.out targets when using
   23872      the GNU assembler and linker.
   23873 
   23874 'weakref'
   23875 'weakref ("TARGET")'
   23876      The 'weakref' attribute marks a declaration as a weak reference.
   23877      Without arguments, it should be accompanied by an 'alias' attribute
   23878      naming the target symbol.  Optionally, the TARGET may be given as
   23879      an argument to 'weakref' itself.  In either case, 'weakref'
   23880      implicitly marks the declaration as 'weak'.  Without a TARGET,
   23881      given as an argument to 'weakref' or to 'alias', 'weakref' is
   23882      equivalent to 'weak'.
   23883 
   23884           static int x() __attribute__ ((weakref ("y")));
   23885           /* is equivalent to... */
   23886           static int x() __attribute__ ((weak, weakref, alias ("y")));
   23887           /* and to... */
   23888           static int x() __attribute__ ((weakref));
   23889           static int x() __attribute__ ((alias ("y")));
   23890 
   23891      A weak reference is an alias that does not by itself require a
   23892      definition to be given for the target symbol.  If the target symbol
   23893      is only referenced through weak references, then it becomes a
   23894      'weak' undefined symbol.  If it is directly referenced, however,
   23895      then such strong references prevail, and a definition is required
   23896      for the symbol, not necessarily in the same translation unit.
   23897 
   23898      The effect is equivalent to moving all references to the alias to a
   23899      separate translation unit, renaming the alias to the aliased
   23900      symbol, declaring it as weak, compiling the two separate
   23901      translation units and performing a reloadable link on them.
   23902 
   23903      At present, a declaration to which 'weakref' is attached can only
   23904      be 'static'.
   23905 
   23906  You can specify multiple attributes in a declaration by separating them
   23907 by commas within the double parentheses or by immediately following an
   23908 attribute declaration with another attribute declaration.
   23909 
   23910  Some people object to the '__attribute__' feature, suggesting that ISO
   23911 C's '#pragma' should be used instead.  At the time '__attribute__' was
   23912 designed, there were two reasons for not doing this.
   23913 
   23914   1. It is impossible to generate '#pragma' commands from a macro.
   23915 
   23916   2. There is no telling what the same '#pragma' might mean in another
   23917      compiler.
   23918 
   23919  These two reasons applied to almost any application that might have
   23920 been proposed for '#pragma'.  It was basically a mistake to use
   23921 '#pragma' for _anything_.
   23922 
   23923  The ISO C99 standard includes '_Pragma', which now allows pragmas to be
   23924 generated from macros.  In addition, a '#pragma GCC' namespace is now in
   23925 use for GCC-specific pragmas.  However, it has been found convenient to
   23926 use '__attribute__' to achieve a natural attachment of attributes to
   23927 their corresponding declarations, whereas '#pragma GCC' is of use for
   23928 constructs that do not naturally form part of the grammar.  *Note
   23929 Pragmas Accepted by GCC: Pragmas.
   23930 
   23931 
   23932 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
   23933 
   23934 6.31 Attribute Syntax
   23935 =====================
   23936 
   23937 This section describes the syntax with which '__attribute__' may be
   23938 used, and the constructs to which attribute specifiers bind, for the C
   23939 language.  Some details may vary for C++ and Objective-C.  Because of
   23940 infelicities in the grammar for attributes, some forms described here
   23941 may not be successfully parsed in all cases.
   23942 
   23943  There are some problems with the semantics of attributes in C++.  For
   23944 example, there are no manglings for attributes, although they may affect
   23945 code generation, so problems may arise when attributed types are used in
   23946 conjunction with templates or overloading.  Similarly, 'typeid' does not
   23947 distinguish between types with different attributes.  Support for
   23948 attributes in C++ may be restricted in future to attributes on
   23949 declarations only, but not on nested declarators.
   23950 
   23951  *Note Function Attributes::, for details of the semantics of attributes
   23952 applying to functions.  *Note Variable Attributes::, for details of the
   23953 semantics of attributes applying to variables.  *Note Type Attributes::,
   23954 for details of the semantics of attributes applying to structure, union
   23955 and enumerated types.
   23956 
   23957  An "attribute specifier" is of the form '__attribute__
   23958 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
   23959 comma-separated sequence of "attributes", where each attribute is one of
   23960 the following:
   23961 
   23962    * Empty.  Empty attributes are ignored.
   23963 
   23964    * A word (which may be an identifier such as 'unused', or a reserved
   23965      word such as 'const').
   23966 
   23967    * A word, followed by, in parentheses, parameters for the attribute.
   23968      These parameters take one of the following forms:
   23969 
   23970         * An identifier.  For example, 'mode' attributes use this form.
   23971 
   23972         * An identifier followed by a comma and a non-empty
   23973           comma-separated list of expressions.  For example, 'format'
   23974           attributes use this form.
   23975 
   23976         * A possibly empty comma-separated list of expressions.  For
   23977           example, 'format_arg' attributes use this form with the list
   23978           being a single integer constant expression, and 'alias'
   23979           attributes use this form with the list being a single string
   23980           constant.
   23981 
   23982  An "attribute specifier list" is a sequence of one or more attribute
   23983 specifiers, not separated by any other tokens.
   23984 
   23985  In GNU C, an attribute specifier list may appear after the colon
   23986 following a label, other than a 'case' or 'default' label.  The only
   23987 attribute it makes sense to use after a label is 'unused'.  This feature
   23988 is intended for program-generated code that may contain unused labels,
   23989 but which is compiled with '-Wall'.  It is not normally appropriate to
   23990 use in it human-written code, though it could be useful in cases where
   23991 the code that jumps to the label is contained within an '#ifdef'
   23992 conditional.  GNU C++ only permits attributes on labels if the attribute
   23993 specifier is immediately followed by a semicolon (i.e., the label
   23994 applies to an empty statement).  If the semicolon is missing, C++ label
   23995 attributes are ambiguous, as it is permissible for a declaration, which
   23996 could begin with an attribute list, to be labelled in C++.  Declarations
   23997 cannot be labelled in C90 or C99, so the ambiguity does not arise there.
   23998 
   23999  An attribute specifier list may appear as part of a 'struct', 'union'
   24000 or 'enum' specifier.  It may go either immediately after the 'struct',
   24001 'union' or 'enum' keyword, or after the closing brace.  The former
   24002 syntax is preferred.  Where attribute specifiers follow the closing
   24003 brace, they are considered to relate to the structure, union or
   24004 enumerated type defined, not to any enclosing declaration the type
   24005 specifier appears in, and the type defined is not complete until after
   24006 the attribute specifiers.
   24007 
   24008  Otherwise, an attribute specifier appears as part of a declaration,
   24009 counting declarations of unnamed parameters and type names, and relates
   24010 to that declaration (which may be nested in another declaration, for
   24011 example in the case of a parameter declaration), or to a particular
   24012 declarator within a declaration.  Where an attribute specifier is
   24013 applied to a parameter declared as a function or an array, it should
   24014 apply to the function or array rather than the pointer to which the
   24015 parameter is implicitly converted, but this is not yet correctly
   24016 implemented.
   24017 
   24018  Any list of specifiers and qualifiers at the start of a declaration may
   24019 contain attribute specifiers, whether or not such a list may in that
   24020 context contain storage class specifiers.  (Some attributes, however,
   24021 are essentially in the nature of storage class specifiers, and only make
   24022 sense where storage class specifiers may be used; for example,
   24023 'section'.)  There is one necessary limitation to this syntax: the first
   24024 old-style parameter declaration in a function definition cannot begin
   24025 with an attribute specifier, because such an attribute applies to the
   24026 function instead by syntax described below (which, however, is not yet
   24027 implemented in this case).  In some other cases, attribute specifiers
   24028 are permitted by this grammar but not yet supported by the compiler.
   24029 All attribute specifiers in this place relate to the declaration as a
   24030 whole.  In the obsolescent usage where a type of 'int' is implied by the
   24031 absence of type specifiers, such a list of specifiers and qualifiers may
   24032 be an attribute specifier list with no other specifiers or qualifiers.
   24033 
   24034  At present, the first parameter in a function prototype must have some
   24035 type specifier that is not an attribute specifier; this resolves an
   24036 ambiguity in the interpretation of 'void f(int (__attribute__((foo))
   24037 x))', but is subject to change.  At present, if the parentheses of a
   24038 function declarator contain only attributes then those attributes are
   24039 ignored, rather than yielding an error or warning or implying a single
   24040 parameter of type int, but this is subject to change.
   24041 
   24042  An attribute specifier list may appear immediately before a declarator
   24043 (other than the first) in a comma-separated list of declarators in a
   24044 declaration of more than one identifier using a single list of
   24045 specifiers and qualifiers.  Such attribute specifiers apply only to the
   24046 identifier before whose declarator they appear.  For example, in
   24047 
   24048      __attribute__((noreturn)) void d0 (void),
   24049          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
   24050           d2 (void)
   24051 
   24052 the 'noreturn' attribute applies to all the functions declared; the
   24053 'format' attribute only applies to 'd1'.
   24054 
   24055  An attribute specifier list may appear immediately before the comma,
   24056 '=' or semicolon terminating the declaration of an identifier other than
   24057 a function definition.  Such attribute specifiers apply to the declared
   24058 object or function.  Where an assembler name for an object or function
   24059 is specified (*note Asm Labels::), the attribute must follow the 'asm'
   24060 specification.
   24061 
   24062  An attribute specifier list may, in future, be permitted to appear
   24063 after the declarator in a function definition (before any old-style
   24064 parameter declarations or the function body).
   24065 
   24066  Attribute specifiers may be mixed with type qualifiers appearing inside
   24067 the '[]' of a parameter array declarator, in the C99 construct by which
   24068 such qualifiers are applied to the pointer to which the array is
   24069 implicitly converted.  Such attribute specifiers apply to the pointer,
   24070 not to the array, but at present this is not implemented and they are
   24071 ignored.
   24072 
   24073  An attribute specifier list may appear at the start of a nested
   24074 declarator.  At present, there are some limitations in this usage: the
   24075 attributes correctly apply to the declarator, but for most individual
   24076 attributes the semantics this implies are not implemented.  When
   24077 attribute specifiers follow the '*' of a pointer declarator, they may be
   24078 mixed with any type qualifiers present.  The following describes the
   24079 formal semantics of this syntax.  It makes the most sense if you are
   24080 familiar with the formal specification of declarators in the ISO C
   24081 standard.
   24082 
   24083  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
   24084 where 'T' contains declaration specifiers that specify a type TYPE (such
   24085 as 'int') and 'D1' is a declarator that contains an identifier IDENT.
   24086 The type specified for IDENT for derived declarators whose type does not
   24087 include an attribute specifier is as in the ISO C standard.
   24088 
   24089  If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
   24090 declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
   24091 for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
   24092 ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
   24093 
   24094  If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
   24095 and the declaration 'T D' specifies the type
   24096 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
   24097 type "DERIVED-DECLARATOR-TYPE-LIST
   24098 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
   24099 
   24100  For example,
   24101 
   24102      void (__attribute__((noreturn)) ****f) (void);
   24103 
   24104 specifies the type "pointer to pointer to pointer to pointer to
   24105 non-returning function returning 'void'".  As another example,
   24106 
   24107      char *__attribute__((aligned(8))) *f;
   24108 
   24109 specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
   24110 again that this does not work with most attributes; for example, the
   24111 usage of 'aligned' and 'noreturn' attributes given above is not yet
   24112 supported.
   24113 
   24114  For compatibility with existing code written for compiler versions that
   24115 did not implement attributes on nested declarators, some laxity is
   24116 allowed in the placing of attributes.  If an attribute that only applies
   24117 to types is applied to a declaration, it is treated as applying to the
   24118 type of that declaration.  If an attribute that only applies to
   24119 declarations is applied to the type of a declaration, it is treated as
   24120 applying to that declaration; and, for compatibility with code placing
   24121 the attributes immediately before the identifier declared, such an
   24122 attribute applied to a function return type is treated as applying to
   24123 the function type, and such an attribute applied to an array element
   24124 type is treated as applying to the array type.  If an attribute that
   24125 only applies to function types is applied to a pointer-to-function type,
   24126 it is treated as applying to the pointer target type; if such an
   24127 attribute is applied to a function return type that is not a
   24128 pointer-to-function type, it is treated as applying to the function
   24129 type.
   24130 
   24131 
   24132 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
   24133 
   24134 6.32 Prototypes and Old-Style Function Definitions
   24135 ==================================================
   24136 
   24137 GNU C extends ISO C to allow a function prototype to override a later
   24138 old-style non-prototype definition.  Consider the following example:
   24139 
   24140      /* Use prototypes unless the compiler is old-fashioned.  */
   24141      #ifdef __STDC__
   24142      #define P(x) x
   24143      #else
   24144      #define P(x) ()
   24145      #endif
   24146 
   24147      /* Prototype function declaration.  */
   24148      int isroot P((uid_t));
   24149 
   24150      /* Old-style function definition.  */
   24151      int
   24152      isroot (x)   /* ??? lossage here ??? */
   24153           uid_t x;
   24154      {
   24155        return x == 0;
   24156      }
   24157 
   24158  Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
   24159 this example, because subword arguments in old-style non-prototype
   24160 definitions are promoted.  Therefore in this example the function
   24161 definition's argument is really an 'int', which does not match the
   24162 prototype argument type of 'short'.
   24163 
   24164  This restriction of ISO C makes it hard to write code that is portable
   24165 to traditional C compilers, because the programmer does not know whether
   24166 the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
   24167 these GNU C allows a prototype to override a later old-style definition.
   24168 More precisely, in GNU C, a function prototype argument type overrides
   24169 the argument type specified by a later old-style definition if the
   24170 former type is the same as the latter type before promotion.  Thus in
   24171 GNU C the above example is equivalent to the following:
   24172 
   24173      int isroot (uid_t);
   24174 
   24175      int
   24176      isroot (uid_t x)
   24177      {
   24178        return x == 0;
   24179      }
   24180 
   24181 GNU C++ does not support old-style function definitions, so this
   24182 extension is irrelevant.
   24183 
   24184 
   24185 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
   24186 
   24187 6.33 C++ Style Comments
   24188 =======================
   24189 
   24190 In GNU C, you may use C++ style comments, which start with '//' and
   24191 continue until the end of the line.  Many other C implementations allow
   24192 such comments, and they are included in the 1999 C standard.  However,
   24193 C++ style comments are not recognized if you specify an '-std' option
   24194 specifying a version of ISO C before C99, or '-ansi' (equivalent to
   24195 '-std=c90').
   24196 
   24197 
   24198 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
   24199 
   24200 6.34 Dollar Signs in Identifier Names
   24201 =====================================
   24202 
   24203 In GNU C, you may normally use dollar signs in identifier names.  This
   24204 is because many traditional C implementations allow such identifiers.
   24205 However, dollar signs in identifiers are not supported on a few target
   24206 machines, typically because the target assembler does not allow them.
   24207 
   24208 
   24209 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
   24210 
   24211 6.35 The Character <ESC> in Constants
   24212 =====================================
   24213 
   24214 You can use the sequence '\e' in a string or character constant to stand
   24215 for the ASCII character <ESC>.
   24216 
   24217 
   24218 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
   24219 
   24220 6.36 Specifying Attributes of Variables
   24221 =======================================
   24222 
   24223 The keyword '__attribute__' allows you to specify special attributes of
   24224 variables or structure fields.  This keyword is followed by an attribute
   24225 specification inside double parentheses.  Some attributes are currently
   24226 defined generically for variables.  Other attributes are defined for
   24227 variables on particular target systems.  Other attributes are available
   24228 for functions (*note Function Attributes::) and for types (*note Type
   24229 Attributes::).  Other front ends might define more attributes (*note
   24230 Extensions to the C++ Language: C++ Extensions.).
   24231 
   24232  You may also specify attributes with '__' preceding and following each
   24233 keyword.  This allows you to use them in header files without being
   24234 concerned about a possible macro of the same name.  For example, you may
   24235 use '__aligned__' instead of 'aligned'.
   24236 
   24237  *Note Attribute Syntax::, for details of the exact syntax for using
   24238 attributes.
   24239 
   24240 'aligned (ALIGNMENT)'
   24241      This attribute specifies a minimum alignment for the variable or
   24242      structure field, measured in bytes.  For example, the declaration:
   24243 
   24244           int x __attribute__ ((aligned (16))) = 0;
   24245 
   24246      causes the compiler to allocate the global variable 'x' on a
   24247      16-byte boundary.  On a 68040, this could be used in conjunction
   24248      with an 'asm' expression to access the 'move16' instruction which
   24249      requires 16-byte aligned operands.
   24250 
   24251      You can also specify the alignment of structure fields.  For
   24252      example, to create a double-word aligned 'int' pair, you could
   24253      write:
   24254 
   24255           struct foo { int x[2] __attribute__ ((aligned (8))); };
   24256 
   24257      This is an alternative to creating a union with a 'double' member,
   24258      which forces the union to be double-word aligned.
   24259 
   24260      As in the preceding examples, you can explicitly specify the
   24261      alignment (in bytes) that you wish the compiler to use for a given
   24262      variable or structure field.  Alternatively, you can leave out the
   24263      alignment factor and just ask the compiler to align a variable or
   24264      field to the default alignment for the target architecture you are
   24265      compiling for.  The default alignment is sufficient for all scalar
   24266      types, but may not be enough for all vector types on a target that
   24267      supports vector operations.  The default alignment is fixed for a
   24268      particular target ABI.
   24269 
   24270      GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
   24271      which is the largest alignment ever used for any data type on the
   24272      target machine you are compiling for.  For example, you could
   24273      write:
   24274 
   24275           short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
   24276 
   24277      The compiler automatically sets the alignment for the declared
   24278      variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
   24279      make copy operations more efficient, because the compiler can use
   24280      whatever instructions copy the biggest chunks of memory when
   24281      performing copies to or from the variables or fields that you have
   24282      aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
   24283      may change depending on command-line options.
   24284 
   24285      When used on a struct, or struct member, the 'aligned' attribute
   24286      can only increase the alignment; in order to decrease it, the
   24287      'packed' attribute must be specified as well.  When used as part of
   24288      a typedef, the 'aligned' attribute can both increase and decrease
   24289      alignment, and specifying the 'packed' attribute generates a
   24290      warning.
   24291 
   24292      Note that the effectiveness of 'aligned' attributes may be limited
   24293      by inherent limitations in your linker.  On many systems, the
   24294      linker is only able to arrange for variables to be aligned up to a
   24295      certain maximum alignment.  (For some linkers, the maximum
   24296      supported alignment may be very very small.)  If your linker is
   24297      only able to align variables up to a maximum of 8-byte alignment,
   24298      then specifying 'aligned(16)' in an '__attribute__' still only
   24299      provides you with 8-byte alignment.  See your linker documentation
   24300      for further information.
   24301 
   24302      The 'aligned' attribute can also be used for functions (*note
   24303      Function Attributes::.)
   24304 
   24305 'cleanup (CLEANUP_FUNCTION)'
   24306      The 'cleanup' attribute runs a function when the variable goes out
   24307      of scope.  This attribute can only be applied to auto function
   24308      scope variables; it may not be applied to parameters or variables
   24309      with static storage duration.  The function must take one
   24310      parameter, a pointer to a type compatible with the variable.  The
   24311      return value of the function (if any) is ignored.
   24312 
   24313      If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
   24314      the stack unwinding that happens during the processing of the
   24315      exception.  Note that the 'cleanup' attribute does not allow the
   24316      exception to be caught, only to perform an action.  It is undefined
   24317      what happens if CLEANUP_FUNCTION does not return normally.
   24318 
   24319 'common'
   24320 'nocommon'
   24321      The 'common' attribute requests GCC to place a variable in "common"
   24322      storage.  The 'nocommon' attribute requests the opposite--to
   24323      allocate space for it directly.
   24324 
   24325      These attributes override the default chosen by the '-fno-common'
   24326      and '-fcommon' flags respectively.
   24327 
   24328 'deprecated'
   24329 'deprecated (MSG)'
   24330      The 'deprecated' attribute results in a warning if the variable is
   24331      used anywhere in the source file.  This is useful when identifying
   24332      variables that are expected to be removed in a future version of a
   24333      program.  The warning also includes the location of the declaration
   24334      of the deprecated variable, to enable users to easily find further
   24335      information about why the variable is deprecated, or what they
   24336      should do instead.  Note that the warning only occurs for uses:
   24337 
   24338           extern int old_var __attribute__ ((deprecated));
   24339           extern int old_var;
   24340           int new_fn () { return old_var; }
   24341 
   24342      results in a warning on line 3 but not line 2.  The optional MSG
   24343      argument, which must be a string, is printed in the warning if
   24344      present.
   24345 
   24346      The 'deprecated' attribute can also be used for functions and types
   24347      (*note Function Attributes::, *note Type Attributes::.)
   24348 
   24349 'mode (MODE)'
   24350      This attribute specifies the data type for the
   24351      declaration--whichever type corresponds to the mode MODE.  This in
   24352      effect lets you request an integer or floating-point type according
   24353      to its width.
   24354 
   24355      You may also specify a mode of 'byte' or '__byte__' to indicate the
   24356      mode corresponding to a one-byte integer, 'word' or '__word__' for
   24357      the mode of a one-word integer, and 'pointer' or '__pointer__' for
   24358      the mode used to represent pointers.
   24359 
   24360 'packed'
   24361      The 'packed' attribute specifies that a variable or structure field
   24362      should have the smallest possible alignment--one byte for a
   24363      variable, and one bit for a field, unless you specify a larger
   24364      value with the 'aligned' attribute.
   24365 
   24366      Here is a structure in which the field 'x' is packed, so that it
   24367      immediately follows 'a':
   24368 
   24369           struct foo
   24370           {
   24371             char a;
   24372             int x[2] __attribute__ ((packed));
   24373           };
   24374 
   24375      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
   24376      attribute on bit-fields of type 'char'.  This has been fixed in GCC
   24377      4.4 but the change can lead to differences in the structure layout.
   24378      See the documentation of '-Wpacked-bitfield-compat' for more
   24379      information.
   24380 
   24381 'section ("SECTION-NAME")'
   24382      Normally, the compiler places the objects it generates in sections
   24383      like 'data' and 'bss'.  Sometimes, however, you need additional
   24384      sections, or you need certain particular variables to appear in
   24385      special sections, for example to map to special hardware.  The
   24386      'section' attribute specifies that a variable (or function) lives
   24387      in a particular section.  For example, this small program uses
   24388      several specific section names:
   24389 
   24390           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
   24391           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
   24392           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
   24393           int init_data __attribute__ ((section ("INITDATA")));
   24394 
   24395           main()
   24396           {
   24397             /* Initialize stack pointer */
   24398             init_sp (stack + sizeof (stack));
   24399 
   24400             /* Initialize initialized data */
   24401             memcpy (&init_data, &data, &edata - &data);
   24402 
   24403             /* Turn on the serial ports */
   24404             init_duart (&a);
   24405             init_duart (&b);
   24406           }
   24407 
   24408      Use the 'section' attribute with _global_ variables and not _local_
   24409      variables, as shown in the example.
   24410 
   24411      You may use the 'section' attribute with initialized or
   24412      uninitialized global variables but the linker requires each object
   24413      be defined once, with the exception that uninitialized variables
   24414      tentatively go in the 'common' (or 'bss') section and can be
   24415      multiply "defined".  Using the 'section' attribute changes what
   24416      section the variable goes into and may cause the linker to issue an
   24417      error if an uninitialized variable has multiple definitions.  You
   24418      can force a variable to be initialized with the '-fno-common' flag
   24419      or the 'nocommon' attribute.
   24420 
   24421      Some file formats do not support arbitrary sections so the
   24422      'section' attribute is not available on all platforms.  If you need
   24423      to map the entire contents of a module to a particular section,
   24424      consider using the facilities of the linker instead.
   24425 
   24426 'shared'
   24427      On Microsoft Windows, in addition to putting variable definitions
   24428      in a named section, the section can also be shared among all
   24429      running copies of an executable or DLL.  For example, this small
   24430      program defines shared data by putting it in a named section
   24431      'shared' and marking the section shareable:
   24432 
   24433           int foo __attribute__((section ("shared"), shared)) = 0;
   24434 
   24435           int
   24436           main()
   24437           {
   24438             /* Read and write foo.  All running
   24439                copies see the same value.  */
   24440             return 0;
   24441           }
   24442 
   24443      You may only use the 'shared' attribute along with 'section'
   24444      attribute with a fully-initialized global definition because of the
   24445      way linkers work.  See 'section' attribute for more information.
   24446 
   24447      The 'shared' attribute is only available on Microsoft Windows.
   24448 
   24449 'tls_model ("TLS_MODEL")'
   24450      The 'tls_model' attribute sets thread-local storage model (*note
   24451      Thread-Local::) of a particular '__thread' variable, overriding
   24452      '-ftls-model=' command-line switch on a per-variable basis.  The
   24453      TLS_MODEL argument should be one of 'global-dynamic',
   24454      'local-dynamic', 'initial-exec' or 'local-exec'.
   24455 
   24456      Not all targets support this attribute.
   24457 
   24458 'unused'
   24459      This attribute, attached to a variable, means that the variable is
   24460      meant to be possibly unused.  GCC does not produce a warning for
   24461      this variable.
   24462 
   24463 'used'
   24464      This attribute, attached to a variable, means that the variable
   24465      must be emitted even if it appears that the variable is not
   24466      referenced.
   24467 
   24468      When applied to a static data member of a C++ class template, the
   24469      attribute also means that the member is instantiated if the class
   24470      itself is instantiated.
   24471 
   24472 'vector_size (BYTES)'
   24473      This attribute specifies the vector size for the variable, measured
   24474      in bytes.  For example, the declaration:
   24475 
   24476           int foo __attribute__ ((vector_size (16)));
   24477 
   24478      causes the compiler to set the mode for 'foo', to be 16 bytes,
   24479      divided into 'int' sized units.  Assuming a 32-bit int (a vector of
   24480      4 units of 4 bytes), the corresponding mode of 'foo' is V4SI.
   24481 
   24482      This attribute is only applicable to integral and float scalars,
   24483      although arrays, pointers, and function return values are allowed
   24484      in conjunction with this construct.
   24485 
   24486      Aggregates with this attribute are invalid, even if they are of the
   24487      same size as a corresponding scalar.  For example, the declaration:
   24488 
   24489           struct S { int a; };
   24490           struct S  __attribute__ ((vector_size (16))) foo;
   24491 
   24492      is invalid even if the size of the structure is the same as the
   24493      size of the 'int'.
   24494 
   24495 'selectany'
   24496      The 'selectany' attribute causes an initialized global variable to
   24497      have link-once semantics.  When multiple definitions of the
   24498      variable are encountered by the linker, the first is selected and
   24499      the remainder are discarded.  Following usage by the Microsoft
   24500      compiler, the linker is told _not_ to warn about size or content
   24501      differences of the multiple definitions.
   24502 
   24503      Although the primary usage of this attribute is for POD types, the
   24504      attribute can also be applied to global C++ objects that are
   24505      initialized by a constructor.  In this case, the static
   24506      initialization and destruction code for the object is emitted in
   24507      each translation defining the object, but the calls to the
   24508      constructor and destructor are protected by a link-once guard
   24509      variable.
   24510 
   24511      The 'selectany' attribute is only available on Microsoft Windows
   24512      targets.  You can use '__declspec (selectany)' as a synonym for
   24513      '__attribute__ ((selectany))' for compatibility with other
   24514      compilers.
   24515 
   24516 'weak'
   24517      The 'weak' attribute is described in *note Function Attributes::.
   24518 
   24519 'dllimport'
   24520      The 'dllimport' attribute is described in *note Function
   24521      Attributes::.
   24522 
   24523 'dllexport'
   24524      The 'dllexport' attribute is described in *note Function
   24525      Attributes::.
   24526 
   24527 6.36.1 AVR Variable Attributes
   24528 ------------------------------
   24529 
   24530 'progmem'
   24531      The 'progmem' attribute is used on the AVR to place read-only data
   24532      in the non-volatile program memory (flash).  The 'progmem'
   24533      attribute accomplishes this by putting respective variables into a
   24534      section whose name starts with '.progmem'.
   24535 
   24536      This attribute works similar to the 'section' attribute but adds
   24537      additional checking.  Notice that just like the 'section'
   24538      attribute, 'progmem' affects the location of the data but not how
   24539      this data is accessed.
   24540 
   24541      In order to read data located with the 'progmem' attribute (inline)
   24542      assembler must be used.
   24543           /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
   24544           #include <avr/pgmspace.h>
   24545 
   24546           /* Locate var in flash memory */
   24547           const int var[2] PROGMEM = { 1, 2 };
   24548 
   24549           int read_var (int i)
   24550           {
   24551               /* Access var[] by accessor macro from avr/pgmspace.h */
   24552               return (int) pgm_read_word (& var[i]);
   24553           }
   24554 
   24555      AVR is a Harvard architecture processor and data and read-only data
   24556      normally resides in the data memory (RAM).
   24557 
   24558      See also the *note AVR Named Address Spaces:: section for an
   24559      alternate way to locate and access data in flash memory.
   24560 
   24561 6.36.2 Blackfin Variable Attributes
   24562 -----------------------------------
   24563 
   24564 Three attributes are currently defined for the Blackfin.
   24565 
   24566 'l1_data'
   24567 'l1_data_A'
   24568 'l1_data_B'
   24569      Use these attributes on the Blackfin to place the variable into L1
   24570      Data SRAM. Variables with 'l1_data' attribute are put into the
   24571      specific section named '.l1.data'.  Those with 'l1_data_A'
   24572      attribute are put into the specific section named '.l1.data.A'.
   24573      Those with 'l1_data_B' attribute are put into the specific section
   24574      named '.l1.data.B'.
   24575 
   24576 'l2'
   24577      Use this attribute on the Blackfin to place the variable into L2
   24578      SRAM. Variables with 'l2' attribute are put into the specific
   24579      section named '.l2.data'.
   24580 
   24581 6.36.3 M32R/D Variable Attributes
   24582 ---------------------------------
   24583 
   24584 One attribute is currently defined for the M32R/D.
   24585 
   24586 'model (MODEL-NAME)'
   24587      Use this attribute on the M32R/D to set the addressability of an
   24588      object.  The identifier MODEL-NAME is one of 'small', 'medium', or
   24589      'large', representing each of the code models.
   24590 
   24591      Small model objects live in the lower 16MB of memory (so that their
   24592      addresses can be loaded with the 'ld24' instruction).
   24593 
   24594      Medium and large model objects may live anywhere in the 32-bit
   24595      address space (the compiler generates 'seth/add3' instructions to
   24596      load their addresses).
   24597 
   24598 6.36.4 MeP Variable Attributes
   24599 ------------------------------
   24600 
   24601 The MeP target has a number of addressing modes and busses.  The 'near'
   24602 space spans the standard memory space's first 16 megabytes (24 bits).
   24603 The 'far' space spans the entire 32-bit memory space.  The 'based' space
   24604 is a 128-byte region in the memory space that is addressed relative to
   24605 the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
   24606 the '$gp' register.  In addition to these memory regions, the MeP target
   24607 has a separate 16-bit control bus which is specified with 'cb'
   24608 attributes.
   24609 
   24610 'based'
   24611      Any variable with the 'based' attribute is assigned to the '.based'
   24612      section, and is accessed with relative to the '$tp' register.
   24613 
   24614 'tiny'
   24615      Likewise, the 'tiny' attribute assigned variables to the '.tiny'
   24616      section, relative to the '$gp' register.
   24617 
   24618 'near'
   24619      Variables with the 'near' attribute are assumed to have addresses
   24620      that fit in a 24-bit addressing mode.  This is the default for
   24621      large variables ('-mtiny=4' is the default) but this attribute can
   24622      override '-mtiny=' for small variables, or override '-ml'.
   24623 
   24624 'far'
   24625      Variables with the 'far' attribute are addressed using a full
   24626      32-bit address.  Since this covers the entire memory space, this
   24627      allows modules to make no assumptions about where variables might
   24628      be stored.
   24629 
   24630 'io'
   24631 'io (ADDR)'
   24632      Variables with the 'io' attribute are used to address memory-mapped
   24633      peripherals.  If an address is specified, the variable is assigned
   24634      that address, else it is not assigned an address (it is assumed
   24635      some other module assigns an address).  Example:
   24636 
   24637           int timer_count __attribute__((io(0x123)));
   24638 
   24639 'cb'
   24640 'cb (ADDR)'
   24641      Variables with the 'cb' attribute are used to access the control
   24642      bus, using special instructions.  'addr' indicates the control bus
   24643      address.  Example:
   24644 
   24645           int cpu_clock __attribute__((cb(0x123)));
   24646 
   24647 6.36.5 i386 Variable Attributes
   24648 -------------------------------
   24649 
   24650 Two attributes are currently defined for i386 configurations:
   24651 'ms_struct' and 'gcc_struct'
   24652 
   24653 'ms_struct'
   24654 'gcc_struct'
   24655 
   24656      If 'packed' is used on a structure, or if bit-fields are used, it
   24657      may be that the Microsoft ABI lays out the structure differently
   24658      than the way GCC normally does.  Particularly when moving packed
   24659      data between functions compiled with GCC and the native Microsoft
   24660      compiler (either via function call or as data in a file), it may be
   24661      necessary to access either format.
   24662 
   24663      Currently '-m[no-]ms-bitfields' is provided for the Microsoft
   24664      Windows X86 compilers to match the native Microsoft compiler.
   24665 
   24666      The Microsoft structure layout algorithm is fairly simple with the
   24667      exception of the bit-field packing.  The padding and alignment of
   24668      members of structures and whether a bit-field can straddle a
   24669      storage-unit boundary are determine by these rules:
   24670 
   24671        1. Structure members are stored sequentially in the order in
   24672           which they are declared: the first member has the lowest
   24673           memory address and the last member the highest.
   24674 
   24675        2. Every data object has an alignment requirement.  The alignment
   24676           requirement for all data except structures, unions, and arrays
   24677           is either the size of the object or the current packing size
   24678           (specified with either the 'aligned' attribute or the 'pack'
   24679           pragma), whichever is less.  For structures, unions, and
   24680           arrays, the alignment requirement is the largest alignment
   24681           requirement of its members.  Every object is allocated an
   24682           offset so that:
   24683 
   24684                offset % alignment_requirement == 0
   24685 
   24686        3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
   24687           allocation unit if the integral types are the same size and if
   24688           the next bit-field fits into the current allocation unit
   24689           without crossing the boundary imposed by the common alignment
   24690           requirements of the bit-fields.
   24691 
   24692      MSVC interprets zero-length bit-fields in the following ways:
   24693 
   24694        1. If a zero-length bit-field is inserted between two bit-fields
   24695           that are normally coalesced, the bit-fields are not coalesced.
   24696 
   24697           For example:
   24698 
   24699                struct
   24700                 {
   24701                   unsigned long bf_1 : 12;
   24702                   unsigned long : 0;
   24703                   unsigned long bf_2 : 12;
   24704                 } t1;
   24705 
   24706           The size of 't1' is 8 bytes with the zero-length bit-field.
   24707           If the zero-length bit-field were removed, 't1''s size would
   24708           be 4 bytes.
   24709 
   24710        2. If a zero-length bit-field is inserted after a bit-field,
   24711           'foo', and the alignment of the zero-length bit-field is
   24712           greater than the member that follows it, 'bar', 'bar' is
   24713           aligned as the type of the zero-length bit-field.
   24714 
   24715           For example:
   24716 
   24717                struct
   24718                 {
   24719                   char foo : 4;
   24720                   short : 0;
   24721                   char bar;
   24722                 } t2;
   24723 
   24724                struct
   24725                 {
   24726                   char foo : 4;
   24727                   short : 0;
   24728                   double bar;
   24729                 } t3;
   24730 
   24731           For 't2', 'bar' is placed at offset 2, rather than offset 1.
   24732           Accordingly, the size of 't2' is 4.  For 't3', the zero-length
   24733           bit-field does not affect the alignment of 'bar' or, as a
   24734           result, the size of the structure.
   24735 
   24736           Taking this into account, it is important to note the
   24737           following:
   24738 
   24739             1. If a zero-length bit-field follows a normal bit-field,
   24740                the type of the zero-length bit-field may affect the
   24741                alignment of the structure as whole.  For example, 't2'
   24742                has a size of 4 bytes, since the zero-length bit-field
   24743                follows a normal bit-field, and is of type short.
   24744 
   24745             2. Even if a zero-length bit-field is not followed by a
   24746                normal bit-field, it may still affect the alignment of
   24747                the structure:
   24748 
   24749                     struct
   24750                      {
   24751                        char foo : 6;
   24752                        long : 0;
   24753                      } t4;
   24754 
   24755                Here, 't4' takes up 4 bytes.
   24756 
   24757        3. Zero-length bit-fields following non-bit-field members are
   24758           ignored:
   24759 
   24760                struct
   24761                 {
   24762                   char foo;
   24763                   long : 0;
   24764                   char bar;
   24765                 } t5;
   24766 
   24767           Here, 't5' takes up 2 bytes.
   24768 
   24769 6.36.6 PowerPC Variable Attributes
   24770 ----------------------------------
   24771 
   24772 Three attributes currently are defined for PowerPC configurations:
   24773 'altivec', 'ms_struct' and 'gcc_struct'.
   24774 
   24775  For full documentation of the struct attributes please see the
   24776 documentation in *note i386 Variable Attributes::.
   24777 
   24778  For documentation of 'altivec' attribute please see the documentation
   24779 in *note PowerPC Type Attributes::.
   24780 
   24781 6.36.7 SPU Variable Attributes
   24782 ------------------------------
   24783 
   24784 The SPU supports the 'spu_vector' attribute for variables.  For
   24785 documentation of this attribute please see the documentation in *note
   24786 SPU Type Attributes::.
   24787 
   24788 6.36.8 Xstormy16 Variable Attributes
   24789 ------------------------------------
   24790 
   24791 One attribute is currently defined for xstormy16 configurations:
   24792 'below100'.
   24793 
   24794 'below100'
   24795 
   24796      If a variable has the 'below100' attribute ('BELOW100' is allowed
   24797      also), GCC places the variable in the first 0x100 bytes of memory
   24798      and use special opcodes to access it.  Such variables are placed in
   24799      either the '.bss_below100' section or the '.data_below100' section.
   24800 
   24801 
   24802 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
   24803 
   24804 6.37 Specifying Attributes of Types
   24805 ===================================
   24806 
   24807 The keyword '__attribute__' allows you to specify special attributes of
   24808 'struct' and 'union' types when you define such types.  This keyword is
   24809 followed by an attribute specification inside double parentheses.  Seven
   24810 attributes are currently defined for types: 'aligned', 'packed',
   24811 'transparent_union', 'unused', 'deprecated', 'visibility', and
   24812 'may_alias'.  Other attributes are defined for functions (*note Function
   24813 Attributes::) and for variables (*note Variable Attributes::).
   24814 
   24815  You may also specify any one of these attributes with '__' preceding
   24816 and following its keyword.  This allows you to use these attributes in
   24817 header files without being concerned about a possible macro of the same
   24818 name.  For example, you may use '__aligned__' instead of 'aligned'.
   24819 
   24820  You may specify type attributes in an enum, struct or union type
   24821 declaration or definition, or for other types in a 'typedef'
   24822 declaration.
   24823 
   24824  For an enum, struct or union type, you may specify attributes either
   24825 between the enum, struct or union tag and the name of the type, or just
   24826 past the closing curly brace of the _definition_.  The former syntax is
   24827 preferred.
   24828 
   24829  *Note Attribute Syntax::, for details of the exact syntax for using
   24830 attributes.
   24831 
   24832 'aligned (ALIGNMENT)'
   24833      This attribute specifies a minimum alignment (in bytes) for
   24834      variables of the specified type.  For example, the declarations:
   24835 
   24836           struct S { short f[3]; } __attribute__ ((aligned (8)));
   24837           typedef int more_aligned_int __attribute__ ((aligned (8)));
   24838 
   24839      force the compiler to ensure (as far as it can) that each variable
   24840      whose type is 'struct S' or 'more_aligned_int' is allocated and
   24841      aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
   24842      variables of type 'struct S' aligned to 8-byte boundaries allows
   24843      the compiler to use the 'ldd' and 'std' (doubleword load and store)
   24844      instructions when copying one variable of type 'struct S' to
   24845      another, thus improving run-time efficiency.
   24846 
   24847      Note that the alignment of any given 'struct' or 'union' type is
   24848      required by the ISO C standard to be at least a perfect multiple of
   24849      the lowest common multiple of the alignments of all of the members
   24850      of the 'struct' or 'union' in question.  This means that you _can_
   24851      effectively adjust the alignment of a 'struct' or 'union' type by
   24852      attaching an 'aligned' attribute to any one of the members of such
   24853      a type, but the notation illustrated in the example above is a more
   24854      obvious, intuitive, and readable way to request the compiler to
   24855      adjust the alignment of an entire 'struct' or 'union' type.
   24856 
   24857      As in the preceding example, you can explicitly specify the
   24858      alignment (in bytes) that you wish the compiler to use for a given
   24859      'struct' or 'union' type.  Alternatively, you can leave out the
   24860      alignment factor and just ask the compiler to align a type to the
   24861      maximum useful alignment for the target machine you are compiling
   24862      for.  For example, you could write:
   24863 
   24864           struct S { short f[3]; } __attribute__ ((aligned));
   24865 
   24866      Whenever you leave out the alignment factor in an 'aligned'
   24867      attribute specification, the compiler automatically sets the
   24868      alignment for the type to the largest alignment that is ever used
   24869      for any data type on the target machine you are compiling for.
   24870      Doing this can often make copy operations more efficient, because
   24871      the compiler can use whatever instructions copy the biggest chunks
   24872      of memory when performing copies to or from the variables that have
   24873      types that you have aligned this way.
   24874 
   24875      In the example above, if the size of each 'short' is 2 bytes, then
   24876      the size of the entire 'struct S' type is 6 bytes.  The smallest
   24877      power of two that is greater than or equal to that is 8, so the
   24878      compiler sets the alignment for the entire 'struct S' type to 8
   24879      bytes.
   24880 
   24881      Note that although you can ask the compiler to select a
   24882      time-efficient alignment for a given type and then declare only
   24883      individual stand-alone objects of that type, the compiler's ability
   24884      to select a time-efficient alignment is primarily useful only when
   24885      you plan to create arrays of variables having the relevant
   24886      (efficiently aligned) type.  If you declare or use arrays of
   24887      variables of an efficiently-aligned type, then it is likely that
   24888      your program also does pointer arithmetic (or subscripting, which
   24889      amounts to the same thing) on pointers to the relevant type, and
   24890      the code that the compiler generates for these pointer arithmetic
   24891      operations is often more efficient for efficiently-aligned types
   24892      than for other types.
   24893 
   24894      The 'aligned' attribute can only increase the alignment; but you
   24895      can decrease it by specifying 'packed' as well.  See below.
   24896 
   24897      Note that the effectiveness of 'aligned' attributes may be limited
   24898      by inherent limitations in your linker.  On many systems, the
   24899      linker is only able to arrange for variables to be aligned up to a
   24900      certain maximum alignment.  (For some linkers, the maximum
   24901      supported alignment may be very very small.)  If your linker is
   24902      only able to align variables up to a maximum of 8-byte alignment,
   24903      then specifying 'aligned(16)' in an '__attribute__' still only
   24904      provides you with 8-byte alignment.  See your linker documentation
   24905      for further information.
   24906 
   24907 'packed'
   24908      This attribute, attached to 'struct' or 'union' type definition,
   24909      specifies that each member (other than zero-width bit-fields) of
   24910      the structure or union is placed to minimize the memory required.
   24911      When attached to an 'enum' definition, it indicates that the
   24912      smallest integral type should be used.
   24913 
   24914      Specifying this attribute for 'struct' and 'union' types is
   24915      equivalent to specifying the 'packed' attribute on each of the
   24916      structure or union members.  Specifying the '-fshort-enums' flag on
   24917      the line is equivalent to specifying the 'packed' attribute on all
   24918      'enum' definitions.
   24919 
   24920      In the following example 'struct my_packed_struct''s members are
   24921      packed closely together, but the internal layout of its 's' member
   24922      is not packed--to do that, 'struct my_unpacked_struct' needs to be
   24923      packed too.
   24924 
   24925           struct my_unpacked_struct
   24926            {
   24927               char c;
   24928               int i;
   24929            };
   24930 
   24931           struct __attribute__ ((__packed__)) my_packed_struct
   24932             {
   24933                char c;
   24934                int  i;
   24935                struct my_unpacked_struct s;
   24936             };
   24937 
   24938      You may only specify this attribute on the definition of an 'enum',
   24939      'struct' or 'union', not on a 'typedef' that does not also define
   24940      the enumerated type, structure or union.
   24941 
   24942 'transparent_union'
   24943      This attribute, attached to a 'union' type definition, indicates
   24944      that any function parameter having that union type causes calls to
   24945      that function to be treated in a special way.
   24946 
   24947      First, the argument corresponding to a transparent union type can
   24948      be of any type in the union; no cast is required.  Also, if the
   24949      union contains a pointer type, the corresponding argument can be a
   24950      null pointer constant or a void pointer expression; and if the
   24951      union contains a void pointer type, the corresponding argument can
   24952      be any pointer expression.  If the union member type is a pointer,
   24953      qualifiers like 'const' on the referenced type must be respected,
   24954      just as with normal pointer conversions.
   24955 
   24956      Second, the argument is passed to the function using the calling
   24957      conventions of the first member of the transparent union, not the
   24958      calling conventions of the union itself.  All members of the union
   24959      must have the same machine representation; this is necessary for
   24960      this argument passing to work properly.
   24961 
   24962      Transparent unions are designed for library functions that have
   24963      multiple interfaces for compatibility reasons.  For example,
   24964      suppose the 'wait' function must accept either a value of type 'int
   24965      *' to comply with POSIX, or a value of type 'union wait *' to
   24966      comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
   24967      *', 'wait' would accept both kinds of arguments, but it would also
   24968      accept any other pointer type and this would make argument type
   24969      checking less useful.  Instead, '<sys/wait.h>' might define the
   24970      interface as follows:
   24971 
   24972           typedef union __attribute__ ((__transparent_union__))
   24973             {
   24974               int *__ip;
   24975               union wait *__up;
   24976             } wait_status_ptr_t;
   24977 
   24978           pid_t wait (wait_status_ptr_t);
   24979 
   24980      This interface allows either 'int *' or 'union wait *' arguments to
   24981      be passed, using the 'int *' calling convention.  The program can
   24982      call 'wait' with arguments of either type:
   24983 
   24984           int w1 () { int w; return wait (&w); }
   24985           int w2 () { union wait w; return wait (&w); }
   24986 
   24987      With this interface, 'wait''s implementation might look like this:
   24988 
   24989           pid_t wait (wait_status_ptr_t p)
   24990           {
   24991             return waitpid (-1, p.__ip, 0);
   24992           }
   24993 
   24994 'unused'
   24995      When attached to a type (including a 'union' or a 'struct'), this
   24996      attribute means that variables of that type are meant to appear
   24997      possibly unused.  GCC does not produce a warning for any variables
   24998      of that type, even if the variable appears to do nothing.  This is
   24999      often the case with lock or thread classes, which are usually
   25000      defined and then not referenced, but contain constructors and
   25001      destructors that have nontrivial bookkeeping functions.
   25002 
   25003 'deprecated'
   25004 'deprecated (MSG)'
   25005      The 'deprecated' attribute results in a warning if the type is used
   25006      anywhere in the source file.  This is useful when identifying types
   25007      that are expected to be removed in a future version of a program.
   25008      If possible, the warning also includes the location of the
   25009      declaration of the deprecated type, to enable users to easily find
   25010      further information about why the type is deprecated, or what they
   25011      should do instead.  Note that the warnings only occur for uses and
   25012      then only if the type is being applied to an identifier that itself
   25013      is not being declared as deprecated.
   25014 
   25015           typedef int T1 __attribute__ ((deprecated));
   25016           T1 x;
   25017           typedef T1 T2;
   25018           T2 y;
   25019           typedef T1 T3 __attribute__ ((deprecated));
   25020           T3 z __attribute__ ((deprecated));
   25021 
   25022      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
   25023      warning is issued for line 4 because T2 is not explicitly
   25024      deprecated.  Line 5 has no warning because T3 is explicitly
   25025      deprecated.  Similarly for line 6.  The optional MSG argument,
   25026      which must be a string, is printed in the warning if present.
   25027 
   25028      The 'deprecated' attribute can also be used for functions and
   25029      variables (*note Function Attributes::, *note Variable
   25030      Attributes::.)
   25031 
   25032 'may_alias'
   25033      Accesses through pointers to types with this attribute are not
   25034      subject to type-based alias analysis, but are instead assumed to be
   25035      able to alias any other type of objects.  In the context of section
   25036      6.5 paragraph 7 of the C99 standard, an lvalue expression
   25037      dereferencing such a pointer is treated like having a character
   25038      type.  See '-fstrict-aliasing' for more information on aliasing
   25039      issues.  This extension exists to support some vector APIs, in
   25040      which pointers to one vector type are permitted to alias pointers
   25041      to a different vector type.
   25042 
   25043      Note that an object of a type with this attribute does not have any
   25044      special semantics.
   25045 
   25046      Example of use:
   25047 
   25048           typedef short __attribute__((__may_alias__)) short_a;
   25049 
   25050           int
   25051           main (void)
   25052           {
   25053             int a = 0x12345678;
   25054             short_a *b = (short_a *) &a;
   25055 
   25056             b[1] = 0;
   25057 
   25058             if (a == 0x12345678)
   25059               abort();
   25060 
   25061             exit(0);
   25062           }
   25063 
   25064      If you replaced 'short_a' with 'short' in the variable declaration,
   25065      the above program would abort when compiled with
   25066      '-fstrict-aliasing', which is on by default at '-O2' or above in
   25067      recent GCC versions.
   25068 
   25069 'visibility'
   25070      In C++, attribute visibility (*note Function Attributes::) can also
   25071      be applied to class, struct, union and enum types.  Unlike other
   25072      type attributes, the attribute must appear between the initial
   25073      keyword and the name of the type; it cannot appear after the body
   25074      of the type.
   25075 
   25076      Note that the type visibility is applied to vague linkage entities
   25077      associated with the class (vtable, typeinfo node, etc.).  In
   25078      particular, if a class is thrown as an exception in one shared
   25079      object and caught in another, the class must have default
   25080      visibility.  Otherwise the two shared objects are unable to use the
   25081      same typeinfo node and exception handling will break.
   25082 
   25083  To specify multiple attributes, separate them by commas within the
   25084 double parentheses: for example, '__attribute__ ((aligned (16),
   25085 packed))'.
   25086 
   25087 6.37.1 ARM Type Attributes
   25088 --------------------------
   25089 
   25090 On those ARM targets that support 'dllimport' (such as Symbian OS), you
   25091 can use the 'notshared' attribute to indicate that the virtual table and
   25092 other similar data for a class should not be exported from a DLL.  For
   25093 example:
   25094 
   25095      class __declspec(notshared) C {
   25096      public:
   25097        __declspec(dllimport) C();
   25098        virtual void f();
   25099      }
   25100 
   25101      __declspec(dllexport)
   25102      C::C() {}
   25103 
   25104 In this code, 'C::C' is exported from the current DLL, but the virtual
   25105 table for 'C' is not exported.  (You can use '__attribute__' instead of
   25106 '__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)
   25107 
   25108 6.37.2 MeP Type Attributes
   25109 --------------------------
   25110 
   25111 Many of the MeP variable attributes may be applied to types as well.
   25112 Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
   25113 applied to either.  The 'io' and 'cb' attributes may not be applied to
   25114 types.
   25115 
   25116 6.37.3 i386 Type Attributes
   25117 ---------------------------
   25118 
   25119 Two attributes are currently defined for i386 configurations:
   25120 'ms_struct' and 'gcc_struct'.
   25121 
   25122 'ms_struct'
   25123 'gcc_struct'
   25124 
   25125      If 'packed' is used on a structure, or if bit-fields are used it
   25126      may be that the Microsoft ABI packs them differently than GCC
   25127      normally packs them.  Particularly when moving packed data between
   25128      functions compiled with GCC and the native Microsoft compiler
   25129      (either via function call or as data in a file), it may be
   25130      necessary to access either format.
   25131 
   25132      Currently '-m[no-]ms-bitfields' is provided for the Microsoft
   25133      Windows X86 compilers to match the native Microsoft compiler.
   25134 
   25135 6.37.4 PowerPC Type Attributes
   25136 ------------------------------
   25137 
   25138 Three attributes currently are defined for PowerPC configurations:
   25139 'altivec', 'ms_struct' and 'gcc_struct'.
   25140 
   25141  For full documentation of the 'ms_struct' and 'gcc_struct' attributes
   25142 please see the documentation in *note i386 Type Attributes::.
   25143 
   25144  The 'altivec' attribute allows one to declare AltiVec vector data types
   25145 supported by the AltiVec Programming Interface Manual.  The attribute
   25146 requires an argument to specify one of three vector types: 'vector__',
   25147 'pixel__' (always followed by unsigned short), and 'bool__' (always
   25148 followed by unsigned).
   25149 
   25150      __attribute__((altivec(vector__)))
   25151      __attribute__((altivec(pixel__))) unsigned short
   25152      __attribute__((altivec(bool__))) unsigned
   25153 
   25154  These attributes mainly are intended to support the '__vector',
   25155 '__pixel', and '__bool' AltiVec keywords.
   25156 
   25157 6.37.5 SPU Type Attributes
   25158 --------------------------
   25159 
   25160 The SPU supports the 'spu_vector' attribute for types.  This attribute
   25161 allows one to declare vector data types supported by the
   25162 Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
   25163 to support the '__vector' keyword.
   25164 
   25165 
   25166 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
   25167 
   25168 6.38 Inquiring on Alignment of Types or Variables
   25169 =================================================
   25170 
   25171 The keyword '__alignof__' allows you to inquire about how an object is
   25172 aligned, or the minimum alignment usually required by a type.  Its
   25173 syntax is just like 'sizeof'.
   25174 
   25175  For example, if the target machine requires a 'double' value to be
   25176 aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
   25177 is true on many RISC machines.  On more traditional machine designs,
   25178 '__alignof__ (double)' is 4 or even 2.
   25179 
   25180  Some machines never actually require alignment; they allow reference to
   25181 any data type even at an odd address.  For these machines, '__alignof__'
   25182 reports the smallest alignment that GCC gives the data type, usually as
   25183 mandated by the target ABI.
   25184 
   25185  If the operand of '__alignof__' is an lvalue rather than a type, its
   25186 value is the required alignment for its type, taking into account any
   25187 minimum alignment specified with GCC's '__attribute__' extension (*note
   25188 Variable Attributes::).  For example, after this declaration:
   25189 
   25190      struct foo { int x; char y; } foo1;
   25191 
   25192 the value of '__alignof__ (foo1.y)' is 1, even though its actual
   25193 alignment is probably 2 or 4, the same as '__alignof__ (int)'.
   25194 
   25195  It is an error to ask for the alignment of an incomplete type.
   25196 
   25197 
   25198 File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
   25199 
   25200 6.39 An Inline Function is As Fast As a Macro
   25201 =============================================
   25202 
   25203 By declaring a function inline, you can direct GCC to make calls to that
   25204 function faster.  One way GCC can achieve this is to integrate that
   25205 function's code into the code for its callers.  This makes execution
   25206 faster by eliminating the function-call overhead; in addition, if any of
   25207 the actual argument values are constant, their known values may permit
   25208 simplifications at compile time so that not all of the inline function's
   25209 code needs to be included.  The effect on code size is less predictable;
   25210 object code may be larger or smaller with function inlining, depending
   25211 on the particular case.  You can also direct GCC to try to integrate all
   25212 "simple enough" functions into their callers with the option
   25213 '-finline-functions'.
   25214 
   25215  GCC implements three different semantics of declaring a function
   25216 inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
   25217 'gnu_inline' attribute is present on all inline declarations, another
   25218 when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without
   25219 '-fgnu89-inline'), and the third is used when compiling C++.
   25220 
   25221  To declare a function inline, use the 'inline' keyword in its
   25222 declaration, like this:
   25223 
   25224      static inline int
   25225      inc (int *a)
   25226      {
   25227        return (*a)++;
   25228      }
   25229 
   25230  If you are writing a header file to be included in ISO C90 programs,
   25231 write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.
   25232 
   25233  The three types of inlining behave similarly in two important cases:
   25234 when the 'inline' keyword is used on a 'static' function, like the
   25235 example above, and when a function is first declared without using the
   25236 'inline' keyword and then is defined with 'inline', like this:
   25237 
   25238      extern int inc (int *a);
   25239      inline int
   25240      inc (int *a)
   25241      {
   25242        return (*a)++;
   25243      }
   25244 
   25245  In both of these common cases, the program behaves the same as if you
   25246 had not used the 'inline' keyword, except for its speed.
   25247 
   25248  When a function is both inline and 'static', if all calls to the
   25249 function are integrated into the caller, and the function's address is
   25250 never used, then the function's own assembler code is never referenced.
   25251 In this case, GCC does not actually output assembler code for the
   25252 function, unless you specify the option '-fkeep-inline-functions'.  Some
   25253 calls cannot be integrated for various reasons (in particular, calls
   25254 that precede the function's definition cannot be integrated, and neither
   25255 can recursive calls within the definition).  If there is a nonintegrated
   25256 call, then the function is compiled to assembler code as usual.  The
   25257 function must also be compiled as usual if the program refers to its
   25258 address, because that can't be inlined.
   25259 
   25260  Note that certain usages in a function definition can make it
   25261 unsuitable for inline substitution.  Among these usages are: variadic
   25262 functions, use of 'alloca', use of variable-length data types (*note
   25263 Variable Length::), use of computed goto (*note Labels as Values::), use
   25264 of nonlocal goto, and nested functions (*note Nested Functions::).
   25265 Using '-Winline' warns when a function marked 'inline' could not be
   25266 substituted, and gives the reason for the failure.
   25267 
   25268  As required by ISO C++, GCC considers member functions defined within
   25269 the body of a class to be marked inline even if they are not explicitly
   25270 declared with the 'inline' keyword.  You can override this with
   25271 '-fno-default-inline'; *note Options Controlling C++ Dialect: C++
   25272 Dialect Options.
   25273 
   25274  GCC does not inline any functions when not optimizing unless you
   25275 specify the 'always_inline' attribute for the function, like this:
   25276 
   25277      /* Prototype.  */
   25278      inline void foo (const char) __attribute__((always_inline));
   25279 
   25280  The remainder of this section is specific to GNU C90 inlining.
   25281 
   25282  When an inline function is not 'static', then the compiler must assume
   25283 that there may be calls from other source files; since a global symbol
   25284 can be defined only once in any program, the function must not be
   25285 defined in the other source files, so the calls therein cannot be
   25286 integrated.  Therefore, a non-'static' inline function is always
   25287 compiled on its own in the usual fashion.
   25288 
   25289  If you specify both 'inline' and 'extern' in the function definition,
   25290 then the definition is used only for inlining.  In no case is the
   25291 function compiled on its own, not even if you refer to its address
   25292 explicitly.  Such an address becomes an external reference, as if you
   25293 had only declared the function, and had not defined it.
   25294 
   25295  This combination of 'inline' and 'extern' has almost the effect of a
   25296 macro.  The way to use it is to put a function definition in a header
   25297 file with these keywords, and put another copy of the definition
   25298 (lacking 'inline' and 'extern') in a library file.  The definition in
   25299 the header file causes most calls to the function to be inlined.  If any
   25300 uses of the function remain, they refer to the single copy in the
   25301 library.
   25302 
   25303 
   25304 File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
   25305 
   25306 6.40 When is a Volatile Object Accessed?
   25307 ========================================
   25308 
   25309 C has the concept of volatile objects.  These are normally accessed by
   25310 pointers and used for accessing hardware or inter-thread communication.
   25311 The standard encourages compilers to refrain from optimizations
   25312 concerning accesses to volatile objects, but leaves it implementation
   25313 defined as to what constitutes a volatile access.  The minimum
   25314 requirement is that at a sequence point all previous accesses to
   25315 volatile objects have stabilized and no subsequent accesses have
   25316 occurred.  Thus an implementation is free to reorder and combine
   25317 volatile accesses that occur between sequence points, but cannot do so
   25318 for accesses across a sequence point.  The use of volatile does not
   25319 allow you to violate the restriction on updating objects multiple times
   25320 between two sequence points.
   25321 
   25322  Accesses to non-volatile objects are not ordered with respect to
   25323 volatile accesses.  You cannot use a volatile object as a memory barrier
   25324 to order a sequence of writes to non-volatile memory.  For instance:
   25325 
   25326      int *ptr = SOMETHING;
   25327      volatile int vobj;
   25328      *ptr = SOMETHING;
   25329      vobj = 1;
   25330 
   25331 Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
   25332 to *PTR occurs by the time the update of VOBJ happens.  If you need this
   25333 guarantee, you must use a stronger memory barrier such as:
   25334 
   25335      int *ptr = SOMETHING;
   25336      volatile int vobj;
   25337      *ptr = SOMETHING;
   25338      asm volatile ("" : : : "memory");
   25339      vobj = 1;
   25340 
   25341  A scalar volatile object is read when it is accessed in a void context:
   25342 
   25343      volatile int *src = SOMEVALUE;
   25344      *src;
   25345 
   25346  Such expressions are rvalues, and GCC implements this as a read of the
   25347 volatile object being pointed to.
   25348 
   25349  Assignments are also expressions and have an rvalue.  However when
   25350 assigning to a scalar volatile, the volatile object is not reread,
   25351 regardless of whether the assignment expression's rvalue is used or not.
   25352 If the assignment's rvalue is used, the value is that assigned to the
   25353 volatile object.  For instance, there is no read of VOBJ in all the
   25354 following cases:
   25355 
   25356      int obj;
   25357      volatile int vobj;
   25358      vobj = SOMETHING;
   25359      obj = vobj = SOMETHING;
   25360      obj ? vobj = ONETHING : vobj = ANOTHERTHING;
   25361      obj = (SOMETHING, vobj = ANOTHERTHING);
   25362 
   25363  If you need to read the volatile object after an assignment has
   25364 occurred, you must use a separate expression with an intervening
   25365 sequence point.
   25366 
   25367  As bit-fields are not individually addressable, volatile bit-fields may
   25368 be implicitly read when written to, or when adjacent bit-fields are
   25369 accessed.  Bit-field operations may be optimized such that adjacent
   25370 bit-fields are only partially accessed, if they straddle a storage unit
   25371 boundary.  For these reasons it is unwise to use volatile bit-fields to
   25372 access hardware.
   25373 
   25374 
   25375 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
   25376 
   25377 6.41 Assembler Instructions with C Expression Operands
   25378 ======================================================
   25379 
   25380 In an assembler instruction using 'asm', you can specify the operands of
   25381 the instruction using C expressions.  This means you need not guess
   25382 which registers or memory locations contain the data you want to use.
   25383 
   25384  You must specify an assembler instruction template much like what
   25385 appears in a machine description, plus an operand constraint string for
   25386 each operand.
   25387 
   25388  For example, here is how to use the 68881's 'fsinx' instruction:
   25389 
   25390      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
   25391 
   25392 Here 'angle' is the C expression for the input operand while 'result' is
   25393 that of the output operand.  Each has '"f"' as its operand constraint,
   25394 saying that a floating-point register is required.  The '=' in '=f'
   25395 indicates that the operand is an output; all output operands'
   25396 constraints must use '='.  The constraints use the same language used in
   25397 the machine description (*note Constraints::).
   25398 
   25399  Each operand is described by an operand-constraint string followed by
   25400 the C expression in parentheses.  A colon separates the assembler
   25401 template from the first output operand and another separates the last
   25402 output operand from the first input, if any.  Commas separate the
   25403 operands within each group.  The total number of operands is currently
   25404 limited to 30; this limitation may be lifted in some future version of
   25405 GCC.
   25406 
   25407  If there are no output operands but there are input operands, you must
   25408 place two consecutive colons surrounding the place where the output
   25409 operands would go.
   25410 
   25411  As of GCC version 3.1, it is also possible to specify input and output
   25412 operands using symbolic names which can be referenced within the
   25413 assembler code.  These names are specified inside square brackets
   25414 preceding the constraint string, and can be referenced inside the
   25415 assembler code using '%[NAME]' instead of a percentage sign followed by
   25416 the operand number.  Using named operands the above example could look
   25417 like:
   25418 
   25419      asm ("fsinx %[angle],%[output]"
   25420           : [output] "=f" (result)
   25421           : [angle] "f" (angle));
   25422 
   25423 Note that the symbolic operand names have no relation whatsoever to
   25424 other C identifiers.  You may use any name you like, even those of
   25425 existing C symbols, but you must ensure that no two operands within the
   25426 same assembler construct use the same symbolic name.
   25427 
   25428  Output operand expressions must be lvalues; the compiler can check
   25429 this.  The input operands need not be lvalues.  The compiler cannot
   25430 check whether the operands have data types that are reasonable for the
   25431 instruction being executed.  It does not parse the assembler instruction
   25432 template and does not know what it means or even whether it is valid
   25433 assembler input.  The extended 'asm' feature is most often used for
   25434 machine instructions the compiler itself does not know exist.  If the
   25435 output expression cannot be directly addressed (for example, it is a
   25436 bit-field), your constraint must allow a register.  In that case, GCC
   25437 uses the register as the output of the 'asm', and then stores that
   25438 register into the output.
   25439 
   25440  The ordinary output operands must be write-only; GCC assumes that the
   25441 values in these operands before the instruction are dead and need not be
   25442 generated.  Extended asm supports input-output or read-write operands.
   25443 Use the constraint character '+' to indicate such an operand and list it
   25444 with the output operands.
   25445 
   25446  You may, as an alternative, logically split its function into two
   25447 separate operands, one input operand and one write-only output operand.
   25448 The connection between them is expressed by constraints that say they
   25449 need to be in the same location when the instruction executes.  You can
   25450 use the same C expression for both operands, or different expressions.
   25451 For example, here we write the (fictitious) 'combine' instruction with
   25452 'bar' as its read-only source operand and 'foo' as its read-write
   25453 destination:
   25454 
   25455      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
   25456 
   25457 The constraint '"0"' for operand 1 says that it must occupy the same
   25458 location as operand 0.  A number in constraint is allowed only in an
   25459 input operand and it must refer to an output operand.
   25460 
   25461  Only a number in the constraint can guarantee that one operand is in
   25462 the same place as another.  The mere fact that 'foo' is the value of
   25463 both operands is not enough to guarantee that they are in the same place
   25464 in the generated assembler code.  The following does not work reliably:
   25465 
   25466      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
   25467 
   25468  Various optimizations or reloading could cause operands 0 and 1 to be
   25469 in different registers; GCC knows no reason not to do so.  For example,
   25470 the compiler might find a copy of the value of 'foo' in one register and
   25471 use it for operand 1, but generate the output operand 0 in a different
   25472 register (copying it afterward to 'foo''s own address).  Of course,
   25473 since the register for operand 1 is not even mentioned in the assembler
   25474 code, the result will not work, but GCC can't tell that.
   25475 
   25476  As of GCC version 3.1, one may write '[NAME]' instead of the operand
   25477 number for a matching constraint.  For example:
   25478 
   25479      asm ("cmoveq %1,%2,%[result]"
   25480           : [result] "=r"(result)
   25481           : "r" (test), "r"(new), "[result]"(old));
   25482 
   25483  Sometimes you need to make an 'asm' operand be a specific register, but
   25484 there's no matching constraint letter for that register _by itself_.  To
   25485 force the operand into that register, use a local variable for the
   25486 operand and specify the register in the variable declaration.  *Note
   25487 Explicit Reg Vars::.  Then for the 'asm' operand, use any register
   25488 constraint letter that matches the register:
   25489 
   25490      register int *p1 asm ("r0") = ...;
   25491      register int *p2 asm ("r1") = ...;
   25492      register int *result asm ("r0");
   25493      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   25494 
   25495  In the above example, beware that a register that is call-clobbered by
   25496 the target ABI will be overwritten by any function call in the
   25497 assignment, including library calls for arithmetic operators.  Also a
   25498 register may be clobbered when generating some operations, like variable
   25499 shift, memory copy or memory move on x86.  Assuming it is a
   25500 call-clobbered register, this may happen to 'r0' above by the assignment
   25501 to 'p2'.  If you have to use such a register, use temporary variables
   25502 for expressions between the register assignment and use:
   25503 
   25504      int t1 = ...;
   25505      register int *p1 asm ("r0") = ...;
   25506      register int *p2 asm ("r1") = t1;
   25507      register int *result asm ("r0");
   25508      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   25509 
   25510  Some instructions clobber specific hard registers.  To describe this,
   25511 write a third colon after the input operands, followed by the names of
   25512 the clobbered hard registers (given as strings).  Here is a realistic
   25513 example for the VAX:
   25514 
   25515      asm volatile ("movc3 %0,%1,%2"
   25516                    : /* no outputs */
   25517                    : "g" (from), "g" (to), "g" (count)
   25518                    : "r0", "r1", "r2", "r3", "r4", "r5");
   25519 
   25520  You may not write a clobber description in a way that overlaps with an
   25521 input or output operand.  For example, you may not have an operand
   25522 describing a register class with one member if you mention that register
   25523 in the clobber list.  Variables declared to live in specific registers
   25524 (*note Explicit Reg Vars::), and used as asm input or output operands
   25525 must have no part mentioned in the clobber description.  There is no way
   25526 for you to specify that an input operand is modified without also
   25527 specifying it as an output operand.  Note that if all the output
   25528 operands you specify are for this purpose (and hence unused), you then
   25529 also need to specify 'volatile' for the 'asm' construct, as described
   25530 below, to prevent GCC from deleting the 'asm' statement as unused.
   25531 
   25532  If you refer to a particular hardware register from the assembler code,
   25533 you probably have to list the register after the third colon to tell the
   25534 compiler the register's value is modified.  In some assemblers, the
   25535 register names begin with '%'; to produce one '%' in the assembler code,
   25536 you must write '%%' in the input.
   25537 
   25538  If your assembler instruction can alter the condition code register,
   25539 add 'cc' to the list of clobbered registers.  GCC on some machines
   25540 represents the condition codes as a specific hardware register; 'cc'
   25541 serves to name this register.  On other machines, the condition code is
   25542 handled differently, and specifying 'cc' has no effect.  But it is valid
   25543 no matter what the machine.
   25544 
   25545  If your assembler instructions access memory in an unpredictable
   25546 fashion, add 'memory' to the list of clobbered registers.  This causes
   25547 GCC to not keep memory values cached in registers across the assembler
   25548 instruction and not optimize stores or loads to that memory.  You also
   25549 should add the 'volatile' keyword if the memory affected is not listed
   25550 in the inputs or outputs of the 'asm', as the 'memory' clobber does not
   25551 count as a side-effect of the 'asm'.  If you know how large the accessed
   25552 memory is, you can add it as input or output but if this is not known,
   25553 you should add 'memory'.  As an example, if you access ten bytes of a
   25554 string, you can use a memory input like:
   25555 
   25556      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
   25557 
   25558  Note that in the following example the memory input is necessary,
   25559 otherwise GCC might optimize the store to 'x' away:
   25560      int foo ()
   25561      {
   25562        int x = 42;
   25563        int *y = &x;
   25564        int result;
   25565        asm ("magic stuff accessing an 'int' pointed to by '%1'"
   25566             : "=&d" (r) : "a" (y), "m" (*y));
   25567        return result;
   25568      }
   25569 
   25570  You can put multiple assembler instructions together in a single 'asm'
   25571 template, separated by the characters normally used in assembly code for
   25572 the system.  A combination that works in most places is a newline to
   25573 break the line, plus a tab character to move to the instruction field
   25574 (written as '\n\t').  Sometimes semicolons can be used, if the assembler
   25575 allows semicolons as a line-breaking character.  Note that some
   25576 assembler dialects use semicolons to start a comment.  The input
   25577 operands are guaranteed not to use any of the clobbered registers, and
   25578 neither do the output operands' addresses, so you can read and write the
   25579 clobbered registers as many times as you like.  Here is an example of
   25580 multiple instructions in a template; it assumes the subroutine '_foo'
   25581 accepts arguments in registers 9 and 10:
   25582 
   25583      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
   25584           : /* no outputs */
   25585           : "g" (from), "g" (to)
   25586           : "r9", "r10");
   25587 
   25588  Unless an output operand has the '&' constraint modifier, GCC may
   25589 allocate it in the same register as an unrelated input operand, on the
   25590 assumption the inputs are consumed before the outputs are produced.
   25591 This assumption may be false if the assembler code actually consists of
   25592 more than one instruction.  In such a case, use '&' for each output
   25593 operand that may not overlap an input.  *Note Modifiers::.
   25594 
   25595  If you want to test the condition code produced by an assembler
   25596 instruction, you must include a branch and a label in the 'asm'
   25597 construct, as follows:
   25598 
   25599      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
   25600           : "g" (result)
   25601           : "g" (input));
   25602 
   25603 This assumes your assembler supports local labels, as the GNU assembler
   25604 and most Unix assemblers do.
   25605 
   25606  Speaking of labels, jumps from one 'asm' to another are not supported.
   25607 The compiler's optimizers do not know about these jumps, and therefore
   25608 they cannot take account of them when deciding how to optimize.  *Note
   25609 Extended asm with goto::.
   25610 
   25611  Usually the most convenient way to use these 'asm' instructions is to
   25612 encapsulate them in macros that look like functions.  For example,
   25613 
   25614      #define sin(x)       \
   25615      ({ double __value, __arg = (x);   \
   25616         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
   25617         __value; })
   25618 
   25619 Here the variable '__arg' is used to make sure that the instruction
   25620 operates on a proper 'double' value, and to accept only those arguments
   25621 'x' that can convert automatically to a 'double'.
   25622 
   25623  Another way to make sure the instruction operates on the correct data
   25624 type is to use a cast in the 'asm'.  This is different from using a
   25625 variable '__arg' in that it converts more different types.  For example,
   25626 if the desired type is 'int', casting the argument to 'int' accepts a
   25627 pointer with no complaint, while assigning the argument to an 'int'
   25628 variable named '__arg' warns about using a pointer unless the caller
   25629 explicitly casts it.
   25630 
   25631  If an 'asm' has output operands, GCC assumes for optimization purposes
   25632 the instruction has no side effects except to change the output
   25633 operands.  This does not mean instructions with a side effect cannot be
   25634 used, but you must be careful, because the compiler may eliminate them
   25635 if the output operands aren't used, or move them out of loops, or
   25636 replace two with one if they constitute a common subexpression.  Also,
   25637 if your instruction does have a side effect on a variable that otherwise
   25638 appears not to change, the old value of the variable may be reused later
   25639 if it happens to be found in a register.
   25640 
   25641  You can prevent an 'asm' instruction from being deleted by writing the
   25642 keyword 'volatile' after the 'asm'.  For example:
   25643 
   25644      #define get_and_set_priority(new)              \
   25645      ({ int __old;                                  \
   25646         asm volatile ("get_and_set_priority %0, %1" \
   25647                       : "=g" (__old) : "g" (new));  \
   25648         __old; })
   25649 
   25650 The 'volatile' keyword indicates that the instruction has important
   25651 side-effects.  GCC does not delete a volatile 'asm' if it is reachable.
   25652 (The instruction can still be deleted if GCC can prove that control flow
   25653 never reaches the location of the instruction.)  Note that even a
   25654 volatile 'asm' instruction can be moved relative to other code,
   25655 including across jump instructions.  For example, on many targets there
   25656 is a system register that can be set to control the rounding mode of
   25657 floating-point operations.  You might try setting it with a volatile
   25658 'asm', like this PowerPC example:
   25659 
   25660             asm volatile("mtfsf 255,%0" : : "f" (fpenv));
   25661             sum = x + y;
   25662 
   25663 This does not work reliably, as the compiler may move the addition back
   25664 before the volatile 'asm'.  To make it work you need to add an
   25665 artificial dependency to the 'asm' referencing a variable in the code
   25666 you don't want moved, for example:
   25667 
   25668          asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
   25669          sum = x + y;
   25670 
   25671  Similarly, you can't expect a sequence of volatile 'asm' instructions
   25672 to remain perfectly consecutive.  If you want consecutive output, use a
   25673 single 'asm'.  Also, GCC performs some optimizations across a volatile
   25674 'asm' instruction; GCC does not "forget everything" when it encounters a
   25675 volatile 'asm' instruction the way some other compilers do.
   25676 
   25677  An 'asm' instruction without any output operands is treated identically
   25678 to a volatile 'asm' instruction.
   25679 
   25680  It is a natural idea to look for a way to give access to the condition
   25681 code left by the assembler instruction.  However, when we attempted to
   25682 implement this, we found no way to make it work reliably.  The problem
   25683 is that output operands might need reloading, which result in additional
   25684 following "store" instructions.  On most machines, these instructions
   25685 alter the condition code before there is time to test it.  This problem
   25686 doesn't arise for ordinary "test" and "compare" instructions because
   25687 they don't have any output operands.
   25688 
   25689  For reasons similar to those described above, it is not possible to
   25690 give an assembler instruction access to the condition code left by
   25691 previous instructions.
   25692 
   25693  As of GCC version 4.5, 'asm goto' may be used to have the assembly jump
   25694 to one or more C labels.  In this form, a fifth section after the
   25695 clobber list contains a list of all C labels to which the assembly may
   25696 jump.  Each label operand is implicitly self-named.  The 'asm' is also
   25697 assumed to fall through to the next statement.
   25698 
   25699  This form of 'asm' is restricted to not have outputs.  This is due to a
   25700 internal restriction in the compiler that control transfer instructions
   25701 cannot have outputs.  This restriction on 'asm goto' may be lifted in
   25702 some future version of the compiler.  In the meantime, 'asm goto' may
   25703 include a memory clobber, and so leave outputs in memory.
   25704 
   25705      int frob(int x)
   25706      {
   25707        int y;
   25708        asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
   25709                  : : "r"(x), "r"(&y) : "r5", "memory" : error);
   25710        return y;
   25711       error:
   25712        return -1;
   25713      }
   25714 
   25715 In this (inefficient) example, the 'frob' instruction sets the carry bit
   25716 to indicate an error.  The 'jc' instruction detects this and branches to
   25717 the 'error' label.  Finally, the output of the 'frob' instruction
   25718 ('%r5') is stored into the memory for variable 'y', which is later read
   25719 by the 'return' statement.
   25720 
   25721      void doit(void)
   25722      {
   25723        int i = 0;
   25724        asm goto ("mfsr %%r1, 123; jmp %%r1;"
   25725                  ".pushsection doit_table;"
   25726                  ".long %l0, %l1, %l2, %l3;"
   25727                  ".popsection"
   25728                  : : : "r1" : label1, label2, label3, label4);
   25729        __builtin_unreachable ();
   25730 
   25731       label1:
   25732        f1();
   25733        return;
   25734       label2:
   25735        f2();
   25736        return;
   25737       label3:
   25738        i = 1;
   25739       label4:
   25740        f3(i);
   25741      }
   25742 
   25743 In this (also inefficient) example, the 'mfsr' instruction reads an
   25744 address from some out-of-band machine register, and the following 'jmp'
   25745 instruction branches to that address.  The address read by the 'mfsr'
   25746 instruction is assumed to have been previously set via some
   25747 application-specific mechanism to be one of the four values stored in
   25748 the 'doit_table' section.  Finally, the 'asm' is followed by a call to
   25749 '__builtin_unreachable' to indicate that the 'asm' does not in fact fall
   25750 through.
   25751 
   25752      #define TRACE1(NUM)                         \
   25753        do {                                      \
   25754          asm goto ("0: nop;"                     \
   25755                    ".pushsection trace_table;"   \
   25756                    ".long 0b, %l0;"              \
   25757                    ".popsection"                 \
   25758                    : : : : trace#NUM);           \
   25759          if (0) { trace#NUM: trace(); }          \
   25760        } while (0)
   25761      #define TRACE  TRACE1(__COUNTER__)
   25762 
   25763 In this example (which in fact inspired the 'asm goto' feature) we want
   25764 on rare occasions to call the 'trace' function; on other occasions we'd
   25765 like to keep the overhead to the absolute minimum.  The normal code path
   25766 consists of a single 'nop' instruction.  However, we record the address
   25767 of this 'nop' together with the address of a label that calls the
   25768 'trace' function.  This allows the 'nop' instruction to be patched at
   25769 run time to be an unconditional branch to the stored label.  It is
   25770 assumed that an optimizing compiler moves the labeled block out of line,
   25771 to optimize the fall through path from the 'asm'.
   25772 
   25773  If you are writing a header file that should be includable in ISO C
   25774 programs, write '__asm__' instead of 'asm'.  *Note Alternate Keywords::.
   25775 
   25776 6.41.1 Size of an 'asm'
   25777 -----------------------
   25778 
   25779 Some targets require that GCC track the size of each instruction used in
   25780 order to generate correct code.  Because the final length of an 'asm' is
   25781 only known by the assembler, GCC must make an estimate as to how big it
   25782 will be.  The estimate is formed by counting the number of statements in
   25783 the pattern of the 'asm' and multiplying that by the length of the
   25784 longest instruction on that processor.  Statements in the 'asm' are
   25785 identified by newline characters and whatever statement separator
   25786 characters are supported by the assembler; on most processors this is
   25787 the ';' character.
   25788 
   25789  Normally, GCC's estimate is perfectly adequate to ensure that correct
   25790 code is generated, but it is possible to confuse the compiler if you use
   25791 pseudo instructions or assembler macros that expand into multiple real
   25792 instructions or if you use assembler directives that expand to more
   25793 space in the object file than is needed for a single instruction.  If
   25794 this happens then the assembler produces a diagnostic saying that a
   25795 label is unreachable.
   25796 
   25797 6.41.2 i386 floating-point asm operands
   25798 ---------------------------------------
   25799 
   25800 On i386 targets, there are several rules on the usage of stack-like
   25801 registers in the operands of an 'asm'.  These rules apply only to the
   25802 operands that are stack-like registers:
   25803 
   25804   1. Given a set of input registers that die in an 'asm', it is
   25805      necessary to know which are implicitly popped by the 'asm', and
   25806      which must be explicitly popped by GCC.
   25807 
   25808      An input register that is implicitly popped by the 'asm' must be
   25809      explicitly clobbered, unless it is constrained to match an output
   25810      operand.
   25811 
   25812   2. For any input register that is implicitly popped by an 'asm', it is
   25813      necessary to know how to adjust the stack to compensate for the
   25814      pop.  If any non-popped input is closer to the top of the reg-stack
   25815      than the implicitly popped register, it would not be possible to
   25816      know what the stack looked like--it's not clear how the rest of the
   25817      stack "slides up".
   25818 
   25819      All implicitly popped input registers must be closer to the top of
   25820      the reg-stack than any input that is not implicitly popped.
   25821 
   25822      It is possible that if an input dies in an 'asm', the compiler
   25823      might use the input register for an output reload.  Consider this
   25824      example:
   25825 
   25826           asm ("foo" : "=t" (a) : "f" (b));
   25827 
   25828      This code says that input 'b' is not popped by the 'asm', and that
   25829      the 'asm' pushes a result onto the reg-stack, i.e., the stack is
   25830      one deeper after the 'asm' than it was before.  But, it is possible
   25831      that reload may think that it can use the same register for both
   25832      the input and the output.
   25833 
   25834      To prevent this from happening, if any input operand uses the 'f'
   25835      constraint, all output register constraints must use the '&'
   25836      early-clobber modifier.
   25837 
   25838      The example above would be correctly written as:
   25839 
   25840           asm ("foo" : "=&t" (a) : "f" (b));
   25841 
   25842   3. Some operands need to be in particular places on the stack.  All
   25843      output operands fall in this category--GCC has no other way to know
   25844      which registers the outputs appear in unless you indicate this in
   25845      the constraints.
   25846 
   25847      Output operands must specifically indicate which register an output
   25848      appears in after an 'asm'.  '=f' is not allowed: the operand
   25849      constraints must select a class with a single register.
   25850 
   25851   4. Output operands may not be "inserted" between existing stack
   25852      registers.  Since no 387 opcode uses a read/write operand, all
   25853      output operands are dead before the 'asm', and are pushed by the
   25854      'asm'.  It makes no sense to push anywhere but the top of the
   25855      reg-stack.
   25856 
   25857      Output operands must start at the top of the reg-stack: output
   25858      operands may not "skip" a register.
   25859 
   25860   5. Some 'asm' statements may need extra stack space for internal
   25861      calculations.  This can be guaranteed by clobbering stack registers
   25862      unrelated to the inputs and outputs.
   25863 
   25864  Here are a couple of reasonable 'asm's to want to write.  This 'asm'
   25865 takes one input, which is internally popped, and produces two outputs.
   25866 
   25867      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
   25868 
   25869 This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
   25870 and replaces them with one output.  The 'st(1)' clobber is necessary for
   25871 the compiler to know that 'fyl2xp1' pops both inputs.
   25872 
   25873      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
   25874 
   25875 
   25876 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
   25877 
   25878 6.42 Constraints for 'asm' Operands
   25879 ===================================
   25880 
   25881 Here are specific details on what constraint letters you can use with
   25882 'asm' operands.  Constraints can say whether an operand may be in a
   25883 register, and which kinds of register; whether the operand can be a
   25884 memory reference, and which kinds of address; whether the operand may be
   25885 an immediate constant, and which possible values it may have.
   25886 Constraints can also require two operands to match.  Side-effects aren't
   25887 allowed in operands of inline 'asm', unless '<' or '>' constraints are
   25888 used, because there is no guarantee that the side-effects will happen
   25889 exactly once in an instruction that can update the addressing register.
   25890 
   25891 * Menu:
   25892 
   25893 * Simple Constraints::  Basic use of constraints.
   25894 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
   25895 * Modifiers::           More precise control over effects of constraints.
   25896 * Machine Constraints:: Special constraints for some particular machines.
   25897 
   25898 
   25899 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
   25900 
   25901 6.42.1 Simple Constraints
   25902 -------------------------
   25903 
   25904 The simplest kind of constraint is a string full of letters, each of
   25905 which describes one kind of operand that is permitted.  Here are the
   25906 letters that are allowed:
   25907 
   25908 whitespace
   25909      Whitespace characters are ignored and can be inserted at any
   25910      position except the first.  This enables each alternative for
   25911      different operands to be visually aligned in the machine
   25912      description even if they have different number of constraints and
   25913      modifiers.
   25914 
   25915 'm'
   25916      A memory operand is allowed, with any kind of address that the
   25917      machine supports in general.  Note that the letter used for the
   25918      general memory constraint can be re-defined by a back end using the
   25919      'TARGET_MEM_CONSTRAINT' macro.
   25920 
   25921 'o'
   25922      A memory operand is allowed, but only if the address is
   25923      "offsettable".  This means that adding a small integer (actually,
   25924      the width in bytes of the operand, as determined by its machine
   25925      mode) may be added to the address and the result is also a valid
   25926      memory address.
   25927 
   25928      For example, an address which is constant is offsettable; so is an
   25929      address that is the sum of a register and a constant (as long as a
   25930      slightly larger constant is also within the range of
   25931      address-offsets supported by the machine); but an autoincrement or
   25932      autodecrement address is not offsettable.  More complicated
   25933      indirect/indexed addresses may or may not be offsettable depending
   25934      on the other addressing modes that the machine supports.
   25935 
   25936      Note that in an output operand which can be matched by another
   25937      operand, the constraint letter 'o' is valid only when accompanied
   25938      by both '<' (if the target machine has predecrement addressing) and
   25939      '>' (if the target machine has preincrement addressing).
   25940 
   25941 'V'
   25942      A memory operand that is not offsettable.  In other words, anything
   25943      that would fit the 'm' constraint but not the 'o' constraint.
   25944 
   25945 '<'
   25946      A memory operand with autodecrement addressing (either predecrement
   25947      or postdecrement) is allowed.  In inline 'asm' this constraint is
   25948      only allowed if the operand is used exactly once in an instruction
   25949      that can handle the side-effects.  Not using an operand with '<' in
   25950      constraint string in the inline 'asm' pattern at all or using it in
   25951      multiple instructions isn't valid, because the side-effects
   25952      wouldn't be performed or would be performed more than once.
   25953      Furthermore, on some targets the operand with '<' in constraint
   25954      string must be accompanied by special instruction suffixes like
   25955      '%U0' instruction suffix on PowerPC or '%P0' on IA-64.
   25956 
   25957 '>'
   25958      A memory operand with autoincrement addressing (either preincrement
   25959      or postincrement) is allowed.  In inline 'asm' the same
   25960      restrictions as for '<' apply.
   25961 
   25962 'r'
   25963      A register operand is allowed provided that it is in a general
   25964      register.
   25965 
   25966 'i'
   25967      An immediate integer operand (one with constant value) is allowed.
   25968      This includes symbolic constants whose values will be known only at
   25969      assembly time or later.
   25970 
   25971 'n'
   25972      An immediate integer operand with a known numeric value is allowed.
   25973      Many systems cannot support assembly-time constants for operands
   25974      less than a word wide.  Constraints for these operands should use
   25975      'n' rather than 'i'.
   25976 
   25977 'I', 'J', 'K', ... 'P'
   25978      Other letters in the range 'I' through 'P' may be defined in a
   25979      machine-dependent fashion to permit immediate integer operands with
   25980      explicit integer values in specified ranges.  For example, on the
   25981      68000, 'I' is defined to stand for the range of values 1 to 8.
   25982      This is the range permitted as a shift count in the shift
   25983      instructions.
   25984 
   25985 'E'
   25986      An immediate floating operand (expression code 'const_double') is
   25987      allowed, but only if the target floating point format is the same
   25988      as that of the host machine (on which the compiler is running).
   25989 
   25990 'F'
   25991      An immediate floating operand (expression code 'const_double' or
   25992      'const_vector') is allowed.
   25993 
   25994 'G', 'H'
   25995      'G' and 'H' may be defined in a machine-dependent fashion to permit
   25996      immediate floating operands in particular ranges of values.
   25997 
   25998 's'
   25999      An immediate integer operand whose value is not an explicit integer
   26000      is allowed.
   26001 
   26002      This might appear strange; if an insn allows a constant operand
   26003      with a value not known at compile time, it certainly must allow any
   26004      known value.  So why use 's' instead of 'i'?  Sometimes it allows
   26005      better code to be generated.
   26006 
   26007      For example, on the 68000 in a fullword instruction it is possible
   26008      to use an immediate operand; but if the immediate value is between
   26009      -128 and 127, better code results from loading the value into a
   26010      register and using the register.  This is because the load into the
   26011      register can be done with a 'moveq' instruction.  We arrange for
   26012      this to happen by defining the letter 'K' to mean "any integer
   26013      outside the range -128 to 127", and then specifying 'Ks' in the
   26014      operand constraints.
   26015 
   26016 'g'
   26017      Any register, memory or immediate integer operand is allowed,
   26018      except for registers that are not general registers.
   26019 
   26020 'X'
   26021      Any operand whatsoever is allowed.
   26022 
   26023 '0', '1', '2', ... '9'
   26024      An operand that matches the specified operand number is allowed.
   26025      If a digit is used together with letters within the same
   26026      alternative, the digit should come last.
   26027 
   26028      This number is allowed to be more than a single digit.  If multiple
   26029      digits are encountered consecutively, they are interpreted as a
   26030      single decimal integer.  There is scant chance for ambiguity, since
   26031      to-date it has never been desirable that '10' be interpreted as
   26032      matching either operand 1 _or_ operand 0.  Should this be desired,
   26033      one can use multiple alternatives instead.
   26034 
   26035      This is called a "matching constraint" and what it really means is
   26036      that the assembler has only a single operand that fills two roles
   26037      which 'asm' distinguishes.  For example, an add instruction uses
   26038      two input operands and an output operand, but on most CISC machines
   26039      an add instruction really has only two operands, one of them an
   26040      input-output operand:
   26041 
   26042           addl #35,r12
   26043 
   26044      Matching constraints are used in these circumstances.  More
   26045      precisely, the two operands that match must include one input-only
   26046      operand and one output-only operand.  Moreover, the digit must be a
   26047      smaller number than the number of the operand that uses it in the
   26048      constraint.
   26049 
   26050 'p'
   26051      An operand that is a valid memory address is allowed.  This is for
   26052      "load address" and "push address" instructions.
   26053 
   26054      'p' in the constraint must be accompanied by 'address_operand' as
   26055      the predicate in the 'match_operand'.  This predicate interprets
   26056      the mode specified in the 'match_operand' as the mode of the memory
   26057      reference for which the address would be valid.
   26058 
   26059 OTHER-LETTERS
   26060      Other letters can be defined in machine-dependent fashion to stand
   26061      for particular classes of registers or other arbitrary operand
   26062      types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
   26063      for data, address and floating point registers.
   26064 
   26065 
   26066 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
   26067 
   26068 6.42.2 Multiple Alternative Constraints
   26069 ---------------------------------------
   26070 
   26071 Sometimes a single instruction has multiple alternative sets of possible
   26072 operands.  For example, on the 68000, a logical-or instruction can
   26073 combine register or an immediate value into memory, or it can combine
   26074 any kind of operand into a register; but it cannot combine one memory
   26075 location into another.
   26076 
   26077  These constraints are represented as multiple alternatives.  An
   26078 alternative can be described by a series of letters for each operand.
   26079 The overall constraint for an operand is made from the letters for this
   26080 operand from the first alternative, a comma, the letters for this
   26081 operand from the second alternative, a comma, and so on until the last
   26082 alternative.
   26083 
   26084  If all the operands fit any one alternative, the instruction is valid.
   26085 Otherwise, for each alternative, the compiler counts how many
   26086 instructions must be added to copy the operands so that that alternative
   26087 applies.  The alternative requiring the least copying is chosen.  If two
   26088 alternatives need the same amount of copying, the one that comes first
   26089 is chosen.  These choices can be altered with the '?' and '!'
   26090 characters:
   26091 
   26092 '?'
   26093      Disparage slightly the alternative that the '?' appears in, as a
   26094      choice when no alternative applies exactly.  The compiler regards
   26095      this alternative as one unit more costly for each '?' that appears
   26096      in it.
   26097 
   26098 '!'
   26099      Disparage severely the alternative that the '!' appears in.  This
   26100      alternative can still be used if it fits without reloading, but if
   26101      reloading is needed, some other alternative will be used.
   26102 
   26103 
   26104 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
   26105 
   26106 6.42.3 Constraint Modifier Characters
   26107 -------------------------------------
   26108 
   26109 Here are constraint modifier characters.
   26110 
   26111 '='
   26112      Means that this operand is write-only for this instruction: the
   26113      previous value is discarded and replaced by output data.
   26114 
   26115 '+'
   26116      Means that this operand is both read and written by the
   26117      instruction.
   26118 
   26119      When the compiler fixes up the operands to satisfy the constraints,
   26120      it needs to know which operands are inputs to the instruction and
   26121      which are outputs from it.  '=' identifies an output; '+'
   26122      identifies an operand that is both input and output; all other
   26123      operands are assumed to be input only.
   26124 
   26125      If you specify '=' or '+' in a constraint, you put it in the first
   26126      character of the constraint string.
   26127 
   26128 '&'
   26129      Means (in a particular alternative) that this operand is an
   26130      "earlyclobber" operand, which is modified before the instruction is
   26131      finished using the input operands.  Therefore, this operand may not
   26132      lie in a register that is used as an input operand or as part of
   26133      any memory address.
   26134 
   26135      '&' applies only to the alternative in which it is written.  In
   26136      constraints with multiple alternatives, sometimes one alternative
   26137      requires '&' while others do not.  See, for example, the 'movdf'
   26138      insn of the 68000.
   26139 
   26140      An input operand can be tied to an earlyclobber operand if its only
   26141      use as an input occurs before the early result is written.  Adding
   26142      alternatives of this form often allows GCC to produce better code
   26143      when only some of the inputs can be affected by the earlyclobber.
   26144      See, for example, the 'mulsi3' insn of the ARM.
   26145 
   26146      '&' does not obviate the need to write '='.
   26147 
   26148 '%'
   26149      Declares the instruction to be commutative for this operand and the
   26150      following operand.  This means that the compiler may interchange
   26151      the two operands if that is the cheapest way to make all operands
   26152      fit the constraints.  GCC can only handle one commutative pair in
   26153      an asm; if you use more, the compiler may fail.  Note that you need
   26154      not use the modifier if the two alternatives are strictly
   26155      identical; this would only waste time in the reload pass.  The
   26156      modifier is not operational after register allocation, so the
   26157      result of 'define_peephole2' and 'define_split's performed after
   26158      reload cannot rely on '%' to make the intended insn match.
   26159 
   26160 '#'
   26161      Says that all following characters, up to the next comma, are to be
   26162      ignored as a constraint.  They are significant only for choosing
   26163      register preferences.
   26164 
   26165 '*'
   26166      Says that the following character should be ignored when choosing
   26167      register preferences.  '*' has no effect on the meaning of the
   26168      constraint as a constraint, and no effect on reloading.  For LRA
   26169      '*' additionally disparages slightly the alternative if the
   26170      following character matches the operand.
   26171 
   26172 
   26173 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
   26174 
   26175 6.42.4 Constraints for Particular Machines
   26176 ------------------------------------------
   26177 
   26178 Whenever possible, you should use the general-purpose constraint letters
   26179 in 'asm' arguments, since they will convey meaning more readily to
   26180 people reading your code.  Failing that, use the constraint letters that
   26181 usually have very similar meanings across architectures.  The most
   26182 commonly used constraints are 'm' and 'r' (for memory and
   26183 general-purpose registers respectively; *note Simple Constraints::), and
   26184 'I', usually the letter indicating the most common immediate-constant
   26185 format.
   26186 
   26187  Each architecture defines additional constraints.  These constraints
   26188 are used by the compiler itself for instruction generation, as well as
   26189 for 'asm' statements; therefore, some of the constraints are not
   26190 particularly useful for 'asm'.  Here is a summary of some of the
   26191 machine-dependent constraints available on some particular machines; it
   26192 includes both constraints that are useful for 'asm' and constraints that
   26193 aren't.  The compiler source file mentioned in the table heading for
   26194 each architecture is the definitive reference for the meanings of that
   26195 architecture's constraints.
   26196 
   26197 _AArch64 family--'config/aarch64/constraints.md'_
   26198      'k'
   26199           The stack pointer register ('SP')
   26200 
   26201      'w'
   26202           Floating point or SIMD vector register
   26203 
   26204      'I'
   26205           Integer constant that is valid as an immediate operand in an
   26206           'ADD' instruction
   26207 
   26208      'J'
   26209           Integer constant that is valid as an immediate operand in a
   26210           'SUB' instruction (once negated)
   26211 
   26212      'K'
   26213           Integer constant that can be used with a 32-bit logical
   26214           instruction
   26215 
   26216      'L'
   26217           Integer constant that can be used with a 64-bit logical
   26218           instruction
   26219 
   26220      'M'
   26221           Integer constant that is valid as an immediate operand in a
   26222           32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
   26223           to one of several different machine instructions depending on
   26224           the value
   26225 
   26226      'N'
   26227           Integer constant that is valid as an immediate operand in a
   26228           64-bit 'MOV' pseudo instruction
   26229 
   26230      'S'
   26231           An absolute symbolic address or a label reference
   26232 
   26233      'Y'
   26234           Floating point constant zero
   26235 
   26236      'Z'
   26237           Integer constant zero
   26238 
   26239      'Usa'
   26240           An absolute symbolic address
   26241 
   26242      'Ush'
   26243           The high part (bits 12 and upwards) of the pc-relative address
   26244           of a symbol within 4GB of the instruction
   26245 
   26246      'Q'
   26247           A memory address which uses a single base register with no
   26248           offset
   26249 
   26250      'Ump'
   26251           A memory address suitable for a load/store pair instruction in
   26252           SI, DI, SF and DF modes
   26253 
   26254 _ARM family--'config/arm/constraints.md'_
   26255      'w'
   26256           VFP floating-point register
   26257 
   26258      'G'
   26259           The floating-point constant 0.0
   26260 
   26261      'I'
   26262           Integer that is valid as an immediate operand in a data
   26263           processing instruction.  That is, an integer in the range 0 to
   26264           255 rotated by a multiple of 2
   26265 
   26266      'J'
   26267           Integer in the range -4095 to 4095
   26268 
   26269      'K'
   26270           Integer that satisfies constraint 'I' when inverted (ones
   26271           complement)
   26272 
   26273      'L'
   26274           Integer that satisfies constraint 'I' when negated (twos
   26275           complement)
   26276 
   26277      'M'
   26278           Integer in the range 0 to 32
   26279 
   26280      'Q'
   26281           A memory reference where the exact address is in a single
   26282           register (''m'' is preferable for 'asm' statements)
   26283 
   26284      'R'
   26285           An item in the constant pool
   26286 
   26287      'S'
   26288           A symbol in the text segment of the current file
   26289 
   26290      'Uv'
   26291           A memory reference suitable for VFP load/store insns
   26292           (reg+constant offset)
   26293 
   26294      'Uy'
   26295           A memory reference suitable for iWMMXt load/store
   26296           instructions.
   26297 
   26298      'Uq'
   26299           A memory reference suitable for the ARMv4 ldrsb instruction.
   26300 
   26301 _AVR family--'config/avr/constraints.md'_
   26302      'l'
   26303           Registers from r0 to r15
   26304 
   26305      'a'
   26306           Registers from r16 to r23
   26307 
   26308      'd'
   26309           Registers from r16 to r31
   26310 
   26311      'w'
   26312           Registers from r24 to r31.  These registers can be used in
   26313           'adiw' command
   26314 
   26315      'e'
   26316           Pointer register (r26-r31)
   26317 
   26318      'b'
   26319           Base pointer register (r28-r31)
   26320 
   26321      'q'
   26322           Stack pointer register (SPH:SPL)
   26323 
   26324      't'
   26325           Temporary register r0
   26326 
   26327      'x'
   26328           Register pair X (r27:r26)
   26329 
   26330      'y'
   26331           Register pair Y (r29:r28)
   26332 
   26333      'z'
   26334           Register pair Z (r31:r30)
   26335 
   26336      'I'
   26337           Constant greater than -1, less than 64
   26338 
   26339      'J'
   26340           Constant greater than -64, less than 1
   26341 
   26342      'K'
   26343           Constant integer 2
   26344 
   26345      'L'
   26346           Constant integer 0
   26347 
   26348      'M'
   26349           Constant that fits in 8 bits
   26350 
   26351      'N'
   26352           Constant integer -1
   26353 
   26354      'O'
   26355           Constant integer 8, 16, or 24
   26356 
   26357      'P'
   26358           Constant integer 1
   26359 
   26360      'G'
   26361           A floating point constant 0.0
   26362 
   26363      'Q'
   26364           A memory address based on Y or Z pointer with displacement.
   26365 
   26366 _Epiphany--'config/epiphany/constraints.md'_
   26367      'U16'
   26368           An unsigned 16-bit constant.
   26369 
   26370      'K'
   26371           An unsigned 5-bit constant.
   26372 
   26373      'L'
   26374           A signed 11-bit constant.
   26375 
   26376      'Cm1'
   26377           A signed 11-bit constant added to -1.  Can only match when the
   26378           '-m1reg-REG' option is active.
   26379 
   26380      'Cl1'
   26381           Left-shift of -1, i.e., a bit mask with a block of leading
   26382           ones, the rest being a block of trailing zeroes.  Can only
   26383           match when the '-m1reg-REG' option is active.
   26384 
   26385      'Cr1'
   26386           Right-shift of -1, i.e., a bit mask with a trailing block of
   26387           ones, the rest being zeroes.  Or to put it another way, one
   26388           less than a power of two.  Can only match when the
   26389           '-m1reg-REG' option is active.
   26390 
   26391      'Cal'
   26392           Constant for arithmetic/logical operations.  This is like 'i',
   26393           except that for position independent code, no symbols /
   26394           expressions needing relocations are allowed.
   26395 
   26396      'Csy'
   26397           Symbolic constant for call/jump instruction.
   26398 
   26399      'Rcs'
   26400           The register class usable in short insns.  This is a register
   26401           class constraint, and can thus drive register allocation.
   26402           This constraint won't match unless '-mprefer-short-insn-regs'
   26403           is in effect.
   26404 
   26405      'Rsc'
   26406           The the register class of registers that can be used to hold a
   26407           sibcall call address.  I.e., a caller-saved register.
   26408 
   26409      'Rct'
   26410           Core control register class.
   26411 
   26412      'Rgs'
   26413           The register group usable in short insns.  This constraint
   26414           does not use a register class, so that it only passively
   26415           matches suitable registers, and doesn't drive register
   26416           allocation.
   26417 
   26418      'Rra'
   26419           Matches the return address if it can be replaced with the link
   26420           register.
   26421 
   26422      'Rcc'
   26423           Matches the integer condition code register.
   26424 
   26425      'Sra'
   26426           Matches the return address if it is in a stack slot.
   26427 
   26428      'Cfm'
   26429           Matches control register values to switch fp mode, which are
   26430           encapsulated in 'UNSPEC_FP_MODE'.
   26431 
   26432 _CR16 Architecture--'config/cr16/cr16.h'_
   26433 
   26434      'b'
   26435           Registers from r0 to r14 (registers without stack pointer)
   26436 
   26437      't'
   26438           Register from r0 to r11 (all 16-bit registers)
   26439 
   26440      'p'
   26441           Register from r12 to r15 (all 32-bit registers)
   26442 
   26443      'I'
   26444           Signed constant that fits in 4 bits
   26445 
   26446      'J'
   26447           Signed constant that fits in 5 bits
   26448 
   26449      'K'
   26450           Signed constant that fits in 6 bits
   26451 
   26452      'L'
   26453           Unsigned constant that fits in 4 bits
   26454 
   26455      'M'
   26456           Signed constant that fits in 32 bits
   26457 
   26458      'N'
   26459           Check for 64 bits wide constants for add/sub instructions
   26460 
   26461      'G'
   26462           Floating point constant that is legal for store immediate
   26463 
   26464 _Hewlett-Packard PA-RISC--'config/pa/pa.h'_
   26465      'a'
   26466           General register 1
   26467 
   26468      'f'
   26469           Floating point register
   26470 
   26471      'q'
   26472           Shift amount register
   26473 
   26474      'x'
   26475           Floating point register (deprecated)
   26476 
   26477      'y'
   26478           Upper floating point register (32-bit), floating point
   26479           register (64-bit)
   26480 
   26481      'Z'
   26482           Any register
   26483 
   26484      'I'
   26485           Signed 11-bit integer constant
   26486 
   26487      'J'
   26488           Signed 14-bit integer constant
   26489 
   26490      'K'
   26491           Integer constant that can be deposited with a 'zdepi'
   26492           instruction
   26493 
   26494      'L'
   26495           Signed 5-bit integer constant
   26496 
   26497      'M'
   26498           Integer constant 0
   26499 
   26500      'N'
   26501           Integer constant that can be loaded with a 'ldil' instruction
   26502 
   26503      'O'
   26504           Integer constant whose value plus one is a power of 2
   26505 
   26506      'P'
   26507           Integer constant that can be used for 'and' operations in
   26508           'depi' and 'extru' instructions
   26509 
   26510      'S'
   26511           Integer constant 31
   26512 
   26513      'U'
   26514           Integer constant 63
   26515 
   26516      'G'
   26517           Floating-point constant 0.0
   26518 
   26519      'A'
   26520           A 'lo_sum' data-linkage-table memory operand
   26521 
   26522      'Q'
   26523           A memory operand that can be used as the destination operand
   26524           of an integer store instruction
   26525 
   26526      'R'
   26527           A scaled or unscaled indexed memory operand
   26528 
   26529      'T'
   26530           A memory operand for floating-point loads and stores
   26531 
   26532      'W'
   26533           A register indirect memory operand
   26534 
   26535 _picoChip family--'picochip.h'_
   26536      'k'
   26537           Stack register.
   26538 
   26539      'f'
   26540           Pointer register.  A register which can be used to access
   26541           memory without supplying an offset.  Any other register can be
   26542           used to access memory, but will need a constant offset.  In
   26543           the case of the offset being zero, it is more efficient to use
   26544           a pointer register, since this reduces code size.
   26545 
   26546      't'
   26547           A twin register.  A register which may be paired with an
   26548           adjacent register to create a 32-bit register.
   26549 
   26550      'a'
   26551           Any absolute memory address (e.g., symbolic constant, symbolic
   26552           constant + offset).
   26553 
   26554      'I'
   26555           4-bit signed integer.
   26556 
   26557      'J'
   26558           4-bit unsigned integer.
   26559 
   26560      'K'
   26561           8-bit signed integer.
   26562 
   26563      'M'
   26564           Any constant whose absolute value is no greater than 4-bits.
   26565 
   26566      'N'
   26567           10-bit signed integer
   26568 
   26569      'O'
   26570           16-bit signed integer.
   26571 
   26572 _PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
   26573      'b'
   26574           Address base register
   26575 
   26576      'd'
   26577           Floating point register (containing 64-bit value)
   26578 
   26579      'f'
   26580           Floating point register (containing 32-bit value)
   26581 
   26582      'v'
   26583           Altivec vector register
   26584 
   26585      'wa'
   26586           Any VSX register if the -mvsx option was used or NO_REGS.
   26587 
   26588      'wd'
   26589           VSX vector register to hold vector double data or NO_REGS.
   26590 
   26591      'wf'
   26592           VSX vector register to hold vector float data or NO_REGS.
   26593 
   26594      'wg'
   26595           If '-mmfpgpr' was used, a floating point register or NO_REGS.
   26596 
   26597      'wl'
   26598           Floating point register if the LFIWAX instruction is enabled
   26599           or NO_REGS.
   26600 
   26601      'wm'
   26602           VSX register if direct move instructions are enabled, or
   26603           NO_REGS.
   26604 
   26605      'wn'
   26606           No register (NO_REGS).
   26607 
   26608      'wr'
   26609           General purpose register if 64-bit instructions are enabled or
   26610           NO_REGS.
   26611 
   26612      'ws'
   26613           VSX vector register to hold scalar double values or NO_REGS.
   26614 
   26615      'wt'
   26616           VSX vector register to hold 128 bit integer or NO_REGS.
   26617 
   26618      'wu'
   26619           Altivec register to use for float/32-bit int loads/stores or
   26620           NO_REGS.
   26621 
   26622      'wv'
   26623           Altivec register to use for double loads/stores or NO_REGS.
   26624 
   26625      'ww'
   26626           FP or VSX register to perform float operations under '-mvsx'
   26627           or NO_REGS.
   26628 
   26629      'wx'
   26630           Floating point register if the STFIWX instruction is enabled
   26631           or NO_REGS.
   26632 
   26633      'wy'
   26634           VSX vector register to hold scalar float values or NO_REGS.
   26635 
   26636      'wz'
   26637           Floating point register if the LFIWZX instruction is enabled
   26638           or NO_REGS.
   26639 
   26640      'wQ'
   26641           A memory address that will work with the 'lq' and 'stq'
   26642           instructions.
   26643 
   26644      'h'
   26645           'MQ', 'CTR', or 'LINK' register
   26646 
   26647      'q'
   26648           'MQ' register
   26649 
   26650      'c'
   26651           'CTR' register
   26652 
   26653      'l'
   26654           'LINK' register
   26655 
   26656      'x'
   26657           'CR' register (condition register) number 0
   26658 
   26659      'y'
   26660           'CR' register (condition register)
   26661 
   26662      'z'
   26663           'XER[CA]' carry bit (part of the XER register)
   26664 
   26665      'I'
   26666           Signed 16-bit constant
   26667 
   26668      'J'
   26669           Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
   26670           for 'SImode' constants)
   26671 
   26672      'K'
   26673           Unsigned 16-bit constant
   26674 
   26675      'L'
   26676           Signed 16-bit constant shifted left 16 bits
   26677 
   26678      'M'
   26679           Constant larger than 31
   26680 
   26681      'N'
   26682           Exact power of 2
   26683 
   26684      'O'
   26685           Zero
   26686 
   26687      'P'
   26688           Constant whose negation is a signed 16-bit constant
   26689 
   26690      'G'
   26691           Floating point constant that can be loaded into a register
   26692           with one instruction per word
   26693 
   26694      'H'
   26695           Integer/Floating point constant that can be loaded into a
   26696           register using three instructions
   26697 
   26698      'm'
   26699           Memory operand.  Normally, 'm' does not allow addresses that
   26700           update the base register.  If '<' or '>' constraint is also
   26701           used, they are allowed and therefore on PowerPC targets in
   26702           that case it is only safe to use 'm<>' in an 'asm' statement
   26703           if that 'asm' statement accesses the operand exactly once.
   26704           The 'asm' statement must also use '%U<OPNO>' as a placeholder
   26705           for the "update" flag in the corresponding load or store
   26706           instruction.  For example:
   26707 
   26708                asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
   26709 
   26710           is correct but:
   26711 
   26712                asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
   26713 
   26714           is not.
   26715 
   26716      'es'
   26717           A "stable" memory operand; that is, one which does not include
   26718           any automodification of the base register.  This used to be
   26719           useful when 'm' allowed automodification of the base register,
   26720           but as those are now only allowed when '<' or '>' is used,
   26721           'es' is basically the same as 'm' without '<' and '>'.
   26722 
   26723      'Q'
   26724           Memory operand that is an offset from a register (it is
   26725           usually better to use 'm' or 'es' in 'asm' statements)
   26726 
   26727      'Z'
   26728           Memory operand that is an indexed or indirect from a register
   26729           (it is usually better to use 'm' or 'es' in 'asm' statements)
   26730 
   26731      'R'
   26732           AIX TOC entry
   26733 
   26734      'a'
   26735           Address operand that is an indexed or indirect from a register
   26736           ('p' is preferable for 'asm' statements)
   26737 
   26738      'S'
   26739           Constant suitable as a 64-bit mask operand
   26740 
   26741      'T'
   26742           Constant suitable as a 32-bit mask operand
   26743 
   26744      'U'
   26745           System V Release 4 small data area reference
   26746 
   26747      't'
   26748           AND masks that can be performed by two rldic{l, r}
   26749           instructions
   26750 
   26751      'W'
   26752           Vector constant that does not require memory
   26753 
   26754      'j'
   26755           Vector constant that is all zeros.
   26756 
   26757 _Intel 386--'config/i386/constraints.md'_
   26758      'R'
   26759           Legacy register--the eight integer registers available on all
   26760           i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').
   26761 
   26762      'q'
   26763           Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
   26764           'c', and 'd'; in 64-bit mode, any integer register.
   26765 
   26766      'Q'
   26767           Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.
   26768 
   26769      'a'
   26770           The 'a' register.
   26771 
   26772      'b'
   26773           The 'b' register.
   26774 
   26775      'c'
   26776           The 'c' register.
   26777 
   26778      'd'
   26779           The 'd' register.
   26780 
   26781      'S'
   26782           The 'si' register.
   26783 
   26784      'D'
   26785           The 'di' register.
   26786 
   26787      'A'
   26788           The 'a' and 'd' registers.  This class is used for
   26789           instructions that return double word results in the 'ax:dx'
   26790           register pair.  Single word values will be allocated either in
   26791           'ax' or 'dx'.  For example on i386 the following implements
   26792           'rdtsc':
   26793 
   26794                unsigned long long rdtsc (void)
   26795                {
   26796                  unsigned long long tick;
   26797                  __asm__ __volatile__("rdtsc":"=A"(tick));
   26798                  return tick;
   26799                }
   26800 
   26801           This is not correct on x86_64 as it would allocate tick in
   26802           either 'ax' or 'dx'.  You have to use the following variant
   26803           instead:
   26804 
   26805                unsigned long long rdtsc (void)
   26806                {
   26807                  unsigned int tickl, tickh;
   26808                  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
   26809                  return ((unsigned long long)tickh << 32)|tickl;
   26810                }
   26811 
   26812      'f'
   26813           Any 80387 floating-point (stack) register.
   26814 
   26815      't'
   26816           Top of 80387 floating-point stack ('%st(0)').
   26817 
   26818      'u'
   26819           Second from top of 80387 floating-point stack ('%st(1)').
   26820 
   26821      'y'
   26822           Any MMX register.
   26823 
   26824      'x'
   26825           Any SSE register.
   26826 
   26827      'Yz'
   26828           First SSE register ('%xmm0').
   26829 
   26830      'I'
   26831           Integer constant in the range 0 ... 31, for 32-bit shifts.
   26832 
   26833      'J'
   26834           Integer constant in the range 0 ... 63, for 64-bit shifts.
   26835 
   26836      'K'
   26837           Signed 8-bit integer constant.
   26838 
   26839      'L'
   26840           '0xFF' or '0xFFFF', for andsi as a zero-extending move.
   26841 
   26842      'M'
   26843           0, 1, 2, or 3 (shifts for the 'lea' instruction).
   26844 
   26845      'N'
   26846           Unsigned 8-bit integer constant (for 'in' and 'out'
   26847           instructions).
   26848 
   26849      'G'
   26850           Standard 80387 floating point constant.
   26851 
   26852      'C'
   26853           Standard SSE floating point constant.
   26854 
   26855      'e'
   26856           32-bit signed integer constant, or a symbolic reference known
   26857           to fit that range (for immediate operands in sign-extending
   26858           x86-64 instructions).
   26859 
   26860      'Z'
   26861           32-bit unsigned integer constant, or a symbolic reference
   26862           known to fit that range (for immediate operands in
   26863           zero-extending x86-64 instructions).
   26864 
   26865 _Intel IA-64--'config/ia64/ia64.h'_
   26866      'a'
   26867           General register 'r0' to 'r3' for 'addl' instruction
   26868 
   26869      'b'
   26870           Branch register
   26871 
   26872      'c'
   26873           Predicate register ('c' as in "conditional")
   26874 
   26875      'd'
   26876           Application register residing in M-unit
   26877 
   26878      'e'
   26879           Application register residing in I-unit
   26880 
   26881      'f'
   26882           Floating-point register
   26883 
   26884      'm'
   26885           Memory operand.  If used together with '<' or '>', the operand
   26886           can have postincrement and postdecrement which require
   26887           printing with '%Pn' on IA-64.
   26888 
   26889      'G'
   26890           Floating-point constant 0.0 or 1.0
   26891 
   26892      'I'
   26893           14-bit signed integer constant
   26894 
   26895      'J'
   26896           22-bit signed integer constant
   26897 
   26898      'K'
   26899           8-bit signed integer constant for logical instructions
   26900 
   26901      'L'
   26902           8-bit adjusted signed integer constant for compare pseudo-ops
   26903 
   26904      'M'
   26905           6-bit unsigned integer constant for shift counts
   26906 
   26907      'N'
   26908           9-bit signed integer constant for load and store
   26909           postincrements
   26910 
   26911      'O'
   26912           The constant zero
   26913 
   26914      'P'
   26915           0 or -1 for 'dep' instruction
   26916 
   26917      'Q'
   26918           Non-volatile memory for floating-point loads and stores
   26919 
   26920      'R'
   26921           Integer constant in the range 1 to 4 for 'shladd' instruction
   26922 
   26923      'S'
   26924           Memory operand except postincrement and postdecrement.  This
   26925           is now roughly the same as 'm' when not used together with '<'
   26926           or '>'.
   26927 
   26928 _FRV--'config/frv/frv.h'_
   26929      'a'
   26930           Register in the class 'ACC_REGS' ('acc0' to 'acc7').
   26931 
   26932      'b'
   26933           Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').
   26934 
   26935      'c'
   26936           Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
   26937           to 'icc3').
   26938 
   26939      'd'
   26940           Register in the class 'GPR_REGS' ('gr0' to 'gr63').
   26941 
   26942      'e'
   26943           Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
   26944           registers are excluded not in the class but through the use of
   26945           a machine mode larger than 4 bytes.
   26946 
   26947      'f'
   26948           Register in the class 'FPR_REGS' ('fr0' to 'fr63').
   26949 
   26950      'h'
   26951           Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
   26952           registers are excluded not in the class but through the use of
   26953           a machine mode larger than 4 bytes.
   26954 
   26955      'l'
   26956           Register in the class 'LR_REG' (the 'lr' register).
   26957 
   26958      'q'
   26959           Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
   26960           numbers not divisible by 4 are excluded not in the class but
   26961           through the use of a machine mode larger than 8 bytes.
   26962 
   26963      't'
   26964           Register in the class 'ICC_REGS' ('icc0' to 'icc3').
   26965 
   26966      'u'
   26967           Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').
   26968 
   26969      'v'
   26970           Register in the class 'ICR_REGS' ('cc4' to 'cc7').
   26971 
   26972      'w'
   26973           Register in the class 'FCR_REGS' ('cc0' to 'cc3').
   26974 
   26975      'x'
   26976           Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
   26977           Register numbers not divisible by 4 are excluded not in the
   26978           class but through the use of a machine mode larger than 8
   26979           bytes.
   26980 
   26981      'z'
   26982           Register in the class 'SPR_REGS' ('lcr' and 'lr').
   26983 
   26984      'A'
   26985           Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').
   26986 
   26987      'B'
   26988           Register in the class 'ACCG_REGS' ('accg0' to 'accg7').
   26989 
   26990      'C'
   26991           Register in the class 'CR_REGS' ('cc0' to 'cc7').
   26992 
   26993      'G'
   26994           Floating point constant zero
   26995 
   26996      'I'
   26997           6-bit signed integer constant
   26998 
   26999      'J'
   27000           10-bit signed integer constant
   27001 
   27002      'L'
   27003           16-bit signed integer constant
   27004 
   27005      'M'
   27006           16-bit unsigned integer constant
   27007 
   27008      'N'
   27009           12-bit signed integer constant that is negative--i.e. in the
   27010           range of -2048 to -1
   27011 
   27012      'O'
   27013           Constant zero
   27014 
   27015      'P'
   27016           12-bit signed integer constant that is greater than zero--i.e.
   27017           in the range of 1 to 2047.
   27018 
   27019 _Blackfin family--'config/bfin/constraints.md'_
   27020      'a'
   27021           P register
   27022 
   27023      'd'
   27024           D register
   27025 
   27026      'z'
   27027           A call clobbered P register.
   27028 
   27029      'qN'
   27030           A single register.  If N is in the range 0 to 7, the
   27031           corresponding D register.  If it is 'A', then the register P0.
   27032 
   27033      'D'
   27034           Even-numbered D register
   27035 
   27036      'W'
   27037           Odd-numbered D register
   27038 
   27039      'e'
   27040           Accumulator register.
   27041 
   27042      'A'
   27043           Even-numbered accumulator register.
   27044 
   27045      'B'
   27046           Odd-numbered accumulator register.
   27047 
   27048      'b'
   27049           I register
   27050 
   27051      'v'
   27052           B register
   27053 
   27054      'f'
   27055           M register
   27056 
   27057      'c'
   27058           Registers used for circular buffering, i.e.  I, B, or L
   27059           registers.
   27060 
   27061      'C'
   27062           The CC register.
   27063 
   27064      't'
   27065           LT0 or LT1.
   27066 
   27067      'k'
   27068           LC0 or LC1.
   27069 
   27070      'u'
   27071           LB0 or LB1.
   27072 
   27073      'x'
   27074           Any D, P, B, M, I or L register.
   27075 
   27076      'y'
   27077           Additional registers typically used only in prologues and
   27078           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
   27079           USP.
   27080 
   27081      'w'
   27082           Any register except accumulators or CC.
   27083 
   27084      'Ksh'
   27085           Signed 16 bit integer (in the range -32768 to 32767)
   27086 
   27087      'Kuh'
   27088           Unsigned 16 bit integer (in the range 0 to 65535)
   27089 
   27090      'Ks7'
   27091           Signed 7 bit integer (in the range -64 to 63)
   27092 
   27093      'Ku7'
   27094           Unsigned 7 bit integer (in the range 0 to 127)
   27095 
   27096      'Ku5'
   27097           Unsigned 5 bit integer (in the range 0 to 31)
   27098 
   27099      'Ks4'
   27100           Signed 4 bit integer (in the range -8 to 7)
   27101 
   27102      'Ks3'
   27103           Signed 3 bit integer (in the range -3 to 4)
   27104 
   27105      'Ku3'
   27106           Unsigned 3 bit integer (in the range 0 to 7)
   27107 
   27108      'PN'
   27109           Constant N, where N is a single-digit constant in the range 0
   27110           to 4.
   27111 
   27112      'PA'
   27113           An integer equal to one of the MACFLAG_XXX constants that is
   27114           suitable for use with either accumulator.
   27115 
   27116      'PB'
   27117           An integer equal to one of the MACFLAG_XXX constants that is
   27118           suitable for use only with accumulator A1.
   27119 
   27120      'M1'
   27121           Constant 255.
   27122 
   27123      'M2'
   27124           Constant 65535.
   27125 
   27126      'J'
   27127           An integer constant with exactly a single bit set.
   27128 
   27129      'L'
   27130           An integer constant with all bits set except exactly one.
   27131 
   27132      'H'
   27133 
   27134      'Q'
   27135           Any SYMBOL_REF.
   27136 
   27137 _M32C--'config/m32c/m32c.c'_
   27138      'Rsp'
   27139      'Rfb'
   27140      'Rsb'
   27141           '$sp', '$fb', '$sb'.
   27142 
   27143      'Rcr'
   27144           Any control register, when they're 16 bits wide (nothing if
   27145           control registers are 24 bits wide)
   27146 
   27147      'Rcl'
   27148           Any control register, when they're 24 bits wide.
   27149 
   27150      'R0w'
   27151      'R1w'
   27152      'R2w'
   27153      'R3w'
   27154           $r0, $r1, $r2, $r3.
   27155 
   27156      'R02'
   27157           $r0 or $r2, or $r2r0 for 32 bit values.
   27158 
   27159      'R13'
   27160           $r1 or $r3, or $r3r1 for 32 bit values.
   27161 
   27162      'Rdi'
   27163           A register that can hold a 64 bit value.
   27164 
   27165      'Rhl'
   27166           $r0 or $r1 (registers with addressable high/low bytes)
   27167 
   27168      'R23'
   27169           $r2 or $r3
   27170 
   27171      'Raa'
   27172           Address registers
   27173 
   27174      'Raw'
   27175           Address registers when they're 16 bits wide.
   27176 
   27177      'Ral'
   27178           Address registers when they're 24 bits wide.
   27179 
   27180      'Rqi'
   27181           Registers that can hold QI values.
   27182 
   27183      'Rad'
   27184           Registers that can be used with displacements ($a0, $a1, $sb).
   27185 
   27186      'Rsi'
   27187           Registers that can hold 32 bit values.
   27188 
   27189      'Rhi'
   27190           Registers that can hold 16 bit values.
   27191 
   27192      'Rhc'
   27193           Registers chat can hold 16 bit values, including all control
   27194           registers.
   27195 
   27196      'Rra'
   27197           $r0 through R1, plus $a0 and $a1.
   27198 
   27199      'Rfl'
   27200           The flags register.
   27201 
   27202      'Rmm'
   27203           The memory-based pseudo-registers $mem0 through $mem15.
   27204 
   27205      'Rpi'
   27206           Registers that can hold pointers (16 bit registers for r8c,
   27207           m16c; 24 bit registers for m32cm, m32c).
   27208 
   27209      'Rpa'
   27210           Matches multiple registers in a PARALLEL to form a larger
   27211           register.  Used to match function return values.
   27212 
   27213      'Is3'
   27214           -8 ... 7
   27215 
   27216      'IS1'
   27217           -128 ... 127
   27218 
   27219      'IS2'
   27220           -32768 ... 32767
   27221 
   27222      'IU2'
   27223           0 ... 65535
   27224 
   27225      'In4'
   27226           -8 ... -1 or 1 ... 8
   27227 
   27228      'In5'
   27229           -16 ... -1 or 1 ... 16
   27230 
   27231      'In6'
   27232           -32 ... -1 or 1 ... 32
   27233 
   27234      'IM2'
   27235           -65536 ... -1
   27236 
   27237      'Ilb'
   27238           An 8 bit value with exactly one bit set.
   27239 
   27240      'Ilw'
   27241           A 16 bit value with exactly one bit set.
   27242 
   27243      'Sd'
   27244           The common src/dest memory addressing modes.
   27245 
   27246      'Sa'
   27247           Memory addressed using $a0 or $a1.
   27248 
   27249      'Si'
   27250           Memory addressed with immediate addresses.
   27251 
   27252      'Ss'
   27253           Memory addressed using the stack pointer ($sp).
   27254 
   27255      'Sf'
   27256           Memory addressed using the frame base register ($fb).
   27257 
   27258      'Ss'
   27259           Memory addressed using the small base register ($sb).
   27260 
   27261      'S1'
   27262           $r1h
   27263 
   27264 _MeP--'config/mep/constraints.md'_
   27265 
   27266      'a'
   27267           The $sp register.
   27268 
   27269      'b'
   27270           The $tp register.
   27271 
   27272      'c'
   27273           Any control register.
   27274 
   27275      'd'
   27276           Either the $hi or the $lo register.
   27277 
   27278      'em'
   27279           Coprocessor registers that can be directly loaded ($c0-$c15).
   27280 
   27281      'ex'
   27282           Coprocessor registers that can be moved to each other.
   27283 
   27284      'er'
   27285           Coprocessor registers that can be moved to core registers.
   27286 
   27287      'h'
   27288           The $hi register.
   27289 
   27290      'j'
   27291           The $rpc register.
   27292 
   27293      'l'
   27294           The $lo register.
   27295 
   27296      't'
   27297           Registers which can be used in $tp-relative addressing.
   27298 
   27299      'v'
   27300           The $gp register.
   27301 
   27302      'x'
   27303           The coprocessor registers.
   27304 
   27305      'y'
   27306           The coprocessor control registers.
   27307 
   27308      'z'
   27309           The $0 register.
   27310 
   27311      'A'
   27312           User-defined register set A.
   27313 
   27314      'B'
   27315           User-defined register set B.
   27316 
   27317      'C'
   27318           User-defined register set C.
   27319 
   27320      'D'
   27321           User-defined register set D.
   27322 
   27323      'I'
   27324           Offsets for $gp-rel addressing.
   27325 
   27326      'J'
   27327           Constants that can be used directly with boolean insns.
   27328 
   27329      'K'
   27330           Constants that can be moved directly to registers.
   27331 
   27332      'L'
   27333           Small constants that can be added to registers.
   27334 
   27335      'M'
   27336           Long shift counts.
   27337 
   27338      'N'
   27339           Small constants that can be compared to registers.
   27340 
   27341      'O'
   27342           Constants that can be loaded into the top half of registers.
   27343 
   27344      'S'
   27345           Signed 8-bit immediates.
   27346 
   27347      'T'
   27348           Symbols encoded for $tp-rel or $gp-rel addressing.
   27349 
   27350      'U'
   27351           Non-constant addresses for loading/saving coprocessor
   27352           registers.
   27353 
   27354      'W'
   27355           The top half of a symbol's value.
   27356 
   27357      'Y'
   27358           A register indirect address without offset.
   27359 
   27360      'Z'
   27361           Symbolic references to the control bus.
   27362 
   27363 _MicroBlaze--'config/microblaze/constraints.md'_
   27364      'd'
   27365           A general register ('r0' to 'r31').
   27366 
   27367      'z'
   27368           A status register ('rmsr', '$fcc1' to '$fcc7').
   27369 
   27370 _MIPS--'config/mips/constraints.md'_
   27371      'd'
   27372           An address register.  This is equivalent to 'r' unless
   27373           generating MIPS16 code.
   27374 
   27375      'f'
   27376           A floating-point register (if available).
   27377 
   27378      'h'
   27379           Formerly the 'hi' register.  This constraint is no longer
   27380           supported.
   27381 
   27382      'l'
   27383           The 'lo' register.  Use this register to store values that are
   27384           no bigger than a word.
   27385 
   27386      'x'
   27387           The concatenated 'hi' and 'lo' registers.  Use this register
   27388           to store doubleword values.
   27389 
   27390      'c'
   27391           A register suitable for use in an indirect jump.  This will
   27392           always be '$25' for '-mabicalls'.
   27393 
   27394      'v'
   27395           Register '$3'.  Do not use this constraint in new code; it is
   27396           retained only for compatibility with glibc.
   27397 
   27398      'y'
   27399           Equivalent to 'r'; retained for backwards compatibility.
   27400 
   27401      'z'
   27402           A floating-point condition code register.
   27403 
   27404      'I'
   27405           A signed 16-bit constant (for arithmetic instructions).
   27406 
   27407      'J'
   27408           Integer zero.
   27409 
   27410      'K'
   27411           An unsigned 16-bit constant (for logic instructions).
   27412 
   27413      'L'
   27414           A signed 32-bit constant in which the lower 16 bits are zero.
   27415           Such constants can be loaded using 'lui'.
   27416 
   27417      'M'
   27418           A constant that cannot be loaded using 'lui', 'addiu' or
   27419           'ori'.
   27420 
   27421      'N'
   27422           A constant in the range -65535 to -1 (inclusive).
   27423 
   27424      'O'
   27425           A signed 15-bit constant.
   27426 
   27427      'P'
   27428           A constant in the range 1 to 65535 (inclusive).
   27429 
   27430      'G'
   27431           Floating-point zero.
   27432 
   27433      'R'
   27434           An address that can be used in a non-macro load or store.
   27435 
   27436 _Motorola 680x0--'config/m68k/constraints.md'_
   27437      'a'
   27438           Address register
   27439 
   27440      'd'
   27441           Data register
   27442 
   27443      'f'
   27444           68881 floating-point register, if available
   27445 
   27446      'I'
   27447           Integer in the range 1 to 8
   27448 
   27449      'J'
   27450           16-bit signed number
   27451 
   27452      'K'
   27453           Signed number whose magnitude is greater than 0x80
   27454 
   27455      'L'
   27456           Integer in the range -8 to -1
   27457 
   27458      'M'
   27459           Signed number whose magnitude is greater than 0x100
   27460 
   27461      'N'
   27462           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
   27463 
   27464      'O'
   27465           16 (for rotate using swap)
   27466 
   27467      'P'
   27468           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
   27469 
   27470      'R'
   27471           Numbers that mov3q can handle
   27472 
   27473      'G'
   27474           Floating point constant that is not a 68881 constant
   27475 
   27476      'S'
   27477           Operands that satisfy 'm' when -mpcrel is in effect
   27478 
   27479      'T'
   27480           Operands that satisfy 's' when -mpcrel is not in effect
   27481 
   27482      'Q'
   27483           Address register indirect addressing mode
   27484 
   27485      'U'
   27486           Register offset addressing
   27487 
   27488      'W'
   27489           const_call_operand
   27490 
   27491      'Cs'
   27492           symbol_ref or const
   27493 
   27494      'Ci'
   27495           const_int
   27496 
   27497      'C0'
   27498           const_int 0
   27499 
   27500      'Cj'
   27501           Range of signed numbers that don't fit in 16 bits
   27502 
   27503      'Cmvq'
   27504           Integers valid for mvq
   27505 
   27506      'Capsw'
   27507           Integers valid for a moveq followed by a swap
   27508 
   27509      'Cmvz'
   27510           Integers valid for mvz
   27511 
   27512      'Cmvs'
   27513           Integers valid for mvs
   27514 
   27515      'Ap'
   27516           push_operand
   27517 
   27518      'Ac'
   27519           Non-register operands allowed in clr
   27520 
   27521 _Moxie--'config/moxie/constraints.md'_
   27522      'A'
   27523           An absolute address
   27524 
   27525      'B'
   27526           An offset address
   27527 
   27528      'W'
   27529           A register indirect memory operand
   27530 
   27531      'I'
   27532           A constant in the range of 0 to 255.
   27533 
   27534      'N'
   27535           A constant in the range of 0 to -255.
   27536 
   27537 _PDP-11--'config/pdp11/constraints.md'_
   27538      'a'
   27539           Floating point registers AC0 through AC3.  These can be loaded
   27540           from/to memory with a single instruction.
   27541 
   27542      'd'
   27543           Odd numbered general registers (R1, R3, R5).  These are used
   27544           for 16-bit multiply operations.
   27545 
   27546      'f'
   27547           Any of the floating point registers (AC0 through AC5).
   27548 
   27549      'G'
   27550           Floating point constant 0.
   27551 
   27552      'I'
   27553           An integer constant that fits in 16 bits.
   27554 
   27555      'J'
   27556           An integer constant whose low order 16 bits are zero.
   27557 
   27558      'K'
   27559           An integer constant that does not meet the constraints for
   27560           codes 'I' or 'J'.
   27561 
   27562      'L'
   27563           The integer constant 1.
   27564 
   27565      'M'
   27566           The integer constant -1.
   27567 
   27568      'N'
   27569           The integer constant 0.
   27570 
   27571      'O'
   27572           Integer constants -4 through -1 and 1 through 4; shifts by
   27573           these amounts are handled as multiple single-bit shifts rather
   27574           than a single variable-length shift.
   27575 
   27576      'Q'
   27577           A memory reference which requires an additional word (address
   27578           or offset) after the opcode.
   27579 
   27580      'R'
   27581           A memory reference that is encoded within the opcode.
   27582 
   27583 _RL78--'config/rl78/constraints.md'_
   27584 
   27585      'Int3'
   27586           An integer constant in the range 1 ... 7.
   27587      'Int8'
   27588           An integer constant in the range 0 ... 255.
   27589      'J'
   27590           An integer constant in the range -255 ... 0
   27591      'K'
   27592           The integer constant 1.
   27593      'L'
   27594           The integer constant -1.
   27595      'M'
   27596           The integer constant 0.
   27597      'N'
   27598           The integer constant 2.
   27599      'O'
   27600           The integer constant -2.
   27601      'P'
   27602           An integer constant in the range 1 ... 15.
   27603      'Qbi'
   27604           The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
   27605      'Qsc'
   27606           The synthetic compare types-gt, lt, ge, and le.
   27607      'Wab'
   27608           A memory reference with an absolute address.
   27609      'Wbc'
   27610           A memory reference using 'BC' as a base register, with an
   27611           optional offset.
   27612      'Wca'
   27613           A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
   27614           address, for calls.
   27615      'Wcv'
   27616           A memory reference using any 16-bit register pair for the
   27617           address, for calls.
   27618      'Wd2'
   27619           A memory reference using 'DE' as a base register, with an
   27620           optional offset.
   27621      'Wde'
   27622           A memory reference using 'DE' as a base register, without any
   27623           offset.
   27624      'Wfr'
   27625           Any memory reference to an address in the far address space.
   27626      'Wh1'
   27627           A memory reference using 'HL' as a base register, with an
   27628           optional one-byte offset.
   27629      'Whb'
   27630           A memory reference using 'HL' as a base register, with 'B' or
   27631           'C' as the index register.
   27632      'Whl'
   27633           A memory reference using 'HL' as a base register, without any
   27634           offset.
   27635      'Ws1'
   27636           A memory reference using 'SP' as a base register, with an
   27637           optional one-byte offset.
   27638      'Y'
   27639           Any memory reference to an address in the near address space.
   27640      'A'
   27641           The 'AX' register.
   27642      'B'
   27643           The 'BC' register.
   27644      'D'
   27645           The 'DE' register.
   27646      'R'
   27647           'A' through 'L' registers.
   27648      'S'
   27649           The 'SP' register.
   27650      'T'
   27651           The 'HL' register.
   27652      'Z08W'
   27653           The 16-bit 'R8' register.
   27654      'Z10W'
   27655           The 16-bit 'R10' register.
   27656      'Zint'
   27657           The registers reserved for interrupts ('R24' to 'R31').
   27658      'a'
   27659           The 'A' register.
   27660      'b'
   27661           The 'B' register.
   27662      'c'
   27663           The 'C' register.
   27664      'd'
   27665           The 'D' register.
   27666      'e'
   27667           The 'E' register.
   27668      'h'
   27669           The 'H' register.
   27670      'l'
   27671           The 'L' register.
   27672      'v'
   27673           The virtual registers.
   27674      'w'
   27675           The 'PSW' register.
   27676      'x'
   27677           The 'X' register.
   27678 
   27679 _RX--'config/rx/constraints.md'_
   27680      'Q'
   27681           An address which does not involve register indirect addressing
   27682           or pre/post increment/decrement addressing.
   27683 
   27684      'Symbol'
   27685           A symbol reference.
   27686 
   27687      'Int08'
   27688           A constant in the range -256 to 255, inclusive.
   27689 
   27690      'Sint08'
   27691           A constant in the range -128 to 127, inclusive.
   27692 
   27693      'Sint16'
   27694           A constant in the range -32768 to 32767, inclusive.
   27695 
   27696      'Sint24'
   27697           A constant in the range -8388608 to 8388607, inclusive.
   27698 
   27699      'Uint04'
   27700           A constant in the range 0 to 15, inclusive.
   27701 
   27702 _SPARC--'config/sparc/sparc.h'_
   27703      'f'
   27704           Floating-point register on the SPARC-V8 architecture and lower
   27705           floating-point register on the SPARC-V9 architecture.
   27706 
   27707      'e'
   27708           Floating-point register.  It is equivalent to 'f' on the
   27709           SPARC-V8 architecture and contains both lower and upper
   27710           floating-point registers on the SPARC-V9 architecture.
   27711 
   27712      'c'
   27713           Floating-point condition code register.
   27714 
   27715      'd'
   27716           Lower floating-point register.  It is only valid on the
   27717           SPARC-V9 architecture when the Visual Instruction Set is
   27718           available.
   27719 
   27720      'b'
   27721           Floating-point register.  It is only valid on the SPARC-V9
   27722           architecture when the Visual Instruction Set is available.
   27723 
   27724      'h'
   27725           64-bit global or out register for the SPARC-V8+ architecture.
   27726 
   27727      'C'
   27728           The constant all-ones, for floating-point.
   27729 
   27730      'A'
   27731           Signed 5-bit constant
   27732 
   27733      'D'
   27734           A vector constant
   27735 
   27736      'I'
   27737           Signed 13-bit constant
   27738 
   27739      'J'
   27740           Zero
   27741 
   27742      'K'
   27743           32-bit constant with the low 12 bits clear (a constant that
   27744           can be loaded with the 'sethi' instruction)
   27745 
   27746      'L'
   27747           A constant in the range supported by 'movcc' instructions
   27748           (11-bit signed immediate)
   27749 
   27750      'M'
   27751           A constant in the range supported by 'movrcc' instructions
   27752           (10-bit signed immediate)
   27753 
   27754      'N'
   27755           Same as 'K', except that it verifies that bits that are not in
   27756           the lower 32-bit range are all zero.  Must be used instead of
   27757           'K' for modes wider than 'SImode'
   27758 
   27759      'O'
   27760           The constant 4096
   27761 
   27762      'G'
   27763           Floating-point zero
   27764 
   27765      'H'
   27766           Signed 13-bit constant, sign-extended to 32 or 64 bits
   27767 
   27768      'P'
   27769           The constant -1
   27770 
   27771      'Q'
   27772           Floating-point constant whose integral representation can be
   27773           moved into an integer register using a single sethi
   27774           instruction
   27775 
   27776      'R'
   27777           Floating-point constant whose integral representation can be
   27778           moved into an integer register using a single mov instruction
   27779 
   27780      'S'
   27781           Floating-point constant whose integral representation can be
   27782           moved into an integer register using a high/lo_sum instruction
   27783           sequence
   27784 
   27785      'T'
   27786           Memory address aligned to an 8-byte boundary
   27787 
   27788      'U'
   27789           Even register
   27790 
   27791      'W'
   27792           Memory address for 'e' constraint registers
   27793 
   27794      'w'
   27795           Memory address with only a base register
   27796 
   27797      'Y'
   27798           Vector zero
   27799 
   27800 _SPU--'config/spu/spu.h'_
   27801      'a'
   27802           An immediate which can be loaded with the il/ila/ilh/ilhu
   27803           instructions.  const_int is treated as a 64 bit value.
   27804 
   27805      'c'
   27806           An immediate for and/xor/or instructions.  const_int is
   27807           treated as a 64 bit value.
   27808 
   27809      'd'
   27810           An immediate for the 'iohl' instruction.  const_int is treated
   27811           as a 64 bit value.
   27812 
   27813      'f'
   27814           An immediate which can be loaded with 'fsmbi'.
   27815 
   27816      'A'
   27817           An immediate which can be loaded with the il/ila/ilh/ilhu
   27818           instructions.  const_int is treated as a 32 bit value.
   27819 
   27820      'B'
   27821           An immediate for most arithmetic instructions.  const_int is
   27822           treated as a 32 bit value.
   27823 
   27824      'C'
   27825           An immediate for and/xor/or instructions.  const_int is
   27826           treated as a 32 bit value.
   27827 
   27828      'D'
   27829           An immediate for the 'iohl' instruction.  const_int is treated
   27830           as a 32 bit value.
   27831 
   27832      'I'
   27833           A constant in the range [-64, 63] for shift/rotate
   27834           instructions.
   27835 
   27836      'J'
   27837           An unsigned 7-bit constant for conversion/nop/channel
   27838           instructions.
   27839 
   27840      'K'
   27841           A signed 10-bit constant for most arithmetic instructions.
   27842 
   27843      'M'
   27844           A signed 16 bit immediate for 'stop'.
   27845 
   27846      'N'
   27847           An unsigned 16-bit constant for 'iohl' and 'fsmbi'.
   27848 
   27849      'O'
   27850           An unsigned 7-bit constant whose 3 least significant bits are
   27851           0.
   27852 
   27853      'P'
   27854           An unsigned 3-bit constant for 16-byte rotates and shifts
   27855 
   27856      'R'
   27857           Call operand, reg, for indirect calls
   27858 
   27859      'S'
   27860           Call operand, symbol, for relative calls.
   27861 
   27862      'T'
   27863           Call operand, const_int, for absolute calls.
   27864 
   27865      'U'
   27866           An immediate which can be loaded with the il/ila/ilh/ilhu
   27867           instructions.  const_int is sign extended to 128 bit.
   27868 
   27869      'W'
   27870           An immediate for shift and rotate instructions.  const_int is
   27871           treated as a 32 bit value.
   27872 
   27873      'Y'
   27874           An immediate for and/xor/or instructions.  const_int is sign
   27875           extended as a 128 bit.
   27876 
   27877      'Z'
   27878           An immediate for the 'iohl' instruction.  const_int is sign
   27879           extended to 128 bit.
   27880 
   27881 _S/390 and zSeries--'config/s390/s390.h'_
   27882      'a'
   27883           Address register (general purpose register except r0)
   27884 
   27885      'c'
   27886           Condition code register
   27887 
   27888      'd'
   27889           Data register (arbitrary general purpose register)
   27890 
   27891      'f'
   27892           Floating-point register
   27893 
   27894      'I'
   27895           Unsigned 8-bit constant (0-255)
   27896 
   27897      'J'
   27898           Unsigned 12-bit constant (0-4095)
   27899 
   27900      'K'
   27901           Signed 16-bit constant (-32768-32767)
   27902 
   27903      'L'
   27904           Value appropriate as displacement.
   27905           '(0..4095)'
   27906                for short displacement
   27907           '(-524288..524287)'
   27908                for long displacement
   27909 
   27910      'M'
   27911           Constant integer with a value of 0x7fffffff.
   27912 
   27913      'N'
   27914           Multiple letter constraint followed by 4 parameter letters.
   27915           '0..9:'
   27916                number of the part counting from most to least
   27917                significant
   27918           'H,Q:'
   27919                mode of the part
   27920           'D,S,H:'
   27921                mode of the containing operand
   27922           '0,F:'
   27923                value of the other parts (F--all bits set)
   27924           The constraint matches if the specified part of a constant has
   27925           a value different from its other parts.
   27926 
   27927      'Q'
   27928           Memory reference without index register and with short
   27929           displacement.
   27930 
   27931      'R'
   27932           Memory reference with index register and short displacement.
   27933 
   27934      'S'
   27935           Memory reference without index register but with long
   27936           displacement.
   27937 
   27938      'T'
   27939           Memory reference with index register and long displacement.
   27940 
   27941      'U'
   27942           Pointer with short displacement.
   27943 
   27944      'W'
   27945           Pointer with long displacement.
   27946 
   27947      'Y'
   27948           Shift count operand.
   27949 
   27950 _Score family--'config/score/score.h'_
   27951      'd'
   27952           Registers from r0 to r32.
   27953 
   27954      'e'
   27955           Registers from r0 to r16.
   27956 
   27957      't'
   27958           r8--r11 or r22--r27 registers.
   27959 
   27960      'h'
   27961           hi register.
   27962 
   27963      'l'
   27964           lo register.
   27965 
   27966      'x'
   27967           hi + lo register.
   27968 
   27969      'q'
   27970           cnt register.
   27971 
   27972      'y'
   27973           lcb register.
   27974 
   27975      'z'
   27976           scb register.
   27977 
   27978      'a'
   27979           cnt + lcb + scb register.
   27980 
   27981      'c'
   27982           cr0--cr15 register.
   27983 
   27984      'b'
   27985           cp1 registers.
   27986 
   27987      'f'
   27988           cp2 registers.
   27989 
   27990      'i'
   27991           cp3 registers.
   27992 
   27993      'j'
   27994           cp1 + cp2 + cp3 registers.
   27995 
   27996      'I'
   27997           High 16-bit constant (32-bit constant with 16 LSBs zero).
   27998 
   27999      'J'
   28000           Unsigned 5 bit integer (in the range 0 to 31).
   28001 
   28002      'K'
   28003           Unsigned 16 bit integer (in the range 0 to 65535).
   28004 
   28005      'L'
   28006           Signed 16 bit integer (in the range -32768 to 32767).
   28007 
   28008      'M'
   28009           Unsigned 14 bit integer (in the range 0 to 16383).
   28010 
   28011      'N'
   28012           Signed 14 bit integer (in the range -8192 to 8191).
   28013 
   28014      'Z'
   28015           Any SYMBOL_REF.
   28016 
   28017 _Xstormy16--'config/stormy16/stormy16.h'_
   28018      'a'
   28019           Register r0.
   28020 
   28021      'b'
   28022           Register r1.
   28023 
   28024      'c'
   28025           Register r2.
   28026 
   28027      'd'
   28028           Register r8.
   28029 
   28030      'e'
   28031           Registers r0 through r7.
   28032 
   28033      't'
   28034           Registers r0 and r1.
   28035 
   28036      'y'
   28037           The carry register.
   28038 
   28039      'z'
   28040           Registers r8 and r9.
   28041 
   28042      'I'
   28043           A constant between 0 and 3 inclusive.
   28044 
   28045      'J'
   28046           A constant that has exactly one bit set.
   28047 
   28048      'K'
   28049           A constant that has exactly one bit clear.
   28050 
   28051      'L'
   28052           A constant between 0 and 255 inclusive.
   28053 
   28054      'M'
   28055           A constant between -255 and 0 inclusive.
   28056 
   28057      'N'
   28058           A constant between -3 and 0 inclusive.
   28059 
   28060      'O'
   28061           A constant between 1 and 4 inclusive.
   28062 
   28063      'P'
   28064           A constant between -4 and -1 inclusive.
   28065 
   28066      'Q'
   28067           A memory reference that is a stack push.
   28068 
   28069      'R'
   28070           A memory reference that is a stack pop.
   28071 
   28072      'S'
   28073           A memory reference that refers to a constant address of known
   28074           value.
   28075 
   28076      'T'
   28077           The register indicated by Rx (not implemented yet).
   28078 
   28079      'U'
   28080           A constant that is not between 2 and 15 inclusive.
   28081 
   28082      'Z'
   28083           The constant 0.
   28084 
   28085 _TI C6X family--'config/c6x/constraints.md'_
   28086      'a'
   28087           Register file A (A0-A31).
   28088 
   28089      'b'
   28090           Register file B (B0-B31).
   28091 
   28092      'A'
   28093           Predicate registers in register file A (A0-A2 on C64X and
   28094           higher, A1 and A2 otherwise).
   28095 
   28096      'B'
   28097           Predicate registers in register file B (B0-B2).
   28098 
   28099      'C'
   28100           A call-used register in register file B (B0-B9, B16-B31).
   28101 
   28102      'Da'
   28103           Register file A, excluding predicate registers (A3-A31, plus
   28104           A0 if not C64X or higher).
   28105 
   28106      'Db'
   28107           Register file B, excluding predicate registers (B3-B31).
   28108 
   28109      'Iu4'
   28110           Integer constant in the range 0 ... 15.
   28111 
   28112      'Iu5'
   28113           Integer constant in the range 0 ... 31.
   28114 
   28115      'In5'
   28116           Integer constant in the range -31 ... 0.
   28117 
   28118      'Is5'
   28119           Integer constant in the range -16 ... 15.
   28120 
   28121      'I5x'
   28122           Integer constant that can be the operand of an ADDA or a SUBA
   28123           insn.
   28124 
   28125      'IuB'
   28126           Integer constant in the range 0 ... 65535.
   28127 
   28128      'IsB'
   28129           Integer constant in the range -32768 ... 32767.
   28130 
   28131      'IsC'
   28132           Integer constant in the range -2^{20} ... 2^{20} - 1.
   28133 
   28134      'Jc'
   28135           Integer constant that is a valid mask for the clr instruction.
   28136 
   28137      'Js'
   28138           Integer constant that is a valid mask for the set instruction.
   28139 
   28140      'Q'
   28141           Memory location with A base register.
   28142 
   28143      'R'
   28144           Memory location with B base register.
   28145 
   28146      'Z'
   28147           Register B14 (aka DP).
   28148 
   28149 _TILE-Gx--'config/tilegx/constraints.md'_
   28150      'R00'
   28151      'R01'
   28152      'R02'
   28153      'R03'
   28154      'R04'
   28155      'R05'
   28156      'R06'
   28157      'R07'
   28158      'R08'
   28159      'R09'
   28160      'R10'
   28161           Each of these represents a register constraint for an
   28162           individual register, from r0 to r10.
   28163 
   28164      'I'
   28165           Signed 8-bit integer constant.
   28166 
   28167      'J'
   28168           Signed 16-bit integer constant.
   28169 
   28170      'K'
   28171           Unsigned 16-bit integer constant.
   28172 
   28173      'L'
   28174           Integer constant that fits in one signed byte when incremented
   28175           by one (-129 ... 126).
   28176 
   28177      'm'
   28178           Memory operand.  If used together with '<' or '>', the operand
   28179           can have postincrement which requires printing with '%In' and
   28180           '%in' on TILE-Gx.  For example:
   28181 
   28182                asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
   28183 
   28184      'M'
   28185           A bit mask suitable for the BFINS instruction.
   28186 
   28187      'N'
   28188           Integer constant that is a byte tiled out eight times.
   28189 
   28190      'O'
   28191           The integer zero constant.
   28192 
   28193      'P'
   28194           Integer constant that is a sign-extended byte tiled out as
   28195           four shorts.
   28196 
   28197      'Q'
   28198           Integer constant that fits in one signed byte when incremented
   28199           (-129 ... 126), but excluding -1.
   28200 
   28201      'S'
   28202           Integer constant that has all 1 bits consecutive and starting
   28203           at bit 0.
   28204 
   28205      'T'
   28206           A 16-bit fragment of a got, tls, or pc-relative reference.
   28207 
   28208      'U'
   28209           Memory operand except postincrement.  This is roughly the same
   28210           as 'm' when not used together with '<' or '>'.
   28211 
   28212      'W'
   28213           An 8-element vector constant with identical elements.
   28214 
   28215      'Y'
   28216           A 4-element vector constant with identical elements.
   28217 
   28218      'Z0'
   28219           The integer constant 0xffffffff.
   28220 
   28221      'Z1'
   28222           The integer constant 0xffffffff00000000.
   28223 
   28224 _TILEPro--'config/tilepro/constraints.md'_
   28225      'R00'
   28226      'R01'
   28227      'R02'
   28228      'R03'
   28229      'R04'
   28230      'R05'
   28231      'R06'
   28232      'R07'
   28233      'R08'
   28234      'R09'
   28235      'R10'
   28236           Each of these represents a register constraint for an
   28237           individual register, from r0 to r10.
   28238 
   28239      'I'
   28240           Signed 8-bit integer constant.
   28241 
   28242      'J'
   28243           Signed 16-bit integer constant.
   28244 
   28245      'K'
   28246           Nonzero integer constant with low 16 bits zero.
   28247 
   28248      'L'
   28249           Integer constant that fits in one signed byte when incremented
   28250           by one (-129 ... 126).
   28251 
   28252      'm'
   28253           Memory operand.  If used together with '<' or '>', the operand
   28254           can have postincrement which requires printing with '%In' and
   28255           '%in' on TILEPro.  For example:
   28256 
   28257                asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
   28258 
   28259      'M'
   28260           A bit mask suitable for the MM instruction.
   28261 
   28262      'N'
   28263           Integer constant that is a byte tiled out four times.
   28264 
   28265      'O'
   28266           The integer zero constant.
   28267 
   28268      'P'
   28269           Integer constant that is a sign-extended byte tiled out as two
   28270           shorts.
   28271 
   28272      'Q'
   28273           Integer constant that fits in one signed byte when incremented
   28274           (-129 ... 126), but excluding -1.
   28275 
   28276      'T'
   28277           A symbolic operand, or a 16-bit fragment of a got, tls, or
   28278           pc-relative reference.
   28279 
   28280      'U'
   28281           Memory operand except postincrement.  This is roughly the same
   28282           as 'm' when not used together with '<' or '>'.
   28283 
   28284      'W'
   28285           A 4-element vector constant with identical elements.
   28286 
   28287      'Y'
   28288           A 2-element vector constant with identical elements.
   28289 
   28290 _Xtensa--'config/xtensa/constraints.md'_
   28291      'a'
   28292           General-purpose 32-bit register
   28293 
   28294      'b'
   28295           One-bit boolean register
   28296 
   28297      'A'
   28298           MAC16 40-bit accumulator register
   28299 
   28300      'I'
   28301           Signed 12-bit integer constant, for use in MOVI instructions
   28302 
   28303      'J'
   28304           Signed 8-bit integer constant, for use in ADDI instructions
   28305 
   28306      'K'
   28307           Integer constant valid for BccI instructions
   28308 
   28309      'L'
   28310           Unsigned constant valid for BccUI instructions
   28311 
   28312 
   28313 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
   28314 
   28315 6.43 Controlling Names Used in Assembler Code
   28316 =============================================
   28317 
   28318 You can specify the name to be used in the assembler code for a C
   28319 function or variable by writing the 'asm' (or '__asm__') keyword after
   28320 the declarator as follows:
   28321 
   28322      int foo asm ("myfoo") = 2;
   28323 
   28324 This specifies that the name to be used for the variable 'foo' in the
   28325 assembler code should be 'myfoo' rather than the usual '_foo'.
   28326 
   28327  On systems where an underscore is normally prepended to the name of a C
   28328 function or variable, this feature allows you to define names for the
   28329 linker that do not start with an underscore.
   28330 
   28331  It does not make sense to use this feature with a non-static local
   28332 variable since such variables do not have assembler names.  If you are
   28333 trying to put the variable in a particular register, see *note Explicit
   28334 Reg Vars::.  GCC presently accepts such code with a warning, but will
   28335 probably be changed to issue an error, rather than a warning, in the
   28336 future.
   28337 
   28338  You cannot use 'asm' in this way in a function _definition_; but you
   28339 can get the same effect by writing a declaration for the function before
   28340 its definition and putting 'asm' there, like this:
   28341 
   28342      extern func () asm ("FUNC");
   28343 
   28344      func (x, y)
   28345           int x, y;
   28346      /* ... */
   28347 
   28348  It is up to you to make sure that the assembler names you choose do not
   28349 conflict with any other assembler symbols.  Also, you must not use a
   28350 register name; that would produce completely invalid assembler code.
   28351 GCC does not as yet have the ability to store static variables in
   28352 registers.  Perhaps that will be added.
   28353 
   28354 
   28355 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
   28356 
   28357 6.44 Variables in Specified Registers
   28358 =====================================
   28359 
   28360 GNU C allows you to put a few global variables into specified hardware
   28361 registers.  You can also specify the register in which an ordinary
   28362 register variable should be allocated.
   28363 
   28364    * Global register variables reserve registers throughout the program.
   28365      This may be useful in programs such as programming language
   28366      interpreters that have a couple of global variables that are
   28367      accessed very often.
   28368 
   28369    * Local register variables in specific registers do not reserve the
   28370      registers, except at the point where they are used as input or
   28371      output operands in an 'asm' statement and the 'asm' statement
   28372      itself is not deleted.  The compiler's data flow analysis is
   28373      capable of determining where the specified registers contain live
   28374      values, and where they are available for other uses.  Stores into
   28375      local register variables may be deleted when they appear to be dead
   28376      according to dataflow analysis.  References to local register
   28377      variables may be deleted or moved or simplified.
   28378 
   28379      These local variables are sometimes convenient for use with the
   28380      extended 'asm' feature (*note Extended Asm::), if you want to write
   28381      one output of the assembler instruction directly into a particular
   28382      register.  (This works provided the register you specify fits the
   28383      constraints specified for that operand in the 'asm'.)
   28384 
   28385 * Menu:
   28386 
   28387 * Global Reg Vars::
   28388 * Local Reg Vars::
   28389 
   28390 
   28391 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
   28392 
   28393 6.44.1 Defining Global Register Variables
   28394 -----------------------------------------
   28395 
   28396 You can define a global register variable in GNU C like this:
   28397 
   28398      register int *foo asm ("a5");
   28399 
   28400 Here 'a5' is the name of the register that should be used.  Choose a
   28401 register that is normally saved and restored by function calls on your
   28402 machine, so that library routines will not clobber it.
   28403 
   28404  Naturally the register name is cpu-dependent, so you need to
   28405 conditionalize your program according to cpu type.  The register 'a5' is
   28406 a good choice on a 68000 for a variable of pointer type.  On machines
   28407 with register windows, be sure to choose a "global" register that is not
   28408 affected magically by the function call mechanism.
   28409 
   28410  In addition, different operating systems on the same CPU may differ in
   28411 how they name the registers; then you need additional conditionals.  For
   28412 example, some 68000 operating systems call this register '%a5'.
   28413 
   28414  Eventually there may be a way of asking the compiler to choose a
   28415 register automatically, but first we need to figure out how it should
   28416 choose and how to enable you to guide the choice.  No solution is
   28417 evident.
   28418 
   28419  Defining a global register variable in a certain register reserves that
   28420 register entirely for this use, at least within the current compilation.
   28421 The register is not allocated for any other purpose in the functions in
   28422 the current compilation, and is not saved and restored by these
   28423 functions.  Stores into this register are never deleted even if they
   28424 appear to be dead, but references may be deleted or moved or simplified.
   28425 
   28426  It is not safe to access the global register variables from signal
   28427 handlers, or from more than one thread of control, because the system
   28428 library routines may temporarily use the register for other things
   28429 (unless you recompile them specially for the task at hand).
   28430 
   28431  It is not safe for one function that uses a global register variable to
   28432 call another such function 'foo' by way of a third function 'lose' that
   28433 is compiled without knowledge of this variable (i.e. in a different
   28434 source file in which the variable isn't declared).  This is because
   28435 'lose' might save the register and put some other value there.  For
   28436 example, you can't expect a global register variable to be available in
   28437 the comparison-function that you pass to 'qsort', since 'qsort' might
   28438 have put something else in that register.  (If you are prepared to
   28439 recompile 'qsort' with the same global register variable, you can solve
   28440 this problem.)
   28441 
   28442  If you want to recompile 'qsort' or other source files that do not
   28443 actually use your global register variable, so that they do not use that
   28444 register for any other purpose, then it suffices to specify the compiler
   28445 option '-ffixed-REG'.  You need not actually add a global register
   28446 declaration to their source code.
   28447 
   28448  A function that can alter the value of a global register variable
   28449 cannot safely be called from a function compiled without this variable,
   28450 because it could clobber the value the caller expects to find there on
   28451 return.  Therefore, the function that is the entry point into the part
   28452 of the program that uses the global register variable must explicitly
   28453 save and restore the value that belongs to its caller.
   28454 
   28455  On most machines, 'longjmp' restores to each global register variable
   28456 the value it had at the time of the 'setjmp'.  On some machines,
   28457 however, 'longjmp' does not change the value of global register
   28458 variables.  To be portable, the function that called 'setjmp' should
   28459 make other arrangements to save the values of the global register
   28460 variables, and to restore them in a 'longjmp'.  This way, the same thing
   28461 happens regardless of what 'longjmp' does.
   28462 
   28463  All global register variable declarations must precede all function
   28464 definitions.  If such a declaration could appear after function
   28465 definitions, the declaration would be too late to prevent the register
   28466 from being used for other purposes in the preceding functions.
   28467 
   28468  Global register variables may not have initial values, because an
   28469 executable file has no means to supply initial contents for a register.
   28470 
   28471  On the SPARC, there are reports that g3 ... g7 are suitable registers,
   28472 but certain library functions, such as 'getwd', as well as the
   28473 subroutines for division and remainder, modify g3 and g4.  g1 and g2 are
   28474 local temporaries.
   28475 
   28476  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
   28477 course, it does not do to use more than a few of those.
   28478 
   28479 
   28480 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
   28481 
   28482 6.44.2 Specifying Registers for Local Variables
   28483 -----------------------------------------------
   28484 
   28485 You can define a local register variable with a specified register like
   28486 this:
   28487 
   28488      register int *foo asm ("a5");
   28489 
   28490 Here 'a5' is the name of the register that should be used.  Note that
   28491 this is the same syntax used for defining global register variables, but
   28492 for a local variable it appears within a function.
   28493 
   28494  Naturally the register name is cpu-dependent, but this is not a
   28495 problem, since specific registers are most often useful with explicit
   28496 assembler instructions (*note Extended Asm::).  Both of these things
   28497 generally require that you conditionalize your program according to cpu
   28498 type.
   28499 
   28500  In addition, operating systems on one type of cpu may differ in how
   28501 they name the registers; then you need additional conditionals.  For
   28502 example, some 68000 operating systems call this register '%a5'.
   28503 
   28504  Defining such a register variable does not reserve the register; it
   28505 remains available for other uses in places where flow control determines
   28506 the variable's value is not live.
   28507 
   28508  This option does not guarantee that GCC generates code that has this
   28509 variable in the register you specify at all times.  You may not code an
   28510 explicit reference to this register in the _assembler instruction
   28511 template_ part of an 'asm' statement and assume it always refers to this
   28512 variable.  However, using the variable as an 'asm' _operand_ guarantees
   28513 that the specified register is used for the operand.
   28514 
   28515  Stores into local register variables may be deleted when they appear to
   28516 be dead according to dataflow analysis.  References to local register
   28517 variables may be deleted or moved or simplified.
   28518 
   28519  As for global register variables, it's recommended that you choose a
   28520 register that is normally saved and restored by function calls on your
   28521 machine, so that library routines will not clobber it.  A common pitfall
   28522 is to initialize multiple call-clobbered registers with arbitrary
   28523 expressions, where a function call or library call for an arithmetic
   28524 operator overwrites a register value from a previous assignment, for
   28525 example 'r0' below:
   28526      register int *p1 asm ("r0") = ...;
   28527      register int *p2 asm ("r1") = ...;
   28528 
   28529 In those cases, a solution is to use a temporary variable for each
   28530 arbitrary expression.  *Note Example of asm with clobbered asm reg::.
   28531 
   28532 
   28533 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
   28534 
   28535 6.45 Alternate Keywords
   28536 =======================
   28537 
   28538 '-ansi' and the various '-std' options disable certain keywords.  This
   28539 causes trouble when you want to use GNU C extensions, or a
   28540 general-purpose header file that should be usable by all programs,
   28541 including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
   28542 not available in programs compiled with '-ansi' or '-std' (although
   28543 'inline' can be used in a program compiled with '-std=c99' or
   28544 '-std=c11').  The ISO C99 keyword 'restrict' is only available when
   28545 '-std=gnu99' (which will eventually be the default) or '-std=c99' (or
   28546 the equivalent '-std=iso9899:1999'), or an option for a later standard
   28547 version, is used.
   28548 
   28549  The way to solve these problems is to put '__' at the beginning and end
   28550 of each problematical keyword.  For example, use '__asm__' instead of
   28551 'asm', and '__inline__' instead of 'inline'.
   28552 
   28553  Other C compilers won't accept these alternative keywords; if you want
   28554 to compile with another compiler, you can define the alternate keywords
   28555 as macros to replace them with the customary keywords.  It looks like
   28556 this:
   28557 
   28558      #ifndef __GNUC__
   28559      #define __asm__ asm
   28560      #endif
   28561 
   28562  '-pedantic' and other options cause warnings for many GNU C extensions.
   28563 You can prevent such warnings within one expression by writing
   28564 '__extension__' before the expression.  '__extension__' has no effect
   28565 aside from this.
   28566 
   28567 
   28568 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
   28569 
   28570 6.46 Incomplete 'enum' Types
   28571 ============================
   28572 
   28573 You can define an 'enum' tag without specifying its possible values.
   28574 This results in an incomplete type, much like what you get if you write
   28575 'struct foo' without describing the elements.  A later declaration that
   28576 does specify the possible values completes the type.
   28577 
   28578  You can't allocate variables or storage using the type while it is
   28579 incomplete.  However, you can work with pointers to that type.
   28580 
   28581  This extension may not be very useful, but it makes the handling of
   28582 'enum' more consistent with the way 'struct' and 'union' are handled.
   28583 
   28584  This extension is not supported by GNU C++.
   28585 
   28586 
   28587 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
   28588 
   28589 6.47 Function Names as Strings
   28590 ==============================
   28591 
   28592 GCC provides three magic variables that hold the name of the current
   28593 function, as a string.  The first of these is '__func__', which is part
   28594 of the C99 standard:
   28595 
   28596  The identifier '__func__' is implicitly declared by the translator as
   28597 if, immediately following the opening brace of each function definition,
   28598 the declaration
   28599 
   28600      static const char __func__[] = "function-name";
   28601 
   28602 appeared, where function-name is the name of the lexically-enclosing
   28603 function.  This name is the unadorned name of the function.
   28604 
   28605  '__FUNCTION__' is another name for '__func__'.  Older versions of GCC
   28606 recognize only this name.  However, it is not standardized.  For maximum
   28607 portability, we recommend you use '__func__', but provide a fallback
   28608 definition with the preprocessor:
   28609 
   28610      #if __STDC_VERSION__ < 199901L
   28611      # if __GNUC__ >= 2
   28612      #  define __func__ __FUNCTION__
   28613      # else
   28614      #  define __func__ "<unknown>"
   28615      # endif
   28616      #endif
   28617 
   28618  In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'.
   28619 However, in C++, '__PRETTY_FUNCTION__' contains the type signature of
   28620 the function as well as its bare name.  For example, this program:
   28621 
   28622      extern "C" {
   28623      extern int printf (char *, ...);
   28624      }
   28625 
   28626      class a {
   28627       public:
   28628        void sub (int i)
   28629          {
   28630            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
   28631            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
   28632          }
   28633      };
   28634 
   28635      int
   28636      main (void)
   28637      {
   28638        a ax;
   28639        ax.sub (0);
   28640        return 0;
   28641      }
   28642 
   28643 gives this output:
   28644 
   28645      __FUNCTION__ = sub
   28646      __PRETTY_FUNCTION__ = void a::sub(int)
   28647 
   28648  These identifiers are not preprocessor macros.  In GCC 3.3 and earlier,
   28649 in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as
   28650 string literals; they could be used to initialize 'char' arrays, and
   28651 they could be concatenated with other string literals.  GCC 3.4 and
   28652 later treat them as variables, like '__func__'.  In C++, '__FUNCTION__'
   28653 and '__PRETTY_FUNCTION__' have always been variables.
   28654 
   28655 
   28656 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
   28657 
   28658 6.48 Getting the Return or Frame Address of a Function
   28659 ======================================================
   28660 
   28661 These functions may be used to get information about the callers of a
   28662 function.
   28663 
   28664  -- Built-in Function: void * __builtin_return_address (unsigned int
   28665           LEVEL)
   28666      This function returns the return address of the current function,
   28667      or of one of its callers.  The LEVEL argument is number of frames
   28668      to scan up the call stack.  A value of '0' yields the return
   28669      address of the current function, a value of '1' yields the return
   28670      address of the caller of the current function, and so forth.  When
   28671      inlining the expected behavior is that the function returns the
   28672      address of the function that is returned to.  To work around this
   28673      behavior use the 'noinline' function attribute.
   28674 
   28675      The LEVEL argument must be a constant integer.
   28676 
   28677      On some machines it may be impossible to determine the return
   28678      address of any function other than the current one; in such cases,
   28679      or when the top of the stack has been reached, this function
   28680      returns '0' or a random value.  In addition,
   28681      '__builtin_frame_address' may be used to determine if the top of
   28682      the stack has been reached.
   28683 
   28684      Additional post-processing of the returned value may be needed, see
   28685      '__builtin_extract_return_addr'.
   28686 
   28687      This function should only be used with a nonzero argument for
   28688      debugging purposes.
   28689 
   28690  -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
   28691      The address as returned by '__builtin_return_address' may have to
   28692      be fed through this function to get the actual encoded address.
   28693      For example, on the 31-bit S/390 platform the highest bit has to be
   28694      masked out, or on SPARC platforms an offset has to be added for the
   28695      true next instruction to be executed.
   28696 
   28697      If no fixup is needed, this function simply passes through ADDR.
   28698 
   28699  -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
   28700      This function does the reverse of '__builtin_extract_return_addr'.
   28701 
   28702  -- Built-in Function: void * __builtin_frame_address (unsigned int
   28703           LEVEL)
   28704      This function is similar to '__builtin_return_address', but it
   28705      returns the address of the function frame rather than the return
   28706      address of the function.  Calling '__builtin_frame_address' with a
   28707      value of '0' yields the frame address of the current function, a
   28708      value of '1' yields the frame address of the caller of the current
   28709      function, and so forth.
   28710 
   28711      The frame is the area on the stack that holds local variables and
   28712      saved registers.  The frame address is normally the address of the
   28713      first word pushed on to the stack by the function.  However, the
   28714      exact definition depends upon the processor and the calling
   28715      convention.  If the processor has a dedicated frame pointer
   28716      register, and the function has a frame, then
   28717      '__builtin_frame_address' returns the value of the frame pointer
   28718      register.
   28719 
   28720      On some machines it may be impossible to determine the frame
   28721      address of any function other than the current one; in such cases,
   28722      or when the top of the stack has been reached, this function
   28723      returns '0' if the first frame pointer is properly initialized by
   28724      the startup code.
   28725 
   28726      This function should only be used with a nonzero argument for
   28727      debugging purposes.
   28728 
   28729 
   28730 File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
   28731 
   28732 6.49 Using Vector Instructions through Built-in Functions
   28733 =========================================================
   28734 
   28735 On some targets, the instruction set contains SIMD vector instructions
   28736 which operate on multiple values contained in one large register at the
   28737 same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
   28738 can be used this way.
   28739 
   28740  The first step in using these extensions is to provide the necessary
   28741 data types.  This should be done using an appropriate 'typedef':
   28742 
   28743      typedef int v4si __attribute__ ((vector_size (16)));
   28744 
   28745 The 'int' type specifies the base type, while the attribute specifies
   28746 the vector size for the variable, measured in bytes.  For example, the
   28747 declaration above causes the compiler to set the mode for the 'v4si'
   28748 type to be 16 bytes wide and divided into 'int' sized units.  For a
   28749 32-bit 'int' this means a vector of 4 units of 4 bytes, and the
   28750 corresponding mode of 'foo' is V4SI.
   28751 
   28752  The 'vector_size' attribute is only applicable to integral and float
   28753 scalars, although arrays, pointers, and function return values are
   28754 allowed in conjunction with this construct.  Only sizes that are a power
   28755 of two are currently allowed.
   28756 
   28757  All the basic integer types can be used as base types, both as signed
   28758 and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
   28759 addition, 'float' and 'double' can be used to build floating-point
   28760 vector types.
   28761 
   28762  Specifying a combination that is not valid for the current architecture
   28763 causes GCC to synthesize the instructions using a narrower mode.  For
   28764 example, if you specify a variable of type 'V4SI' and your architecture
   28765 does not allow for this specific SIMD type, GCC produces code that uses
   28766 4 'SIs'.
   28767 
   28768  The types defined in this manner can be used with a subset of normal C
   28769 operations.  Currently, GCC allows using the following operators on
   28770 these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.
   28771 
   28772  The operations behave like C++ 'valarrays'.  Addition is defined as the
   28773 addition of the corresponding elements of the operands.  For example, in
   28774 the code below, each of the 4 elements in A is added to the
   28775 corresponding 4 elements in B and the resulting vector is stored in C.
   28776 
   28777      typedef int v4si __attribute__ ((vector_size (16)));
   28778 
   28779      v4si a, b, c;
   28780 
   28781      c = a + b;
   28782 
   28783  Subtraction, multiplication, division, and the logical operations
   28784 operate in a similar manner.  Likewise, the result of using the unary
   28785 minus or complement operators on a vector type is a vector whose
   28786 elements are the negative or complemented values of the corresponding
   28787 elements in the operand.
   28788 
   28789  It is possible to use shifting operators '<<', '>>' on integer-type
   28790 vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
   28791 {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
   28792 operands must have the same number of elements.
   28793 
   28794  For convenience, it is allowed to use a binary vector operation where
   28795 one operand is a scalar.  In that case the compiler transforms the
   28796 scalar operand into a vector where each element is the scalar from the
   28797 operation.  The transformation happens only if the scalar could be
   28798 safely converted to the vector-element type.  Consider the following
   28799 code.
   28800 
   28801      typedef int v4si __attribute__ ((vector_size (16)));
   28802 
   28803      v4si a, b, c;
   28804      long l;
   28805 
   28806      a = b + 1;    /* a = b + {1,1,1,1}; */
   28807      a = 2 * b;    /* a = {2,2,2,2} * b; */
   28808 
   28809      a = l + a;    /* Error, cannot convert long to int. */
   28810 
   28811  Vectors can be subscripted as if the vector were an array with the same
   28812 number of elements and base type.  Out of bound accesses invoke
   28813 undefined behavior at run time.  Warnings for out of bound accesses for
   28814 vector subscription can be enabled with '-Warray-bounds'.
   28815 
   28816  Vector comparison is supported with standard comparison operators: '==,
   28817 !=, <, <=, >, >='.  Comparison operands can be vector expressions of
   28818 integer-type or real-type.  Comparison between integer-type vectors and
   28819 real-type vectors are not supported.  The result of the comparison is a
   28820 vector of the same width and number of elements as the comparison
   28821 operands with a signed integral element type.
   28822 
   28823  Vectors are compared element-wise producing 0 when comparison is false
   28824 and -1 (constant of the appropriate type where all bits are set)
   28825 otherwise.  Consider the following example.
   28826 
   28827      typedef int v4si __attribute__ ((vector_size (16)));
   28828 
   28829      v4si a = {1,2,3,4};
   28830      v4si b = {3,2,1,4};
   28831      v4si c;
   28832 
   28833      c = a >  b;     /* The result would be {0, 0,-1, 0}  */
   28834      c = a == b;     /* The result would be {0,-1, 0,-1}  */
   28835 
   28836  Vector shuffling is available using functions '__builtin_shuffle (vec,
   28837 mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
   28838 construct a permutation of elements from one or two vectors and return a
   28839 vector of the same type as the input vector(s).  The MASK is an integral
   28840 vector with the same width (W) and element count (N) as the output
   28841 vector.
   28842 
   28843  The elements of the input vectors are numbered in memory ordering of
   28844 VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
   28845 considered modulo N in the single-operand case and modulo 2*N in the
   28846 two-operand case.
   28847 
   28848  Consider the following example,
   28849 
   28850      typedef int v4si __attribute__ ((vector_size (16)));
   28851 
   28852      v4si a = {1,2,3,4};
   28853      v4si b = {5,6,7,8};
   28854      v4si mask1 = {0,1,1,3};
   28855      v4si mask2 = {0,4,2,5};
   28856      v4si res;
   28857 
   28858      res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
   28859      res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
   28860 
   28861  Note that '__builtin_shuffle' is intentionally semantically compatible
   28862 with the OpenCL 'shuffle' and 'shuffle2' functions.
   28863 
   28864  You can declare variables and use them in function calls and returns,
   28865 as well as in assignments and some casts.  You can specify a vector type
   28866 as a return type for a function.  Vector types can also be used as
   28867 function arguments.  It is possible to cast from one vector type to
   28868 another, provided they are of the same size (in fact, you can also cast
   28869 vectors to and from other datatypes of the same size).
   28870 
   28871  You cannot operate between vectors of different lengths or different
   28872 signedness without a cast.
   28873 
   28874 
   28875 File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
   28876 
   28877 6.50 Offsetof
   28878 =============
   28879 
   28880 GCC implements for both C and C++ a syntactic extension to implement the
   28881 'offsetof' macro.
   28882 
   28883      primary:
   28884              "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"
   28885 
   28886      offsetof_member_designator:
   28887                identifier
   28888              | offsetof_member_designator "." identifier
   28889              | offsetof_member_designator "[" expr "]"
   28890 
   28891  This extension is sufficient such that
   28892 
   28893      #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
   28894 
   28895 is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
   28896 dependent.  In either case, MEMBER may consist of a single identifier,
   28897 or a sequence of member accesses and array references.
   28898 
   28899 
   28900 File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
   28901 
   28902 6.51 Legacy __sync Built-in Functions for Atomic Memory Access
   28903 ==============================================================
   28904 
   28905 The following built-in functions are intended to be compatible with
   28906 those described in the 'Intel Itanium Processor-specific Application
   28907 Binary Interface', section 7.4.  As such, they depart from the normal
   28908 GCC practice of using the '__builtin_' prefix, and further that they are
   28909 overloaded such that they work on multiple types.
   28910 
   28911  The definition given in the Intel documentation allows only for the use
   28912 of the types 'int', 'long', 'long long' as well as their unsigned
   28913 counterparts.  GCC allows any integral scalar or pointer type that is 1,
   28914 2, 4 or 8 bytes in length.
   28915 
   28916  Not all operations are supported by all target processors.  If a
   28917 particular operation cannot be implemented on the target processor, a
   28918 warning is generated and a call an external function is generated.  The
   28919 external function carries the same name as the built-in version, with an
   28920 additional suffix '_N' where N is the size of the data type.
   28921 
   28922  In most cases, these built-in functions are considered a "full
   28923 barrier".  That is, no memory operand is moved across the operation,
   28924 either forward or backward.  Further, instructions are issued as
   28925 necessary to prevent the processor from speculating loads across the
   28926 operation and from queuing stores after the operation.
   28927 
   28928  All of the routines are described in the Intel documentation to take
   28929 "an optional list of variables protected by the memory barrier".  It's
   28930 not clear what is meant by that; it could mean that _only_ the following
   28931 variables are protected, or it could mean that these variables should in
   28932 addition be protected.  At present GCC ignores this list and protects
   28933 all variables that are globally accessible.  If in the future we make
   28934 some use of this list, an empty list will continue to mean all globally
   28935 accessible variables.
   28936 
   28937 'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
   28938 'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
   28939 'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
   28940 'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
   28941 'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
   28942 'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
   28943      These built-in functions perform the operation suggested by the
   28944      name, and returns the value that had previously been in memory.
   28945      That is,
   28946 
   28947           { tmp = *ptr; *ptr OP= value; return tmp; }
   28948           { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
   28949 
   28950      _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
   28951      '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.
   28952 
   28953 'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
   28954 'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
   28955 'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
   28956 'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
   28957 'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
   28958 'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
   28959      These built-in functions perform the operation suggested by the
   28960      name, and return the new value.  That is,
   28961 
   28962           { *ptr OP= value; return *ptr; }
   28963           { *ptr = ~(*ptr & value); return *ptr; }   // nand
   28964 
   28965      _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
   28966      '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.
   28967 
   28968 'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
   28969 'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
   28970      These built-in functions perform an atomic compare and swap.  That
   28971      is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
   28972      into '*PTR'.
   28973 
   28974      The "bool" version returns true if the comparison is successful and
   28975      NEWVAL is written.  The "val" version returns the contents of
   28976      '*PTR' before the operation.
   28977 
   28978 '__sync_synchronize (...)'
   28979      This built-in function issues a full memory barrier.
   28980 
   28981 'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
   28982      This built-in function, as described by Intel, is not a traditional
   28983      test-and-set operation, but rather an atomic exchange operation.
   28984      It writes VALUE into '*PTR', and returns the previous contents of
   28985      '*PTR'.
   28986 
   28987      Many targets have only minimal support for such locks, and do not
   28988      support a full exchange operation.  In this case, a target may
   28989      support reduced functionality here by which the _only_ valid value
   28990      to store is the immediate constant 1.  The exact value actually
   28991      stored in '*PTR' is implementation defined.
   28992 
   28993      This built-in function is not a full barrier, but rather an
   28994      "acquire barrier".  This means that references after the operation
   28995      cannot move to (or be speculated to) before the operation, but
   28996      previous memory stores may not be globally visible yet, and
   28997      previous memory loads may not yet be satisfied.
   28998 
   28999 'void __sync_lock_release (TYPE *ptr, ...)'
   29000      This built-in function releases the lock acquired by
   29001      '__sync_lock_test_and_set'.  Normally this means writing the
   29002      constant 0 to '*PTR'.
   29003 
   29004      This built-in function is not a full barrier, but rather a "release
   29005      barrier".  This means that all previous memory stores are globally
   29006      visible, and all previous memory loads have been satisfied, but
   29007      following memory reads are not prevented from being speculated to
   29008      before the barrier.
   29009 
   29010 
   29011 File: gcc.info,  Node: __atomic Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __sync Builtins,  Up: C Extensions
   29012 
   29013 6.52 Built-in functions for memory model aware atomic operations
   29014 ================================================================
   29015 
   29016 The following built-in functions approximately match the requirements
   29017 for C++11 memory model.  Many are similar to the '__sync' prefixed
   29018 built-in functions, but all also have a memory model parameter.  These
   29019 are all identified by being prefixed with '__atomic', and most are
   29020 overloaded such that they work with multiple types.
   29021 
   29022  GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
   29023 bytes in length.  16-byte integral types are also allowed if '__int128'
   29024 (*note __int128::) is supported by the architecture.
   29025 
   29026  Target architectures are encouraged to provide their own patterns for
   29027 each of these built-in functions.  If no target is provided, the
   29028 original non-memory model set of '__sync' atomic built-in functions are
   29029 utilized, along with any required synchronization fences surrounding it
   29030 in order to achieve the proper behavior.  Execution in this case is
   29031 subject to the same restrictions as those built-in functions.
   29032 
   29033  If there is no pattern or mechanism to provide a lock free instruction
   29034 sequence, a call is made to an external routine with the same parameters
   29035 to be resolved at run time.
   29036 
   29037  The four non-arithmetic functions (load, store, exchange, and
   29038 compare_exchange) all have a generic version as well.  This generic
   29039 version works on any data type.  If the data type size maps to one of
   29040 the integral sizes that may have lock free support, the generic version
   29041 utilizes the lock free built-in function.  Otherwise an external call is
   29042 left to be resolved at run time.  This external call is the same format
   29043 with the addition of a 'size_t' parameter inserted as the first
   29044 parameter indicating the size of the object being pointed to.  All
   29045 objects must be the same size.
   29046 
   29047  There are 6 different memory models that can be specified.  These map
   29048 to the same names in the C++11 standard.  Refer there or to the GCC wiki
   29049 on atomic synchronization
   29050 (http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
   29051 definitions.  These memory models integrate both barriers to code motion
   29052 as well as synchronization requirements with other threads.  These are
   29053 listed in approximately ascending order of strength.  It is also
   29054 possible to use target specific flags for memory model flags, like
   29055 Hardware Lock Elision.
   29056 
   29057 '__ATOMIC_RELAXED'
   29058      No barriers or synchronization.
   29059 '__ATOMIC_CONSUME'
   29060      Data dependency only for both barrier and synchronization with
   29061      another thread.
   29062 '__ATOMIC_ACQUIRE'
   29063      Barrier to hoisting of code and synchronizes with release (or
   29064      stronger) semantic stores from another thread.
   29065 '__ATOMIC_RELEASE'
   29066      Barrier to sinking of code and synchronizes with acquire (or
   29067      stronger) semantic loads from another thread.
   29068 '__ATOMIC_ACQ_REL'
   29069      Full barrier in both directions and synchronizes with acquire loads
   29070      and release stores in another thread.
   29071 '__ATOMIC_SEQ_CST'
   29072      Full barrier in both directions and synchronizes with acquire loads
   29073      and release stores in all threads.
   29074 
   29075  When implementing patterns for these built-in functions, the memory
   29076 model parameter can be ignored as long as the pattern implements the
   29077 most restrictive '__ATOMIC_SEQ_CST' model.  Any of the other memory
   29078 models execute correctly with this memory model but they may not execute
   29079 as efficiently as they could with a more appropriate implementation of
   29080 the relaxed requirements.
   29081 
   29082  Note that the C++11 standard allows for the memory model parameter to
   29083 be determined at run time rather than at compile time.  These built-in
   29084 functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
   29085 invoke a runtime library call or inline a switch statement.  This is
   29086 standard compliant, safe, and the simplest approach for now.
   29087 
   29088  The memory model parameter is a signed int, but only the lower 8 bits
   29089 are reserved for the memory model.  The remainder of the signed int is
   29090 reserved for future use and should be 0.  Use of the predefined atomic
   29091 values ensures proper usage.
   29092 
   29093  -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
   29094      This built-in function implements an atomic load operation.  It
   29095      returns the contents of '*PTR'.
   29096 
   29097      The valid memory model variants are '__ATOMIC_RELAXED',
   29098      '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.
   29099 
   29100  -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
   29101           memmodel)
   29102      This is the generic version of an atomic load.  It returns the
   29103      contents of '*PTR' in '*RET'.
   29104 
   29105  -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
   29106           memmodel)
   29107      This built-in function implements an atomic store operation.  It
   29108      writes 'VAL' into '*PTR'.
   29109 
   29110      The valid memory model variants are '__ATOMIC_RELAXED',
   29111      '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
   29112 
   29113  -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
   29114           memmodel)
   29115      This is the generic version of an atomic store.  It stores the
   29116      value of '*VAL' into '*PTR'.
   29117 
   29118  -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
   29119           int memmodel)
   29120      This built-in function implements an atomic exchange operation.  It
   29121      writes VAL into '*PTR', and returns the previous contents of
   29122      '*PTR'.
   29123 
   29124      The valid memory model variants are '__ATOMIC_RELAXED',
   29125      '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
   29126      '__ATOMIC_ACQ_REL'.
   29127 
   29128  -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
   29129           TYPE *ret, int memmodel)
   29130      This is the generic version of an atomic exchange.  It stores the
   29131      contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
   29132      copied into '*RET'.
   29133 
   29134  -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
   29135           *expected, TYPE desired, bool weak, int success_memmodel, int
   29136           failure_memmodel)
   29137      This built-in function implements an atomic compare and exchange
   29138      operation.  This compares the contents of '*PTR' with the contents
   29139      of '*EXPECTED' and if equal, writes DESIRED into '*PTR'.  If they
   29140      are not equal, the current contents of '*PTR' is written into
   29141      '*EXPECTED'.  WEAK is true for weak compare_exchange, and false for
   29142      the strong variation.  Many targets only offer the strong variation
   29143      and ignore the parameter.  When in doubt, use the strong variation.
   29144 
   29145      True is returned if DESIRED is written into '*PTR' and the
   29146      execution is considered to conform to the memory model specified by
   29147      SUCCESS_MEMMODEL.  There are no restrictions on what memory model
   29148      can be used here.
   29149 
   29150      False is returned otherwise, and the execution is considered to
   29151      conform to FAILURE_MEMMODEL.  This memory model cannot be
   29152      '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'.  It also cannot be a
   29153      stronger model than that specified by SUCCESS_MEMMODEL.
   29154 
   29155  -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
   29156           *expected, TYPE *desired, bool weak, int success_memmodel, int
   29157           failure_memmodel)
   29158      This built-in function implements the generic version of
   29159      '__atomic_compare_exchange'.  The function is virtually identical
   29160      to '__atomic_compare_exchange_n', except the desired value is also
   29161      a pointer.
   29162 
   29163  -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
   29164           memmodel)
   29165  -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
   29166           memmodel)
   29167  -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
   29168           memmodel)
   29169  -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
   29170           memmodel)
   29171  -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
   29172           memmodel)
   29173  -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
   29174           int memmodel)
   29175      These built-in functions perform the operation suggested by the
   29176      name, and return the result of the operation.  That is,
   29177 
   29178           { *ptr OP= val; return *ptr; }
   29179 
   29180      All memory models are valid.
   29181 
   29182  -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
   29183           memmodel)
   29184  -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
   29185           memmodel)
   29186  -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
   29187           memmodel)
   29188  -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
   29189           memmodel)
   29190  -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
   29191           memmodel)
   29192  -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
   29193           int memmodel)
   29194      These built-in functions perform the operation suggested by the
   29195      name, and return the value that had previously been in '*PTR'.
   29196      That is,
   29197 
   29198           { tmp = *ptr; *ptr OP= val; return tmp; }
   29199 
   29200      All memory models are valid.
   29201 
   29202  -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
   29203           memmodel)
   29204 
   29205      This built-in function performs an atomic test-and-set operation on
   29206      the byte at '*PTR'.  The byte is set to some implementation defined
   29207      nonzero "set" value and the return value is 'true' if and only if
   29208      the previous contents were "set".  It should be only used for
   29209      operands of type 'bool' or 'char'.  For other types only part of
   29210      the value may be set.
   29211 
   29212      All memory models are valid.
   29213 
   29214  -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
   29215 
   29216      This built-in function performs an atomic clear operation on
   29217      '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
   29218      used for operands of type 'bool' or 'char' and in conjunction with
   29219      '__atomic_test_and_set'.  For other types it may only clear
   29220      partially.  If the type is not 'bool' prefer using
   29221      '__atomic_store'.
   29222 
   29223      The valid memory model variants are '__ATOMIC_RELAXED',
   29224      '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.
   29225 
   29226  -- Built-in Function: void __atomic_thread_fence (int memmodel)
   29227 
   29228      This built-in function acts as a synchronization fence between
   29229      threads based on the specified memory model.
   29230 
   29231      All memory orders are valid.
   29232 
   29233  -- Built-in Function: void __atomic_signal_fence (int memmodel)
   29234 
   29235      This built-in function acts as a synchronization fence between a
   29236      thread and signal handlers based in the same thread.
   29237 
   29238      All memory orders are valid.
   29239 
   29240  -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
   29241           *ptr)
   29242 
   29243      This built-in function returns true if objects of SIZE bytes always
   29244      generate lock free atomic instructions for the target architecture.
   29245      SIZE must resolve to a compile-time constant and the result also
   29246      resolves to a compile-time constant.
   29247 
   29248      PTR is an optional pointer to the object that may be used to
   29249      determine alignment.  A value of 0 indicates typical alignment
   29250      should be used.  The compiler may also ignore this parameter.
   29251 
   29252           if (_atomic_always_lock_free (sizeof (long long), 0))
   29253 
   29254  -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
   29255           *ptr)
   29256 
   29257      This built-in function returns true if objects of SIZE bytes always
   29258      generate lock free atomic instructions for the target architecture.
   29259      If it is not known to be lock free a call is made to a runtime
   29260      routine named '__atomic_is_lock_free'.
   29261 
   29262      PTR is an optional pointer to the object that may be used to
   29263      determine alignment.  A value of 0 indicates typical alignment
   29264      should be used.  The compiler may also ignore this parameter.
   29265 
   29266 
   29267 File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: __atomic Builtins,  Up: C Extensions
   29268 
   29269 6.53 x86 specific memory model extensions for transactional memory
   29270 ==================================================================
   29271 
   29272 The i386 architecture supports additional memory ordering flags to mark
   29273 lock critical sections for hardware lock elision.  These must be
   29274 specified in addition to an existing memory model to atomic intrinsics.
   29275 
   29276 '__ATOMIC_HLE_ACQUIRE'
   29277      Start lock elision on a lock variable.  Memory model must be
   29278      '__ATOMIC_ACQUIRE' or stronger.
   29279 '__ATOMIC_HLE_RELEASE'
   29280      End lock elision on a lock variable.  Memory model must be
   29281      '__ATOMIC_RELEASE' or stronger.
   29282 
   29283  When a lock acquire fails it is required for good performance to abort
   29284 the transaction quickly.  This can be done with a '_mm_pause'
   29285 
   29286      #include <immintrin.h> // For _mm_pause
   29287 
   29288      int lockvar;
   29289 
   29290      /* Acquire lock with lock elision */
   29291      while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
   29292          _mm_pause(); /* Abort failed transaction */
   29293      ...
   29294      /* Free lock with lock elision */
   29295      __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
   29296 
   29297 
   29298 File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
   29299 
   29300 6.54 Object Size Checking Built-in Functions
   29301 ============================================
   29302 
   29303 GCC implements a limited buffer overflow protection mechanism that can
   29304 prevent some buffer overflow attacks.
   29305 
   29306  -- Built-in Function: size_t __builtin_object_size (void * PTR, int
   29307           TYPE)
   29308      is a built-in construct that returns a constant number of bytes
   29309      from PTR to the end of the object PTR pointer points to (if known
   29310      at compile time).  '__builtin_object_size' never evaluates its
   29311      arguments for side-effects.  If there are any side-effects in them,
   29312      it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE
   29313      2 or 3.  If there are multiple objects PTR can point to and all of
   29314      them are known at compile time, the returned number is the maximum
   29315      of remaining byte counts in those objects if TYPE & 2 is 0 and
   29316      minimum if nonzero.  If it is not possible to determine which
   29317      objects PTR points to at compile time, '__builtin_object_size'
   29318      should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for
   29319      TYPE 2 or 3.
   29320 
   29321      TYPE is an integer constant from 0 to 3.  If the least significant
   29322      bit is clear, objects are whole variables, if it is set, a closest
   29323      surrounding subobject is considered the object a pointer points to.
   29324      The second bit determines if maximum or minimum of remaining bytes
   29325      is computed.
   29326 
   29327           struct V { char buf1[10]; int b; char buf2[10]; } var;
   29328           char *p = &var.buf1[1], *q = &var.b;
   29329 
   29330           /* Here the object p points to is var.  */
   29331           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
   29332           /* The subobject p points to is var.buf1.  */
   29333           assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
   29334           /* The object q points to is var.  */
   29335           assert (__builtin_object_size (q, 0)
   29336                   == (char *) (&var + 1) - (char *) &var.b);
   29337           /* The subobject q points to is var.b.  */
   29338           assert (__builtin_object_size (q, 1) == sizeof (var.b));
   29339 
   29340  There are built-in functions added for many common string operation
   29341 functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
   29342 provided.  This built-in has an additional last argument, which is the
   29343 number of bytes remaining in object the DEST argument points to or
   29344 '(size_t) -1' if the size is not known.
   29345 
   29346  The built-in functions are optimized into the normal string functions
   29347 like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
   29348 compile time that the destination object will not be overflown.  If the
   29349 compiler can determine at compile time the object will be always
   29350 overflown, it issues a warning.
   29351 
   29352  The intended use can be e.g.
   29353 
   29354      #undef memcpy
   29355      #define bos0(dest) __builtin_object_size (dest, 0)
   29356      #define memcpy(dest, src, n) \
   29357        __builtin___memcpy_chk (dest, src, n, bos0 (dest))
   29358 
   29359      char *volatile p;
   29360      char buf[10];
   29361      /* It is unknown what object p points to, so this is optimized
   29362         into plain memcpy - no checking is possible.  */
   29363      memcpy (p, "abcde", n);
   29364      /* Destination is known and length too.  It is known at compile
   29365         time there will be no overflow.  */
   29366      memcpy (&buf[5], "abcde", 5);
   29367      /* Destination is known, but the length is not known at compile time.
   29368         This will result in __memcpy_chk call that can check for overflow
   29369         at run time.  */
   29370      memcpy (&buf[5], "abcde", n);
   29371      /* Destination is known and it is known at compile time there will
   29372         be overflow.  There will be a warning and __memcpy_chk call that
   29373         will abort the program at run time.  */
   29374      memcpy (&buf[6], "abcde", 5);
   29375 
   29376  Such built-in functions are provided for 'memcpy', 'mempcpy',
   29377 'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
   29378 'strncat'.
   29379 
   29380  There are also checking built-in functions for formatted output
   29381 functions.
   29382      int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
   29383      int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   29384                                    const char *fmt, ...);
   29385      int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
   29386                                    va_list ap);
   29387      int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   29388                                     const char *fmt, va_list ap);
   29389 
   29390  The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
   29391 functions and can contain implementation specific flags on what
   29392 additional security measures the checking function might take, such as
   29393 handling '%n' differently.
   29394 
   29395  The OS argument is the object size S points to, like in the other
   29396 built-in functions.  There is a small difference in the behavior though,
   29397 if OS is '(size_t) -1', the built-in functions are optimized into the
   29398 non-checking functions only if FLAG is 0, otherwise the checking
   29399 function is called with OS argument set to '(size_t) -1'.
   29400 
   29401  In addition to this, there are checking built-in functions
   29402 '__builtin___printf_chk', '__builtin___vprintf_chk',
   29403 '__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
   29404 just one additional argument, FLAG, right before format string FMT.  If
   29405 the compiler is able to optimize them to 'fputc' etc. functions, it
   29406 does, otherwise the checking function is called and the FLAG argument
   29407 passed to it.
   29408 
   29409 
   29410 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
   29411 
   29412 6.55 Other Built-in Functions Provided by GCC
   29413 =============================================
   29414 
   29415 GCC provides a large number of built-in functions other than the ones
   29416 mentioned above.  Some of these are for internal use in the processing
   29417 of exceptions or variable-length argument lists and are not documented
   29418 here because they may change from time to time; we do not recommend
   29419 general use of these functions.
   29420 
   29421  The remaining functions are provided for optimization purposes.
   29422 
   29423  GCC includes built-in versions of many of the functions in the standard
   29424 C library.  The versions prefixed with '__builtin_' are always treated
   29425 as having the same meaning as the C library function even if you specify
   29426 the '-fno-builtin' option.  (*note C Dialect Options::) Many of these
   29427 functions are only optimized in certain cases; if they are not optimized
   29428 in a particular case, a call to the library function is emitted.
   29429 
   29430  Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
   29431 '-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
   29432 'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
   29433 'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
   29434 'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
   29435 'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
   29436 'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
   29437 'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf',
   29438 'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32',
   29439 'signbitd64', 'signbitd128', 'significandf', 'significandl',
   29440 'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy',
   29441 'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii',
   29442 'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be
   29443 handled as built-in functions.  All these functions have corresponding
   29444 versions prefixed with '__builtin_', which may be used even in strict
   29445 C90 mode.
   29446 
   29447  The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
   29448 'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
   29449 'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
   29450 'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
   29451 'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
   29452 'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
   29453 'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
   29454 'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
   29455 'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
   29456 'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
   29457 'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
   29458 'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
   29459 'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
   29460 'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
   29461 'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
   29462 'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
   29463 'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
   29464 'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
   29465 'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
   29466 'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
   29467 'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
   29468 'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
   29469 'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
   29470 'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
   29471 'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
   29472 'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
   29473 handled as built-in functions except in strict ISO C90 mode ('-ansi' or
   29474 '-std=c90').
   29475 
   29476  There are also built-in versions of the ISO C99 functions 'acosf',
   29477 'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
   29478 'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
   29479 'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
   29480 'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
   29481 'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
   29482 'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
   29483 recognized in any mode since ISO C90 reserves these names for the
   29484 purpose to which ISO C99 puts them.  All these functions have
   29485 corresponding versions prefixed with '__builtin_'.
   29486 
   29487  The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
   29488 'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
   29489 'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
   29490 except in strict ISO C90 mode ('-ansi' or '-std=c90').
   29491 
   29492  The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
   29493 'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
   29494 'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl',
   29495 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
   29496 'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10',
   29497 'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow',
   29498 'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf',
   29499 'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy',
   29500 'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk',
   29501 'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and
   29502 'vsprintf' are all recognized as built-in functions unless
   29503 '-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for
   29504 an individual function).  All of these functions have corresponding
   29505 versions prefixed with '__builtin_'.
   29506 
   29507  GCC provides built-in versions of the ISO C99 floating-point comparison
   29508 macros that avoid raising exceptions for unordered operands.  They have
   29509 the same names as the standard macros ( 'isgreater', 'isgreaterequal',
   29510 'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
   29511 '__builtin_' prefixed.  We intend for a library implementor to be able
   29512 to simply '#define' each standard macro to its built-in equivalent.  In
   29513 the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign'
   29514 and 'isnormal' built-ins used with '__builtin_' prefixed.  The 'isinf'
   29515 and 'isnan' built-in functions appear both with and without the
   29516 '__builtin_' prefix.
   29517 
   29518  -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
   29519 
   29520      You can use the built-in function '__builtin_types_compatible_p' to
   29521      determine whether two types are the same.
   29522 
   29523      This built-in function returns 1 if the unqualified versions of the
   29524      types TYPE1 and TYPE2 (which are types, not expressions) are
   29525      compatible, 0 otherwise.  The result of this built-in function can
   29526      be used in integer constant expressions.
   29527 
   29528      This built-in function ignores top level qualifiers (e.g., 'const',
   29529      'volatile').  For example, 'int' is equivalent to 'const int'.
   29530 
   29531      The type 'int[]' and 'int[5]' are compatible.  On the other hand,
   29532      'int' and 'char *' are not compatible, even if the size of their
   29533      types, on the particular architecture are the same.  Also, the
   29534      amount of pointer indirection is taken into account when
   29535      determining similarity.  Consequently, 'short *' is not similar to
   29536      'short **'.  Furthermore, two types that are typedefed are
   29537      considered compatible if their underlying types are compatible.
   29538 
   29539      An 'enum' type is not considered to be compatible with another
   29540      'enum' type even if both are compatible with the same integer type;
   29541      this is what the C standard specifies.  For example, 'enum {foo,
   29542      bar}' is not similar to 'enum {hot, dog}'.
   29543 
   29544      You typically use this function in code whose execution varies
   29545      depending on the arguments' types.  For example:
   29546 
   29547           #define foo(x)                                                  \
   29548             ({                                                           \
   29549               typeof (x) tmp = (x);                                       \
   29550               if (__builtin_types_compatible_p (typeof (x), long double)) \
   29551                 tmp = foo_long_double (tmp);                              \
   29552               else if (__builtin_types_compatible_p (typeof (x), double)) \
   29553                 tmp = foo_double (tmp);                                   \
   29554               else if (__builtin_types_compatible_p (typeof (x), float))  \
   29555                 tmp = foo_float (tmp);                                    \
   29556               else                                                        \
   29557                 abort ();                                                 \
   29558               tmp;                                                        \
   29559             })
   29560 
   29561      _Note:_ This construct is only available for C.
   29562 
   29563  -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
   29564           EXP2)
   29565 
   29566      You can use the built-in function '__builtin_choose_expr' to
   29567      evaluate code depending on the value of a constant expression.
   29568      This built-in function returns EXP1 if CONST_EXP, which is an
   29569      integer constant expression, is nonzero.  Otherwise it returns
   29570      EXP2.
   29571 
   29572      This built-in function is analogous to the '? :' operator in C,
   29573      except that the expression returned has its type unaltered by
   29574      promotion rules.  Also, the built-in function does not evaluate the
   29575      expression that is not chosen.  For example, if CONST_EXP evaluates
   29576      to true, EXP2 is not evaluated even if it has side-effects.
   29577 
   29578      This built-in function can return an lvalue if the chosen argument
   29579      is an lvalue.
   29580 
   29581      If EXP1 is returned, the return type is the same as EXP1's type.
   29582      Similarly, if EXP2 is returned, its return type is the same as
   29583      EXP2.
   29584 
   29585      Example:
   29586 
   29587           #define foo(x)                                                    \
   29588             __builtin_choose_expr (                                         \
   29589               __builtin_types_compatible_p (typeof (x), double),            \
   29590               foo_double (x),                                               \
   29591               __builtin_choose_expr (                                       \
   29592                 __builtin_types_compatible_p (typeof (x), float),           \
   29593                 foo_float (x),                                              \
   29594                 /* The void expression results in a compile-time error  \
   29595                    when assigning the result to something.  */          \
   29596                 (void)0))
   29597 
   29598      _Note:_ This construct is only available for C.  Furthermore, the
   29599      unused expression (EXP1 or EXP2 depending on the value of
   29600      CONST_EXP) may still generate syntax errors.  This may change in
   29601      future revisions.
   29602 
   29603  -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
   29604 
   29605      The built-in function '__builtin_complex' is provided for use in
   29606      implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
   29607      REAL and IMAG must have the same type, a real binary floating-point
   29608      type, and the result has the corresponding complex type with real
   29609      and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
   29610      works even when infinities, NaNs and negative zeros are involved.
   29611 
   29612  -- Built-in Function: int __builtin_constant_p (EXP)
   29613      You can use the built-in function '__builtin_constant_p' to
   29614      determine if a value is known to be constant at compile time and
   29615      hence that GCC can perform constant-folding on expressions
   29616      involving that value.  The argument of the function is the value to
   29617      test.  The function returns the integer 1 if the argument is known
   29618      to be a compile-time constant and 0 if it is not known to be a
   29619      compile-time constant.  A return of 0 does not indicate that the
   29620      value is _not_ a constant, but merely that GCC cannot prove it is a
   29621      constant with the specified value of the '-O' option.
   29622 
   29623      You typically use this function in an embedded application where
   29624      memory is a critical resource.  If you have some complex
   29625      calculation, you may want it to be folded if it involves constants,
   29626      but need to call a function if it does not.  For example:
   29627 
   29628           #define Scale_Value(X)      \
   29629             (__builtin_constant_p (X) \
   29630             ? ((X) * SCALE + OFFSET) : Scale (X))
   29631 
   29632      You may use this built-in function in either a macro or an inline
   29633      function.  However, if you use it in an inlined function and pass
   29634      an argument of the function as the argument to the built-in, GCC
   29635      never returns 1 when you call the inline function with a string
   29636      constant or compound literal (*note Compound Literals::) and does
   29637      not return 1 when you pass a constant numeric value to the inline
   29638      function unless you specify the '-O' option.
   29639 
   29640      You may also use '__builtin_constant_p' in initializers for static
   29641      data.  For instance, you can write
   29642 
   29643           static const int table[] = {
   29644              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
   29645              /* ... */
   29646           };
   29647 
   29648      This is an acceptable initializer even if EXPRESSION is not a
   29649      constant expression, including the case where
   29650      '__builtin_constant_p' returns 1 because EXPRESSION can be folded
   29651      to a constant but EXPRESSION contains operands that are not
   29652      otherwise permitted in a static initializer (for example, '0 && foo
   29653      ()').  GCC must be more conservative about evaluating the built-in
   29654      in this case, because it has no opportunity to perform
   29655      optimization.
   29656 
   29657      Previous versions of GCC did not accept this built-in in data
   29658      initializers.  The earliest version where it is completely safe is
   29659      3.0.1.
   29660 
   29661  -- Built-in Function: long __builtin_expect (long EXP, long C)
   29662      You may use '__builtin_expect' to provide the compiler with branch
   29663      prediction information.  In general, you should prefer to use
   29664      actual profile feedback for this ('-fprofile-arcs'), as programmers
   29665      are notoriously bad at predicting how their programs actually
   29666      perform.  However, there are applications in which this data is
   29667      hard to collect.
   29668 
   29669      The return value is the value of EXP, which should be an integral
   29670      expression.  The semantics of the built-in are that it is expected
   29671      that EXP == C.  For example:
   29672 
   29673           if (__builtin_expect (x, 0))
   29674             foo ();
   29675 
   29676      indicates that we do not expect to call 'foo', since we expect 'x'
   29677      to be zero.  Since you are limited to integral expressions for EXP,
   29678      you should use constructions such as
   29679 
   29680           if (__builtin_expect (ptr != NULL, 1))
   29681             foo (*ptr);
   29682 
   29683      when testing pointer or floating-point values.
   29684 
   29685  -- Built-in Function: void __builtin_trap (void)
   29686      This function causes the program to exit abnormally.  GCC
   29687      implements this function by using a target-dependent mechanism
   29688      (such as intentionally executing an illegal instruction) or by
   29689      calling 'abort'.  The mechanism used may vary from release to
   29690      release so you should not rely on any particular implementation.
   29691 
   29692  -- Built-in Function: void __builtin_unreachable (void)
   29693      If control flow reaches the point of the '__builtin_unreachable',
   29694      the program is undefined.  It is useful in situations where the
   29695      compiler cannot deduce the unreachability of the code.
   29696 
   29697      One such case is immediately following an 'asm' statement that
   29698      either never terminates, or one that transfers control elsewhere
   29699      and never returns.  In this example, without the
   29700      '__builtin_unreachable', GCC issues a warning that control reaches
   29701      the end of a non-void function.  It also generates code to return
   29702      after the 'asm'.
   29703 
   29704           int f (int c, int v)
   29705           {
   29706             if (c)
   29707               {
   29708                 return v;
   29709               }
   29710             else
   29711               {
   29712                 asm("jmp error_handler");
   29713                 __builtin_unreachable ();
   29714               }
   29715           }
   29716 
   29717      Because the 'asm' statement unconditionally transfers control out
   29718      of the function, control never reaches the end of the function
   29719      body.  The '__builtin_unreachable' is in fact unreachable and
   29720      communicates this fact to the compiler.
   29721 
   29722      Another use for '__builtin_unreachable' is following a call a
   29723      function that never returns but that is not declared
   29724      '__attribute__((noreturn))', as in this example:
   29725 
   29726           void function_that_never_returns (void);
   29727 
   29728           int g (int c)
   29729           {
   29730             if (c)
   29731               {
   29732                 return 1;
   29733               }
   29734             else
   29735               {
   29736                 function_that_never_returns ();
   29737                 __builtin_unreachable ();
   29738               }
   29739           }
   29740 
   29741  -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
   29742           size_t ALIGN, ...)
   29743      This function returns its first argument, and allows the compiler
   29744      to assume that the returned pointer is at least ALIGN bytes
   29745      aligned.  This built-in can have either two or three arguments, if
   29746      it has three, the third argument should have integer type, and if
   29747      it is nonzero means misalignment offset.  For example:
   29748 
   29749           void *x = __builtin_assume_aligned (arg, 16);
   29750 
   29751      means that the compiler can assume 'x', set to 'arg', is at least
   29752      16-byte aligned, while:
   29753 
   29754           void *x = __builtin_assume_aligned (arg, 32, 8);
   29755 
   29756      means that the compiler can assume for 'x', set to 'arg', that
   29757      '(char *) x - 8' is 32-byte aligned.
   29758 
   29759  -- Built-in Function: int __builtin_LINE ()
   29760      This function is the equivalent to the preprocessor '__LINE__'
   29761      macro and returns the line number of the invocation of the
   29762      built-in.
   29763 
   29764  -- Built-in Function: int __builtin_FUNCTION ()
   29765      This function is the equivalent to the preprocessor '__FUNCTION__'
   29766      macro and returns the function name the invocation of the built-in
   29767      is in.
   29768 
   29769  -- Built-in Function: int __builtin_FILE ()
   29770      This function is the equivalent to the preprocessor '__FILE__'
   29771      macro and returns the file name the invocation of the built-in is
   29772      in.
   29773 
   29774  -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
   29775           *END)
   29776      This function is used to flush the processor's instruction cache
   29777      for the region of memory between BEGIN inclusive and END exclusive.
   29778      Some targets require that the instruction cache be flushed, after
   29779      modifying memory containing code, in order to obtain deterministic
   29780      behavior.
   29781 
   29782      If the target does not require instruction cache flushes,
   29783      '__builtin___clear_cache' has no effect.  Otherwise either
   29784      instructions are emitted in-line to clear the instruction cache or
   29785      a call to the '__clear_cache' function in libgcc is made.
   29786 
   29787  -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
   29788      This function is used to minimize cache-miss latency by moving data
   29789      into a cache before it is accessed.  You can insert calls to
   29790      '__builtin_prefetch' into code for which you know addresses of data
   29791      in memory that is likely to be accessed soon.  If the target
   29792      supports them, data prefetch instructions are generated.  If the
   29793      prefetch is done early enough before the access then the data will
   29794      be in the cache by the time it is accessed.
   29795 
   29796      The value of ADDR is the address of the memory to prefetch.  There
   29797      are two optional arguments, RW and LOCALITY.  The value of RW is a
   29798      compile-time constant one or zero; one means that the prefetch is
   29799      preparing for a write to the memory address and zero, the default,
   29800      means that the prefetch is preparing for a read.  The value
   29801      LOCALITY must be a compile-time constant integer between zero and
   29802      three.  A value of zero means that the data has no temporal
   29803      locality, so it need not be left in the cache after the access.  A
   29804      value of three means that the data has a high degree of temporal
   29805      locality and should be left in all levels of cache possible.
   29806      Values of one and two mean, respectively, a low or moderate degree
   29807      of temporal locality.  The default is three.
   29808 
   29809           for (i = 0; i < n; i++)
   29810             {
   29811               a[i] = a[i] + b[i];
   29812               __builtin_prefetch (&a[i+j], 1, 1);
   29813               __builtin_prefetch (&b[i+j], 0, 1);
   29814               /* ... */
   29815             }
   29816 
   29817      Data prefetch does not generate faults if ADDR is invalid, but the
   29818      address expression itself must be valid.  For example, a prefetch
   29819      of 'p->next' does not fault if 'p->next' is not a valid address,
   29820      but evaluation faults if 'p' is not a valid address.
   29821 
   29822      If the target does not support data prefetch, the address
   29823      expression is evaluated if it includes side effects but no other
   29824      code is generated and GCC does not issue a warning.
   29825 
   29826  -- Built-in Function: double __builtin_huge_val (void)
   29827      Returns a positive infinity, if supported by the floating-point
   29828      format, else 'DBL_MAX'.  This function is suitable for implementing
   29829      the ISO C macro 'HUGE_VAL'.
   29830 
   29831  -- Built-in Function: float __builtin_huge_valf (void)
   29832      Similar to '__builtin_huge_val', except the return type is 'float'.
   29833 
   29834  -- Built-in Function: long double __builtin_huge_vall (void)
   29835      Similar to '__builtin_huge_val', except the return type is 'long
   29836      double'.
   29837 
   29838  -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
   29839           int, ...)
   29840      This built-in implements the C99 fpclassify functionality.  The
   29841      first five int arguments should be the target library's notion of
   29842      the possible FP classes and are used for return values.  They must
   29843      be constant values and they must appear in this order: 'FP_NAN',
   29844      'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
   29845      ellipsis is for exactly one floating-point value to classify.  GCC
   29846      treats the last argument as type-generic, which means it does not
   29847      do default promotion from float to double.
   29848 
   29849  -- Built-in Function: double __builtin_inf (void)
   29850      Similar to '__builtin_huge_val', except a warning is generated if
   29851      the target floating-point format does not support infinities.
   29852 
   29853  -- Built-in Function: _Decimal32 __builtin_infd32 (void)
   29854      Similar to '__builtin_inf', except the return type is '_Decimal32'.
   29855 
   29856  -- Built-in Function: _Decimal64 __builtin_infd64 (void)
   29857      Similar to '__builtin_inf', except the return type is '_Decimal64'.
   29858 
   29859  -- Built-in Function: _Decimal128 __builtin_infd128 (void)
   29860      Similar to '__builtin_inf', except the return type is
   29861      '_Decimal128'.
   29862 
   29863  -- Built-in Function: float __builtin_inff (void)
   29864      Similar to '__builtin_inf', except the return type is 'float'.
   29865      This function is suitable for implementing the ISO C99 macro
   29866      'INFINITY'.
   29867 
   29868  -- Built-in Function: long double __builtin_infl (void)
   29869      Similar to '__builtin_inf', except the return type is 'long
   29870      double'.
   29871 
   29872  -- Built-in Function: int __builtin_isinf_sign (...)
   29873      Similar to 'isinf', except the return value is negative for an
   29874      argument of '-Inf'.  Note while the parameter list is an ellipsis,
   29875      this function only accepts exactly one floating-point argument.
   29876      GCC treats this parameter as type-generic, which means it does not
   29877      do default promotion from float to double.
   29878 
   29879  -- Built-in Function: double __builtin_nan (const char *str)
   29880      This is an implementation of the ISO C99 function 'nan'.
   29881 
   29882      Since ISO C99 defines this function in terms of 'strtod', which we
   29883      do not implement, a description of the parsing is in order.  The
   29884      string is parsed as by 'strtol'; that is, the base is recognized by
   29885      leading '0' or '0x' prefixes.  The number parsed is placed in the
   29886      significand such that the least significant bit of the number is at
   29887      the least significant bit of the significand.  The number is
   29888      truncated to fit the significand field provided.  The significand
   29889      is forced to be a quiet NaN.
   29890 
   29891      This function, if given a string literal all of which would have
   29892      been consumed by 'strtol', is evaluated early enough that it is
   29893      considered a compile-time constant.
   29894 
   29895  -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
   29896      Similar to '__builtin_nan', except the return type is '_Decimal32'.
   29897 
   29898  -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
   29899      Similar to '__builtin_nan', except the return type is '_Decimal64'.
   29900 
   29901  -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
   29902      Similar to '__builtin_nan', except the return type is
   29903      '_Decimal128'.
   29904 
   29905  -- Built-in Function: float __builtin_nanf (const char *str)
   29906      Similar to '__builtin_nan', except the return type is 'float'.
   29907 
   29908  -- Built-in Function: long double __builtin_nanl (const char *str)
   29909      Similar to '__builtin_nan', except the return type is 'long
   29910      double'.
   29911 
   29912  -- Built-in Function: double __builtin_nans (const char *str)
   29913      Similar to '__builtin_nan', except the significand is forced to be
   29914      a signaling NaN.  The 'nans' function is proposed by WG14 N965.
   29915 
   29916  -- Built-in Function: float __builtin_nansf (const char *str)
   29917      Similar to '__builtin_nans', except the return type is 'float'.
   29918 
   29919  -- Built-in Function: long double __builtin_nansl (const char *str)
   29920      Similar to '__builtin_nans', except the return type is 'long
   29921      double'.
   29922 
   29923  -- Built-in Function: int __builtin_ffs (unsigned int x)
   29924      Returns one plus the index of the least significant 1-bit of X, or
   29925      if X is zero, returns zero.
   29926 
   29927  -- Built-in Function: int __builtin_clz (unsigned int x)
   29928      Returns the number of leading 0-bits in X, starting at the most
   29929      significant bit position.  If X is 0, the result is undefined.
   29930 
   29931  -- Built-in Function: int __builtin_ctz (unsigned int x)
   29932      Returns the number of trailing 0-bits in X, starting at the least
   29933      significant bit position.  If X is 0, the result is undefined.
   29934 
   29935  -- Built-in Function: int __builtin_clrsb (int x)
   29936      Returns the number of leading redundant sign bits in X, i.e. the
   29937      number of bits following the most significant bit that are
   29938      identical to it.  There are no special cases for 0 or other values.
   29939 
   29940  -- Built-in Function: int __builtin_popcount (unsigned int x)
   29941      Returns the number of 1-bits in X.
   29942 
   29943  -- Built-in Function: int __builtin_parity (unsigned int x)
   29944      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
   29945 
   29946  -- Built-in Function: int __builtin_ffsl (unsigned long)
   29947      Similar to '__builtin_ffs', except the argument type is 'unsigned
   29948      long'.
   29949 
   29950  -- Built-in Function: int __builtin_clzl (unsigned long)
   29951      Similar to '__builtin_clz', except the argument type is 'unsigned
   29952      long'.
   29953 
   29954  -- Built-in Function: int __builtin_ctzl (unsigned long)
   29955      Similar to '__builtin_ctz', except the argument type is 'unsigned
   29956      long'.
   29957 
   29958  -- Built-in Function: int __builtin_clrsbl (long)
   29959      Similar to '__builtin_clrsb', except the argument type is 'long'.
   29960 
   29961  -- Built-in Function: int __builtin_popcountl (unsigned long)
   29962      Similar to '__builtin_popcount', except the argument type is
   29963      'unsigned long'.
   29964 
   29965  -- Built-in Function: int __builtin_parityl (unsigned long)
   29966      Similar to '__builtin_parity', except the argument type is
   29967      'unsigned long'.
   29968 
   29969  -- Built-in Function: int __builtin_ffsll (unsigned long long)
   29970      Similar to '__builtin_ffs', except the argument type is 'unsigned
   29971      long long'.
   29972 
   29973  -- Built-in Function: int __builtin_clzll (unsigned long long)
   29974      Similar to '__builtin_clz', except the argument type is 'unsigned
   29975      long long'.
   29976 
   29977  -- Built-in Function: int __builtin_ctzll (unsigned long long)
   29978      Similar to '__builtin_ctz', except the argument type is 'unsigned
   29979      long long'.
   29980 
   29981  -- Built-in Function: int __builtin_clrsbll (long long)
   29982      Similar to '__builtin_clrsb', except the argument type is 'long
   29983      long'.
   29984 
   29985  -- Built-in Function: int __builtin_popcountll (unsigned long long)
   29986      Similar to '__builtin_popcount', except the argument type is
   29987      'unsigned long long'.
   29988 
   29989  -- Built-in Function: int __builtin_parityll (unsigned long long)
   29990      Similar to '__builtin_parity', except the argument type is
   29991      'unsigned long long'.
   29992 
   29993  -- Built-in Function: double __builtin_powi (double, int)
   29994      Returns the first argument raised to the power of the second.
   29995      Unlike the 'pow' function no guarantees about precision and
   29996      rounding are made.
   29997 
   29998  -- Built-in Function: float __builtin_powif (float, int)
   29999      Similar to '__builtin_powi', except the argument and return types
   30000      are 'float'.
   30001 
   30002  -- Built-in Function: long double __builtin_powil (long double, int)
   30003      Similar to '__builtin_powi', except the argument and return types
   30004      are 'long double'.
   30005 
   30006  -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
   30007      Returns X with the order of the bytes reversed; for example,
   30008      '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.
   30009 
   30010  -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
   30011      Similar to '__builtin_bswap16', except the argument and return
   30012      types are 32 bit.
   30013 
   30014  -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
   30015      Similar to '__builtin_bswap32', except the argument and return
   30016      types are 64 bit.
   30017 
   30018 
   30019 File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
   30020 
   30021 6.56 Built-in Functions Specific to Particular Target Machines
   30022 ==============================================================
   30023 
   30024 On some target machines, GCC supports many built-in functions specific
   30025 to those machines.  Generally these generate calls to specific machine
   30026 instructions, but allow the compiler to schedule those calls.
   30027 
   30028 * Menu:
   30029 
   30030 * Alpha Built-in Functions::
   30031 * ARM iWMMXt Built-in Functions::
   30032 * ARM NEON Intrinsics::
   30033 * AVR Built-in Functions::
   30034 * Blackfin Built-in Functions::
   30035 * FR-V Built-in Functions::
   30036 * X86 Built-in Functions::
   30037 * X86 transactional memory intrinsics::
   30038 * MIPS DSP Built-in Functions::
   30039 * MIPS Paired-Single Support::
   30040 * MIPS Loongson Built-in Functions::
   30041 * Other MIPS Built-in Functions::
   30042 * picoChip Built-in Functions::
   30043 * PowerPC Built-in Functions::
   30044 * PowerPC AltiVec/VSX Built-in Functions::
   30045 * PowerPC Hardware Transactional Memory Built-in Functions::
   30046 * RX Built-in Functions::
   30047 * S/390 System z Built-in Functions::
   30048 * SH Built-in Functions::
   30049 * SPARC VIS Built-in Functions::
   30050 * SPU Built-in Functions::
   30051 * TI C6X Built-in Functions::
   30052 * TILE-Gx Built-in Functions::
   30053 * TILEPro Built-in Functions::
   30054 
   30055 
   30056 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   30057 
   30058 6.56.1 Alpha Built-in Functions
   30059 -------------------------------
   30060 
   30061 These built-in functions are available for the Alpha family of
   30062 processors, depending on the command-line switches used.
   30063 
   30064  The following built-in functions are always available.  They all
   30065 generate the machine instruction that is part of the name.
   30066 
   30067      long __builtin_alpha_implver (void)
   30068      long __builtin_alpha_rpcc (void)
   30069      long __builtin_alpha_amask (long)
   30070      long __builtin_alpha_cmpbge (long, long)
   30071      long __builtin_alpha_extbl (long, long)
   30072      long __builtin_alpha_extwl (long, long)
   30073      long __builtin_alpha_extll (long, long)
   30074      long __builtin_alpha_extql (long, long)
   30075      long __builtin_alpha_extwh (long, long)
   30076      long __builtin_alpha_extlh (long, long)
   30077      long __builtin_alpha_extqh (long, long)
   30078      long __builtin_alpha_insbl (long, long)
   30079      long __builtin_alpha_inswl (long, long)
   30080      long __builtin_alpha_insll (long, long)
   30081      long __builtin_alpha_insql (long, long)
   30082      long __builtin_alpha_inswh (long, long)
   30083      long __builtin_alpha_inslh (long, long)
   30084      long __builtin_alpha_insqh (long, long)
   30085      long __builtin_alpha_mskbl (long, long)
   30086      long __builtin_alpha_mskwl (long, long)
   30087      long __builtin_alpha_mskll (long, long)
   30088      long __builtin_alpha_mskql (long, long)
   30089      long __builtin_alpha_mskwh (long, long)
   30090      long __builtin_alpha_msklh (long, long)
   30091      long __builtin_alpha_mskqh (long, long)
   30092      long __builtin_alpha_umulh (long, long)
   30093      long __builtin_alpha_zap (long, long)
   30094      long __builtin_alpha_zapnot (long, long)
   30095 
   30096  The following built-in functions are always with '-mmax' or '-mcpu=CPU'
   30097 where CPU is 'pca56' or later.  They all generate the machine
   30098 instruction that is part of the name.
   30099 
   30100      long __builtin_alpha_pklb (long)
   30101      long __builtin_alpha_pkwb (long)
   30102      long __builtin_alpha_unpkbl (long)
   30103      long __builtin_alpha_unpkbw (long)
   30104      long __builtin_alpha_minub8 (long, long)
   30105      long __builtin_alpha_minsb8 (long, long)
   30106      long __builtin_alpha_minuw4 (long, long)
   30107      long __builtin_alpha_minsw4 (long, long)
   30108      long __builtin_alpha_maxub8 (long, long)
   30109      long __builtin_alpha_maxsb8 (long, long)
   30110      long __builtin_alpha_maxuw4 (long, long)
   30111      long __builtin_alpha_maxsw4 (long, long)
   30112      long __builtin_alpha_perr (long, long)
   30113 
   30114  The following built-in functions are always with '-mcix' or '-mcpu=CPU'
   30115 where CPU is 'ev67' or later.  They all generate the machine instruction
   30116 that is part of the name.
   30117 
   30118      long __builtin_alpha_cttz (long)
   30119      long __builtin_alpha_ctlz (long)
   30120      long __builtin_alpha_ctpop (long)
   30121 
   30122  The following built-in functions are available on systems that use the
   30123 OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
   30124 calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
   30125 'wrval'.
   30126 
   30127      void *__builtin_thread_pointer (void)
   30128      void __builtin_set_thread_pointer (void *)
   30129 
   30130 
   30131 File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
   30132 
   30133 6.56.2 ARM iWMMXt Built-in Functions
   30134 ------------------------------------
   30135 
   30136 These built-in functions are available for the ARM family of processors
   30137 when the '-mcpu=iwmmxt' switch is used:
   30138 
   30139      typedef int v2si __attribute__ ((vector_size (8)));
   30140      typedef short v4hi __attribute__ ((vector_size (8)));
   30141      typedef char v8qi __attribute__ ((vector_size (8)));
   30142 
   30143      int __builtin_arm_getwcgr0 (void)
   30144      void __builtin_arm_setwcgr0 (int)
   30145      int __builtin_arm_getwcgr1 (void)
   30146      void __builtin_arm_setwcgr1 (int)
   30147      int __builtin_arm_getwcgr2 (void)
   30148      void __builtin_arm_setwcgr2 (int)
   30149      int __builtin_arm_getwcgr3 (void)
   30150      void __builtin_arm_setwcgr3 (int)
   30151      int __builtin_arm_textrmsb (v8qi, int)
   30152      int __builtin_arm_textrmsh (v4hi, int)
   30153      int __builtin_arm_textrmsw (v2si, int)
   30154      int __builtin_arm_textrmub (v8qi, int)
   30155      int __builtin_arm_textrmuh (v4hi, int)
   30156      int __builtin_arm_textrmuw (v2si, int)
   30157      v8qi __builtin_arm_tinsrb (v8qi, int, int)
   30158      v4hi __builtin_arm_tinsrh (v4hi, int, int)
   30159      v2si __builtin_arm_tinsrw (v2si, int, int)
   30160      long long __builtin_arm_tmia (long long, int, int)
   30161      long long __builtin_arm_tmiabb (long long, int, int)
   30162      long long __builtin_arm_tmiabt (long long, int, int)
   30163      long long __builtin_arm_tmiaph (long long, int, int)
   30164      long long __builtin_arm_tmiatb (long long, int, int)
   30165      long long __builtin_arm_tmiatt (long long, int, int)
   30166      int __builtin_arm_tmovmskb (v8qi)
   30167      int __builtin_arm_tmovmskh (v4hi)
   30168      int __builtin_arm_tmovmskw (v2si)
   30169      long long __builtin_arm_waccb (v8qi)
   30170      long long __builtin_arm_wacch (v4hi)
   30171      long long __builtin_arm_waccw (v2si)
   30172      v8qi __builtin_arm_waddb (v8qi, v8qi)
   30173      v8qi __builtin_arm_waddbss (v8qi, v8qi)
   30174      v8qi __builtin_arm_waddbus (v8qi, v8qi)
   30175      v4hi __builtin_arm_waddh (v4hi, v4hi)
   30176      v4hi __builtin_arm_waddhss (v4hi, v4hi)
   30177      v4hi __builtin_arm_waddhus (v4hi, v4hi)
   30178      v2si __builtin_arm_waddw (v2si, v2si)
   30179      v2si __builtin_arm_waddwss (v2si, v2si)
   30180      v2si __builtin_arm_waddwus (v2si, v2si)
   30181      v8qi __builtin_arm_walign (v8qi, v8qi, int)
   30182      long long __builtin_arm_wand(long long, long long)
   30183      long long __builtin_arm_wandn (long long, long long)
   30184      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
   30185      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
   30186      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
   30187      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
   30188      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
   30189      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
   30190      v2si __builtin_arm_wcmpeqw (v2si, v2si)
   30191      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
   30192      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
   30193      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
   30194      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
   30195      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
   30196      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
   30197      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
   30198      long long __builtin_arm_wmacsz (v4hi, v4hi)
   30199      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
   30200      long long __builtin_arm_wmacuz (v4hi, v4hi)
   30201      v4hi __builtin_arm_wmadds (v4hi, v4hi)
   30202      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
   30203      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
   30204      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
   30205      v2si __builtin_arm_wmaxsw (v2si, v2si)
   30206      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
   30207      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
   30208      v2si __builtin_arm_wmaxuw (v2si, v2si)
   30209      v8qi __builtin_arm_wminsb (v8qi, v8qi)
   30210      v4hi __builtin_arm_wminsh (v4hi, v4hi)
   30211      v2si __builtin_arm_wminsw (v2si, v2si)
   30212      v8qi __builtin_arm_wminub (v8qi, v8qi)
   30213      v4hi __builtin_arm_wminuh (v4hi, v4hi)
   30214      v2si __builtin_arm_wminuw (v2si, v2si)
   30215      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
   30216      v4hi __builtin_arm_wmulul (v4hi, v4hi)
   30217      v4hi __builtin_arm_wmulum (v4hi, v4hi)
   30218      long long __builtin_arm_wor (long long, long long)
   30219      v2si __builtin_arm_wpackdss (long long, long long)
   30220      v2si __builtin_arm_wpackdus (long long, long long)
   30221      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
   30222      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
   30223      v4hi __builtin_arm_wpackwss (v2si, v2si)
   30224      v4hi __builtin_arm_wpackwus (v2si, v2si)
   30225      long long __builtin_arm_wrord (long long, long long)
   30226      long long __builtin_arm_wrordi (long long, int)
   30227      v4hi __builtin_arm_wrorh (v4hi, long long)
   30228      v4hi __builtin_arm_wrorhi (v4hi, int)
   30229      v2si __builtin_arm_wrorw (v2si, long long)
   30230      v2si __builtin_arm_wrorwi (v2si, int)
   30231      v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
   30232      v2si __builtin_arm_wsadbz (v8qi, v8qi)
   30233      v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
   30234      v2si __builtin_arm_wsadhz (v4hi, v4hi)
   30235      v4hi __builtin_arm_wshufh (v4hi, int)
   30236      long long __builtin_arm_wslld (long long, long long)
   30237      long long __builtin_arm_wslldi (long long, int)
   30238      v4hi __builtin_arm_wsllh (v4hi, long long)
   30239      v4hi __builtin_arm_wsllhi (v4hi, int)
   30240      v2si __builtin_arm_wsllw (v2si, long long)
   30241      v2si __builtin_arm_wsllwi (v2si, int)
   30242      long long __builtin_arm_wsrad (long long, long long)
   30243      long long __builtin_arm_wsradi (long long, int)
   30244      v4hi __builtin_arm_wsrah (v4hi, long long)
   30245      v4hi __builtin_arm_wsrahi (v4hi, int)
   30246      v2si __builtin_arm_wsraw (v2si, long long)
   30247      v2si __builtin_arm_wsrawi (v2si, int)
   30248      long long __builtin_arm_wsrld (long long, long long)
   30249      long long __builtin_arm_wsrldi (long long, int)
   30250      v4hi __builtin_arm_wsrlh (v4hi, long long)
   30251      v4hi __builtin_arm_wsrlhi (v4hi, int)
   30252      v2si __builtin_arm_wsrlw (v2si, long long)
   30253      v2si __builtin_arm_wsrlwi (v2si, int)
   30254      v8qi __builtin_arm_wsubb (v8qi, v8qi)
   30255      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
   30256      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
   30257      v4hi __builtin_arm_wsubh (v4hi, v4hi)
   30258      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
   30259      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
   30260      v2si __builtin_arm_wsubw (v2si, v2si)
   30261      v2si __builtin_arm_wsubwss (v2si, v2si)
   30262      v2si __builtin_arm_wsubwus (v2si, v2si)
   30263      v4hi __builtin_arm_wunpckehsb (v8qi)
   30264      v2si __builtin_arm_wunpckehsh (v4hi)
   30265      long long __builtin_arm_wunpckehsw (v2si)
   30266      v4hi __builtin_arm_wunpckehub (v8qi)
   30267      v2si __builtin_arm_wunpckehuh (v4hi)
   30268      long long __builtin_arm_wunpckehuw (v2si)
   30269      v4hi __builtin_arm_wunpckelsb (v8qi)
   30270      v2si __builtin_arm_wunpckelsh (v4hi)
   30271      long long __builtin_arm_wunpckelsw (v2si)
   30272      v4hi __builtin_arm_wunpckelub (v8qi)
   30273      v2si __builtin_arm_wunpckeluh (v4hi)
   30274      long long __builtin_arm_wunpckeluw (v2si)
   30275      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
   30276      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
   30277      v2si __builtin_arm_wunpckihw (v2si, v2si)
   30278      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
   30279      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
   30280      v2si __builtin_arm_wunpckilw (v2si, v2si)
   30281      long long __builtin_arm_wxor (long long, long long)
   30282      long long __builtin_arm_wzero ()
   30283 
   30284 
   30285 File: gcc.info,  Node: ARM NEON Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   30286 
   30287 6.56.3 ARM NEON Intrinsics
   30288 --------------------------
   30289 
   30290 These built-in intrinsics for the ARM Advanced SIMD extension are
   30291 available when the '-mfpu=neon' switch is used:
   30292 
   30293 6.56.3.1 Addition
   30294 .................
   30295 
   30296    * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
   30297      _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'
   30298 
   30299    * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
   30300      _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'
   30301 
   30302    * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
   30303      _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'
   30304 
   30305    * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
   30306      _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'
   30307 
   30308    * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
   30309      _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'
   30310 
   30311    * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
   30312      _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'
   30313 
   30314    * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
   30315      _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0'
   30316 
   30317    * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
   30318 
   30319    * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
   30320 
   30321    * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
   30322      _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'
   30323 
   30324    * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
   30325      _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'
   30326 
   30327    * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
   30328      _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'
   30329 
   30330    * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
   30331      _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'
   30332 
   30333    * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
   30334      _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'
   30335 
   30336    * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
   30337      _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'
   30338 
   30339    * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
   30340      _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'
   30341 
   30342    * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
   30343      _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'
   30344 
   30345    * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
   30346      _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0'
   30347 
   30348    * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
   30349      _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0'
   30350 
   30351    * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
   30352      _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0'
   30353 
   30354    * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
   30355      _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0'
   30356 
   30357    * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
   30358      _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0'
   30359 
   30360    * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
   30361      _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0'
   30362 
   30363    * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
   30364      _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0'
   30365 
   30366    * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
   30367      _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0'
   30368 
   30369    * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
   30370      _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0'
   30371 
   30372    * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
   30373      _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0'
   30374 
   30375    * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
   30376      _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0'
   30377 
   30378    * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
   30379      _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0'
   30380 
   30381    * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
   30382      _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0'
   30383 
   30384    * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
   30385      _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0'
   30386 
   30387    * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
   30388      _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0'
   30389 
   30390    * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
   30391      _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0'
   30392 
   30393    * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
   30394      _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0'
   30395 
   30396    * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
   30397      _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0'
   30398 
   30399    * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
   30400      _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0'
   30401 
   30402    * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
   30403      _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0'
   30404 
   30405    * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
   30406      _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0'
   30407 
   30408    * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
   30409      _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0'
   30410 
   30411    * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
   30412      _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0'
   30413 
   30414    * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
   30415      _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0'
   30416 
   30417    * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
   30418      _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0'
   30419 
   30420    * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
   30421      _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0'
   30422 
   30423    * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
   30424      _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0'
   30425 
   30426    * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
   30427      _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0'
   30428 
   30429    * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
   30430      _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0'
   30431 
   30432    * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
   30433      _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0'
   30434 
   30435    * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
   30436      _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0'
   30437 
   30438    * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
   30439      _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0'
   30440 
   30441    * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
   30442      _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0'
   30443 
   30444    * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
   30445      _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0'
   30446 
   30447    * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
   30448      _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0'
   30449 
   30450    * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
   30451      _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0'
   30452 
   30453    * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
   30454      _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0'
   30455 
   30456    * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
   30457      _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0'
   30458 
   30459    * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
   30460      _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0'
   30461 
   30462    * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
   30463      _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0'
   30464 
   30465    * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
   30466      _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0'
   30467 
   30468    * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
   30469      _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0'
   30470 
   30471    * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
   30472      _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0'
   30473 
   30474    * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
   30475      _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0'
   30476 
   30477    * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
   30478      _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0'
   30479 
   30480    * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
   30481      _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0'
   30482 
   30483    * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
   30484      _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0'
   30485 
   30486    * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
   30487      _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0'
   30488 
   30489    * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
   30490      _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0'
   30491 
   30492    * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
   30493      _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0'
   30494 
   30495    * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
   30496      _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0'
   30497 
   30498    * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
   30499      _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0'
   30500 
   30501    * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
   30502      _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0'
   30503 
   30504    * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
   30505      _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'
   30506 
   30507    * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
   30508      _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'
   30509 
   30510    * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
   30511      _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'
   30512 
   30513    * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
   30514      _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'
   30515 
   30516    * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
   30517      _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'
   30518 
   30519    * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
   30520      _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'
   30521 
   30522    * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
   30523      _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'
   30524 
   30525    * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
   30526      _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'
   30527 
   30528    * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
   30529      _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'
   30530 
   30531    * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
   30532      _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'
   30533 
   30534    * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
   30535      _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'
   30536 
   30537    * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
   30538      _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'
   30539 
   30540 6.56.3.2 Multiplication
   30541 .......................
   30542 
   30543    * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
   30544      _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'
   30545 
   30546    * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
   30547      _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'
   30548 
   30549    * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
   30550      _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'
   30551 
   30552    * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
   30553      _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'
   30554 
   30555    * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
   30556      _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'
   30557 
   30558    * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
   30559      _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'
   30560 
   30561    * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
   30562      _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0'
   30563 
   30564    * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
   30565      _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0'
   30566 
   30567    * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
   30568      _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'
   30569 
   30570    * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
   30571      _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'
   30572 
   30573    * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
   30574      _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'
   30575 
   30576    * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
   30577      _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'
   30578 
   30579    * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
   30580      _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'
   30581 
   30582    * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
   30583      _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'
   30584 
   30585    * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
   30586      _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0'
   30587 
   30588    * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
   30589      _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0'
   30590 
   30591    * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
   30592      _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0'
   30593 
   30594    * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
   30595      _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0'
   30596 
   30597    * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
   30598      _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0'
   30599 
   30600    * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
   30601      _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0'
   30602 
   30603    * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
   30604      _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0'
   30605 
   30606    * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
   30607      _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0'
   30608 
   30609    * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
   30610      _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0'
   30611 
   30612    * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
   30613      _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0'
   30614 
   30615    * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
   30616      _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0'
   30617 
   30618    * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
   30619      _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0'
   30620 
   30621    * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
   30622      _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0'
   30623 
   30624    * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
   30625      _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0'
   30626 
   30627    * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
   30628      _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0'
   30629 
   30630    * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
   30631      _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0'
   30632 
   30633    * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
   30634      _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0'
   30635 
   30636    * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
   30637      _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0'
   30638 
   30639    * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
   30640      _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0'
   30641 
   30642 6.56.3.3 Multiply-accumulate
   30643 ............................
   30644 
   30645    * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   30646      _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'
   30647 
   30648    * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   30649      _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'
   30650 
   30651    * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   30652      _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'
   30653 
   30654    * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
   30655      _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'
   30656 
   30657    * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
   30658      _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'
   30659 
   30660    * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
   30661      _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'
   30662 
   30663    * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
   30664      _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0'
   30665 
   30666    * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   30667      _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'
   30668 
   30669    * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   30670      _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'
   30671 
   30672    * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   30673      _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'
   30674 
   30675    * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   30676      _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'
   30677 
   30678    * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   30679      _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'
   30680 
   30681    * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   30682      _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'
   30683 
   30684    * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
   30685      _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0'
   30686 
   30687    * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   30688      _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0'
   30689 
   30690    * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   30691      _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0'
   30692 
   30693    * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   30694      _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0'
   30695 
   30696    * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   30697      _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0'
   30698 
   30699    * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   30700      _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0'
   30701 
   30702    * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
   30703      _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0'
   30704 
   30705    * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   30706      _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0'
   30707 
   30708    * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   30709      _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0'
   30710 
   30711 6.56.3.4 Multiply-subtract
   30712 ..........................
   30713 
   30714    * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   30715      _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'
   30716 
   30717    * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   30718      _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'
   30719 
   30720    * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   30721      _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'
   30722 
   30723    * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
   30724      _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'
   30725 
   30726    * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
   30727      _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'
   30728 
   30729    * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
   30730      _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'
   30731 
   30732    * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
   30733      _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0'
   30734 
   30735    * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   30736      _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'
   30737 
   30738    * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   30739      _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'
   30740 
   30741    * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   30742      _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'
   30743 
   30744    * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
   30745      _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'
   30746 
   30747    * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
   30748      _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'
   30749 
   30750    * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
   30751      _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'
   30752 
   30753    * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
   30754      _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0'
   30755 
   30756    * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   30757      _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0'
   30758 
   30759    * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   30760      _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0'
   30761 
   30762    * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   30763      _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0'
   30764 
   30765    * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   30766      _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0'
   30767 
   30768    * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   30769      _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0'
   30770 
   30771    * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
   30772      _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0'
   30773 
   30774    * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   30775      _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0'
   30776 
   30777    * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   30778      _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0'
   30779 
   30780 6.56.3.5 Fused-multiply-accumulate
   30781 ..................................
   30782 
   30783    * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t)
   30784      _Form of expected instruction(s):_ 'vfma.f32 D0, D0, D0'
   30785 
   30786    * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t)
   30787      _Form of expected instruction(s):_ 'vfma.f32 Q0, Q0, Q0'
   30788 
   30789 6.56.3.6 Fused-multiply-subtract
   30790 ................................
   30791 
   30792    * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t)
   30793      _Form of expected instruction(s):_ 'vfms.f32 D0, D0, D0'
   30794 
   30795    * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t)
   30796      _Form of expected instruction(s):_ 'vfms.f32 Q0, Q0, Q0'
   30797 
   30798 6.56.3.7 Round to integral (to nearest, ties to even)
   30799 .....................................................
   30800 
   30801    * float32x2_t vrndn_f32 (float32x2_t)
   30802      _Form of expected instruction(s):_ 'vrintn.f32 D0, D0'
   30803 
   30804    * float32x4_t vrndqn_f32 (float32x4_t)
   30805      _Form of expected instruction(s):_ 'vrintn.f32 Q0, Q0'
   30806 
   30807 6.56.3.8 Round to integral (to nearest, ties away from zero)
   30808 ............................................................
   30809 
   30810    * float32x2_t vrnda_f32 (float32x2_t)
   30811      _Form of expected instruction(s):_ 'vrinta.f32 D0, D0'
   30812 
   30813    * float32x4_t vrndqa_f32 (float32x4_t)
   30814      _Form of expected instruction(s):_ 'vrinta.f32 Q0, Q0'
   30815 
   30816 6.56.3.9 Round to integral (towards +Inf)
   30817 .........................................
   30818 
   30819    * float32x2_t vrndp_f32 (float32x2_t)
   30820      _Form of expected instruction(s):_ 'vrintp.f32 D0, D0'
   30821 
   30822    * float32x4_t vrndqp_f32 (float32x4_t)
   30823      _Form of expected instruction(s):_ 'vrintp.f32 Q0, Q0'
   30824 
   30825 6.56.3.10 Round to integral (towards -Inf)
   30826 ..........................................
   30827 
   30828    * float32x2_t vrndm_f32 (float32x2_t)
   30829      _Form of expected instruction(s):_ 'vrintm.f32 D0, D0'
   30830 
   30831    * float32x4_t vrndqm_f32 (float32x4_t)
   30832      _Form of expected instruction(s):_ 'vrintm.f32 Q0, Q0'
   30833 
   30834 6.56.3.11 Round to integral (towards 0)
   30835 .......................................
   30836 
   30837    * float32x2_t vrnd_f32 (float32x2_t)
   30838      _Form of expected instruction(s):_ 'vrintz.f32 D0, D0'
   30839 
   30840    * float32x4_t vrndq_f32 (float32x4_t)
   30841      _Form of expected instruction(s):_ 'vrintz.f32 Q0, Q0'
   30842 
   30843 6.56.3.12 Subtraction
   30844 .....................
   30845 
   30846    * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
   30847      _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'
   30848 
   30849    * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
   30850      _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'
   30851 
   30852    * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
   30853      _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'
   30854 
   30855    * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
   30856      _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'
   30857 
   30858    * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
   30859      _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'
   30860 
   30861    * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
   30862      _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'
   30863 
   30864    * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
   30865      _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0'
   30866 
   30867    * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
   30868 
   30869    * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
   30870 
   30871    * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
   30872      _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'
   30873 
   30874    * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
   30875      _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'
   30876 
   30877    * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
   30878      _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'
   30879 
   30880    * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
   30881      _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'
   30882 
   30883    * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
   30884      _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'
   30885 
   30886    * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
   30887      _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'
   30888 
   30889    * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
   30890      _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'
   30891 
   30892    * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
   30893      _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'
   30894 
   30895    * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
   30896      _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0'
   30897 
   30898    * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
   30899      _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0'
   30900 
   30901    * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
   30902      _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0'
   30903 
   30904    * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
   30905      _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0'
   30906 
   30907    * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
   30908      _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0'
   30909 
   30910    * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
   30911      _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0'
   30912 
   30913    * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
   30914      _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0'
   30915 
   30916    * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
   30917      _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0'
   30918 
   30919    * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
   30920      _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0'
   30921 
   30922    * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
   30923      _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0'
   30924 
   30925    * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
   30926      _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0'
   30927 
   30928    * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
   30929      _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0'
   30930 
   30931    * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
   30932      _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0'
   30933 
   30934    * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
   30935      _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0'
   30936 
   30937    * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
   30938      _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0'
   30939 
   30940    * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
   30941      _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0'
   30942 
   30943    * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
   30944      _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0'
   30945 
   30946    * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
   30947      _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0'
   30948 
   30949    * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
   30950      _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0'
   30951 
   30952    * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
   30953      _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0'
   30954 
   30955    * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
   30956      _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0'
   30957 
   30958    * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
   30959      _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0'
   30960 
   30961    * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
   30962      _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0'
   30963 
   30964    * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
   30965      _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0'
   30966 
   30967    * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
   30968      _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0'
   30969 
   30970    * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
   30971      _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0'
   30972 
   30973    * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
   30974      _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0'
   30975 
   30976    * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
   30977      _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0'
   30978 
   30979    * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
   30980      _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0'
   30981 
   30982    * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
   30983      _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0'
   30984 
   30985    * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
   30986      _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0'
   30987 
   30988    * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
   30989      _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0'
   30990 
   30991    * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
   30992      _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0'
   30993 
   30994    * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
   30995      _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0'
   30996 
   30997    * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
   30998      _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0'
   30999 
   31000    * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
   31001      _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0'
   31002 
   31003    * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
   31004      _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0'
   31005 
   31006    * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
   31007      _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0'
   31008 
   31009    * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
   31010      _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0'
   31011 
   31012    * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
   31013      _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0'
   31014 
   31015    * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
   31016      _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0'
   31017 
   31018    * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
   31019      _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'
   31020 
   31021    * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
   31022      _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'
   31023 
   31024    * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
   31025      _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'
   31026 
   31027    * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
   31028      _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'
   31029 
   31030    * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
   31031      _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'
   31032 
   31033    * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
   31034      _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'
   31035 
   31036    * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
   31037      _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'
   31038 
   31039    * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
   31040      _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'
   31041 
   31042    * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
   31043      _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'
   31044 
   31045    * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
   31046      _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'
   31047 
   31048    * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
   31049      _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'
   31050 
   31051    * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
   31052      _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'
   31053 
   31054 6.56.3.13 Comparison (equal-to)
   31055 ...............................
   31056 
   31057    * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
   31058      _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'
   31059 
   31060    * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
   31061      _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'
   31062 
   31063    * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
   31064      _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
   31065 
   31066    * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
   31067      _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'
   31068 
   31069    * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
   31070      _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'
   31071 
   31072    * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
   31073      _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
   31074 
   31075    * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
   31076      _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0'
   31077 
   31078    * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
   31079      _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'
   31080 
   31081    * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
   31082      _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'
   31083 
   31084    * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
   31085      _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'
   31086 
   31087    * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
   31088      _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
   31089 
   31090    * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
   31091      _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'
   31092 
   31093    * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
   31094      _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'
   31095 
   31096    * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
   31097      _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
   31098 
   31099    * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
   31100      _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0'
   31101 
   31102    * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
   31103      _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'
   31104 
   31105 6.56.3.14 Comparison (greater-than-or-equal-to)
   31106 ...............................................
   31107 
   31108    * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
   31109      _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'
   31110 
   31111    * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
   31112      _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'
   31113 
   31114    * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
   31115      _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'
   31116 
   31117    * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
   31118      _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'
   31119 
   31120    * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
   31121      _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'
   31122 
   31123    * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
   31124      _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'
   31125 
   31126    * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
   31127      _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'
   31128 
   31129    * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
   31130      _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'
   31131 
   31132    * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
   31133      _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'
   31134 
   31135    * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
   31136      _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'
   31137 
   31138    * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
   31139      _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'
   31140 
   31141    * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
   31142      _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'
   31143 
   31144    * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
   31145      _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'
   31146 
   31147    * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
   31148      _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'
   31149 
   31150 6.56.3.15 Comparison (less-than-or-equal-to)
   31151 ............................................
   31152 
   31153    * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
   31154      _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'
   31155 
   31156    * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
   31157      _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'
   31158 
   31159    * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
   31160      _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'
   31161 
   31162    * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
   31163      _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'
   31164 
   31165    * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
   31166      _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'
   31167 
   31168    * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
   31169      _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'
   31170 
   31171    * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
   31172      _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'
   31173 
   31174    * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
   31175      _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'
   31176 
   31177    * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
   31178      _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'
   31179 
   31180    * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
   31181      _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'
   31182 
   31183    * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
   31184      _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'
   31185 
   31186    * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
   31187      _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'
   31188 
   31189    * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
   31190      _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'
   31191 
   31192    * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
   31193      _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'
   31194 
   31195 6.56.3.16 Comparison (greater-than)
   31196 ...................................
   31197 
   31198    * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
   31199      _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'
   31200 
   31201    * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
   31202      _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'
   31203 
   31204    * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
   31205      _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'
   31206 
   31207    * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
   31208      _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'
   31209 
   31210    * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
   31211      _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'
   31212 
   31213    * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
   31214      _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'
   31215 
   31216    * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
   31217      _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'
   31218 
   31219    * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
   31220      _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'
   31221 
   31222    * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
   31223      _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'
   31224 
   31225    * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
   31226      _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'
   31227 
   31228    * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
   31229      _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'
   31230 
   31231    * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
   31232      _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'
   31233 
   31234    * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
   31235      _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'
   31236 
   31237    * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
   31238      _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'
   31239 
   31240 6.56.3.17 Comparison (less-than)
   31241 ................................
   31242 
   31243    * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
   31244      _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'
   31245 
   31246    * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
   31247      _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'
   31248 
   31249    * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
   31250      _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'
   31251 
   31252    * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
   31253      _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'
   31254 
   31255    * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
   31256      _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'
   31257 
   31258    * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
   31259      _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'
   31260 
   31261    * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
   31262      _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'
   31263 
   31264    * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
   31265      _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'
   31266 
   31267    * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
   31268      _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'
   31269 
   31270    * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
   31271      _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'
   31272 
   31273    * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
   31274      _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'
   31275 
   31276    * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
   31277      _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'
   31278 
   31279    * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
   31280      _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'
   31281 
   31282    * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
   31283      _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'
   31284 
   31285 6.56.3.18 Comparison (absolute greater-than-or-equal-to)
   31286 ........................................................
   31287 
   31288    * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
   31289      _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'
   31290 
   31291    * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
   31292      _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'
   31293 
   31294 6.56.3.19 Comparison (absolute less-than-or-equal-to)
   31295 .....................................................
   31296 
   31297    * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
   31298      _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'
   31299 
   31300    * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
   31301      _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'
   31302 
   31303 6.56.3.20 Comparison (absolute greater-than)
   31304 ............................................
   31305 
   31306    * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
   31307      _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'
   31308 
   31309    * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
   31310      _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'
   31311 
   31312 6.56.3.21 Comparison (absolute less-than)
   31313 .........................................
   31314 
   31315    * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
   31316      _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'
   31317 
   31318    * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
   31319      _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'
   31320 
   31321 6.56.3.22 Test bits
   31322 ...................
   31323 
   31324    * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
   31325      _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'
   31326 
   31327    * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
   31328      _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'
   31329 
   31330    * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
   31331      _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
   31332 
   31333    * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
   31334      _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'
   31335 
   31336    * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
   31337      _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'
   31338 
   31339    * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
   31340      _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
   31341 
   31342    * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
   31343      _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'
   31344 
   31345    * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
   31346      _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'
   31347 
   31348    * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
   31349      _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'
   31350 
   31351    * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
   31352      _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
   31353 
   31354    * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
   31355      _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'
   31356 
   31357    * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
   31358      _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'
   31359 
   31360    * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
   31361      _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
   31362 
   31363    * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
   31364      _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'
   31365 
   31366 6.56.3.23 Absolute difference
   31367 .............................
   31368 
   31369    * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
   31370      _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0'
   31371 
   31372    * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
   31373      _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0'
   31374 
   31375    * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
   31376      _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0'
   31377 
   31378    * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
   31379      _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0'
   31380 
   31381    * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
   31382      _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0'
   31383 
   31384    * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
   31385      _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0'
   31386 
   31387    * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
   31388      _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0'
   31389 
   31390    * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
   31391      _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0'
   31392 
   31393    * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
   31394      _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0'
   31395 
   31396    * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
   31397      _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0'
   31398 
   31399    * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
   31400      _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0'
   31401 
   31402    * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
   31403      _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0'
   31404 
   31405    * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
   31406      _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0'
   31407 
   31408    * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
   31409      _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0'
   31410 
   31411    * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
   31412      _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0'
   31413 
   31414    * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
   31415      _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0'
   31416 
   31417    * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
   31418      _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0'
   31419 
   31420    * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
   31421      _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0'
   31422 
   31423    * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
   31424      _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0'
   31425 
   31426    * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
   31427      _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0'
   31428 
   31429 6.56.3.24 Absolute difference and accumulate
   31430 ............................................
   31431 
   31432    * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   31433      _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0'
   31434 
   31435    * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   31436      _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0'
   31437 
   31438    * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   31439      _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0'
   31440 
   31441    * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
   31442      _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0'
   31443 
   31444    * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
   31445      _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0'
   31446 
   31447    * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
   31448      _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0'
   31449 
   31450    * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   31451      _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0'
   31452 
   31453    * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   31454      _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0'
   31455 
   31456    * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   31457      _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0'
   31458 
   31459    * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   31460      _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0'
   31461 
   31462    * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   31463      _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0'
   31464 
   31465    * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   31466      _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0'
   31467 
   31468    * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   31469      _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0'
   31470 
   31471    * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   31472      _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0'
   31473 
   31474    * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   31475      _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0'
   31476 
   31477    * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
   31478      _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0'
   31479 
   31480    * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
   31481      _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0'
   31482 
   31483    * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
   31484      _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0'
   31485 
   31486 6.56.3.25 Maximum
   31487 .................
   31488 
   31489    * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
   31490      _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0'
   31491 
   31492    * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
   31493      _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0'
   31494 
   31495    * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
   31496      _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0'
   31497 
   31498    * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
   31499      _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0'
   31500 
   31501    * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
   31502      _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0'
   31503 
   31504    * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
   31505      _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0'
   31506 
   31507    * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
   31508      _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0'
   31509 
   31510    * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
   31511      _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0'
   31512 
   31513    * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
   31514      _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0'
   31515 
   31516    * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
   31517      _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0'
   31518 
   31519    * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
   31520      _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0'
   31521 
   31522    * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
   31523      _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0'
   31524 
   31525    * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
   31526      _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0'
   31527 
   31528    * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
   31529      _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0'
   31530 
   31531 6.56.3.26 Minimum
   31532 .................
   31533 
   31534    * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
   31535      _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0'
   31536 
   31537    * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
   31538      _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0'
   31539 
   31540    * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
   31541      _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0'
   31542 
   31543    * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
   31544      _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0'
   31545 
   31546    * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
   31547      _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0'
   31548 
   31549    * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
   31550      _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0'
   31551 
   31552    * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
   31553      _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0'
   31554 
   31555    * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
   31556      _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0'
   31557 
   31558    * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
   31559      _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0'
   31560 
   31561    * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
   31562      _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0'
   31563 
   31564    * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
   31565      _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0'
   31566 
   31567    * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
   31568      _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0'
   31569 
   31570    * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
   31571      _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0'
   31572 
   31573    * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
   31574      _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0'
   31575 
   31576 6.56.3.27 Pairwise add
   31577 ......................
   31578 
   31579    * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
   31580      _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'
   31581 
   31582    * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
   31583      _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'
   31584 
   31585    * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
   31586      _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'
   31587 
   31588    * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
   31589      _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'
   31590 
   31591    * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
   31592      _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'
   31593 
   31594    * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
   31595      _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'
   31596 
   31597    * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
   31598      _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0'
   31599 
   31600    * uint64x1_t vpaddl_u32 (uint32x2_t)
   31601      _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0'
   31602 
   31603    * uint32x2_t vpaddl_u16 (uint16x4_t)
   31604      _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0'
   31605 
   31606    * uint16x4_t vpaddl_u8 (uint8x8_t)
   31607      _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0'
   31608 
   31609    * int64x1_t vpaddl_s32 (int32x2_t)
   31610      _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0'
   31611 
   31612    * int32x2_t vpaddl_s16 (int16x4_t)
   31613      _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0'
   31614 
   31615    * int16x4_t vpaddl_s8 (int8x8_t)
   31616      _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0'
   31617 
   31618    * uint64x2_t vpaddlq_u32 (uint32x4_t)
   31619      _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0'
   31620 
   31621    * uint32x4_t vpaddlq_u16 (uint16x8_t)
   31622      _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0'
   31623 
   31624    * uint16x8_t vpaddlq_u8 (uint8x16_t)
   31625      _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0'
   31626 
   31627    * int64x2_t vpaddlq_s32 (int32x4_t)
   31628      _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0'
   31629 
   31630    * int32x4_t vpaddlq_s16 (int16x8_t)
   31631      _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0'
   31632 
   31633    * int16x8_t vpaddlq_s8 (int8x16_t)
   31634      _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0'
   31635 
   31636 6.56.3.28 Pairwise add, single_opcode widen and accumulate
   31637 ..........................................................
   31638 
   31639    * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
   31640      _Form of expected instruction(s):_ 'vpadal.u32 D0, D0'
   31641 
   31642    * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
   31643      _Form of expected instruction(s):_ 'vpadal.u16 D0, D0'
   31644 
   31645    * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
   31646      _Form of expected instruction(s):_ 'vpadal.u8 D0, D0'
   31647 
   31648    * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
   31649      _Form of expected instruction(s):_ 'vpadal.s32 D0, D0'
   31650 
   31651    * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
   31652      _Form of expected instruction(s):_ 'vpadal.s16 D0, D0'
   31653 
   31654    * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
   31655      _Form of expected instruction(s):_ 'vpadal.s8 D0, D0'
   31656 
   31657    * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
   31658      _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0'
   31659 
   31660    * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
   31661      _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0'
   31662 
   31663    * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
   31664      _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0'
   31665 
   31666    * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
   31667      _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0'
   31668 
   31669    * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
   31670      _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0'
   31671 
   31672    * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
   31673      _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0'
   31674 
   31675 6.56.3.29 Folding maximum
   31676 .........................
   31677 
   31678    * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
   31679      _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0'
   31680 
   31681    * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
   31682      _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0'
   31683 
   31684    * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
   31685      _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0'
   31686 
   31687    * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
   31688      _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0'
   31689 
   31690    * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
   31691      _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0'
   31692 
   31693    * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
   31694      _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0'
   31695 
   31696    * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
   31697      _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0'
   31698 
   31699 6.56.3.30 Folding minimum
   31700 .........................
   31701 
   31702    * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
   31703      _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0'
   31704 
   31705    * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
   31706      _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0'
   31707 
   31708    * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
   31709      _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0'
   31710 
   31711    * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
   31712      _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0'
   31713 
   31714    * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
   31715      _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0'
   31716 
   31717    * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
   31718      _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0'
   31719 
   31720    * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
   31721      _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0'
   31722 
   31723 6.56.3.31 Reciprocal step
   31724 .........................
   31725 
   31726    * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
   31727      _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0'
   31728 
   31729    * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
   31730      _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0'
   31731 
   31732    * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
   31733      _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0'
   31734 
   31735    * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
   31736      _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0'
   31737 
   31738 6.56.3.32 Vector shift left
   31739 ...........................
   31740 
   31741    * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
   31742      _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0'
   31743 
   31744    * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
   31745      _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0'
   31746 
   31747    * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
   31748      _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0'
   31749 
   31750    * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
   31751      _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0'
   31752 
   31753    * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
   31754      _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0'
   31755 
   31756    * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
   31757      _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0'
   31758 
   31759    * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
   31760      _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0'
   31761 
   31762    * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
   31763      _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0'
   31764 
   31765    * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
   31766      _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0'
   31767 
   31768    * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
   31769      _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0'
   31770 
   31771    * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
   31772      _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0'
   31773 
   31774    * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
   31775      _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0'
   31776 
   31777    * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
   31778      _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0'
   31779 
   31780    * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
   31781      _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0'
   31782 
   31783    * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
   31784      _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0'
   31785 
   31786    * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
   31787      _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0'
   31788 
   31789    * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
   31790      _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0'
   31791 
   31792    * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
   31793      _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0'
   31794 
   31795    * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
   31796      _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0'
   31797 
   31798    * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
   31799      _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0'
   31800 
   31801    * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
   31802      _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0'
   31803 
   31804    * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
   31805      _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0'
   31806 
   31807    * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
   31808      _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0'
   31809 
   31810    * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
   31811      _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0'
   31812 
   31813    * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
   31814      _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0'
   31815 
   31816    * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
   31817      _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0'
   31818 
   31819    * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
   31820      _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0'
   31821 
   31822    * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
   31823      _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0'
   31824 
   31825    * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
   31826      _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0'
   31827 
   31828    * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
   31829      _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0'
   31830 
   31831    * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
   31832      _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0'
   31833 
   31834    * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
   31835      _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0'
   31836 
   31837    * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
   31838      _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0'
   31839 
   31840    * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
   31841      _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0'
   31842 
   31843    * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
   31844      _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0'
   31845 
   31846    * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
   31847      _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0'
   31848 
   31849    * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
   31850      _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0'
   31851 
   31852    * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
   31853      _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0'
   31854 
   31855    * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
   31856      _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0'
   31857 
   31858    * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
   31859      _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0'
   31860 
   31861    * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
   31862      _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0'
   31863 
   31864    * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
   31865      _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0'
   31866 
   31867    * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
   31868      _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0'
   31869 
   31870    * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
   31871      _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0'
   31872 
   31873    * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
   31874      _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0'
   31875 
   31876    * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
   31877      _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0'
   31878 
   31879    * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
   31880      _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0'
   31881 
   31882    * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
   31883      _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0'
   31884 
   31885    * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
   31886      _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0'
   31887 
   31888    * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
   31889      _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0'
   31890 
   31891    * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
   31892      _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0'
   31893 
   31894    * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
   31895      _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0'
   31896 
   31897    * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
   31898      _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0'
   31899 
   31900    * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
   31901      _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0'
   31902 
   31903    * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
   31904      _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0'
   31905 
   31906    * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
   31907      _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0'
   31908 
   31909    * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
   31910      _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0'
   31911 
   31912    * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
   31913      _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0'
   31914 
   31915    * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
   31916      _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0'
   31917 
   31918    * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
   31919      _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0'
   31920 
   31921    * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
   31922      _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0'
   31923 
   31924    * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
   31925      _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0'
   31926 
   31927    * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
   31928      _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0'
   31929 
   31930    * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
   31931      _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0'
   31932 
   31933 6.56.3.33 Vector shift left by constant
   31934 .......................................
   31935 
   31936    * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
   31937      _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'
   31938 
   31939    * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
   31940      _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'
   31941 
   31942    * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
   31943      _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'
   31944 
   31945    * int32x2_t vshl_n_s32 (int32x2_t, const int)
   31946      _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'
   31947 
   31948    * int16x4_t vshl_n_s16 (int16x4_t, const int)
   31949      _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'
   31950 
   31951    * int8x8_t vshl_n_s8 (int8x8_t, const int)
   31952      _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'
   31953 
   31954    * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
   31955      _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'
   31956 
   31957    * int64x1_t vshl_n_s64 (int64x1_t, const int)
   31958      _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'
   31959 
   31960    * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
   31961      _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'
   31962 
   31963    * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
   31964      _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'
   31965 
   31966    * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
   31967      _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'
   31968 
   31969    * int32x4_t vshlq_n_s32 (int32x4_t, const int)
   31970      _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'
   31971 
   31972    * int16x8_t vshlq_n_s16 (int16x8_t, const int)
   31973      _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'
   31974 
   31975    * int8x16_t vshlq_n_s8 (int8x16_t, const int)
   31976      _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'
   31977 
   31978    * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
   31979      _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'
   31980 
   31981    * int64x2_t vshlq_n_s64 (int64x2_t, const int)
   31982      _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'
   31983 
   31984    * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
   31985      _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0'
   31986 
   31987    * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
   31988      _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0'
   31989 
   31990    * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
   31991      _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0'
   31992 
   31993    * int32x2_t vqshl_n_s32 (int32x2_t, const int)
   31994      _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0'
   31995 
   31996    * int16x4_t vqshl_n_s16 (int16x4_t, const int)
   31997      _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0'
   31998 
   31999    * int8x8_t vqshl_n_s8 (int8x8_t, const int)
   32000      _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0'
   32001 
   32002    * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
   32003      _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0'
   32004 
   32005    * int64x1_t vqshl_n_s64 (int64x1_t, const int)
   32006      _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0'
   32007 
   32008    * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
   32009      _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0'
   32010 
   32011    * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
   32012      _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0'
   32013 
   32014    * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
   32015      _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0'
   32016 
   32017    * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
   32018      _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0'
   32019 
   32020    * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
   32021      _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0'
   32022 
   32023    * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
   32024      _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0'
   32025 
   32026    * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
   32027      _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0'
   32028 
   32029    * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
   32030      _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0'
   32031 
   32032    * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
   32033      _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0'
   32034 
   32035    * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
   32036      _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0'
   32037 
   32038    * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
   32039      _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0'
   32040 
   32041    * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
   32042      _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0'
   32043 
   32044    * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
   32045      _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0'
   32046 
   32047    * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
   32048      _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0'
   32049 
   32050    * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
   32051      _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0'
   32052 
   32053    * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
   32054      _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0'
   32055 
   32056    * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
   32057      _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0'
   32058 
   32059    * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
   32060      _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0'
   32061 
   32062    * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
   32063      _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0'
   32064 
   32065    * int64x2_t vshll_n_s32 (int32x2_t, const int)
   32066      _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0'
   32067 
   32068    * int32x4_t vshll_n_s16 (int16x4_t, const int)
   32069      _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0'
   32070 
   32071    * int16x8_t vshll_n_s8 (int8x8_t, const int)
   32072      _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0'
   32073 
   32074 6.56.3.34 Vector shift right by constant
   32075 ........................................
   32076 
   32077    * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
   32078      _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0'
   32079 
   32080    * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
   32081      _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0'
   32082 
   32083    * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
   32084      _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0'
   32085 
   32086    * int32x2_t vshr_n_s32 (int32x2_t, const int)
   32087      _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0'
   32088 
   32089    * int16x4_t vshr_n_s16 (int16x4_t, const int)
   32090      _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0'
   32091 
   32092    * int8x8_t vshr_n_s8 (int8x8_t, const int)
   32093      _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0'
   32094 
   32095    * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
   32096      _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0'
   32097 
   32098    * int64x1_t vshr_n_s64 (int64x1_t, const int)
   32099      _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0'
   32100 
   32101    * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
   32102      _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0'
   32103 
   32104    * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
   32105      _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0'
   32106 
   32107    * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
   32108      _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0'
   32109 
   32110    * int32x4_t vshrq_n_s32 (int32x4_t, const int)
   32111      _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0'
   32112 
   32113    * int16x8_t vshrq_n_s16 (int16x8_t, const int)
   32114      _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0'
   32115 
   32116    * int8x16_t vshrq_n_s8 (int8x16_t, const int)
   32117      _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0'
   32118 
   32119    * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
   32120      _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0'
   32121 
   32122    * int64x2_t vshrq_n_s64 (int64x2_t, const int)
   32123      _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0'
   32124 
   32125    * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
   32126      _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0'
   32127 
   32128    * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
   32129      _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0'
   32130 
   32131    * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
   32132      _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0'
   32133 
   32134    * int32x2_t vrshr_n_s32 (int32x2_t, const int)
   32135      _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0'
   32136 
   32137    * int16x4_t vrshr_n_s16 (int16x4_t, const int)
   32138      _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0'
   32139 
   32140    * int8x8_t vrshr_n_s8 (int8x8_t, const int)
   32141      _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0'
   32142 
   32143    * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
   32144      _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0'
   32145 
   32146    * int64x1_t vrshr_n_s64 (int64x1_t, const int)
   32147      _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0'
   32148 
   32149    * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
   32150      _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0'
   32151 
   32152    * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
   32153      _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0'
   32154 
   32155    * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
   32156      _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0'
   32157 
   32158    * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
   32159      _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0'
   32160 
   32161    * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
   32162      _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0'
   32163 
   32164    * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
   32165      _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0'
   32166 
   32167    * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
   32168      _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0'
   32169 
   32170    * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
   32171      _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0'
   32172 
   32173    * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
   32174      _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'
   32175 
   32176    * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
   32177      _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'
   32178 
   32179    * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
   32180      _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'
   32181 
   32182    * int32x2_t vshrn_n_s64 (int64x2_t, const int)
   32183      _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'
   32184 
   32185    * int16x4_t vshrn_n_s32 (int32x4_t, const int)
   32186      _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'
   32187 
   32188    * int8x8_t vshrn_n_s16 (int16x8_t, const int)
   32189      _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'
   32190 
   32191    * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
   32192      _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'
   32193 
   32194    * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
   32195      _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'
   32196 
   32197    * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
   32198      _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'
   32199 
   32200    * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
   32201      _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'
   32202 
   32203    * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
   32204      _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'
   32205 
   32206    * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
   32207      _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'
   32208 
   32209    * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
   32210      _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0'
   32211 
   32212    * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
   32213      _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0'
   32214 
   32215    * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
   32216      _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0'
   32217 
   32218    * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
   32219      _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0'
   32220 
   32221    * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
   32222      _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0'
   32223 
   32224    * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
   32225      _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0'
   32226 
   32227    * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
   32228      _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0'
   32229 
   32230    * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
   32231      _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0'
   32232 
   32233    * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
   32234      _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0'
   32235 
   32236    * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
   32237      _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0'
   32238 
   32239    * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
   32240      _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0'
   32241 
   32242    * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
   32243      _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0'
   32244 
   32245    * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
   32246      _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0'
   32247 
   32248    * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
   32249      _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0'
   32250 
   32251    * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
   32252      _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0'
   32253 
   32254    * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
   32255      _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0'
   32256 
   32257    * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
   32258      _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0'
   32259 
   32260    * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
   32261      _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0'
   32262 
   32263 6.56.3.35 Vector shift right by constant and accumulate
   32264 .......................................................
   32265 
   32266    * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   32267      _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0'
   32268 
   32269    * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   32270      _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0'
   32271 
   32272    * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   32273      _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0'
   32274 
   32275    * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
   32276      _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0'
   32277 
   32278    * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
   32279      _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0'
   32280 
   32281    * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
   32282      _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0'
   32283 
   32284    * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   32285      _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0'
   32286 
   32287    * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
   32288      _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0'
   32289 
   32290    * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32291      _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0'
   32292 
   32293    * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32294      _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0'
   32295 
   32296    * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32297      _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0'
   32298 
   32299    * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
   32300      _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0'
   32301 
   32302    * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
   32303      _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0'
   32304 
   32305    * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
   32306      _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0'
   32307 
   32308    * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32309      _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0'
   32310 
   32311    * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
   32312      _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0'
   32313 
   32314    * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   32315      _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0'
   32316 
   32317    * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   32318      _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0'
   32319 
   32320    * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   32321      _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0'
   32322 
   32323    * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
   32324      _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0'
   32325 
   32326    * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
   32327      _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0'
   32328 
   32329    * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
   32330      _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0'
   32331 
   32332    * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   32333      _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0'
   32334 
   32335    * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
   32336      _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0'
   32337 
   32338    * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32339      _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0'
   32340 
   32341    * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32342      _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0'
   32343 
   32344    * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32345      _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0'
   32346 
   32347    * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
   32348      _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0'
   32349 
   32350    * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
   32351      _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0'
   32352 
   32353    * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
   32354      _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0'
   32355 
   32356    * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32357      _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0'
   32358 
   32359    * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
   32360      _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0'
   32361 
   32362 6.56.3.36 Vector shift right and insert
   32363 .......................................
   32364 
   32365    * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
   32366      _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'
   32367 
   32368    * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
   32369      _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
   32370 
   32371    * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
   32372      _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
   32373 
   32374    * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
   32375      _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'
   32376 
   32377    * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
   32378      _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
   32379 
   32380    * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
   32381      _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
   32382 
   32383    * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
   32384      _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
   32385 
   32386    * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
   32387      _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'
   32388 
   32389    * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
   32390      _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'
   32391 
   32392    * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
   32393      _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'
   32394 
   32395    * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32396      _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'
   32397 
   32398    * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32399      _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
   32400 
   32401    * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32402      _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
   32403 
   32404    * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
   32405      _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'
   32406 
   32407    * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
   32408      _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
   32409 
   32410    * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
   32411      _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
   32412 
   32413    * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32414      _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
   32415 
   32416    * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
   32417      _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'
   32418 
   32419    * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
   32420      _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'
   32421 
   32422    * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
   32423      _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'
   32424 
   32425 6.56.3.37 Vector shift left and insert
   32426 ......................................
   32427 
   32428    * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
   32429      _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'
   32430 
   32431    * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
   32432      _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
   32433 
   32434    * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
   32435      _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
   32436 
   32437    * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
   32438      _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'
   32439 
   32440    * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
   32441      _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
   32442 
   32443    * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
   32444      _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
   32445 
   32446    * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
   32447      _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
   32448 
   32449    * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
   32450      _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'
   32451 
   32452    * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
   32453      _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'
   32454 
   32455    * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
   32456      _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'
   32457 
   32458    * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
   32459      _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'
   32460 
   32461    * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
   32462      _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
   32463 
   32464    * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
   32465      _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
   32466 
   32467    * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
   32468      _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'
   32469 
   32470    * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
   32471      _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
   32472 
   32473    * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
   32474      _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
   32475 
   32476    * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
   32477      _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
   32478 
   32479    * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
   32480      _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'
   32481 
   32482    * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
   32483      _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'
   32484 
   32485    * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
   32486      _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'
   32487 
   32488 6.56.3.38 Absolute value
   32489 ........................
   32490 
   32491    * float32x2_t vabs_f32 (float32x2_t)
   32492      _Form of expected instruction(s):_ 'vabs.f32 D0, D0'
   32493 
   32494    * int32x2_t vabs_s32 (int32x2_t)
   32495      _Form of expected instruction(s):_ 'vabs.s32 D0, D0'
   32496 
   32497    * int16x4_t vabs_s16 (int16x4_t)
   32498      _Form of expected instruction(s):_ 'vabs.s16 D0, D0'
   32499 
   32500    * int8x8_t vabs_s8 (int8x8_t)
   32501      _Form of expected instruction(s):_ 'vabs.s8 D0, D0'
   32502 
   32503    * float32x4_t vabsq_f32 (float32x4_t)
   32504      _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0'
   32505 
   32506    * int32x4_t vabsq_s32 (int32x4_t)
   32507      _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0'
   32508 
   32509    * int16x8_t vabsq_s16 (int16x8_t)
   32510      _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0'
   32511 
   32512    * int8x16_t vabsq_s8 (int8x16_t)
   32513      _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0'
   32514 
   32515    * int32x2_t vqabs_s32 (int32x2_t)
   32516      _Form of expected instruction(s):_ 'vqabs.s32 D0, D0'
   32517 
   32518    * int16x4_t vqabs_s16 (int16x4_t)
   32519      _Form of expected instruction(s):_ 'vqabs.s16 D0, D0'
   32520 
   32521    * int8x8_t vqabs_s8 (int8x8_t)
   32522      _Form of expected instruction(s):_ 'vqabs.s8 D0, D0'
   32523 
   32524    * int32x4_t vqabsq_s32 (int32x4_t)
   32525      _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0'
   32526 
   32527    * int16x8_t vqabsq_s16 (int16x8_t)
   32528      _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0'
   32529 
   32530    * int8x16_t vqabsq_s8 (int8x16_t)
   32531      _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0'
   32532 
   32533 6.56.3.39 Negation
   32534 ..................
   32535 
   32536    * float32x2_t vneg_f32 (float32x2_t)
   32537      _Form of expected instruction(s):_ 'vneg.f32 D0, D0'
   32538 
   32539    * int32x2_t vneg_s32 (int32x2_t)
   32540      _Form of expected instruction(s):_ 'vneg.s32 D0, D0'
   32541 
   32542    * int16x4_t vneg_s16 (int16x4_t)
   32543      _Form of expected instruction(s):_ 'vneg.s16 D0, D0'
   32544 
   32545    * int8x8_t vneg_s8 (int8x8_t)
   32546      _Form of expected instruction(s):_ 'vneg.s8 D0, D0'
   32547 
   32548    * float32x4_t vnegq_f32 (float32x4_t)
   32549      _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0'
   32550 
   32551    * int32x4_t vnegq_s32 (int32x4_t)
   32552      _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0'
   32553 
   32554    * int16x8_t vnegq_s16 (int16x8_t)
   32555      _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0'
   32556 
   32557    * int8x16_t vnegq_s8 (int8x16_t)
   32558      _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0'
   32559 
   32560    * int32x2_t vqneg_s32 (int32x2_t)
   32561      _Form of expected instruction(s):_ 'vqneg.s32 D0, D0'
   32562 
   32563    * int16x4_t vqneg_s16 (int16x4_t)
   32564      _Form of expected instruction(s):_ 'vqneg.s16 D0, D0'
   32565 
   32566    * int8x8_t vqneg_s8 (int8x8_t)
   32567      _Form of expected instruction(s):_ 'vqneg.s8 D0, D0'
   32568 
   32569    * int32x4_t vqnegq_s32 (int32x4_t)
   32570      _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0'
   32571 
   32572    * int16x8_t vqnegq_s16 (int16x8_t)
   32573      _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0'
   32574 
   32575    * int8x16_t vqnegq_s8 (int8x16_t)
   32576      _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0'
   32577 
   32578 6.56.3.40 Bitwise not
   32579 .....................
   32580 
   32581    * uint32x2_t vmvn_u32 (uint32x2_t)
   32582      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32583 
   32584    * uint16x4_t vmvn_u16 (uint16x4_t)
   32585      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32586 
   32587    * uint8x8_t vmvn_u8 (uint8x8_t)
   32588      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32589 
   32590    * int32x2_t vmvn_s32 (int32x2_t)
   32591      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32592 
   32593    * int16x4_t vmvn_s16 (int16x4_t)
   32594      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32595 
   32596    * int8x8_t vmvn_s8 (int8x8_t)
   32597      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32598 
   32599    * poly8x8_t vmvn_p8 (poly8x8_t)
   32600      _Form of expected instruction(s):_ 'vmvn D0, D0'
   32601 
   32602    * uint32x4_t vmvnq_u32 (uint32x4_t)
   32603      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32604 
   32605    * uint16x8_t vmvnq_u16 (uint16x8_t)
   32606      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32607 
   32608    * uint8x16_t vmvnq_u8 (uint8x16_t)
   32609      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32610 
   32611    * int32x4_t vmvnq_s32 (int32x4_t)
   32612      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32613 
   32614    * int16x8_t vmvnq_s16 (int16x8_t)
   32615      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32616 
   32617    * int8x16_t vmvnq_s8 (int8x16_t)
   32618      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32619 
   32620    * poly8x16_t vmvnq_p8 (poly8x16_t)
   32621      _Form of expected instruction(s):_ 'vmvn Q0, Q0'
   32622 
   32623 6.56.3.41 Count leading sign bits
   32624 .................................
   32625 
   32626    * int32x2_t vcls_s32 (int32x2_t)
   32627      _Form of expected instruction(s):_ 'vcls.s32 D0, D0'
   32628 
   32629    * int16x4_t vcls_s16 (int16x4_t)
   32630      _Form of expected instruction(s):_ 'vcls.s16 D0, D0'
   32631 
   32632    * int8x8_t vcls_s8 (int8x8_t)
   32633      _Form of expected instruction(s):_ 'vcls.s8 D0, D0'
   32634 
   32635    * int32x4_t vclsq_s32 (int32x4_t)
   32636      _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0'
   32637 
   32638    * int16x8_t vclsq_s16 (int16x8_t)
   32639      _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0'
   32640 
   32641    * int8x16_t vclsq_s8 (int8x16_t)
   32642      _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0'
   32643 
   32644 6.56.3.42 Count leading zeros
   32645 .............................
   32646 
   32647    * uint32x2_t vclz_u32 (uint32x2_t)
   32648      _Form of expected instruction(s):_ 'vclz.i32 D0, D0'
   32649 
   32650    * uint16x4_t vclz_u16 (uint16x4_t)
   32651      _Form of expected instruction(s):_ 'vclz.i16 D0, D0'
   32652 
   32653    * uint8x8_t vclz_u8 (uint8x8_t)
   32654      _Form of expected instruction(s):_ 'vclz.i8 D0, D0'
   32655 
   32656    * int32x2_t vclz_s32 (int32x2_t)
   32657      _Form of expected instruction(s):_ 'vclz.i32 D0, D0'
   32658 
   32659    * int16x4_t vclz_s16 (int16x4_t)
   32660      _Form of expected instruction(s):_ 'vclz.i16 D0, D0'
   32661 
   32662    * int8x8_t vclz_s8 (int8x8_t)
   32663      _Form of expected instruction(s):_ 'vclz.i8 D0, D0'
   32664 
   32665    * uint32x4_t vclzq_u32 (uint32x4_t)
   32666      _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'
   32667 
   32668    * uint16x8_t vclzq_u16 (uint16x8_t)
   32669      _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'
   32670 
   32671    * uint8x16_t vclzq_u8 (uint8x16_t)
   32672      _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'
   32673 
   32674    * int32x4_t vclzq_s32 (int32x4_t)
   32675      _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'
   32676 
   32677    * int16x8_t vclzq_s16 (int16x8_t)
   32678      _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'
   32679 
   32680    * int8x16_t vclzq_s8 (int8x16_t)
   32681      _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'
   32682 
   32683 6.56.3.43 Count number of set bits
   32684 ..................................
   32685 
   32686    * uint8x8_t vcnt_u8 (uint8x8_t)
   32687      _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
   32688 
   32689    * int8x8_t vcnt_s8 (int8x8_t)
   32690      _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
   32691 
   32692    * poly8x8_t vcnt_p8 (poly8x8_t)
   32693      _Form of expected instruction(s):_ 'vcnt.8 D0, D0'
   32694 
   32695    * uint8x16_t vcntq_u8 (uint8x16_t)
   32696      _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
   32697 
   32698    * int8x16_t vcntq_s8 (int8x16_t)
   32699      _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
   32700 
   32701    * poly8x16_t vcntq_p8 (poly8x16_t)
   32702      _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'
   32703 
   32704 6.56.3.44 Reciprocal estimate
   32705 .............................
   32706 
   32707    * float32x2_t vrecpe_f32 (float32x2_t)
   32708      _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0'
   32709 
   32710    * uint32x2_t vrecpe_u32 (uint32x2_t)
   32711      _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0'
   32712 
   32713    * float32x4_t vrecpeq_f32 (float32x4_t)
   32714      _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0'
   32715 
   32716    * uint32x4_t vrecpeq_u32 (uint32x4_t)
   32717      _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0'
   32718 
   32719 6.56.3.45 Reciprocal square-root estimate
   32720 .........................................
   32721 
   32722    * float32x2_t vrsqrte_f32 (float32x2_t)
   32723      _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0'
   32724 
   32725    * uint32x2_t vrsqrte_u32 (uint32x2_t)
   32726      _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0'
   32727 
   32728    * float32x4_t vrsqrteq_f32 (float32x4_t)
   32729      _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0'
   32730 
   32731    * uint32x4_t vrsqrteq_u32 (uint32x4_t)
   32732      _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0'
   32733 
   32734 6.56.3.46 Get lanes from a vector
   32735 .................................
   32736 
   32737    * uint32_t vget_lane_u32 (uint32x2_t, const int)
   32738      _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
   32739 
   32740    * uint16_t vget_lane_u16 (uint16x4_t, const int)
   32741      _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
   32742 
   32743    * uint8_t vget_lane_u8 (uint8x8_t, const int)
   32744      _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
   32745 
   32746    * int32_t vget_lane_s32 (int32x2_t, const int)
   32747      _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
   32748 
   32749    * int16_t vget_lane_s16 (int16x4_t, const int)
   32750      _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'
   32751 
   32752    * int8_t vget_lane_s8 (int8x8_t, const int)
   32753      _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'
   32754 
   32755    * float32_t vget_lane_f32 (float32x2_t, const int)
   32756      _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
   32757 
   32758    * poly16_t vget_lane_p16 (poly16x4_t, const int)
   32759      _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
   32760 
   32761    * poly8_t vget_lane_p8 (poly8x8_t, const int)
   32762      _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
   32763 
   32764    * uint64_t vget_lane_u64 (uint64x1_t, const int)
   32765 
   32766    * int64_t vget_lane_s64 (int64x1_t, const int)
   32767 
   32768    * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
   32769      _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
   32770 
   32771    * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
   32772      _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
   32773 
   32774    * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
   32775      _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
   32776 
   32777    * int32_t vgetq_lane_s32 (int32x4_t, const int)
   32778      _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
   32779 
   32780    * int16_t vgetq_lane_s16 (int16x8_t, const int)
   32781      _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'
   32782 
   32783    * int8_t vgetq_lane_s8 (int8x16_t, const int)
   32784      _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'
   32785 
   32786    * float32_t vgetq_lane_f32 (float32x4_t, const int)
   32787      _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'
   32788 
   32789    * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
   32790      _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'
   32791 
   32792    * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
   32793      _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'
   32794 
   32795    * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
   32796      _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd
   32797      R0, R0, D0'
   32798 
   32799    * int64_t vgetq_lane_s64 (int64x2_t, const int)
   32800      _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd
   32801      R0, R0, D0'
   32802 
   32803 6.56.3.47 Set lanes in a vector
   32804 ...............................
   32805 
   32806    * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
   32807      _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
   32808 
   32809    * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
   32810      _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
   32811 
   32812    * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
   32813      _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
   32814 
   32815    * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
   32816      _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
   32817 
   32818    * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
   32819      _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
   32820 
   32821    * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
   32822      _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
   32823 
   32824    * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
   32825      _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
   32826 
   32827    * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
   32828      _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
   32829 
   32830    * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
   32831      _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
   32832 
   32833    * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
   32834 
   32835    * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
   32836 
   32837    * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
   32838      _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
   32839 
   32840    * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
   32841      _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
   32842 
   32843    * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
   32844      _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
   32845 
   32846    * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
   32847      _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
   32848 
   32849    * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
   32850      _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
   32851 
   32852    * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
   32853      _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
   32854 
   32855    * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
   32856      _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'
   32857 
   32858    * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
   32859      _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'
   32860 
   32861    * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
   32862      _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'
   32863 
   32864    * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
   32865      _Form of expected instruction(s):_ 'vmov D0, R0, R0'
   32866 
   32867    * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
   32868      _Form of expected instruction(s):_ 'vmov D0, R0, R0'
   32869 
   32870 6.56.3.48 Create vector from literal bit pattern
   32871 ................................................
   32872 
   32873    * uint32x2_t vcreate_u32 (uint64_t)
   32874 
   32875    * uint16x4_t vcreate_u16 (uint64_t)
   32876 
   32877    * uint8x8_t vcreate_u8 (uint64_t)
   32878 
   32879    * int32x2_t vcreate_s32 (uint64_t)
   32880 
   32881    * int16x4_t vcreate_s16 (uint64_t)
   32882 
   32883    * int8x8_t vcreate_s8 (uint64_t)
   32884 
   32885    * uint64x1_t vcreate_u64 (uint64_t)
   32886 
   32887    * int64x1_t vcreate_s64 (uint64_t)
   32888 
   32889    * float32x2_t vcreate_f32 (uint64_t)
   32890 
   32891    * poly16x4_t vcreate_p16 (uint64_t)
   32892 
   32893    * poly8x8_t vcreate_p8 (uint64_t)
   32894 
   32895 6.56.3.49 Set all lanes to the same value
   32896 .........................................
   32897 
   32898    * uint32x2_t vdup_n_u32 (uint32_t)
   32899      _Form of expected instruction(s):_ 'vdup.32 D0, R0'
   32900 
   32901    * uint16x4_t vdup_n_u16 (uint16_t)
   32902      _Form of expected instruction(s):_ 'vdup.16 D0, R0'
   32903 
   32904    * uint8x8_t vdup_n_u8 (uint8_t)
   32905      _Form of expected instruction(s):_ 'vdup.8 D0, R0'
   32906 
   32907    * int32x2_t vdup_n_s32 (int32_t)
   32908      _Form of expected instruction(s):_ 'vdup.32 D0, R0'
   32909 
   32910    * int16x4_t vdup_n_s16 (int16_t)
   32911      _Form of expected instruction(s):_ 'vdup.16 D0, R0'
   32912 
   32913    * int8x8_t vdup_n_s8 (int8_t)
   32914      _Form of expected instruction(s):_ 'vdup.8 D0, R0'
   32915 
   32916    * float32x2_t vdup_n_f32 (float32_t)
   32917      _Form of expected instruction(s):_ 'vdup.32 D0, R0'
   32918 
   32919    * poly16x4_t vdup_n_p16 (poly16_t)
   32920      _Form of expected instruction(s):_ 'vdup.16 D0, R0'
   32921 
   32922    * poly8x8_t vdup_n_p8 (poly8_t)
   32923      _Form of expected instruction(s):_ 'vdup.8 D0, R0'
   32924 
   32925    * uint64x1_t vdup_n_u64 (uint64_t)
   32926 
   32927    * int64x1_t vdup_n_s64 (int64_t)
   32928 
   32929    * uint32x4_t vdupq_n_u32 (uint32_t)
   32930      _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
   32931 
   32932    * uint16x8_t vdupq_n_u16 (uint16_t)
   32933      _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
   32934 
   32935    * uint8x16_t vdupq_n_u8 (uint8_t)
   32936      _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
   32937 
   32938    * int32x4_t vdupq_n_s32 (int32_t)
   32939      _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
   32940 
   32941    * int16x8_t vdupq_n_s16 (int16_t)
   32942      _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
   32943 
   32944    * int8x16_t vdupq_n_s8 (int8_t)
   32945      _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
   32946 
   32947    * float32x4_t vdupq_n_f32 (float32_t)
   32948      _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
   32949 
   32950    * poly16x8_t vdupq_n_p16 (poly16_t)
   32951      _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
   32952 
   32953    * poly8x16_t vdupq_n_p8 (poly8_t)
   32954      _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
   32955 
   32956    * uint64x2_t vdupq_n_u64 (uint64_t)
   32957 
   32958    * int64x2_t vdupq_n_s64 (int64_t)
   32959 
   32960    * uint32x2_t vmov_n_u32 (uint32_t)
   32961      _Form of expected instruction(s):_ 'vdup.32 D0, R0'
   32962 
   32963    * uint16x4_t vmov_n_u16 (uint16_t)
   32964      _Form of expected instruction(s):_ 'vdup.16 D0, R0'
   32965 
   32966    * uint8x8_t vmov_n_u8 (uint8_t)
   32967      _Form of expected instruction(s):_ 'vdup.8 D0, R0'
   32968 
   32969    * int32x2_t vmov_n_s32 (int32_t)
   32970      _Form of expected instruction(s):_ 'vdup.32 D0, R0'
   32971 
   32972    * int16x4_t vmov_n_s16 (int16_t)
   32973      _Form of expected instruction(s):_ 'vdup.16 D0, R0'
   32974 
   32975    * int8x8_t vmov_n_s8 (int8_t)
   32976      _Form of expected instruction(s):_ 'vdup.8 D0, R0'
   32977 
   32978    * float32x2_t vmov_n_f32 (float32_t)
   32979      _Form of expected instruction(s):_ 'vdup.32 D0, R0'
   32980 
   32981    * poly16x4_t vmov_n_p16 (poly16_t)
   32982      _Form of expected instruction(s):_ 'vdup.16 D0, R0'
   32983 
   32984    * poly8x8_t vmov_n_p8 (poly8_t)
   32985      _Form of expected instruction(s):_ 'vdup.8 D0, R0'
   32986 
   32987    * uint64x1_t vmov_n_u64 (uint64_t)
   32988 
   32989    * int64x1_t vmov_n_s64 (int64_t)
   32990 
   32991    * uint32x4_t vmovq_n_u32 (uint32_t)
   32992      _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
   32993 
   32994    * uint16x8_t vmovq_n_u16 (uint16_t)
   32995      _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
   32996 
   32997    * uint8x16_t vmovq_n_u8 (uint8_t)
   32998      _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
   32999 
   33000    * int32x4_t vmovq_n_s32 (int32_t)
   33001      _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
   33002 
   33003    * int16x8_t vmovq_n_s16 (int16_t)
   33004      _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
   33005 
   33006    * int8x16_t vmovq_n_s8 (int8_t)
   33007      _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
   33008 
   33009    * float32x4_t vmovq_n_f32 (float32_t)
   33010      _Form of expected instruction(s):_ 'vdup.32 Q0, R0'
   33011 
   33012    * poly16x8_t vmovq_n_p16 (poly16_t)
   33013      _Form of expected instruction(s):_ 'vdup.16 Q0, R0'
   33014 
   33015    * poly8x16_t vmovq_n_p8 (poly8_t)
   33016      _Form of expected instruction(s):_ 'vdup.8 Q0, R0'
   33017 
   33018    * uint64x2_t vmovq_n_u64 (uint64_t)
   33019 
   33020    * int64x2_t vmovq_n_s64 (int64_t)
   33021 
   33022    * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
   33023      _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
   33024 
   33025    * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
   33026      _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
   33027 
   33028    * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
   33029      _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
   33030 
   33031    * int32x2_t vdup_lane_s32 (int32x2_t, const int)
   33032      _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
   33033 
   33034    * int16x4_t vdup_lane_s16 (int16x4_t, const int)
   33035      _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
   33036 
   33037    * int8x8_t vdup_lane_s8 (int8x8_t, const int)
   33038      _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
   33039 
   33040    * float32x2_t vdup_lane_f32 (float32x2_t, const int)
   33041      _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'
   33042 
   33043    * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
   33044      _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'
   33045 
   33046    * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
   33047      _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'
   33048 
   33049    * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
   33050 
   33051    * int64x1_t vdup_lane_s64 (int64x1_t, const int)
   33052 
   33053    * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
   33054      _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
   33055 
   33056    * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
   33057      _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
   33058 
   33059    * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
   33060      _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
   33061 
   33062    * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
   33063      _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
   33064 
   33065    * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
   33066      _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
   33067 
   33068    * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
   33069      _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
   33070 
   33071    * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
   33072      _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'
   33073 
   33074    * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
   33075      _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'
   33076 
   33077    * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
   33078      _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'
   33079 
   33080    * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
   33081 
   33082    * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
   33083 
   33084 6.56.3.50 Combining vectors
   33085 ...........................
   33086 
   33087    * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
   33088 
   33089    * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
   33090 
   33091    * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
   33092 
   33093    * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
   33094 
   33095    * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
   33096 
   33097    * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
   33098 
   33099    * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
   33100 
   33101    * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
   33102 
   33103    * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
   33104 
   33105    * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
   33106 
   33107    * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
   33108 
   33109 6.56.3.51 Splitting vectors
   33110 ...........................
   33111 
   33112    * uint32x2_t vget_high_u32 (uint32x4_t)
   33113 
   33114    * uint16x4_t vget_high_u16 (uint16x8_t)
   33115 
   33116    * uint8x8_t vget_high_u8 (uint8x16_t)
   33117 
   33118    * int32x2_t vget_high_s32 (int32x4_t)
   33119 
   33120    * int16x4_t vget_high_s16 (int16x8_t)
   33121 
   33122    * int8x8_t vget_high_s8 (int8x16_t)
   33123 
   33124    * uint64x1_t vget_high_u64 (uint64x2_t)
   33125 
   33126    * int64x1_t vget_high_s64 (int64x2_t)
   33127 
   33128    * float32x2_t vget_high_f32 (float32x4_t)
   33129 
   33130    * poly16x4_t vget_high_p16 (poly16x8_t)
   33131 
   33132    * poly8x8_t vget_high_p8 (poly8x16_t)
   33133 
   33134    * uint32x2_t vget_low_u32 (uint32x4_t)
   33135      _Form of expected instruction(s):_ 'vmov D0, D0'
   33136 
   33137    * uint16x4_t vget_low_u16 (uint16x8_t)
   33138      _Form of expected instruction(s):_ 'vmov D0, D0'
   33139 
   33140    * uint8x8_t vget_low_u8 (uint8x16_t)
   33141      _Form of expected instruction(s):_ 'vmov D0, D0'
   33142 
   33143    * int32x2_t vget_low_s32 (int32x4_t)
   33144      _Form of expected instruction(s):_ 'vmov D0, D0'
   33145 
   33146    * int16x4_t vget_low_s16 (int16x8_t)
   33147      _Form of expected instruction(s):_ 'vmov D0, D0'
   33148 
   33149    * int8x8_t vget_low_s8 (int8x16_t)
   33150      _Form of expected instruction(s):_ 'vmov D0, D0'
   33151 
   33152    * float32x2_t vget_low_f32 (float32x4_t)
   33153      _Form of expected instruction(s):_ 'vmov D0, D0'
   33154 
   33155    * poly16x4_t vget_low_p16 (poly16x8_t)
   33156      _Form of expected instruction(s):_ 'vmov D0, D0'
   33157 
   33158    * poly8x8_t vget_low_p8 (poly8x16_t)
   33159      _Form of expected instruction(s):_ 'vmov D0, D0'
   33160 
   33161    * uint64x1_t vget_low_u64 (uint64x2_t)
   33162 
   33163    * int64x1_t vget_low_s64 (int64x2_t)
   33164 
   33165 6.56.3.52 Conversions
   33166 .....................
   33167 
   33168    * float32x2_t vcvt_f32_u32 (uint32x2_t)
   33169      _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0'
   33170 
   33171    * float32x2_t vcvt_f32_s32 (int32x2_t)
   33172      _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0'
   33173 
   33174    * uint32x2_t vcvt_u32_f32 (float32x2_t)
   33175      _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0'
   33176 
   33177    * int32x2_t vcvt_s32_f32 (float32x2_t)
   33178      _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0'
   33179 
   33180    * float32x4_t vcvtq_f32_u32 (uint32x4_t)
   33181      _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0'
   33182 
   33183    * float32x4_t vcvtq_f32_s32 (int32x4_t)
   33184      _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0'
   33185 
   33186    * uint32x4_t vcvtq_u32_f32 (float32x4_t)
   33187      _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0'
   33188 
   33189    * int32x4_t vcvtq_s32_f32 (float32x4_t)
   33190      _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0'
   33191 
   33192    * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
   33193      _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0'
   33194 
   33195    * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
   33196      _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0'
   33197 
   33198    * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
   33199      _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0'
   33200 
   33201    * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
   33202      _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0'
   33203 
   33204    * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
   33205      _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0'
   33206 
   33207    * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
   33208      _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0'
   33209 
   33210    * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
   33211      _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0'
   33212 
   33213    * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
   33214      _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0'
   33215 
   33216 6.56.3.53 Move, single_opcode narrowing
   33217 .......................................
   33218 
   33219    * uint32x2_t vmovn_u64 (uint64x2_t)
   33220      _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'
   33221 
   33222    * uint16x4_t vmovn_u32 (uint32x4_t)
   33223      _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'
   33224 
   33225    * uint8x8_t vmovn_u16 (uint16x8_t)
   33226      _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'
   33227 
   33228    * int32x2_t vmovn_s64 (int64x2_t)
   33229      _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'
   33230 
   33231    * int16x4_t vmovn_s32 (int32x4_t)
   33232      _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'
   33233 
   33234    * int8x8_t vmovn_s16 (int16x8_t)
   33235      _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'
   33236 
   33237    * uint32x2_t vqmovn_u64 (uint64x2_t)
   33238      _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0'
   33239 
   33240    * uint16x4_t vqmovn_u32 (uint32x4_t)
   33241      _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0'
   33242 
   33243    * uint8x8_t vqmovn_u16 (uint16x8_t)
   33244      _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0'
   33245 
   33246    * int32x2_t vqmovn_s64 (int64x2_t)
   33247      _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0'
   33248 
   33249    * int16x4_t vqmovn_s32 (int32x4_t)
   33250      _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0'
   33251 
   33252    * int8x8_t vqmovn_s16 (int16x8_t)
   33253      _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0'
   33254 
   33255    * uint32x2_t vqmovun_s64 (int64x2_t)
   33256      _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0'
   33257 
   33258    * uint16x4_t vqmovun_s32 (int32x4_t)
   33259      _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0'
   33260 
   33261    * uint8x8_t vqmovun_s16 (int16x8_t)
   33262      _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0'
   33263 
   33264 6.56.3.54 Move, single_opcode long
   33265 ..................................
   33266 
   33267    * uint64x2_t vmovl_u32 (uint32x2_t)
   33268      _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0'
   33269 
   33270    * uint32x4_t vmovl_u16 (uint16x4_t)
   33271      _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0'
   33272 
   33273    * uint16x8_t vmovl_u8 (uint8x8_t)
   33274      _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0'
   33275 
   33276    * int64x2_t vmovl_s32 (int32x2_t)
   33277      _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0'
   33278 
   33279    * int32x4_t vmovl_s16 (int16x4_t)
   33280      _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0'
   33281 
   33282    * int16x8_t vmovl_s8 (int8x8_t)
   33283      _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0'
   33284 
   33285 6.56.3.55 Table lookup
   33286 ......................
   33287 
   33288    * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
   33289      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
   33290 
   33291    * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
   33292      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
   33293 
   33294    * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
   33295      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'
   33296 
   33297    * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
   33298      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
   33299 
   33300    * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
   33301      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
   33302 
   33303    * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
   33304      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'
   33305 
   33306    * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
   33307      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
   33308 
   33309    * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
   33310      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
   33311 
   33312    * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
   33313      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'
   33314 
   33315    * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
   33316      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
   33317      D0'
   33318 
   33319    * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
   33320      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
   33321      D0'
   33322 
   33323    * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
   33324      _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
   33325      D0'
   33326 
   33327 6.56.3.56 Extended table lookup
   33328 ...............................
   33329 
   33330    * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
   33331      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
   33332 
   33333    * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
   33334      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
   33335 
   33336    * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   33337      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'
   33338 
   33339    * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
   33340      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
   33341 
   33342    * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
   33343      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
   33344 
   33345    * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
   33346      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'
   33347 
   33348    * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
   33349      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
   33350 
   33351    * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
   33352      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
   33353 
   33354    * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
   33355      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'
   33356 
   33357    * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
   33358      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
   33359      D0'
   33360 
   33361    * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
   33362      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
   33363      D0'
   33364 
   33365    * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
   33366      _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
   33367      D0'
   33368 
   33369 6.56.3.57 Multiply, lane
   33370 ........................
   33371 
   33372    * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
   33373      _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'
   33374 
   33375    * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
   33376      _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
   33377 
   33378    * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
   33379      _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
   33380 
   33381    * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
   33382      _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
   33383 
   33384    * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
   33385      _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
   33386 
   33387    * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
   33388      _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'
   33389 
   33390    * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
   33391      _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
   33392 
   33393    * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
   33394      _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
   33395 
   33396    * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
   33397      _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
   33398 
   33399    * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
   33400      _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
   33401 
   33402 6.56.3.58 Long multiply, lane
   33403 .............................
   33404 
   33405    * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
   33406      _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'
   33407 
   33408    * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
   33409      _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'
   33410 
   33411    * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
   33412      _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'
   33413 
   33414    * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
   33415      _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'
   33416 
   33417 6.56.3.59 Saturating doubling long multiply, lane
   33418 .................................................
   33419 
   33420    * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
   33421      _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'
   33422 
   33423    * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
   33424      _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'
   33425 
   33426 6.56.3.60 Saturating doubling multiply high, lane
   33427 .................................................
   33428 
   33429    * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   33430      _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'
   33431 
   33432    * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   33433      _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'
   33434 
   33435    * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   33436      _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'
   33437 
   33438    * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   33439      _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'
   33440 
   33441    * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   33442      _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'
   33443 
   33444    * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   33445      _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'
   33446 
   33447    * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   33448      _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'
   33449 
   33450    * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   33451      _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'
   33452 
   33453 6.56.3.61 Multiply-accumulate, lane
   33454 ...................................
   33455 
   33456    * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   33457      const int)
   33458      _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'
   33459 
   33460    * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
   33461      int)
   33462      _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
   33463 
   33464    * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
   33465      int)
   33466      _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
   33467 
   33468    * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   33469      int)
   33470      _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
   33471 
   33472    * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   33473      int)
   33474      _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
   33475 
   33476    * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   33477      const int)
   33478      _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'
   33479 
   33480    * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   33481      const int)
   33482      _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
   33483 
   33484    * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   33485      const int)
   33486      _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
   33487 
   33488    * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   33489      int)
   33490      _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
   33491 
   33492    * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   33493      int)
   33494      _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
   33495 
   33496    * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   33497      const int)
   33498      _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'
   33499 
   33500    * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   33501      const int)
   33502      _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'
   33503 
   33504    * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33505      int)
   33506      _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'
   33507 
   33508    * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33509      int)
   33510      _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'
   33511 
   33512    * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33513      int)
   33514      _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'
   33515 
   33516    * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33517      int)
   33518      _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'
   33519 
   33520 6.56.3.62 Multiply-subtract, lane
   33521 .................................
   33522 
   33523    * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   33524      const int)
   33525      _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'
   33526 
   33527    * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
   33528      int)
   33529      _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
   33530 
   33531    * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
   33532      int)
   33533      _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
   33534 
   33535    * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   33536      int)
   33537      _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
   33538 
   33539    * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   33540      int)
   33541      _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
   33542 
   33543    * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   33544      const int)
   33545      _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'
   33546 
   33547    * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   33548      const int)
   33549      _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
   33550 
   33551    * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   33552      const int)
   33553      _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
   33554 
   33555    * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   33556      int)
   33557      _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
   33558 
   33559    * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   33560      int)
   33561      _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
   33562 
   33563    * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   33564      const int)
   33565      _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'
   33566 
   33567    * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   33568      const int)
   33569      _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'
   33570 
   33571    * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33572      int)
   33573      _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'
   33574 
   33575    * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33576      int)
   33577      _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'
   33578 
   33579    * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   33580      int)
   33581      _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'
   33582 
   33583    * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   33584      int)
   33585      _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'
   33586 
   33587 6.56.3.63 Vector multiply by scalar
   33588 ...................................
   33589 
   33590    * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
   33591      _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'
   33592 
   33593    * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
   33594      _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
   33595 
   33596    * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
   33597      _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
   33598 
   33599    * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
   33600      _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'
   33601 
   33602    * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
   33603      _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'
   33604 
   33605    * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
   33606      _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'
   33607 
   33608    * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
   33609      _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
   33610 
   33611    * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
   33612      _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
   33613 
   33614    * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
   33615      _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'
   33616 
   33617    * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
   33618      _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'
   33619 
   33620 6.56.3.64 Vector long multiply by scalar
   33621 ........................................
   33622 
   33623    * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
   33624      _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'
   33625 
   33626    * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
   33627      _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'
   33628 
   33629    * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
   33630      _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'
   33631 
   33632    * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
   33633      _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'
   33634 
   33635 6.56.3.65 Vector saturating doubling long multiply by scalar
   33636 ............................................................
   33637 
   33638    * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
   33639      _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'
   33640 
   33641    * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
   33642      _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'
   33643 
   33644 6.56.3.66 Vector saturating doubling multiply high by scalar
   33645 ............................................................
   33646 
   33647    * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
   33648      _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'
   33649 
   33650    * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
   33651      _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'
   33652 
   33653    * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
   33654      _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'
   33655 
   33656    * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
   33657      _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'
   33658 
   33659    * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
   33660      _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'
   33661 
   33662    * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
   33663      _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'
   33664 
   33665    * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
   33666      _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'
   33667 
   33668    * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
   33669      _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'
   33670 
   33671 6.56.3.67 Vector multiply-accumulate by scalar
   33672 ..............................................
   33673 
   33674    * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
   33675      _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'
   33676 
   33677    * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   33678      _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
   33679 
   33680    * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   33681      _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
   33682 
   33683    * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
   33684      _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'
   33685 
   33686    * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
   33687      _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'
   33688 
   33689    * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
   33690      _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'
   33691 
   33692    * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   33693      _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
   33694 
   33695    * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   33696      _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
   33697 
   33698    * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
   33699      _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'
   33700 
   33701    * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
   33702      _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'
   33703 
   33704    * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   33705      _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'
   33706 
   33707    * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   33708      _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'
   33709 
   33710    * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   33711      _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'
   33712 
   33713    * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   33714      _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'
   33715 
   33716    * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   33717      _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'
   33718 
   33719    * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   33720      _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'
   33721 
   33722 6.56.3.68 Vector multiply-subtract by scalar
   33723 ............................................
   33724 
   33725    * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
   33726      _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'
   33727 
   33728    * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   33729      _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
   33730 
   33731    * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   33732      _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
   33733 
   33734    * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
   33735      _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'
   33736 
   33737    * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
   33738      _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'
   33739 
   33740    * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
   33741      _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'
   33742 
   33743    * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   33744      _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
   33745 
   33746    * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   33747      _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
   33748 
   33749    * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
   33750      _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'
   33751 
   33752    * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
   33753      _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'
   33754 
   33755    * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   33756      _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'
   33757 
   33758    * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   33759      _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'
   33760 
   33761    * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   33762      _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'
   33763 
   33764    * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   33765      _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'
   33766 
   33767    * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   33768      _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'
   33769 
   33770    * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   33771      _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'
   33772 
   33773 6.56.3.69 Vector extract
   33774 ........................
   33775 
   33776    * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
   33777      _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
   33778 
   33779    * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
   33780      _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
   33781 
   33782    * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
   33783      _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
   33784 
   33785    * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
   33786      _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
   33787 
   33788    * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
   33789      _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
   33790 
   33791    * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
   33792      _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
   33793 
   33794    * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
   33795      _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
   33796 
   33797    * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
   33798      _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'
   33799 
   33800    * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
   33801      _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'
   33802 
   33803    * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
   33804      _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'
   33805 
   33806    * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
   33807      _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'
   33808 
   33809    * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
   33810      _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
   33811 
   33812    * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
   33813      _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
   33814 
   33815    * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
   33816      _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
   33817 
   33818    * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
   33819      _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
   33820 
   33821    * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
   33822      _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
   33823 
   33824    * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
   33825      _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
   33826 
   33827    * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
   33828      _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
   33829 
   33830    * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
   33831      _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'
   33832 
   33833    * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
   33834      _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'
   33835 
   33836    * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
   33837      _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'
   33838 
   33839    * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
   33840      _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'
   33841 
   33842 6.56.3.70 Reverse elements
   33843 ..........................
   33844 
   33845    * uint32x2_t vrev64_u32 (uint32x2_t)
   33846      _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
   33847 
   33848    * uint16x4_t vrev64_u16 (uint16x4_t)
   33849      _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
   33850 
   33851    * uint8x8_t vrev64_u8 (uint8x8_t)
   33852      _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
   33853 
   33854    * int32x2_t vrev64_s32 (int32x2_t)
   33855      _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
   33856 
   33857    * int16x4_t vrev64_s16 (int16x4_t)
   33858      _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
   33859 
   33860    * int8x8_t vrev64_s8 (int8x8_t)
   33861      _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
   33862 
   33863    * float32x2_t vrev64_f32 (float32x2_t)
   33864      _Form of expected instruction(s):_ 'vrev64.32 D0, D0'
   33865 
   33866    * poly16x4_t vrev64_p16 (poly16x4_t)
   33867      _Form of expected instruction(s):_ 'vrev64.16 D0, D0'
   33868 
   33869    * poly8x8_t vrev64_p8 (poly8x8_t)
   33870      _Form of expected instruction(s):_ 'vrev64.8 D0, D0'
   33871 
   33872    * uint32x4_t vrev64q_u32 (uint32x4_t)
   33873      _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
   33874 
   33875    * uint16x8_t vrev64q_u16 (uint16x8_t)
   33876      _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
   33877 
   33878    * uint8x16_t vrev64q_u8 (uint8x16_t)
   33879      _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
   33880 
   33881    * int32x4_t vrev64q_s32 (int32x4_t)
   33882      _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
   33883 
   33884    * int16x8_t vrev64q_s16 (int16x8_t)
   33885      _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
   33886 
   33887    * int8x16_t vrev64q_s8 (int8x16_t)
   33888      _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
   33889 
   33890    * float32x4_t vrev64q_f32 (float32x4_t)
   33891      _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'
   33892 
   33893    * poly16x8_t vrev64q_p16 (poly16x8_t)
   33894      _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'
   33895 
   33896    * poly8x16_t vrev64q_p8 (poly8x16_t)
   33897      _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'
   33898 
   33899    * uint16x4_t vrev32_u16 (uint16x4_t)
   33900      _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
   33901 
   33902    * int16x4_t vrev32_s16 (int16x4_t)
   33903      _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
   33904 
   33905    * uint8x8_t vrev32_u8 (uint8x8_t)
   33906      _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
   33907 
   33908    * int8x8_t vrev32_s8 (int8x8_t)
   33909      _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
   33910 
   33911    * poly16x4_t vrev32_p16 (poly16x4_t)
   33912      _Form of expected instruction(s):_ 'vrev32.16 D0, D0'
   33913 
   33914    * poly8x8_t vrev32_p8 (poly8x8_t)
   33915      _Form of expected instruction(s):_ 'vrev32.8 D0, D0'
   33916 
   33917    * uint16x8_t vrev32q_u16 (uint16x8_t)
   33918      _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
   33919 
   33920    * int16x8_t vrev32q_s16 (int16x8_t)
   33921      _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
   33922 
   33923    * uint8x16_t vrev32q_u8 (uint8x16_t)
   33924      _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
   33925 
   33926    * int8x16_t vrev32q_s8 (int8x16_t)
   33927      _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
   33928 
   33929    * poly16x8_t vrev32q_p16 (poly16x8_t)
   33930      _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'
   33931 
   33932    * poly8x16_t vrev32q_p8 (poly8x16_t)
   33933      _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'
   33934 
   33935    * uint8x8_t vrev16_u8 (uint8x8_t)
   33936      _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
   33937 
   33938    * int8x8_t vrev16_s8 (int8x8_t)
   33939      _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
   33940 
   33941    * poly8x8_t vrev16_p8 (poly8x8_t)
   33942      _Form of expected instruction(s):_ 'vrev16.8 D0, D0'
   33943 
   33944    * uint8x16_t vrev16q_u8 (uint8x16_t)
   33945      _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
   33946 
   33947    * int8x16_t vrev16q_s8 (int8x16_t)
   33948      _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
   33949 
   33950    * poly8x16_t vrev16q_p8 (poly8x16_t)
   33951      _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'
   33952 
   33953 6.56.3.71 Bit selection
   33954 .......................
   33955 
   33956    * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   33957      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33958      D0, D0' _or_ 'vbif D0, D0, D0'
   33959 
   33960    * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   33961      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33962      D0, D0' _or_ 'vbif D0, D0, D0'
   33963 
   33964    * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   33965      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33966      D0, D0' _or_ 'vbif D0, D0, D0'
   33967 
   33968    * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
   33969      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33970      D0, D0' _or_ 'vbif D0, D0, D0'
   33971 
   33972    * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
   33973      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33974      D0, D0' _or_ 'vbif D0, D0, D0'
   33975 
   33976    * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
   33977      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33978      D0, D0' _or_ 'vbif D0, D0, D0'
   33979 
   33980    * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
   33981      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33982      D0, D0' _or_ 'vbif D0, D0, D0'
   33983 
   33984    * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
   33985      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33986      D0, D0' _or_ 'vbif D0, D0, D0'
   33987 
   33988    * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
   33989      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33990      D0, D0' _or_ 'vbif D0, D0, D0'
   33991 
   33992    * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
   33993      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33994      D0, D0' _or_ 'vbif D0, D0, D0'
   33995 
   33996    * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
   33997      _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
   33998      D0, D0' _or_ 'vbif D0, D0, D0'
   33999 
   34000    * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   34001      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34002      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34003 
   34004    * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   34005      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34006      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34007 
   34008    * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   34009      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34010      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34011 
   34012    * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
   34013      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34014      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34015 
   34016    * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
   34017      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34018      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34019 
   34020    * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
   34021      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34022      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34023 
   34024    * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
   34025      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34026      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34027 
   34028    * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
   34029      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34030      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34031 
   34032    * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
   34033      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34034      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34035 
   34036    * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
   34037      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34038      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34039 
   34040    * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
   34041      _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
   34042      Q0, Q0' _or_ 'vbif Q0, Q0, Q0'
   34043 
   34044 6.56.3.72 Transpose elements
   34045 ............................
   34046 
   34047    * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
   34048      _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
   34049 
   34050    * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
   34051      _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
   34052 
   34053    * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
   34054      _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
   34055 
   34056    * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
   34057      _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
   34058 
   34059    * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
   34060      _Form of expected instruction(s):_ 'vtrn.16 D0, D1'
   34061 
   34062    * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
   34063      _Form of expected instruction(s):_ 'vtrn.8 D0, D1'
   34064 
   34065    * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
   34066      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34067 
   34068    * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
   34069      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34070 
   34071    * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
   34072      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34073 
   34074    * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
   34075      _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
   34076 
   34077    * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
   34078      _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
   34079 
   34080    * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
   34081      _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
   34082 
   34083    * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
   34084      _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
   34085 
   34086    * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
   34087      _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
   34088 
   34089    * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
   34090      _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
   34091 
   34092    * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
   34093      _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'
   34094 
   34095    * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
   34096      _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'
   34097 
   34098    * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
   34099      _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'
   34100 
   34101 6.56.3.73 Zip elements
   34102 ......................
   34103 
   34104    * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
   34105      _Form of expected instruction(s):_ 'vzip.16 D0, D1'
   34106 
   34107    * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
   34108      _Form of expected instruction(s):_ 'vzip.8 D0, D1'
   34109 
   34110    * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
   34111      _Form of expected instruction(s):_ 'vzip.16 D0, D1'
   34112 
   34113    * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
   34114      _Form of expected instruction(s):_ 'vzip.8 D0, D1'
   34115 
   34116    * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
   34117      _Form of expected instruction(s):_ 'vzip.16 D0, D1'
   34118 
   34119    * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
   34120      _Form of expected instruction(s):_ 'vzip.8 D0, D1'
   34121 
   34122    * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
   34123      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34124 
   34125    * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
   34126      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34127 
   34128    * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
   34129      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34130 
   34131    * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
   34132      _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
   34133 
   34134    * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
   34135      _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
   34136 
   34137    * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
   34138      _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
   34139 
   34140    * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
   34141      _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
   34142 
   34143    * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
   34144      _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
   34145 
   34146    * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
   34147      _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
   34148 
   34149    * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
   34150      _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'
   34151 
   34152    * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
   34153      _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'
   34154 
   34155    * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
   34156      _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'
   34157 
   34158 6.56.3.74 Unzip elements
   34159 ........................
   34160 
   34161    * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
   34162      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34163 
   34164    * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
   34165      _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
   34166 
   34167    * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
   34168      _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
   34169 
   34170    * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
   34171      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34172 
   34173    * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
   34174      _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
   34175 
   34176    * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
   34177      _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
   34178 
   34179    * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
   34180      _Form of expected instruction(s):_ 'vuzp.32 D0, D1'
   34181 
   34182    * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
   34183      _Form of expected instruction(s):_ 'vuzp.16 D0, D1'
   34184 
   34185    * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
   34186      _Form of expected instruction(s):_ 'vuzp.8 D0, D1'
   34187 
   34188    * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
   34189      _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
   34190 
   34191    * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
   34192      _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
   34193 
   34194    * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
   34195      _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
   34196 
   34197    * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
   34198      _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
   34199 
   34200    * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
   34201      _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
   34202 
   34203    * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
   34204      _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
   34205 
   34206    * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
   34207      _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'
   34208 
   34209    * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
   34210      _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'
   34211 
   34212    * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
   34213      _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'
   34214 
   34215 6.56.3.75 Element/structure loads, VLD1 variants
   34216 ................................................
   34217 
   34218    * uint32x2_t vld1_u32 (const uint32_t *)
   34219      _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
   34220 
   34221    * uint16x4_t vld1_u16 (const uint16_t *)
   34222      _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
   34223 
   34224    * uint8x8_t vld1_u8 (const uint8_t *)
   34225      _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
   34226 
   34227    * int32x2_t vld1_s32 (const int32_t *)
   34228      _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
   34229 
   34230    * int16x4_t vld1_s16 (const int16_t *)
   34231      _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
   34232 
   34233    * int8x8_t vld1_s8 (const int8_t *)
   34234      _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
   34235 
   34236    * uint64x1_t vld1_u64 (const uint64_t *)
   34237      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34238 
   34239    * int64x1_t vld1_s64 (const int64_t *)
   34240      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34241 
   34242    * float32x2_t vld1_f32 (const float32_t *)
   34243      _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'
   34244 
   34245    * poly16x4_t vld1_p16 (const poly16_t *)
   34246      _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'
   34247 
   34248    * poly8x8_t vld1_p8 (const poly8_t *)
   34249      _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'
   34250 
   34251    * uint32x4_t vld1q_u32 (const uint32_t *)
   34252      _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
   34253 
   34254    * uint16x8_t vld1q_u16 (const uint16_t *)
   34255      _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
   34256 
   34257    * uint8x16_t vld1q_u8 (const uint8_t *)
   34258      _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
   34259 
   34260    * int32x4_t vld1q_s32 (const int32_t *)
   34261      _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
   34262 
   34263    * int16x8_t vld1q_s16 (const int16_t *)
   34264      _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
   34265 
   34266    * int8x16_t vld1q_s8 (const int8_t *)
   34267      _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
   34268 
   34269    * uint64x2_t vld1q_u64 (const uint64_t *)
   34270      _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
   34271 
   34272    * int64x2_t vld1q_s64 (const int64_t *)
   34273      _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
   34274 
   34275    * float32x4_t vld1q_f32 (const float32_t *)
   34276      _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'
   34277 
   34278    * poly16x8_t vld1q_p16 (const poly16_t *)
   34279      _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'
   34280 
   34281    * poly8x16_t vld1q_p8 (const poly8_t *)
   34282      _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'
   34283 
   34284    * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
   34285      _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
   34286 
   34287    * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
   34288      _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
   34289 
   34290    * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
   34291      _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
   34292 
   34293    * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
   34294      _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
   34295 
   34296    * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
   34297      _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
   34298 
   34299    * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
   34300      _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
   34301 
   34302    * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
   34303      int)
   34304      _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
   34305 
   34306    * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
   34307      _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
   34308 
   34309    * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
   34310      _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
   34311 
   34312    * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
   34313      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34314 
   34315    * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
   34316      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34317 
   34318    * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
   34319 
   34320      _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
   34321 
   34322    * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
   34323 
   34324      _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
   34325 
   34326    * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
   34327      _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
   34328 
   34329    * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
   34330      _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
   34331 
   34332    * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
   34333      _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
   34334 
   34335    * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
   34336      _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
   34337 
   34338    * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
   34339      int)
   34340      _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'
   34341 
   34342    * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
   34343 
   34344      _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'
   34345 
   34346    * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
   34347      _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'
   34348 
   34349    * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
   34350 
   34351      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34352 
   34353    * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
   34354      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34355 
   34356    * uint32x2_t vld1_dup_u32 (const uint32_t *)
   34357      _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
   34358 
   34359    * uint16x4_t vld1_dup_u16 (const uint16_t *)
   34360      _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
   34361 
   34362    * uint8x8_t vld1_dup_u8 (const uint8_t *)
   34363      _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
   34364 
   34365    * int32x2_t vld1_dup_s32 (const int32_t *)
   34366      _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
   34367 
   34368    * int16x4_t vld1_dup_s16 (const int16_t *)
   34369      _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
   34370 
   34371    * int8x8_t vld1_dup_s8 (const int8_t *)
   34372      _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
   34373 
   34374    * float32x2_t vld1_dup_f32 (const float32_t *)
   34375      _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'
   34376 
   34377    * poly16x4_t vld1_dup_p16 (const poly16_t *)
   34378      _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'
   34379 
   34380    * poly8x8_t vld1_dup_p8 (const poly8_t *)
   34381      _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'
   34382 
   34383    * uint64x1_t vld1_dup_u64 (const uint64_t *)
   34384      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34385 
   34386    * int64x1_t vld1_dup_s64 (const int64_t *)
   34387      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34388 
   34389    * uint32x4_t vld1q_dup_u32 (const uint32_t *)
   34390      _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
   34391 
   34392    * uint16x8_t vld1q_dup_u16 (const uint16_t *)
   34393      _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
   34394 
   34395    * uint8x16_t vld1q_dup_u8 (const uint8_t *)
   34396      _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
   34397 
   34398    * int32x4_t vld1q_dup_s32 (const int32_t *)
   34399      _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
   34400 
   34401    * int16x8_t vld1q_dup_s16 (const int16_t *)
   34402      _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
   34403 
   34404    * int8x16_t vld1q_dup_s8 (const int8_t *)
   34405      _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
   34406 
   34407    * float32x4_t vld1q_dup_f32 (const float32_t *)
   34408      _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'
   34409 
   34410    * poly16x8_t vld1q_dup_p16 (const poly16_t *)
   34411      _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'
   34412 
   34413    * poly8x16_t vld1q_dup_p8 (const poly8_t *)
   34414      _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'
   34415 
   34416    * uint64x2_t vld1q_dup_u64 (const uint64_t *)
   34417      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34418 
   34419    * int64x2_t vld1q_dup_s64 (const int64_t *)
   34420      _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'
   34421 
   34422 6.56.3.76 Element/structure stores, VST1 variants
   34423 .................................................
   34424 
   34425    * void vst1_u32 (uint32_t *, uint32x2_t)
   34426      _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
   34427 
   34428    * void vst1_u16 (uint16_t *, uint16x4_t)
   34429      _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
   34430 
   34431    * void vst1_u8 (uint8_t *, uint8x8_t)
   34432      _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
   34433 
   34434    * void vst1_s32 (int32_t *, int32x2_t)
   34435      _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
   34436 
   34437    * void vst1_s16 (int16_t *, int16x4_t)
   34438      _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
   34439 
   34440    * void vst1_s8 (int8_t *, int8x8_t)
   34441      _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
   34442 
   34443    * void vst1_u64 (uint64_t *, uint64x1_t)
   34444      _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
   34445 
   34446    * void vst1_s64 (int64_t *, int64x1_t)
   34447      _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
   34448 
   34449    * void vst1_f32 (float32_t *, float32x2_t)
   34450      _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'
   34451 
   34452    * void vst1_p16 (poly16_t *, poly16x4_t)
   34453      _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'
   34454 
   34455    * void vst1_p8 (poly8_t *, poly8x8_t)
   34456      _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'
   34457 
   34458    * void vst1q_u32 (uint32_t *, uint32x4_t)
   34459      _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
   34460 
   34461    * void vst1q_u16 (uint16_t *, uint16x8_t)
   34462      _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
   34463 
   34464    * void vst1q_u8 (uint8_t *, uint8x16_t)
   34465      _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
   34466 
   34467    * void vst1q_s32 (int32_t *, int32x4_t)
   34468      _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
   34469 
   34470    * void vst1q_s16 (int16_t *, int16x8_t)
   34471      _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
   34472 
   34473    * void vst1q_s8 (int8_t *, int8x16_t)
   34474      _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
   34475 
   34476    * void vst1q_u64 (uint64_t *, uint64x2_t)
   34477      _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
   34478 
   34479    * void vst1q_s64 (int64_t *, int64x2_t)
   34480      _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
   34481 
   34482    * void vst1q_f32 (float32_t *, float32x4_t)
   34483      _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'
   34484 
   34485    * void vst1q_p16 (poly16_t *, poly16x8_t)
   34486      _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'
   34487 
   34488    * void vst1q_p8 (poly8_t *, poly8x16_t)
   34489      _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'
   34490 
   34491    * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
   34492      _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
   34493 
   34494    * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
   34495      _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
   34496 
   34497    * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
   34498      _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
   34499 
   34500    * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
   34501      _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
   34502 
   34503    * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
   34504      _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
   34505 
   34506    * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
   34507      _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
   34508 
   34509    * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
   34510      _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
   34511 
   34512    * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
   34513      _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
   34514 
   34515    * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
   34516      _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
   34517 
   34518    * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
   34519      _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
   34520 
   34521    * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
   34522      _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
   34523 
   34524    * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
   34525      _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
   34526 
   34527    * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
   34528      _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
   34529 
   34530    * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
   34531      _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
   34532 
   34533    * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
   34534      _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
   34535 
   34536    * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
   34537      _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
   34538 
   34539    * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
   34540      _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
   34541 
   34542    * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
   34543      _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'
   34544 
   34545    * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
   34546      _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'
   34547 
   34548    * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
   34549      _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'
   34550 
   34551    * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
   34552      _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
   34553 
   34554    * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
   34555      _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'
   34556 
   34557 6.56.3.77 Element/structure loads, VLD2 variants
   34558 ................................................
   34559 
   34560    * uint32x2x2_t vld2_u32 (const uint32_t *)
   34561      _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
   34562 
   34563    * uint16x4x2_t vld2_u16 (const uint16_t *)
   34564      _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
   34565 
   34566    * uint8x8x2_t vld2_u8 (const uint8_t *)
   34567      _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
   34568 
   34569    * int32x2x2_t vld2_s32 (const int32_t *)
   34570      _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
   34571 
   34572    * int16x4x2_t vld2_s16 (const int16_t *)
   34573      _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
   34574 
   34575    * int8x8x2_t vld2_s8 (const int8_t *)
   34576      _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
   34577 
   34578    * float32x2x2_t vld2_f32 (const float32_t *)
   34579      _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
   34580 
   34581    * poly16x4x2_t vld2_p16 (const poly16_t *)
   34582      _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
   34583 
   34584    * poly8x8x2_t vld2_p8 (const poly8_t *)
   34585      _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
   34586 
   34587    * uint64x1x2_t vld2_u64 (const uint64_t *)
   34588      _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
   34589 
   34590    * int64x1x2_t vld2_s64 (const int64_t *)
   34591      _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
   34592 
   34593    * uint32x4x2_t vld2q_u32 (const uint32_t *)
   34594      _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
   34595 
   34596    * uint16x8x2_t vld2q_u16 (const uint16_t *)
   34597      _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
   34598 
   34599    * uint8x16x2_t vld2q_u8 (const uint8_t *)
   34600      _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
   34601 
   34602    * int32x4x2_t vld2q_s32 (const int32_t *)
   34603      _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
   34604 
   34605    * int16x8x2_t vld2q_s16 (const int16_t *)
   34606      _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
   34607 
   34608    * int8x16x2_t vld2q_s8 (const int8_t *)
   34609      _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
   34610 
   34611    * float32x4x2_t vld2q_f32 (const float32_t *)
   34612      _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'
   34613 
   34614    * poly16x8x2_t vld2q_p16 (const poly16_t *)
   34615      _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'
   34616 
   34617    * poly8x16x2_t vld2q_p8 (const poly8_t *)
   34618      _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'
   34619 
   34620    * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
   34621      int)
   34622      _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
   34623 
   34624    * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
   34625      int)
   34626      _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
   34627 
   34628    * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
   34629      _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
   34630 
   34631    * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
   34632 
   34633      _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
   34634 
   34635    * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
   34636 
   34637      _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
   34638 
   34639    * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
   34640      _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
   34641 
   34642    * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
   34643      const int)
   34644      _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
   34645 
   34646    * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
   34647      int)
   34648      _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
   34649 
   34650    * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
   34651      _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'
   34652 
   34653    * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
   34654      int)
   34655      _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
   34656 
   34657    * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
   34658      int)
   34659      _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
   34660 
   34661    * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
   34662      int)
   34663      _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
   34664 
   34665    * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
   34666      int)
   34667      _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
   34668 
   34669    * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
   34670      const int)
   34671      _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'
   34672 
   34673    * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
   34674      int)
   34675      _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'
   34676 
   34677    * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
   34678      _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
   34679 
   34680    * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
   34681      _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
   34682 
   34683    * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
   34684      _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
   34685 
   34686    * int32x2x2_t vld2_dup_s32 (const int32_t *)
   34687      _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
   34688 
   34689    * int16x4x2_t vld2_dup_s16 (const int16_t *)
   34690      _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
   34691 
   34692    * int8x8x2_t vld2_dup_s8 (const int8_t *)
   34693      _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
   34694 
   34695    * float32x2x2_t vld2_dup_f32 (const float32_t *)
   34696      _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'
   34697 
   34698    * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
   34699      _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'
   34700 
   34701    * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
   34702      _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'
   34703 
   34704    * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
   34705      _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
   34706 
   34707    * int64x1x2_t vld2_dup_s64 (const int64_t *)
   34708      _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'
   34709 
   34710 6.56.3.78 Element/structure stores, VST2 variants
   34711 .................................................
   34712 
   34713    * void vst2_u32 (uint32_t *, uint32x2x2_t)
   34714      _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
   34715 
   34716    * void vst2_u16 (uint16_t *, uint16x4x2_t)
   34717      _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
   34718 
   34719    * void vst2_u8 (uint8_t *, uint8x8x2_t)
   34720      _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
   34721 
   34722    * void vst2_s32 (int32_t *, int32x2x2_t)
   34723      _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
   34724 
   34725    * void vst2_s16 (int16_t *, int16x4x2_t)
   34726      _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
   34727 
   34728    * void vst2_s8 (int8_t *, int8x8x2_t)
   34729      _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
   34730 
   34731    * void vst2_f32 (float32_t *, float32x2x2_t)
   34732      _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
   34733 
   34734    * void vst2_p16 (poly16_t *, poly16x4x2_t)
   34735      _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
   34736 
   34737    * void vst2_p8 (poly8_t *, poly8x8x2_t)
   34738      _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
   34739 
   34740    * void vst2_u64 (uint64_t *, uint64x1x2_t)
   34741      _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
   34742 
   34743    * void vst2_s64 (int64_t *, int64x1x2_t)
   34744      _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'
   34745 
   34746    * void vst2q_u32 (uint32_t *, uint32x4x2_t)
   34747      _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
   34748 
   34749    * void vst2q_u16 (uint16_t *, uint16x8x2_t)
   34750      _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
   34751 
   34752    * void vst2q_u8 (uint8_t *, uint8x16x2_t)
   34753      _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
   34754 
   34755    * void vst2q_s32 (int32_t *, int32x4x2_t)
   34756      _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
   34757 
   34758    * void vst2q_s16 (int16_t *, int16x8x2_t)
   34759      _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
   34760 
   34761    * void vst2q_s8 (int8_t *, int8x16x2_t)
   34762      _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
   34763 
   34764    * void vst2q_f32 (float32_t *, float32x4x2_t)
   34765      _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'
   34766 
   34767    * void vst2q_p16 (poly16_t *, poly16x8x2_t)
   34768      _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'
   34769 
   34770    * void vst2q_p8 (poly8_t *, poly8x16x2_t)
   34771      _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'
   34772 
   34773    * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
   34774      _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
   34775 
   34776    * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
   34777      _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
   34778 
   34779    * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
   34780      _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
   34781 
   34782    * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
   34783      _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
   34784 
   34785    * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
   34786      _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
   34787 
   34788    * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
   34789      _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
   34790 
   34791    * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
   34792      _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
   34793 
   34794    * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
   34795      _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
   34796 
   34797    * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
   34798      _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'
   34799 
   34800    * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
   34801      _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
   34802 
   34803    * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
   34804      _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
   34805 
   34806    * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
   34807      _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
   34808 
   34809    * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
   34810      _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
   34811 
   34812    * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
   34813      _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'
   34814 
   34815    * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
   34816      _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'
   34817 
   34818 6.56.3.79 Element/structure loads, VLD3 variants
   34819 ................................................
   34820 
   34821    * uint32x2x3_t vld3_u32 (const uint32_t *)
   34822      _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
   34823 
   34824    * uint16x4x3_t vld3_u16 (const uint16_t *)
   34825      _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
   34826 
   34827    * uint8x8x3_t vld3_u8 (const uint8_t *)
   34828      _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
   34829 
   34830    * int32x2x3_t vld3_s32 (const int32_t *)
   34831      _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
   34832 
   34833    * int16x4x3_t vld3_s16 (const int16_t *)
   34834      _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
   34835 
   34836    * int8x8x3_t vld3_s8 (const int8_t *)
   34837      _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
   34838 
   34839    * float32x2x3_t vld3_f32 (const float32_t *)
   34840      _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
   34841 
   34842    * poly16x4x3_t vld3_p16 (const poly16_t *)
   34843      _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
   34844 
   34845    * poly8x8x3_t vld3_p8 (const poly8_t *)
   34846      _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
   34847 
   34848    * uint64x1x3_t vld3_u64 (const uint64_t *)
   34849      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
   34850 
   34851    * int64x1x3_t vld3_s64 (const int64_t *)
   34852      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
   34853 
   34854    * uint32x4x3_t vld3q_u32 (const uint32_t *)
   34855      _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
   34856 
   34857    * uint16x8x3_t vld3q_u16 (const uint16_t *)
   34858      _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
   34859 
   34860    * uint8x16x3_t vld3q_u8 (const uint8_t *)
   34861      _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
   34862 
   34863    * int32x4x3_t vld3q_s32 (const int32_t *)
   34864      _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
   34865 
   34866    * int16x8x3_t vld3q_s16 (const int16_t *)
   34867      _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
   34868 
   34869    * int8x16x3_t vld3q_s8 (const int8_t *)
   34870      _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
   34871 
   34872    * float32x4x3_t vld3q_f32 (const float32_t *)
   34873      _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'
   34874 
   34875    * poly16x8x3_t vld3q_p16 (const poly16_t *)
   34876      _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'
   34877 
   34878    * poly8x16x3_t vld3q_p8 (const poly8_t *)
   34879      _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'
   34880 
   34881    * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
   34882      int)
   34883      _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
   34884      [R0]'
   34885 
   34886    * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
   34887      int)
   34888      _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
   34889      [R0]'
   34890 
   34891    * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
   34892      _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
   34893      [R0]'
   34894 
   34895    * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
   34896 
   34897      _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
   34898      [R0]'
   34899 
   34900    * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
   34901 
   34902      _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
   34903      [R0]'
   34904 
   34905    * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
   34906      _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
   34907      [R0]'
   34908 
   34909    * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
   34910      const int)
   34911      _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
   34912      [R0]'
   34913 
   34914    * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
   34915      int)
   34916      _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
   34917      [R0]'
   34918 
   34919    * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
   34920      _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
   34921      [R0]'
   34922 
   34923    * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
   34924      int)
   34925      _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
   34926      [R0]'
   34927 
   34928    * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
   34929      int)
   34930      _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
   34931      [R0]'
   34932 
   34933    * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
   34934      int)
   34935      _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
   34936      [R0]'
   34937 
   34938    * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
   34939      int)
   34940      _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
   34941      [R0]'
   34942 
   34943    * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
   34944      const int)
   34945      _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
   34946      [R0]'
   34947 
   34948    * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
   34949      int)
   34950      _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
   34951      [R0]'
   34952 
   34953    * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
   34954      _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
   34955      [R0]'
   34956 
   34957    * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
   34958      _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
   34959      [R0]'
   34960 
   34961    * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
   34962      _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
   34963      [R0]'
   34964 
   34965    * int32x2x3_t vld3_dup_s32 (const int32_t *)
   34966      _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
   34967      [R0]'
   34968 
   34969    * int16x4x3_t vld3_dup_s16 (const int16_t *)
   34970      _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
   34971      [R0]'
   34972 
   34973    * int8x8x3_t vld3_dup_s8 (const int8_t *)
   34974      _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
   34975      [R0]'
   34976 
   34977    * float32x2x3_t vld3_dup_f32 (const float32_t *)
   34978      _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
   34979      [R0]'
   34980 
   34981    * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
   34982      _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
   34983      [R0]'
   34984 
   34985    * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
   34986      _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
   34987      [R0]'
   34988 
   34989    * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
   34990      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
   34991 
   34992    * int64x1x3_t vld3_dup_s64 (const int64_t *)
   34993      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'
   34994 
   34995 6.56.3.80 Element/structure stores, VST3 variants
   34996 .................................................
   34997 
   34998    * void vst3_u32 (uint32_t *, uint32x2x3_t)
   34999      _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
   35000 
   35001    * void vst3_u16 (uint16_t *, uint16x4x3_t)
   35002      _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
   35003 
   35004    * void vst3_u8 (uint8_t *, uint8x8x3_t)
   35005      _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
   35006 
   35007    * void vst3_s32 (int32_t *, int32x2x3_t)
   35008      _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
   35009 
   35010    * void vst3_s16 (int16_t *, int16x4x3_t)
   35011      _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
   35012 
   35013    * void vst3_s8 (int8_t *, int8x8x3_t)
   35014      _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
   35015 
   35016    * void vst3_f32 (float32_t *, float32x2x3_t)
   35017      _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'
   35018 
   35019    * void vst3_p16 (poly16_t *, poly16x4x3_t)
   35020      _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'
   35021 
   35022    * void vst3_p8 (poly8_t *, poly8x8x3_t)
   35023      _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'
   35024 
   35025    * void vst3_u64 (uint64_t *, uint64x1x3_t)
   35026      _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
   35027 
   35028    * void vst3_s64 (int64_t *, int64x1x3_t)
   35029      _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
   35030 
   35031    * void vst3q_u32 (uint32_t *, uint32x4x3_t)
   35032      _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
   35033 
   35034    * void vst3q_u16 (uint16_t *, uint16x8x3_t)
   35035      _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
   35036 
   35037    * void vst3q_u8 (uint8_t *, uint8x16x3_t)
   35038      _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
   35039 
   35040    * void vst3q_s32 (int32_t *, int32x4x3_t)
   35041      _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
   35042 
   35043    * void vst3q_s16 (int16_t *, int16x8x3_t)
   35044      _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
   35045 
   35046    * void vst3q_s8 (int8_t *, int8x16x3_t)
   35047      _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
   35048 
   35049    * void vst3q_f32 (float32_t *, float32x4x3_t)
   35050      _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'
   35051 
   35052    * void vst3q_p16 (poly16_t *, poly16x8x3_t)
   35053      _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'
   35054 
   35055    * void vst3q_p8 (poly8_t *, poly8x16x3_t)
   35056      _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'
   35057 
   35058    * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
   35059      _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
   35060      [R0]'
   35061 
   35062    * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
   35063      _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
   35064      [R0]'
   35065 
   35066    * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
   35067      _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
   35068      [R0]'
   35069 
   35070    * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
   35071      _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
   35072      [R0]'
   35073 
   35074    * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
   35075      _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
   35076      [R0]'
   35077 
   35078    * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
   35079      _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
   35080      [R0]'
   35081 
   35082    * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
   35083      _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
   35084      [R0]'
   35085 
   35086    * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
   35087      _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
   35088      [R0]'
   35089 
   35090    * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
   35091      _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
   35092      [R0]'
   35093 
   35094    * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
   35095      _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
   35096      [R0]'
   35097 
   35098    * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
   35099      _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
   35100      [R0]'
   35101 
   35102    * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
   35103      _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
   35104      [R0]'
   35105 
   35106    * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
   35107      _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
   35108      [R0]'
   35109 
   35110    * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
   35111      _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
   35112      [R0]'
   35113 
   35114    * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
   35115      _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
   35116      [R0]'
   35117 
   35118 6.56.3.81 Element/structure loads, VLD4 variants
   35119 ................................................
   35120 
   35121    * uint32x2x4_t vld4_u32 (const uint32_t *)
   35122      _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
   35123 
   35124    * uint16x4x4_t vld4_u16 (const uint16_t *)
   35125      _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
   35126 
   35127    * uint8x8x4_t vld4_u8 (const uint8_t *)
   35128      _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
   35129 
   35130    * int32x2x4_t vld4_s32 (const int32_t *)
   35131      _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
   35132 
   35133    * int16x4x4_t vld4_s16 (const int16_t *)
   35134      _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
   35135 
   35136    * int8x8x4_t vld4_s8 (const int8_t *)
   35137      _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
   35138 
   35139    * float32x2x4_t vld4_f32 (const float32_t *)
   35140      _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
   35141 
   35142    * poly16x4x4_t vld4_p16 (const poly16_t *)
   35143      _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
   35144 
   35145    * poly8x8x4_t vld4_p8 (const poly8_t *)
   35146      _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
   35147 
   35148    * uint64x1x4_t vld4_u64 (const uint64_t *)
   35149      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
   35150 
   35151    * int64x1x4_t vld4_s64 (const int64_t *)
   35152      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
   35153 
   35154    * uint32x4x4_t vld4q_u32 (const uint32_t *)
   35155      _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
   35156 
   35157    * uint16x8x4_t vld4q_u16 (const uint16_t *)
   35158      _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
   35159 
   35160    * uint8x16x4_t vld4q_u8 (const uint8_t *)
   35161      _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
   35162 
   35163    * int32x4x4_t vld4q_s32 (const int32_t *)
   35164      _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
   35165 
   35166    * int16x8x4_t vld4q_s16 (const int16_t *)
   35167      _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
   35168 
   35169    * int8x16x4_t vld4q_s8 (const int8_t *)
   35170      _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
   35171 
   35172    * float32x4x4_t vld4q_f32 (const float32_t *)
   35173      _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'
   35174 
   35175    * poly16x8x4_t vld4q_p16 (const poly16_t *)
   35176      _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'
   35177 
   35178    * poly8x16x4_t vld4q_p8 (const poly8_t *)
   35179      _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'
   35180 
   35181    * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
   35182      int)
   35183      _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
   35184      D3[0]}, [R0]'
   35185 
   35186    * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
   35187      int)
   35188      _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
   35189      D3[0]}, [R0]'
   35190 
   35191    * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
   35192      _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
   35193      D3[0]}, [R0]'
   35194 
   35195    * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
   35196 
   35197      _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
   35198      D3[0]}, [R0]'
   35199 
   35200    * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
   35201 
   35202      _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
   35203      D3[0]}, [R0]'
   35204 
   35205    * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
   35206      _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
   35207      D3[0]}, [R0]'
   35208 
   35209    * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
   35210      const int)
   35211      _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
   35212      D3[0]}, [R0]'
   35213 
   35214    * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
   35215      int)
   35216      _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
   35217      D3[0]}, [R0]'
   35218 
   35219    * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
   35220      _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
   35221      D3[0]}, [R0]'
   35222 
   35223    * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
   35224      int)
   35225      _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
   35226      D3[0]}, [R0]'
   35227 
   35228    * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
   35229      int)
   35230      _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
   35231      D3[0]}, [R0]'
   35232 
   35233    * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
   35234      int)
   35235      _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
   35236      D3[0]}, [R0]'
   35237 
   35238    * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
   35239      int)
   35240      _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
   35241      D3[0]}, [R0]'
   35242 
   35243    * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
   35244      const int)
   35245      _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
   35246      D3[0]}, [R0]'
   35247 
   35248    * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
   35249      int)
   35250      _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
   35251      D3[0]}, [R0]'
   35252 
   35253    * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
   35254      _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
   35255      D3[]}, [R0]'
   35256 
   35257    * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
   35258      _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
   35259      D3[]}, [R0]'
   35260 
   35261    * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
   35262      _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
   35263      D3[]}, [R0]'
   35264 
   35265    * int32x2x4_t vld4_dup_s32 (const int32_t *)
   35266      _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
   35267      D3[]}, [R0]'
   35268 
   35269    * int16x4x4_t vld4_dup_s16 (const int16_t *)
   35270      _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
   35271      D3[]}, [R0]'
   35272 
   35273    * int8x8x4_t vld4_dup_s8 (const int8_t *)
   35274      _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
   35275      D3[]}, [R0]'
   35276 
   35277    * float32x2x4_t vld4_dup_f32 (const float32_t *)
   35278      _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
   35279      D3[]}, [R0]'
   35280 
   35281    * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
   35282      _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
   35283      D3[]}, [R0]'
   35284 
   35285    * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
   35286      _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
   35287      D3[]}, [R0]'
   35288 
   35289    * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
   35290      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
   35291 
   35292    * int64x1x4_t vld4_dup_s64 (const int64_t *)
   35293      _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'
   35294 
   35295 6.56.3.82 Element/structure stores, VST4 variants
   35296 .................................................
   35297 
   35298    * void vst4_u32 (uint32_t *, uint32x2x4_t)
   35299      _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
   35300 
   35301    * void vst4_u16 (uint16_t *, uint16x4x4_t)
   35302      _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
   35303 
   35304    * void vst4_u8 (uint8_t *, uint8x8x4_t)
   35305      _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
   35306 
   35307    * void vst4_s32 (int32_t *, int32x2x4_t)
   35308      _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
   35309 
   35310    * void vst4_s16 (int16_t *, int16x4x4_t)
   35311      _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
   35312 
   35313    * void vst4_s8 (int8_t *, int8x8x4_t)
   35314      _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
   35315 
   35316    * void vst4_f32 (float32_t *, float32x2x4_t)
   35317      _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
   35318 
   35319    * void vst4_p16 (poly16_t *, poly16x4x4_t)
   35320      _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
   35321 
   35322    * void vst4_p8 (poly8_t *, poly8x8x4_t)
   35323      _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
   35324 
   35325    * void vst4_u64 (uint64_t *, uint64x1x4_t)
   35326      _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
   35327 
   35328    * void vst4_s64 (int64_t *, int64x1x4_t)
   35329      _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'
   35330 
   35331    * void vst4q_u32 (uint32_t *, uint32x4x4_t)
   35332      _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
   35333 
   35334    * void vst4q_u16 (uint16_t *, uint16x8x4_t)
   35335      _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
   35336 
   35337    * void vst4q_u8 (uint8_t *, uint8x16x4_t)
   35338      _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
   35339 
   35340    * void vst4q_s32 (int32_t *, int32x4x4_t)
   35341      _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
   35342 
   35343    * void vst4q_s16 (int16_t *, int16x8x4_t)
   35344      _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
   35345 
   35346    * void vst4q_s8 (int8_t *, int8x16x4_t)
   35347      _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
   35348 
   35349    * void vst4q_f32 (float32_t *, float32x4x4_t)
   35350      _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'
   35351 
   35352    * void vst4q_p16 (poly16_t *, poly16x8x4_t)
   35353      _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'
   35354 
   35355    * void vst4q_p8 (poly8_t *, poly8x16x4_t)
   35356      _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'
   35357 
   35358    * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
   35359      _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
   35360      D3[0]}, [R0]'
   35361 
   35362    * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
   35363      _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
   35364      D3[0]}, [R0]'
   35365 
   35366    * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
   35367      _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
   35368      D3[0]}, [R0]'
   35369 
   35370    * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
   35371      _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
   35372      D3[0]}, [R0]'
   35373 
   35374    * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
   35375      _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
   35376      D3[0]}, [R0]'
   35377 
   35378    * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
   35379      _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
   35380      D3[0]}, [R0]'
   35381 
   35382    * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
   35383      _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
   35384      D3[0]}, [R0]'
   35385 
   35386    * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
   35387      _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
   35388      D3[0]}, [R0]'
   35389 
   35390    * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
   35391      _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
   35392      D3[0]}, [R0]'
   35393 
   35394    * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
   35395      _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
   35396      D3[0]}, [R0]'
   35397 
   35398    * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
   35399      _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
   35400      D3[0]}, [R0]'
   35401 
   35402    * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
   35403      _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
   35404      D3[0]}, [R0]'
   35405 
   35406    * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
   35407      _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
   35408      D3[0]}, [R0]'
   35409 
   35410    * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
   35411      _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
   35412      D3[0]}, [R0]'
   35413 
   35414    * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
   35415      _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
   35416      D3[0]}, [R0]'
   35417 
   35418 6.56.3.83 Logical operations (AND)
   35419 ..................................
   35420 
   35421    * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
   35422      _Form of expected instruction(s):_ 'vand D0, D0, D0'
   35423 
   35424    * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
   35425      _Form of expected instruction(s):_ 'vand D0, D0, D0'
   35426 
   35427    * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
   35428      _Form of expected instruction(s):_ 'vand D0, D0, D0'
   35429 
   35430    * int32x2_t vand_s32 (int32x2_t, int32x2_t)
   35431      _Form of expected instruction(s):_ 'vand D0, D0, D0'
   35432 
   35433    * int16x4_t vand_s16 (int16x4_t, int16x4_t)
   35434      _Form of expected instruction(s):_ 'vand D0, D0, D0'
   35435 
   35436    * int8x8_t vand_s8 (int8x8_t, int8x8_t)
   35437      _Form of expected instruction(s):_ 'vand D0, D0, D0'
   35438 
   35439    * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
   35440 
   35441    * int64x1_t vand_s64 (int64x1_t, int64x1_t)
   35442 
   35443    * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
   35444      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35445 
   35446    * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
   35447      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35448 
   35449    * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
   35450      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35451 
   35452    * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
   35453      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35454 
   35455    * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
   35456      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35457 
   35458    * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
   35459      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35460 
   35461    * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
   35462      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35463 
   35464    * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
   35465      _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'
   35466 
   35467 6.56.3.84 Logical operations (OR)
   35468 .................................
   35469 
   35470    * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
   35471      _Form of expected instruction(s):_ 'vorr D0, D0, D0'
   35472 
   35473    * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
   35474      _Form of expected instruction(s):_ 'vorr D0, D0, D0'
   35475 
   35476    * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
   35477      _Form of expected instruction(s):_ 'vorr D0, D0, D0'
   35478 
   35479    * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
   35480      _Form of expected instruction(s):_ 'vorr D0, D0, D0'
   35481 
   35482    * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
   35483      _Form of expected instruction(s):_ 'vorr D0, D0, D0'
   35484 
   35485    * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
   35486      _Form of expected instruction(s):_ 'vorr D0, D0, D0'
   35487 
   35488    * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
   35489 
   35490    * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
   35491 
   35492    * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
   35493      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35494 
   35495    * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
   35496      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35497 
   35498    * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
   35499      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35500 
   35501    * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
   35502      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35503 
   35504    * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
   35505      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35506 
   35507    * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
   35508      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35509 
   35510    * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
   35511      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35512 
   35513    * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
   35514      _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'
   35515 
   35516 6.56.3.85 Logical operations (exclusive OR)
   35517 ...........................................
   35518 
   35519    * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
   35520      _Form of expected instruction(s):_ 'veor D0, D0, D0'
   35521 
   35522    * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
   35523      _Form of expected instruction(s):_ 'veor D0, D0, D0'
   35524 
   35525    * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
   35526      _Form of expected instruction(s):_ 'veor D0, D0, D0'
   35527 
   35528    * int32x2_t veor_s32 (int32x2_t, int32x2_t)
   35529      _Form of expected instruction(s):_ 'veor D0, D0, D0'
   35530 
   35531    * int16x4_t veor_s16 (int16x4_t, int16x4_t)
   35532      _Form of expected instruction(s):_ 'veor D0, D0, D0'
   35533 
   35534    * int8x8_t veor_s8 (int8x8_t, int8x8_t)
   35535      _Form of expected instruction(s):_ 'veor D0, D0, D0'
   35536 
   35537    * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
   35538 
   35539    * int64x1_t veor_s64 (int64x1_t, int64x1_t)
   35540 
   35541    * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
   35542      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35543 
   35544    * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
   35545      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35546 
   35547    * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
   35548      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35549 
   35550    * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
   35551      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35552 
   35553    * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
   35554      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35555 
   35556    * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
   35557      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35558 
   35559    * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
   35560      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35561 
   35562    * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
   35563      _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'
   35564 
   35565 6.56.3.86 Logical operations (AND-NOT)
   35566 ......................................
   35567 
   35568    * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
   35569      _Form of expected instruction(s):_ 'vbic D0, D0, D0'
   35570 
   35571    * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
   35572      _Form of expected instruction(s):_ 'vbic D0, D0, D0'
   35573 
   35574    * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
   35575      _Form of expected instruction(s):_ 'vbic D0, D0, D0'
   35576 
   35577    * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
   35578      _Form of expected instruction(s):_ 'vbic D0, D0, D0'
   35579 
   35580    * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
   35581      _Form of expected instruction(s):_ 'vbic D0, D0, D0'
   35582 
   35583    * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
   35584      _Form of expected instruction(s):_ 'vbic D0, D0, D0'
   35585 
   35586    * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
   35587 
   35588    * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
   35589 
   35590    * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
   35591      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35592 
   35593    * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
   35594      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35595 
   35596    * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
   35597      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35598 
   35599    * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
   35600      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35601 
   35602    * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
   35603      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35604 
   35605    * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
   35606      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35607 
   35608    * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
   35609      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35610 
   35611    * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
   35612      _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'
   35613 
   35614 6.56.3.87 Logical operations (OR-NOT)
   35615 .....................................
   35616 
   35617    * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
   35618      _Form of expected instruction(s):_ 'vorn D0, D0, D0'
   35619 
   35620    * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
   35621      _Form of expected instruction(s):_ 'vorn D0, D0, D0'
   35622 
   35623    * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
   35624      _Form of expected instruction(s):_ 'vorn D0, D0, D0'
   35625 
   35626    * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
   35627      _Form of expected instruction(s):_ 'vorn D0, D0, D0'
   35628 
   35629    * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
   35630      _Form of expected instruction(s):_ 'vorn D0, D0, D0'
   35631 
   35632    * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
   35633      _Form of expected instruction(s):_ 'vorn D0, D0, D0'
   35634 
   35635    * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
   35636 
   35637    * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
   35638 
   35639    * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
   35640      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35641 
   35642    * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
   35643      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35644 
   35645    * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
   35646      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35647 
   35648    * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
   35649      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35650 
   35651    * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
   35652      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35653 
   35654    * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
   35655      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35656 
   35657    * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
   35658      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35659 
   35660    * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
   35661      _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'
   35662 
   35663 6.56.3.88 Reinterpret casts
   35664 ...........................
   35665 
   35666    * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
   35667 
   35668    * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
   35669 
   35670    * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
   35671 
   35672    * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
   35673 
   35674    * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
   35675 
   35676    * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
   35677 
   35678    * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
   35679 
   35680    * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
   35681 
   35682    * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
   35683 
   35684    * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
   35685 
   35686    * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
   35687 
   35688    * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
   35689 
   35690    * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
   35691 
   35692    * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
   35693 
   35694    * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
   35695 
   35696    * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
   35697 
   35698    * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
   35699 
   35700    * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
   35701 
   35702    * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
   35703 
   35704    * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
   35705 
   35706    * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
   35707 
   35708    * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
   35709 
   35710    * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
   35711 
   35712    * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
   35713 
   35714    * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
   35715 
   35716    * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
   35717 
   35718    * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
   35719 
   35720    * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
   35721 
   35722    * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
   35723 
   35724    * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
   35725 
   35726    * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
   35727 
   35728    * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
   35729 
   35730    * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
   35731 
   35732    * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
   35733 
   35734    * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
   35735 
   35736    * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
   35737 
   35738    * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
   35739 
   35740    * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
   35741 
   35742    * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
   35743 
   35744    * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
   35745 
   35746    * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
   35747 
   35748    * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
   35749 
   35750    * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
   35751 
   35752    * float32x2_t vreinterpret_f32_s32 (int32x2_t)
   35753 
   35754    * float32x2_t vreinterpret_f32_s16 (int16x4_t)
   35755 
   35756    * float32x2_t vreinterpret_f32_s8 (int8x8_t)
   35757 
   35758    * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
   35759 
   35760    * float32x2_t vreinterpret_f32_s64 (int64x1_t)
   35761 
   35762    * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
   35763 
   35764    * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
   35765 
   35766    * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
   35767 
   35768    * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
   35769 
   35770    * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
   35771 
   35772    * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
   35773 
   35774    * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
   35775 
   35776    * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
   35777 
   35778    * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
   35779 
   35780    * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
   35781 
   35782    * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
   35783 
   35784    * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
   35785 
   35786    * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
   35787 
   35788    * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
   35789 
   35790    * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
   35791 
   35792    * int64x1_t vreinterpret_s64_s32 (int32x2_t)
   35793 
   35794    * int64x1_t vreinterpret_s64_s16 (int16x4_t)
   35795 
   35796    * int64x1_t vreinterpret_s64_s8 (int8x8_t)
   35797 
   35798    * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
   35799 
   35800    * int64x1_t vreinterpret_s64_f32 (float32x2_t)
   35801 
   35802    * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
   35803 
   35804    * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
   35805 
   35806    * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
   35807 
   35808    * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
   35809 
   35810    * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
   35811 
   35812    * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
   35813 
   35814    * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
   35815 
   35816    * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
   35817 
   35818    * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
   35819 
   35820    * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
   35821 
   35822    * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
   35823 
   35824    * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
   35825 
   35826    * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
   35827 
   35828    * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
   35829 
   35830    * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
   35831 
   35832    * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
   35833 
   35834    * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
   35835 
   35836    * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
   35837 
   35838    * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
   35839 
   35840    * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
   35841 
   35842    * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
   35843 
   35844    * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
   35845 
   35846    * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
   35847 
   35848    * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
   35849 
   35850    * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
   35851 
   35852    * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
   35853 
   35854    * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
   35855 
   35856    * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
   35857 
   35858    * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
   35859 
   35860    * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
   35861 
   35862    * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
   35863 
   35864    * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
   35865 
   35866    * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
   35867 
   35868    * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
   35869 
   35870    * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
   35871 
   35872    * int8x8_t vreinterpret_s8_s32 (int32x2_t)
   35873 
   35874    * int8x8_t vreinterpret_s8_s16 (int16x4_t)
   35875 
   35876    * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
   35877 
   35878    * int8x8_t vreinterpret_s8_s64 (int64x1_t)
   35879 
   35880    * int8x8_t vreinterpret_s8_f32 (float32x2_t)
   35881 
   35882    * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
   35883 
   35884    * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
   35885 
   35886    * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
   35887 
   35888    * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
   35889 
   35890    * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
   35891 
   35892    * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
   35893 
   35894    * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
   35895 
   35896    * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
   35897 
   35898    * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
   35899 
   35900    * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
   35901 
   35902    * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
   35903 
   35904    * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
   35905 
   35906    * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
   35907 
   35908    * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
   35909 
   35910    * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
   35911 
   35912    * int16x4_t vreinterpret_s16_s32 (int32x2_t)
   35913 
   35914    * int16x4_t vreinterpret_s16_s8 (int8x8_t)
   35915 
   35916    * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
   35917 
   35918    * int16x4_t vreinterpret_s16_s64 (int64x1_t)
   35919 
   35920    * int16x4_t vreinterpret_s16_f32 (float32x2_t)
   35921 
   35922    * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
   35923 
   35924    * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
   35925 
   35926    * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
   35927 
   35928    * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
   35929 
   35930    * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
   35931 
   35932    * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
   35933 
   35934    * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
   35935 
   35936    * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
   35937 
   35938    * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
   35939 
   35940    * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
   35941 
   35942    * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
   35943 
   35944    * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
   35945 
   35946    * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
   35947 
   35948    * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
   35949 
   35950    * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
   35951 
   35952    * int32x2_t vreinterpret_s32_s16 (int16x4_t)
   35953 
   35954    * int32x2_t vreinterpret_s32_s8 (int8x8_t)
   35955 
   35956    * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
   35957 
   35958    * int32x2_t vreinterpret_s32_s64 (int64x1_t)
   35959 
   35960    * int32x2_t vreinterpret_s32_f32 (float32x2_t)
   35961 
   35962    * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
   35963 
   35964    * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
   35965 
   35966    * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
   35967 
   35968    * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
   35969 
   35970    * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
   35971 
   35972    * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
   35973 
   35974    * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
   35975 
   35976    * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
   35977 
   35978    * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
   35979 
   35980    * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
   35981 
   35982    * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
   35983 
   35984    * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
   35985 
   35986    * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
   35987 
   35988    * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
   35989 
   35990    * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
   35991 
   35992    * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
   35993 
   35994    * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
   35995 
   35996    * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
   35997 
   35998    * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
   35999 
   36000    * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
   36001 
   36002    * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
   36003 
   36004    * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
   36005 
   36006    * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
   36007 
   36008    * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
   36009 
   36010    * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
   36011 
   36012    * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
   36013 
   36014    * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
   36015 
   36016    * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
   36017 
   36018    * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
   36019 
   36020    * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
   36021 
   36022    * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
   36023 
   36024    * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
   36025 
   36026    * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
   36027 
   36028    * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
   36029 
   36030    * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
   36031 
   36032    * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
   36033 
   36034    * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
   36035 
   36036    * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
   36037 
   36038    * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
   36039 
   36040    * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
   36041 
   36042    * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
   36043 
   36044    * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
   36045 
   36046    * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
   36047 
   36048    * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
   36049 
   36050    * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
   36051 
   36052    * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
   36053 
   36054    * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
   36055 
   36056    * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
   36057 
   36058    * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
   36059 
   36060    * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
   36061 
   36062    * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
   36063 
   36064    * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
   36065 
   36066    * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
   36067 
   36068    * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
   36069 
   36070    * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
   36071 
   36072    * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
   36073 
   36074    * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
   36075 
   36076    * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
   36077 
   36078    * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
   36079 
   36080    * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
   36081 
   36082    * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
   36083 
   36084    * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
   36085 
   36086    * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
   36087 
   36088    * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
   36089 
   36090    * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
   36091 
   36092    * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
   36093 
   36094    * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
   36095 
   36096    * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
   36097 
   36098    * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
   36099 
   36100    * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
   36101 
   36102    * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
   36103 
   36104    * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
   36105 
   36106 
   36107 File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
   36108 
   36109 6.56.4 AVR Built-in Functions
   36110 -----------------------------
   36111 
   36112 For each built-in function for AVR, there is an equally named, uppercase
   36113 built-in macro defined.  That way users can easily query if or if not a
   36114 specific built-in is implemented or not.  For example, if
   36115 '__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
   36116 defined to '1' and undefined otherwise.
   36117 
   36118  The following built-in functions map to the respective machine
   36119 instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul',
   36120 'fmuls' resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
   36121 library call if no hardware multiplier is available.
   36122 
   36123      void __builtin_avr_nop (void)
   36124      void __builtin_avr_sei (void)
   36125      void __builtin_avr_cli (void)
   36126      void __builtin_avr_sleep (void)
   36127      void __builtin_avr_wdr (void)
   36128      unsigned char __builtin_avr_swap (unsigned char)
   36129      unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
   36130      int __builtin_avr_fmuls (char, char)
   36131      int __builtin_avr_fmulsu (char, unsigned char)
   36132 
   36133  In order to delay execution for a specific number of cycles, GCC
   36134 implements
   36135      void __builtin_avr_delay_cycles (unsigned long ticks)
   36136 
   36137 'ticks' is the number of ticks to delay execution.  Note that this
   36138 built-in does not take into account the effect of interrupts that might
   36139 increase delay time.  'ticks' must be a compile-time integer constant;
   36140 delays with a variable number of cycles are not supported.
   36141 
   36142      char __builtin_avr_flash_segment (const __memx void*)
   36143 
   36144 This built-in takes a byte address to the 24-bit *note address space:
   36145 AVR Named Address Spaces. '__memx' and returns the number of the flash
   36146 segment (the 64 KiB chunk) where the address points to.  Counting starts
   36147 at '0'.  If the address does not point to flash memory, return '-1'.
   36148 
   36149      unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
   36150 
   36151 Insert bits from BITS into VAL and return the resulting value.  The
   36152 nibbles of MAP determine how the insertion is performed: Let X be the
   36153 N-th nibble of MAP
   36154   1. If X is '0xf', then the N-th bit of VAL is returned unaltered.
   36155 
   36156   2. If X is in the range 0...7, then the N-th result bit is set to the
   36157      X-th bit of BITS
   36158 
   36159   3. If X is in the range 8...'0xe', then the N-th result bit is
   36160      undefined.
   36161 
   36162 One typical use case for this built-in is adjusting input and output
   36163 values to non-contiguous port layouts.  Some examples:
   36164 
   36165      // same as val, bits is unused
   36166      __builtin_avr_insert_bits (0xffffffff, bits, val)
   36167 
   36168      // same as bits, val is unused
   36169      __builtin_avr_insert_bits (0x76543210, bits, val)
   36170 
   36171      // same as rotating bits by 4
   36172      __builtin_avr_insert_bits (0x32107654, bits, 0)
   36173 
   36174      // high nibble of result is the high nibble of val
   36175      // low nibble of result is the low nibble of bits
   36176      __builtin_avr_insert_bits (0xffff3210, bits, val)
   36177 
   36178      // reverse the bit order of bits
   36179      __builtin_avr_insert_bits (0x01234567, bits, 0)
   36180 
   36181 
   36182 File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
   36183 
   36184 6.56.5 Blackfin Built-in Functions
   36185 ----------------------------------
   36186 
   36187 Currently, there are two Blackfin-specific built-in functions.  These
   36188 are used for generating 'CSYNC' and 'SSYNC' machine insns without using
   36189 inline assembly; by using these built-in functions the compiler can
   36190 automatically add workarounds for hardware errata involving these
   36191 instructions.  These functions are named as follows:
   36192 
   36193      void __builtin_bfin_csync (void)
   36194      void __builtin_bfin_ssync (void)
   36195 
   36196 
   36197 File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
   36198 
   36199 6.56.6 FR-V Built-in Functions
   36200 ------------------------------
   36201 
   36202 GCC provides many FR-V-specific built-in functions.  In general, these
   36203 functions are intended to be compatible with those described by 'FR-V
   36204 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
   36205 two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
   36206 pass 128-bit values by pointer rather than by value.
   36207 
   36208  Most of the functions are named after specific FR-V instructions.  Such
   36209 functions are said to be "directly mapped" and are summarized here in
   36210 tabular form.
   36211 
   36212 * Menu:
   36213 
   36214 * Argument Types::
   36215 * Directly-mapped Integer Functions::
   36216 * Directly-mapped Media Functions::
   36217 * Raw read/write Functions::
   36218 * Other Built-in Functions::
   36219 
   36220 
   36221 File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   36222 
   36223 6.56.6.1 Argument Types
   36224 .......................
   36225 
   36226 The arguments to the built-in functions can be divided into three
   36227 groups: register numbers, compile-time constants and run-time values.
   36228 In order to make this classification clear at a glance, the arguments
   36229 and return values are given the following pseudo types:
   36230 
   36231 Pseudo type    Real C type            Constant?   Description
   36232 'uh'           'unsigned short'       No          an unsigned halfword
   36233 'uw1'          'unsigned int'         No          an unsigned word
   36234 'sw1'          'int'                  No          a signed word
   36235 'uw2'          'unsigned long long'   No          an unsigned doubleword
   36236 'sw2'          'long long'            No          a signed doubleword
   36237 'const'        'int'                  Yes         an integer constant
   36238 'acc'          'int'                  Yes         an ACC register number
   36239 'iacc'         'int'                  Yes         an IACC register number
   36240 
   36241  These pseudo types are not defined by GCC, they are simply a notational
   36242 convenience used in this manual.
   36243 
   36244  Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
   36245 run time.  They correspond to register operands in the underlying FR-V
   36246 instructions.
   36247 
   36248  'const' arguments represent immediate operands in the underlying FR-V
   36249 instructions.  They must be compile-time constants.
   36250 
   36251  'acc' arguments are evaluated at compile time and specify the number of
   36252 an accumulator register.  For example, an 'acc' argument of 2 selects
   36253 the ACC2 register.
   36254 
   36255  'iacc' arguments are similar to 'acc' arguments but specify the number
   36256 of an IACC register.  See *note Other Built-in Functions:: for more
   36257 details.
   36258 
   36259 
   36260 File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
   36261 
   36262 6.56.6.2 Directly-mapped Integer Functions
   36263 ..........................................
   36264 
   36265 The functions listed below map directly to FR-V I-type instructions.
   36266 
   36267 Function prototype               Example usage           Assembly output
   36268 'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
   36269 'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
   36270 'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
   36271 'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
   36272 'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
   36273 'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
   36274 'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
   36275 'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
   36276 'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
   36277 'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'
   36278 
   36279 
   36280 File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   36281 
   36282 6.56.6.3 Directly-mapped Media Functions
   36283 ........................................
   36284 
   36285 The functions listed below map directly to FR-V M-type instructions.
   36286 
   36287 Function prototype               Example usage           Assembly output
   36288 'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
   36289 'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
   36290 'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
   36291                                  B)'
   36292 'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
   36293                                  B)'
   36294 'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
   36295 'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
   36296 'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
   36297 'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
   36298 'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
   36299 'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
   36300 'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
   36301 'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
   36302 'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
   36303 'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
   36304 'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
   36305 'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
   36306 sw1)'
   36307 'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
   36308 uw1)'
   36309 'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
   36310 sw1)'
   36311 'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
   36312 uw1)'
   36313 'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
   36314 'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
   36315 'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
   36316 'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
   36317 'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
   36318                                  B)'                     A,#B,C'
   36319 'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
   36320                                  B)'
   36321 'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
   36322                                  B)'                     A,#B,C'
   36323 'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
   36324 'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
   36325 uw2)'
   36326 'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
   36327                                  B)'                     A,#B,C'
   36328 'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
   36329                                  B)'                     A,#B,C'
   36330 'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
   36331                                  B)'                     A,#B,C'
   36332 'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
   36333 'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
   36334                                  A)'
   36335 'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
   36336                                  A)'
   36337 'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
   36338                                  A)'
   36339 'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
   36340                                  A)'
   36341 'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
   36342 'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
   36343 sw1)'
   36344 'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
   36345 uw1)'
   36346 'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
   36347 sw1)'
   36348 'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
   36349 uw1)'
   36350 'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
   36351 sw1)'
   36352 'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
   36353 uw1)'
   36354 'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
   36355 sw1)'
   36356 'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
   36357 uw1)'
   36358 'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
   36359 'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
   36360 'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
   36361 'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
   36362                                  B)'                     A,B,C'
   36363 'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
   36364                                  B)'                     A,B,C'
   36365 'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
   36366 sw2)'
   36367 'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
   36368 uw2)'
   36369 'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
   36370 sw2)'
   36371 'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
   36372 uw2)'
   36373 'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
   36374                                  B)'                     A,B,C'
   36375 'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
   36376                                  B)'
   36377 'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
   36378 sw2)'
   36379 'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
   36380 uw2)'
   36381 'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
   36382 sw2)'                            B)'                     A,B,C'
   36383 'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
   36384 sw2)'
   36385 'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
   36386 uw2)'
   36387 'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
   36388 sw2)'                            B)'                     A,B,C'
   36389 'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
   36390 uw2)'                            B)'                     A,B,C'
   36391 'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
   36392                                  B)'
   36393 'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
   36394                                  B)'
   36395 'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
   36396                                  B)'
   36397 'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
   36398                                  B)'                     A,B,C'
   36399 'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
   36400                                  B)'                     A,B,C'
   36401 'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
   36402 sw2)'                            B)'                     A,B,C'
   36403 'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
   36404 sw2)'                            B)'                     A,B,C'
   36405 'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
   36406 'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
   36407 'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
   36408 'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
   36409 'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
   36410 'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
   36411 'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
   36412 'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
   36413 'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
   36414 'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
   36415 'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
   36416                                  B)'
   36417 'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
   36418                                  B)'
   36419 'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
   36420 'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
   36421 'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
   36422 'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
   36423 'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
   36424 'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'
   36425 
   36426 
   36427 File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
   36428 
   36429 6.56.6.4 Raw read/write Functions
   36430 .................................
   36431 
   36432 This sections describes built-in functions related to read and write
   36433 instructions to access memory.  These functions generate 'membar'
   36434 instructions to flush the I/O load and stores where appropriate, as
   36435 described in Fujitsu's manual described above.
   36436 
   36437 'unsigned char __builtin_read8 (void *DATA)'
   36438 'unsigned short __builtin_read16 (void *DATA)'
   36439 'unsigned long __builtin_read32 (void *DATA)'
   36440 'unsigned long long __builtin_read64 (void *DATA)'
   36441 
   36442 'void __builtin_write8 (void *DATA, unsigned char DATUM)'
   36443 'void __builtin_write16 (void *DATA, unsigned short DATUM)'
   36444 'void __builtin_write32 (void *DATA, unsigned long DATUM)'
   36445 'void __builtin_write64 (void *DATA, unsigned long long DATUM)'
   36446 
   36447 
   36448 File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
   36449 
   36450 6.56.6.5 Other Built-in Functions
   36451 .................................
   36452 
   36453 This section describes built-in functions that are not named after a
   36454 specific FR-V instruction.
   36455 
   36456 'sw2 __IACCreadll (iacc REG)'
   36457      Return the full 64-bit value of IACC0.  The REG argument is
   36458      reserved for future expansion and must be 0.
   36459 
   36460 'sw1 __IACCreadl (iacc REG)'
   36461      Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
   36462      Other values of REG are rejected as invalid.
   36463 
   36464 'void __IACCsetll (iacc REG, sw2 X)'
   36465      Set the full 64-bit value of IACC0 to X.  The REG argument is
   36466      reserved for future expansion and must be 0.
   36467 
   36468 'void __IACCsetl (iacc REG, sw1 X)'
   36469      Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
   36470      values of REG are rejected as invalid.
   36471 
   36472 'void __data_prefetch0 (const void *X)'
   36473      Use the 'dcpl' instruction to load the contents of address X into
   36474      the data cache.
   36475 
   36476 'void __data_prefetch (const void *X)'
   36477      Use the 'nldub' instruction to load the contents of address X into
   36478      the data cache.  The instruction is issued in slot I1.
   36479 
   36480 
   36481 File: gcc.info,  Node: X86 Built-in Functions,  Next: X86 transactional memory intrinsics,  Prev: FR-V Built-in Functions,  Up: Target Builtins
   36482 
   36483 6.56.7 X86 Built-in Functions
   36484 -----------------------------
   36485 
   36486 These built-in functions are available for the i386 and x86-64 family of
   36487 computers, depending on the command-line switches used.
   36488 
   36489  If you specify command-line switches such as '-msse', the compiler
   36490 could use the extended instruction sets even if the built-ins are not
   36491 used explicitly in the program.  For this reason, applications that
   36492 perform run-time CPU detection must compile separate files for each
   36493 supported architecture, using the appropriate flags.  In particular, the
   36494 file containing the CPU detection code should be compiled without these
   36495 options.
   36496 
   36497  The following machine modes are available for use with MMX built-in
   36498 functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
   36499 integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
   36500 vector of eight 8-bit integers.  Some of the built-in functions operate
   36501 on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
   36502 mode.
   36503 
   36504  If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
   36505 of two 32-bit floating-point values.
   36506 
   36507  If SSE extensions are enabled, 'V4SF' is used for a vector of four
   36508 32-bit floating-point values.  Some instructions use a vector of four
   36509 32-bit integers, these use 'V4SI'.  Finally, some instructions operate
   36510 on an entire vector register, interpreting it as a 128-bit integer,
   36511 these use mode 'TI'.
   36512 
   36513  In 64-bit mode, the x86-64 family of processors uses additional
   36514 built-in functions for efficient use of 'TF' ('__float128') 128-bit
   36515 floating point and 'TC' 128-bit complex floating-point values.
   36516 
   36517  The following floating-point built-in functions are available in 64-bit
   36518 mode.  All of them implement the function that is part of the name.
   36519 
   36520      __float128 __builtin_fabsq (__float128)
   36521      __float128 __builtin_copysignq (__float128, __float128)
   36522 
   36523  The following built-in function is always available.
   36524 
   36525 'void __builtin_ia32_pause (void)'
   36526      Generates the 'pause' machine instruction with a compiler memory
   36527      barrier.
   36528 
   36529  The following floating-point built-in functions are made available in
   36530 the 64-bit mode.
   36531 
   36532 '__float128 __builtin_infq (void)'
   36533      Similar to '__builtin_inf', except the return type is '__float128'.
   36534 
   36535 '__float128 __builtin_huge_valq (void)'
   36536      Similar to '__builtin_huge_val', except the return type is
   36537      '__float128'.
   36538 
   36539  The following built-in functions are always available and can be used
   36540 to check the target platform type.
   36541 
   36542  -- Built-in Function: void __builtin_cpu_init (void)
   36543      This function runs the CPU detection code to check the type of CPU
   36544      and the features supported.  This built-in function needs to be
   36545      invoked along with the built-in functions to check CPU type and
   36546      features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
   36547      when used in a function that is executed before any constructors
   36548      are called.  The CPU detection code is automatically executed in a
   36549      very high priority constructor.
   36550 
   36551      For example, this function has to be used in 'ifunc' resolvers that
   36552      check for CPU type using the built-in functions '__builtin_cpu_is'
   36553      and '__builtin_cpu_supports', or in constructors on targets that
   36554      don't support constructor priority.
   36555 
   36556           static void (*resolve_memcpy (void)) (void)
   36557           {
   36558             // ifunc resolvers fire before constructors, explicitly call the init
   36559             // function.
   36560             __builtin_cpu_init ();
   36561             if (__builtin_cpu_supports ("ssse3"))
   36562               return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
   36563             else
   36564               return default_memcpy;
   36565           }
   36566 
   36567           void *memcpy (void *, const void *, size_t)
   36568                __attribute__ ((ifunc ("resolve_memcpy")));
   36569 
   36570  -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
   36571      This function returns a positive integer if the run-time CPU is of
   36572      type CPUNAME and returns '0' otherwise.  The following CPU names
   36573      can be detected:
   36574 
   36575      'intel'
   36576           Intel CPU.
   36577 
   36578      'atom'
   36579           Intel Atom CPU.
   36580 
   36581      'core2'
   36582           Intel Core 2 CPU.
   36583 
   36584      'corei7'
   36585           Intel Core i7 CPU.
   36586 
   36587      'nehalem'
   36588           Intel Core i7 Nehalem CPU.
   36589 
   36590      'westmere'
   36591           Intel Core i7 Westmere CPU.
   36592 
   36593      'sandybridge'
   36594           Intel Core i7 Sandy Bridge CPU.
   36595 
   36596      'amd'
   36597           AMD CPU.
   36598 
   36599      'amdfam10h'
   36600           AMD Family 10h CPU.
   36601 
   36602      'barcelona'
   36603           AMD Family 10h Barcelona CPU.
   36604 
   36605      'shanghai'
   36606           AMD Family 10h Shanghai CPU.
   36607 
   36608      'istanbul'
   36609           AMD Family 10h Istanbul CPU.
   36610 
   36611      'btver1'
   36612           AMD Family 14h CPU.
   36613 
   36614      'amdfam15h'
   36615           AMD Family 15h CPU.
   36616 
   36617      'bdver1'
   36618           AMD Family 15h Bulldozer version 1.
   36619 
   36620      'bdver2'
   36621           AMD Family 15h Bulldozer version 2.
   36622 
   36623      'bdver3'
   36624           AMD Family 15h Bulldozer version 3.
   36625 
   36626      'btver2'
   36627           AMD Family 16h CPU.
   36628 
   36629      Here is an example:
   36630           if (__builtin_cpu_is ("corei7"))
   36631             {
   36632                do_corei7 (); // Core i7 specific implementation.
   36633             }
   36634           else
   36635             {
   36636                do_generic (); // Generic implementation.
   36637             }
   36638 
   36639  -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
   36640      This function returns a positive integer if the run-time CPU
   36641      supports FEATURE and returns '0' otherwise.  The following features
   36642      can be detected:
   36643 
   36644      'cmov'
   36645           CMOV instruction.
   36646      'mmx'
   36647           MMX instructions.
   36648      'popcnt'
   36649           POPCNT instruction.
   36650      'sse'
   36651           SSE instructions.
   36652      'sse2'
   36653           SSE2 instructions.
   36654      'sse3'
   36655           SSE3 instructions.
   36656      'ssse3'
   36657           SSSE3 instructions.
   36658      'sse4.1'
   36659           SSE4.1 instructions.
   36660      'sse4.2'
   36661           SSE4.2 instructions.
   36662      'avx'
   36663           AVX instructions.
   36664      'avx2'
   36665           AVX2 instructions.
   36666 
   36667      Here is an example:
   36668           if (__builtin_cpu_supports ("popcnt"))
   36669             {
   36670                asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
   36671             }
   36672           else
   36673             {
   36674                count = generic_countbits (n); //generic implementation.
   36675             }
   36676 
   36677  The following built-in functions are made available by '-mmmx'.  All of
   36678 them generate the machine instruction that is part of the name.
   36679 
   36680      v8qi __builtin_ia32_paddb (v8qi, v8qi)
   36681      v4hi __builtin_ia32_paddw (v4hi, v4hi)
   36682      v2si __builtin_ia32_paddd (v2si, v2si)
   36683      v8qi __builtin_ia32_psubb (v8qi, v8qi)
   36684      v4hi __builtin_ia32_psubw (v4hi, v4hi)
   36685      v2si __builtin_ia32_psubd (v2si, v2si)
   36686      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
   36687      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
   36688      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
   36689      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
   36690      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
   36691      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
   36692      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
   36693      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
   36694      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
   36695      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
   36696      di __builtin_ia32_pand (di, di)
   36697      di __builtin_ia32_pandn (di,di)
   36698      di __builtin_ia32_por (di, di)
   36699      di __builtin_ia32_pxor (di, di)
   36700      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
   36701      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
   36702      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
   36703      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
   36704      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
   36705      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
   36706      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
   36707      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
   36708      v2si __builtin_ia32_punpckhdq (v2si, v2si)
   36709      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
   36710      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
   36711      v2si __builtin_ia32_punpckldq (v2si, v2si)
   36712      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
   36713      v4hi __builtin_ia32_packssdw (v2si, v2si)
   36714      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
   36715 
   36716      v4hi __builtin_ia32_psllw (v4hi, v4hi)
   36717      v2si __builtin_ia32_pslld (v2si, v2si)
   36718      v1di __builtin_ia32_psllq (v1di, v1di)
   36719      v4hi __builtin_ia32_psrlw (v4hi, v4hi)
   36720      v2si __builtin_ia32_psrld (v2si, v2si)
   36721      v1di __builtin_ia32_psrlq (v1di, v1di)
   36722      v4hi __builtin_ia32_psraw (v4hi, v4hi)
   36723      v2si __builtin_ia32_psrad (v2si, v2si)
   36724      v4hi __builtin_ia32_psllwi (v4hi, int)
   36725      v2si __builtin_ia32_pslldi (v2si, int)
   36726      v1di __builtin_ia32_psllqi (v1di, int)
   36727      v4hi __builtin_ia32_psrlwi (v4hi, int)
   36728      v2si __builtin_ia32_psrldi (v2si, int)
   36729      v1di __builtin_ia32_psrlqi (v1di, int)
   36730      v4hi __builtin_ia32_psrawi (v4hi, int)
   36731      v2si __builtin_ia32_psradi (v2si, int)
   36732 
   36733 
   36734  The following built-in functions are made available either with
   36735 '-msse', or with a combination of '-m3dnow' and '-march=athlon'.  All of
   36736 them generate the machine instruction that is part of the name.
   36737 
   36738      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
   36739      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
   36740      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
   36741      v1di __builtin_ia32_psadbw (v8qi, v8qi)
   36742      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
   36743      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
   36744      v8qi __builtin_ia32_pminub (v8qi, v8qi)
   36745      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
   36746      int __builtin_ia32_pextrw (v4hi, int)
   36747      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
   36748      int __builtin_ia32_pmovmskb (v8qi)
   36749      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
   36750      void __builtin_ia32_movntq (di *, di)
   36751      void __builtin_ia32_sfence (void)
   36752 
   36753  The following built-in functions are available when '-msse' is used.
   36754 All of them generate the machine instruction that is part of the name.
   36755 
   36756      int __builtin_ia32_comieq (v4sf, v4sf)
   36757      int __builtin_ia32_comineq (v4sf, v4sf)
   36758      int __builtin_ia32_comilt (v4sf, v4sf)
   36759      int __builtin_ia32_comile (v4sf, v4sf)
   36760      int __builtin_ia32_comigt (v4sf, v4sf)
   36761      int __builtin_ia32_comige (v4sf, v4sf)
   36762      int __builtin_ia32_ucomieq (v4sf, v4sf)
   36763      int __builtin_ia32_ucomineq (v4sf, v4sf)
   36764      int __builtin_ia32_ucomilt (v4sf, v4sf)
   36765      int __builtin_ia32_ucomile (v4sf, v4sf)
   36766      int __builtin_ia32_ucomigt (v4sf, v4sf)
   36767      int __builtin_ia32_ucomige (v4sf, v4sf)
   36768      v4sf __builtin_ia32_addps (v4sf, v4sf)
   36769      v4sf __builtin_ia32_subps (v4sf, v4sf)
   36770      v4sf __builtin_ia32_mulps (v4sf, v4sf)
   36771      v4sf __builtin_ia32_divps (v4sf, v4sf)
   36772      v4sf __builtin_ia32_addss (v4sf, v4sf)
   36773      v4sf __builtin_ia32_subss (v4sf, v4sf)
   36774      v4sf __builtin_ia32_mulss (v4sf, v4sf)
   36775      v4sf __builtin_ia32_divss (v4sf, v4sf)
   36776      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
   36777      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
   36778      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
   36779      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
   36780      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
   36781      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
   36782      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
   36783      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
   36784      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
   36785      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
   36786      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
   36787      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
   36788      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
   36789      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
   36790      v4si __builtin_ia32_cmpless (v4sf, v4sf)
   36791      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
   36792      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
   36793      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
   36794      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
   36795      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
   36796      v4sf __builtin_ia32_maxps (v4sf, v4sf)
   36797      v4sf __builtin_ia32_maxss (v4sf, v4sf)
   36798      v4sf __builtin_ia32_minps (v4sf, v4sf)
   36799      v4sf __builtin_ia32_minss (v4sf, v4sf)
   36800      v4sf __builtin_ia32_andps (v4sf, v4sf)
   36801      v4sf __builtin_ia32_andnps (v4sf, v4sf)
   36802      v4sf __builtin_ia32_orps (v4sf, v4sf)
   36803      v4sf __builtin_ia32_xorps (v4sf, v4sf)
   36804      v4sf __builtin_ia32_movss (v4sf, v4sf)
   36805      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
   36806      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
   36807      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
   36808      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
   36809      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
   36810      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
   36811      v2si __builtin_ia32_cvtps2pi (v4sf)
   36812      int __builtin_ia32_cvtss2si (v4sf)
   36813      v2si __builtin_ia32_cvttps2pi (v4sf)
   36814      int __builtin_ia32_cvttss2si (v4sf)
   36815      v4sf __builtin_ia32_rcpps (v4sf)
   36816      v4sf __builtin_ia32_rsqrtps (v4sf)
   36817      v4sf __builtin_ia32_sqrtps (v4sf)
   36818      v4sf __builtin_ia32_rcpss (v4sf)
   36819      v4sf __builtin_ia32_rsqrtss (v4sf)
   36820      v4sf __builtin_ia32_sqrtss (v4sf)
   36821      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
   36822      void __builtin_ia32_movntps (float *, v4sf)
   36823      int __builtin_ia32_movmskps (v4sf)
   36824 
   36825  The following built-in functions are available when '-msse' is used.
   36826 
   36827 'v4sf __builtin_ia32_loadaps (float *)'
   36828      Generates the 'movaps' machine instruction as a load from memory.
   36829 'void __builtin_ia32_storeaps (float *, v4sf)'
   36830      Generates the 'movaps' machine instruction as a store to memory.
   36831 'v4sf __builtin_ia32_loadups (float *)'
   36832      Generates the 'movups' machine instruction as a load from memory.
   36833 'void __builtin_ia32_storeups (float *, v4sf)'
   36834      Generates the 'movups' machine instruction as a store to memory.
   36835 'v4sf __builtin_ia32_loadsss (float *)'
   36836      Generates the 'movss' machine instruction as a load from memory.
   36837 'void __builtin_ia32_storess (float *, v4sf)'
   36838      Generates the 'movss' machine instruction as a store to memory.
   36839 'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
   36840      Generates the 'movhps' machine instruction as a load from memory.
   36841 'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
   36842      Generates the 'movlps' machine instruction as a load from memory
   36843 'void __builtin_ia32_storehps (v2sf *, v4sf)'
   36844      Generates the 'movhps' machine instruction as a store to memory.
   36845 'void __builtin_ia32_storelps (v2sf *, v4sf)'
   36846      Generates the 'movlps' machine instruction as a store to memory.
   36847 
   36848  The following built-in functions are available when '-msse2' is used.
   36849 All of them generate the machine instruction that is part of the name.
   36850 
   36851      int __builtin_ia32_comisdeq (v2df, v2df)
   36852      int __builtin_ia32_comisdlt (v2df, v2df)
   36853      int __builtin_ia32_comisdle (v2df, v2df)
   36854      int __builtin_ia32_comisdgt (v2df, v2df)
   36855      int __builtin_ia32_comisdge (v2df, v2df)
   36856      int __builtin_ia32_comisdneq (v2df, v2df)
   36857      int __builtin_ia32_ucomisdeq (v2df, v2df)
   36858      int __builtin_ia32_ucomisdlt (v2df, v2df)
   36859      int __builtin_ia32_ucomisdle (v2df, v2df)
   36860      int __builtin_ia32_ucomisdgt (v2df, v2df)
   36861      int __builtin_ia32_ucomisdge (v2df, v2df)
   36862      int __builtin_ia32_ucomisdneq (v2df, v2df)
   36863      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
   36864      v2df __builtin_ia32_cmpltpd (v2df, v2df)
   36865      v2df __builtin_ia32_cmplepd (v2df, v2df)
   36866      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
   36867      v2df __builtin_ia32_cmpgepd (v2df, v2df)
   36868      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
   36869      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
   36870      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
   36871      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
   36872      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
   36873      v2df __builtin_ia32_cmpngepd (v2df, v2df)
   36874      v2df __builtin_ia32_cmpordpd (v2df, v2df)
   36875      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
   36876      v2df __builtin_ia32_cmpltsd (v2df, v2df)
   36877      v2df __builtin_ia32_cmplesd (v2df, v2df)
   36878      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
   36879      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
   36880      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
   36881      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
   36882      v2df __builtin_ia32_cmpordsd (v2df, v2df)
   36883      v2di __builtin_ia32_paddq (v2di, v2di)
   36884      v2di __builtin_ia32_psubq (v2di, v2di)
   36885      v2df __builtin_ia32_addpd (v2df, v2df)
   36886      v2df __builtin_ia32_subpd (v2df, v2df)
   36887      v2df __builtin_ia32_mulpd (v2df, v2df)
   36888      v2df __builtin_ia32_divpd (v2df, v2df)
   36889      v2df __builtin_ia32_addsd (v2df, v2df)
   36890      v2df __builtin_ia32_subsd (v2df, v2df)
   36891      v2df __builtin_ia32_mulsd (v2df, v2df)
   36892      v2df __builtin_ia32_divsd (v2df, v2df)
   36893      v2df __builtin_ia32_minpd (v2df, v2df)
   36894      v2df __builtin_ia32_maxpd (v2df, v2df)
   36895      v2df __builtin_ia32_minsd (v2df, v2df)
   36896      v2df __builtin_ia32_maxsd (v2df, v2df)
   36897      v2df __builtin_ia32_andpd (v2df, v2df)
   36898      v2df __builtin_ia32_andnpd (v2df, v2df)
   36899      v2df __builtin_ia32_orpd (v2df, v2df)
   36900      v2df __builtin_ia32_xorpd (v2df, v2df)
   36901      v2df __builtin_ia32_movsd (v2df, v2df)
   36902      v2df __builtin_ia32_unpckhpd (v2df, v2df)
   36903      v2df __builtin_ia32_unpcklpd (v2df, v2df)
   36904      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
   36905      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
   36906      v4si __builtin_ia32_paddd128 (v4si, v4si)
   36907      v2di __builtin_ia32_paddq128 (v2di, v2di)
   36908      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
   36909      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
   36910      v4si __builtin_ia32_psubd128 (v4si, v4si)
   36911      v2di __builtin_ia32_psubq128 (v2di, v2di)
   36912      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
   36913      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
   36914      v2di __builtin_ia32_pand128 (v2di, v2di)
   36915      v2di __builtin_ia32_pandn128 (v2di, v2di)
   36916      v2di __builtin_ia32_por128 (v2di, v2di)
   36917      v2di __builtin_ia32_pxor128 (v2di, v2di)
   36918      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
   36919      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
   36920      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
   36921      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
   36922      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
   36923      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
   36924      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
   36925      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
   36926      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
   36927      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
   36928      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
   36929      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
   36930      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
   36931      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
   36932      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
   36933      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
   36934      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
   36935      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
   36936      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
   36937      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
   36938      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
   36939      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
   36940      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
   36941      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
   36942      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
   36943      v2df __builtin_ia32_loadupd (double *)
   36944      void __builtin_ia32_storeupd (double *, v2df)
   36945      v2df __builtin_ia32_loadhpd (v2df, double const *)
   36946      v2df __builtin_ia32_loadlpd (v2df, double const *)
   36947      int __builtin_ia32_movmskpd (v2df)
   36948      int __builtin_ia32_pmovmskb128 (v16qi)
   36949      void __builtin_ia32_movnti (int *, int)
   36950      void __builtin_ia32_movnti64 (long long int *, long long int)
   36951      void __builtin_ia32_movntpd (double *, v2df)
   36952      void __builtin_ia32_movntdq (v2df *, v2df)
   36953      v4si __builtin_ia32_pshufd (v4si, int)
   36954      v8hi __builtin_ia32_pshuflw (v8hi, int)
   36955      v8hi __builtin_ia32_pshufhw (v8hi, int)
   36956      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
   36957      v2df __builtin_ia32_sqrtpd (v2df)
   36958      v2df __builtin_ia32_sqrtsd (v2df)
   36959      v2df __builtin_ia32_shufpd (v2df, v2df, int)
   36960      v2df __builtin_ia32_cvtdq2pd (v4si)
   36961      v4sf __builtin_ia32_cvtdq2ps (v4si)
   36962      v4si __builtin_ia32_cvtpd2dq (v2df)
   36963      v2si __builtin_ia32_cvtpd2pi (v2df)
   36964      v4sf __builtin_ia32_cvtpd2ps (v2df)
   36965      v4si __builtin_ia32_cvttpd2dq (v2df)
   36966      v2si __builtin_ia32_cvttpd2pi (v2df)
   36967      v2df __builtin_ia32_cvtpi2pd (v2si)
   36968      int __builtin_ia32_cvtsd2si (v2df)
   36969      int __builtin_ia32_cvttsd2si (v2df)
   36970      long long __builtin_ia32_cvtsd2si64 (v2df)
   36971      long long __builtin_ia32_cvttsd2si64 (v2df)
   36972      v4si __builtin_ia32_cvtps2dq (v4sf)
   36973      v2df __builtin_ia32_cvtps2pd (v4sf)
   36974      v4si __builtin_ia32_cvttps2dq (v4sf)
   36975      v2df __builtin_ia32_cvtsi2sd (v2df, int)
   36976      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
   36977      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
   36978      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
   36979      void __builtin_ia32_clflush (const void *)
   36980      void __builtin_ia32_lfence (void)
   36981      void __builtin_ia32_mfence (void)
   36982      v16qi __builtin_ia32_loaddqu (const char *)
   36983      void __builtin_ia32_storedqu (char *, v16qi)
   36984      v1di __builtin_ia32_pmuludq (v2si, v2si)
   36985      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
   36986      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
   36987      v4si __builtin_ia32_pslld128 (v4si, v4si)
   36988      v2di __builtin_ia32_psllq128 (v2di, v2di)
   36989      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
   36990      v4si __builtin_ia32_psrld128 (v4si, v4si)
   36991      v2di __builtin_ia32_psrlq128 (v2di, v2di)
   36992      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
   36993      v4si __builtin_ia32_psrad128 (v4si, v4si)
   36994      v2di __builtin_ia32_pslldqi128 (v2di, int)
   36995      v8hi __builtin_ia32_psllwi128 (v8hi, int)
   36996      v4si __builtin_ia32_pslldi128 (v4si, int)
   36997      v2di __builtin_ia32_psllqi128 (v2di, int)
   36998      v2di __builtin_ia32_psrldqi128 (v2di, int)
   36999      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
   37000      v4si __builtin_ia32_psrldi128 (v4si, int)
   37001      v2di __builtin_ia32_psrlqi128 (v2di, int)
   37002      v8hi __builtin_ia32_psrawi128 (v8hi, int)
   37003      v4si __builtin_ia32_psradi128 (v4si, int)
   37004      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
   37005      v2di __builtin_ia32_movq128 (v2di)
   37006 
   37007  The following built-in functions are available when '-msse3' is used.
   37008 All of them generate the machine instruction that is part of the name.
   37009 
   37010      v2df __builtin_ia32_addsubpd (v2df, v2df)
   37011      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
   37012      v2df __builtin_ia32_haddpd (v2df, v2df)
   37013      v4sf __builtin_ia32_haddps (v4sf, v4sf)
   37014      v2df __builtin_ia32_hsubpd (v2df, v2df)
   37015      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
   37016      v16qi __builtin_ia32_lddqu (char const *)
   37017      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
   37018      v2df __builtin_ia32_movddup (v2df)
   37019      v4sf __builtin_ia32_movshdup (v4sf)
   37020      v4sf __builtin_ia32_movsldup (v4sf)
   37021      void __builtin_ia32_mwait (unsigned int, unsigned int)
   37022 
   37023  The following built-in functions are available when '-msse3' is used.
   37024 
   37025 'v2df __builtin_ia32_loadddup (double const *)'
   37026      Generates the 'movddup' machine instruction as a load from memory.
   37027 
   37028  The following built-in functions are available when '-mssse3' is used.
   37029 All of them generate the machine instruction that is part of the name
   37030 with MMX registers.
   37031 
   37032      v2si __builtin_ia32_phaddd (v2si, v2si)
   37033      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
   37034      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
   37035      v2si __builtin_ia32_phsubd (v2si, v2si)
   37036      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
   37037      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
   37038      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
   37039      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
   37040      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
   37041      v8qi __builtin_ia32_psignb (v8qi, v8qi)
   37042      v2si __builtin_ia32_psignd (v2si, v2si)
   37043      v4hi __builtin_ia32_psignw (v4hi, v4hi)
   37044      v1di __builtin_ia32_palignr (v1di, v1di, int)
   37045      v8qi __builtin_ia32_pabsb (v8qi)
   37046      v2si __builtin_ia32_pabsd (v2si)
   37047      v4hi __builtin_ia32_pabsw (v4hi)
   37048 
   37049  The following built-in functions are available when '-mssse3' is used.
   37050 All of them generate the machine instruction that is part of the name
   37051 with SSE registers.
   37052 
   37053      v4si __builtin_ia32_phaddd128 (v4si, v4si)
   37054      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
   37055      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
   37056      v4si __builtin_ia32_phsubd128 (v4si, v4si)
   37057      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
   37058      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
   37059      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
   37060      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
   37061      v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
   37062      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
   37063      v4si __builtin_ia32_psignd128 (v4si, v4si)
   37064      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
   37065      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
   37066      v16qi __builtin_ia32_pabsb128 (v16qi)
   37067      v4si __builtin_ia32_pabsd128 (v4si)
   37068      v8hi __builtin_ia32_pabsw128 (v8hi)
   37069 
   37070  The following built-in functions are available when '-msse4.1' is used.
   37071 All of them generate the machine instruction that is part of the name.
   37072 
   37073      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
   37074      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
   37075      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
   37076      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
   37077      v2df __builtin_ia32_dppd (v2df, v2df, const int)
   37078      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
   37079      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
   37080      v2di __builtin_ia32_movntdqa (v2di *);
   37081      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
   37082      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
   37083      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
   37084      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
   37085      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
   37086      v8hi __builtin_ia32_phminposuw128 (v8hi)
   37087      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
   37088      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
   37089      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
   37090      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
   37091      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
   37092      v4si __builtin_ia32_pminsd128 (v4si, v4si)
   37093      v4si __builtin_ia32_pminud128 (v4si, v4si)
   37094      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
   37095      v4si __builtin_ia32_pmovsxbd128 (v16qi)
   37096      v2di __builtin_ia32_pmovsxbq128 (v16qi)
   37097      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
   37098      v2di __builtin_ia32_pmovsxdq128 (v4si)
   37099      v4si __builtin_ia32_pmovsxwd128 (v8hi)
   37100      v2di __builtin_ia32_pmovsxwq128 (v8hi)
   37101      v4si __builtin_ia32_pmovzxbd128 (v16qi)
   37102      v2di __builtin_ia32_pmovzxbq128 (v16qi)
   37103      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
   37104      v2di __builtin_ia32_pmovzxdq128 (v4si)
   37105      v4si __builtin_ia32_pmovzxwd128 (v8hi)
   37106      v2di __builtin_ia32_pmovzxwq128 (v8hi)
   37107      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
   37108      v4si __builtin_ia32_pmulld128 (v4si, v4si)
   37109      int __builtin_ia32_ptestc128 (v2di, v2di)
   37110      int __builtin_ia32_ptestnzc128 (v2di, v2di)
   37111      int __builtin_ia32_ptestz128 (v2di, v2di)
   37112      v2df __builtin_ia32_roundpd (v2df, const int)
   37113      v4sf __builtin_ia32_roundps (v4sf, const int)
   37114      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
   37115      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
   37116 
   37117  The following built-in functions are available when '-msse4.1' is used.
   37118 
   37119 'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
   37120      Generates the 'insertps' machine instruction.
   37121 'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
   37122      Generates the 'pextrb' machine instruction.
   37123 'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
   37124      Generates the 'pinsrb' machine instruction.
   37125 'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
   37126      Generates the 'pinsrd' machine instruction.
   37127 'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
   37128      Generates the 'pinsrq' machine instruction in 64bit mode.
   37129 
   37130  The following built-in functions are changed to generate new SSE4.1
   37131 instructions when '-msse4.1' is used.
   37132 
   37133 'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
   37134      Generates the 'extractps' machine instruction.
   37135 'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
   37136      Generates the 'pextrd' machine instruction.
   37137 'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
   37138      Generates the 'pextrq' machine instruction in 64bit mode.
   37139 
   37140  The following built-in functions are available when '-msse4.2' is used.
   37141 All of them generate the machine instruction that is part of the name.
   37142 
   37143      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
   37144      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
   37145      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
   37146      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
   37147      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
   37148      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
   37149      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
   37150      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
   37151      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
   37152      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
   37153      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
   37154      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
   37155      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
   37156      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
   37157      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
   37158 
   37159  The following built-in functions are available when '-msse4.2' is used.
   37160 
   37161 'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
   37162      Generates the 'crc32b' machine instruction.
   37163 'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
   37164      Generates the 'crc32w' machine instruction.
   37165 'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
   37166      Generates the 'crc32l' machine instruction.
   37167 'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
   37168      Generates the 'crc32q' machine instruction.
   37169 
   37170  The following built-in functions are changed to generate new SSE4.2
   37171 instructions when '-msse4.2' is used.
   37172 
   37173 'int __builtin_popcount (unsigned int)'
   37174      Generates the 'popcntl' machine instruction.
   37175 'int __builtin_popcountl (unsigned long)'
   37176      Generates the 'popcntl' or 'popcntq' machine instruction, depending
   37177      on the size of 'unsigned long'.
   37178 'int __builtin_popcountll (unsigned long long)'
   37179      Generates the 'popcntq' machine instruction.
   37180 
   37181  The following built-in functions are available when '-mavx' is used.
   37182 All of them generate the machine instruction that is part of the name.
   37183 
   37184      v4df __builtin_ia32_addpd256 (v4df,v4df)
   37185      v8sf __builtin_ia32_addps256 (v8sf,v8sf)
   37186      v4df __builtin_ia32_addsubpd256 (v4df,v4df)
   37187      v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
   37188      v4df __builtin_ia32_andnpd256 (v4df,v4df)
   37189      v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
   37190      v4df __builtin_ia32_andpd256 (v4df,v4df)
   37191      v8sf __builtin_ia32_andps256 (v8sf,v8sf)
   37192      v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
   37193      v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
   37194      v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
   37195      v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
   37196      v2df __builtin_ia32_cmppd (v2df,v2df,int)
   37197      v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
   37198      v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
   37199      v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
   37200      v2df __builtin_ia32_cmpsd (v2df,v2df,int)
   37201      v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
   37202      v4df __builtin_ia32_cvtdq2pd256 (v4si)
   37203      v8sf __builtin_ia32_cvtdq2ps256 (v8si)
   37204      v4si __builtin_ia32_cvtpd2dq256 (v4df)
   37205      v4sf __builtin_ia32_cvtpd2ps256 (v4df)
   37206      v8si __builtin_ia32_cvtps2dq256 (v8sf)
   37207      v4df __builtin_ia32_cvtps2pd256 (v4sf)
   37208      v4si __builtin_ia32_cvttpd2dq256 (v4df)
   37209      v8si __builtin_ia32_cvttps2dq256 (v8sf)
   37210      v4df __builtin_ia32_divpd256 (v4df,v4df)
   37211      v8sf __builtin_ia32_divps256 (v8sf,v8sf)
   37212      v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
   37213      v4df __builtin_ia32_haddpd256 (v4df,v4df)
   37214      v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
   37215      v4df __builtin_ia32_hsubpd256 (v4df,v4df)
   37216      v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
   37217      v32qi __builtin_ia32_lddqu256 (pcchar)
   37218      v32qi __builtin_ia32_loaddqu256 (pcchar)
   37219      v4df __builtin_ia32_loadupd256 (pcdouble)
   37220      v8sf __builtin_ia32_loadups256 (pcfloat)
   37221      v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
   37222      v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
   37223      v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
   37224      v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
   37225      void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
   37226      void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
   37227      void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
   37228      void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
   37229      v4df __builtin_ia32_maxpd256 (v4df,v4df)
   37230      v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
   37231      v4df __builtin_ia32_minpd256 (v4df,v4df)
   37232      v8sf __builtin_ia32_minps256 (v8sf,v8sf)
   37233      v4df __builtin_ia32_movddup256 (v4df)
   37234      int __builtin_ia32_movmskpd256 (v4df)
   37235      int __builtin_ia32_movmskps256 (v8sf)
   37236      v8sf __builtin_ia32_movshdup256 (v8sf)
   37237      v8sf __builtin_ia32_movsldup256 (v8sf)
   37238      v4df __builtin_ia32_mulpd256 (v4df,v4df)
   37239      v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
   37240      v4df __builtin_ia32_orpd256 (v4df,v4df)
   37241      v8sf __builtin_ia32_orps256 (v8sf,v8sf)
   37242      v2df __builtin_ia32_pd_pd256 (v4df)
   37243      v4df __builtin_ia32_pd256_pd (v2df)
   37244      v4sf __builtin_ia32_ps_ps256 (v8sf)
   37245      v8sf __builtin_ia32_ps256_ps (v4sf)
   37246      int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
   37247      int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
   37248      int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
   37249      v8sf __builtin_ia32_rcpps256 (v8sf)
   37250      v4df __builtin_ia32_roundpd256 (v4df,int)
   37251      v8sf __builtin_ia32_roundps256 (v8sf,int)
   37252      v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
   37253      v8sf __builtin_ia32_rsqrtps256 (v8sf)
   37254      v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
   37255      v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
   37256      v4si __builtin_ia32_si_si256 (v8si)
   37257      v8si __builtin_ia32_si256_si (v4si)
   37258      v4df __builtin_ia32_sqrtpd256 (v4df)
   37259      v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
   37260      v8sf __builtin_ia32_sqrtps256 (v8sf)
   37261      void __builtin_ia32_storedqu256 (pchar,v32qi)
   37262      void __builtin_ia32_storeupd256 (pdouble,v4df)
   37263      void __builtin_ia32_storeups256 (pfloat,v8sf)
   37264      v4df __builtin_ia32_subpd256 (v4df,v4df)
   37265      v8sf __builtin_ia32_subps256 (v8sf,v8sf)
   37266      v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
   37267      v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
   37268      v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
   37269      v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
   37270      v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
   37271      v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
   37272      v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
   37273      v4sf __builtin_ia32_vbroadcastss (pcfloat)
   37274      v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
   37275      v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
   37276      v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
   37277      v4si __builtin_ia32_vextractf128_si256 (v8si,int)
   37278      v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
   37279      v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
   37280      v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
   37281      v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
   37282      v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
   37283      v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
   37284      v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
   37285      v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
   37286      v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
   37287      v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
   37288      v2df __builtin_ia32_vpermilpd (v2df,int)
   37289      v4df __builtin_ia32_vpermilpd256 (v4df,int)
   37290      v4sf __builtin_ia32_vpermilps (v4sf,int)
   37291      v8sf __builtin_ia32_vpermilps256 (v8sf,int)
   37292      v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
   37293      v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
   37294      v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
   37295      v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
   37296      int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
   37297      int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
   37298      int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
   37299      int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
   37300      int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
   37301      int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
   37302      int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
   37303      int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
   37304      int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
   37305      int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
   37306      int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
   37307      int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
   37308      void __builtin_ia32_vzeroall (void)
   37309      void __builtin_ia32_vzeroupper (void)
   37310      v4df __builtin_ia32_xorpd256 (v4df,v4df)
   37311      v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
   37312 
   37313  The following built-in functions are available when '-mavx2' is used.
   37314 All of them generate the machine instruction that is part of the name.
   37315 
   37316      v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,v32qi,int)
   37317      v32qi __builtin_ia32_pabsb256 (v32qi)
   37318      v16hi __builtin_ia32_pabsw256 (v16hi)
   37319      v8si __builtin_ia32_pabsd256 (v8si)
   37320      v16hi __builtin_ia32_packssdw256 (v8si,v8si)
   37321      v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
   37322      v16hi __builtin_ia32_packusdw256 (v8si,v8si)
   37323      v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
   37324      v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
   37325      v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
   37326      v8si __builtin_ia32_paddd256 (v8si,v8si)
   37327      v4di __builtin_ia32_paddq256 (v4di,v4di)
   37328      v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
   37329      v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
   37330      v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
   37331      v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
   37332      v4di __builtin_ia32_palignr256 (v4di,v4di,int)
   37333      v4di __builtin_ia32_andsi256 (v4di,v4di)
   37334      v4di __builtin_ia32_andnotsi256 (v4di,v4di)
   37335      v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
   37336      v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
   37337      v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
   37338      v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
   37339      v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
   37340      v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
   37341      v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
   37342      v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
   37343      v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
   37344      v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
   37345      v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
   37346      v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
   37347      v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
   37348      v8si __builtin_ia32_phaddd256 (v8si,v8si)
   37349      v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
   37350      v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
   37351      v8si __builtin_ia32_phsubd256 (v8si,v8si)
   37352      v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
   37353      v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
   37354      v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
   37355      v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
   37356      v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
   37357      v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
   37358      v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
   37359      v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
   37360      v8si __builtin_ia32_pmaxud256 (v8si,v8si)
   37361      v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
   37362      v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
   37363      v8si __builtin_ia32_pminsd256 (v8si,v8si)
   37364      v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
   37365      v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
   37366      v8si __builtin_ia32_pminud256 (v8si,v8si)
   37367      int __builtin_ia32_pmovmskb256 (v32qi)
   37368      v16hi __builtin_ia32_pmovsxbw256 (v16qi)
   37369      v8si __builtin_ia32_pmovsxbd256 (v16qi)
   37370      v4di __builtin_ia32_pmovsxbq256 (v16qi)
   37371      v8si __builtin_ia32_pmovsxwd256 (v8hi)
   37372      v4di __builtin_ia32_pmovsxwq256 (v8hi)
   37373      v4di __builtin_ia32_pmovsxdq256 (v4si)
   37374      v16hi __builtin_ia32_pmovzxbw256 (v16qi)
   37375      v8si __builtin_ia32_pmovzxbd256 (v16qi)
   37376      v4di __builtin_ia32_pmovzxbq256 (v16qi)
   37377      v8si __builtin_ia32_pmovzxwd256 (v8hi)
   37378      v4di __builtin_ia32_pmovzxwq256 (v8hi)
   37379      v4di __builtin_ia32_pmovzxdq256 (v4si)
   37380      v4di __builtin_ia32_pmuldq256 (v8si,v8si)
   37381      v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
   37382      v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
   37383      v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
   37384      v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
   37385      v8si __builtin_ia32_pmulld256 (v8si,v8si)
   37386      v4di __builtin_ia32_pmuludq256 (v8si,v8si)
   37387      v4di __builtin_ia32_por256 (v4di,v4di)
   37388      v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
   37389      v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
   37390      v8si __builtin_ia32_pshufd256 (v8si,int)
   37391      v16hi __builtin_ia32_pshufhw256 (v16hi,int)
   37392      v16hi __builtin_ia32_pshuflw256 (v16hi,int)
   37393      v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
   37394      v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
   37395      v8si __builtin_ia32_psignd256 (v8si,v8si)
   37396      v4di __builtin_ia32_pslldqi256 (v4di,int)
   37397      v16hi __builtin_ia32_psllwi256 (16hi,int)
   37398      v16hi __builtin_ia32_psllw256(v16hi,v8hi)
   37399      v8si __builtin_ia32_pslldi256 (v8si,int)
   37400      v8si __builtin_ia32_pslld256(v8si,v4si)
   37401      v4di __builtin_ia32_psllqi256 (v4di,int)
   37402      v4di __builtin_ia32_psllq256(v4di,v2di)
   37403      v16hi __builtin_ia32_psrawi256 (v16hi,int)
   37404      v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
   37405      v8si __builtin_ia32_psradi256 (v8si,int)
   37406      v8si __builtin_ia32_psrad256 (v8si,v4si)
   37407      v4di __builtin_ia32_psrldqi256 (v4di, int)
   37408      v16hi __builtin_ia32_psrlwi256 (v16hi,int)
   37409      v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
   37410      v8si __builtin_ia32_psrldi256 (v8si,int)
   37411      v8si __builtin_ia32_psrld256 (v8si,v4si)
   37412      v4di __builtin_ia32_psrlqi256 (v4di,int)
   37413      v4di __builtin_ia32_psrlq256(v4di,v2di)
   37414      v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
   37415      v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
   37416      v8si __builtin_ia32_psubd256 (v8si,v8si)
   37417      v4di __builtin_ia32_psubq256 (v4di,v4di)
   37418      v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
   37419      v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
   37420      v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
   37421      v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
   37422      v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
   37423      v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
   37424      v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
   37425      v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
   37426      v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
   37427      v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
   37428      v8si __builtin_ia32_punpckldq256 (v8si,v8si)
   37429      v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
   37430      v4di __builtin_ia32_pxor256 (v4di,v4di)
   37431      v4di __builtin_ia32_movntdqa256 (pv4di)
   37432      v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
   37433      v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
   37434      v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
   37435      v4di __builtin_ia32_vbroadcastsi256 (v2di)
   37436      v4si __builtin_ia32_pblendd128 (v4si,v4si)
   37437      v8si __builtin_ia32_pblendd256 (v8si,v8si)
   37438      v32qi __builtin_ia32_pbroadcastb256 (v16qi)
   37439      v16hi __builtin_ia32_pbroadcastw256 (v8hi)
   37440      v8si __builtin_ia32_pbroadcastd256 (v4si)
   37441      v4di __builtin_ia32_pbroadcastq256 (v2di)
   37442      v16qi __builtin_ia32_pbroadcastb128 (v16qi)
   37443      v8hi __builtin_ia32_pbroadcastw128 (v8hi)
   37444      v4si __builtin_ia32_pbroadcastd128 (v4si)
   37445      v2di __builtin_ia32_pbroadcastq128 (v2di)
   37446      v8si __builtin_ia32_permvarsi256 (v8si,v8si)
   37447      v4df __builtin_ia32_permdf256 (v4df,int)
   37448      v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
   37449      v4di __builtin_ia32_permdi256 (v4di,int)
   37450      v4di __builtin_ia32_permti256 (v4di,v4di,int)
   37451      v4di __builtin_ia32_extract128i256 (v4di,int)
   37452      v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
   37453      v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
   37454      v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
   37455      v4si __builtin_ia32_maskloadd (pcv4si,v4si)
   37456      v2di __builtin_ia32_maskloadq (pcv2di,v2di)
   37457      void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
   37458      void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
   37459      void __builtin_ia32_maskstored (pv4si,v4si,v4si)
   37460      void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
   37461      v8si __builtin_ia32_psllv8si (v8si,v8si)
   37462      v4si __builtin_ia32_psllv4si (v4si,v4si)
   37463      v4di __builtin_ia32_psllv4di (v4di,v4di)
   37464      v2di __builtin_ia32_psllv2di (v2di,v2di)
   37465      v8si __builtin_ia32_psrav8si (v8si,v8si)
   37466      v4si __builtin_ia32_psrav4si (v4si,v4si)
   37467      v8si __builtin_ia32_psrlv8si (v8si,v8si)
   37468      v4si __builtin_ia32_psrlv4si (v4si,v4si)
   37469      v4di __builtin_ia32_psrlv4di (v4di,v4di)
   37470      v2di __builtin_ia32_psrlv2di (v2di,v2di)
   37471      v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
   37472      v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
   37473      v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
   37474      v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
   37475      v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
   37476      v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
   37477      v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
   37478      v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
   37479      v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
   37480      v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
   37481      v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
   37482      v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
   37483      v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
   37484      v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
   37485      v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
   37486      v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
   37487 
   37488  The following built-in functions are available when '-maes' is used.
   37489 All of them generate the machine instruction that is part of the name.
   37490 
   37491      v2di __builtin_ia32_aesenc128 (v2di, v2di)
   37492      v2di __builtin_ia32_aesenclast128 (v2di, v2di)
   37493      v2di __builtin_ia32_aesdec128 (v2di, v2di)
   37494      v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
   37495      v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
   37496      v2di __builtin_ia32_aesimc128 (v2di)
   37497 
   37498  The following built-in function is available when '-mpclmul' is used.
   37499 
   37500 'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
   37501      Generates the 'pclmulqdq' machine instruction.
   37502 
   37503  The following built-in function is available when '-mfsgsbase' is used.
   37504 All of them generate the machine instruction that is part of the name.
   37505 
   37506      unsigned int __builtin_ia32_rdfsbase32 (void)
   37507      unsigned long long __builtin_ia32_rdfsbase64 (void)
   37508      unsigned int __builtin_ia32_rdgsbase32 (void)
   37509      unsigned long long __builtin_ia32_rdgsbase64 (void)
   37510      void _writefsbase_u32 (unsigned int)
   37511      void _writefsbase_u64 (unsigned long long)
   37512      void _writegsbase_u32 (unsigned int)
   37513      void _writegsbase_u64 (unsigned long long)
   37514 
   37515  The following built-in function is available when '-mrdrnd' is used.
   37516 All of them generate the machine instruction that is part of the name.
   37517 
   37518      unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
   37519      unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
   37520      unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
   37521 
   37522  The following built-in functions are available when '-msse4a' is used.
   37523 All of them generate the machine instruction that is part of the name.
   37524 
   37525      void __builtin_ia32_movntsd (double *, v2df)
   37526      void __builtin_ia32_movntss (float *, v4sf)
   37527      v2di __builtin_ia32_extrq  (v2di, v16qi)
   37528      v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
   37529      v2di __builtin_ia32_insertq (v2di, v2di)
   37530      v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
   37531 
   37532  The following built-in functions are available when '-mxop' is used.
   37533      v2df __builtin_ia32_vfrczpd (v2df)
   37534      v4sf __builtin_ia32_vfrczps (v4sf)
   37535      v2df __builtin_ia32_vfrczsd (v2df, v2df)
   37536      v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
   37537      v4df __builtin_ia32_vfrczpd256 (v4df)
   37538      v8sf __builtin_ia32_vfrczps256 (v8sf)
   37539      v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
   37540      v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
   37541      v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
   37542      v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
   37543      v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
   37544      v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
   37545      v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
   37546      v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
   37547      v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
   37548      v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
   37549      v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
   37550      v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
   37551      v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
   37552      v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
   37553      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
   37554      v4si __builtin_ia32_vpcomeqd (v4si, v4si)
   37555      v2di __builtin_ia32_vpcomeqq (v2di, v2di)
   37556      v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
   37557      v4si __builtin_ia32_vpcomequd (v4si, v4si)
   37558      v2di __builtin_ia32_vpcomequq (v2di, v2di)
   37559      v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
   37560      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
   37561      v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
   37562      v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
   37563      v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
   37564      v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
   37565      v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
   37566      v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
   37567      v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
   37568      v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
   37569      v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
   37570      v4si __builtin_ia32_vpcomged (v4si, v4si)
   37571      v2di __builtin_ia32_vpcomgeq (v2di, v2di)
   37572      v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
   37573      v4si __builtin_ia32_vpcomgeud (v4si, v4si)
   37574      v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
   37575      v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
   37576      v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
   37577      v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
   37578      v4si __builtin_ia32_vpcomgtd (v4si, v4si)
   37579      v2di __builtin_ia32_vpcomgtq (v2di, v2di)
   37580      v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
   37581      v4si __builtin_ia32_vpcomgtud (v4si, v4si)
   37582      v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
   37583      v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
   37584      v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
   37585      v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
   37586      v4si __builtin_ia32_vpcomled (v4si, v4si)
   37587      v2di __builtin_ia32_vpcomleq (v2di, v2di)
   37588      v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
   37589      v4si __builtin_ia32_vpcomleud (v4si, v4si)
   37590      v2di __builtin_ia32_vpcomleuq (v2di, v2di)
   37591      v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
   37592      v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
   37593      v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
   37594      v4si __builtin_ia32_vpcomltd (v4si, v4si)
   37595      v2di __builtin_ia32_vpcomltq (v2di, v2di)
   37596      v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
   37597      v4si __builtin_ia32_vpcomltud (v4si, v4si)
   37598      v2di __builtin_ia32_vpcomltuq (v2di, v2di)
   37599      v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
   37600      v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
   37601      v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
   37602      v4si __builtin_ia32_vpcomned (v4si, v4si)
   37603      v2di __builtin_ia32_vpcomneq (v2di, v2di)
   37604      v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
   37605      v4si __builtin_ia32_vpcomneud (v4si, v4si)
   37606      v2di __builtin_ia32_vpcomneuq (v2di, v2di)
   37607      v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
   37608      v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
   37609      v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
   37610      v4si __builtin_ia32_vpcomtrued (v4si, v4si)
   37611      v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
   37612      v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
   37613      v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
   37614      v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
   37615      v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
   37616      v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
   37617      v4si __builtin_ia32_vphaddbd (v16qi)
   37618      v2di __builtin_ia32_vphaddbq (v16qi)
   37619      v8hi __builtin_ia32_vphaddbw (v16qi)
   37620      v2di __builtin_ia32_vphadddq (v4si)
   37621      v4si __builtin_ia32_vphaddubd (v16qi)
   37622      v2di __builtin_ia32_vphaddubq (v16qi)
   37623      v8hi __builtin_ia32_vphaddubw (v16qi)
   37624      v2di __builtin_ia32_vphaddudq (v4si)
   37625      v4si __builtin_ia32_vphadduwd (v8hi)
   37626      v2di __builtin_ia32_vphadduwq (v8hi)
   37627      v4si __builtin_ia32_vphaddwd (v8hi)
   37628      v2di __builtin_ia32_vphaddwq (v8hi)
   37629      v8hi __builtin_ia32_vphsubbw (v16qi)
   37630      v2di __builtin_ia32_vphsubdq (v4si)
   37631      v4si __builtin_ia32_vphsubwd (v8hi)
   37632      v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
   37633      v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
   37634      v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
   37635      v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
   37636      v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
   37637      v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
   37638      v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
   37639      v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
   37640      v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
   37641      v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
   37642      v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
   37643      v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
   37644      v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
   37645      v16qi __builtin_ia32_vprotb (v16qi, v16qi)
   37646      v4si __builtin_ia32_vprotd (v4si, v4si)
   37647      v2di __builtin_ia32_vprotq (v2di, v2di)
   37648      v8hi __builtin_ia32_vprotw (v8hi, v8hi)
   37649      v16qi __builtin_ia32_vpshab (v16qi, v16qi)
   37650      v4si __builtin_ia32_vpshad (v4si, v4si)
   37651      v2di __builtin_ia32_vpshaq (v2di, v2di)
   37652      v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
   37653      v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
   37654      v4si __builtin_ia32_vpshld (v4si, v4si)
   37655      v2di __builtin_ia32_vpshlq (v2di, v2di)
   37656      v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
   37657 
   37658  The following built-in functions are available when '-mfma4' is used.
   37659 All of them generate the machine instruction that is part of the name
   37660 with MMX registers.
   37661 
   37662      v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
   37663      v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
   37664      v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
   37665      v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
   37666      v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
   37667      v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
   37668      v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
   37669      v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
   37670      v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
   37671      v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
   37672      v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
   37673      v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
   37674      v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
   37675      v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
   37676      v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
   37677      v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
   37678      v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
   37679      v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
   37680      v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
   37681      v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
   37682      v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
   37683      v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
   37684      v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
   37685      v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
   37686      v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
   37687      v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
   37688      v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
   37689      v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
   37690      v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
   37691      v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
   37692      v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
   37693      v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
   37694 
   37695 
   37696  The following built-in functions are available when '-mlwp' is used.
   37697 
   37698      void __builtin_ia32_llwpcb16 (void *);
   37699      void __builtin_ia32_llwpcb32 (void *);
   37700      void __builtin_ia32_llwpcb64 (void *);
   37701      void * __builtin_ia32_llwpcb16 (void);
   37702      void * __builtin_ia32_llwpcb32 (void);
   37703      void * __builtin_ia32_llwpcb64 (void);
   37704      void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
   37705      void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
   37706      void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
   37707      unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
   37708      unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
   37709      unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
   37710 
   37711  The following built-in functions are available when '-mbmi' is used.
   37712 All of them generate the machine instruction that is part of the name.
   37713      unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
   37714      unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
   37715 
   37716  The following built-in functions are available when '-mbmi2' is used.
   37717 All of them generate the machine instruction that is part of the name.
   37718      unsigned int _bzhi_u32 (unsigned int, unsigned int)
   37719      unsigned int _pdep_u32 (unsigned int, unsigned int)
   37720      unsigned int _pext_u32 (unsigned int, unsigned int)
   37721      unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
   37722      unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
   37723      unsigned long long _pext_u64 (unsigned long long, unsigned long long)
   37724 
   37725  The following built-in functions are available when '-mlzcnt' is used.
   37726 All of them generate the machine instruction that is part of the name.
   37727      unsigned short __builtin_ia32_lzcnt_16(unsigned short);
   37728      unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
   37729      unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
   37730 
   37731  The following built-in functions are available when '-mtbm' is used.
   37732 Both of them generate the immediate form of the bextr machine
   37733 instruction.
   37734      unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
   37735      unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
   37736 
   37737  The following built-in functions are available when '-m3dnow' is used.
   37738 All of them generate the machine instruction that is part of the name.
   37739 
   37740      void __builtin_ia32_femms (void)
   37741      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
   37742      v2si __builtin_ia32_pf2id (v2sf)
   37743      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
   37744      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
   37745      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
   37746      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
   37747      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
   37748      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
   37749      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
   37750      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
   37751      v2sf __builtin_ia32_pfrcp (v2sf)
   37752      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
   37753      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
   37754      v2sf __builtin_ia32_pfrsqrt (v2sf)
   37755      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
   37756      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
   37757      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
   37758      v2sf __builtin_ia32_pi2fd (v2si)
   37759      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
   37760 
   37761  The following built-in functions are available when both '-m3dnow' and
   37762 '-march=athlon' are used.  All of them generate the machine instruction
   37763 that is part of the name.
   37764 
   37765      v2si __builtin_ia32_pf2iw (v2sf)
   37766      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
   37767      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
   37768      v2sf __builtin_ia32_pi2fw (v2si)
   37769      v2sf __builtin_ia32_pswapdsf (v2sf)
   37770      v2si __builtin_ia32_pswapdsi (v2si)
   37771 
   37772  The following built-in functions are available when '-mrtm' is used
   37773 They are used for restricted transactional memory.  These are the
   37774 internal low level functions.  Normally the functions in *note X86
   37775 transactional memory intrinsics:: should be used instead.
   37776 
   37777      int __builtin_ia32_xbegin ()
   37778      void __builtin_ia32_xend ()
   37779      void __builtin_ia32_xabort (status)
   37780      int __builtin_ia32_xtest ()
   37781 
   37782 
   37783 File: gcc.info,  Node: X86 transactional memory intrinsics,  Next: MIPS DSP Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
   37784 
   37785 6.56.8 X86 transaction memory intrinsics
   37786 ----------------------------------------
   37787 
   37788 Hardware transactional memory intrinsics for i386.  These allow to use
   37789 memory transactions with RTM (Restricted Transactional Memory).  For
   37790 using HLE (Hardware Lock Elision) see *note x86 specific memory model
   37791 extensions for transactional memory:: instead.  This support is enabled
   37792 with the '-mrtm' option.
   37793 
   37794  A memory transaction commits all changes to memory in an atomic way, as
   37795 visible to other threads.  If the transaction fails it is rolled back
   37796 and all side effects discarded.
   37797 
   37798  Generally there is no guarantee that a memory transaction ever suceeds
   37799 and suitable fallback code always needs to be supplied.
   37800 
   37801  -- RTM Function: unsigned _xbegin ()
   37802      Start a RTM (Restricted Transactional Memory) transaction.  Returns
   37803      _XBEGIN_STARTED when the transaction started successfully (note
   37804      this is not 0, so the constant has to be explicitely tested).  When
   37805      the transaction aborts all side effects are undone and an abort
   37806      code is returned.  There is no guarantee any transaction ever
   37807      succeeds, so there always needs to be a valid tested fallback path.
   37808 
   37809      #include <immintrin.h>
   37810 
   37811      if ((status = _xbegin ()) == _XBEGIN_STARTED) {
   37812          ... transaction code...
   37813          _xend ();
   37814      } else {
   37815          ... non transactional fallback path...
   37816      }
   37817 
   37818  Valid abort status bits (when the value is not '_XBEGIN_STARTED') are:
   37819 
   37820 '_XABORT_EXPLICIT'
   37821      Transaction explicitely aborted with '_xabort'.  The parameter
   37822      passed to '_xabort' is available with '_XABORT_CODE(status)'
   37823 '_XABORT_RETRY'
   37824      Transaction retry is possible.
   37825 '_XABORT_CONFLICT'
   37826      Transaction abort due to a memory conflict with another thread
   37827 '_XABORT_CAPACITY'
   37828      Transaction abort due to the transaction using too much memory
   37829 '_XABORT_DEBUG'
   37830      Transaction abort due to a debug trap
   37831 '_XABORT_NESTED'
   37832      Transaction abort in a inner nested transaction
   37833 
   37834  -- RTM Function: void _xend ()
   37835      Commit the current transaction.  When no transaction is active this
   37836      will fault.  All memory side effects of the transactions will
   37837      become visible to other threads in an atomic matter.
   37838 
   37839  -- RTM Function: int _xtest ()
   37840      Return a value not zero when a transaction is currently active,
   37841      otherwise 0.
   37842 
   37843  -- RTM Function: void _xabort (status)
   37844      Abort the current transaction.  When no transaction is active this
   37845      is a no-op.  status must be a 8bit constant, that is included in
   37846      the status code returned by '_xbegin'
   37847 
   37848 
   37849 File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 transactional memory intrinsics,  Up: Target Builtins
   37850 
   37851 6.56.9 MIPS DSP Built-in Functions
   37852 ----------------------------------
   37853 
   37854 The MIPS DSP Application-Specific Extension (ASE) includes new
   37855 instructions that are designed to improve the performance of DSP and
   37856 media applications.  It provides instructions that operate on packed
   37857 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
   37858 
   37859  GCC supports MIPS DSP operations using both the generic vector
   37860 extensions (*note Vector Extensions::) and a collection of MIPS-specific
   37861 built-in functions.  Both kinds of support are enabled by the '-mdsp'
   37862 command-line option.
   37863 
   37864  Revision 2 of the ASE was introduced in the second half of 2006.  This
   37865 revision adds extra instructions to the original ASE, but is otherwise
   37866 backwards-compatible with it.  You can select revision 2 using the
   37867 command-line option '-mdspr2'; this option implies '-mdsp'.
   37868 
   37869  The SCOUNT and POS bits of the DSP control register are global.  The
   37870 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
   37871 bits.  During optimization, the compiler does not delete these
   37872 instructions and it does not delete calls to functions containing these
   37873 instructions.
   37874 
   37875  At present, GCC only provides support for operations on 32-bit vectors.
   37876 The vector type associated with 8-bit integer data is usually called
   37877 'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
   37878 vector type associated with 16-bit integer data is usually called
   37879 'v2i16', and the vector type associated with Q15 is usually called
   37880 'v2q15'.  They can be defined in C as follows:
   37881 
   37882      typedef signed char v4i8 __attribute__ ((vector_size(4)));
   37883      typedef signed char v4q7 __attribute__ ((vector_size(4)));
   37884      typedef short v2i16 __attribute__ ((vector_size(4)));
   37885      typedef short v2q15 __attribute__ ((vector_size(4)));
   37886 
   37887  'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
   37888 way as aggregates.  For example:
   37889 
   37890      v4i8 a = {1, 2, 3, 4};
   37891      v4i8 b;
   37892      b = (v4i8) {5, 6, 7, 8};
   37893 
   37894      v2q15 c = {0x0fcb, 0x3a75};
   37895      v2q15 d;
   37896      d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
   37897 
   37898  _Note:_ The CPU's endianness determines the order in which values are
   37899 packed.  On little-endian targets, the first value is the least
   37900 significant and the last value is the most significant.  The opposite
   37901 order applies to big-endian targets.  For example, the code above sets
   37902 the lowest byte of 'a' to '1' on little-endian targets and '4' on
   37903 big-endian targets.
   37904 
   37905  _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
   37906 representation.  As shown in this example, the integer representation of
   37907 a Q7 value can be obtained by multiplying the fractional value by
   37908 '0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
   37909 The equivalent for Q31 values is to multiply by '0x1.0p31'.
   37910 
   37911  The table below lists the 'v4i8' and 'v2q15' operations for which
   37912 hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
   37913 are 'v2q15' values.
   37914 
   37915 C code                               MIPS instruction
   37916 'a + b'                              'addu.qb'
   37917 'c + d'                              'addq.ph'
   37918 'a - b'                              'subu.qb'
   37919 'c - d'                              'subq.ph'
   37920 
   37921  The table below lists the 'v2i16' operation for which hardware support
   37922 exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.
   37923 
   37924 C code                               MIPS instruction
   37925 'e * f'                              'mul.ph'
   37926 
   37927  It is easier to describe the DSP built-in functions if we first define
   37928 the following types:
   37929 
   37930      typedef int q31;
   37931      typedef int i32;
   37932      typedef unsigned int ui32;
   37933      typedef long long a64;
   37934 
   37935  'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
   37936 indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
   37937 value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
   37938 indicate values that are placed in one of the four DSP accumulators
   37939 ('$ac0', '$ac1', '$ac2' or '$ac3').
   37940 
   37941  Also, some built-in functions prefer or require immediate numbers as
   37942 parameters, because the corresponding DSP instructions accept both
   37943 immediate numbers and register operands, or accept immediate numbers
   37944 only.  The immediate parameters are listed as follows.
   37945 
   37946      imm0_3: 0 to 3.
   37947      imm0_7: 0 to 7.
   37948      imm0_15: 0 to 15.
   37949      imm0_31: 0 to 31.
   37950      imm0_63: 0 to 63.
   37951      imm0_255: 0 to 255.
   37952      imm_n32_31: -32 to 31.
   37953      imm_n512_511: -512 to 511.
   37954 
   37955  The following built-in functions map directly to a particular MIPS DSP
   37956 instruction.  Please refer to the architecture specification for details
   37957 on what each instruction does.
   37958 
   37959      v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
   37960      v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
   37961      q31 __builtin_mips_addq_s_w (q31, q31)
   37962      v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
   37963      v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
   37964      v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
   37965      v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
   37966      q31 __builtin_mips_subq_s_w (q31, q31)
   37967      v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
   37968      v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
   37969      i32 __builtin_mips_addsc (i32, i32)
   37970      i32 __builtin_mips_addwc (i32, i32)
   37971      i32 __builtin_mips_modsub (i32, i32)
   37972      i32 __builtin_mips_raddu_w_qb (v4i8)
   37973      v2q15 __builtin_mips_absq_s_ph (v2q15)
   37974      q31 __builtin_mips_absq_s_w (q31)
   37975      v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
   37976      v2q15 __builtin_mips_precrq_ph_w (q31, q31)
   37977      v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
   37978      v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
   37979      q31 __builtin_mips_preceq_w_phl (v2q15)
   37980      q31 __builtin_mips_preceq_w_phr (v2q15)
   37981      v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
   37982      v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
   37983      v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
   37984      v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
   37985      v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
   37986      v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
   37987      v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
   37988      v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
   37989      v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
   37990      v4i8 __builtin_mips_shll_qb (v4i8, i32)
   37991      v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
   37992      v2q15 __builtin_mips_shll_ph (v2q15, i32)
   37993      v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
   37994      v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
   37995      q31 __builtin_mips_shll_s_w (q31, imm0_31)
   37996      q31 __builtin_mips_shll_s_w (q31, i32)
   37997      v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
   37998      v4i8 __builtin_mips_shrl_qb (v4i8, i32)
   37999      v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
   38000      v2q15 __builtin_mips_shra_ph (v2q15, i32)
   38001      v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
   38002      v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
   38003      q31 __builtin_mips_shra_r_w (q31, imm0_31)
   38004      q31 __builtin_mips_shra_r_w (q31, i32)
   38005      v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
   38006      v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
   38007      v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
   38008      q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
   38009      q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
   38010      a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
   38011      a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
   38012      a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
   38013      a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
   38014      a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
   38015      a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
   38016      a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
   38017      a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
   38018      a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
   38019      a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
   38020      a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
   38021      a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
   38022      a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
   38023      i32 __builtin_mips_bitrev (i32)
   38024      i32 __builtin_mips_insv (i32, i32)
   38025      v4i8 __builtin_mips_repl_qb (imm0_255)
   38026      v4i8 __builtin_mips_repl_qb (i32)
   38027      v2q15 __builtin_mips_repl_ph (imm_n512_511)
   38028      v2q15 __builtin_mips_repl_ph (i32)
   38029      void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
   38030      void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
   38031      void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
   38032      i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
   38033      i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
   38034      i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
   38035      void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
   38036      void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
   38037      void __builtin_mips_cmp_le_ph (v2q15, v2q15)
   38038      v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
   38039      v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
   38040      v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
   38041      i32 __builtin_mips_extr_w (a64, imm0_31)
   38042      i32 __builtin_mips_extr_w (a64, i32)
   38043      i32 __builtin_mips_extr_r_w (a64, imm0_31)
   38044      i32 __builtin_mips_extr_s_h (a64, i32)
   38045      i32 __builtin_mips_extr_rs_w (a64, imm0_31)
   38046      i32 __builtin_mips_extr_rs_w (a64, i32)
   38047      i32 __builtin_mips_extr_s_h (a64, imm0_31)
   38048      i32 __builtin_mips_extr_r_w (a64, i32)
   38049      i32 __builtin_mips_extp (a64, imm0_31)
   38050      i32 __builtin_mips_extp (a64, i32)
   38051      i32 __builtin_mips_extpdp (a64, imm0_31)
   38052      i32 __builtin_mips_extpdp (a64, i32)
   38053      a64 __builtin_mips_shilo (a64, imm_n32_31)
   38054      a64 __builtin_mips_shilo (a64, i32)
   38055      a64 __builtin_mips_mthlip (a64, i32)
   38056      void __builtin_mips_wrdsp (i32, imm0_63)
   38057      i32 __builtin_mips_rddsp (imm0_63)
   38058      i32 __builtin_mips_lbux (void *, i32)
   38059      i32 __builtin_mips_lhx (void *, i32)
   38060      i32 __builtin_mips_lwx (void *, i32)
   38061      a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
   38062      i32 __builtin_mips_bposge32 (void)
   38063      a64 __builtin_mips_madd (a64, i32, i32);
   38064      a64 __builtin_mips_maddu (a64, ui32, ui32);
   38065      a64 __builtin_mips_msub (a64, i32, i32);
   38066      a64 __builtin_mips_msubu (a64, ui32, ui32);
   38067      a64 __builtin_mips_mult (i32, i32);
   38068      a64 __builtin_mips_multu (ui32, ui32);
   38069 
   38070  The following built-in functions map directly to a particular MIPS DSP
   38071 REV 2 instruction.  Please refer to the architecture specification for
   38072 details on what each instruction does.
   38073 
   38074      v4q7 __builtin_mips_absq_s_qb (v4q7);
   38075      v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
   38076      v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
   38077      v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
   38078      v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
   38079      i32 __builtin_mips_append (i32, i32, imm0_31);
   38080      i32 __builtin_mips_balign (i32, i32, imm0_3);
   38081      i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
   38082      i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
   38083      i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
   38084      a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
   38085      a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
   38086      v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
   38087      v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
   38088      q31 __builtin_mips_mulq_rs_w (q31, q31);
   38089      v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
   38090      q31 __builtin_mips_mulq_s_w (q31, q31);
   38091      a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
   38092      v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
   38093      v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
   38094      v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
   38095      i32 __builtin_mips_prepend (i32, i32, imm0_31);
   38096      v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
   38097      v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
   38098      v4i8 __builtin_mips_shra_qb (v4i8, i32);
   38099      v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
   38100      v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
   38101      v2i16 __builtin_mips_shrl_ph (v2i16, i32);
   38102      v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
   38103      v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
   38104      v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
   38105      v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
   38106      v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
   38107      v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
   38108      q31 __builtin_mips_addqh_w (q31, q31);
   38109      q31 __builtin_mips_addqh_r_w (q31, q31);
   38110      v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
   38111      v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
   38112      q31 __builtin_mips_subqh_w (q31, q31);
   38113      q31 __builtin_mips_subqh_r_w (q31, q31);
   38114      a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
   38115      a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
   38116      a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
   38117      a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
   38118      a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
   38119      a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
   38120 
   38121 
   38122 File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
   38123 
   38124 6.56.10 MIPS Paired-Single Support
   38125 ----------------------------------
   38126 
   38127 The MIPS64 architecture includes a number of instructions that operate
   38128 on pairs of single-precision floating-point values.  Each pair is packed
   38129 into a 64-bit floating-point register, with one element being designated
   38130 the "upper half" and the other being designated the "lower half".
   38131 
   38132  GCC supports paired-single operations using both the generic vector
   38133 extensions (*note Vector Extensions::) and a collection of MIPS-specific
   38134 built-in functions.  Both kinds of support are enabled by the
   38135 '-mpaired-single' command-line option.
   38136 
   38137  The vector type associated with paired-single values is usually called
   38138 'v2sf'.  It can be defined in C as follows:
   38139 
   38140      typedef float v2sf __attribute__ ((vector_size (8)));
   38141 
   38142  'v2sf' values are initialized in the same way as aggregates.  For
   38143 example:
   38144 
   38145      v2sf a = {1.5, 9.1};
   38146      v2sf b;
   38147      float e, f;
   38148      b = (v2sf) {e, f};
   38149 
   38150  _Note:_ The CPU's endianness determines which value is stored in the
   38151 upper half of a register and which value is stored in the lower half.
   38152 On little-endian targets, the first value is the lower one and the
   38153 second value is the upper one.  The opposite order applies to big-endian
   38154 targets.  For example, the code above sets the lower half of 'a' to
   38155 '1.5' on little-endian targets and '9.1' on big-endian targets.
   38156 
   38157 
   38158 File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
   38159 
   38160 6.56.11 MIPS Loongson Built-in Functions
   38161 ----------------------------------------
   38162 
   38163 GCC provides intrinsics to access the SIMD instructions provided by the
   38164 ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
   38165 available after inclusion of the 'loongson.h' header file, operate on
   38166 the following 64-bit vector types:
   38167 
   38168    * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
   38169    * 'uint16x4_t', a vector of four unsigned 16-bit integers;
   38170    * 'uint32x2_t', a vector of two unsigned 32-bit integers;
   38171    * 'int8x8_t', a vector of eight signed 8-bit integers;
   38172    * 'int16x4_t', a vector of four signed 16-bit integers;
   38173    * 'int32x2_t', a vector of two signed 32-bit integers.
   38174 
   38175  The intrinsics provided are listed below; each is named after the
   38176 machine instruction to which it corresponds, with suffixes added as
   38177 appropriate to distinguish intrinsics that expand to the same machine
   38178 instruction yet have different argument types.  Refer to the
   38179 architecture documentation for a description of the functionality of
   38180 each instruction.
   38181 
   38182      int16x4_t packsswh (int32x2_t s, int32x2_t t);
   38183      int8x8_t packsshb (int16x4_t s, int16x4_t t);
   38184      uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
   38185      uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
   38186      uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
   38187      uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
   38188      int32x2_t paddw_s (int32x2_t s, int32x2_t t);
   38189      int16x4_t paddh_s (int16x4_t s, int16x4_t t);
   38190      int8x8_t paddb_s (int8x8_t s, int8x8_t t);
   38191      uint64_t paddd_u (uint64_t s, uint64_t t);
   38192      int64_t paddd_s (int64_t s, int64_t t);
   38193      int16x4_t paddsh (int16x4_t s, int16x4_t t);
   38194      int8x8_t paddsb (int8x8_t s, int8x8_t t);
   38195      uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
   38196      uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
   38197      uint64_t pandn_ud (uint64_t s, uint64_t t);
   38198      uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
   38199      uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
   38200      uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
   38201      int64_t pandn_sd (int64_t s, int64_t t);
   38202      int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
   38203      int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
   38204      int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
   38205      uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
   38206      uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
   38207      uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
   38208      uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
   38209      uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
   38210      int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
   38211      int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
   38212      int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
   38213      uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
   38214      uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
   38215      uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
   38216      int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
   38217      int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
   38218      int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
   38219      uint16x4_t pextrh_u (uint16x4_t s, int field);
   38220      int16x4_t pextrh_s (int16x4_t s, int field);
   38221      uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
   38222      uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
   38223      uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
   38224      uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
   38225      int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
   38226      int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
   38227      int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
   38228      int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
   38229      int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
   38230      int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
   38231      uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
   38232      int16x4_t pminsh (int16x4_t s, int16x4_t t);
   38233      uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
   38234      uint8x8_t pmovmskb_u (uint8x8_t s);
   38235      int8x8_t pmovmskb_s (int8x8_t s);
   38236      uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
   38237      int16x4_t pmulhh (int16x4_t s, int16x4_t t);
   38238      int16x4_t pmullh (int16x4_t s, int16x4_t t);
   38239      int64_t pmuluw (uint32x2_t s, uint32x2_t t);
   38240      uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
   38241      uint16x4_t biadd (uint8x8_t s);
   38242      uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
   38243      uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
   38244      int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
   38245      uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
   38246      int16x4_t psllh_s (int16x4_t s, uint8_t amount);
   38247      uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
   38248      int32x2_t psllw_s (int32x2_t s, uint8_t amount);
   38249      uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
   38250      int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
   38251      uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
   38252      int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
   38253      uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
   38254      int16x4_t psrah_s (int16x4_t s, uint8_t amount);
   38255      uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
   38256      int32x2_t psraw_s (int32x2_t s, uint8_t amount);
   38257      uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
   38258      uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
   38259      uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
   38260      int32x2_t psubw_s (int32x2_t s, int32x2_t t);
   38261      int16x4_t psubh_s (int16x4_t s, int16x4_t t);
   38262      int8x8_t psubb_s (int8x8_t s, int8x8_t t);
   38263      uint64_t psubd_u (uint64_t s, uint64_t t);
   38264      int64_t psubd_s (int64_t s, int64_t t);
   38265      int16x4_t psubsh (int16x4_t s, int16x4_t t);
   38266      int8x8_t psubsb (int8x8_t s, int8x8_t t);
   38267      uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
   38268      uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
   38269      uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
   38270      uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
   38271      uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
   38272      int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
   38273      int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
   38274      int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
   38275      uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
   38276      uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
   38277      uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
   38278      int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
   38279      int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
   38280      int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
   38281 
   38282 * Menu:
   38283 
   38284 * Paired-Single Arithmetic::
   38285 * Paired-Single Built-in Functions::
   38286 * MIPS-3D Built-in Functions::
   38287 
   38288 
   38289 File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
   38290 
   38291 6.56.11.1 Paired-Single Arithmetic
   38292 ..................................
   38293 
   38294 The table below lists the 'v2sf' operations for which hardware support
   38295 exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
   38296 value.
   38297 
   38298 C code                               MIPS instruction
   38299 'a + b'                              'add.ps'
   38300 'a - b'                              'sub.ps'
   38301 '-a'                                 'neg.ps'
   38302 'a * b'                              'mul.ps'
   38303 'a * b + c'                          'madd.ps'
   38304 'a * b - c'                          'msub.ps'
   38305 '-(a * b + c)'                       'nmadd.ps'
   38306 '-(a * b - c)'                       'nmsub.ps'
   38307 'x ? a : b'                          'movn.ps'/'movz.ps'
   38308 
   38309  Note that the multiply-accumulate instructions can be disabled using
   38310 the command-line option '-mno-fused-madd'.
   38311 
   38312 
   38313 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
   38314 
   38315 6.56.11.2 Paired-Single Built-in Functions
   38316 ..........................................
   38317 
   38318 The following paired-single functions map directly to a particular MIPS
   38319 instruction.  Please refer to the architecture specification for details
   38320 on what each instruction does.
   38321 
   38322 'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
   38323      Pair lower lower ('pll.ps').
   38324 
   38325 'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
   38326      Pair upper lower ('pul.ps').
   38327 
   38328 'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
   38329      Pair lower upper ('plu.ps').
   38330 
   38331 'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
   38332      Pair upper upper ('puu.ps').
   38333 
   38334 'v2sf __builtin_mips_cvt_ps_s (float, float)'
   38335      Convert pair to paired single ('cvt.ps.s').
   38336 
   38337 'float __builtin_mips_cvt_s_pl (v2sf)'
   38338      Convert pair lower to single ('cvt.s.pl').
   38339 
   38340 'float __builtin_mips_cvt_s_pu (v2sf)'
   38341      Convert pair upper to single ('cvt.s.pu').
   38342 
   38343 'v2sf __builtin_mips_abs_ps (v2sf)'
   38344      Absolute value ('abs.ps').
   38345 
   38346 'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
   38347      Align variable ('alnv.ps').
   38348 
   38349      _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
   38350      otherwise the result is unpredictable.  Please read the instruction
   38351      description for details.
   38352 
   38353  The following multi-instruction functions are also available.  In each
   38354 case, COND can be any of the 16 floating-point conditions: 'f', 'un',
   38355 'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
   38356 'lt', 'nge', 'le' or 'ngt'.
   38357 
   38358 'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38359 'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38360      Conditional move based on floating-point comparison ('c.COND.ps',
   38361      'movt.ps'/'movf.ps').
   38362 
   38363      The 'movt' functions return the value X computed by:
   38364 
   38365           c.COND.ps CC,A,B
   38366           mov.ps X,C
   38367           movt.ps X,D,CC
   38368 
   38369      The 'movf' functions are similar but use 'movf.ps' instead of
   38370      'movt.ps'.
   38371 
   38372 'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
   38373 'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
   38374      Comparison of two paired-single values ('c.COND.ps',
   38375      'bc1t'/'bc1f').
   38376 
   38377      These functions compare A and B using 'c.COND.ps' and return either
   38378      the upper or lower half of the result.  For example:
   38379 
   38380           v2sf a, b;
   38381           if (__builtin_mips_upper_c_eq_ps (a, b))
   38382             upper_halves_are_equal ();
   38383           else
   38384             upper_halves_are_unequal ();
   38385 
   38386           if (__builtin_mips_lower_c_eq_ps (a, b))
   38387             lower_halves_are_equal ();
   38388           else
   38389             lower_halves_are_unequal ();
   38390 
   38391 
   38392 File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
   38393 
   38394 6.56.11.3 MIPS-3D Built-in Functions
   38395 ....................................
   38396 
   38397 The MIPS-3D Application-Specific Extension (ASE) includes additional
   38398 paired-single instructions that are designed to improve the performance
   38399 of 3D graphics operations.  Support for these instructions is controlled
   38400 by the '-mips3d' command-line option.
   38401 
   38402  The functions listed below map directly to a particular MIPS-3D
   38403 instruction.  Please refer to the architecture specification for more
   38404 details on what each instruction does.
   38405 
   38406 'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
   38407      Reduction add ('addr.ps').
   38408 
   38409 'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
   38410      Reduction multiply ('mulr.ps').
   38411 
   38412 'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
   38413      Convert paired single to paired word ('cvt.pw.ps').
   38414 
   38415 'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
   38416      Convert paired word to paired single ('cvt.ps.pw').
   38417 
   38418 'float __builtin_mips_recip1_s (float)'
   38419 'double __builtin_mips_recip1_d (double)'
   38420 'v2sf __builtin_mips_recip1_ps (v2sf)'
   38421      Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').
   38422 
   38423 'float __builtin_mips_recip2_s (float, float)'
   38424 'double __builtin_mips_recip2_d (double, double)'
   38425 'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
   38426      Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').
   38427 
   38428 'float __builtin_mips_rsqrt1_s (float)'
   38429 'double __builtin_mips_rsqrt1_d (double)'
   38430 'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
   38431      Reduced-precision reciprocal square root (sequence step 1)
   38432      ('rsqrt1.FMT').
   38433 
   38434 'float __builtin_mips_rsqrt2_s (float, float)'
   38435 'double __builtin_mips_rsqrt2_d (double, double)'
   38436 'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
   38437      Reduced-precision reciprocal square root (sequence step 2)
   38438      ('rsqrt2.FMT').
   38439 
   38440  The following multi-instruction functions are also available.  In each
   38441 case, COND can be any of the 16 floating-point conditions: 'f', 'un',
   38442 'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
   38443 'lt', 'nge', 'le' or 'ngt'.
   38444 
   38445 'int __builtin_mips_cabs_COND_s (float A, float B)'
   38446 'int __builtin_mips_cabs_COND_d (double A, double B)'
   38447      Absolute comparison of two scalar values ('cabs.COND.FMT',
   38448      'bc1t'/'bc1f').
   38449 
   38450      These functions compare A and B using 'cabs.COND.s' or
   38451      'cabs.COND.d' and return the result as a boolean value.  For
   38452      example:
   38453 
   38454           float a, b;
   38455           if (__builtin_mips_cabs_eq_s (a, b))
   38456             true ();
   38457           else
   38458             false ();
   38459 
   38460 'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
   38461 'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
   38462      Absolute comparison of two paired-single values ('cabs.COND.ps',
   38463      'bc1t'/'bc1f').
   38464 
   38465      These functions compare A and B using 'cabs.COND.ps' and return
   38466      either the upper or lower half of the result.  For example:
   38467 
   38468           v2sf a, b;
   38469           if (__builtin_mips_upper_cabs_eq_ps (a, b))
   38470             upper_halves_are_equal ();
   38471           else
   38472             upper_halves_are_unequal ();
   38473 
   38474           if (__builtin_mips_lower_cabs_eq_ps (a, b))
   38475             lower_halves_are_equal ();
   38476           else
   38477             lower_halves_are_unequal ();
   38478 
   38479 'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38480 'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   38481      Conditional move based on absolute comparison ('cabs.COND.ps',
   38482      'movt.ps'/'movf.ps').
   38483 
   38484      The 'movt' functions return the value X computed by:
   38485 
   38486           cabs.COND.ps CC,A,B
   38487           mov.ps X,C
   38488           movt.ps X,D,CC
   38489 
   38490      The 'movf' functions are similar but use 'movf.ps' instead of
   38491      'movt.ps'.
   38492 
   38493 'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
   38494 'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
   38495 'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
   38496 'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
   38497      Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
   38498      'bc1any2t'/'bc1any2f').
   38499 
   38500      These functions compare A and B using 'c.COND.ps' or
   38501      'cabs.COND.ps'.  The 'any' forms return true if either result is
   38502      true and the 'all' forms return true if both results are true.  For
   38503      example:
   38504 
   38505           v2sf a, b;
   38506           if (__builtin_mips_any_c_eq_ps (a, b))
   38507             one_is_true ();
   38508           else
   38509             both_are_false ();
   38510 
   38511           if (__builtin_mips_all_c_eq_ps (a, b))
   38512             both_are_true ();
   38513           else
   38514             one_is_false ();
   38515 
   38516 'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38517 'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38518 'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38519 'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   38520      Comparison of four paired-single values
   38521      ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').
   38522 
   38523      These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
   38524      B and to compare C with D.  The 'any' forms return true if any of
   38525      the four results are true and the 'all' forms return true if all
   38526      four results are true.  For example:
   38527 
   38528           v2sf a, b, c, d;
   38529           if (__builtin_mips_any_c_eq_4s (a, b, c, d))
   38530             some_are_true ();
   38531           else
   38532             all_are_false ();
   38533 
   38534           if (__builtin_mips_all_c_eq_4s (a, b, c, d))
   38535             all_are_true ();
   38536           else
   38537             some_are_false ();
   38538 
   38539 
   38540 File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
   38541 
   38542 6.56.12 Other MIPS Built-in Functions
   38543 -------------------------------------
   38544 
   38545 GCC provides other MIPS-specific built-in functions:
   38546 
   38547 'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
   38548      Insert a 'cache' instruction with operands OP and ADDR.  GCC
   38549      defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
   38550      when this function is available.
   38551 
   38552 
   38553 File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
   38554 
   38555 6.56.13 picoChip Built-in Functions
   38556 -----------------------------------
   38557 
   38558 GCC provides an interface to selected machine instructions from the
   38559 picoChip instruction set.
   38560 
   38561 'int __builtin_sbc (int VALUE)'
   38562      Sign bit count.  Return the number of consecutive bits in VALUE
   38563      that have the same value as the sign bit.  The result is the number
   38564      of leading sign bits minus one, giving the number of redundant sign
   38565      bits in VALUE.
   38566 
   38567 'int __builtin_byteswap (int VALUE)'
   38568      Byte swap.  Return the result of swapping the upper and lower bytes
   38569      of VALUE.
   38570 
   38571 'int __builtin_brev (int VALUE)'
   38572      Bit reversal.  Return the result of reversing the bits in VALUE.
   38573      Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
   38574      on.
   38575 
   38576 'int __builtin_adds (int X, int Y)'
   38577      Saturating addition.  Return the result of adding X and Y, storing
   38578      the value 32767 if the result overflows.
   38579 
   38580 'int __builtin_subs (int X, int Y)'
   38581      Saturating subtraction.  Return the result of subtracting Y from X,
   38582      storing the value -32768 if the result overflows.
   38583 
   38584 'void __builtin_halt (void)'
   38585      Halt.  The processor stops execution.  This built-in is useful for
   38586      implementing assertions.
   38587 
   38588 
   38589 File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
   38590 
   38591 6.56.14 PowerPC Built-in Functions
   38592 ----------------------------------
   38593 
   38594 These built-in functions are available for the PowerPC family of
   38595 processors:
   38596      float __builtin_recipdivf (float, float);
   38597      float __builtin_rsqrtf (float);
   38598      double __builtin_recipdiv (double, double);
   38599      double __builtin_rsqrt (double);
   38600      uint64_t __builtin_ppc_get_timebase ();
   38601      unsigned long __builtin_ppc_mftb ();
   38602      double __builtin_unpack_longdouble (long double, int);
   38603      double __builtin_longdouble_dw0 (long double);
   38604      double __builtin_longdouble_dw1 (long double);
   38605      long double __builtin_pack_longdouble (double, double);
   38606 
   38607  The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
   38608 generate multiple instructions to implement the reciprocal sqrt
   38609 functionality using reciprocal sqrt estimate instructions.
   38610 
   38611  The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
   38612 multiple instructions to implement division using the reciprocal
   38613 estimate instructions.
   38614 
   38615  The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
   38616 generate instructions to read the Time Base Register.  The
   38617 '__builtin_ppc_get_timebase' function may generate multiple instructions
   38618 and always returns the 64 bits of the Time Base Register.  The
   38619 '__builtin_ppc_mftb' function always generates one instruction and
   38620 returns the Time Base Register value as an unsigned long, throwing away
   38621 the most significant word on 32-bit environments.
   38622 
   38623  The following built-in functions are available for the PowerPC family
   38624 of processors, starting with ISA 2.06 or later ('-mcpu=power7' or
   38625 '-mpopcntd'):
   38626      long __builtin_bpermd (long, long);
   38627      int __builtin_divwe (int, int);
   38628      int __builtin_divweo (int, int);
   38629      unsigned int __builtin_divweu (unsigned int, unsigned int);
   38630      unsigned int __builtin_divweuo (unsigned int, unsigned int);
   38631      long __builtin_divde (long, long);
   38632      long __builtin_divdeo (long, long);
   38633      unsigned long __builtin_divdeu (unsigned long, unsigned long);
   38634      unsigned long __builtin_divdeuo (unsigned long, unsigned long);
   38635      unsigned int cdtbcd (unsigned int);
   38636      unsigned int cbcdtd (unsigned int);
   38637      unsigned int addg6s (unsigned int, unsigned int);
   38638 
   38639  The '__builtin_divde', '__builtin_divdeo', '__builitin_divdeu',
   38640 '__builtin_divdeou' functions require a 64-bit environment support ISA
   38641 2.06 or later.
   38642 
   38643  The following built-in functions are available for the PowerPC family
   38644 of processors when hardware decimal floating point ('-mhard-dfp') is
   38645 available:
   38646      _Decimal64 __builtin_dxex (_Decimal64);
   38647      _Decimal128 __builtin_dxexq (_Decimal128);
   38648      _Decimal64 __builtin_ddedpd (int, _Decimal64);
   38649      _Decimal128 __builtin_ddedpdq (int, _Decimal128);
   38650      _Decimal64 __builtin_denbcd (int, _Decimal64);
   38651      _Decimal128 __builtin_denbcdq (int, _Decimal128);
   38652      _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
   38653      _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
   38654      _Decimal64 __builtin_dscli (_Decimal64, int);
   38655      _Decimal128 __builitn_dscliq (_Decimal128, int);
   38656      _Decimal64 __builtin_dscri (_Decimal64, int);
   38657      _Decimal128 __builitn_dscriq (_Decimal128, int);
   38658      unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
   38659      _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
   38660 
   38661  The following built-in functions are available for the PowerPC family
   38662 of processors when the Vector Scalar (vsx) instruction set is available:
   38663      unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
   38664      vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
   38665                                                      unsigned long long);
   38666 
   38667 
   38668 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
   38669 
   38670 6.56.15 PowerPC AltiVec Built-in Functions
   38671 ------------------------------------------
   38672 
   38673 GCC provides an interface for the PowerPC family of processors to access
   38674 the AltiVec operations described in Motorola's AltiVec Programming
   38675 Interface Manual.  The interface is made available by including
   38676 '<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
   38677 supports the following vector types.
   38678 
   38679      vector unsigned char
   38680      vector signed char
   38681      vector bool char
   38682 
   38683      vector unsigned short
   38684      vector signed short
   38685      vector bool short
   38686      vector pixel
   38687 
   38688      vector unsigned int
   38689      vector signed int
   38690      vector bool int
   38691      vector float
   38692 
   38693  If '-mvsx' is used the following additional vector types are
   38694 implemented.
   38695 
   38696      vector unsigned long
   38697      vector signed long
   38698      vector double
   38699 
   38700  The long types are only implemented for 64-bit code generation, and the
   38701 long type is only used in the floating point/integer conversion
   38702 instructions.
   38703 
   38704  GCC's implementation of the high-level language interface available
   38705 from C and C++ code differs from Motorola's documentation in several
   38706 ways.
   38707 
   38708    * A vector constant is a list of constant expressions within curly
   38709      braces.
   38710 
   38711    * A vector initializer requires no cast if the vector constant is of
   38712      the same type as the variable it is initializing.
   38713 
   38714    * If 'signed' or 'unsigned' is omitted, the signedness of the vector
   38715      type is the default signedness of the base type.  The default
   38716      varies depending on the operating system, so a portable program
   38717      should always specify the signedness.
   38718 
   38719    * Compiling with '-maltivec' adds keywords '__vector', 'vector',
   38720      '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
   38721      context-sensitive substitution of the keywords 'vector', 'pixel'
   38722      and 'bool' is disabled.  To use them, you must include
   38723      '<altivec.h>' instead.
   38724 
   38725    * GCC allows using a 'typedef' name as the type specifier for a
   38726      vector type.
   38727 
   38728    * For C, overloaded functions are implemented with macros so the
   38729      following does not work:
   38730 
   38731             vec_add ((vector signed int){1, 2, 3, 4}, foo);
   38732 
   38733      Since 'vec_add' is a macro, the vector constant in the example is
   38734      treated as four separate arguments.  Wrap the entire argument in
   38735      parentheses for this to work.
   38736 
   38737  _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
   38738 uses built-in functions to achieve the functionality in the
   38739 aforementioned header file, but they are not supported and are subject
   38740 to change without notice.
   38741 
   38742  The following interfaces are supported for the generic and specific
   38743 AltiVec operations and the AltiVec predicates.  In cases where there is
   38744 a direct mapping between generic and specific operations, only the
   38745 generic names are shown here, although the specific operations can also
   38746 be used.
   38747 
   38748  Arguments that are documented as 'const int' require literal integral
   38749 values within the range required for that operation.
   38750 
   38751      vector signed char vec_abs (vector signed char);
   38752      vector signed short vec_abs (vector signed short);
   38753      vector signed int vec_abs (vector signed int);
   38754      vector float vec_abs (vector float);
   38755 
   38756      vector signed char vec_abss (vector signed char);
   38757      vector signed short vec_abss (vector signed short);
   38758      vector signed int vec_abss (vector signed int);
   38759 
   38760      vector signed char vec_add (vector bool char, vector signed char);
   38761      vector signed char vec_add (vector signed char, vector bool char);
   38762      vector signed char vec_add (vector signed char, vector signed char);
   38763      vector unsigned char vec_add (vector bool char, vector unsigned char);
   38764      vector unsigned char vec_add (vector unsigned char, vector bool char);
   38765      vector unsigned char vec_add (vector unsigned char,
   38766                                    vector unsigned char);
   38767      vector signed short vec_add (vector bool short, vector signed short);
   38768      vector signed short vec_add (vector signed short, vector bool short);
   38769      vector signed short vec_add (vector signed short, vector signed short);
   38770      vector unsigned short vec_add (vector bool short,
   38771                                     vector unsigned short);
   38772      vector unsigned short vec_add (vector unsigned short,
   38773                                     vector bool short);
   38774      vector unsigned short vec_add (vector unsigned short,
   38775                                     vector unsigned short);
   38776      vector signed int vec_add (vector bool int, vector signed int);
   38777      vector signed int vec_add (vector signed int, vector bool int);
   38778      vector signed int vec_add (vector signed int, vector signed int);
   38779      vector unsigned int vec_add (vector bool int, vector unsigned int);
   38780      vector unsigned int vec_add (vector unsigned int, vector bool int);
   38781      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
   38782      vector float vec_add (vector float, vector float);
   38783 
   38784      vector float vec_vaddfp (vector float, vector float);
   38785 
   38786      vector signed int vec_vadduwm (vector bool int, vector signed int);
   38787      vector signed int vec_vadduwm (vector signed int, vector bool int);
   38788      vector signed int vec_vadduwm (vector signed int, vector signed int);
   38789      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
   38790      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
   38791      vector unsigned int vec_vadduwm (vector unsigned int,
   38792                                       vector unsigned int);
   38793 
   38794      vector signed short vec_vadduhm (vector bool short,
   38795                                       vector signed short);
   38796      vector signed short vec_vadduhm (vector signed short,
   38797                                       vector bool short);
   38798      vector signed short vec_vadduhm (vector signed short,
   38799                                       vector signed short);
   38800      vector unsigned short vec_vadduhm (vector bool short,
   38801                                         vector unsigned short);
   38802      vector unsigned short vec_vadduhm (vector unsigned short,
   38803                                         vector bool short);
   38804      vector unsigned short vec_vadduhm (vector unsigned short,
   38805                                         vector unsigned short);
   38806 
   38807      vector signed char vec_vaddubm (vector bool char, vector signed char);
   38808      vector signed char vec_vaddubm (vector signed char, vector bool char);
   38809      vector signed char vec_vaddubm (vector signed char, vector signed char);
   38810      vector unsigned char vec_vaddubm (vector bool char,
   38811                                        vector unsigned char);
   38812      vector unsigned char vec_vaddubm (vector unsigned char,
   38813                                        vector bool char);
   38814      vector unsigned char vec_vaddubm (vector unsigned char,
   38815                                        vector unsigned char);
   38816 
   38817      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
   38818 
   38819      vector unsigned char vec_adds (vector bool char, vector unsigned char);
   38820      vector unsigned char vec_adds (vector unsigned char, vector bool char);
   38821      vector unsigned char vec_adds (vector unsigned char,
   38822                                     vector unsigned char);
   38823      vector signed char vec_adds (vector bool char, vector signed char);
   38824      vector signed char vec_adds (vector signed char, vector bool char);
   38825      vector signed char vec_adds (vector signed char, vector signed char);
   38826      vector unsigned short vec_adds (vector bool short,
   38827                                      vector unsigned short);
   38828      vector unsigned short vec_adds (vector unsigned short,
   38829                                      vector bool short);
   38830      vector unsigned short vec_adds (vector unsigned short,
   38831                                      vector unsigned short);
   38832      vector signed short vec_adds (vector bool short, vector signed short);
   38833      vector signed short vec_adds (vector signed short, vector bool short);
   38834      vector signed short vec_adds (vector signed short, vector signed short);
   38835      vector unsigned int vec_adds (vector bool int, vector unsigned int);
   38836      vector unsigned int vec_adds (vector unsigned int, vector bool int);
   38837      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
   38838      vector signed int vec_adds (vector bool int, vector signed int);
   38839      vector signed int vec_adds (vector signed int, vector bool int);
   38840      vector signed int vec_adds (vector signed int, vector signed int);
   38841 
   38842      vector signed int vec_vaddsws (vector bool int, vector signed int);
   38843      vector signed int vec_vaddsws (vector signed int, vector bool int);
   38844      vector signed int vec_vaddsws (vector signed int, vector signed int);
   38845 
   38846      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
   38847      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
   38848      vector unsigned int vec_vadduws (vector unsigned int,
   38849                                       vector unsigned int);
   38850 
   38851      vector signed short vec_vaddshs (vector bool short,
   38852                                       vector signed short);
   38853      vector signed short vec_vaddshs (vector signed short,
   38854                                       vector bool short);
   38855      vector signed short vec_vaddshs (vector signed short,
   38856                                       vector signed short);
   38857 
   38858      vector unsigned short vec_vadduhs (vector bool short,
   38859                                         vector unsigned short);
   38860      vector unsigned short vec_vadduhs (vector unsigned short,
   38861                                         vector bool short);
   38862      vector unsigned short vec_vadduhs (vector unsigned short,
   38863                                         vector unsigned short);
   38864 
   38865      vector signed char vec_vaddsbs (vector bool char, vector signed char);
   38866      vector signed char vec_vaddsbs (vector signed char, vector bool char);
   38867      vector signed char vec_vaddsbs (vector signed char, vector signed char);
   38868 
   38869      vector unsigned char vec_vaddubs (vector bool char,
   38870                                        vector unsigned char);
   38871      vector unsigned char vec_vaddubs (vector unsigned char,
   38872                                        vector bool char);
   38873      vector unsigned char vec_vaddubs (vector unsigned char,
   38874                                        vector unsigned char);
   38875 
   38876      vector float vec_and (vector float, vector float);
   38877      vector float vec_and (vector float, vector bool int);
   38878      vector float vec_and (vector bool int, vector float);
   38879      vector bool int vec_and (vector bool int, vector bool int);
   38880      vector signed int vec_and (vector bool int, vector signed int);
   38881      vector signed int vec_and (vector signed int, vector bool int);
   38882      vector signed int vec_and (vector signed int, vector signed int);
   38883      vector unsigned int vec_and (vector bool int, vector unsigned int);
   38884      vector unsigned int vec_and (vector unsigned int, vector bool int);
   38885      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
   38886      vector bool short vec_and (vector bool short, vector bool short);
   38887      vector signed short vec_and (vector bool short, vector signed short);
   38888      vector signed short vec_and (vector signed short, vector bool short);
   38889      vector signed short vec_and (vector signed short, vector signed short);
   38890      vector unsigned short vec_and (vector bool short,
   38891                                     vector unsigned short);
   38892      vector unsigned short vec_and (vector unsigned short,
   38893                                     vector bool short);
   38894      vector unsigned short vec_and (vector unsigned short,
   38895                                     vector unsigned short);
   38896      vector signed char vec_and (vector bool char, vector signed char);
   38897      vector bool char vec_and (vector bool char, vector bool char);
   38898      vector signed char vec_and (vector signed char, vector bool char);
   38899      vector signed char vec_and (vector signed char, vector signed char);
   38900      vector unsigned char vec_and (vector bool char, vector unsigned char);
   38901      vector unsigned char vec_and (vector unsigned char, vector bool char);
   38902      vector unsigned char vec_and (vector unsigned char,
   38903                                    vector unsigned char);
   38904 
   38905      vector float vec_andc (vector float, vector float);
   38906      vector float vec_andc (vector float, vector bool int);
   38907      vector float vec_andc (vector bool int, vector float);
   38908      vector bool int vec_andc (vector bool int, vector bool int);
   38909      vector signed int vec_andc (vector bool int, vector signed int);
   38910      vector signed int vec_andc (vector signed int, vector bool int);
   38911      vector signed int vec_andc (vector signed int, vector signed int);
   38912      vector unsigned int vec_andc (vector bool int, vector unsigned int);
   38913      vector unsigned int vec_andc (vector unsigned int, vector bool int);
   38914      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
   38915      vector bool short vec_andc (vector bool short, vector bool short);
   38916      vector signed short vec_andc (vector bool short, vector signed short);
   38917      vector signed short vec_andc (vector signed short, vector bool short);
   38918      vector signed short vec_andc (vector signed short, vector signed short);
   38919      vector unsigned short vec_andc (vector bool short,
   38920                                      vector unsigned short);
   38921      vector unsigned short vec_andc (vector unsigned short,
   38922                                      vector bool short);
   38923      vector unsigned short vec_andc (vector unsigned short,
   38924                                      vector unsigned short);
   38925      vector signed char vec_andc (vector bool char, vector signed char);
   38926      vector bool char vec_andc (vector bool char, vector bool char);
   38927      vector signed char vec_andc (vector signed char, vector bool char);
   38928      vector signed char vec_andc (vector signed char, vector signed char);
   38929      vector unsigned char vec_andc (vector bool char, vector unsigned char);
   38930      vector unsigned char vec_andc (vector unsigned char, vector bool char);
   38931      vector unsigned char vec_andc (vector unsigned char,
   38932                                     vector unsigned char);
   38933 
   38934      vector unsigned char vec_avg (vector unsigned char,
   38935                                    vector unsigned char);
   38936      vector signed char vec_avg (vector signed char, vector signed char);
   38937      vector unsigned short vec_avg (vector unsigned short,
   38938                                     vector unsigned short);
   38939      vector signed short vec_avg (vector signed short, vector signed short);
   38940      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
   38941      vector signed int vec_avg (vector signed int, vector signed int);
   38942 
   38943      vector signed int vec_vavgsw (vector signed int, vector signed int);
   38944 
   38945      vector unsigned int vec_vavguw (vector unsigned int,
   38946                                      vector unsigned int);
   38947 
   38948      vector signed short vec_vavgsh (vector signed short,
   38949                                      vector signed short);
   38950 
   38951      vector unsigned short vec_vavguh (vector unsigned short,
   38952                                        vector unsigned short);
   38953 
   38954      vector signed char vec_vavgsb (vector signed char, vector signed char);
   38955 
   38956      vector unsigned char vec_vavgub (vector unsigned char,
   38957                                       vector unsigned char);
   38958 
   38959      vector float vec_copysign (vector float);
   38960 
   38961      vector float vec_ceil (vector float);
   38962 
   38963      vector signed int vec_cmpb (vector float, vector float);
   38964 
   38965      vector bool char vec_cmpeq (vector signed char, vector signed char);
   38966      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
   38967      vector bool short vec_cmpeq (vector signed short, vector signed short);
   38968      vector bool short vec_cmpeq (vector unsigned short,
   38969                                   vector unsigned short);
   38970      vector bool int vec_cmpeq (vector signed int, vector signed int);
   38971      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
   38972      vector bool int vec_cmpeq (vector float, vector float);
   38973 
   38974      vector bool int vec_vcmpeqfp (vector float, vector float);
   38975 
   38976      vector bool int vec_vcmpequw (vector signed int, vector signed int);
   38977      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
   38978 
   38979      vector bool short vec_vcmpequh (vector signed short,
   38980                                      vector signed short);
   38981      vector bool short vec_vcmpequh (vector unsigned short,
   38982                                      vector unsigned short);
   38983 
   38984      vector bool char vec_vcmpequb (vector signed char, vector signed char);
   38985      vector bool char vec_vcmpequb (vector unsigned char,
   38986                                     vector unsigned char);
   38987 
   38988      vector bool int vec_cmpge (vector float, vector float);
   38989 
   38990      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
   38991      vector bool char vec_cmpgt (vector signed char, vector signed char);
   38992      vector bool short vec_cmpgt (vector unsigned short,
   38993                                   vector unsigned short);
   38994      vector bool short vec_cmpgt (vector signed short, vector signed short);
   38995      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
   38996      vector bool int vec_cmpgt (vector signed int, vector signed int);
   38997      vector bool int vec_cmpgt (vector float, vector float);
   38998 
   38999      vector bool int vec_vcmpgtfp (vector float, vector float);
   39000 
   39001      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
   39002 
   39003      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
   39004 
   39005      vector bool short vec_vcmpgtsh (vector signed short,
   39006                                      vector signed short);
   39007 
   39008      vector bool short vec_vcmpgtuh (vector unsigned short,
   39009                                      vector unsigned short);
   39010 
   39011      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
   39012 
   39013      vector bool char vec_vcmpgtub (vector unsigned char,
   39014                                     vector unsigned char);
   39015 
   39016      vector bool int vec_cmple (vector float, vector float);
   39017 
   39018      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
   39019      vector bool char vec_cmplt (vector signed char, vector signed char);
   39020      vector bool short vec_cmplt (vector unsigned short,
   39021                                   vector unsigned short);
   39022      vector bool short vec_cmplt (vector signed short, vector signed short);
   39023      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
   39024      vector bool int vec_cmplt (vector signed int, vector signed int);
   39025      vector bool int vec_cmplt (vector float, vector float);
   39026 
   39027      vector float vec_ctf (vector unsigned int, const int);
   39028      vector float vec_ctf (vector signed int, const int);
   39029 
   39030      vector float vec_vcfsx (vector signed int, const int);
   39031 
   39032      vector float vec_vcfux (vector unsigned int, const int);
   39033 
   39034      vector signed int vec_cts (vector float, const int);
   39035 
   39036      vector unsigned int vec_ctu (vector float, const int);
   39037 
   39038      void vec_dss (const int);
   39039 
   39040      void vec_dssall (void);
   39041 
   39042      void vec_dst (const vector unsigned char *, int, const int);
   39043      void vec_dst (const vector signed char *, int, const int);
   39044      void vec_dst (const vector bool char *, int, const int);
   39045      void vec_dst (const vector unsigned short *, int, const int);
   39046      void vec_dst (const vector signed short *, int, const int);
   39047      void vec_dst (const vector bool short *, int, const int);
   39048      void vec_dst (const vector pixel *, int, const int);
   39049      void vec_dst (const vector unsigned int *, int, const int);
   39050      void vec_dst (const vector signed int *, int, const int);
   39051      void vec_dst (const vector bool int *, int, const int);
   39052      void vec_dst (const vector float *, int, const int);
   39053      void vec_dst (const unsigned char *, int, const int);
   39054      void vec_dst (const signed char *, int, const int);
   39055      void vec_dst (const unsigned short *, int, const int);
   39056      void vec_dst (const short *, int, const int);
   39057      void vec_dst (const unsigned int *, int, const int);
   39058      void vec_dst (const int *, int, const int);
   39059      void vec_dst (const unsigned long *, int, const int);
   39060      void vec_dst (const long *, int, const int);
   39061      void vec_dst (const float *, int, const int);
   39062 
   39063      void vec_dstst (const vector unsigned char *, int, const int);
   39064      void vec_dstst (const vector signed char *, int, const int);
   39065      void vec_dstst (const vector bool char *, int, const int);
   39066      void vec_dstst (const vector unsigned short *, int, const int);
   39067      void vec_dstst (const vector signed short *, int, const int);
   39068      void vec_dstst (const vector bool short *, int, const int);
   39069      void vec_dstst (const vector pixel *, int, const int);
   39070      void vec_dstst (const vector unsigned int *, int, const int);
   39071      void vec_dstst (const vector signed int *, int, const int);
   39072      void vec_dstst (const vector bool int *, int, const int);
   39073      void vec_dstst (const vector float *, int, const int);
   39074      void vec_dstst (const unsigned char *, int, const int);
   39075      void vec_dstst (const signed char *, int, const int);
   39076      void vec_dstst (const unsigned short *, int, const int);
   39077      void vec_dstst (const short *, int, const int);
   39078      void vec_dstst (const unsigned int *, int, const int);
   39079      void vec_dstst (const int *, int, const int);
   39080      void vec_dstst (const unsigned long *, int, const int);
   39081      void vec_dstst (const long *, int, const int);
   39082      void vec_dstst (const float *, int, const int);
   39083 
   39084      void vec_dststt (const vector unsigned char *, int, const int);
   39085      void vec_dststt (const vector signed char *, int, const int);
   39086      void vec_dststt (const vector bool char *, int, const int);
   39087      void vec_dststt (const vector unsigned short *, int, const int);
   39088      void vec_dststt (const vector signed short *, int, const int);
   39089      void vec_dststt (const vector bool short *, int, const int);
   39090      void vec_dststt (const vector pixel *, int, const int);
   39091      void vec_dststt (const vector unsigned int *, int, const int);
   39092      void vec_dststt (const vector signed int *, int, const int);
   39093      void vec_dststt (const vector bool int *, int, const int);
   39094      void vec_dststt (const vector float *, int, const int);
   39095      void vec_dststt (const unsigned char *, int, const int);
   39096      void vec_dststt (const signed char *, int, const int);
   39097      void vec_dststt (const unsigned short *, int, const int);
   39098      void vec_dststt (const short *, int, const int);
   39099      void vec_dststt (const unsigned int *, int, const int);
   39100      void vec_dststt (const int *, int, const int);
   39101      void vec_dststt (const unsigned long *, int, const int);
   39102      void vec_dststt (const long *, int, const int);
   39103      void vec_dststt (const float *, int, const int);
   39104 
   39105      void vec_dstt (const vector unsigned char *, int, const int);
   39106      void vec_dstt (const vector signed char *, int, const int);
   39107      void vec_dstt (const vector bool char *, int, const int);
   39108      void vec_dstt (const vector unsigned short *, int, const int);
   39109      void vec_dstt (const vector signed short *, int, const int);
   39110      void vec_dstt (const vector bool short *, int, const int);
   39111      void vec_dstt (const vector pixel *, int, const int);
   39112      void vec_dstt (const vector unsigned int *, int, const int);
   39113      void vec_dstt (const vector signed int *, int, const int);
   39114      void vec_dstt (const vector bool int *, int, const int);
   39115      void vec_dstt (const vector float *, int, const int);
   39116      void vec_dstt (const unsigned char *, int, const int);
   39117      void vec_dstt (const signed char *, int, const int);
   39118      void vec_dstt (const unsigned short *, int, const int);
   39119      void vec_dstt (const short *, int, const int);
   39120      void vec_dstt (const unsigned int *, int, const int);
   39121      void vec_dstt (const int *, int, const int);
   39122      void vec_dstt (const unsigned long *, int, const int);
   39123      void vec_dstt (const long *, int, const int);
   39124      void vec_dstt (const float *, int, const int);
   39125 
   39126      vector float vec_expte (vector float);
   39127 
   39128      vector float vec_floor (vector float);
   39129 
   39130      vector float vec_ld (int, const vector float *);
   39131      vector float vec_ld (int, const float *);
   39132      vector bool int vec_ld (int, const vector bool int *);
   39133      vector signed int vec_ld (int, const vector signed int *);
   39134      vector signed int vec_ld (int, const int *);
   39135      vector signed int vec_ld (int, const long *);
   39136      vector unsigned int vec_ld (int, const vector unsigned int *);
   39137      vector unsigned int vec_ld (int, const unsigned int *);
   39138      vector unsigned int vec_ld (int, const unsigned long *);
   39139      vector bool short vec_ld (int, const vector bool short *);
   39140      vector pixel vec_ld (int, const vector pixel *);
   39141      vector signed short vec_ld (int, const vector signed short *);
   39142      vector signed short vec_ld (int, const short *);
   39143      vector unsigned short vec_ld (int, const vector unsigned short *);
   39144      vector unsigned short vec_ld (int, const unsigned short *);
   39145      vector bool char vec_ld (int, const vector bool char *);
   39146      vector signed char vec_ld (int, const vector signed char *);
   39147      vector signed char vec_ld (int, const signed char *);
   39148      vector unsigned char vec_ld (int, const vector unsigned char *);
   39149      vector unsigned char vec_ld (int, const unsigned char *);
   39150 
   39151      vector signed char vec_lde (int, const signed char *);
   39152      vector unsigned char vec_lde (int, const unsigned char *);
   39153      vector signed short vec_lde (int, const short *);
   39154      vector unsigned short vec_lde (int, const unsigned short *);
   39155      vector float vec_lde (int, const float *);
   39156      vector signed int vec_lde (int, const int *);
   39157      vector unsigned int vec_lde (int, const unsigned int *);
   39158      vector signed int vec_lde (int, const long *);
   39159      vector unsigned int vec_lde (int, const unsigned long *);
   39160 
   39161      vector float vec_lvewx (int, float *);
   39162      vector signed int vec_lvewx (int, int *);
   39163      vector unsigned int vec_lvewx (int, unsigned int *);
   39164      vector signed int vec_lvewx (int, long *);
   39165      vector unsigned int vec_lvewx (int, unsigned long *);
   39166 
   39167      vector signed short vec_lvehx (int, short *);
   39168      vector unsigned short vec_lvehx (int, unsigned short *);
   39169 
   39170      vector signed char vec_lvebx (int, char *);
   39171      vector unsigned char vec_lvebx (int, unsigned char *);
   39172 
   39173      vector float vec_ldl (int, const vector float *);
   39174      vector float vec_ldl (int, const float *);
   39175      vector bool int vec_ldl (int, const vector bool int *);
   39176      vector signed int vec_ldl (int, const vector signed int *);
   39177      vector signed int vec_ldl (int, const int *);
   39178      vector signed int vec_ldl (int, const long *);
   39179      vector unsigned int vec_ldl (int, const vector unsigned int *);
   39180      vector unsigned int vec_ldl (int, const unsigned int *);
   39181      vector unsigned int vec_ldl (int, const unsigned long *);
   39182      vector bool short vec_ldl (int, const vector bool short *);
   39183      vector pixel vec_ldl (int, const vector pixel *);
   39184      vector signed short vec_ldl (int, const vector signed short *);
   39185      vector signed short vec_ldl (int, const short *);
   39186      vector unsigned short vec_ldl (int, const vector unsigned short *);
   39187      vector unsigned short vec_ldl (int, const unsigned short *);
   39188      vector bool char vec_ldl (int, const vector bool char *);
   39189      vector signed char vec_ldl (int, const vector signed char *);
   39190      vector signed char vec_ldl (int, const signed char *);
   39191      vector unsigned char vec_ldl (int, const vector unsigned char *);
   39192      vector unsigned char vec_ldl (int, const unsigned char *);
   39193 
   39194      vector float vec_loge (vector float);
   39195 
   39196      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
   39197      vector unsigned char vec_lvsl (int, const volatile signed char *);
   39198      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
   39199      vector unsigned char vec_lvsl (int, const volatile short *);
   39200      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
   39201      vector unsigned char vec_lvsl (int, const volatile int *);
   39202      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
   39203      vector unsigned char vec_lvsl (int, const volatile long *);
   39204      vector unsigned char vec_lvsl (int, const volatile float *);
   39205 
   39206      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
   39207      vector unsigned char vec_lvsr (int, const volatile signed char *);
   39208      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
   39209      vector unsigned char vec_lvsr (int, const volatile short *);
   39210      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
   39211      vector unsigned char vec_lvsr (int, const volatile int *);
   39212      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
   39213      vector unsigned char vec_lvsr (int, const volatile long *);
   39214      vector unsigned char vec_lvsr (int, const volatile float *);
   39215 
   39216      vector float vec_madd (vector float, vector float, vector float);
   39217 
   39218      vector signed short vec_madds (vector signed short,
   39219                                     vector signed short,
   39220                                     vector signed short);
   39221 
   39222      vector unsigned char vec_max (vector bool char, vector unsigned char);
   39223      vector unsigned char vec_max (vector unsigned char, vector bool char);
   39224      vector unsigned char vec_max (vector unsigned char,
   39225                                    vector unsigned char);
   39226      vector signed char vec_max (vector bool char, vector signed char);
   39227      vector signed char vec_max (vector signed char, vector bool char);
   39228      vector signed char vec_max (vector signed char, vector signed char);
   39229      vector unsigned short vec_max (vector bool short,
   39230                                     vector unsigned short);
   39231      vector unsigned short vec_max (vector unsigned short,
   39232                                     vector bool short);
   39233      vector unsigned short vec_max (vector unsigned short,
   39234                                     vector unsigned short);
   39235      vector signed short vec_max (vector bool short, vector signed short);
   39236      vector signed short vec_max (vector signed short, vector bool short);
   39237      vector signed short vec_max (vector signed short, vector signed short);
   39238      vector unsigned int vec_max (vector bool int, vector unsigned int);
   39239      vector unsigned int vec_max (vector unsigned int, vector bool int);
   39240      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
   39241      vector signed int vec_max (vector bool int, vector signed int);
   39242      vector signed int vec_max (vector signed int, vector bool int);
   39243      vector signed int vec_max (vector signed int, vector signed int);
   39244      vector float vec_max (vector float, vector float);
   39245 
   39246      vector float vec_vmaxfp (vector float, vector float);
   39247 
   39248      vector signed int vec_vmaxsw (vector bool int, vector signed int);
   39249      vector signed int vec_vmaxsw (vector signed int, vector bool int);
   39250      vector signed int vec_vmaxsw (vector signed int, vector signed int);
   39251 
   39252      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
   39253      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
   39254      vector unsigned int vec_vmaxuw (vector unsigned int,
   39255                                      vector unsigned int);
   39256 
   39257      vector signed short vec_vmaxsh (vector bool short, vector signed short);
   39258      vector signed short vec_vmaxsh (vector signed short, vector bool short);
   39259      vector signed short vec_vmaxsh (vector signed short,
   39260                                      vector signed short);
   39261 
   39262      vector unsigned short vec_vmaxuh (vector bool short,
   39263                                        vector unsigned short);
   39264      vector unsigned short vec_vmaxuh (vector unsigned short,
   39265                                        vector bool short);
   39266      vector unsigned short vec_vmaxuh (vector unsigned short,
   39267                                        vector unsigned short);
   39268 
   39269      vector signed char vec_vmaxsb (vector bool char, vector signed char);
   39270      vector signed char vec_vmaxsb (vector signed char, vector bool char);
   39271      vector signed char vec_vmaxsb (vector signed char, vector signed char);
   39272 
   39273      vector unsigned char vec_vmaxub (vector bool char,
   39274                                       vector unsigned char);
   39275      vector unsigned char vec_vmaxub (vector unsigned char,
   39276                                       vector bool char);
   39277      vector unsigned char vec_vmaxub (vector unsigned char,
   39278                                       vector unsigned char);
   39279 
   39280      vector bool char vec_mergeh (vector bool char, vector bool char);
   39281      vector signed char vec_mergeh (vector signed char, vector signed char);
   39282      vector unsigned char vec_mergeh (vector unsigned char,
   39283                                       vector unsigned char);
   39284      vector bool short vec_mergeh (vector bool short, vector bool short);
   39285      vector pixel vec_mergeh (vector pixel, vector pixel);
   39286      vector signed short vec_mergeh (vector signed short,
   39287                                      vector signed short);
   39288      vector unsigned short vec_mergeh (vector unsigned short,
   39289                                        vector unsigned short);
   39290      vector float vec_mergeh (vector float, vector float);
   39291      vector bool int vec_mergeh (vector bool int, vector bool int);
   39292      vector signed int vec_mergeh (vector signed int, vector signed int);
   39293      vector unsigned int vec_mergeh (vector unsigned int,
   39294                                      vector unsigned int);
   39295 
   39296      vector float vec_vmrghw (vector float, vector float);
   39297      vector bool int vec_vmrghw (vector bool int, vector bool int);
   39298      vector signed int vec_vmrghw (vector signed int, vector signed int);
   39299      vector unsigned int vec_vmrghw (vector unsigned int,
   39300                                      vector unsigned int);
   39301 
   39302      vector bool short vec_vmrghh (vector bool short, vector bool short);
   39303      vector signed short vec_vmrghh (vector signed short,
   39304                                      vector signed short);
   39305      vector unsigned short vec_vmrghh (vector unsigned short,
   39306                                        vector unsigned short);
   39307      vector pixel vec_vmrghh (vector pixel, vector pixel);
   39308 
   39309      vector bool char vec_vmrghb (vector bool char, vector bool char);
   39310      vector signed char vec_vmrghb (vector signed char, vector signed char);
   39311      vector unsigned char vec_vmrghb (vector unsigned char,
   39312                                       vector unsigned char);
   39313 
   39314      vector bool char vec_mergel (vector bool char, vector bool char);
   39315      vector signed char vec_mergel (vector signed char, vector signed char);
   39316      vector unsigned char vec_mergel (vector unsigned char,
   39317                                       vector unsigned char);
   39318      vector bool short vec_mergel (vector bool short, vector bool short);
   39319      vector pixel vec_mergel (vector pixel, vector pixel);
   39320      vector signed short vec_mergel (vector signed short,
   39321                                      vector signed short);
   39322      vector unsigned short vec_mergel (vector unsigned short,
   39323                                        vector unsigned short);
   39324      vector float vec_mergel (vector float, vector float);
   39325      vector bool int vec_mergel (vector bool int, vector bool int);
   39326      vector signed int vec_mergel (vector signed int, vector signed int);
   39327      vector unsigned int vec_mergel (vector unsigned int,
   39328                                      vector unsigned int);
   39329 
   39330      vector float vec_vmrglw (vector float, vector float);
   39331      vector signed int vec_vmrglw (vector signed int, vector signed int);
   39332      vector unsigned int vec_vmrglw (vector unsigned int,
   39333                                      vector unsigned int);
   39334      vector bool int vec_vmrglw (vector bool int, vector bool int);
   39335 
   39336      vector bool short vec_vmrglh (vector bool short, vector bool short);
   39337      vector signed short vec_vmrglh (vector signed short,
   39338                                      vector signed short);
   39339      vector unsigned short vec_vmrglh (vector unsigned short,
   39340                                        vector unsigned short);
   39341      vector pixel vec_vmrglh (vector pixel, vector pixel);
   39342 
   39343      vector bool char vec_vmrglb (vector bool char, vector bool char);
   39344      vector signed char vec_vmrglb (vector signed char, vector signed char);
   39345      vector unsigned char vec_vmrglb (vector unsigned char,
   39346                                       vector unsigned char);
   39347 
   39348      vector unsigned short vec_mfvscr (void);
   39349 
   39350      vector unsigned char vec_min (vector bool char, vector unsigned char);
   39351      vector unsigned char vec_min (vector unsigned char, vector bool char);
   39352      vector unsigned char vec_min (vector unsigned char,
   39353                                    vector unsigned char);
   39354      vector signed char vec_min (vector bool char, vector signed char);
   39355      vector signed char vec_min (vector signed char, vector bool char);
   39356      vector signed char vec_min (vector signed char, vector signed char);
   39357      vector unsigned short vec_min (vector bool short,
   39358                                     vector unsigned short);
   39359      vector unsigned short vec_min (vector unsigned short,
   39360                                     vector bool short);
   39361      vector unsigned short vec_min (vector unsigned short,
   39362                                     vector unsigned short);
   39363      vector signed short vec_min (vector bool short, vector signed short);
   39364      vector signed short vec_min (vector signed short, vector bool short);
   39365      vector signed short vec_min (vector signed short, vector signed short);
   39366      vector unsigned int vec_min (vector bool int, vector unsigned int);
   39367      vector unsigned int vec_min (vector unsigned int, vector bool int);
   39368      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
   39369      vector signed int vec_min (vector bool int, vector signed int);
   39370      vector signed int vec_min (vector signed int, vector bool int);
   39371      vector signed int vec_min (vector signed int, vector signed int);
   39372      vector float vec_min (vector float, vector float);
   39373 
   39374      vector float vec_vminfp (vector float, vector float);
   39375 
   39376      vector signed int vec_vminsw (vector bool int, vector signed int);
   39377      vector signed int vec_vminsw (vector signed int, vector bool int);
   39378      vector signed int vec_vminsw (vector signed int, vector signed int);
   39379 
   39380      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
   39381      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
   39382      vector unsigned int vec_vminuw (vector unsigned int,
   39383                                      vector unsigned int);
   39384 
   39385      vector signed short vec_vminsh (vector bool short, vector signed short);
   39386      vector signed short vec_vminsh (vector signed short, vector bool short);
   39387      vector signed short vec_vminsh (vector signed short,
   39388                                      vector signed short);
   39389 
   39390      vector unsigned short vec_vminuh (vector bool short,
   39391                                        vector unsigned short);
   39392      vector unsigned short vec_vminuh (vector unsigned short,
   39393                                        vector bool short);
   39394      vector unsigned short vec_vminuh (vector unsigned short,
   39395                                        vector unsigned short);
   39396 
   39397      vector signed char vec_vminsb (vector bool char, vector signed char);
   39398      vector signed char vec_vminsb (vector signed char, vector bool char);
   39399      vector signed char vec_vminsb (vector signed char, vector signed char);
   39400 
   39401      vector unsigned char vec_vminub (vector bool char,
   39402                                       vector unsigned char);
   39403      vector unsigned char vec_vminub (vector unsigned char,
   39404                                       vector bool char);
   39405      vector unsigned char vec_vminub (vector unsigned char,
   39406                                       vector unsigned char);
   39407 
   39408      vector signed short vec_mladd (vector signed short,
   39409                                     vector signed short,
   39410                                     vector signed short);
   39411      vector signed short vec_mladd (vector signed short,
   39412                                     vector unsigned short,
   39413                                     vector unsigned short);
   39414      vector signed short vec_mladd (vector unsigned short,
   39415                                     vector signed short,
   39416                                     vector signed short);
   39417      vector unsigned short vec_mladd (vector unsigned short,
   39418                                       vector unsigned short,
   39419                                       vector unsigned short);
   39420 
   39421      vector signed short vec_mradds (vector signed short,
   39422                                      vector signed short,
   39423                                      vector signed short);
   39424 
   39425      vector unsigned int vec_msum (vector unsigned char,
   39426                                    vector unsigned char,
   39427                                    vector unsigned int);
   39428      vector signed int vec_msum (vector signed char,
   39429                                  vector unsigned char,
   39430                                  vector signed int);
   39431      vector unsigned int vec_msum (vector unsigned short,
   39432                                    vector unsigned short,
   39433                                    vector unsigned int);
   39434      vector signed int vec_msum (vector signed short,
   39435                                  vector signed short,
   39436                                  vector signed int);
   39437 
   39438      vector signed int vec_vmsumshm (vector signed short,
   39439                                      vector signed short,
   39440                                      vector signed int);
   39441 
   39442      vector unsigned int vec_vmsumuhm (vector unsigned short,
   39443                                        vector unsigned short,
   39444                                        vector unsigned int);
   39445 
   39446      vector signed int vec_vmsummbm (vector signed char,
   39447                                      vector unsigned char,
   39448                                      vector signed int);
   39449 
   39450      vector unsigned int vec_vmsumubm (vector unsigned char,
   39451                                        vector unsigned char,
   39452                                        vector unsigned int);
   39453 
   39454      vector unsigned int vec_msums (vector unsigned short,
   39455                                     vector unsigned short,
   39456                                     vector unsigned int);
   39457      vector signed int vec_msums (vector signed short,
   39458                                   vector signed short,
   39459                                   vector signed int);
   39460 
   39461      vector signed int vec_vmsumshs (vector signed short,
   39462                                      vector signed short,
   39463                                      vector signed int);
   39464 
   39465      vector unsigned int vec_vmsumuhs (vector unsigned short,
   39466                                        vector unsigned short,
   39467                                        vector unsigned int);
   39468 
   39469      void vec_mtvscr (vector signed int);
   39470      void vec_mtvscr (vector unsigned int);
   39471      void vec_mtvscr (vector bool int);
   39472      void vec_mtvscr (vector signed short);
   39473      void vec_mtvscr (vector unsigned short);
   39474      void vec_mtvscr (vector bool short);
   39475      void vec_mtvscr (vector pixel);
   39476      void vec_mtvscr (vector signed char);
   39477      void vec_mtvscr (vector unsigned char);
   39478      void vec_mtvscr (vector bool char);
   39479 
   39480      vector unsigned short vec_mule (vector unsigned char,
   39481                                      vector unsigned char);
   39482      vector signed short vec_mule (vector signed char,
   39483                                    vector signed char);
   39484      vector unsigned int vec_mule (vector unsigned short,
   39485                                    vector unsigned short);
   39486      vector signed int vec_mule (vector signed short, vector signed short);
   39487 
   39488      vector signed int vec_vmulesh (vector signed short,
   39489                                     vector signed short);
   39490 
   39491      vector unsigned int vec_vmuleuh (vector unsigned short,
   39492                                       vector unsigned short);
   39493 
   39494      vector signed short vec_vmulesb (vector signed char,
   39495                                       vector signed char);
   39496 
   39497      vector unsigned short vec_vmuleub (vector unsigned char,
   39498                                        vector unsigned char);
   39499 
   39500      vector unsigned short vec_mulo (vector unsigned char,
   39501                                      vector unsigned char);
   39502      vector signed short vec_mulo (vector signed char, vector signed char);
   39503      vector unsigned int vec_mulo (vector unsigned short,
   39504                                    vector unsigned short);
   39505      vector signed int vec_mulo (vector signed short, vector signed short);
   39506 
   39507      vector signed int vec_vmulosh (vector signed short,
   39508                                     vector signed short);
   39509 
   39510      vector unsigned int vec_vmulouh (vector unsigned short,
   39511                                       vector unsigned short);
   39512 
   39513      vector signed short vec_vmulosb (vector signed char,
   39514                                       vector signed char);
   39515 
   39516      vector unsigned short vec_vmuloub (vector unsigned char,
   39517                                         vector unsigned char);
   39518 
   39519      vector float vec_nmsub (vector float, vector float, vector float);
   39520 
   39521      vector float vec_nor (vector float, vector float);
   39522      vector signed int vec_nor (vector signed int, vector signed int);
   39523      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
   39524      vector bool int vec_nor (vector bool int, vector bool int);
   39525      vector signed short vec_nor (vector signed short, vector signed short);
   39526      vector unsigned short vec_nor (vector unsigned short,
   39527                                     vector unsigned short);
   39528      vector bool short vec_nor (vector bool short, vector bool short);
   39529      vector signed char vec_nor (vector signed char, vector signed char);
   39530      vector unsigned char vec_nor (vector unsigned char,
   39531                                    vector unsigned char);
   39532      vector bool char vec_nor (vector bool char, vector bool char);
   39533 
   39534      vector float vec_or (vector float, vector float);
   39535      vector float vec_or (vector float, vector bool int);
   39536      vector float vec_or (vector bool int, vector float);
   39537      vector bool int vec_or (vector bool int, vector bool int);
   39538      vector signed int vec_or (vector bool int, vector signed int);
   39539      vector signed int vec_or (vector signed int, vector bool int);
   39540      vector signed int vec_or (vector signed int, vector signed int);
   39541      vector unsigned int vec_or (vector bool int, vector unsigned int);
   39542      vector unsigned int vec_or (vector unsigned int, vector bool int);
   39543      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
   39544      vector bool short vec_or (vector bool short, vector bool short);
   39545      vector signed short vec_or (vector bool short, vector signed short);
   39546      vector signed short vec_or (vector signed short, vector bool short);
   39547      vector signed short vec_or (vector signed short, vector signed short);
   39548      vector unsigned short vec_or (vector bool short, vector unsigned short);
   39549      vector unsigned short vec_or (vector unsigned short, vector bool short);
   39550      vector unsigned short vec_or (vector unsigned short,
   39551                                    vector unsigned short);
   39552      vector signed char vec_or (vector bool char, vector signed char);
   39553      vector bool char vec_or (vector bool char, vector bool char);
   39554      vector signed char vec_or (vector signed char, vector bool char);
   39555      vector signed char vec_or (vector signed char, vector signed char);
   39556      vector unsigned char vec_or (vector bool char, vector unsigned char);
   39557      vector unsigned char vec_or (vector unsigned char, vector bool char);
   39558      vector unsigned char vec_or (vector unsigned char,
   39559                                   vector unsigned char);
   39560 
   39561      vector signed char vec_pack (vector signed short, vector signed short);
   39562      vector unsigned char vec_pack (vector unsigned short,
   39563                                     vector unsigned short);
   39564      vector bool char vec_pack (vector bool short, vector bool short);
   39565      vector signed short vec_pack (vector signed int, vector signed int);
   39566      vector unsigned short vec_pack (vector unsigned int,
   39567                                      vector unsigned int);
   39568      vector bool short vec_pack (vector bool int, vector bool int);
   39569 
   39570      vector bool short vec_vpkuwum (vector bool int, vector bool int);
   39571      vector signed short vec_vpkuwum (vector signed int, vector signed int);
   39572      vector unsigned short vec_vpkuwum (vector unsigned int,
   39573                                         vector unsigned int);
   39574 
   39575      vector bool char vec_vpkuhum (vector bool short, vector bool short);
   39576      vector signed char vec_vpkuhum (vector signed short,
   39577                                      vector signed short);
   39578      vector unsigned char vec_vpkuhum (vector unsigned short,
   39579                                        vector unsigned short);
   39580 
   39581      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
   39582 
   39583      vector unsigned char vec_packs (vector unsigned short,
   39584                                      vector unsigned short);
   39585      vector signed char vec_packs (vector signed short, vector signed short);
   39586      vector unsigned short vec_packs (vector unsigned int,
   39587                                       vector unsigned int);
   39588      vector signed short vec_packs (vector signed int, vector signed int);
   39589 
   39590      vector signed short vec_vpkswss (vector signed int, vector signed int);
   39591 
   39592      vector unsigned short vec_vpkuwus (vector unsigned int,
   39593                                         vector unsigned int);
   39594 
   39595      vector signed char vec_vpkshss (vector signed short,
   39596                                      vector signed short);
   39597 
   39598      vector unsigned char vec_vpkuhus (vector unsigned short,
   39599                                        vector unsigned short);
   39600 
   39601      vector unsigned char vec_packsu (vector unsigned short,
   39602                                       vector unsigned short);
   39603      vector unsigned char vec_packsu (vector signed short,
   39604                                       vector signed short);
   39605      vector unsigned short vec_packsu (vector unsigned int,
   39606                                        vector unsigned int);
   39607      vector unsigned short vec_packsu (vector signed int, vector signed int);
   39608 
   39609      vector unsigned short vec_vpkswus (vector signed int,
   39610                                         vector signed int);
   39611 
   39612      vector unsigned char vec_vpkshus (vector signed short,
   39613                                        vector signed short);
   39614 
   39615      vector float vec_perm (vector float,
   39616                             vector float,
   39617                             vector unsigned char);
   39618      vector signed int vec_perm (vector signed int,
   39619                                  vector signed int,
   39620                                  vector unsigned char);
   39621      vector unsigned int vec_perm (vector unsigned int,
   39622                                    vector unsigned int,
   39623                                    vector unsigned char);
   39624      vector bool int vec_perm (vector bool int,
   39625                                vector bool int,
   39626                                vector unsigned char);
   39627      vector signed short vec_perm (vector signed short,
   39628                                    vector signed short,
   39629                                    vector unsigned char);
   39630      vector unsigned short vec_perm (vector unsigned short,
   39631                                      vector unsigned short,
   39632                                      vector unsigned char);
   39633      vector bool short vec_perm (vector bool short,
   39634                                  vector bool short,
   39635                                  vector unsigned char);
   39636      vector pixel vec_perm (vector pixel,
   39637                             vector pixel,
   39638                             vector unsigned char);
   39639      vector signed char vec_perm (vector signed char,
   39640                                   vector signed char,
   39641                                   vector unsigned char);
   39642      vector unsigned char vec_perm (vector unsigned char,
   39643                                     vector unsigned char,
   39644                                     vector unsigned char);
   39645      vector bool char vec_perm (vector bool char,
   39646                                 vector bool char,
   39647                                 vector unsigned char);
   39648 
   39649      vector float vec_re (vector float);
   39650 
   39651      vector signed char vec_rl (vector signed char,
   39652                                 vector unsigned char);
   39653      vector unsigned char vec_rl (vector unsigned char,
   39654                                   vector unsigned char);
   39655      vector signed short vec_rl (vector signed short, vector unsigned short);
   39656      vector unsigned short vec_rl (vector unsigned short,
   39657                                    vector unsigned short);
   39658      vector signed int vec_rl (vector signed int, vector unsigned int);
   39659      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
   39660 
   39661      vector signed int vec_vrlw (vector signed int, vector unsigned int);
   39662      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
   39663 
   39664      vector signed short vec_vrlh (vector signed short,
   39665                                    vector unsigned short);
   39666      vector unsigned short vec_vrlh (vector unsigned short,
   39667                                      vector unsigned short);
   39668 
   39669      vector signed char vec_vrlb (vector signed char, vector unsigned char);
   39670      vector unsigned char vec_vrlb (vector unsigned char,
   39671                                     vector unsigned char);
   39672 
   39673      vector float vec_round (vector float);
   39674 
   39675      vector float vec_recip (vector float, vector float);
   39676 
   39677      vector float vec_rsqrt (vector float);
   39678 
   39679      vector float vec_rsqrte (vector float);
   39680 
   39681      vector float vec_sel (vector float, vector float, vector bool int);
   39682      vector float vec_sel (vector float, vector float, vector unsigned int);
   39683      vector signed int vec_sel (vector signed int,
   39684                                 vector signed int,
   39685                                 vector bool int);
   39686      vector signed int vec_sel (vector signed int,
   39687                                 vector signed int,
   39688                                 vector unsigned int);
   39689      vector unsigned int vec_sel (vector unsigned int,
   39690                                   vector unsigned int,
   39691                                   vector bool int);
   39692      vector unsigned int vec_sel (vector unsigned int,
   39693                                   vector unsigned int,
   39694                                   vector unsigned int);
   39695      vector bool int vec_sel (vector bool int,
   39696                               vector bool int,
   39697                               vector bool int);
   39698      vector bool int vec_sel (vector bool int,
   39699                               vector bool int,
   39700                               vector unsigned int);
   39701      vector signed short vec_sel (vector signed short,
   39702                                   vector signed short,
   39703                                   vector bool short);
   39704      vector signed short vec_sel (vector signed short,
   39705                                   vector signed short,
   39706                                   vector unsigned short);
   39707      vector unsigned short vec_sel (vector unsigned short,
   39708                                     vector unsigned short,
   39709                                     vector bool short);
   39710      vector unsigned short vec_sel (vector unsigned short,
   39711                                     vector unsigned short,
   39712                                     vector unsigned short);
   39713      vector bool short vec_sel (vector bool short,
   39714                                 vector bool short,
   39715                                 vector bool short);
   39716      vector bool short vec_sel (vector bool short,
   39717                                 vector bool short,
   39718                                 vector unsigned short);
   39719      vector signed char vec_sel (vector signed char,
   39720                                  vector signed char,
   39721                                  vector bool char);
   39722      vector signed char vec_sel (vector signed char,
   39723                                  vector signed char,
   39724                                  vector unsigned char);
   39725      vector unsigned char vec_sel (vector unsigned char,
   39726                                    vector unsigned char,
   39727                                    vector bool char);
   39728      vector unsigned char vec_sel (vector unsigned char,
   39729                                    vector unsigned char,
   39730                                    vector unsigned char);
   39731      vector bool char vec_sel (vector bool char,
   39732                                vector bool char,
   39733                                vector bool char);
   39734      vector bool char vec_sel (vector bool char,
   39735                                vector bool char,
   39736                                vector unsigned char);
   39737 
   39738      vector signed char vec_sl (vector signed char,
   39739                                 vector unsigned char);
   39740      vector unsigned char vec_sl (vector unsigned char,
   39741                                   vector unsigned char);
   39742      vector signed short vec_sl (vector signed short, vector unsigned short);
   39743      vector unsigned short vec_sl (vector unsigned short,
   39744                                    vector unsigned short);
   39745      vector signed int vec_sl (vector signed int, vector unsigned int);
   39746      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
   39747 
   39748      vector signed int vec_vslw (vector signed int, vector unsigned int);
   39749      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
   39750 
   39751      vector signed short vec_vslh (vector signed short,
   39752                                    vector unsigned short);
   39753      vector unsigned short vec_vslh (vector unsigned short,
   39754                                      vector unsigned short);
   39755 
   39756      vector signed char vec_vslb (vector signed char, vector unsigned char);
   39757      vector unsigned char vec_vslb (vector unsigned char,
   39758                                     vector unsigned char);
   39759 
   39760      vector float vec_sld (vector float, vector float, const int);
   39761      vector signed int vec_sld (vector signed int,
   39762                                 vector signed int,
   39763                                 const int);
   39764      vector unsigned int vec_sld (vector unsigned int,
   39765                                   vector unsigned int,
   39766                                   const int);
   39767      vector bool int vec_sld (vector bool int,
   39768                               vector bool int,
   39769                               const int);
   39770      vector signed short vec_sld (vector signed short,
   39771                                   vector signed short,
   39772                                   const int);
   39773      vector unsigned short vec_sld (vector unsigned short,
   39774                                     vector unsigned short,
   39775                                     const int);
   39776      vector bool short vec_sld (vector bool short,
   39777                                 vector bool short,
   39778                                 const int);
   39779      vector pixel vec_sld (vector pixel,
   39780                            vector pixel,
   39781                            const int);
   39782      vector signed char vec_sld (vector signed char,
   39783                                  vector signed char,
   39784                                  const int);
   39785      vector unsigned char vec_sld (vector unsigned char,
   39786                                    vector unsigned char,
   39787                                    const int);
   39788      vector bool char vec_sld (vector bool char,
   39789                                vector bool char,
   39790                                const int);
   39791 
   39792      vector signed int vec_sll (vector signed int,
   39793                                 vector unsigned int);
   39794      vector signed int vec_sll (vector signed int,
   39795                                 vector unsigned short);
   39796      vector signed int vec_sll (vector signed int,
   39797                                 vector unsigned char);
   39798      vector unsigned int vec_sll (vector unsigned int,
   39799                                   vector unsigned int);
   39800      vector unsigned int vec_sll (vector unsigned int,
   39801                                   vector unsigned short);
   39802      vector unsigned int vec_sll (vector unsigned int,
   39803                                   vector unsigned char);
   39804      vector bool int vec_sll (vector bool int,
   39805                               vector unsigned int);
   39806      vector bool int vec_sll (vector bool int,
   39807                               vector unsigned short);
   39808      vector bool int vec_sll (vector bool int,
   39809                               vector unsigned char);
   39810      vector signed short vec_sll (vector signed short,
   39811                                   vector unsigned int);
   39812      vector signed short vec_sll (vector signed short,
   39813                                   vector unsigned short);
   39814      vector signed short vec_sll (vector signed short,
   39815                                   vector unsigned char);
   39816      vector unsigned short vec_sll (vector unsigned short,
   39817                                     vector unsigned int);
   39818      vector unsigned short vec_sll (vector unsigned short,
   39819                                     vector unsigned short);
   39820      vector unsigned short vec_sll (vector unsigned short,
   39821                                     vector unsigned char);
   39822      vector bool short vec_sll (vector bool short, vector unsigned int);
   39823      vector bool short vec_sll (vector bool short, vector unsigned short);
   39824      vector bool short vec_sll (vector bool short, vector unsigned char);
   39825      vector pixel vec_sll (vector pixel, vector unsigned int);
   39826      vector pixel vec_sll (vector pixel, vector unsigned short);
   39827      vector pixel vec_sll (vector pixel, vector unsigned char);
   39828      vector signed char vec_sll (vector signed char, vector unsigned int);
   39829      vector signed char vec_sll (vector signed char, vector unsigned short);
   39830      vector signed char vec_sll (vector signed char, vector unsigned char);
   39831      vector unsigned char vec_sll (vector unsigned char,
   39832                                    vector unsigned int);
   39833      vector unsigned char vec_sll (vector unsigned char,
   39834                                    vector unsigned short);
   39835      vector unsigned char vec_sll (vector unsigned char,
   39836                                    vector unsigned char);
   39837      vector bool char vec_sll (vector bool char, vector unsigned int);
   39838      vector bool char vec_sll (vector bool char, vector unsigned short);
   39839      vector bool char vec_sll (vector bool char, vector unsigned char);
   39840 
   39841      vector float vec_slo (vector float, vector signed char);
   39842      vector float vec_slo (vector float, vector unsigned char);
   39843      vector signed int vec_slo (vector signed int, vector signed char);
   39844      vector signed int vec_slo (vector signed int, vector unsigned char);
   39845      vector unsigned int vec_slo (vector unsigned int, vector signed char);
   39846      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
   39847      vector signed short vec_slo (vector signed short, vector signed char);
   39848      vector signed short vec_slo (vector signed short, vector unsigned char);
   39849      vector unsigned short vec_slo (vector unsigned short,
   39850                                     vector signed char);
   39851      vector unsigned short vec_slo (vector unsigned short,
   39852                                     vector unsigned char);
   39853      vector pixel vec_slo (vector pixel, vector signed char);
   39854      vector pixel vec_slo (vector pixel, vector unsigned char);
   39855      vector signed char vec_slo (vector signed char, vector signed char);
   39856      vector signed char vec_slo (vector signed char, vector unsigned char);
   39857      vector unsigned char vec_slo (vector unsigned char, vector signed char);
   39858      vector unsigned char vec_slo (vector unsigned char,
   39859                                    vector unsigned char);
   39860 
   39861      vector signed char vec_splat (vector signed char, const int);
   39862      vector unsigned char vec_splat (vector unsigned char, const int);
   39863      vector bool char vec_splat (vector bool char, const int);
   39864      vector signed short vec_splat (vector signed short, const int);
   39865      vector unsigned short vec_splat (vector unsigned short, const int);
   39866      vector bool short vec_splat (vector bool short, const int);
   39867      vector pixel vec_splat (vector pixel, const int);
   39868      vector float vec_splat (vector float, const int);
   39869      vector signed int vec_splat (vector signed int, const int);
   39870      vector unsigned int vec_splat (vector unsigned int, const int);
   39871      vector bool int vec_splat (vector bool int, const int);
   39872 
   39873      vector float vec_vspltw (vector float, const int);
   39874      vector signed int vec_vspltw (vector signed int, const int);
   39875      vector unsigned int vec_vspltw (vector unsigned int, const int);
   39876      vector bool int vec_vspltw (vector bool int, const int);
   39877 
   39878      vector bool short vec_vsplth (vector bool short, const int);
   39879      vector signed short vec_vsplth (vector signed short, const int);
   39880      vector unsigned short vec_vsplth (vector unsigned short, const int);
   39881      vector pixel vec_vsplth (vector pixel, const int);
   39882 
   39883      vector signed char vec_vspltb (vector signed char, const int);
   39884      vector unsigned char vec_vspltb (vector unsigned char, const int);
   39885      vector bool char vec_vspltb (vector bool char, const int);
   39886 
   39887      vector signed char vec_splat_s8 (const int);
   39888 
   39889      vector signed short vec_splat_s16 (const int);
   39890 
   39891      vector signed int vec_splat_s32 (const int);
   39892 
   39893      vector unsigned char vec_splat_u8 (const int);
   39894 
   39895      vector unsigned short vec_splat_u16 (const int);
   39896 
   39897      vector unsigned int vec_splat_u32 (const int);
   39898 
   39899      vector signed char vec_sr (vector signed char, vector unsigned char);
   39900      vector unsigned char vec_sr (vector unsigned char,
   39901                                   vector unsigned char);
   39902      vector signed short vec_sr (vector signed short,
   39903                                  vector unsigned short);
   39904      vector unsigned short vec_sr (vector unsigned short,
   39905                                    vector unsigned short);
   39906      vector signed int vec_sr (vector signed int, vector unsigned int);
   39907      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
   39908 
   39909      vector signed int vec_vsrw (vector signed int, vector unsigned int);
   39910      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
   39911 
   39912      vector signed short vec_vsrh (vector signed short,
   39913                                    vector unsigned short);
   39914      vector unsigned short vec_vsrh (vector unsigned short,
   39915                                      vector unsigned short);
   39916 
   39917      vector signed char vec_vsrb (vector signed char, vector unsigned char);
   39918      vector unsigned char vec_vsrb (vector unsigned char,
   39919                                     vector unsigned char);
   39920 
   39921      vector signed char vec_sra (vector signed char, vector unsigned char);
   39922      vector unsigned char vec_sra (vector unsigned char,
   39923                                    vector unsigned char);
   39924      vector signed short vec_sra (vector signed short,
   39925                                   vector unsigned short);
   39926      vector unsigned short vec_sra (vector unsigned short,
   39927                                     vector unsigned short);
   39928      vector signed int vec_sra (vector signed int, vector unsigned int);
   39929      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
   39930 
   39931      vector signed int vec_vsraw (vector signed int, vector unsigned int);
   39932      vector unsigned int vec_vsraw (vector unsigned int,
   39933                                     vector unsigned int);
   39934 
   39935      vector signed short vec_vsrah (vector signed short,
   39936                                     vector unsigned short);
   39937      vector unsigned short vec_vsrah (vector unsigned short,
   39938                                       vector unsigned short);
   39939 
   39940      vector signed char vec_vsrab (vector signed char, vector unsigned char);
   39941      vector unsigned char vec_vsrab (vector unsigned char,
   39942                                      vector unsigned char);
   39943 
   39944      vector signed int vec_srl (vector signed int, vector unsigned int);
   39945      vector signed int vec_srl (vector signed int, vector unsigned short);
   39946      vector signed int vec_srl (vector signed int, vector unsigned char);
   39947      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
   39948      vector unsigned int vec_srl (vector unsigned int,
   39949                                   vector unsigned short);
   39950      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
   39951      vector bool int vec_srl (vector bool int, vector unsigned int);
   39952      vector bool int vec_srl (vector bool int, vector unsigned short);
   39953      vector bool int vec_srl (vector bool int, vector unsigned char);
   39954      vector signed short vec_srl (vector signed short, vector unsigned int);
   39955      vector signed short vec_srl (vector signed short,
   39956                                   vector unsigned short);
   39957      vector signed short vec_srl (vector signed short, vector unsigned char);
   39958      vector unsigned short vec_srl (vector unsigned short,
   39959                                     vector unsigned int);
   39960      vector unsigned short vec_srl (vector unsigned short,
   39961                                     vector unsigned short);
   39962      vector unsigned short vec_srl (vector unsigned short,
   39963                                     vector unsigned char);
   39964      vector bool short vec_srl (vector bool short, vector unsigned int);
   39965      vector bool short vec_srl (vector bool short, vector unsigned short);
   39966      vector bool short vec_srl (vector bool short, vector unsigned char);
   39967      vector pixel vec_srl (vector pixel, vector unsigned int);
   39968      vector pixel vec_srl (vector pixel, vector unsigned short);
   39969      vector pixel vec_srl (vector pixel, vector unsigned char);
   39970      vector signed char vec_srl (vector signed char, vector unsigned int);
   39971      vector signed char vec_srl (vector signed char, vector unsigned short);
   39972      vector signed char vec_srl (vector signed char, vector unsigned char);
   39973      vector unsigned char vec_srl (vector unsigned char,
   39974                                    vector unsigned int);
   39975      vector unsigned char vec_srl (vector unsigned char,
   39976                                    vector unsigned short);
   39977      vector unsigned char vec_srl (vector unsigned char,
   39978                                    vector unsigned char);
   39979      vector bool char vec_srl (vector bool char, vector unsigned int);
   39980      vector bool char vec_srl (vector bool char, vector unsigned short);
   39981      vector bool char vec_srl (vector bool char, vector unsigned char);
   39982 
   39983      vector float vec_sro (vector float, vector signed char);
   39984      vector float vec_sro (vector float, vector unsigned char);
   39985      vector signed int vec_sro (vector signed int, vector signed char);
   39986      vector signed int vec_sro (vector signed int, vector unsigned char);
   39987      vector unsigned int vec_sro (vector unsigned int, vector signed char);
   39988      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
   39989      vector signed short vec_sro (vector signed short, vector signed char);
   39990      vector signed short vec_sro (vector signed short, vector unsigned char);
   39991      vector unsigned short vec_sro (vector unsigned short,
   39992                                     vector signed char);
   39993      vector unsigned short vec_sro (vector unsigned short,
   39994                                     vector unsigned char);
   39995      vector pixel vec_sro (vector pixel, vector signed char);
   39996      vector pixel vec_sro (vector pixel, vector unsigned char);
   39997      vector signed char vec_sro (vector signed char, vector signed char);
   39998      vector signed char vec_sro (vector signed char, vector unsigned char);
   39999      vector unsigned char vec_sro (vector unsigned char, vector signed char);
   40000      vector unsigned char vec_sro (vector unsigned char,
   40001                                    vector unsigned char);
   40002 
   40003      void vec_st (vector float, int, vector float *);
   40004      void vec_st (vector float, int, float *);
   40005      void vec_st (vector signed int, int, vector signed int *);
   40006      void vec_st (vector signed int, int, int *);
   40007      void vec_st (vector unsigned int, int, vector unsigned int *);
   40008      void vec_st (vector unsigned int, int, unsigned int *);
   40009      void vec_st (vector bool int, int, vector bool int *);
   40010      void vec_st (vector bool int, int, unsigned int *);
   40011      void vec_st (vector bool int, int, int *);
   40012      void vec_st (vector signed short, int, vector signed short *);
   40013      void vec_st (vector signed short, int, short *);
   40014      void vec_st (vector unsigned short, int, vector unsigned short *);
   40015      void vec_st (vector unsigned short, int, unsigned short *);
   40016      void vec_st (vector bool short, int, vector bool short *);
   40017      void vec_st (vector bool short, int, unsigned short *);
   40018      void vec_st (vector pixel, int, vector pixel *);
   40019      void vec_st (vector pixel, int, unsigned short *);
   40020      void vec_st (vector pixel, int, short *);
   40021      void vec_st (vector bool short, int, short *);
   40022      void vec_st (vector signed char, int, vector signed char *);
   40023      void vec_st (vector signed char, int, signed char *);
   40024      void vec_st (vector unsigned char, int, vector unsigned char *);
   40025      void vec_st (vector unsigned char, int, unsigned char *);
   40026      void vec_st (vector bool char, int, vector bool char *);
   40027      void vec_st (vector bool char, int, unsigned char *);
   40028      void vec_st (vector bool char, int, signed char *);
   40029 
   40030      void vec_ste (vector signed char, int, signed char *);
   40031      void vec_ste (vector unsigned char, int, unsigned char *);
   40032      void vec_ste (vector bool char, int, signed char *);
   40033      void vec_ste (vector bool char, int, unsigned char *);
   40034      void vec_ste (vector signed short, int, short *);
   40035      void vec_ste (vector unsigned short, int, unsigned short *);
   40036      void vec_ste (vector bool short, int, short *);
   40037      void vec_ste (vector bool short, int, unsigned short *);
   40038      void vec_ste (vector pixel, int, short *);
   40039      void vec_ste (vector pixel, int, unsigned short *);
   40040      void vec_ste (vector float, int, float *);
   40041      void vec_ste (vector signed int, int, int *);
   40042      void vec_ste (vector unsigned int, int, unsigned int *);
   40043      void vec_ste (vector bool int, int, int *);
   40044      void vec_ste (vector bool int, int, unsigned int *);
   40045 
   40046      void vec_stvewx (vector float, int, float *);
   40047      void vec_stvewx (vector signed int, int, int *);
   40048      void vec_stvewx (vector unsigned int, int, unsigned int *);
   40049      void vec_stvewx (vector bool int, int, int *);
   40050      void vec_stvewx (vector bool int, int, unsigned int *);
   40051 
   40052      void vec_stvehx (vector signed short, int, short *);
   40053      void vec_stvehx (vector unsigned short, int, unsigned short *);
   40054      void vec_stvehx (vector bool short, int, short *);
   40055      void vec_stvehx (vector bool short, int, unsigned short *);
   40056      void vec_stvehx (vector pixel, int, short *);
   40057      void vec_stvehx (vector pixel, int, unsigned short *);
   40058 
   40059      void vec_stvebx (vector signed char, int, signed char *);
   40060      void vec_stvebx (vector unsigned char, int, unsigned char *);
   40061      void vec_stvebx (vector bool char, int, signed char *);
   40062      void vec_stvebx (vector bool char, int, unsigned char *);
   40063 
   40064      void vec_stl (vector float, int, vector float *);
   40065      void vec_stl (vector float, int, float *);
   40066      void vec_stl (vector signed int, int, vector signed int *);
   40067      void vec_stl (vector signed int, int, int *);
   40068      void vec_stl (vector unsigned int, int, vector unsigned int *);
   40069      void vec_stl (vector unsigned int, int, unsigned int *);
   40070      void vec_stl (vector bool int, int, vector bool int *);
   40071      void vec_stl (vector bool int, int, unsigned int *);
   40072      void vec_stl (vector bool int, int, int *);
   40073      void vec_stl (vector signed short, int, vector signed short *);
   40074      void vec_stl (vector signed short, int, short *);
   40075      void vec_stl (vector unsigned short, int, vector unsigned short *);
   40076      void vec_stl (vector unsigned short, int, unsigned short *);
   40077      void vec_stl (vector bool short, int, vector bool short *);
   40078      void vec_stl (vector bool short, int, unsigned short *);
   40079      void vec_stl (vector bool short, int, short *);
   40080      void vec_stl (vector pixel, int, vector pixel *);
   40081      void vec_stl (vector pixel, int, unsigned short *);
   40082      void vec_stl (vector pixel, int, short *);
   40083      void vec_stl (vector signed char, int, vector signed char *);
   40084      void vec_stl (vector signed char, int, signed char *);
   40085      void vec_stl (vector unsigned char, int, vector unsigned char *);
   40086      void vec_stl (vector unsigned char, int, unsigned char *);
   40087      void vec_stl (vector bool char, int, vector bool char *);
   40088      void vec_stl (vector bool char, int, unsigned char *);
   40089      void vec_stl (vector bool char, int, signed char *);
   40090 
   40091      vector signed char vec_sub (vector bool char, vector signed char);
   40092      vector signed char vec_sub (vector signed char, vector bool char);
   40093      vector signed char vec_sub (vector signed char, vector signed char);
   40094      vector unsigned char vec_sub (vector bool char, vector unsigned char);
   40095      vector unsigned char vec_sub (vector unsigned char, vector bool char);
   40096      vector unsigned char vec_sub (vector unsigned char,
   40097                                    vector unsigned char);
   40098      vector signed short vec_sub (vector bool short, vector signed short);
   40099      vector signed short vec_sub (vector signed short, vector bool short);
   40100      vector signed short vec_sub (vector signed short, vector signed short);
   40101      vector unsigned short vec_sub (vector bool short,
   40102                                     vector unsigned short);
   40103      vector unsigned short vec_sub (vector unsigned short,
   40104                                     vector bool short);
   40105      vector unsigned short vec_sub (vector unsigned short,
   40106                                     vector unsigned short);
   40107      vector signed int vec_sub (vector bool int, vector signed int);
   40108      vector signed int vec_sub (vector signed int, vector bool int);
   40109      vector signed int vec_sub (vector signed int, vector signed int);
   40110      vector unsigned int vec_sub (vector bool int, vector unsigned int);
   40111      vector unsigned int vec_sub (vector unsigned int, vector bool int);
   40112      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
   40113      vector float vec_sub (vector float, vector float);
   40114 
   40115      vector float vec_vsubfp (vector float, vector float);
   40116 
   40117      vector signed int vec_vsubuwm (vector bool int, vector signed int);
   40118      vector signed int vec_vsubuwm (vector signed int, vector bool int);
   40119      vector signed int vec_vsubuwm (vector signed int, vector signed int);
   40120      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
   40121      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
   40122      vector unsigned int vec_vsubuwm (vector unsigned int,
   40123                                       vector unsigned int);
   40124 
   40125      vector signed short vec_vsubuhm (vector bool short,
   40126                                       vector signed short);
   40127      vector signed short vec_vsubuhm (vector signed short,
   40128                                       vector bool short);
   40129      vector signed short vec_vsubuhm (vector signed short,
   40130                                       vector signed short);
   40131      vector unsigned short vec_vsubuhm (vector bool short,
   40132                                         vector unsigned short);
   40133      vector unsigned short vec_vsubuhm (vector unsigned short,
   40134                                         vector bool short);
   40135      vector unsigned short vec_vsubuhm (vector unsigned short,
   40136                                         vector unsigned short);
   40137 
   40138      vector signed char vec_vsububm (vector bool char, vector signed char);
   40139      vector signed char vec_vsububm (vector signed char, vector bool char);
   40140      vector signed char vec_vsububm (vector signed char, vector signed char);
   40141      vector unsigned char vec_vsububm (vector bool char,
   40142                                        vector unsigned char);
   40143      vector unsigned char vec_vsububm (vector unsigned char,
   40144                                        vector bool char);
   40145      vector unsigned char vec_vsububm (vector unsigned char,
   40146                                        vector unsigned char);
   40147 
   40148      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
   40149 
   40150      vector unsigned char vec_subs (vector bool char, vector unsigned char);
   40151      vector unsigned char vec_subs (vector unsigned char, vector bool char);
   40152      vector unsigned char vec_subs (vector unsigned char,
   40153                                     vector unsigned char);
   40154      vector signed char vec_subs (vector bool char, vector signed char);
   40155      vector signed char vec_subs (vector signed char, vector bool char);
   40156      vector signed char vec_subs (vector signed char, vector signed char);
   40157      vector unsigned short vec_subs (vector bool short,
   40158                                      vector unsigned short);
   40159      vector unsigned short vec_subs (vector unsigned short,
   40160                                      vector bool short);
   40161      vector unsigned short vec_subs (vector unsigned short,
   40162                                      vector unsigned short);
   40163      vector signed short vec_subs (vector bool short, vector signed short);
   40164      vector signed short vec_subs (vector signed short, vector bool short);
   40165      vector signed short vec_subs (vector signed short, vector signed short);
   40166      vector unsigned int vec_subs (vector bool int, vector unsigned int);
   40167      vector unsigned int vec_subs (vector unsigned int, vector bool int);
   40168      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
   40169      vector signed int vec_subs (vector bool int, vector signed int);
   40170      vector signed int vec_subs (vector signed int, vector bool int);
   40171      vector signed int vec_subs (vector signed int, vector signed int);
   40172 
   40173      vector signed int vec_vsubsws (vector bool int, vector signed int);
   40174      vector signed int vec_vsubsws (vector signed int, vector bool int);
   40175      vector signed int vec_vsubsws (vector signed int, vector signed int);
   40176 
   40177      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
   40178      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
   40179      vector unsigned int vec_vsubuws (vector unsigned int,
   40180                                       vector unsigned int);
   40181 
   40182      vector signed short vec_vsubshs (vector bool short,
   40183                                       vector signed short);
   40184      vector signed short vec_vsubshs (vector signed short,
   40185                                       vector bool short);
   40186      vector signed short vec_vsubshs (vector signed short,
   40187                                       vector signed short);
   40188 
   40189      vector unsigned short vec_vsubuhs (vector bool short,
   40190                                         vector unsigned short);
   40191      vector unsigned short vec_vsubuhs (vector unsigned short,
   40192                                         vector bool short);
   40193      vector unsigned short vec_vsubuhs (vector unsigned short,
   40194                                         vector unsigned short);
   40195 
   40196      vector signed char vec_vsubsbs (vector bool char, vector signed char);
   40197      vector signed char vec_vsubsbs (vector signed char, vector bool char);
   40198      vector signed char vec_vsubsbs (vector signed char, vector signed char);
   40199 
   40200      vector unsigned char vec_vsububs (vector bool char,
   40201                                        vector unsigned char);
   40202      vector unsigned char vec_vsububs (vector unsigned char,
   40203                                        vector bool char);
   40204      vector unsigned char vec_vsububs (vector unsigned char,
   40205                                        vector unsigned char);
   40206 
   40207      vector unsigned int vec_sum4s (vector unsigned char,
   40208                                     vector unsigned int);
   40209      vector signed int vec_sum4s (vector signed char, vector signed int);
   40210      vector signed int vec_sum4s (vector signed short, vector signed int);
   40211 
   40212      vector signed int vec_vsum4shs (vector signed short, vector signed int);
   40213 
   40214      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
   40215 
   40216      vector unsigned int vec_vsum4ubs (vector unsigned char,
   40217                                        vector unsigned int);
   40218 
   40219      vector signed int vec_sum2s (vector signed int, vector signed int);
   40220 
   40221      vector signed int vec_sums (vector signed int, vector signed int);
   40222 
   40223      vector float vec_trunc (vector float);
   40224 
   40225      vector signed short vec_unpackh (vector signed char);
   40226      vector bool short vec_unpackh (vector bool char);
   40227      vector signed int vec_unpackh (vector signed short);
   40228      vector bool int vec_unpackh (vector bool short);
   40229      vector unsigned int vec_unpackh (vector pixel);
   40230 
   40231      vector bool int vec_vupkhsh (vector bool short);
   40232      vector signed int vec_vupkhsh (vector signed short);
   40233 
   40234      vector unsigned int vec_vupkhpx (vector pixel);
   40235 
   40236      vector bool short vec_vupkhsb (vector bool char);
   40237      vector signed short vec_vupkhsb (vector signed char);
   40238 
   40239      vector signed short vec_unpackl (vector signed char);
   40240      vector bool short vec_unpackl (vector bool char);
   40241      vector unsigned int vec_unpackl (vector pixel);
   40242      vector signed int vec_unpackl (vector signed short);
   40243      vector bool int vec_unpackl (vector bool short);
   40244 
   40245      vector unsigned int vec_vupklpx (vector pixel);
   40246 
   40247      vector bool int vec_vupklsh (vector bool short);
   40248      vector signed int vec_vupklsh (vector signed short);
   40249 
   40250      vector bool short vec_vupklsb (vector bool char);
   40251      vector signed short vec_vupklsb (vector signed char);
   40252 
   40253      vector float vec_xor (vector float, vector float);
   40254      vector float vec_xor (vector float, vector bool int);
   40255      vector float vec_xor (vector bool int, vector float);
   40256      vector bool int vec_xor (vector bool int, vector bool int);
   40257      vector signed int vec_xor (vector bool int, vector signed int);
   40258      vector signed int vec_xor (vector signed int, vector bool int);
   40259      vector signed int vec_xor (vector signed int, vector signed int);
   40260      vector unsigned int vec_xor (vector bool int, vector unsigned int);
   40261      vector unsigned int vec_xor (vector unsigned int, vector bool int);
   40262      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
   40263      vector bool short vec_xor (vector bool short, vector bool short);
   40264      vector signed short vec_xor (vector bool short, vector signed short);
   40265      vector signed short vec_xor (vector signed short, vector bool short);
   40266      vector signed short vec_xor (vector signed short, vector signed short);
   40267      vector unsigned short vec_xor (vector bool short,
   40268                                     vector unsigned short);
   40269      vector unsigned short vec_xor (vector unsigned short,
   40270                                     vector bool short);
   40271      vector unsigned short vec_xor (vector unsigned short,
   40272                                     vector unsigned short);
   40273      vector signed char vec_xor (vector bool char, vector signed char);
   40274      vector bool char vec_xor (vector bool char, vector bool char);
   40275      vector signed char vec_xor (vector signed char, vector bool char);
   40276      vector signed char vec_xor (vector signed char, vector signed char);
   40277      vector unsigned char vec_xor (vector bool char, vector unsigned char);
   40278      vector unsigned char vec_xor (vector unsigned char, vector bool char);
   40279      vector unsigned char vec_xor (vector unsigned char,
   40280                                    vector unsigned char);
   40281 
   40282      int vec_all_eq (vector signed char, vector bool char);
   40283      int vec_all_eq (vector signed char, vector signed char);
   40284      int vec_all_eq (vector unsigned char, vector bool char);
   40285      int vec_all_eq (vector unsigned char, vector unsigned char);
   40286      int vec_all_eq (vector bool char, vector bool char);
   40287      int vec_all_eq (vector bool char, vector unsigned char);
   40288      int vec_all_eq (vector bool char, vector signed char);
   40289      int vec_all_eq (vector signed short, vector bool short);
   40290      int vec_all_eq (vector signed short, vector signed short);
   40291      int vec_all_eq (vector unsigned short, vector bool short);
   40292      int vec_all_eq (vector unsigned short, vector unsigned short);
   40293      int vec_all_eq (vector bool short, vector bool short);
   40294      int vec_all_eq (vector bool short, vector unsigned short);
   40295      int vec_all_eq (vector bool short, vector signed short);
   40296      int vec_all_eq (vector pixel, vector pixel);
   40297      int vec_all_eq (vector signed int, vector bool int);
   40298      int vec_all_eq (vector signed int, vector signed int);
   40299      int vec_all_eq (vector unsigned int, vector bool int);
   40300      int vec_all_eq (vector unsigned int, vector unsigned int);
   40301      int vec_all_eq (vector bool int, vector bool int);
   40302      int vec_all_eq (vector bool int, vector unsigned int);
   40303      int vec_all_eq (vector bool int, vector signed int);
   40304      int vec_all_eq (vector float, vector float);
   40305 
   40306      int vec_all_ge (vector bool char, vector unsigned char);
   40307      int vec_all_ge (vector unsigned char, vector bool char);
   40308      int vec_all_ge (vector unsigned char, vector unsigned char);
   40309      int vec_all_ge (vector bool char, vector signed char);
   40310      int vec_all_ge (vector signed char, vector bool char);
   40311      int vec_all_ge (vector signed char, vector signed char);
   40312      int vec_all_ge (vector bool short, vector unsigned short);
   40313      int vec_all_ge (vector unsigned short, vector bool short);
   40314      int vec_all_ge (vector unsigned short, vector unsigned short);
   40315      int vec_all_ge (vector signed short, vector signed short);
   40316      int vec_all_ge (vector bool short, vector signed short);
   40317      int vec_all_ge (vector signed short, vector bool short);
   40318      int vec_all_ge (vector bool int, vector unsigned int);
   40319      int vec_all_ge (vector unsigned int, vector bool int);
   40320      int vec_all_ge (vector unsigned int, vector unsigned int);
   40321      int vec_all_ge (vector bool int, vector signed int);
   40322      int vec_all_ge (vector signed int, vector bool int);
   40323      int vec_all_ge (vector signed int, vector signed int);
   40324      int vec_all_ge (vector float, vector float);
   40325 
   40326      int vec_all_gt (vector bool char, vector unsigned char);
   40327      int vec_all_gt (vector unsigned char, vector bool char);
   40328      int vec_all_gt (vector unsigned char, vector unsigned char);
   40329      int vec_all_gt (vector bool char, vector signed char);
   40330      int vec_all_gt (vector signed char, vector bool char);
   40331      int vec_all_gt (vector signed char, vector signed char);
   40332      int vec_all_gt (vector bool short, vector unsigned short);
   40333      int vec_all_gt (vector unsigned short, vector bool short);
   40334      int vec_all_gt (vector unsigned short, vector unsigned short);
   40335      int vec_all_gt (vector bool short, vector signed short);
   40336      int vec_all_gt (vector signed short, vector bool short);
   40337      int vec_all_gt (vector signed short, vector signed short);
   40338      int vec_all_gt (vector bool int, vector unsigned int);
   40339      int vec_all_gt (vector unsigned int, vector bool int);
   40340      int vec_all_gt (vector unsigned int, vector unsigned int);
   40341      int vec_all_gt (vector bool int, vector signed int);
   40342      int vec_all_gt (vector signed int, vector bool int);
   40343      int vec_all_gt (vector signed int, vector signed int);
   40344      int vec_all_gt (vector float, vector float);
   40345 
   40346      int vec_all_in (vector float, vector float);
   40347 
   40348      int vec_all_le (vector bool char, vector unsigned char);
   40349      int vec_all_le (vector unsigned char, vector bool char);
   40350      int vec_all_le (vector unsigned char, vector unsigned char);
   40351      int vec_all_le (vector bool char, vector signed char);
   40352      int vec_all_le (vector signed char, vector bool char);
   40353      int vec_all_le (vector signed char, vector signed char);
   40354      int vec_all_le (vector bool short, vector unsigned short);
   40355      int vec_all_le (vector unsigned short, vector bool short);
   40356      int vec_all_le (vector unsigned short, vector unsigned short);
   40357      int vec_all_le (vector bool short, vector signed short);
   40358      int vec_all_le (vector signed short, vector bool short);
   40359      int vec_all_le (vector signed short, vector signed short);
   40360      int vec_all_le (vector bool int, vector unsigned int);
   40361      int vec_all_le (vector unsigned int, vector bool int);
   40362      int vec_all_le (vector unsigned int, vector unsigned int);
   40363      int vec_all_le (vector bool int, vector signed int);
   40364      int vec_all_le (vector signed int, vector bool int);
   40365      int vec_all_le (vector signed int, vector signed int);
   40366      int vec_all_le (vector float, vector float);
   40367 
   40368      int vec_all_lt (vector bool char, vector unsigned char);
   40369      int vec_all_lt (vector unsigned char, vector bool char);
   40370      int vec_all_lt (vector unsigned char, vector unsigned char);
   40371      int vec_all_lt (vector bool char, vector signed char);
   40372      int vec_all_lt (vector signed char, vector bool char);
   40373      int vec_all_lt (vector signed char, vector signed char);
   40374      int vec_all_lt (vector bool short, vector unsigned short);
   40375      int vec_all_lt (vector unsigned short, vector bool short);
   40376      int vec_all_lt (vector unsigned short, vector unsigned short);
   40377      int vec_all_lt (vector bool short, vector signed short);
   40378      int vec_all_lt (vector signed short, vector bool short);
   40379      int vec_all_lt (vector signed short, vector signed short);
   40380      int vec_all_lt (vector bool int, vector unsigned int);
   40381      int vec_all_lt (vector unsigned int, vector bool int);
   40382      int vec_all_lt (vector unsigned int, vector unsigned int);
   40383      int vec_all_lt (vector bool int, vector signed int);
   40384      int vec_all_lt (vector signed int, vector bool int);
   40385      int vec_all_lt (vector signed int, vector signed int);
   40386      int vec_all_lt (vector float, vector float);
   40387 
   40388      int vec_all_nan (vector float);
   40389 
   40390      int vec_all_ne (vector signed char, vector bool char);
   40391      int vec_all_ne (vector signed char, vector signed char);
   40392      int vec_all_ne (vector unsigned char, vector bool char);
   40393      int vec_all_ne (vector unsigned char, vector unsigned char);
   40394      int vec_all_ne (vector bool char, vector bool char);
   40395      int vec_all_ne (vector bool char, vector unsigned char);
   40396      int vec_all_ne (vector bool char, vector signed char);
   40397      int vec_all_ne (vector signed short, vector bool short);
   40398      int vec_all_ne (vector signed short, vector signed short);
   40399      int vec_all_ne (vector unsigned short, vector bool short);
   40400      int vec_all_ne (vector unsigned short, vector unsigned short);
   40401      int vec_all_ne (vector bool short, vector bool short);
   40402      int vec_all_ne (vector bool short, vector unsigned short);
   40403      int vec_all_ne (vector bool short, vector signed short);
   40404      int vec_all_ne (vector pixel, vector pixel);
   40405      int vec_all_ne (vector signed int, vector bool int);
   40406      int vec_all_ne (vector signed int, vector signed int);
   40407      int vec_all_ne (vector unsigned int, vector bool int);
   40408      int vec_all_ne (vector unsigned int, vector unsigned int);
   40409      int vec_all_ne (vector bool int, vector bool int);
   40410      int vec_all_ne (vector bool int, vector unsigned int);
   40411      int vec_all_ne (vector bool int, vector signed int);
   40412      int vec_all_ne (vector float, vector float);
   40413 
   40414      int vec_all_nge (vector float, vector float);
   40415 
   40416      int vec_all_ngt (vector float, vector float);
   40417 
   40418      int vec_all_nle (vector float, vector float);
   40419 
   40420      int vec_all_nlt (vector float, vector float);
   40421 
   40422      int vec_all_numeric (vector float);
   40423 
   40424      int vec_any_eq (vector signed char, vector bool char);
   40425      int vec_any_eq (vector signed char, vector signed char);
   40426      int vec_any_eq (vector unsigned char, vector bool char);
   40427      int vec_any_eq (vector unsigned char, vector unsigned char);
   40428      int vec_any_eq (vector bool char, vector bool char);
   40429      int vec_any_eq (vector bool char, vector unsigned char);
   40430      int vec_any_eq (vector bool char, vector signed char);
   40431      int vec_any_eq (vector signed short, vector bool short);
   40432      int vec_any_eq (vector signed short, vector signed short);
   40433      int vec_any_eq (vector unsigned short, vector bool short);
   40434      int vec_any_eq (vector unsigned short, vector unsigned short);
   40435      int vec_any_eq (vector bool short, vector bool short);
   40436      int vec_any_eq (vector bool short, vector unsigned short);
   40437      int vec_any_eq (vector bool short, vector signed short);
   40438      int vec_any_eq (vector pixel, vector pixel);
   40439      int vec_any_eq (vector signed int, vector bool int);
   40440      int vec_any_eq (vector signed int, vector signed int);
   40441      int vec_any_eq (vector unsigned int, vector bool int);
   40442      int vec_any_eq (vector unsigned int, vector unsigned int);
   40443      int vec_any_eq (vector bool int, vector bool int);
   40444      int vec_any_eq (vector bool int, vector unsigned int);
   40445      int vec_any_eq (vector bool int, vector signed int);
   40446      int vec_any_eq (vector float, vector float);
   40447 
   40448      int vec_any_ge (vector signed char, vector bool char);
   40449      int vec_any_ge (vector unsigned char, vector bool char);
   40450      int vec_any_ge (vector unsigned char, vector unsigned char);
   40451      int vec_any_ge (vector signed char, vector signed char);
   40452      int vec_any_ge (vector bool char, vector unsigned char);
   40453      int vec_any_ge (vector bool char, vector signed char);
   40454      int vec_any_ge (vector unsigned short, vector bool short);
   40455      int vec_any_ge (vector unsigned short, vector unsigned short);
   40456      int vec_any_ge (vector signed short, vector signed short);
   40457      int vec_any_ge (vector signed short, vector bool short);
   40458      int vec_any_ge (vector bool short, vector unsigned short);
   40459      int vec_any_ge (vector bool short, vector signed short);
   40460      int vec_any_ge (vector signed int, vector bool int);
   40461      int vec_any_ge (vector unsigned int, vector bool int);
   40462      int vec_any_ge (vector unsigned int, vector unsigned int);
   40463      int vec_any_ge (vector signed int, vector signed int);
   40464      int vec_any_ge (vector bool int, vector unsigned int);
   40465      int vec_any_ge (vector bool int, vector signed int);
   40466      int vec_any_ge (vector float, vector float);
   40467 
   40468      int vec_any_gt (vector bool char, vector unsigned char);
   40469      int vec_any_gt (vector unsigned char, vector bool char);
   40470      int vec_any_gt (vector unsigned char, vector unsigned char);
   40471      int vec_any_gt (vector bool char, vector signed char);
   40472      int vec_any_gt (vector signed char, vector bool char);
   40473      int vec_any_gt (vector signed char, vector signed char);
   40474      int vec_any_gt (vector bool short, vector unsigned short);
   40475      int vec_any_gt (vector unsigned short, vector bool short);
   40476      int vec_any_gt (vector unsigned short, vector unsigned short);
   40477      int vec_any_gt (vector bool short, vector signed short);
   40478      int vec_any_gt (vector signed short, vector bool short);
   40479      int vec_any_gt (vector signed short, vector signed short);
   40480      int vec_any_gt (vector bool int, vector unsigned int);
   40481      int vec_any_gt (vector unsigned int, vector bool int);
   40482      int vec_any_gt (vector unsigned int, vector unsigned int);
   40483      int vec_any_gt (vector bool int, vector signed int);
   40484      int vec_any_gt (vector signed int, vector bool int);
   40485      int vec_any_gt (vector signed int, vector signed int);
   40486      int vec_any_gt (vector float, vector float);
   40487 
   40488      int vec_any_le (vector bool char, vector unsigned char);
   40489      int vec_any_le (vector unsigned char, vector bool char);
   40490      int vec_any_le (vector unsigned char, vector unsigned char);
   40491      int vec_any_le (vector bool char, vector signed char);
   40492      int vec_any_le (vector signed char, vector bool char);
   40493      int vec_any_le (vector signed char, vector signed char);
   40494      int vec_any_le (vector bool short, vector unsigned short);
   40495      int vec_any_le (vector unsigned short, vector bool short);
   40496      int vec_any_le (vector unsigned short, vector unsigned short);
   40497      int vec_any_le (vector bool short, vector signed short);
   40498      int vec_any_le (vector signed short, vector bool short);
   40499      int vec_any_le (vector signed short, vector signed short);
   40500      int vec_any_le (vector bool int, vector unsigned int);
   40501      int vec_any_le (vector unsigned int, vector bool int);
   40502      int vec_any_le (vector unsigned int, vector unsigned int);
   40503      int vec_any_le (vector bool int, vector signed int);
   40504      int vec_any_le (vector signed int, vector bool int);
   40505      int vec_any_le (vector signed int, vector signed int);
   40506      int vec_any_le (vector float, vector float);
   40507 
   40508      int vec_any_lt (vector bool char, vector unsigned char);
   40509      int vec_any_lt (vector unsigned char, vector bool char);
   40510      int vec_any_lt (vector unsigned char, vector unsigned char);
   40511      int vec_any_lt (vector bool char, vector signed char);
   40512      int vec_any_lt (vector signed char, vector bool char);
   40513      int vec_any_lt (vector signed char, vector signed char);
   40514      int vec_any_lt (vector bool short, vector unsigned short);
   40515      int vec_any_lt (vector unsigned short, vector bool short);
   40516      int vec_any_lt (vector unsigned short, vector unsigned short);
   40517      int vec_any_lt (vector bool short, vector signed short);
   40518      int vec_any_lt (vector signed short, vector bool short);
   40519      int vec_any_lt (vector signed short, vector signed short);
   40520      int vec_any_lt (vector bool int, vector unsigned int);
   40521      int vec_any_lt (vector unsigned int, vector bool int);
   40522      int vec_any_lt (vector unsigned int, vector unsigned int);
   40523      int vec_any_lt (vector bool int, vector signed int);
   40524      int vec_any_lt (vector signed int, vector bool int);
   40525      int vec_any_lt (vector signed int, vector signed int);
   40526      int vec_any_lt (vector float, vector float);
   40527 
   40528      int vec_any_nan (vector float);
   40529 
   40530      int vec_any_ne (vector signed char, vector bool char);
   40531      int vec_any_ne (vector signed char, vector signed char);
   40532      int vec_any_ne (vector unsigned char, vector bool char);
   40533      int vec_any_ne (vector unsigned char, vector unsigned char);
   40534      int vec_any_ne (vector bool char, vector bool char);
   40535      int vec_any_ne (vector bool char, vector unsigned char);
   40536      int vec_any_ne (vector bool char, vector signed char);
   40537      int vec_any_ne (vector signed short, vector bool short);
   40538      int vec_any_ne (vector signed short, vector signed short);
   40539      int vec_any_ne (vector unsigned short, vector bool short);
   40540      int vec_any_ne (vector unsigned short, vector unsigned short);
   40541      int vec_any_ne (vector bool short, vector bool short);
   40542      int vec_any_ne (vector bool short, vector unsigned short);
   40543      int vec_any_ne (vector bool short, vector signed short);
   40544      int vec_any_ne (vector pixel, vector pixel);
   40545      int vec_any_ne (vector signed int, vector bool int);
   40546      int vec_any_ne (vector signed int, vector signed int);
   40547      int vec_any_ne (vector unsigned int, vector bool int);
   40548      int vec_any_ne (vector unsigned int, vector unsigned int);
   40549      int vec_any_ne (vector bool int, vector bool int);
   40550      int vec_any_ne (vector bool int, vector unsigned int);
   40551      int vec_any_ne (vector bool int, vector signed int);
   40552      int vec_any_ne (vector float, vector float);
   40553 
   40554      int vec_any_nge (vector float, vector float);
   40555 
   40556      int vec_any_ngt (vector float, vector float);
   40557 
   40558      int vec_any_nle (vector float, vector float);
   40559 
   40560      int vec_any_nlt (vector float, vector float);
   40561 
   40562      int vec_any_numeric (vector float);
   40563 
   40564      int vec_any_out (vector float, vector float);
   40565 
   40566  If the vector/scalar (VSX) instruction set is available, the following
   40567 additional functions are available:
   40568 
   40569      vector double vec_abs (vector double);
   40570      vector double vec_add (vector double, vector double);
   40571      vector double vec_and (vector double, vector double);
   40572      vector double vec_and (vector double, vector bool long);
   40573      vector double vec_and (vector bool long, vector double);
   40574      vector double vec_andc (vector double, vector double);
   40575      vector double vec_andc (vector double, vector bool long);
   40576      vector double vec_andc (vector bool long, vector double);
   40577      vector double vec_ceil (vector double);
   40578      vector bool long vec_cmpeq (vector double, vector double);
   40579      vector bool long vec_cmpge (vector double, vector double);
   40580      vector bool long vec_cmpgt (vector double, vector double);
   40581      vector bool long vec_cmple (vector double, vector double);
   40582      vector bool long vec_cmplt (vector double, vector double);
   40583      vector float vec_div (vector float, vector float);
   40584      vector double vec_div (vector double, vector double);
   40585      vector double vec_floor (vector double);
   40586      vector double vec_ld (int, const vector double *);
   40587      vector double vec_ld (int, const double *);
   40588      vector double vec_ldl (int, const vector double *);
   40589      vector double vec_ldl (int, const double *);
   40590      vector unsigned char vec_lvsl (int, const volatile double *);
   40591      vector unsigned char vec_lvsr (int, const volatile double *);
   40592      vector double vec_madd (vector double, vector double, vector double);
   40593      vector double vec_max (vector double, vector double);
   40594      vector double vec_min (vector double, vector double);
   40595      vector float vec_msub (vector float, vector float, vector float);
   40596      vector double vec_msub (vector double, vector double, vector double);
   40597      vector float vec_mul (vector float, vector float);
   40598      vector double vec_mul (vector double, vector double);
   40599      vector float vec_nearbyint (vector float);
   40600      vector double vec_nearbyint (vector double);
   40601      vector float vec_nmadd (vector float, vector float, vector float);
   40602      vector double vec_nmadd (vector double, vector double, vector double);
   40603      vector double vec_nmsub (vector double, vector double, vector double);
   40604      vector double vec_nor (vector double, vector double);
   40605      vector double vec_or (vector double, vector double);
   40606      vector double vec_or (vector double, vector bool long);
   40607      vector double vec_or (vector bool long, vector double);
   40608      vector double vec_perm (vector double,
   40609                              vector double,
   40610                              vector unsigned char);
   40611      vector double vec_rint (vector double);
   40612      vector double vec_recip (vector double, vector double);
   40613      vector double vec_rsqrt (vector double);
   40614      vector double vec_rsqrte (vector double);
   40615      vector double vec_sel (vector double, vector double, vector bool long);
   40616      vector double vec_sel (vector double, vector double, vector unsigned long);
   40617      vector double vec_sub (vector double, vector double);
   40618      vector float vec_sqrt (vector float);
   40619      vector double vec_sqrt (vector double);
   40620      void vec_st (vector double, int, vector double *);
   40621      void vec_st (vector double, int, double *);
   40622      vector double vec_trunc (vector double);
   40623      vector double vec_xor (vector double, vector double);
   40624      vector double vec_xor (vector double, vector bool long);
   40625      vector double vec_xor (vector bool long, vector double);
   40626      int vec_all_eq (vector double, vector double);
   40627      int vec_all_ge (vector double, vector double);
   40628      int vec_all_gt (vector double, vector double);
   40629      int vec_all_le (vector double, vector double);
   40630      int vec_all_lt (vector double, vector double);
   40631      int vec_all_nan (vector double);
   40632      int vec_all_ne (vector double, vector double);
   40633      int vec_all_nge (vector double, vector double);
   40634      int vec_all_ngt (vector double, vector double);
   40635      int vec_all_nle (vector double, vector double);
   40636      int vec_all_nlt (vector double, vector double);
   40637      int vec_all_numeric (vector double);
   40638      int vec_any_eq (vector double, vector double);
   40639      int vec_any_ge (vector double, vector double);
   40640      int vec_any_gt (vector double, vector double);
   40641      int vec_any_le (vector double, vector double);
   40642      int vec_any_lt (vector double, vector double);
   40643      int vec_any_nan (vector double);
   40644      int vec_any_ne (vector double, vector double);
   40645      int vec_any_nge (vector double, vector double);
   40646      int vec_any_ngt (vector double, vector double);
   40647      int vec_any_nle (vector double, vector double);
   40648      int vec_any_nlt (vector double, vector double);
   40649      int vec_any_numeric (vector double);
   40650 
   40651      vector double vec_vsx_ld (int, const vector double *);
   40652      vector double vec_vsx_ld (int, const double *);
   40653      vector float vec_vsx_ld (int, const vector float *);
   40654      vector float vec_vsx_ld (int, const float *);
   40655      vector bool int vec_vsx_ld (int, const vector bool int *);
   40656      vector signed int vec_vsx_ld (int, const vector signed int *);
   40657      vector signed int vec_vsx_ld (int, const int *);
   40658      vector signed int vec_vsx_ld (int, const long *);
   40659      vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
   40660      vector unsigned int vec_vsx_ld (int, const unsigned int *);
   40661      vector unsigned int vec_vsx_ld (int, const unsigned long *);
   40662      vector bool short vec_vsx_ld (int, const vector bool short *);
   40663      vector pixel vec_vsx_ld (int, const vector pixel *);
   40664      vector signed short vec_vsx_ld (int, const vector signed short *);
   40665      vector signed short vec_vsx_ld (int, const short *);
   40666      vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
   40667      vector unsigned short vec_vsx_ld (int, const unsigned short *);
   40668      vector bool char vec_vsx_ld (int, const vector bool char *);
   40669      vector signed char vec_vsx_ld (int, const vector signed char *);
   40670      vector signed char vec_vsx_ld (int, const signed char *);
   40671      vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
   40672      vector unsigned char vec_vsx_ld (int, const unsigned char *);
   40673 
   40674      void vec_vsx_st (vector double, int, vector double *);
   40675      void vec_vsx_st (vector double, int, double *);
   40676      void vec_vsx_st (vector float, int, vector float *);
   40677      void vec_vsx_st (vector float, int, float *);
   40678      void vec_vsx_st (vector signed int, int, vector signed int *);
   40679      void vec_vsx_st (vector signed int, int, int *);
   40680      void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
   40681      void vec_vsx_st (vector unsigned int, int, unsigned int *);
   40682      void vec_vsx_st (vector bool int, int, vector bool int *);
   40683      void vec_vsx_st (vector bool int, int, unsigned int *);
   40684      void vec_vsx_st (vector bool int, int, int *);
   40685      void vec_vsx_st (vector signed short, int, vector signed short *);
   40686      void vec_vsx_st (vector signed short, int, short *);
   40687      void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
   40688      void vec_vsx_st (vector unsigned short, int, unsigned short *);
   40689      void vec_vsx_st (vector bool short, int, vector bool short *);
   40690      void vec_vsx_st (vector bool short, int, unsigned short *);
   40691      void vec_vsx_st (vector pixel, int, vector pixel *);
   40692      void vec_vsx_st (vector pixel, int, unsigned short *);
   40693      void vec_vsx_st (vector pixel, int, short *);
   40694      void vec_vsx_st (vector bool short, int, short *);
   40695      void vec_vsx_st (vector signed char, int, vector signed char *);
   40696      void vec_vsx_st (vector signed char, int, signed char *);
   40697      void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
   40698      void vec_vsx_st (vector unsigned char, int, unsigned char *);
   40699      void vec_vsx_st (vector bool char, int, vector bool char *);
   40700      void vec_vsx_st (vector bool char, int, unsigned char *);
   40701      void vec_vsx_st (vector bool char, int, signed char *);
   40702 
   40703      vector double vec_xxpermdi (vector double, vector double, int);
   40704      vector float vec_xxpermdi (vector float, vector float, int);
   40705      vector long long vec_xxpermdi (vector long long, vector long long, int);
   40706      vector unsigned long long vec_xxpermdi (vector unsigned long long,
   40707                                              vector unsigned long long, int);
   40708      vector int vec_xxpermdi (vector int, vector int, int);
   40709      vector unsigned int vec_xxpermdi (vector unsigned int,
   40710                                        vector unsigned int, int);
   40711      vector short vec_xxpermdi (vector short, vector short, int);
   40712      vector unsigned short vec_xxpermdi (vector unsigned short,
   40713                                          vector unsigned short, int);
   40714      vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
   40715      vector unsigned char vec_xxpermdi (vector unsigned char,
   40716                                         vector unsigned char, int);
   40717 
   40718      vector double vec_xxsldi (vector double, vector double, int);
   40719      vector float vec_xxsldi (vector float, vector float, int);
   40720      vector long long vec_xxsldi (vector long long, vector long long, int);
   40721      vector unsigned long long vec_xxsldi (vector unsigned long long,
   40722                                            vector unsigned long long, int);
   40723      vector int vec_xxsldi (vector int, vector int, int);
   40724      vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
   40725      vector short vec_xxsldi (vector short, vector short, int);
   40726      vector unsigned short vec_xxsldi (vector unsigned short,
   40727                                        vector unsigned short, int);
   40728      vector signed char vec_xxsldi (vector signed char, vector signed char, int);
   40729      vector unsigned char vec_xxsldi (vector unsigned char,
   40730                                       vector unsigned char, int);
   40731 
   40732  Note that the 'vec_ld' and 'vec_st' built-in functions always generate
   40733 the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
   40734 set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
   40735 always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
   40736 instructions.
   40737 
   40738  If the ISA 2.07 additions to the vector/scalar (power8-vector)
   40739 instruction set is available, the following additional functions are
   40740 available for both 32-bit and 64-bit targets.  For 64-bit targets, you
   40741 can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
   40742 instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
   40743 VECTOR UNSIGNED LONG LONG.
   40744 
   40745      vector long long vec_abs (vector long long);
   40746 
   40747      vector long long vec_add (vector long long, vector long long);
   40748      vector unsigned long long vec_add (vector unsigned long long,
   40749                                         vector unsigned long long);
   40750 
   40751      int vec_all_eq (vector long long, vector long long);
   40752      int vec_all_ge (vector long long, vector long long);
   40753      int vec_all_gt (vector long long, vector long long);
   40754      int vec_all_le (vector long long, vector long long);
   40755      int vec_all_lt (vector long long, vector long long);
   40756      int vec_all_ne (vector long long, vector long long);
   40757      int vec_any_eq (vector long long, vector long long);
   40758      int vec_any_ge (vector long long, vector long long);
   40759      int vec_any_gt (vector long long, vector long long);
   40760      int vec_any_le (vector long long, vector long long);
   40761      int vec_any_lt (vector long long, vector long long);
   40762      int vec_any_ne (vector long long, vector long long);
   40763 
   40764      vector long long vec_eqv (vector long long, vector long long);
   40765      vector long long vec_eqv (vector bool long long, vector long long);
   40766      vector long long vec_eqv (vector long long, vector bool long long);
   40767      vector unsigned long long vec_eqv (vector unsigned long long,
   40768                                         vector unsigned long long);
   40769      vector unsigned long long vec_eqv (vector bool long long,
   40770                                         vector unsigned long long);
   40771      vector unsigned long long vec_eqv (vector unsigned long long,
   40772                                         vector bool long long);
   40773      vector int vec_eqv (vector int, vector int);
   40774      vector int vec_eqv (vector bool int, vector int);
   40775      vector int vec_eqv (vector int, vector bool int);
   40776      vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
   40777      vector unsigned int vec_eqv (vector bool unsigned int,
   40778                                   vector unsigned int);
   40779      vector unsigned int vec_eqv (vector unsigned int,
   40780                                   vector bool unsigned int);
   40781      vector short vec_eqv (vector short, vector short);
   40782      vector short vec_eqv (vector bool short, vector short);
   40783      vector short vec_eqv (vector short, vector bool short);
   40784      vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
   40785      vector unsigned short vec_eqv (vector bool unsigned short,
   40786                                     vector unsigned short);
   40787      vector unsigned short vec_eqv (vector unsigned short,
   40788                                     vector bool unsigned short);
   40789      vector signed char vec_eqv (vector signed char, vector signed char);
   40790      vector signed char vec_eqv (vector bool signed char, vector signed char);
   40791      vector signed char vec_eqv (vector signed char, vector bool signed char);
   40792      vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
   40793      vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
   40794      vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
   40795 
   40796      vector long long vec_max (vector long long, vector long long);
   40797      vector unsigned long long vec_max (vector unsigned long long,
   40798                                         vector unsigned long long);
   40799 
   40800      vector long long vec_min (vector long long, vector long long);
   40801      vector unsigned long long vec_min (vector unsigned long long,
   40802                                         vector unsigned long long);
   40803 
   40804      vector long long vec_nand (vector long long, vector long long);
   40805      vector long long vec_nand (vector bool long long, vector long long);
   40806      vector long long vec_nand (vector long long, vector bool long long);
   40807      vector unsigned long long vec_nand (vector unsigned long long,
   40808                                          vector unsigned long long);
   40809      vector unsigned long long vec_nand (vector bool long long,
   40810                                         vector unsigned long long);
   40811      vector unsigned long long vec_nand (vector unsigned long long,
   40812                                          vector bool long long);
   40813      vector int vec_nand (vector int, vector int);
   40814      vector int vec_nand (vector bool int, vector int);
   40815      vector int vec_nand (vector int, vector bool int);
   40816      vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
   40817      vector unsigned int vec_nand (vector bool unsigned int,
   40818                                    vector unsigned int);
   40819      vector unsigned int vec_nand (vector unsigned int,
   40820                                    vector bool unsigned int);
   40821      vector short vec_nand (vector short, vector short);
   40822      vector short vec_nand (vector bool short, vector short);
   40823      vector short vec_nand (vector short, vector bool short);
   40824      vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
   40825      vector unsigned short vec_nand (vector bool unsigned short,
   40826                                      vector unsigned short);
   40827      vector unsigned short vec_nand (vector unsigned short,
   40828                                      vector bool unsigned short);
   40829      vector signed char vec_nand (vector signed char, vector signed char);
   40830      vector signed char vec_nand (vector bool signed char, vector signed char);
   40831      vector signed char vec_nand (vector signed char, vector bool signed char);
   40832      vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
   40833      vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
   40834      vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
   40835 
   40836      vector long long vec_orc (vector long long, vector long long);
   40837      vector long long vec_orc (vector bool long long, vector long long);
   40838      vector long long vec_orc (vector long long, vector bool long long);
   40839      vector unsigned long long vec_orc (vector unsigned long long,
   40840                                         vector unsigned long long);
   40841      vector unsigned long long vec_orc (vector bool long long,
   40842                                         vector unsigned long long);
   40843      vector unsigned long long vec_orc (vector unsigned long long,
   40844                                         vector bool long long);
   40845      vector int vec_orc (vector int, vector int);
   40846      vector int vec_orc (vector bool int, vector int);
   40847      vector int vec_orc (vector int, vector bool int);
   40848      vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
   40849      vector unsigned int vec_orc (vector bool unsigned int,
   40850                                   vector unsigned int);
   40851      vector unsigned int vec_orc (vector unsigned int,
   40852                                   vector bool unsigned int);
   40853      vector short vec_orc (vector short, vector short);
   40854      vector short vec_orc (vector bool short, vector short);
   40855      vector short vec_orc (vector short, vector bool short);
   40856      vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
   40857      vector unsigned short vec_orc (vector bool unsigned short,
   40858                                     vector unsigned short);
   40859      vector unsigned short vec_orc (vector unsigned short,
   40860                                     vector bool unsigned short);
   40861      vector signed char vec_orc (vector signed char, vector signed char);
   40862      vector signed char vec_orc (vector bool signed char, vector signed char);
   40863      vector signed char vec_orc (vector signed char, vector bool signed char);
   40864      vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
   40865      vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
   40866      vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
   40867 
   40868      vector int vec_pack (vector long long, vector long long);
   40869      vector unsigned int vec_pack (vector unsigned long long,
   40870                                    vector unsigned long long);
   40871      vector bool int vec_pack (vector bool long long, vector bool long long);
   40872 
   40873      vector int vec_packs (vector long long, vector long long);
   40874      vector unsigned int vec_packs (vector unsigned long long,
   40875                                     vector unsigned long long);
   40876 
   40877      vector unsigned int vec_packsu (vector long long, vector long long);
   40878 
   40879      vector long long vec_rl (vector long long,
   40880                               vector unsigned long long);
   40881      vector long long vec_rl (vector unsigned long long,
   40882                               vector unsigned long long);
   40883 
   40884      vector long long vec_sl (vector long long, vector unsigned long long);
   40885      vector long long vec_sl (vector unsigned long long,
   40886                               vector unsigned long long);
   40887 
   40888      vector long long vec_sr (vector long long, vector unsigned long long);
   40889      vector unsigned long long char vec_sr (vector unsigned long long,
   40890                                             vector unsigned long long);
   40891 
   40892      vector long long vec_sra (vector long long, vector unsigned long long);
   40893      vector unsigned long long vec_sra (vector unsigned long long,
   40894                                         vector unsigned long long);
   40895 
   40896      vector long long vec_sub (vector long long, vector long long);
   40897      vector unsigned long long vec_sub (vector unsigned long long,
   40898                                         vector unsigned long long);
   40899 
   40900      vector long long vec_unpackh (vector int);
   40901      vector unsigned long long vec_unpackh (vector unsigned int);
   40902 
   40903      vector long long vec_unpackl (vector int);
   40904      vector unsigned long long vec_unpackl (vector unsigned int);
   40905 
   40906      vector long long vec_vaddudm (vector long long, vector long long);
   40907      vector long long vec_vaddudm (vector bool long long, vector long long);
   40908      vector long long vec_vaddudm (vector long long, vector bool long long);
   40909      vector unsigned long long vec_vaddudm (vector unsigned long long,
   40910                                             vector unsigned long long);
   40911      vector unsigned long long vec_vaddudm (vector bool unsigned long long,
   40912                                             vector unsigned long long);
   40913      vector unsigned long long vec_vaddudm (vector unsigned long long,
   40914                                             vector bool unsigned long long);
   40915 
   40916      vector long long vec_vbpermq (vector signed char, vector signed char);
   40917      vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
   40918 
   40919      vector long long vec_vclz (vector long long);
   40920      vector unsigned long long vec_vclz (vector unsigned long long);
   40921      vector int vec_vclz (vector int);
   40922      vector unsigned int vec_vclz (vector int);
   40923      vector short vec_vclz (vector short);
   40924      vector unsigned short vec_vclz (vector unsigned short);
   40925      vector signed char vec_vclz (vector signed char);
   40926      vector unsigned char vec_vclz (vector unsigned char);
   40927 
   40928      vector signed char vec_vclzb (vector signed char);
   40929      vector unsigned char vec_vclzb (vector unsigned char);
   40930 
   40931      vector long long vec_vclzd (vector long long);
   40932      vector unsigned long long vec_vclzd (vector unsigned long long);
   40933 
   40934      vector short vec_vclzh (vector short);
   40935      vector unsigned short vec_vclzh (vector unsigned short);
   40936 
   40937      vector int vec_vclzw (vector int);
   40938      vector unsigned int vec_vclzw (vector int);
   40939 
   40940      vector signed char vec_vgbbd (vector signed char);
   40941      vector unsigned char vec_vgbbd (vector unsigned char);
   40942 
   40943      vector long long vec_vmaxsd (vector long long, vector long long);
   40944 
   40945      vector unsigned long long vec_vmaxud (vector unsigned long long,
   40946                                            unsigned vector long long);
   40947 
   40948      vector long long vec_vminsd (vector long long, vector long long);
   40949 
   40950      vector unsigned long long vec_vminud (vector long long,
   40951                                            vector long long);
   40952 
   40953      vector int vec_vpksdss (vector long long, vector long long);
   40954      vector unsigned int vec_vpksdss (vector long long, vector long long);
   40955 
   40956      vector unsigned int vec_vpkudus (vector unsigned long long,
   40957                                       vector unsigned long long);
   40958 
   40959      vector int vec_vpkudum (vector long long, vector long long);
   40960      vector unsigned int vec_vpkudum (vector unsigned long long,
   40961                                       vector unsigned long long);
   40962      vector bool int vec_vpkudum (vector bool long long, vector bool long long);
   40963 
   40964      vector long long vec_vpopcnt (vector long long);
   40965      vector unsigned long long vec_vpopcnt (vector unsigned long long);
   40966      vector int vec_vpopcnt (vector int);
   40967      vector unsigned int vec_vpopcnt (vector int);
   40968      vector short vec_vpopcnt (vector short);
   40969      vector unsigned short vec_vpopcnt (vector unsigned short);
   40970      vector signed char vec_vpopcnt (vector signed char);
   40971      vector unsigned char vec_vpopcnt (vector unsigned char);
   40972 
   40973      vector signed char vec_vpopcntb (vector signed char);
   40974      vector unsigned char vec_vpopcntb (vector unsigned char);
   40975 
   40976      vector long long vec_vpopcntd (vector long long);
   40977      vector unsigned long long vec_vpopcntd (vector unsigned long long);
   40978 
   40979      vector short vec_vpopcnth (vector short);
   40980      vector unsigned short vec_vpopcnth (vector unsigned short);
   40981 
   40982      vector int vec_vpopcntw (vector int);
   40983      vector unsigned int vec_vpopcntw (vector int);
   40984 
   40985      vector long long vec_vrld (vector long long, vector unsigned long long);
   40986      vector unsigned long long vec_vrld (vector unsigned long long,
   40987                                          vector unsigned long long);
   40988 
   40989      vector long long vec_vsld (vector long long, vector unsigned long long);
   40990      vector long long vec_vsld (vector unsigned long long,
   40991                                 vector unsigned long long);
   40992 
   40993      vector long long vec_vsrad (vector long long, vector unsigned long long);
   40994      vector unsigned long long vec_vsrad (vector unsigned long long,
   40995                                           vector unsigned long long);
   40996 
   40997      vector long long vec_vsrd (vector long long, vector unsigned long long);
   40998      vector unsigned long long char vec_vsrd (vector unsigned long long,
   40999                                               vector unsigned long long);
   41000 
   41001      vector long long vec_vsubudm (vector long long, vector long long);
   41002      vector long long vec_vsubudm (vector bool long long, vector long long);
   41003      vector long long vec_vsubudm (vector long long, vector bool long long);
   41004      vector unsigned long long vec_vsubudm (vector unsigned long long,
   41005                                             vector unsigned long long);
   41006      vector unsigned long long vec_vsubudm (vector bool long long,
   41007                                             vector unsigned long long);
   41008      vector unsigned long long vec_vsubudm (vector unsigned long long,
   41009                                             vector bool long long);
   41010 
   41011      vector long long vec_vupkhsw (vector int);
   41012      vector unsigned long long vec_vupkhsw (vector unsigned int);
   41013 
   41014      vector long long vec_vupklsw (vector int);
   41015      vector unsigned long long vec_vupklsw (vector int);
   41016 
   41017  If the ISA 2.07 additions to the vector/scalar (power8-vector)
   41018 instruction set is available, the following additional functions are
   41019 available for 64-bit targets.  New vector types (VECTOR __INT128_T and
   41020 VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T
   41021 types to use these builtins.
   41022 
   41023  The normal vector extract, and set operations work on VECTOR __INT128_T
   41024 and VECTOR __UINT128_T types, but the index value must be 0.
   41025 
   41026      vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
   41027      vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
   41028 
   41029      vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
   41030      vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
   41031 
   41032      vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
   41033                                      vector __int128_t);
   41034      vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
   41035                                       vector __uint128_t);
   41036 
   41037      vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
   41038                                      vector __int128_t);
   41039      vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
   41040                                       vector __uint128_t);
   41041 
   41042      vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
   41043                                      vector __int128_t);
   41044      vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
   41045                                       vector __uint128_t);
   41046 
   41047      vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
   41048                                      vector __int128_t);
   41049      vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
   41050                                       vector __uint128_t);
   41051 
   41052      vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
   41053      vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
   41054 
   41055      __int128_t vec_vsubuqm (__int128_t, __int128_t);
   41056      __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
   41057 
   41058      vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
   41059      int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
   41060      int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
   41061      int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
   41062      int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
   41063      vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
   41064      int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
   41065      int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
   41066      int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
   41067      int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
   41068 
   41069  If the cryptographic instructions are enabled ('-mcrypto' or
   41070 '-mcpu=power8'), the following builtins are enabled.
   41071 
   41072      vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
   41073 
   41074      vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
   41075                                                          vector unsigned long long);
   41076 
   41077      vector unsigned long long __builtin_crypto_vcipherlast
   41078                                           (vector unsigned long long,
   41079                                            vector unsigned long long);
   41080 
   41081      vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
   41082                                                           vector unsigned long long);
   41083 
   41084      vector unsigned long long __builtin_crypto_vncipherlast
   41085                                           (vector unsigned long long,
   41086                                            vector unsigned long long);
   41087 
   41088      vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
   41089                                                      vector unsigned char,
   41090                                                      vector unsigned char);
   41091 
   41092      vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
   41093                                                       vector unsigned short,
   41094                                                       vector unsigned short);
   41095 
   41096      vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
   41097                                                     vector unsigned int,
   41098                                                     vector unsigned int);
   41099 
   41100      vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
   41101                                                           vector unsigned long long,
   41102                                                           vector unsigned long long);
   41103 
   41104      vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
   41105                                                     vector unsigned char);
   41106 
   41107      vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
   41108                                                      vector unsigned short);
   41109 
   41110      vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
   41111                                                    vector unsigned int);
   41112 
   41113      vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
   41114                                                          vector unsigned long long);
   41115 
   41116      vector unsigned long long __builtin_crypto_vshasigmad
   41117                                     (vector unsigned long long, int, int);
   41118 
   41119      vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
   41120                                                       int, int);
   41121 
   41122  The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
   41123 __BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer
   41124 that is 0 or 1.  The third argument to these builtin functions must be a
   41125 constant integer in the range of 0 to 15.
   41126 
   41127 
   41128 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
   41129 
   41130 6.56.16 PowerPC Hardware Transactional Memory Built-in Functions
   41131 ----------------------------------------------------------------
   41132 
   41133 GCC provides two interfaces for accessing the Hardware Transactional
   41134 Memory (HTM) instructions available on some of the PowerPC family of
   41135 prcoessors (eg, POWER8).  The two interfaces come in a low level
   41136 interface, consisting of built-in functions specific to PowerPC and a
   41137 higher level interface consisting of inline functions that are common
   41138 between PowerPC and S/390.
   41139 
   41140 6.56.16.1 PowerPC HTM Low Level Built-in Functions
   41141 ..................................................
   41142 
   41143 The following low level built-in functions are available with '-mhtm' or
   41144 '-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
   41145 machine instruction that is part of the name.
   41146 
   41147  The HTM built-ins return true or false depending on their success and
   41148 their arguments match exactly the type and order of the associated
   41149 hardware instruction's operands.  Refer to the ISA manual for a
   41150 description of each instruction's operands.
   41151 
   41152      unsigned int __builtin_tbegin (unsigned int)
   41153      unsigned int __builtin_tend (unsigned int)
   41154 
   41155      unsigned int __builtin_tabort (unsigned int)
   41156      unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
   41157      unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
   41158      unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
   41159      unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
   41160 
   41161      unsigned int __builtin_tcheck (unsigned int)
   41162      unsigned int __builtin_treclaim (unsigned int)
   41163      unsigned int __builtin_trechkpt (void)
   41164      unsigned int __builtin_tsr (unsigned int)
   41165 
   41166  In addition to the above HTM built-ins, we have added built-ins for
   41167 some common extended mnemonics of the HTM instructions:
   41168 
   41169      unsigned int __builtin_tendall (void)
   41170      unsigned int __builtin_tresume (void)
   41171      unsigned int __builtin_tsuspend (void)
   41172 
   41173  The following set of built-in functions are available to gain access to
   41174 the HTM specific special purpose registers.
   41175 
   41176      unsigned long __builtin_get_texasr (void)
   41177      unsigned long __builtin_get_texasru (void)
   41178      unsigned long __builtin_get_tfhar (void)
   41179      unsigned long __builtin_get_tfiar (void)
   41180 
   41181      void __builtin_set_texasr (unsigned long);
   41182      void __builtin_set_texasru (unsigned long);
   41183      void __builtin_set_tfhar (unsigned long);
   41184      void __builtin_set_tfiar (unsigned long);
   41185 
   41186  Example usage of these low level built-in functions may look like:
   41187 
   41188      #include <htmintrin.h>
   41189 
   41190      int num_retries = 10;
   41191 
   41192      while (1)
   41193        {
   41194          if (__builtin_tbegin (0))
   41195            {
   41196              /* Transaction State Initiated.  */
   41197              if (is_locked (lock))
   41198                __builtin_tabort (0);
   41199              ... transaction code...
   41200              __builtin_tend (0);
   41201              break;
   41202            }
   41203          else
   41204            {
   41205              /* Transaction State Failed.  Use locks if the transaction
   41206                 failure is "persistent" or we've tried too many times.  */
   41207              if (num_retries-- <= 0
   41208                  || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
   41209                {
   41210                  acquire_lock (lock);
   41211                  ... non transactional fallback path...
   41212                  release_lock (lock);
   41213                  break;
   41214                }
   41215            }
   41216        }
   41217 
   41218  One final built-in function has been added that returns the value of
   41219 the 2-bit Transaction State field of the Machine Status Register (MSR)
   41220 as stored in 'CR0'.
   41221 
   41222      unsigned long __builtin_ttest (void)
   41223 
   41224  This built-in can be used to determine the current transaction state
   41225 using the following code example:
   41226 
   41227      #include <htmintrin.h>
   41228 
   41229      unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
   41230 
   41231      if (tx_state == _HTM_TRANSACTIONAL)
   41232        {
   41233          /* Code to use in transactional state.  */
   41234        }
   41235      else if (tx_state == _HTM_NONTRANSACTIONAL)
   41236        {
   41237          /* Code to use in non-transactional state.  */
   41238        }
   41239      else if (tx_state == _HTM_SUSPENDED)
   41240        {
   41241          /* Code to use in transaction suspended state.  */
   41242        }
   41243 
   41244 6.56.16.2 PowerPC HTM High Level Inline Functions
   41245 .................................................
   41246 
   41247 The following high level HTM interface is made available by including
   41248 '<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
   41249 or later.  This interface is common between PowerPC and S/390, allowing
   41250 users to write one HTM source implementation that can be compiled and
   41251 executed on either system.
   41252 
   41253      long __TM_simple_begin (void)
   41254      long __TM_begin (void* const TM_buff)
   41255      long __TM_end (void)
   41256      void __TM_abort (void)
   41257      void __TM_named_abort (unsigned char const code)
   41258      void __TM_resume (void)
   41259      void __TM_suspend (void)
   41260 
   41261      long __TM_is_user_abort (void* const TM_buff)
   41262      long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
   41263      long __TM_is_illegal (void* const TM_buff)
   41264      long __TM_is_footprint_exceeded (void* const TM_buff)
   41265      long __TM_nesting_depth (void* const TM_buff)
   41266      long __TM_is_nested_too_deep(void* const TM_buff)
   41267      long __TM_is_conflict(void* const TM_buff)
   41268      long __TM_is_failure_persistent(void* const TM_buff)
   41269      long __TM_failure_address(void* const TM_buff)
   41270      long long __TM_failure_code(void* const TM_buff)
   41271 
   41272  Using these common set of HTM inline functions, we can create a more
   41273 portable version of the HTM example in the previous section that will
   41274 work on either PowerPC or S/390:
   41275 
   41276      #include <htmxlintrin.h>
   41277 
   41278      int num_retries = 10;
   41279      TM_buff_type TM_buff;
   41280 
   41281      while (1)
   41282        {
   41283          if (__TM_begin (TM_buff))
   41284            {
   41285              /* Transaction State Initiated.  */
   41286              if (is_locked (lock))
   41287                __TM_abort ();
   41288              ... transaction code...
   41289              __TM_end ();
   41290              break;
   41291            }
   41292          else
   41293            {
   41294              /* Transaction State Failed.  Use locks if the transaction
   41295                 failure is "persistent" or we've tried too many times.  */
   41296              if (num_retries-- <= 0
   41297                  || __TM_is_failure_persistent (TM_buff))
   41298                {
   41299                  acquire_lock (lock);
   41300                  ... non transactional fallback path...
   41301                  release_lock (lock);
   41302                  break;
   41303                }
   41304            }
   41305        }
   41306 
   41307 
   41308 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
   41309 
   41310 6.56.17 RX Built-in Functions
   41311 -----------------------------
   41312 
   41313 GCC supports some of the RX instructions which cannot be expressed in
   41314 the C programming language via the use of built-in functions.  The
   41315 following functions are supported:
   41316 
   41317  -- Built-in Function: void __builtin_rx_brk (void)
   41318      Generates the 'brk' machine instruction.
   41319 
   41320  -- Built-in Function: void __builtin_rx_clrpsw (int)
   41321      Generates the 'clrpsw' machine instruction to clear the specified
   41322      bit in the processor status word.
   41323 
   41324  -- Built-in Function: void __builtin_rx_int (int)
   41325      Generates the 'int' machine instruction to generate an interrupt
   41326      with the specified value.
   41327 
   41328  -- Built-in Function: void __builtin_rx_machi (int, int)
   41329      Generates the 'machi' machine instruction to add the result of
   41330      multiplying the top 16 bits of the two arguments into the
   41331      accumulator.
   41332 
   41333  -- Built-in Function: void __builtin_rx_maclo (int, int)
   41334      Generates the 'maclo' machine instruction to add the result of
   41335      multiplying the bottom 16 bits of the two arguments into the
   41336      accumulator.
   41337 
   41338  -- Built-in Function: void __builtin_rx_mulhi (int, int)
   41339      Generates the 'mulhi' machine instruction to place the result of
   41340      multiplying the top 16 bits of the two arguments into the
   41341      accumulator.
   41342 
   41343  -- Built-in Function: void __builtin_rx_mullo (int, int)
   41344      Generates the 'mullo' machine instruction to place the result of
   41345      multiplying the bottom 16 bits of the two arguments into the
   41346      accumulator.
   41347 
   41348  -- Built-in Function: int __builtin_rx_mvfachi (void)
   41349      Generates the 'mvfachi' machine instruction to read the top 32 bits
   41350      of the accumulator.
   41351 
   41352  -- Built-in Function: int __builtin_rx_mvfacmi (void)
   41353      Generates the 'mvfacmi' machine instruction to read the middle 32
   41354      bits of the accumulator.
   41355 
   41356  -- Built-in Function: int __builtin_rx_mvfc (int)
   41357      Generates the 'mvfc' machine instruction which reads the control
   41358      register specified in its argument and returns its value.
   41359 
   41360  -- Built-in Function: void __builtin_rx_mvtachi (int)
   41361      Generates the 'mvtachi' machine instruction to set the top 32 bits
   41362      of the accumulator.
   41363 
   41364  -- Built-in Function: void __builtin_rx_mvtaclo (int)
   41365      Generates the 'mvtaclo' machine instruction to set the bottom 32
   41366      bits of the accumulator.
   41367 
   41368  -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
   41369      Generates the 'mvtc' machine instruction which sets control
   41370      register number 'reg' to 'val'.
   41371 
   41372  -- Built-in Function: void __builtin_rx_mvtipl (int)
   41373      Generates the 'mvtipl' machine instruction set the interrupt
   41374      priority level.
   41375 
   41376  -- Built-in Function: void __builtin_rx_racw (int)
   41377      Generates the 'racw' machine instruction to round the accumulator
   41378      according to the specified mode.
   41379 
   41380  -- Built-in Function: int __builtin_rx_revw (int)
   41381      Generates the 'revw' machine instruction which swaps the bytes in
   41382      the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
   41383      and also bits 16-23 occupy bits 24-31 and vice versa.
   41384 
   41385  -- Built-in Function: void __builtin_rx_rmpa (void)
   41386      Generates the 'rmpa' machine instruction which initiates a repeated
   41387      multiply and accumulate sequence.
   41388 
   41389  -- Built-in Function: void __builtin_rx_round (float)
   41390      Generates the 'round' machine instruction which returns the
   41391      floating-point argument rounded according to the current rounding
   41392      mode set in the floating-point status word register.
   41393 
   41394  -- Built-in Function: int __builtin_rx_sat (int)
   41395      Generates the 'sat' machine instruction which returns the saturated
   41396      value of the argument.
   41397 
   41398  -- Built-in Function: void __builtin_rx_setpsw (int)
   41399      Generates the 'setpsw' machine instruction to set the specified bit
   41400      in the processor status word.
   41401 
   41402  -- Built-in Function: void __builtin_rx_wait (void)
   41403      Generates the 'wait' machine instruction.
   41404 
   41405 
   41406 File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
   41407 
   41408 6.56.18 S/390 System z Built-in Functions
   41409 -----------------------------------------
   41410 
   41411  -- Built-in Function: int __builtin_tbegin (void*)
   41412      Generates the 'tbegin' machine instruction starting a
   41413      non-constraint hardware transaction.  If the parameter is non-NULL
   41414      the memory area is used to store the transaction diagnostic buffer
   41415      and will be passed as first operand to 'tbegin'.  This buffer can
   41416      be defined using the 'struct __htm_tdb' C struct defined in
   41417      'htmintrin.h' and must reside on a double-word boundary.  The
   41418      second tbegin operand is set to '0xff0c'.  This enables
   41419      save/restore of all GPRs and disables aborts for FPR and AR
   41420      manipulations inside the transaction body.  The condition code set
   41421      by the tbegin instruction is returned as integer value.  The tbegin
   41422      instruction by definition overwrites the content of all FPRs.  The
   41423      compiler will generate code which saves and restores the FPRs.  For
   41424      soft-float code it is recommended to used the '*_nofloat' variant.
   41425      In order to prevent a TDB from being written it is required to pass
   41426      an constant zero value as parameter.  Passing the zero value
   41427      through a variable is not sufficient.  Although modifications of
   41428      access registers inside the transaction will not trigger an
   41429      transaction abort it is not supported to actually modify them.
   41430      Access registers do not get saved when entering a transaction.
   41431      They will have undefined state when reaching the abort code.
   41432 
   41433  Macros for the possible return codes of tbegin are defined in the
   41434 'htmintrin.h' header file:
   41435 
   41436 '_HTM_TBEGIN_STARTED'
   41437      'tbegin' has been executed as part of normal processing.  The
   41438      transaction body is supposed to be executed.
   41439 '_HTM_TBEGIN_INDETERMINATE'
   41440      The transaction was aborted due to an indeterminate condition which
   41441      might be persistent.
   41442 '_HTM_TBEGIN_TRANSIENT'
   41443      The transaction aborted due to a transient failure.  The
   41444      transaction should be re-executed in that case.
   41445 '_HTM_TBEGIN_PERSISTENT'
   41446      The transaction aborted due to a persistent failure.  Re-execution
   41447      under same circumstances will not be productive.
   41448 
   41449  -- Macro: _HTM_FIRST_USER_ABORT_CODE
   41450      The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
   41451      the first abort code which can be used for '__builtin_tabort'.
   41452      Values below this threshold are reserved for machine use.
   41453 
   41454  -- Data type: struct __htm_tdb
   41455      The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
   41456      structure of the transaction diagnostic block as specified in the
   41457      Principles of Operation manual chapter 5-91.
   41458 
   41459  -- Built-in Function: int __builtin_tbegin_nofloat (void*)
   41460      Same as '__builtin_tbegin' but without FPR saves and restores.
   41461      Using this variant in code making use of FPRs will leave the FPRs
   41462      in undefined state when entering the transaction abort handler
   41463      code.
   41464 
   41465  -- Built-in Function: int __builtin_tbegin_retry (void*, int)
   41466      In addition to '__builtin_tbegin' a loop for transient failures is
   41467      generated.  If tbegin returns a condition code of 2 the transaction
   41468      will be retried as often as specified in the second argument.  The
   41469      perform processor assist instruction is used to tell the CPU about
   41470      the number of fails so far.
   41471 
   41472  -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
   41473      Same as '__builtin_tbegin_retry' but without FPR saves and
   41474      restores.  Using this variant in code making use of FPRs will leave
   41475      the FPRs in undefined state when entering the transaction abort
   41476      handler code.
   41477 
   41478  -- Built-in Function: void __builtin_tbeginc (void)
   41479      Generates the 'tbeginc' machine instruction starting a constraint
   41480      hardware transaction.  The second operand is set to '0xff08'.
   41481 
   41482  -- Built-in Function: int __builtin_tend (void)
   41483      Generates the 'tend' machine instruction finishing a transaction
   41484      and making the changes visible to other threads.  The condition
   41485      code generated by tend is returned as integer value.
   41486 
   41487  -- Built-in Function: void __builtin_tabort (int)
   41488      Generates the 'tabort' machine instruction with the specified abort
   41489      code.  Abort codes from 0 through 255 are reserved and will result
   41490      in an error message.
   41491 
   41492  -- Built-in Function: void __builtin_tx_assist (int)
   41493      Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
   41494      parameter is loaded into rX and a value of zero is loaded into rY.
   41495      The integer parameter specifies the number of times the transaction
   41496      repeatedly aborted.
   41497 
   41498  -- Built-in Function: int __builtin_tx_nesting_depth (void)
   41499      Generates the 'etnd' machine instruction.  The current nesting
   41500      depth is returned as integer value.  For a nesting depth of 0 the
   41501      code is not executed as part of an transaction.
   41502 
   41503  -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
   41504           uint64_t)
   41505 
   41506      Generates the 'ntstg' machine instruction.  The second argument is
   41507      written to the first arguments location.  The store operation will
   41508      not be rolled-back in case of an transaction abort.
   41509 
   41510 
   41511 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
   41512 
   41513 6.56.19 SH Built-in Functions
   41514 -----------------------------
   41515 
   41516 The following built-in functions are supported on the SH1, SH2, SH3 and
   41517 SH4 families of processors:
   41518 
   41519  -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
   41520      Sets the 'GBR' register to the specified value PTR.  This is
   41521      usually used by system code that manages threads and execution
   41522      contexts.  The compiler normally does not generate code that
   41523      modifies the contents of 'GBR' and thus the value is preserved
   41524      across function calls.  Changing the 'GBR' value in user code must
   41525      be done with caution, since the compiler might use 'GBR' in order
   41526      to access thread local variables.
   41527 
   41528  -- Built-in Function: void * __builtin_thread_pointer (void)
   41529      Returns the value that is currently set in the 'GBR' register.
   41530      Memory loads and stores that use the thread pointer as a base
   41531      address are turned into 'GBR' based displacement loads and stores,
   41532      if possible.  For example:
   41533           struct my_tcb
   41534           {
   41535              int a, b, c, d, e;
   41536           };
   41537 
   41538           int get_tcb_value (void)
   41539           {
   41540             // Generate 'mov.l @(8,gbr),r0' instruction
   41541             return ((my_tcb*)__builtin_thread_pointer ())->c;
   41542           }
   41543 
   41544 
   41545 
   41546 File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
   41547 
   41548 6.56.20 SPARC VIS Built-in Functions
   41549 ------------------------------------
   41550 
   41551 GCC supports SIMD operations on the SPARC using both the generic vector
   41552 extensions (*note Vector Extensions::) as well as built-in functions for
   41553 the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
   41554 the VIS extension is exposed as the following built-in functions:
   41555 
   41556      typedef int v1si __attribute__ ((vector_size (4)));
   41557      typedef int v2si __attribute__ ((vector_size (8)));
   41558      typedef short v4hi __attribute__ ((vector_size (8)));
   41559      typedef short v2hi __attribute__ ((vector_size (4)));
   41560      typedef unsigned char v8qi __attribute__ ((vector_size (8)));
   41561      typedef unsigned char v4qi __attribute__ ((vector_size (4)));
   41562 
   41563      void __builtin_vis_write_gsr (int64_t);
   41564      int64_t __builtin_vis_read_gsr (void);
   41565 
   41566      void * __builtin_vis_alignaddr (void *, long);
   41567      void * __builtin_vis_alignaddrl (void *, long);
   41568      int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
   41569      v2si __builtin_vis_faligndatav2si (v2si, v2si);
   41570      v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
   41571      v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
   41572 
   41573      v4hi __builtin_vis_fexpand (v4qi);
   41574 
   41575      v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
   41576      v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
   41577      v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
   41578      v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
   41579      v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
   41580      v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
   41581      v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
   41582 
   41583      v4qi __builtin_vis_fpack16 (v4hi);
   41584      v8qi __builtin_vis_fpack32 (v2si, v8qi);
   41585      v2hi __builtin_vis_fpackfix (v2si);
   41586      v8qi __builtin_vis_fpmerge (v4qi, v4qi);
   41587 
   41588      int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
   41589 
   41590      long __builtin_vis_edge8 (void *, void *);
   41591      long __builtin_vis_edge8l (void *, void *);
   41592      long __builtin_vis_edge16 (void *, void *);
   41593      long __builtin_vis_edge16l (void *, void *);
   41594      long __builtin_vis_edge32 (void *, void *);
   41595      long __builtin_vis_edge32l (void *, void *);
   41596 
   41597      long __builtin_vis_fcmple16 (v4hi, v4hi);
   41598      long __builtin_vis_fcmple32 (v2si, v2si);
   41599      long __builtin_vis_fcmpne16 (v4hi, v4hi);
   41600      long __builtin_vis_fcmpne32 (v2si, v2si);
   41601      long __builtin_vis_fcmpgt16 (v4hi, v4hi);
   41602      long __builtin_vis_fcmpgt32 (v2si, v2si);
   41603      long __builtin_vis_fcmpeq16 (v4hi, v4hi);
   41604      long __builtin_vis_fcmpeq32 (v2si, v2si);
   41605 
   41606      v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
   41607      v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
   41608      v2si __builtin_vis_fpadd32 (v2si, v2si);
   41609      v1si __builtin_vis_fpadd32s (v1si, v1si);
   41610      v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
   41611      v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
   41612      v2si __builtin_vis_fpsub32 (v2si, v2si);
   41613      v1si __builtin_vis_fpsub32s (v1si, v1si);
   41614 
   41615      long __builtin_vis_array8 (long, long);
   41616      long __builtin_vis_array16 (long, long);
   41617      long __builtin_vis_array32 (long, long);
   41618 
   41619  When you use the '-mvis2' switch, the VIS version 2.0 built-in
   41620 functions also become available:
   41621 
   41622      long __builtin_vis_bmask (long, long);
   41623      int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
   41624      v2si __builtin_vis_bshufflev2si (v2si, v2si);
   41625      v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
   41626      v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
   41627 
   41628      long __builtin_vis_edge8n (void *, void *);
   41629      long __builtin_vis_edge8ln (void *, void *);
   41630      long __builtin_vis_edge16n (void *, void *);
   41631      long __builtin_vis_edge16ln (void *, void *);
   41632      long __builtin_vis_edge32n (void *, void *);
   41633      long __builtin_vis_edge32ln (void *, void *);
   41634 
   41635  When you use the '-mvis3' switch, the VIS version 3.0 built-in
   41636 functions also become available:
   41637 
   41638      void __builtin_vis_cmask8 (long);
   41639      void __builtin_vis_cmask16 (long);
   41640      void __builtin_vis_cmask32 (long);
   41641 
   41642      v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
   41643 
   41644      v4hi __builtin_vis_fsll16 (v4hi, v4hi);
   41645      v4hi __builtin_vis_fslas16 (v4hi, v4hi);
   41646      v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
   41647      v4hi __builtin_vis_fsra16 (v4hi, v4hi);
   41648      v2si __builtin_vis_fsll16 (v2si, v2si);
   41649      v2si __builtin_vis_fslas16 (v2si, v2si);
   41650      v2si __builtin_vis_fsrl16 (v2si, v2si);
   41651      v2si __builtin_vis_fsra16 (v2si, v2si);
   41652 
   41653      long __builtin_vis_pdistn (v8qi, v8qi);
   41654 
   41655      v4hi __builtin_vis_fmean16 (v4hi, v4hi);
   41656 
   41657      int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
   41658      int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
   41659 
   41660      v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
   41661      v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
   41662      v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
   41663      v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
   41664      v2si __builtin_vis_fpadds32 (v2si, v2si);
   41665      v1si __builtin_vis_fpadds32s (v1si, v1si);
   41666      v2si __builtin_vis_fpsubs32 (v2si, v2si);
   41667      v1si __builtin_vis_fpsubs32s (v1si, v1si);
   41668 
   41669      long __builtin_vis_fucmple8 (v8qi, v8qi);
   41670      long __builtin_vis_fucmpne8 (v8qi, v8qi);
   41671      long __builtin_vis_fucmpgt8 (v8qi, v8qi);
   41672      long __builtin_vis_fucmpeq8 (v8qi, v8qi);
   41673 
   41674      float __builtin_vis_fhadds (float, float);
   41675      double __builtin_vis_fhaddd (double, double);
   41676      float __builtin_vis_fhsubs (float, float);
   41677      double __builtin_vis_fhsubd (double, double);
   41678      float __builtin_vis_fnhadds (float, float);
   41679      double __builtin_vis_fnhaddd (double, double);
   41680 
   41681      int64_t __builtin_vis_umulxhi (int64_t, int64_t);
   41682      int64_t __builtin_vis_xmulx (int64_t, int64_t);
   41683      int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
   41684 
   41685 
   41686 File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
   41687 
   41688 6.56.21 SPU Built-in Functions
   41689 ------------------------------
   41690 
   41691 GCC provides extensions for the SPU processor as described in the
   41692 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
   41693 found at <http://cell.scei.co.jp/> or
   41694 <http://www.ibm.com/developerworks/power/cell/>.  GCC's implementation
   41695 differs in several ways.
   41696 
   41697    * The optional extension of specifying vector constants in
   41698      parentheses is not supported.
   41699 
   41700    * A vector initializer requires no cast if the vector constant is of
   41701      the same type as the variable it is initializing.
   41702 
   41703    * If 'signed' or 'unsigned' is omitted, the signedness of the vector
   41704      type is the default signedness of the base type.  The default
   41705      varies depending on the operating system, so a portable program
   41706      should always specify the signedness.
   41707 
   41708    * By default, the keyword '__vector' is added.  The macro 'vector' is
   41709      defined in '<spu_intrinsics.h>' and can be undefined.
   41710 
   41711    * GCC allows using a 'typedef' name as the type specifier for a
   41712      vector type.
   41713 
   41714    * For C, overloaded functions are implemented with macros so the
   41715      following does not work:
   41716 
   41717             spu_add ((vector signed int){1, 2, 3, 4}, foo);
   41718 
   41719      Since 'spu_add' is a macro, the vector constant in the example is
   41720      treated as four separate arguments.  Wrap the entire argument in
   41721      parentheses for this to work.
   41722 
   41723    * The extended version of '__builtin_expect' is not supported.
   41724 
   41725  _Note:_ Only the interface described in the aforementioned
   41726 specification is supported.  Internally, GCC uses built-in functions to
   41727 implement the required functionality, but these are not supported and
   41728 are subject to change without notice.
   41729 
   41730 
   41731 File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
   41732 
   41733 6.56.22 TI C6X Built-in Functions
   41734 ---------------------------------
   41735 
   41736 GCC provides intrinsics to access certain instructions of the TI C6X
   41737 processors.  These intrinsics, listed below, are available after
   41738 inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
   41739 C6X instructions.
   41740 
   41741 
   41742      int _sadd (int, int)
   41743      int _ssub (int, int)
   41744      int _sadd2 (int, int)
   41745      int _ssub2 (int, int)
   41746      long long _mpy2 (int, int)
   41747      long long _smpy2 (int, int)
   41748      int _add4 (int, int)
   41749      int _sub4 (int, int)
   41750      int _saddu4 (int, int)
   41751 
   41752      int _smpy (int, int)
   41753      int _smpyh (int, int)
   41754      int _smpyhl (int, int)
   41755      int _smpylh (int, int)
   41756 
   41757      int _sshl (int, int)
   41758      int _subc (int, int)
   41759 
   41760      int _avg2 (int, int)
   41761      int _avgu4 (int, int)
   41762 
   41763      int _clrr (int, int)
   41764      int _extr (int, int)
   41765      int _extru (int, int)
   41766      int _abs (int)
   41767      int _abs2 (int)
   41768 
   41769 
   41770 
   41771 File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
   41772 
   41773 6.56.23 TILE-Gx Built-in Functions
   41774 ----------------------------------
   41775 
   41776 GCC provides intrinsics to access every instruction of the TILE-Gx
   41777 processor.  The intrinsics are of the form:
   41778 
   41779 
   41780      unsigned long long __insn_OP (...)
   41781 
   41782 
   41783  Where OP is the name of the instruction.  Refer to the ISA manual for
   41784 the complete list of instructions.
   41785 
   41786  GCC also provides intrinsics to directly access the network registers.
   41787 The intrinsics are:
   41788 
   41789 
   41790      unsigned long long __tile_idn0_receive (void)
   41791      unsigned long long __tile_idn1_receive (void)
   41792      unsigned long long __tile_udn0_receive (void)
   41793      unsigned long long __tile_udn1_receive (void)
   41794      unsigned long long __tile_udn2_receive (void)
   41795      unsigned long long __tile_udn3_receive (void)
   41796      void __tile_idn_send (unsigned long long)
   41797      void __tile_udn_send (unsigned long long)
   41798 
   41799 
   41800  The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
   41801 that no network operations before it are reordered with those after it.
   41802 
   41803 
   41804 File: gcc.info,  Node: TILEPro Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
   41805 
   41806 6.56.24 TILEPro Built-in Functions
   41807 ----------------------------------
   41808 
   41809 GCC provides intrinsics to access every instruction of the TILEPro
   41810 processor.  The intrinsics are of the form:
   41811 
   41812 
   41813      unsigned __insn_OP (...)
   41814 
   41815 
   41816 where OP is the name of the instruction.  Refer to the ISA manual for
   41817 the complete list of instructions.
   41818 
   41819  GCC also provides intrinsics to directly access the network registers.
   41820 The intrinsics are:
   41821 
   41822 
   41823      unsigned __tile_idn0_receive (void)
   41824      unsigned __tile_idn1_receive (void)
   41825      unsigned __tile_sn_receive (void)
   41826      unsigned __tile_udn0_receive (void)
   41827      unsigned __tile_udn1_receive (void)
   41828      unsigned __tile_udn2_receive (void)
   41829      unsigned __tile_udn3_receive (void)
   41830      void __tile_idn_send (unsigned)
   41831      void __tile_sn_send (unsigned)
   41832      void __tile_udn_send (unsigned)
   41833 
   41834 
   41835  The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
   41836 that no network operations before it are reordered with those after it.
   41837 
   41838 
   41839 File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
   41840 
   41841 6.57 Format Checks Specific to Particular Target Machines
   41842 =========================================================
   41843 
   41844 For some target machines, GCC supports additional options to the format
   41845 attribute (*note Declaring Attributes of Functions: Function
   41846 Attributes.).
   41847 
   41848 * Menu:
   41849 
   41850 * Solaris Format Checks::
   41851 * Darwin Format Checks::
   41852 
   41853 
   41854 File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
   41855 
   41856 6.57.1 Solaris Format Checks
   41857 ----------------------------
   41858 
   41859 Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
   41860 'cmn_err' accepts a subset of the standard 'printf' conversions, and the
   41861 two-argument '%b' conversion for displaying bit-fields.  See the Solaris
   41862 man page for 'cmn_err' for more information.
   41863 
   41864 
   41865 File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
   41866 
   41867 6.57.2 Darwin Format Checks
   41868 ---------------------------
   41869 
   41870 Darwin targets support the 'CFString' (or '__CFString__') in the format
   41871 attribute context.  Declarations made with such attribution are parsed
   41872 for correct syntax and format argument types.  However, parsing of the
   41873 format string itself is currently undefined and is not carried out by
   41874 this version of the compiler.
   41875 
   41876  Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
   41877 may also be used as format arguments.  Note that the relevant headers
   41878 are only likely to be available on Darwin (OSX) installations.  On such
   41879 installations, the XCode and system documentation provide descriptions
   41880 of 'CFString', 'CFStringRefs' and associated functions.
   41881 
   41882 
   41883 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
   41884 
   41885 6.58 Pragmas Accepted by GCC
   41886 ============================
   41887 
   41888 GCC supports several types of pragmas, primarily in order to compile
   41889 code originally written for other compilers.  Note that in general we do
   41890 not recommend the use of pragmas; *Note Function Attributes::, for
   41891 further explanation.
   41892 
   41893 * Menu:
   41894 
   41895 * ARM Pragmas::
   41896 * M32C Pragmas::
   41897 * MeP Pragmas::
   41898 * RS/6000 and PowerPC Pragmas::
   41899 * Darwin Pragmas::
   41900 * Solaris Pragmas::
   41901 * Symbol-Renaming Pragmas::
   41902 * Structure-Packing Pragmas::
   41903 * Weak Pragmas::
   41904 * Diagnostic Pragmas::
   41905 * Visibility Pragmas::
   41906 * Push/Pop Macro Pragmas::
   41907 * Function Specific Option Pragmas::
   41908 
   41909 
   41910 File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
   41911 
   41912 6.58.1 ARM Pragmas
   41913 ------------------
   41914 
   41915 The ARM target defines pragmas for controlling the default addition of
   41916 'long_call' and 'short_call' attributes to functions.  *Note Function
   41917 Attributes::, for information about the effects of these attributes.
   41918 
   41919 'long_calls'
   41920      Set all subsequent functions to have the 'long_call' attribute.
   41921 
   41922 'no_long_calls'
   41923      Set all subsequent functions to have the 'short_call' attribute.
   41924 
   41925 'long_calls_off'
   41926      Do not affect the 'long_call' or 'short_call' attributes of
   41927      subsequent functions.
   41928 
   41929 
   41930 File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
   41931 
   41932 6.58.2 M32C Pragmas
   41933 -------------------
   41934 
   41935 'GCC memregs NUMBER'
   41936      Overrides the command-line option '-memregs=' for the current file.
   41937      Use with care!  This pragma must be before any function in the
   41938      file, and mixing different memregs values in different objects may
   41939      make them incompatible.  This pragma is useful when a
   41940      performance-critical function uses a memreg for temporary values,
   41941      as it may allow you to reduce the number of memregs used.
   41942 
   41943 'ADDRESS NAME ADDRESS'
   41944      For any declared symbols matching NAME, this does three things to
   41945      that symbol: it forces the symbol to be located at the given
   41946      address (a number), it forces the symbol to be volatile, and it
   41947      changes the symbol's scope to be static.  This pragma exists for
   41948      compatibility with other compilers, but note that the common
   41949      '1234H' numeric syntax is not supported (use '0x1234' instead).
   41950      Example:
   41951 
   41952           #pragma ADDRESS port3 0x103
   41953           char port3;
   41954 
   41955 
   41956 File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
   41957 
   41958 6.58.3 MeP Pragmas
   41959 ------------------
   41960 
   41961 'custom io_volatile (on|off)'
   41962      Overrides the command-line option '-mio-volatile' for the current
   41963      file.  Note that for compatibility with future GCC releases, this
   41964      option should only be used once before any 'io' variables in each
   41965      file.
   41966 
   41967 'GCC coprocessor available REGISTERS'
   41968      Specifies which coprocessor registers are available to the register
   41969      allocator.  REGISTERS may be a single register, register range
   41970      separated by ellipses, or comma-separated list of those.  Example:
   41971 
   41972           #pragma GCC coprocessor available $c0...$c10, $c28
   41973 
   41974 'GCC coprocessor call_saved REGISTERS'
   41975      Specifies which coprocessor registers are to be saved and restored
   41976      by any function using them.  REGISTERS may be a single register,
   41977      register range separated by ellipses, or comma-separated list of
   41978      those.  Example:
   41979 
   41980           #pragma GCC coprocessor call_saved $c4...$c6, $c31
   41981 
   41982 'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
   41983      Creates and defines a register class.  These register classes can
   41984      be used by inline 'asm' constructs.  REGISTERS may be a single
   41985      register, register range separated by ellipses, or comma-separated
   41986      list of those.  Example:
   41987 
   41988           #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
   41989 
   41990           asm ("cpfoo %0" : "=B" (x));
   41991 
   41992 'GCC disinterrupt NAME , NAME ...'
   41993      For the named functions, the compiler adds code to disable
   41994      interrupts for the duration of those functions.  If any functions
   41995      so named are not encountered in the source, a warning is emitted
   41996      that the pragma is not used.  Examples:
   41997 
   41998           #pragma disinterrupt foo
   41999           #pragma disinterrupt bar, grill
   42000           int foo () { ... }
   42001 
   42002 'GCC call NAME , NAME ...'
   42003      For the named functions, the compiler always uses a
   42004      register-indirect call model when calling the named functions.
   42005      Examples:
   42006 
   42007           extern int foo ();
   42008           #pragma call foo
   42009 
   42010 
   42011 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
   42012 
   42013 6.58.4 RS/6000 and PowerPC Pragmas
   42014 ----------------------------------
   42015 
   42016 The RS/6000 and PowerPC targets define one pragma for controlling
   42017 whether or not the 'longcall' attribute is added to function
   42018 declarations by default.  This pragma overrides the '-mlongcall' option,
   42019 but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
   42020 PowerPC Options::, for more information about when long calls are and
   42021 are not necessary.
   42022 
   42023 'longcall (1)'
   42024      Apply the 'longcall' attribute to all subsequent function
   42025      declarations.
   42026 
   42027 'longcall (0)'
   42028      Do not apply the 'longcall' attribute to subsequent function
   42029      declarations.
   42030 
   42031 
   42032 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
   42033 
   42034 6.58.5 Darwin Pragmas
   42035 ---------------------
   42036 
   42037 The following pragmas are available for all architectures running the
   42038 Darwin operating system.  These are useful for compatibility with other
   42039 Mac OS compilers.
   42040 
   42041 'mark TOKENS...'
   42042      This pragma is accepted, but has no effect.
   42043 
   42044 'options align=ALIGNMENT'
   42045      This pragma sets the alignment of fields in structures.  The values
   42046      of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
   42047      'power', to emulate PowerPC alignment.  Uses of this pragma nest
   42048      properly; to restore the previous setting, use 'reset' for the
   42049      ALIGNMENT.
   42050 
   42051 'segment TOKENS...'
   42052      This pragma is accepted, but has no effect.
   42053 
   42054 'unused (VAR [, VAR]...)'
   42055      This pragma declares variables to be possibly unused.  GCC does not
   42056      produce warnings for the listed variables.  The effect is similar
   42057      to that of the 'unused' attribute, except that this pragma may
   42058      appear anywhere within the variables' scopes.
   42059 
   42060 
   42061 File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
   42062 
   42063 6.58.6 Solaris Pragmas
   42064 ----------------------
   42065 
   42066 The Solaris target supports '#pragma redefine_extname' (*note
   42067 Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
   42068 directives for compatibility with the system compiler.
   42069 
   42070 'align ALIGNMENT (VARIABLE [, VARIABLE]...)'
   42071 
   42072      Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
   42073      is the same as GCC's 'aligned' attribute *note Variable
   42074      Attributes::).  Macro expansion occurs on the arguments to this
   42075      pragma when compiling C and Objective-C.  It does not currently
   42076      occur when compiling C++, but this is a bug which may be fixed in a
   42077      future release.
   42078 
   42079 'fini (FUNCTION [, FUNCTION]...)'
   42080 
   42081      This pragma causes each listed FUNCTION to be called after main, or
   42082      during shared module unloading, by adding a call to the '.fini'
   42083      section.
   42084 
   42085 'init (FUNCTION [, FUNCTION]...)'
   42086 
   42087      This pragma causes each listed FUNCTION to be called during
   42088      initialization (before 'main') or during shared module loading, by
   42089      adding a call to the '.init' section.
   42090 
   42091 
   42092 File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
   42093 
   42094 6.58.7 Symbol-Renaming Pragmas
   42095 ------------------------------
   42096 
   42097 For compatibility with the Solaris system headers, GCC supports two
   42098 '#pragma' directives that change the name used in assembly for a given
   42099 declaration.  To get this effect on all platforms supported by GCC, use
   42100 the asm labels extension (*note Asm Labels::).
   42101 
   42102 'redefine_extname OLDNAME NEWNAME'
   42103 
   42104      This pragma gives the C function OLDNAME the assembly symbol
   42105      NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
   42106      defined if this pragma is available (currently on all platforms).
   42107 
   42108  This pragma and the asm labels extension interact in a complicated
   42109 manner.  Here are some corner cases you may want to be aware of.
   42110 
   42111   1. Both pragmas silently apply only to declarations with external
   42112      linkage.  Asm labels do not have this restriction.
   42113 
   42114   2. In C++, both pragmas silently apply only to declarations with "C"
   42115      linkage.  Again, asm labels do not have this restriction.
   42116 
   42117   3. If any of the three ways of changing the assembly name of a
   42118      declaration is applied to a declaration whose assembly name has
   42119      already been determined (either by a previous use of one of these
   42120      features, or because the compiler needed the assembly name in order
   42121      to generate code), and the new name is different, a warning issues
   42122      and the name does not change.
   42123 
   42124   4. The OLDNAME used by '#pragma redefine_extname' is always the
   42125      C-language name.
   42126 
   42127 
   42128 File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
   42129 
   42130 6.58.8 Structure-Packing Pragmas
   42131 --------------------------------
   42132 
   42133 For compatibility with Microsoft Windows compilers, GCC supports a set
   42134 of '#pragma' directives that change the maximum alignment of members of
   42135 structures (other than zero-width bit-fields), unions, and classes
   42136 subsequently defined.  The N value below always is required to be a
   42137 small power of two and specifies the new alignment in bytes.
   42138 
   42139   1. '#pragma pack(N)' simply sets the new alignment.
   42140   2. '#pragma pack()' sets the alignment to the one that was in effect
   42141      when compilation started (see also command-line option
   42142      '-fpack-struct[=N]' *note Code Gen Options::).
   42143   3. '#pragma pack(push[,N])' pushes the current alignment setting on an
   42144      internal stack and then optionally sets the new alignment.
   42145   4. '#pragma pack(pop)' restores the alignment setting to the one saved
   42146      at the top of the internal stack (and removes that stack entry).
   42147      Note that '#pragma pack([N])' does not influence this internal
   42148      stack; thus it is possible to have '#pragma pack(push)' followed by
   42149      multiple '#pragma pack(N)' instances and finalized by a single
   42150      '#pragma pack(pop)'.
   42151 
   42152  Some targets, e.g. i386 and PowerPC, support the 'ms_struct' '#pragma'
   42153 which lays out a structure as the documented '__attribute__
   42154 ((ms_struct))'.
   42155   1. '#pragma ms_struct on' turns on the layout for structures declared.
   42156   2. '#pragma ms_struct off' turns off the layout for structures
   42157      declared.
   42158   3. '#pragma ms_struct reset' goes back to the default layout.
   42159 
   42160 
   42161 File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
   42162 
   42163 6.58.9 Weak Pragmas
   42164 -------------------
   42165 
   42166 For compatibility with SVR4, GCC supports a set of '#pragma' directives
   42167 for declaring symbols to be weak, and defining weak aliases.
   42168 
   42169 '#pragma weak SYMBOL'
   42170      This pragma declares SYMBOL to be weak, as if the declaration had
   42171      the attribute of the same name.  The pragma may appear before or
   42172      after the declaration of SYMBOL.  It is not an error for SYMBOL to
   42173      never be defined at all.
   42174 
   42175 '#pragma weak SYMBOL1 = SYMBOL2'
   42176      This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
   42177      an error if SYMBOL2 is not defined in the current translation unit.
   42178 
   42179 
   42180 File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
   42181 
   42182 6.58.10 Diagnostic Pragmas
   42183 --------------------------
   42184 
   42185 GCC allows the user to selectively enable or disable certain types of
   42186 diagnostics, and change the kind of the diagnostic.  For example, a
   42187 project's policy might require that all sources compile with '-Werror'
   42188 but certain files might have exceptions allowing specific types of
   42189 warnings.  Or, a project might selectively enable diagnostics and treat
   42190 them as errors depending on which preprocessor macros are defined.
   42191 
   42192 '#pragma GCC diagnostic KIND OPTION'
   42193 
   42194      Modifies the disposition of a diagnostic.  Note that not all
   42195      diagnostics are modifiable; at the moment only warnings (normally
   42196      controlled by '-W...') can be controlled, and not all of them.  Use
   42197      '-fdiagnostics-show-option' to determine which diagnostics are
   42198      controllable and which option controls them.
   42199 
   42200      KIND is 'error' to treat this diagnostic as an error, 'warning' to
   42201      treat it like a warning (even if '-Werror' is in effect), or
   42202      'ignored' if the diagnostic is to be ignored.  OPTION is a double
   42203      quoted string that matches the command-line option.
   42204 
   42205           #pragma GCC diagnostic warning "-Wformat"
   42206           #pragma GCC diagnostic error "-Wformat"
   42207           #pragma GCC diagnostic ignored "-Wformat"
   42208 
   42209      Note that these pragmas override any command-line options.  GCC
   42210      keeps track of the location of each pragma, and issues diagnostics
   42211      according to the state as of that point in the source file.  Thus,
   42212      pragmas occurring after a line do not affect diagnostics caused by
   42213      that line.
   42214 
   42215 '#pragma GCC diagnostic push'
   42216 '#pragma GCC diagnostic pop'
   42217 
   42218      Causes GCC to remember the state of the diagnostics as of each
   42219      'push', and restore to that point at each 'pop'.  If a 'pop' has no
   42220      matching 'push', the command-line options are restored.
   42221 
   42222           #pragma GCC diagnostic error "-Wuninitialized"
   42223             foo(a);                       /* error is given for this one */
   42224           #pragma GCC diagnostic push
   42225           #pragma GCC diagnostic ignored "-Wuninitialized"
   42226             foo(b);                       /* no diagnostic for this one */
   42227           #pragma GCC diagnostic pop
   42228             foo(c);                       /* error is given for this one */
   42229           #pragma GCC diagnostic pop
   42230             foo(d);                       /* depends on command-line options */
   42231 
   42232  GCC also offers a simple mechanism for printing messages during
   42233 compilation.
   42234 
   42235 '#pragma message STRING'
   42236 
   42237      Prints STRING as a compiler message on compilation.  The message is
   42238      informational only, and is neither a compilation warning nor an
   42239      error.
   42240 
   42241           #pragma message "Compiling " __FILE__ "..."
   42242 
   42243      STRING may be parenthesized, and is printed with location
   42244      information.  For example,
   42245 
   42246           #define DO_PRAGMA(x) _Pragma (#x)
   42247           #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
   42248 
   42249           TODO(Remember to fix this)
   42250 
   42251      prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
   42252      fix this'.
   42253 
   42254 
   42255 File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
   42256 
   42257 6.58.11 Visibility Pragmas
   42258 --------------------------
   42259 
   42260 '#pragma GCC visibility push(VISIBILITY)'
   42261 '#pragma GCC visibility pop'
   42262 
   42263      This pragma allows the user to set the visibility for multiple
   42264      declarations without having to give each a visibility attribute
   42265      *Note Function Attributes::, for more information about visibility
   42266      and the attribute syntax.
   42267 
   42268      In C++, '#pragma GCC visibility' affects only namespace-scope
   42269      declarations.  Class members and template specializations are not
   42270      affected; if you want to override the visibility for a particular
   42271      member or instantiation, you must use an attribute.
   42272 
   42273 
   42274 File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
   42275 
   42276 6.58.12 Push/Pop Macro Pragmas
   42277 ------------------------------
   42278 
   42279 For compatibility with Microsoft Windows compilers, GCC supports
   42280 '#pragma push_macro("MACRO_NAME")' and '#pragma
   42281 pop_macro("MACRO_NAME")'.
   42282 
   42283 '#pragma push_macro("MACRO_NAME")'
   42284      This pragma saves the value of the macro named as MACRO_NAME to the
   42285      top of the stack for this macro.
   42286 
   42287 '#pragma pop_macro("MACRO_NAME")'
   42288      This pragma sets the value of the macro named as MACRO_NAME to the
   42289      value on top of the stack for this macro.  If the stack for
   42290      MACRO_NAME is empty, the value of the macro remains unchanged.
   42291 
   42292  For example:
   42293 
   42294      #define X  1
   42295      #pragma push_macro("X")
   42296      #undef X
   42297      #define X -1
   42298      #pragma pop_macro("X")
   42299      int x [X];
   42300 
   42301 In this example, the definition of X as 1 is saved by '#pragma
   42302 push_macro' and restored by '#pragma pop_macro'.
   42303 
   42304 
   42305 File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
   42306 
   42307 6.58.13 Function Specific Option Pragmas
   42308 ----------------------------------------
   42309 
   42310 '#pragma GCC target ("STRING"...)'
   42311 
   42312      This pragma allows you to set target specific options for functions
   42313      defined later in the source file.  One or more strings can be
   42314      specified.  Each function that is defined after this point is as if
   42315      'attribute((target("STRING")))' was specified for that function.
   42316      The parenthesis around the options is optional.  *Note Function
   42317      Attributes::, for more information about the 'target' attribute and
   42318      the attribute syntax.
   42319 
   42320      The '#pragma GCC target' attribute is not implemented in GCC
   42321      versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
   42322      PowerPC back ends.  At present, it is not implemented for other
   42323      back ends.
   42324 
   42325 '#pragma GCC optimize ("STRING"...)'
   42326 
   42327      This pragma allows you to set global optimization options for
   42328      functions defined later in the source file.  One or more strings
   42329      can be specified.  Each function that is defined after this point
   42330      is as if 'attribute((optimize("STRING")))' was specified for that
   42331      function.  The parenthesis around the options is optional.  *Note
   42332      Function Attributes::, for more information about the 'optimize'
   42333      attribute and the attribute syntax.
   42334 
   42335      The '#pragma GCC optimize' pragma is not implemented in GCC
   42336      versions earlier than 4.4.
   42337 
   42338 '#pragma GCC push_options'
   42339 '#pragma GCC pop_options'
   42340 
   42341      These pragmas maintain a stack of the current target and
   42342      optimization options.  It is intended for include files where you
   42343      temporarily want to switch to using a different '#pragma GCC
   42344      target' or '#pragma GCC optimize' and then to pop back to the
   42345      previous options.
   42346 
   42347      The '#pragma GCC push_options' and '#pragma GCC pop_options'
   42348      pragmas are not implemented in GCC versions earlier than 4.4.
   42349 
   42350 '#pragma GCC reset_options'
   42351 
   42352      This pragma clears the current '#pragma GCC target' and '#pragma
   42353      GCC optimize' to use the default switches as specified on the
   42354      command line.
   42355 
   42356      The '#pragma GCC reset_options' pragma is not implemented in GCC
   42357      versions earlier than 4.4.
   42358 
   42359 
   42360 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
   42361 
   42362 6.59 Unnamed struct/union fields within structs/unions
   42363 ======================================================
   42364 
   42365 As permitted by ISO C11 and for compatibility with other compilers, GCC
   42366 allows you to define a structure or union that contains, as fields,
   42367 structures and unions without names.  For example:
   42368 
   42369      struct {
   42370        int a;
   42371        union {
   42372          int b;
   42373          float c;
   42374        };
   42375        int d;
   42376      } foo;
   42377 
   42378 In this example, you are able to access members of the unnamed union
   42379 with code like 'foo.b'.  Note that only unnamed structs and unions are
   42380 allowed, you may not have, for example, an unnamed 'int'.
   42381 
   42382  You must never create such structures that cause ambiguous field
   42383 definitions.  For example, in this structure:
   42384 
   42385      struct {
   42386        int a;
   42387        struct {
   42388          int a;
   42389        };
   42390      } foo;
   42391 
   42392 it is ambiguous which 'a' is being referred to with 'foo.a'.  The
   42393 compiler gives errors for such constructs.
   42394 
   42395  Unless '-fms-extensions' is used, the unnamed field must be a structure
   42396 or union definition without a tag (for example, 'struct { int a; };').
   42397 If '-fms-extensions' is used, the field may also be a definition with a
   42398 tag such as 'struct foo { int a; };', a reference to a previously
   42399 defined structure or union such as 'struct foo;', or a reference to a
   42400 'typedef' name for a previously defined structure or union type.
   42401 
   42402  The option '-fplan9-extensions' enables '-fms-extensions' as well as
   42403 two other extensions.  First, a pointer to a structure is automatically
   42404 converted to a pointer to an anonymous field for assignments and
   42405 function calls.  For example:
   42406 
   42407      struct s1 { int a; };
   42408      struct s2 { struct s1; };
   42409      extern void f1 (struct s1 *);
   42410      void f2 (struct s2 *p) { f1 (p); }
   42411 
   42412 In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
   42413 pointer to the anonymous field.
   42414 
   42415  Second, when the type of an anonymous field is a 'typedef' for a
   42416 'struct' or 'union', code may refer to the field using the name of the
   42417 'typedef'.
   42418 
   42419      typedef struct { int a; } s1;
   42420      struct s2 { s1; };
   42421      s1 f1 (struct s2 *p) { return p->s1; }
   42422 
   42423  These usages are only permitted when they are not ambiguous.
   42424 
   42425 
   42426 File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
   42427 
   42428 6.60 Thread-Local Storage
   42429 =========================
   42430 
   42431 Thread-local storage (TLS) is a mechanism by which variables are
   42432 allocated such that there is one instance of the variable per extant
   42433 thread.  The runtime model GCC uses to implement this originates in the
   42434 IA-64 processor-specific ABI, but has since been migrated to other
   42435 processors as well.  It requires significant support from the linker
   42436 ('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
   42437 'libpthread.so'), so it is not available everywhere.
   42438 
   42439  At the user level, the extension is visible with a new storage class
   42440 keyword: '__thread'.  For example:
   42441 
   42442      __thread int i;
   42443      extern __thread struct state s;
   42444      static __thread char *p;
   42445 
   42446  The '__thread' specifier may be used alone, with the 'extern' or
   42447 'static' specifiers, but with no other storage class specifier.  When
   42448 used with 'extern' or 'static', '__thread' must appear immediately after
   42449 the other storage class specifier.
   42450 
   42451  The '__thread' specifier may be applied to any global, file-scoped
   42452 static, function-scoped static, or static data member of a class.  It
   42453 may not be applied to block-scoped automatic or non-static data member.
   42454 
   42455  When the address-of operator is applied to a thread-local variable, it
   42456 is evaluated at run time and returns the address of the current thread's
   42457 instance of that variable.  An address so obtained may be used by any
   42458 thread.  When a thread terminates, any pointers to thread-local
   42459 variables in that thread become invalid.
   42460 
   42461  No static initialization may refer to the address of a thread-local
   42462 variable.
   42463 
   42464  In C++, if an initializer is present for a thread-local variable, it
   42465 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
   42466 standard.
   42467 
   42468  See ELF Handling For Thread-Local Storage
   42469 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
   42470 the four thread-local storage addressing models, and how the runtime is
   42471 expected to function.
   42472 
   42473 * Menu:
   42474 
   42475 * C99 Thread-Local Edits::
   42476 * C++98 Thread-Local Edits::
   42477 
   42478 
   42479 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
   42480 
   42481 6.60.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
   42482 -------------------------------------------------------
   42483 
   42484 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
   42485 document the exact semantics of the language extension.
   42486 
   42487    * '5.1.2 Execution environments'
   42488 
   42489      Add new text after paragraph 1
   42490 
   42491           Within either execution environment, a "thread" is a flow of
   42492           control within a program.  It is implementation defined
   42493           whether or not there may be more than one thread associated
   42494           with a program.  It is implementation defined how threads
   42495           beyond the first are created, the name and type of the
   42496           function called at thread startup, and how threads may be
   42497           terminated.  However, objects with thread storage duration
   42498           shall be initialized before thread startup.
   42499 
   42500    * '6.2.4 Storage durations of objects'
   42501 
   42502      Add new text before paragraph 3
   42503 
   42504           An object whose identifier is declared with the storage-class
   42505           specifier '__thread' has "thread storage duration".  Its
   42506           lifetime is the entire execution of the thread, and its stored
   42507           value is initialized only once, prior to thread startup.
   42508 
   42509    * '6.4.1 Keywords'
   42510 
   42511      Add '__thread'.
   42512 
   42513    * '6.7.1 Storage-class specifiers'
   42514 
   42515      Add '__thread' to the list of storage class specifiers in paragraph
   42516      1.
   42517 
   42518      Change paragraph 2 to
   42519 
   42520           With the exception of '__thread', at most one storage-class
   42521           specifier may be given [...].  The '__thread' specifier may be
   42522           used alone, or immediately following 'extern' or 'static'.
   42523 
   42524      Add new text after paragraph 6
   42525 
   42526           The declaration of an identifier for a variable that has block
   42527           scope that specifies '__thread' shall also specify either
   42528           'extern' or 'static'.
   42529 
   42530           The '__thread' specifier shall be used only with variables.
   42531 
   42532 
   42533 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
   42534 
   42535 6.60.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
   42536 --------------------------------------------------------
   42537 
   42538 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
   42539 that document the exact semantics of the language extension.
   42540 
   42541    * [intro.execution]
   42542 
   42543      New text after paragraph 4
   42544 
   42545           A "thread" is a flow of control within the abstract machine.
   42546           It is implementation defined whether or not there may be more
   42547           than one thread.
   42548 
   42549      New text after paragraph 7
   42550 
   42551           It is unspecified whether additional action must be taken to
   42552           ensure when and whether side effects are visible to other
   42553           threads.
   42554 
   42555    * [lex.key]
   42556 
   42557      Add '__thread'.
   42558 
   42559    * [basic.start.main]
   42560 
   42561      Add after paragraph 5
   42562 
   42563           The thread that begins execution at the 'main' function is
   42564           called the "main thread".  It is implementation defined how
   42565           functions beginning threads other than the main thread are
   42566           designated or typed.  A function so designated, as well as the
   42567           'main' function, is called a "thread startup function".  It is
   42568           implementation defined what happens if a thread startup
   42569           function returns.  It is implementation defined what happens
   42570           to other threads when any thread calls 'exit'.
   42571 
   42572    * [basic.start.init]
   42573 
   42574      Add after paragraph 4
   42575 
   42576           The storage for an object of thread storage duration shall be
   42577           statically initialized before the first statement of the
   42578           thread startup function.  An object of thread storage duration
   42579           shall not require dynamic initialization.
   42580 
   42581    * [basic.start.term]
   42582 
   42583      Add after paragraph 3
   42584 
   42585           The type of an object with thread storage duration shall not
   42586           have a non-trivial destructor, nor shall it be an array type
   42587           whose elements (directly or indirectly) have non-trivial
   42588           destructors.
   42589 
   42590    * [basic.stc]
   42591 
   42592      Add "thread storage duration" to the list in paragraph 1.
   42593 
   42594      Change paragraph 2
   42595 
   42596           Thread, static, and automatic storage durations are associated
   42597           with objects introduced by declarations [...].
   42598 
   42599      Add '__thread' to the list of specifiers in paragraph 3.
   42600 
   42601    * [basic.stc.thread]
   42602 
   42603      New section before [basic.stc.static]
   42604 
   42605           The keyword '__thread' applied to a non-local object gives the
   42606           object thread storage duration.
   42607 
   42608           A local variable or class data member declared both 'static'
   42609           and '__thread' gives the variable or member thread storage
   42610           duration.
   42611 
   42612    * [basic.stc.static]
   42613 
   42614      Change paragraph 1
   42615 
   42616           All objects that have neither thread storage duration, dynamic
   42617           storage duration nor are local [...].
   42618 
   42619    * [dcl.stc]
   42620 
   42621      Add '__thread' to the list in paragraph 1.
   42622 
   42623      Change paragraph 1
   42624 
   42625           With the exception of '__thread', at most one
   42626           STORAGE-CLASS-SPECIFIER shall appear in a given
   42627           DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
   42628           alone, or immediately following the 'extern' or 'static'
   42629           specifiers.  [...]
   42630 
   42631      Add after paragraph 5
   42632 
   42633           The '__thread' specifier can be applied only to the names of
   42634           objects and to anonymous unions.
   42635 
   42636    * [class.mem]
   42637 
   42638      Add after paragraph 6
   42639 
   42640           Non-'static' members shall not be '__thread'.
   42641 
   42642 
   42643 File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
   42644 
   42645 6.61 Binary constants using the '0b' prefix
   42646 ===========================================
   42647 
   42648 Integer constants can be written as binary constants, consisting of a
   42649 sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
   42650 particularly useful in environments that operate a lot on the bit level
   42651 (like microcontrollers).
   42652 
   42653  The following statements are identical:
   42654 
   42655      i =       42;
   42656      i =     0x2a;
   42657      i =      052;
   42658      i = 0b101010;
   42659 
   42660  The type of these constants follows the same rules as for octal or
   42661 hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
   42662 applied.
   42663 
   42664 
   42665 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
   42666 
   42667 7 Extensions to the C++ Language
   42668 ********************************
   42669 
   42670 The GNU compiler provides these extensions to the C++ language (and you
   42671 can also use most of the C language extensions in your C++ programs).
   42672 If you want to write code that checks whether these features are
   42673 available, you can test for the GNU compiler the same way as for C
   42674 programs: check for a predefined macro '__GNUC__'.  You can also use
   42675 '__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
   42676 (cpp)Common Predefined Macros.).
   42677 
   42678 * Menu:
   42679 
   42680 * C++ Volatiles::       What constitutes an access to a volatile object.
   42681 * Restricted Pointers:: C99 restricted pointers and references.
   42682 * Vague Linkage::       Where G++ puts inlines, vtables and such.
   42683 * C++ Interface::       You can use a single C++ header file for both
   42684                         declarations and definitions.
   42685 * Template Instantiation:: Methods for ensuring that exactly one copy of
   42686                         each needed template instantiation is emitted.
   42687 * Bound member functions:: You can extract a function pointer to the
   42688                         method denoted by a '->*' or '.*' expression.
   42689 * C++ Attributes::      Variable, function, and type attributes for C++ only.
   42690 * Function Multiversioning::   Declaring multiple function versions.
   42691 * Namespace Association:: Strong using-directives for namespace association.
   42692 * Type Traits::         Compiler support for type traits
   42693 * Java Exceptions::     Tweaking exception handling to work with Java.
   42694 * Deprecated Features:: Things will disappear from G++.
   42695 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
   42696 
   42697 
   42698 File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
   42699 
   42700 7.1 When is a Volatile C++ Object Accessed?
   42701 ===========================================
   42702 
   42703 The C++ standard differs from the C standard in its treatment of
   42704 volatile objects.  It fails to specify what constitutes a volatile
   42705 access, except to say that C++ should behave in a similar manner to C
   42706 with respect to volatiles, where possible.  However, the different
   42707 lvalueness of expressions between C and C++ complicate the behavior.
   42708 G++ behaves the same as GCC for volatile access, *Note Volatiles: C
   42709 Extensions, for a description of GCC's behavior.
   42710 
   42711  The C and C++ language specifications differ when an object is accessed
   42712 in a void context:
   42713 
   42714      volatile int *src = SOMEVALUE;
   42715      *src;
   42716 
   42717  The C++ standard specifies that such expressions do not undergo lvalue
   42718 to rvalue conversion, and that the type of the dereferenced object may
   42719 be incomplete.  The C++ standard does not specify explicitly that it is
   42720 lvalue to rvalue conversion that is responsible for causing an access.
   42721 There is reason to believe that it is, because otherwise certain simple
   42722 expressions become undefined.  However, because it would surprise most
   42723 programmers, G++ treats dereferencing a pointer to volatile object of
   42724 complete type as GCC would do for an equivalent type in C.  When the
   42725 object has incomplete type, G++ issues a warning; if you wish to force
   42726 an error, you must force a conversion to rvalue with, for instance, a
   42727 static cast.
   42728 
   42729  When using a reference to volatile, G++ does not treat equivalent
   42730 expressions as accesses to volatiles, but instead issues a warning that
   42731 no volatile is accessed.  The rationale for this is that otherwise it
   42732 becomes difficult to determine where volatile access occur, and not
   42733 possible to ignore the return value from functions returning volatile
   42734 references.  Again, if you wish to force a read, cast the reference to
   42735 an rvalue.
   42736 
   42737  G++ implements the same behavior as GCC does when assigning to a
   42738 volatile object--there is no reread of the assigned-to object, the
   42739 assigned rvalue is reused.  Note that in C++ assignment expressions are
   42740 lvalues, and if used as an lvalue, the volatile object is referred to.
   42741 For instance, VREF refers to VOBJ, as expected, in the following
   42742 example:
   42743 
   42744      volatile int vobj;
   42745      volatile int &vref = vobj = SOMETHING;
   42746 
   42747 
   42748 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
   42749 
   42750 7.2 Restricting Pointer Aliasing
   42751 ================================
   42752 
   42753 As with the C front end, G++ understands the C99 feature of restricted
   42754 pointers, specified with the '__restrict__', or '__restrict' type
   42755 qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
   42756 language flag, 'restrict' is not a keyword in C++.
   42757 
   42758  In addition to allowing restricted pointers, you can specify restricted
   42759 references, which indicate that the reference is not aliased in the
   42760 local context.
   42761 
   42762      void fn (int *__restrict__ rptr, int &__restrict__ rref)
   42763      {
   42764        /* ... */
   42765      }
   42766 
   42767 In the body of 'fn', RPTR points to an unaliased integer and RREF refers
   42768 to a (different) unaliased integer.
   42769 
   42770  You may also specify whether a member function's THIS pointer is
   42771 unaliased by using '__restrict__' as a member function qualifier.
   42772 
   42773      void T::fn () __restrict__
   42774      {
   42775        /* ... */
   42776      }
   42777 
   42778 Within the body of 'T::fn', THIS has the effective definition 'T
   42779 *__restrict__ const this'.  Notice that the interpretation of a
   42780 '__restrict__' member function qualifier is different to that of 'const'
   42781 or 'volatile' qualifier, in that it is applied to the pointer rather
   42782 than the object.  This is consistent with other compilers that implement
   42783 restricted pointers.
   42784 
   42785  As with all outermost parameter qualifiers, '__restrict__' is ignored
   42786 in function definition matching.  This means you only need to specify
   42787 '__restrict__' in a function definition, rather than in a function
   42788 prototype as well.
   42789 
   42790 
   42791 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
   42792 
   42793 7.3 Vague Linkage
   42794 =================
   42795 
   42796 There are several constructs in C++ that require space in the object
   42797 file but are not clearly tied to a single translation unit.  We say that
   42798 these constructs have "vague linkage".  Typically such constructs are
   42799 emitted wherever they are needed, though sometimes we can be more
   42800 clever.
   42801 
   42802 Inline Functions
   42803      Inline functions are typically defined in a header file which can
   42804      be included in many different compilations.  Hopefully they can
   42805      usually be inlined, but sometimes an out-of-line copy is necessary,
   42806      if the address of the function is taken or if inlining fails.  In
   42807      general, we emit an out-of-line copy in all translation units where
   42808      one is needed.  As an exception, we only emit inline virtual
   42809      functions with the vtable, since it always requires a copy.
   42810 
   42811      Local static variables and string constants used in an inline
   42812      function are also considered to have vague linkage, since they must
   42813      be shared between all inlined and out-of-line instances of the
   42814      function.
   42815 
   42816 VTables
   42817      C++ virtual functions are implemented in most compilers using a
   42818      lookup table, known as a vtable.  The vtable contains pointers to
   42819      the virtual functions provided by a class, and each object of the
   42820      class contains a pointer to its vtable (or vtables, in some
   42821      multiple-inheritance situations).  If the class declares any
   42822      non-inline, non-pure virtual functions, the first one is chosen as
   42823      the "key method" for the class, and the vtable is only emitted in
   42824      the translation unit where the key method is defined.
   42825 
   42826      _Note:_ If the chosen key method is later defined as inline, the
   42827      vtable is still emitted in every translation unit that defines it.
   42828      Make sure that any inline virtuals are declared inline in the class
   42829      body, even if they are not defined there.
   42830 
   42831 'type_info' objects
   42832      C++ requires information about types to be written out in order to
   42833      implement 'dynamic_cast', 'typeid' and exception handling.  For
   42834      polymorphic classes (classes with virtual functions), the
   42835      'type_info' object is written out along with the vtable so that
   42836      'dynamic_cast' can determine the dynamic type of a class object at
   42837      run time.  For all other types, we write out the 'type_info' object
   42838      when it is used: when applying 'typeid' to an expression, throwing
   42839      an object, or referring to a type in a catch clause or exception
   42840      specification.
   42841 
   42842 Template Instantiations
   42843      Most everything in this section also applies to template
   42844      instantiations, but there are other options as well.  *Note Where's
   42845      the Template?: Template Instantiation.
   42846 
   42847  When used with GNU ld version 2.8 or later on an ELF system such as
   42848 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
   42849 these constructs will be discarded at link time.  This is known as
   42850 COMDAT support.
   42851 
   42852  On targets that don't support COMDAT, but do support weak symbols, GCC
   42853 uses them.  This way one copy overrides all the others, but the unused
   42854 copies still take up space in the executable.
   42855 
   42856  For targets that do not support either COMDAT or weak symbols, most
   42857 entities with vague linkage are emitted as local symbols to avoid
   42858 duplicate definition errors from the linker.  This does not happen for
   42859 local statics in inlines, however, as having multiple copies almost
   42860 certainly breaks things.
   42861 
   42862  *Note Declarations and Definitions in One Header: C++ Interface, for
   42863 another way to control placement of these constructs.
   42864 
   42865 
   42866 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
   42867 
   42868 7.4 #pragma interface and implementation
   42869 ========================================
   42870 
   42871 '#pragma interface' and '#pragma implementation' provide the user with a
   42872 way of explicitly directing the compiler to emit entities with vague
   42873 linkage (and debugging information) in a particular translation unit.
   42874 
   42875  _Note:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases,
   42876 because of COMDAT support and the "key method" heuristic mentioned in
   42877 *note Vague Linkage::.  Using them can actually cause your program to
   42878 grow due to unnecessary out-of-line copies of inline functions.
   42879 Currently (3.4) the only benefit of these '#pragma's is reduced
   42880 duplication of debugging information, and that should be addressed soon
   42881 on DWARF 2 targets with the use of COMDAT groups.
   42882 
   42883 '#pragma interface'
   42884 '#pragma interface "SUBDIR/OBJECTS.h"'
   42885      Use this directive in _header files_ that define object classes, to
   42886      save space in most of the object files that use those classes.
   42887      Normally, local copies of certain information (backup copies of
   42888      inline member functions, debugging information, and the internal
   42889      tables that implement virtual functions) must be kept in each
   42890      object file that includes class definitions.  You can use this
   42891      pragma to avoid such duplication.  When a header file containing
   42892      '#pragma interface' is included in a compilation, this auxiliary
   42893      information is not generated (unless the main input source file
   42894      itself uses '#pragma implementation').  Instead, the object files
   42895      contain references to be resolved at link time.
   42896 
   42897      The second form of this directive is useful for the case where you
   42898      have multiple headers with the same name in different directories.
   42899      If you use this form, you must specify the same string to '#pragma
   42900      implementation'.
   42901 
   42902 '#pragma implementation'
   42903 '#pragma implementation "OBJECTS.h"'
   42904      Use this pragma in a _main input file_, when you want full output
   42905      from included header files to be generated (and made globally
   42906      visible).  The included header file, in turn, should use '#pragma
   42907      interface'.  Backup copies of inline member functions, debugging
   42908      information, and the internal tables used to implement virtual
   42909      functions are all generated in implementation files.
   42910 
   42911      If you use '#pragma implementation' with no argument, it applies to
   42912      an include file with the same basename(1) as your source file.  For
   42913      example, in 'allclass.cc', giving just '#pragma implementation' by
   42914      itself is equivalent to '#pragma implementation "allclass.h"'.
   42915 
   42916      In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as
   42917      an implementation file whenever you would include it from
   42918      'allclass.cc' even if you never specified '#pragma implementation'.
   42919      This was deemed to be more trouble than it was worth, however, and
   42920      disabled.
   42921 
   42922      Use the string argument if you want a single implementation file to
   42923      include code from multiple header files.  (You must also use
   42924      '#include' to include the header file; '#pragma implementation'
   42925      only specifies how to use the file--it doesn't actually include
   42926      it.)
   42927 
   42928      There is no way to split up the contents of a single header file
   42929      into multiple implementation files.
   42930 
   42931  '#pragma implementation' and '#pragma interface' also have an effect on
   42932 function inlining.
   42933 
   42934  If you define a class in a header file marked with '#pragma interface',
   42935 the effect on an inline function defined in that class is similar to an
   42936 explicit 'extern' declaration--the compiler emits no code at all to
   42937 define an independent version of the function.  Its definition is used
   42938 only for inlining with its callers.
   42939 
   42940  Conversely, when you include the same header file in a main source file
   42941 that declares it as '#pragma implementation', the compiler emits code
   42942 for the function itself; this defines a version of the function that can
   42943 be found via pointers (or by callers compiled without inlining).  If all
   42944 calls to the function can be inlined, you can avoid emitting the
   42945 function by compiling with '-fno-implement-inlines'.  If any calls are
   42946 not inlined, you will get linker errors.
   42947 
   42948    ---------- Footnotes ----------
   42949 
   42950    (1) A file's "basename" is the name stripped of all leading path
   42951 information and of trailing suffixes, such as '.h' or '.C' or '.cc'.
   42952 
   42953 
   42954 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
   42955 
   42956 7.5 Where's the Template?
   42957 =========================
   42958 
   42959 C++ templates are the first language feature to require more
   42960 intelligence from the environment than one usually finds on a UNIX
   42961 system.  Somehow the compiler and linker have to make sure that each
   42962 template instance occurs exactly once in the executable if it is needed,
   42963 and not at all otherwise.  There are two basic approaches to this
   42964 problem, which are referred to as the Borland model and the Cfront
   42965 model.
   42966 
   42967 Borland model
   42968      Borland C++ solved the template instantiation problem by adding the
   42969      code equivalent of common blocks to their linker; the compiler
   42970      emits template instances in each translation unit that uses them,
   42971      and the linker collapses them together.  The advantage of this
   42972      model is that the linker only has to consider the object files
   42973      themselves; there is no external complexity to worry about.  This
   42974      disadvantage is that compilation time is increased because the
   42975      template code is being compiled repeatedly.  Code written for this
   42976      model tends to include definitions of all templates in the header
   42977      file, since they must be seen to be instantiated.
   42978 
   42979 Cfront model
   42980      The AT&T C++ translator, Cfront, solved the template instantiation
   42981      problem by creating the notion of a template repository, an
   42982      automatically maintained place where template instances are stored.
   42983      A more modern version of the repository works as follows: As
   42984      individual object files are built, the compiler places any template
   42985      definitions and instantiations encountered in the repository.  At
   42986      link time, the link wrapper adds in the objects in the repository
   42987      and compiles any needed instances that were not previously emitted.
   42988      The advantages of this model are more optimal compilation speed and
   42989      the ability to use the system linker; to implement the Borland
   42990      model a compiler vendor also needs to replace the linker.  The
   42991      disadvantages are vastly increased complexity, and thus potential
   42992      for error; for some code this can be just as transparent, but in
   42993      practice it can been very difficult to build multiple programs in
   42994      one directory and one program in multiple directories.  Code
   42995      written for this model tends to separate definitions of non-inline
   42996      member templates into a separate file, which should be compiled
   42997      separately.
   42998 
   42999  When used with GNU ld version 2.8 or later on an ELF system such as
   43000 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
   43001 Borland model.  On other systems, G++ implements neither automatic
   43002 model.
   43003 
   43004  You have the following options for dealing with template
   43005 instantiations:
   43006 
   43007   1. Compile your template-using code with '-frepo'.  The compiler
   43008      generates files with the extension '.rpo' listing all of the
   43009      template instantiations used in the corresponding object files that
   43010      could be instantiated there; the link wrapper, 'collect2', then
   43011      updates the '.rpo' files to tell the compiler where to place those
   43012      instantiations and rebuild any affected object files.  The
   43013      link-time overhead is negligible after the first pass, as the
   43014      compiler continues to place the instantiations in the same files.
   43015 
   43016      This is your best option for application code written for the
   43017      Borland model, as it just works.  Code written for the Cfront model
   43018      needs to be modified so that the template definitions are available
   43019      at one or more points of instantiation; usually this is as simple
   43020      as adding '#include <tmethods.cc>' to the end of each template
   43021      header.
   43022 
   43023      For library code, if you want the library to provide all of the
   43024      template instantiations it needs, just try to link all of its
   43025      object files together; the link will fail, but cause the
   43026      instantiations to be generated as a side effect.  Be warned,
   43027      however, that this may cause conflicts if multiple libraries try to
   43028      provide the same instantiations.  For greater control, use explicit
   43029      instantiation as described in the next option.
   43030 
   43031   2. Compile your code with '-fno-implicit-templates' to disable the
   43032      implicit generation of template instances, and explicitly
   43033      instantiate all the ones you use.  This approach requires more
   43034      knowledge of exactly which instances you need than do the others,
   43035      but it's less mysterious and allows greater control.  You can
   43036      scatter the explicit instantiations throughout your program,
   43037      perhaps putting them in the translation units where the instances
   43038      are used or the translation units that define the templates
   43039      themselves; you can put all of the explicit instantiations you need
   43040      into one big file; or you can create small files like
   43041 
   43042           #include "Foo.h"
   43043           #include "Foo.cc"
   43044 
   43045           template class Foo<int>;
   43046           template ostream& operator <<
   43047                           (ostream&, const Foo<int>&);
   43048 
   43049      for each of the instances you need, and create a template
   43050      instantiation library from those.
   43051 
   43052      If you are using Cfront-model code, you can probably get away with
   43053      not using '-fno-implicit-templates' when compiling files that don't
   43054      '#include' the member template definitions.
   43055 
   43056      If you use one big file to do the instantiations, you may want to
   43057      compile it without '-fno-implicit-templates' so you get all of the
   43058      instances required by your explicit instantiations (but not by any
   43059      other files) without having to specify them as well.
   43060 
   43061      The ISO C++ 2011 standard allows forward declaration of explicit
   43062      instantiations (with 'extern').  G++ supports explicit
   43063      instantiation declarations in C++98 mode and has extended the
   43064      template instantiation syntax to support instantiation of the
   43065      compiler support data for a template class (i.e. the vtable)
   43066      without instantiating any of its members (with 'inline'), and
   43067      instantiation of only the static data members of a template class,
   43068      without the support data or member functions (with ('static'):
   43069 
   43070           extern template int max (int, int);
   43071           inline template class Foo<int>;
   43072           static template class Foo<int>;
   43073 
   43074   3. Do nothing.  Pretend G++ does implement automatic instantiation
   43075      management.  Code written for the Borland model works fine, but
   43076      each translation unit contains instances of each of the templates
   43077      it uses.  In a large program, this can lead to an unacceptable
   43078      amount of code duplication.
   43079 
   43080 
   43081 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
   43082 
   43083 7.6 Extracting the function pointer from a bound pointer to member function
   43084 ===========================================================================
   43085 
   43086 In C++, pointer to member functions (PMFs) are implemented using a wide
   43087 pointer of sorts to handle all the possible call mechanisms; the PMF
   43088 needs to store information about how to adjust the 'this' pointer, and
   43089 if the function pointed to is virtual, where to find the vtable, and
   43090 where in the vtable to look for the member function.  If you are using
   43091 PMFs in an inner loop, you should really reconsider that decision.  If
   43092 that is not an option, you can extract the pointer to the function that
   43093 would be called for a given object/PMF pair and call it directly inside
   43094 the inner loop, to save a bit of time.
   43095 
   43096  Note that you still pay the penalty for the call through a function
   43097 pointer; on most modern architectures, such a call defeats the branch
   43098 prediction features of the CPU.  This is also true of normal virtual
   43099 function calls.
   43100 
   43101  The syntax for this extension is
   43102 
   43103      extern A a;
   43104      extern int (A::*fp)();
   43105      typedef int (*fptr)(A *);
   43106 
   43107      fptr p = (fptr)(a.*fp);
   43108 
   43109  For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
   43110 object is needed to obtain the address of the function.  They can be
   43111 converted to function pointers directly:
   43112 
   43113      fptr p1 = (fptr)(&A::foo);
   43114 
   43115  You must specify '-Wno-pmf-conversions' to use this extension.
   43116 
   43117 
   43118 File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
   43119 
   43120 7.7 C++-Specific Variable, Function, and Type Attributes
   43121 ========================================================
   43122 
   43123 Some attributes only make sense for C++ programs.
   43124 
   43125 'abi_tag ("TAG", ...)'
   43126      The 'abi_tag' attribute can be applied to a function or class
   43127      declaration.  It modifies the mangled name of the function or class
   43128      to incorporate the tag name, in order to distinguish the function
   43129      or class from an earlier version with a different ABI; perhaps the
   43130      class has changed size, or the function has a different return type
   43131      that is not encoded in the mangled name.
   43132 
   43133      The argument can be a list of strings of arbitrary length.  The
   43134      strings are sorted on output, so the order of the list is
   43135      unimportant.
   43136 
   43137      A redeclaration of a function or class must not add new ABI tags,
   43138      since doing so would change the mangled name.
   43139 
   43140      The '-Wabi-tag' flag enables a warning about a class which does not
   43141      have all the ABI tags used by its subobjects and virtual functions;
   43142      for users with code that needs to coexist with an earlier ABI,
   43143      using this option can help to find all affected types that need to
   43144      be tagged.
   43145 
   43146 'init_priority (PRIORITY)'
   43147 
   43148      In Standard C++, objects defined at namespace scope are guaranteed
   43149      to be initialized in an order in strict accordance with that of
   43150      their definitions _in a given translation unit_.  No guarantee is
   43151      made for initializations across translation units.  However, GNU
   43152      C++ allows users to control the order of initialization of objects
   43153      defined at namespace scope with the 'init_priority' attribute by
   43154      specifying a relative PRIORITY, a constant integral expression
   43155      currently bounded between 101 and 65535 inclusive.  Lower numbers
   43156      indicate a higher priority.
   43157 
   43158      In the following example, 'A' would normally be created before 'B',
   43159      but the 'init_priority' attribute reverses that order:
   43160 
   43161           Some_Class  A  __attribute__ ((init_priority (2000)));
   43162           Some_Class  B  __attribute__ ((init_priority (543)));
   43163 
   43164      Note that the particular values of PRIORITY do not matter; only
   43165      their relative ordering.
   43166 
   43167 'java_interface'
   43168 
   43169      This type attribute informs C++ that the class is a Java interface.
   43170      It may only be applied to classes declared within an 'extern
   43171      "Java"' block.  Calls to methods declared in this interface are
   43172      dispatched using GCJ's interface table mechanism, instead of
   43173      regular virtual table dispatch.
   43174 
   43175  See also *note Namespace Association::.
   43176 
   43177 
   43178 File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
   43179 
   43180 7.8 Function Multiversioning
   43181 ============================
   43182 
   43183 With the GNU C++ front end, for target i386, you may specify multiple
   43184 versions of a function, where each function is specialized for a
   43185 specific target feature.  At runtime, the appropriate version of the
   43186 function is automatically executed depending on the characteristics of
   43187 the execution platform.  Here is an example.
   43188 
   43189      __attribute__ ((target ("default")))
   43190      int foo ()
   43191      {
   43192        // The default version of foo.
   43193        return 0;
   43194      }
   43195 
   43196      __attribute__ ((target ("sse4.2")))
   43197      int foo ()
   43198      {
   43199        // foo version for SSE4.2
   43200        return 1;
   43201      }
   43202 
   43203      __attribute__ ((target ("arch=atom")))
   43204      int foo ()
   43205      {
   43206        // foo version for the Intel ATOM processor
   43207        return 2;
   43208      }
   43209 
   43210      __attribute__ ((target ("arch=amdfam10")))
   43211      int foo ()
   43212      {
   43213        // foo version for the AMD Family 0x10 processors.
   43214        return 3;
   43215      }
   43216 
   43217      int main ()
   43218      {
   43219        int (*p)() = &foo;
   43220        assert ((*p) () == foo ());
   43221        return 0;
   43222      }
   43223 
   43224  In the above example, four versions of function foo are created.  The
   43225 first version of foo with the target attribute "default" is the default
   43226 version.  This version gets executed when no other target specific
   43227 version qualifies for execution on a particular platform.  A new version
   43228 of foo is created by using the same function signature but with a
   43229 different target string.  Function foo is called or a pointer to it is
   43230 taken just like a regular function.  GCC takes care of doing the
   43231 dispatching to call the right version at runtime.  Refer to the GCC wiki
   43232 on Function Multiversioning
   43233 (http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
   43234 
   43235 
   43236 File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
   43237 
   43238 7.9 Namespace Association
   43239 =========================
   43240 
   43241 *Caution:* The semantics of this extension are equivalent to C++ 2011
   43242 inline namespaces.  Users should use inline namespaces instead as this
   43243 extension will be removed in future versions of G++.
   43244 
   43245  A using-directive with '__attribute ((strong))' is stronger than a
   43246 normal using-directive in two ways:
   43247 
   43248    * Templates from the used namespace can be specialized and explicitly
   43249      instantiated as though they were members of the using namespace.
   43250 
   43251    * The using namespace is considered an associated namespace of all
   43252      templates in the used namespace for purposes of argument-dependent
   43253      name lookup.
   43254 
   43255  The used namespace must be nested within the using namespace so that
   43256 normal unqualified lookup works properly.
   43257 
   43258  This is useful for composing a namespace transparently from
   43259 implementation namespaces.  For example:
   43260 
   43261      namespace std {
   43262        namespace debug {
   43263          template <class T> struct A { };
   43264        }
   43265        using namespace debug __attribute ((__strong__));
   43266        template <> struct A<int> { };   // ok to specialize
   43267 
   43268        template <class T> void f (A<T>);
   43269      }
   43270 
   43271      int main()
   43272      {
   43273        f (std::A<float>());             // lookup finds std::f
   43274        f (std::A<int>());
   43275      }
   43276 
   43277 
   43278 File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
   43279 
   43280 7.10 Type Traits
   43281 ================
   43282 
   43283 The C++ front end implements syntactic extensions that allow
   43284 compile-time determination of various characteristics of a type (or of a
   43285 pair of types).
   43286 
   43287 '__has_nothrow_assign (type)'
   43288      If 'type' is const qualified or is a reference type then the trait
   43289      is false.  Otherwise if '__has_trivial_assign (type)' is true then
   43290      the trait is true, else if 'type' is a cv class or union type with
   43291      copy assignment operators that are known not to throw an exception
   43292      then the trait is true, else it is false.  Requires: 'type' shall
   43293      be a complete type, (possibly cv-qualified) 'void', or an array of
   43294      unknown bound.
   43295 
   43296 '__has_nothrow_copy (type)'
   43297      If '__has_trivial_copy (type)' is true then the trait is true, else
   43298      if 'type' is a cv class or union type with copy constructors that
   43299      are known not to throw an exception then the trait is true, else it
   43300      is false.  Requires: 'type' shall be a complete type, (possibly
   43301      cv-qualified) 'void', or an array of unknown bound.
   43302 
   43303 '__has_nothrow_constructor (type)'
   43304      If '__has_trivial_constructor (type)' is true then the trait is
   43305      true, else if 'type' is a cv class or union type (or array thereof)
   43306      with a default constructor that is known not to throw an exception
   43307      then the trait is true, else it is false.  Requires: 'type' shall
   43308      be a complete type, (possibly cv-qualified) 'void', or an array of
   43309      unknown bound.
   43310 
   43311 '__has_trivial_assign (type)'
   43312      If 'type' is const qualified or is a reference type then the trait
   43313      is false.  Otherwise if '__is_pod (type)' is true then the trait is
   43314      true, else if 'type' is a cv class or union type with a trivial
   43315      copy assignment ([class.copy]) then the trait is true, else it is
   43316      false.  Requires: 'type' shall be a complete type, (possibly
   43317      cv-qualified) 'void', or an array of unknown bound.
   43318 
   43319 '__has_trivial_copy (type)'
   43320      If '__is_pod (type)' is true or 'type' is a reference type then the
   43321      trait is true, else if 'type' is a cv class or union type with a
   43322      trivial copy constructor ([class.copy]) then the trait is true,
   43323      else it is false.  Requires: 'type' shall be a complete type,
   43324      (possibly cv-qualified) 'void', or an array of unknown bound.
   43325 
   43326 '__has_trivial_constructor (type)'
   43327      If '__is_pod (type)' is true then the trait is true, else if 'type'
   43328      is a cv class or union type (or array thereof) with a trivial
   43329      default constructor ([class.ctor]) then the trait is true, else it
   43330      is false.  Requires: 'type' shall be a complete type, (possibly
   43331      cv-qualified) 'void', or an array of unknown bound.
   43332 
   43333 '__has_trivial_destructor (type)'
   43334      If '__is_pod (type)' is true or 'type' is a reference type then the
   43335      trait is true, else if 'type' is a cv class or union type (or array
   43336      thereof) with a trivial destructor ([class.dtor]) then the trait is
   43337      true, else it is false.  Requires: 'type' shall be a complete type,
   43338      (possibly cv-qualified) 'void', or an array of unknown bound.
   43339 
   43340 '__has_virtual_destructor (type)'
   43341      If 'type' is a class type with a virtual destructor ([class.dtor])
   43342      then the trait is true, else it is false.  Requires: 'type' shall
   43343      be a complete type, (possibly cv-qualified) 'void', or an array of
   43344      unknown bound.
   43345 
   43346 '__is_abstract (type)'
   43347      If 'type' is an abstract class ([class.abstract]) then the trait is
   43348      true, else it is false.  Requires: 'type' shall be a complete type,
   43349      (possibly cv-qualified) 'void', or an array of unknown bound.
   43350 
   43351 '__is_base_of (base_type, derived_type)'
   43352      If 'base_type' is a base class of 'derived_type' ([class.derived])
   43353      then the trait is true, otherwise it is false.  Top-level cv
   43354      qualifications of 'base_type' and 'derived_type' are ignored.  For
   43355      the purposes of this trait, a class type is considered is own base.
   43356      Requires: if '__is_class (base_type)' and '__is_class
   43357      (derived_type)' are true and 'base_type' and 'derived_type' are not
   43358      the same type (disregarding cv-qualifiers), 'derived_type' shall be
   43359      a complete type.  Diagnostic is produced if this requirement is not
   43360      met.
   43361 
   43362 '__is_class (type)'
   43363      If 'type' is a cv class type, and not a union type
   43364      ([basic.compound]) the trait is true, else it is false.
   43365 
   43366 '__is_empty (type)'
   43367      If '__is_class (type)' is false then the trait is false.  Otherwise
   43368      'type' is considered empty if and only if: 'type' has no non-static
   43369      data members, or all non-static data members, if any, are
   43370      bit-fields of length 0, and 'type' has no virtual members, and
   43371      'type' has no virtual base classes, and 'type' has no base classes
   43372      'base_type' for which '__is_empty (base_type)' is false.  Requires:
   43373      'type' shall be a complete type, (possibly cv-qualified) 'void', or
   43374      an array of unknown bound.
   43375 
   43376 '__is_enum (type)'
   43377      If 'type' is a cv enumeration type ([basic.compound]) the trait is
   43378      true, else it is false.
   43379 
   43380 '__is_literal_type (type)'
   43381      If 'type' is a literal type ([basic.types]) the trait is true, else
   43382      it is false.  Requires: 'type' shall be a complete type, (possibly
   43383      cv-qualified) 'void', or an array of unknown bound.
   43384 
   43385 '__is_pod (type)'
   43386      If 'type' is a cv POD type ([basic.types]) then the trait is true,
   43387      else it is false.  Requires: 'type' shall be a complete type,
   43388      (possibly cv-qualified) 'void', or an array of unknown bound.
   43389 
   43390 '__is_polymorphic (type)'
   43391      If 'type' is a polymorphic class ([class.virtual]) then the trait
   43392      is true, else it is false.  Requires: 'type' shall be a complete
   43393      type, (possibly cv-qualified) 'void', or an array of unknown bound.
   43394 
   43395 '__is_standard_layout (type)'
   43396      If 'type' is a standard-layout type ([basic.types]) the trait is
   43397      true, else it is false.  Requires: 'type' shall be a complete type,
   43398      (possibly cv-qualified) 'void', or an array of unknown bound.
   43399 
   43400 '__is_trivial (type)'
   43401      If 'type' is a trivial type ([basic.types]) the trait is true, else
   43402      it is false.  Requires: 'type' shall be a complete type, (possibly
   43403      cv-qualified) 'void', or an array of unknown bound.
   43404 
   43405 '__is_union (type)'
   43406      If 'type' is a cv union type ([basic.compound]) the trait is true,
   43407      else it is false.
   43408 
   43409 '__underlying_type (type)'
   43410      The underlying type of 'type'.  Requires: 'type' shall be an
   43411      enumeration type ([dcl.enum]).
   43412 
   43413 
   43414 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
   43415 
   43416 7.11 Java Exceptions
   43417 ====================
   43418 
   43419 The Java language uses a slightly different exception handling model
   43420 from C++.  Normally, GNU C++ automatically detects when you are writing
   43421 C++ code that uses Java exceptions, and handle them appropriately.
   43422 However, if C++ code only needs to execute destructors when Java
   43423 exceptions are thrown through it, GCC guesses incorrectly.  Sample
   43424 problematic code is:
   43425 
   43426        struct S { ~S(); };
   43427        extern void bar();    // is written in Java, and may throw exceptions
   43428        void foo()
   43429        {
   43430          S s;
   43431          bar();
   43432        }
   43433 
   43434 The usual effect of an incorrect guess is a link failure, complaining of
   43435 a missing routine called '__gxx_personality_v0'.
   43436 
   43437  You can inform the compiler that Java exceptions are to be used in a
   43438 translation unit, irrespective of what it might think, by writing
   43439 '#pragma GCC java_exceptions' at the head of the file.  This '#pragma'
   43440 must appear before any functions that throw or catch exceptions, or run
   43441 destructors when exceptions are thrown through them.
   43442 
   43443  You cannot mix Java and C++ exceptions in the same translation unit.
   43444 It is believed to be safe to throw a C++ exception from one file through
   43445 another file compiled for the Java exception model, or vice versa, but
   43446 there may be bugs in this area.
   43447 
   43448 
   43449 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
   43450 
   43451 7.12 Deprecated Features
   43452 ========================
   43453 
   43454 In the past, the GNU C++ compiler was extended to experiment with new
   43455 features, at a time when the C++ language was still evolving.  Now that
   43456 the C++ standard is complete, some of those features are superseded by
   43457 superior alternatives.  Using the old features might cause a warning in
   43458 some cases that the feature will be dropped in the future.  In other
   43459 cases, the feature might be gone already.
   43460 
   43461  While the list below is not exhaustive, it documents some of the
   43462 options that are now deprecated:
   43463 
   43464 '-fexternal-templates'
   43465 '-falt-external-templates'
   43466      These are two of the many ways for G++ to implement template
   43467      instantiation.  *Note Template Instantiation::.  The C++ standard
   43468      clearly defines how template definitions have to be organized
   43469      across implementation units.  G++ has an implicit instantiation
   43470      mechanism that should work just fine for standard-conforming code.
   43471 
   43472 '-fstrict-prototype'
   43473 '-fno-strict-prototype'
   43474      Previously it was possible to use an empty prototype parameter list
   43475      to indicate an unspecified number of parameters (like C), rather
   43476      than no parameters, as C++ demands.  This feature has been removed,
   43477      except where it is required for backwards compatibility.  *Note
   43478      Backwards Compatibility::.
   43479 
   43480  G++ allows a virtual function returning 'void *' to be overridden by
   43481 one returning a different pointer type.  This extension to the covariant
   43482 return type rules is now deprecated and will be removed from a future
   43483 version.
   43484 
   43485  The G++ minimum and maximum operators ('<?' and '>?') and their
   43486 compound forms ('<?=') and '>?=') have been deprecated and are now
   43487 removed from G++.  Code using these operators should be modified to use
   43488 'std::min' and 'std::max' instead.
   43489 
   43490  The named return value extension has been deprecated, and is now
   43491 removed from G++.
   43492 
   43493  The use of initializer lists with new expressions has been deprecated,
   43494 and is now removed from G++.
   43495 
   43496  Floating and complex non-type template parameters have been deprecated,
   43497 and are now removed from G++.
   43498 
   43499  The implicit typename extension has been deprecated and is now removed
   43500 from G++.
   43501 
   43502  The use of default arguments in function pointers, function typedefs
   43503 and other places where they are not permitted by the standard is
   43504 deprecated and will be removed from a future version of G++.
   43505 
   43506  G++ allows floating-point literals to appear in integral constant
   43507 expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
   43508 deprecated and will be removed from a future version.
   43509 
   43510  G++ allows static data members of const floating-point type to be
   43511 declared with an initializer in a class definition.  The standard only
   43512 allows initializers for static members of const integral types and const
   43513 enumeration types so this extension has been deprecated and will be
   43514 removed from a future version.
   43515 
   43516 
   43517 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
   43518 
   43519 7.13 Backwards Compatibility
   43520 ============================
   43521 
   43522 Now that there is a definitive ISO standard C++, G++ has a specification
   43523 to adhere to.  The C++ language evolved over time, and features that
   43524 used to be acceptable in previous drafts of the standard, such as the
   43525 ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
   43526 to allow compilation of C++ written to such drafts, G++ contains some
   43527 backwards compatibilities.  _All such backwards compatibility features
   43528 are liable to disappear in future versions of G++._  They should be
   43529 considered deprecated.  *Note Deprecated Features::.
   43530 
   43531 'For scope'
   43532      If a variable is declared at for scope, it used to remain in scope
   43533      until the end of the scope that contained the for statement (rather
   43534      than just within the for scope).  G++ retains this, but issues a
   43535      warning, if such a variable is accessed outside the for scope.
   43536 
   43537 'Implicit C language'
   43538      Old C system header files did not contain an 'extern "C" {...}'
   43539      scope to set the language.  On such systems, all header files are
   43540      implicitly scoped inside a C language scope.  Also, an empty
   43541      prototype '()' is treated as an unspecified number of arguments,
   43542      rather than no arguments, as C++ demands.
   43543 
   43544 
   43545 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
   43546 
   43547 8 GNU Objective-C features
   43548 **************************
   43549 
   43550 This document is meant to describe some of the GNU Objective-C features.
   43551 It is not intended to teach you Objective-C. There are several resources
   43552 on the Internet that present the language.
   43553 
   43554 * Menu:
   43555 
   43556 * GNU Objective-C runtime API::
   43557 * Executing code before main::
   43558 * Type encoding::
   43559 * Garbage Collection::
   43560 * Constant string objects::
   43561 * compatibility_alias::
   43562 * Exceptions::
   43563 * Synchronization::
   43564 * Fast enumeration::
   43565 * Messaging with the GNU Objective-C runtime::
   43566 
   43567 
   43568 File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
   43569 
   43570 8.1 GNU Objective-C runtime API
   43571 ===============================
   43572 
   43573 This section is specific for the GNU Objective-C runtime.  If you are
   43574 using a different runtime, you can skip it.
   43575 
   43576  The GNU Objective-C runtime provides an API that allows you to interact
   43577 with the Objective-C runtime system, querying the live runtime
   43578 structures and even manipulating them.  This allows you for example to
   43579 inspect and navigate classes, methods and protocols; to define new
   43580 classes or new methods, and even to modify existing classes or
   43581 protocols.
   43582 
   43583  If you are using a "Foundation" library such as GNUstep-Base, this
   43584 library will provide you with a rich set of functionality to do most of
   43585 the inspection tasks, and you probably will only need direct access to
   43586 the GNU Objective-C runtime API to define new classes or methods.
   43587 
   43588 * Menu:
   43589 
   43590 * Modern GNU Objective-C runtime API::
   43591 * Traditional GNU Objective-C runtime API::
   43592 
   43593 
   43594 File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
   43595 
   43596 8.1.1 Modern GNU Objective-C runtime API
   43597 ----------------------------------------
   43598 
   43599 The GNU Objective-C runtime provides an API which is similar to the one
   43600 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
   43601 API is documented in the public header files of the GNU Objective-C
   43602 runtime:
   43603 
   43604    * 'objc/objc.h': this is the basic Objective-C header file, defining
   43605      the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
   43606      have to include this header to do almost anything with Objective-C.
   43607 
   43608    * 'objc/runtime.h': this header declares most of the public runtime
   43609      API functions allowing you to inspect and manipulate the
   43610      Objective-C runtime data structures.  These functions are fairly
   43611      standardized across Objective-C runtimes and are almost identical
   43612      to the Apple/NeXT Objective-C runtime ones.  It does not declare
   43613      functions in some specialized areas (constructing and forwarding
   43614      message invocations, threading) which are in the other headers
   43615      below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
   43616      use any of the functions, such as 'class_getName()', declared in
   43617      'objc/runtime.h'.
   43618 
   43619    * 'objc/message.h': this header declares public functions used to
   43620      construct, deconstruct and forward message invocations.  Because
   43621      messaging is done in quite a different way on different runtimes,
   43622      functions in this header are specific to the GNU Objective-C
   43623      runtime implementation.
   43624 
   43625    * 'objc/objc-exception.h': this header declares some public functions
   43626      related to Objective-C exceptions.  For example functions in this
   43627      header allow you to throw an Objective-C exception from plain C/C++
   43628      code.
   43629 
   43630    * 'objc/objc-sync.h': this header declares some public functions
   43631      related to the Objective-C '@synchronized()' syntax, allowing you
   43632      to emulate an Objective-C '@synchronized()' block in plain C/C++
   43633      code.
   43634 
   43635    * 'objc/thr.h': this header declares a public runtime API threading
   43636      layer that is only provided by the GNU Objective-C runtime.  It
   43637      declares functions such as 'objc_mutex_lock()', which provide a
   43638      platform-independent set of threading functions.
   43639 
   43640  The header files contain detailed documentation for each function in
   43641 the GNU Objective-C runtime API.
   43642 
   43643 
   43644 File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
   43645 
   43646 8.1.2 Traditional GNU Objective-C runtime API
   43647 ---------------------------------------------
   43648 
   43649 The GNU Objective-C runtime used to provide a different API, which we
   43650 call the "traditional" GNU Objective-C runtime API. Functions belonging
   43651 to this API are easy to recognize because they use a different naming
   43652 convention, such as 'class_get_super_class()' (traditional API) instead
   43653 of 'class_getSuperclass()' (modern API). Software using this API
   43654 includes the file 'objc/objc-api.h' where it is declared.
   43655 
   43656  Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
   43657 available.
   43658 
   43659 
   43660 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
   43661 
   43662 8.2 '+load': Executing code before main
   43663 =======================================
   43664 
   43665 This section is specific for the GNU Objective-C runtime.  If you are
   43666 using a different runtime, you can skip it.
   43667 
   43668  The GNU Objective-C runtime provides a way that allows you to execute
   43669 code before the execution of the program enters the 'main' function.
   43670 The code is executed on a per-class and a per-category basis, through a
   43671 special class method '+load'.
   43672 
   43673  This facility is very useful if you want to initialize global variables
   43674 which can be accessed by the program directly, without sending a message
   43675 to the class first.  The usual way to initialize global variables, in
   43676 the '+initialize' method, might not be useful because '+initialize' is
   43677 only called when the first message is sent to a class object, which in
   43678 some cases could be too late.
   43679 
   43680  Suppose for example you have a 'FileStream' class that declares
   43681 'Stdin', 'Stdout' and 'Stderr' as global variables, like below:
   43682 
   43683 
   43684      FileStream *Stdin = nil;
   43685      FileStream *Stdout = nil;
   43686      FileStream *Stderr = nil;
   43687 
   43688      @implementation FileStream
   43689 
   43690      + (void)initialize
   43691      {
   43692          Stdin = [[FileStream new] initWithFd:0];
   43693          Stdout = [[FileStream new] initWithFd:1];
   43694          Stderr = [[FileStream new] initWithFd:2];
   43695      }
   43696 
   43697      /* Other methods here */
   43698      @end
   43699 
   43700 
   43701  In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
   43702 in '+initialize' occurs too late.  The programmer can send a message to
   43703 one of these objects before the variables are actually initialized, thus
   43704 sending messages to the 'nil' object.  The '+initialize' method which
   43705 actually initializes the global variables is not invoked until the first
   43706 message is sent to the class object.  The solution would require these
   43707 variables to be initialized just before entering 'main'.
   43708 
   43709  The correct solution of the above problem is to use the '+load' method
   43710 instead of '+initialize':
   43711 
   43712 
   43713      @implementation FileStream
   43714 
   43715      + (void)load
   43716      {
   43717          Stdin = [[FileStream new] initWithFd:0];
   43718          Stdout = [[FileStream new] initWithFd:1];
   43719          Stderr = [[FileStream new] initWithFd:2];
   43720      }
   43721 
   43722      /* Other methods here */
   43723      @end
   43724 
   43725 
   43726  The '+load' is a method that is not overridden by categories.  If a
   43727 class and a category of it both implement '+load', both methods are
   43728 invoked.  This allows some additional initializations to be performed in
   43729 a category.
   43730 
   43731  This mechanism is not intended to be a replacement for '+initialize'.
   43732 You should be aware of its limitations when you decide to use it instead
   43733 of '+initialize'.
   43734 
   43735 * Menu:
   43736 
   43737 * What you can and what you cannot do in +load::
   43738 
   43739 
   43740 File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
   43741 
   43742 8.2.1 What you can and what you cannot do in '+load'
   43743 ----------------------------------------------------
   43744 
   43745 '+load' is to be used only as a last resort.  Because it is executed
   43746 very early, most of the Objective-C runtime machinery will not be ready
   43747 when '+load' is executed; hence '+load' works best for executing C code
   43748 that is independent on the Objective-C runtime.
   43749 
   43750  The '+load' implementation in the GNU runtime guarantees you the
   43751 following things:
   43752 
   43753    * you can write whatever C code you like;
   43754 
   43755    * you can allocate and send messages to objects whose class is
   43756      implemented in the same file;
   43757 
   43758    * the '+load' implementation of all super classes of a class are
   43759      executed before the '+load' of that class is executed;
   43760 
   43761    * the '+load' implementation of a class is executed before the
   43762      '+load' implementation of any category.
   43763 
   43764  In particular, the following things, even if they can work in a
   43765 particular case, are not guaranteed:
   43766 
   43767    * allocation of or sending messages to arbitrary objects;
   43768 
   43769    * allocation of or sending messages to objects whose classes have a
   43770      category implemented in the same file;
   43771 
   43772    * sending messages to Objective-C constant strings ('@"this is a
   43773      constant string"');
   43774 
   43775  You should make no assumptions about receiving '+load' in sibling
   43776 classes when you write '+load' of a class.  The order in which sibling
   43777 classes receive '+load' is not guaranteed.
   43778 
   43779  The order in which '+load' and '+initialize' are called could be
   43780 problematic if this matters.  If you don't allocate objects inside
   43781 '+load', it is guaranteed that '+load' is called before '+initialize'.
   43782 If you create an object inside '+load' the '+initialize' method of
   43783 object's class is invoked even if '+load' was not invoked.  Note if you
   43784 explicitly call '+load' on a class, '+initialize' will be called first.
   43785 To avoid possible problems try to implement only one of these methods.
   43786 
   43787  The '+load' method is also invoked when a bundle is dynamically loaded
   43788 into your running program.  This happens automatically without any
   43789 intervening operation from you.  When you write bundles and you need to
   43790 write '+load' you can safely create and send messages to objects whose
   43791 classes already exist in the running program.  The same restrictions as
   43792 above apply to classes defined in bundle.
   43793 
   43794 
   43795 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
   43796 
   43797 8.3 Type encoding
   43798 =================
   43799 
   43800 This is an advanced section.  Type encodings are used extensively by the
   43801 compiler and by the runtime, but you generally do not need to know about
   43802 them to use Objective-C.
   43803 
   43804  The Objective-C compiler generates type encodings for all the types.
   43805 These type encodings are used at runtime to find out information about
   43806 selectors and methods and about objects and classes.
   43807 
   43808  The types are encoded in the following way:
   43809 
   43810 '_Bool'            'B'
   43811 'char'             'c'
   43812 'unsigned char'    'C'
   43813 'short'            's'
   43814 'unsigned short'   'S'
   43815 'int'              'i'
   43816 'unsigned int'     'I'
   43817 'long'             'l'
   43818 'unsigned long'    'L'
   43819 'long long'        'q'
   43820 'unsigned long     'Q'
   43821 long'
   43822 'float'            'f'
   43823 'double'           'd'
   43824 'long double'      'D'
   43825 'void'             'v'
   43826 'id'               '@'
   43827 'Class'            '#'
   43828 'SEL'              ':'
   43829 'char*'            '*'
   43830 'enum'             an 'enum' is encoded exactly as the integer type
   43831                    that the compiler uses for it, which depends on the
   43832                    enumeration values.  Often the compiler users
   43833                    'unsigned int', which is then encoded as 'I'.
   43834 unknown type       '?'
   43835 Complex types      'j' followed by the inner type.  For example
   43836                    '_Complex double' is encoded as "jd".
   43837 bit-fields         'b' followed by the starting position of the
   43838                    bit-field, the type of the bit-field and the size of
   43839                    the bit-field (the bit-fields encoding was changed
   43840                    from the NeXT's compiler encoding, see below)
   43841 
   43842  The encoding of bit-fields has changed to allow bit-fields to be
   43843 properly handled by the runtime functions that compute sizes and
   43844 alignments of types that contain bit-fields.  The previous encoding
   43845 contained only the size of the bit-field.  Using only this information
   43846 it is not possible to reliably compute the size occupied by the
   43847 bit-field.  This is very important in the presence of the Boehm's
   43848 garbage collector because the objects are allocated using the typed
   43849 memory facility available in this collector.  The typed memory
   43850 allocation requires information about where the pointers are located
   43851 inside the object.
   43852 
   43853  The position in the bit-field is the position, counting in bits, of the
   43854 bit closest to the beginning of the structure.
   43855 
   43856  The non-atomic types are encoded as follows:
   43857 
   43858 pointers       '^' followed by the pointed type.
   43859 arrays         '[' followed by the number of elements in the array
   43860                followed by the type of the elements followed by ']'
   43861 structures     '{' followed by the name of the structure (or '?' if the
   43862                structure is unnamed), the '=' sign, the type of the
   43863                members and by '}'
   43864 unions         '(' followed by the name of the structure (or '?' if the
   43865                union is unnamed), the '=' sign, the type of the members
   43866                followed by ')'
   43867 vectors        '![' followed by the vector_size (the number of bytes
   43868                composing the vector) followed by a comma, followed by
   43869                the alignment (in bytes) of the vector, followed by the
   43870                type of the elements followed by ']'
   43871 
   43872  Here are some types and their encodings, as they are generated by the
   43873 compiler on an i386 machine:
   43874 
   43875 
   43876 Objective-C type   Compiler encoding
   43877      int a[10];    '[10i]'
   43878      struct {      '{?=i[3f]b128i3b131i2c}'
   43879        int i;
   43880        float f[3];
   43881        int a:3;
   43882        int b:2;
   43883        char c;
   43884      }
   43885      int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine)
   43886 
   43887 
   43888  In addition to the types the compiler also encodes the type specifiers.
   43889 The table below describes the encoding of the current Objective-C type
   43890 specifiers:
   43891 
   43892 
   43893 Specifier          Encoding
   43894 'const'            'r'
   43895 'in'               'n'
   43896 'inout'            'N'
   43897 'out'              'o'
   43898 'bycopy'           'O'
   43899 'byref'            'R'
   43900 'oneway'           'V'
   43901 
   43902 
   43903  The type specifiers are encoded just before the type.  Unlike types
   43904 however, the type specifiers are only encoded when they appear in method
   43905 argument types.
   43906 
   43907  Note how 'const' interacts with pointers:
   43908 
   43909 
   43910 Objective-C type   Compiler encoding
   43911      const int     'ri'
   43912      const int*    '^ri'
   43913      int *const    'r^i'
   43914 
   43915 
   43916  'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
   43917 'int* const', instead, is a 'const' pointer to an 'int', and so is
   43918 encoded as 'r^i'.
   43919 
   43920  Finally, there is a complication when encoding 'const char *' versus
   43921 'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
   43922 there is no way to express the fact that 'r' applies to the pointer or
   43923 to the pointee.
   43924 
   43925  Hence, it is assumed as a convention that 'r*' means 'const char *'
   43926 (since it is what is most often meant), and there is no way to encode
   43927 'char *const'.  'char *const' would simply be encoded as '*', and the
   43928 'const' is lost.
   43929 
   43930 * Menu:
   43931 
   43932 * Legacy type encoding::
   43933 * @encode::
   43934 * Method signatures::
   43935 
   43936 
   43937 File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
   43938 
   43939 8.3.1 Legacy type encoding
   43940 --------------------------
   43941 
   43942 Unfortunately, historically GCC used to have a number of bugs in its
   43943 encoding code.  The NeXT runtime expects GCC to emit type encodings in
   43944 this historical format (compatible with GCC-3.3), so when using the NeXT
   43945 runtime, GCC will introduce on purpose a number of incorrect encodings:
   43946 
   43947    * the read-only qualifier of the pointee gets emitted before the '^'.
   43948      The read-only qualifier of the pointer itself gets ignored, unless
   43949      it is a typedef.  Also, the 'r' is only emitted for the outermost
   43950      type.
   43951 
   43952    * 32-bit longs are encoded as 'l' or 'L', but not always.  For
   43953      typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
   43954      field or a pointer.
   43955 
   43956    * 'enum's are always encoded as 'i' (int) even if they are actually
   43957      unsigned or long.
   43958 
   43959  In addition to that, the NeXT runtime uses a different encoding for
   43960 bitfields.  It encodes them as 'b' followed by the size, without a bit
   43961 offset or the underlying field type.
   43962 
   43963 
   43964 File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
   43965 
   43966 8.3.2 @encode
   43967 -------------
   43968 
   43969 GNU Objective-C supports the '@encode' syntax that allows you to create
   43970 a type encoding from a C/Objective-C type.  For example, '@encode(int)'
   43971 is compiled by the compiler into '"i"'.
   43972 
   43973  '@encode' does not support type qualifiers other than 'const'.  For
   43974 example, '@encode(const char*)' is valid and is compiled into '"r*"',
   43975 while '@encode(bycopy char *)' is invalid and will cause a compilation
   43976 error.
   43977 
   43978 
   43979 File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
   43980 
   43981 8.3.3 Method signatures
   43982 -----------------------
   43983 
   43984 This section documents the encoding of method types, which is rarely
   43985 needed to use Objective-C. You should skip it at a first reading; the
   43986 runtime provides functions that will work on methods and can walk
   43987 through the list of parameters and interpret them for you.  These
   43988 functions are part of the public "API" and are the preferred way to
   43989 interact with method signatures from user code.
   43990 
   43991  But if you need to debug a problem with method signatures and need to
   43992 know how they are implemented (i.e., the "ABI"), read on.
   43993 
   43994  Methods have their "signature" encoded and made available to the
   43995 runtime.  The "signature" encodes all the information required to
   43996 dynamically build invocations of the method at runtime: return type and
   43997 arguments.
   43998 
   43999  The "signature" is a null-terminated string, composed of the following:
   44000 
   44001    * The return type, including type qualifiers.  For example, a method
   44002      returning 'int' would have 'i' here.
   44003 
   44004    * The total size (in bytes) required to pass all the parameters.
   44005      This includes the two hidden parameters (the object 'self' and the
   44006      method selector '_cmd').
   44007 
   44008    * Each argument, with the type encoding, followed by the offset (in
   44009      bytes) of the argument in the list of parameters.
   44010 
   44011  For example, a method with no arguments and returning 'int' would have
   44012 the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
   44013 interpreted as follows: the 'i' is the return type (an 'int'), the '8'
   44014 is the total size of the parameters in bytes (two pointers each of size
   44015 4), the '@0' is the first parameter (an object at byte offset '0') and
   44016 ':4' is the second parameter (a 'SEL' at byte offset '4').
   44017 
   44018  You can easily find more examples by running the "strings" program on
   44019 an Objective-C object file compiled by GCC. You'll see a lot of strings
   44020 that look very much like 'i8@0:4'.  They are signatures of Objective-C
   44021 methods.
   44022 
   44023 
   44024 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
   44025 
   44026 8.4 Garbage Collection
   44027 ======================
   44028 
   44029 This section is specific for the GNU Objective-C runtime.  If you are
   44030 using a different runtime, you can skip it.
   44031 
   44032  Support for garbage collection with the GNU runtime has been added by
   44033 using a powerful conservative garbage collector, known as the
   44034 Boehm-Demers-Weiser conservative garbage collector.
   44035 
   44036  To enable the support for it you have to configure the compiler using
   44037 an additional argument, '--enable-objc-gc'.  This will build the
   44038 boehm-gc library, and build an additional runtime library which has
   44039 several enhancements to support the garbage collector.  The new library
   44040 has a new name, 'libobjc_gc.a' to not conflict with the
   44041 non-garbage-collected library.
   44042 
   44043  When the garbage collector is used, the objects are allocated using the
   44044 so-called typed memory allocation mechanism available in the
   44045 Boehm-Demers-Weiser collector.  This mode requires precise information
   44046 on where pointers are located inside objects.  This information is
   44047 computed once per class, immediately after the class has been
   44048 initialized.
   44049 
   44050  There is a new runtime function 'class_ivar_set_gcinvisible()' which
   44051 can be used to declare a so-called "weak pointer" reference.  Such a
   44052 pointer is basically hidden for the garbage collector; this can be
   44053 useful in certain situations, especially when you want to keep track of
   44054 the allocated objects, yet allow them to be collected.  This kind of
   44055 pointers can only be members of objects, you cannot declare a global
   44056 pointer as a weak reference.  Every type which is a pointer type can be
   44057 declared a weak pointer, including 'id', 'Class' and 'SEL'.
   44058 
   44059  Here is an example of how to use this feature.  Suppose you want to
   44060 implement a class whose instances hold a weak pointer reference; the
   44061 following class does this:
   44062 
   44063 
   44064      @interface WeakPointer : Object
   44065      {
   44066          const void* weakPointer;
   44067      }
   44068 
   44069      - initWithPointer:(const void*)p;
   44070      - (const void*)weakPointer;
   44071      @end
   44072 
   44073 
   44074      @implementation WeakPointer
   44075 
   44076      + (void)initialize
   44077      {
   44078        if (self == objc_lookUpClass ("WeakPointer"))
   44079          class_ivar_set_gcinvisible (self, "weakPointer", YES);
   44080      }
   44081 
   44082      - initWithPointer:(const void*)p
   44083      {
   44084        weakPointer = p;
   44085        return self;
   44086      }
   44087 
   44088      - (const void*)weakPointer
   44089      {
   44090        return weakPointer;
   44091      }
   44092 
   44093      @end
   44094 
   44095 
   44096  Weak pointers are supported through a new type character specifier
   44097 represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
   44098 function adds or removes this specifier to the string type description
   44099 of the instance variable named as argument.
   44100 
   44101 
   44102 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
   44103 
   44104 8.5 Constant string objects
   44105 ===========================
   44106 
   44107 GNU Objective-C provides constant string objects that are generated
   44108 directly by the compiler.  You declare a constant string object by
   44109 prefixing a C constant string with the character '@':
   44110 
   44111        id myString = @"this is a constant string object";
   44112 
   44113  The constant string objects are by default instances of the
   44114 'NXConstantString' class which is provided by the GNU Objective-C
   44115 runtime.  To get the definition of this class you must include the
   44116 'objc/NXConstStr.h' header file.
   44117 
   44118  User defined libraries may want to implement their own constant string
   44119 class.  To be able to support them, the GNU Objective-C compiler
   44120 provides a new command line options
   44121 '-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
   44122 to a strict structure, the same as 'NXConstantString''s structure:
   44123 
   44124 
   44125      @interface MyConstantStringClass
   44126      {
   44127        Class isa;
   44128        char *c_string;
   44129        unsigned int len;
   44130      }
   44131      @end
   44132 
   44133 
   44134  'NXConstantString' inherits from 'Object'; user class libraries may
   44135 choose to inherit the customized constant string class from a different
   44136 class than 'Object'.  There is no requirement in the methods the
   44137 constant string class has to implement, but the final ivar layout of the
   44138 class must be the compatible with the given structure.
   44139 
   44140  When the compiler creates the statically allocated constant string
   44141 object, the 'c_string' field will be filled by the compiler with the
   44142 string; the 'length' field will be filled by the compiler with the
   44143 string length; the 'isa' pointer will be filled with 'NULL' by the
   44144 compiler, and it will later be fixed up automatically at runtime by the
   44145 GNU Objective-C runtime library to point to the class which was set by
   44146 the '-fconstant-string-class' option when the object file is loaded (if
   44147 you wonder how it works behind the scenes, the name of the class to use,
   44148 and the list of static objects to fixup, are stored by the compiler in
   44149 the object file in a place where the GNU runtime library will find them
   44150 at runtime).
   44151 
   44152  As a result, when a file is compiled with the '-fconstant-string-class'
   44153 option, all the constant string objects will be instances of the class
   44154 specified as argument to this option.  It is possible to have multiple
   44155 compilation units referring to different constant string classes,
   44156 neither the compiler nor the linker impose any restrictions in doing
   44157 this.
   44158 
   44159 
   44160 File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
   44161 
   44162 8.6 compatibility_alias
   44163 =======================
   44164 
   44165 The keyword '@compatibility_alias' allows you to define a class name as
   44166 equivalent to another class name.  For example:
   44167 
   44168      @compatibility_alias WOApplication GSWApplication;
   44169 
   44170  tells the compiler that each time it encounters 'WOApplication' as a
   44171 class name, it should replace it with 'GSWApplication' (that is,
   44172 'WOApplication' is just an alias for 'GSWApplication').
   44173 
   44174  There are some constraints on how this can be used--
   44175 
   44176    * 'WOApplication' (the alias) must not be an existing class;
   44177 
   44178    * 'GSWApplication' (the real class) must be an existing class.
   44179 
   44180 
   44181 File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
   44182 
   44183 8.7 Exceptions
   44184 ==============
   44185 
   44186 GNU Objective-C provides exception support built into the language, as
   44187 in the following example:
   44188 
   44189        @try {
   44190          ...
   44191             @throw expr;
   44192          ...
   44193        }
   44194        @catch (AnObjCClass *exc) {
   44195          ...
   44196            @throw expr;
   44197          ...
   44198            @throw;
   44199          ...
   44200        }
   44201        @catch (AnotherClass *exc) {
   44202          ...
   44203        }
   44204        @catch (id allOthers) {
   44205          ...
   44206        }
   44207        @finally {
   44208          ...
   44209            @throw expr;
   44210          ...
   44211        }
   44212 
   44213  The '@throw' statement may appear anywhere in an Objective-C or
   44214 Objective-C++ program; when used inside of a '@catch' block, the
   44215 '@throw' may appear without an argument (as shown above), in which case
   44216 the object caught by the '@catch' will be rethrown.
   44217 
   44218  Note that only (pointers to) Objective-C objects may be thrown and
   44219 caught using this scheme.  When an object is thrown, it will be caught
   44220 by the nearest '@catch' clause capable of handling objects of that type,
   44221 analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
   44222 ...)' clause (as shown above) may also be provided to catch any and all
   44223 Objective-C exceptions not caught by previous '@catch' clauses (if any).
   44224 
   44225  The '@finally' clause, if present, will be executed upon exit from the
   44226 immediately preceding '@try ... @catch' section.  This will happen
   44227 regardless of whether any exceptions are thrown, caught or rethrown
   44228 inside the '@try ... @catch' section, analogously to the behavior of the
   44229 'finally' clause in Java.
   44230 
   44231  There are several caveats to using the new exception mechanism:
   44232 
   44233    * The '-fobjc-exceptions' command line option must be used when
   44234      compiling Objective-C files that use exceptions.
   44235 
   44236    * With the GNU runtime, exceptions are always implemented as "native"
   44237      exceptions and it is recommended that the '-fexceptions' and
   44238      '-shared-libgcc' options are used when linking.
   44239 
   44240    * With the NeXT runtime, although currently designed to be binary
   44241      compatible with 'NS_HANDLER'-style idioms provided by the
   44242      'NSException' class, the new exceptions can only be used on Mac OS
   44243      X 10.3 (Panther) and later systems, due to additional functionality
   44244      needed in the NeXT Objective-C runtime.
   44245 
   44246    * As mentioned above, the new exceptions do not support handling
   44247      types other than Objective-C objects.  Furthermore, when used from
   44248      Objective-C++, the Objective-C exception model does not
   44249      interoperate with C++ exceptions at this time.  This means you
   44250      cannot '@throw' an exception from Objective-C and 'catch' it in
   44251      C++, or vice versa (i.e., 'throw ... @catch').
   44252 
   44253 
   44254 File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
   44255 
   44256 8.8 Synchronization
   44257 ===================
   44258 
   44259 GNU Objective-C provides support for synchronized blocks:
   44260 
   44261        @synchronized (ObjCClass *guard) {
   44262          ...
   44263        }
   44264 
   44265  Upon entering the '@synchronized' block, a thread of execution shall
   44266 first check whether a lock has been placed on the corresponding 'guard'
   44267 object by another thread.  If it has, the current thread shall wait
   44268 until the other thread relinquishes its lock.  Once 'guard' becomes
   44269 available, the current thread will place its own lock on it, execute the
   44270 code contained in the '@synchronized' block, and finally relinquish the
   44271 lock (thereby making 'guard' available to other threads).
   44272 
   44273  Unlike Java, Objective-C does not allow for entire methods to be marked
   44274 '@synchronized'.  Note that throwing exceptions out of '@synchronized'
   44275 blocks is allowed, and will cause the guarding object to be unlocked
   44276 properly.
   44277 
   44278  Because of the interactions between synchronization and exception
   44279 handling, you can only use '@synchronized' when compiling with
   44280 exceptions enabled, that is with the command line option
   44281 '-fobjc-exceptions'.
   44282 
   44283 
   44284 File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
   44285 
   44286 8.9 Fast enumeration
   44287 ====================
   44288 
   44289 * Menu:
   44290 
   44291 * Using fast enumeration::
   44292 * c99-like fast enumeration syntax::
   44293 * Fast enumeration details::
   44294 * Fast enumeration protocol::
   44295 
   44296 
   44297 File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
   44298 
   44299 8.9.1 Using fast enumeration
   44300 ----------------------------
   44301 
   44302 GNU Objective-C provides support for the fast enumeration syntax:
   44303 
   44304        id array = ...;
   44305        id object;
   44306 
   44307        for (object in array)
   44308        {
   44309          /* Do something with 'object' */
   44310        }
   44311 
   44312  'array' needs to be an Objective-C object (usually a collection object,
   44313 for example an array, a dictionary or a set) which implements the "Fast
   44314 Enumeration Protocol" (see below).  If you are using a Foundation
   44315 library such as GNUstep Base or Apple Cocoa Foundation, all collection
   44316 objects in the library implement this protocol and can be used in this
   44317 way.
   44318 
   44319  The code above would iterate over all objects in 'array'.  For each of
   44320 them, it assigns it to 'object', then executes the 'Do something with
   44321 'object'' statements.
   44322 
   44323  Here is a fully worked-out example using a Foundation library (which
   44324 provides the implementation of 'NSArray', 'NSString' and 'NSLog'):
   44325 
   44326        NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
   44327        NSString *object;
   44328 
   44329        for (object in array)
   44330          NSLog (@"Iterating over %@", object);
   44331 
   44332 
   44333 File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
   44334 
   44335 8.9.2 c99-like fast enumeration syntax
   44336 --------------------------------------
   44337 
   44338 A c99-like declaration syntax is also allowed:
   44339 
   44340        id array = ...;
   44341 
   44342        for (id object in array)
   44343        {
   44344          /* Do something with 'object'  */
   44345        }
   44346 
   44347  this is completely equivalent to:
   44348 
   44349        id array = ...;
   44350 
   44351        {
   44352          id object;
   44353          for (object in array)
   44354          {
   44355            /* Do something with 'object'  */
   44356          }
   44357        }
   44358 
   44359  but can save some typing.
   44360 
   44361  Note that the option '-std=c99' is not required to allow this syntax in
   44362 Objective-C.
   44363 
   44364 
   44365 File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
   44366 
   44367 8.9.3 Fast enumeration details
   44368 ------------------------------
   44369 
   44370 Here is a more technical description with the gory details.  Consider
   44371 the code
   44372 
   44373        for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
   44374        {
   44375          STATEMENTS
   44376        }
   44377 
   44378  here is what happens when you run it:
   44379 
   44380    * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
   44381      used as the collection object to iterate over.  This means it is
   44382      safe to write code such as 'for (object in [NSDictionary
   44383      keyEnumerator]) ...'.
   44384 
   44385    * the iteration is implemented by the compiler by repeatedly getting
   44386      batches of objects from the collection object using the fast
   44387      enumeration protocol (see below), then iterating over all objects
   44388      in the batch.  This is faster than a normal enumeration where
   44389      objects are retrieved one by one (hence the name "fast
   44390      enumeration").
   44391 
   44392    * if there are no objects in the collection, then 'OBJECT EXPRESSION'
   44393      is set to 'nil' and the loop immediately terminates.
   44394 
   44395    * if there are objects in the collection, then for each object in the
   44396      collection (in the order they are returned) 'OBJECT EXPRESSION' is
   44397      set to the object, then 'STATEMENTS' are executed.
   44398 
   44399    * 'STATEMENTS' can contain 'break' and 'continue' commands, which
   44400      will abort the iteration or skip to the next loop iteration as
   44401      expected.
   44402 
   44403    * when the iteration ends because there are no more objects to
   44404      iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
   44405      to determine whether the iteration finished because a 'break'
   44406      command was used (in which case 'OBJECT EXPRESSION' will remain set
   44407      to the last object that was iterated over) or because it iterated
   44408      over all the objects (in which case 'OBJECT EXPRESSION' will be set
   44409      to 'nil').
   44410 
   44411    * 'STATEMENTS' must not make any changes to the collection object; if
   44412      they do, it is a hard error and the fast enumeration terminates by
   44413      invoking 'objc_enumerationMutation', a runtime function that
   44414      normally aborts the program but which can be customized by
   44415      Foundation libraries via 'objc_set_mutation_handler' to do
   44416      something different, such as raising an exception.
   44417 
   44418 
   44419 File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
   44420 
   44421 8.9.4 Fast enumeration protocol
   44422 -------------------------------
   44423 
   44424 If you want your own collection object to be usable with fast
   44425 enumeration, you need to have it implement the method
   44426 
   44427      - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
   44428                                            objects: (id *)objects
   44429                                              count: (unsigned long)len;
   44430 
   44431  where 'NSFastEnumerationState' must be defined in your code as follows:
   44432 
   44433      typedef struct
   44434      {
   44435        unsigned long state;
   44436        id            *itemsPtr;
   44437        unsigned long *mutationsPtr;
   44438        unsigned long extra[5];
   44439      } NSFastEnumerationState;
   44440 
   44441  If no 'NSFastEnumerationState' is defined in your code, the compiler
   44442 will automatically replace 'NSFastEnumerationState *' with 'struct
   44443 __objcFastEnumerationState *', where that type is silently defined by
   44444 the compiler in an identical way.  This can be confusing and we
   44445 recommend that you define 'NSFastEnumerationState' (as shown above)
   44446 instead.
   44447 
   44448  The method is called repeatedly during a fast enumeration to retrieve
   44449 batches of objects.  Each invocation of the method should retrieve the
   44450 next batch of objects.
   44451 
   44452  The return value of the method is the number of objects in the current
   44453 batch; this should not exceed 'len', which is the maximum size of a
   44454 batch as requested by the caller.  The batch itself is returned in the
   44455 'itemsPtr' field of the 'NSFastEnumerationState' struct.
   44456 
   44457  To help with returning the objects, the 'objects' array is a C array
   44458 preallocated by the caller (on the stack) of size 'len'.  In many cases
   44459 you can put the objects you want to return in that 'objects' array, then
   44460 do 'itemsPtr = objects'.  But you don't have to; if your collection
   44461 already has the objects to return in some form of C array, it could
   44462 return them from there instead.
   44463 
   44464  The 'state' and 'extra' fields of the 'NSFastEnumerationState'
   44465 structure allows your collection object to keep track of the state of
   44466 the enumeration.  In a simple array implementation, 'state' may keep
   44467 track of the index of the last object that was returned, and 'extra' may
   44468 be unused.
   44469 
   44470  The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
   44471 keep track of mutations.  It should point to a number; before working on
   44472 each object, the fast enumeration loop will check that this number has
   44473 not changed.  If it has, a mutation has happened and the fast
   44474 enumeration will abort.  So, 'mutationsPtr' could be set to point to
   44475 some sort of version number of your collection, which is increased by
   44476 one every time there is a change (for example when an object is added or
   44477 removed).  Or, if you are content with less strict mutation checks, it
   44478 could point to the number of objects in your collection or some other
   44479 value that can be checked to perform an approximate check that the
   44480 collection has not been mutated.
   44481 
   44482  Finally, note how we declared the 'len' argument and the return value
   44483 to be of type 'unsigned long'.  They could also be declared to be of
   44484 type 'unsigned int' and everything would still work.
   44485 
   44486 
   44487 File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
   44488 
   44489 8.10 Messaging with the GNU Objective-C runtime
   44490 ===============================================
   44491 
   44492 This section is specific for the GNU Objective-C runtime.  If you are
   44493 using a different runtime, you can skip it.
   44494 
   44495  The implementation of messaging in the GNU Objective-C runtime is
   44496 designed to be portable, and so is based on standard C.
   44497 
   44498  Sending a message in the GNU Objective-C runtime is composed of two
   44499 separate steps.  First, there is a call to the lookup function,
   44500 'objc_msg_lookup ()' (or, in the case of messages to super,
   44501 'objc_msg_lookup_super ()').  This runtime function takes as argument
   44502 the receiver and the selector of the method to be called; it returns the
   44503 'IMP', that is a pointer to the function implementing the method.  The
   44504 second step of method invocation consists of casting this pointer
   44505 function to the appropriate function pointer type, and calling the
   44506 function pointed to it with the right arguments.
   44507 
   44508  For example, when the compiler encounters a method invocation such as
   44509 '[object init]', it compiles it into a call to 'objc_msg_lookup (object,
   44510 @selector(init))' followed by a cast of the returned value to the
   44511 appropriate function pointer type, and then it calls it.
   44512 
   44513 * Menu:
   44514 
   44515 * Dynamically registering methods::
   44516 * Forwarding hook::
   44517 
   44518 
   44519 File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
   44520 
   44521 8.10.1 Dynamically registering methods
   44522 --------------------------------------
   44523 
   44524 If 'objc_msg_lookup()' does not find a suitable method implementation,
   44525 because the receiver does not implement the required method, it tries to
   44526 see if the class can dynamically register the method.
   44527 
   44528  To do so, the runtime checks if the class of the receiver implements
   44529 the method
   44530 
   44531      + (BOOL) resolveInstanceMethod: (SEL)selector;
   44532 
   44533  in the case of an instance method, or
   44534 
   44535      + (BOOL) resolveClassMethod: (SEL)selector;
   44536 
   44537  in the case of a class method.  If the class implements it, the runtime
   44538 invokes it, passing as argument the selector of the original method, and
   44539 if it returns 'YES', the runtime tries the lookup again, which could now
   44540 succeed if a matching method was added dynamically by
   44541 '+resolveInstanceMethod:' or '+resolveClassMethod:'.
   44542 
   44543  This allows classes to dynamically register methods (by adding them to
   44544 the class using 'class_addMethod') when they are first called.  To do
   44545 so, a class should implement '+resolveInstanceMethod:' (or, depending on
   44546 the case, '+resolveClassMethod:') and have it recognize the selectors of
   44547 methods that can be registered dynamically at runtime, register them,
   44548 and return 'YES'.  It should return 'NO' for methods that it does not
   44549 dynamically registered at runtime.
   44550 
   44551  If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
   44552 implemented or returns 'NO', the runtime then tries the forwarding hook.
   44553 
   44554  Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
   44555 added to the GNU Objective-C runtime in GCC version 4.6.
   44556 
   44557 
   44558 File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
   44559 
   44560 8.10.2 Forwarding hook
   44561 ----------------------
   44562 
   44563 The GNU Objective-C runtime provides a hook, called
   44564 '__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
   44565 can't find a method implementation in the runtime tables and after
   44566 calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
   44567 attempted and did not succeed in dynamically registering the method.
   44568 
   44569  To configure the hook, you set the global variable
   44570 '__objc_msg_forward2' to a function with the same argument and return
   44571 types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' can not find a
   44572 method implementation, it invokes the hook function you provided to get
   44573 a method implementation to return.  So, in practice
   44574 '__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
   44575 some custom code that is called to do a further lookup when no standard
   44576 method implementation can be found using the normal lookup.
   44577 
   44578  This hook is generally reserved for "Foundation" libraries such as
   44579 GNUstep Base, which use it to implement their high-level method
   44580 forwarding API, typically based around the 'forwardInvocation:' method.
   44581 So, unless you are implementing your own "Foundation" library, you
   44582 should not set this hook.
   44583 
   44584  In a typical forwarding implementation, the '__objc_msg_forward2' hook
   44585 function determines the argument and return type of the method that is
   44586 being looked up, and then creates a function that takes these arguments
   44587 and has that return type, and returns it to the caller.  Creating this
   44588 function is non-trivial and is typically performed using a dedicated
   44589 library such as 'libffi'.
   44590 
   44591  The forwarding method implementation thus created is returned by
   44592 'objc_msg_lookup()' and is executed as if it was a normal method
   44593 implementation.  When the forwarding method implementation is called, it
   44594 is usually expected to pack all arguments into some sort of object
   44595 (typically, an 'NSInvocation' in a "Foundation" library), and hand it
   44596 over to the programmer ('forwardInvocation:') who is then allowed to
   44597 manipulate the method invocation using a high-level API provided by the
   44598 "Foundation" library.  For example, the programmer may want to examine
   44599 the method invocation arguments and name and potentially change them
   44600 before forwarding the method invocation to one or more local objects
   44601 ('performInvocation:') or even to remote objects (by using Distributed
   44602 Objects or some other mechanism).  When all this completes, the return
   44603 value is passed back and must be returned correctly to the original
   44604 caller.
   44605 
   44606  Note that the GNU Objective-C runtime currently provides no support for
   44607 method forwarding or method invocations other than the
   44608 '__objc_msg_forward2' hook.
   44609 
   44610  If the forwarding hook does not exist or returns 'NULL', the runtime
   44611 currently attempts forwarding using an older, deprecated API, and if
   44612 that fails, it aborts the program.  In future versions of the GNU
   44613 Objective-C runtime, the runtime will immediately abort.
   44614 
   44615 
   44616 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
   44617 
   44618 9 Binary Compatibility
   44619 **********************
   44620 
   44621 Binary compatibility encompasses several related concepts:
   44622 
   44623 "application binary interface (ABI)"
   44624      The set of runtime conventions followed by all of the tools that
   44625      deal with binary representations of a program, including compilers,
   44626      assemblers, linkers, and language runtime support.  Some ABIs are
   44627      formal with a written specification, possibly designed by multiple
   44628      interested parties.  Others are simply the way things are actually
   44629      done by a particular set of tools.
   44630 
   44631 "ABI conformance"
   44632      A compiler conforms to an ABI if it generates code that follows all
   44633      of the specifications enumerated by that ABI.  A library conforms
   44634      to an ABI if it is implemented according to that ABI.  An
   44635      application conforms to an ABI if it is built using tools that
   44636      conform to that ABI and does not contain source code that
   44637      specifically changes behavior specified by the ABI.
   44638 
   44639 "calling conventions"
   44640      Calling conventions are a subset of an ABI that specify of how
   44641      arguments are passed and function results are returned.
   44642 
   44643 "interoperability"
   44644      Different sets of tools are interoperable if they generate files
   44645      that can be used in the same program.  The set of tools includes
   44646      compilers, assemblers, linkers, libraries, header files, startup
   44647      files, and debuggers.  Binaries produced by different sets of tools
   44648      are not interoperable unless they implement the same ABI.  This
   44649      applies to different versions of the same tools as well as tools
   44650      from different vendors.
   44651 
   44652 "intercallability"
   44653      Whether a function in a binary built by one set of tools can call a
   44654      function in a binary built by a different set of tools is a subset
   44655      of interoperability.
   44656 
   44657 "implementation-defined features"
   44658      Language standards include lists of implementation-defined features
   44659      whose behavior can vary from one implementation to another.  Some
   44660      of these features are normally covered by a platform's ABI and
   44661      others are not.  The features that are not covered by an ABI
   44662      generally affect how a program behaves, but not intercallability.
   44663 
   44664 "compatibility"
   44665      Conformance to the same ABI and the same behavior of
   44666      implementation-defined features are both relevant for
   44667      compatibility.
   44668 
   44669  The application binary interface implemented by a C or C++ compiler
   44670 affects code generation and runtime support for:
   44671 
   44672    * size and alignment of data types
   44673    * layout of structured types
   44674    * calling conventions
   44675    * register usage conventions
   44676    * interfaces for runtime arithmetic support
   44677    * object file formats
   44678 
   44679  In addition, the application binary interface implemented by a C++
   44680 compiler affects code generation and runtime support for:
   44681    * name mangling
   44682    * exception handling
   44683    * invoking constructors and destructors
   44684    * layout, alignment, and padding of classes
   44685    * layout and alignment of virtual tables
   44686 
   44687  Some GCC compilation options cause the compiler to generate code that
   44688 does not conform to the platform's default ABI.  Other options cause
   44689 different program behavior for implementation-defined features that are
   44690 not covered by an ABI.  These options are provided for consistency with
   44691 other compilers that do not follow the platform's default ABI or the
   44692 usual behavior of implementation-defined features for the platform.  Be
   44693 very careful about using such options.
   44694 
   44695  Most platforms have a well-defined ABI that covers C code, but ABIs
   44696 that cover C++ functionality are not yet common.
   44697 
   44698  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
   44699 written, vendor-neutral C++ ABI that was designed to be specific to
   44700 64-bit Itanium but also includes generic specifications that apply to
   44701 any platform.  This C++ ABI is also implemented by other compiler
   44702 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
   44703 tried hard to provide a stable ABI that will be compatible with future
   44704 GCC releases, but it is possible that we will encounter problems that
   44705 make this difficult.  Such problems could include different
   44706 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
   44707 bugs in the implementation of the ABI in different compilers.  GCC's
   44708 '-Wabi' switch warns when G++ generates code that is probably not
   44709 compatible with the C++ ABI.
   44710 
   44711  The C++ library used with a C++ compiler includes the Standard C++
   44712 Library, with functionality defined in the C++ Standard, plus language
   44713 runtime support.  The runtime support is included in a C++ ABI, but
   44714 there is no formal ABI for the Standard C++ Library.  Two
   44715 implementations of that library are interoperable if one follows the
   44716 de-facto ABI of the other and if they are both built with the same
   44717 compiler, or with compilers that conform to the same ABI for C++
   44718 compiler and runtime support.
   44719 
   44720  When G++ and another C++ compiler conform to the same C++ ABI, but the
   44721 implementations of the Standard C++ Library that they normally use do
   44722 not follow the same ABI for the Standard C++ Library, object files built
   44723 with those compilers can be used in the same program only if they use
   44724 the same C++ library.  This requires specifying the location of the C++
   44725 library header files when invoking the compiler whose usual library is
   44726 not being used.  The location of GCC's C++ header files depends on how
   44727 the GCC build was configured, but can be seen by using the G++ '-v'
   44728 option.  With default configuration options for G++ 3.3 the compile line
   44729 for a different C++ compiler needs to include
   44730 
   44731          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
   44732 
   44733  Similarly, compiling code with G++ that must use a C++ library other
   44734 than the GNU C++ library requires specifying the location of the header
   44735 files for that other library.
   44736 
   44737  The most straightforward way to link a program to use a particular C++
   44738 library is to use a C++ driver that specifies that C++ library by
   44739 default.  The 'g++' driver, for example, tells the linker where to find
   44740 GCC's C++ library ('libstdc++') plus the other libraries and startup
   44741 files it needs, in the proper order.
   44742 
   44743  If a program must use a different C++ library and it's not possible to
   44744 do the final link using a C++ driver that uses that library by default,
   44745 it is necessary to tell 'g++' the location and name of that library.  It
   44746 might also be necessary to specify different startup files and other
   44747 runtime support libraries, and to suppress the use of GCC's support
   44748 libraries with one or more of the options '-nostdlib', '-nostartfiles',
   44749 and '-nodefaultlibs'.
   44750 
   44751 
   44752 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
   44753 
   44754 10 'gcov'--a Test Coverage Program
   44755 **********************************
   44756 
   44757 'gcov' is a tool you can use in conjunction with GCC to test code
   44758 coverage in your programs.
   44759 
   44760 * Menu:
   44761 
   44762 * Gcov Intro::                  Introduction to gcov.
   44763 * Invoking Gcov::               How to use gcov.
   44764 * Gcov and Optimization::       Using gcov with GCC optimization.
   44765 * Gcov Data Files::             The files used by gcov.
   44766 * Cross-profiling::             Data file relocation.
   44767 
   44768 
   44769 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
   44770 
   44771 10.1 Introduction to 'gcov'
   44772 ===========================
   44773 
   44774 'gcov' is a test coverage program.  Use it in concert with GCC to
   44775 analyze your programs to help create more efficient, faster running code
   44776 and to discover untested parts of your program.  You can use 'gcov' as a
   44777 profiling tool to help discover where your optimization efforts will
   44778 best affect your code.  You can also use 'gcov' along with the other
   44779 profiling tool, 'gprof', to assess which parts of your code use the
   44780 greatest amount of computing time.
   44781 
   44782  Profiling tools help you analyze your code's performance.  Using a
   44783 profiler such as 'gcov' or 'gprof', you can find out some basic
   44784 performance statistics, such as:
   44785 
   44786    * how often each line of code executes
   44787 
   44788    * what lines of code are actually executed
   44789 
   44790    * how much computing time each section of code uses
   44791 
   44792  Once you know these things about how your code works when compiled, you
   44793 can look at each module to see which modules should be optimized.
   44794 'gcov' helps you determine where to work on optimization.
   44795 
   44796  Software developers also use coverage testing in concert with
   44797 testsuites, to make sure software is actually good enough for a release.
   44798 Testsuites can verify that a program works as expected; a coverage
   44799 program tests to see how much of the program is exercised by the
   44800 testsuite.  Developers can then determine what kinds of test cases need
   44801 to be added to the testsuites to create both better testing and a better
   44802 final product.
   44803 
   44804  You should compile your code without optimization if you plan to use
   44805 'gcov' because the optimization, by combining some lines of code into
   44806 one function, may not give you as much information as you need to look
   44807 for 'hot spots' where the code is using a great deal of computer time.
   44808 Likewise, because 'gcov' accumulates statistics by line (at the lowest
   44809 resolution), it works best with a programming style that places only one
   44810 statement on each line.  If you use complicated macros that expand to
   44811 loops or to other control structures, the statistics are less
   44812 helpful--they only report on the line where the macro call appears.  If
   44813 your complex macros behave like functions, you can replace them with
   44814 inline functions to solve this problem.
   44815 
   44816  'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
   44817 many times each line of a source file 'SOURCEFILE.c' has executed.  You
   44818 can use these logfiles along with 'gprof' to aid in fine-tuning the
   44819 performance of your programs.  'gprof' gives timing information you can
   44820 use along with the information you get from 'gcov'.
   44821 
   44822  'gcov' works only on code compiled with GCC.  It is not compatible with
   44823 any other profiling or test coverage mechanism.
   44824 
   44825 
   44826 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
   44827 
   44828 10.2 Invoking 'gcov'
   44829 ====================
   44830 
   44831      gcov [OPTIONS] FILES
   44832 
   44833  'gcov' accepts the following options:
   44834 
   44835 '-h'
   44836 '--help'
   44837      Display help about using 'gcov' (on the standard output), and exit
   44838      without doing any further processing.
   44839 
   44840 '-v'
   44841 '--version'
   44842      Display the 'gcov' version number (on the standard output), and
   44843      exit without doing any further processing.
   44844 
   44845 '-a'
   44846 '--all-blocks'
   44847      Write individual execution counts for every basic block.  Normally
   44848      gcov outputs execution counts only for the main blocks of a line.
   44849      With this option you can determine if blocks within a single line
   44850      are not being executed.
   44851 
   44852 '-b'
   44853 '--branch-probabilities'
   44854      Write branch frequencies to the output file, and write branch
   44855      summary info to the standard output.  This option allows you to see
   44856      how often each branch in your program was taken.  Unconditional
   44857      branches will not be shown, unless the '-u' option is given.
   44858 
   44859 '-c'
   44860 '--branch-counts'
   44861      Write branch frequencies as the number of branches taken, rather
   44862      than the percentage of branches taken.
   44863 
   44864 '-n'
   44865 '--no-output'
   44866      Do not create the 'gcov' output file.
   44867 
   44868 '-l'
   44869 '--long-file-names'
   44870      Create long file names for included source files.  For example, if
   44871      the header file 'x.h' contains code, and was included in the file
   44872      'a.c', then running 'gcov' on the file 'a.c' will produce an output
   44873      file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
   44874      useful if 'x.h' is included in multiple source files and you want
   44875      to see the individual contributions.  If you use the '-p' option,
   44876      both the including and included file names will be complete path
   44877      names.
   44878 
   44879 '-p'
   44880 '--preserve-paths'
   44881      Preserve complete path information in the names of generated
   44882      '.gcov' files.  Without this option, just the filename component is
   44883      used.  With this option, all directories are used, with '/'
   44884      characters translated to '#' characters, '.' directory components
   44885      removed and unremoveable '..' components renamed to '^'.  This is
   44886      useful if sourcefiles are in several different directories.
   44887 
   44888 '-r'
   44889 '--relative-only'
   44890      Only output information about source files with a relative pathname
   44891      (after source prefix elision).  Absolute paths are usually system
   44892      header files and coverage of any inline functions therein is
   44893      normally uninteresting.
   44894 
   44895 '-f'
   44896 '--function-summaries'
   44897      Output summaries for each function in addition to the file level
   44898      summary.
   44899 
   44900 '-o DIRECTORY|FILE'
   44901 '--object-directory DIRECTORY'
   44902 '--object-file FILE'
   44903      Specify either the directory containing the gcov data files, or the
   44904      object path name.  The '.gcno', and '.gcda' data files are searched
   44905      for using this option.  If a directory is specified, the data files
   44906      are in that directory and named after the input file name, without
   44907      its extension.  If a file is specified here, the data files are
   44908      named after that file, without its extension.
   44909 
   44910 '-s DIRECTORY'
   44911 '--source-prefix DIRECTORY'
   44912      A prefix for source file names to remove when generating the output
   44913      coverage files.  This option is useful when building in a separate
   44914      directory, and the pathname to the source directory is not wanted
   44915      when determining the output file names.  Note that this prefix
   44916      detection is applied before determining whether the source file is
   44917      absolute.
   44918 
   44919 '-u'
   44920 '--unconditional-branches'
   44921      When branch probabilities are given, include those of unconditional
   44922      branches.  Unconditional branches are normally not interesting.
   44923 
   44924 '-d'
   44925 '--display-progress'
   44926      Display the progress on the standard output.
   44927 
   44928  'gcov' should be run with the current directory the same as that when
   44929 you invoked the compiler.  Otherwise it will not be able to locate the
   44930 source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
   44931 current directory.  These contain the coverage information of the source
   44932 file they correspond to.  One '.gcov' file is produced for each source
   44933 (or header) file containing code, which was compiled to produce the data
   44934 files.  The MANGLEDNAME part of the output file name is usually simply
   44935 the source file name, but can be something more complicated if the '-l'
   44936 or '-p' options are given.  Refer to those options for details.
   44937 
   44938  If you invoke 'gcov' with multiple input files, the contributions from
   44939 each input file are summed.  Typically you would invoke it with the same
   44940 list of files as the final link of your executable.
   44941 
   44942  The '.gcov' files contain the ':' separated fields along with program
   44943 source code.  The format is
   44944 
   44945      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
   44946 
   44947  Additional block information may succeed each line, when requested by
   44948 command line option.  The EXECUTION_COUNT is '-' for lines containing no
   44949 code.  Unexecuted lines are marked '#####' or '====', depending on
   44950 whether they are reachable by non-exceptional paths or only exceptional
   44951 paths such as C++ exception handlers, respectively.
   44952 
   44953  Some lines of information at the start have LINE_NUMBER of zero.  These
   44954 preamble lines are of the form
   44955 
   44956      -:0:TAG:VALUE
   44957 
   44958  The ordering and number of these preamble lines will be augmented as
   44959 'gcov' development progresses -- do not rely on them remaining
   44960 unchanged.  Use TAG to locate a particular preamble line.
   44961 
   44962  The additional block information is of the form
   44963 
   44964      TAG INFORMATION
   44965 
   44966  The INFORMATION is human readable, but designed to be simple enough for
   44967 machine parsing too.
   44968 
   44969  When printing percentages, 0% and 100% are only printed when the values
   44970 are _exactly_ 0% and 100% respectively.  Other values which would
   44971 conventionally be rounded to 0% or 100% are instead printed as the
   44972 nearest non-boundary value.
   44973 
   44974  When using 'gcov', you must first compile your program with two special
   44975 GCC options: '-fprofile-arcs -ftest-coverage'.  This tells the compiler
   44976 to generate additional information needed by gcov (basically a flow
   44977 graph of the program) and also includes additional code in the object
   44978 files for generating the extra profiling information needed by gcov.
   44979 These additional files are placed in the directory where the object file
   44980 is located.
   44981 
   44982  Running the program will cause profile output to be generated.  For
   44983 each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
   44984 file will be placed in the object file directory.
   44985 
   44986  Running 'gcov' with your program's source file names as arguments will
   44987 now produce a listing of the code along with frequency of execution for
   44988 each line.  For example, if your program is called 'tmp.c', this is what
   44989 you see when you use the basic 'gcov' facility:
   44990 
   44991      $ gcc -fprofile-arcs -ftest-coverage tmp.c
   44992      $ a.out
   44993      $ gcov tmp.c
   44994      90.00% of 10 source lines executed in file tmp.c
   44995      Creating tmp.c.gcov.
   44996 
   44997  The file 'tmp.c.gcov' contains output from 'gcov'.  Here is a sample:
   44998 
   44999              -:    0:Source:tmp.c
   45000              -:    0:Graph:tmp.gcno
   45001              -:    0:Data:tmp.gcda
   45002              -:    0:Runs:1
   45003              -:    0:Programs:1
   45004              -:    1:#include <stdio.h>
   45005              -:    2:
   45006              -:    3:int main (void)
   45007              1:    4:{
   45008              1:    5:  int i, total;
   45009              -:    6:
   45010              1:    7:  total = 0;
   45011              -:    8:
   45012             11:    9:  for (i = 0; i < 10; i++)
   45013             10:   10:    total += i;
   45014              -:   11:
   45015              1:   12:  if (total != 45)
   45016          #####:   13:    printf ("Failure\n");
   45017              -:   14:  else
   45018              1:   15:    printf ("Success\n");
   45019              1:   16:  return 0;
   45020              -:   17:}
   45021 
   45022  When you use the '-a' option, you will get individual block counts, and
   45023 the output looks like this:
   45024 
   45025              -:    0:Source:tmp.c
   45026              -:    0:Graph:tmp.gcno
   45027              -:    0:Data:tmp.gcda
   45028              -:    0:Runs:1
   45029              -:    0:Programs:1
   45030              -:    1:#include <stdio.h>
   45031              -:    2:
   45032              -:    3:int main (void)
   45033              1:    4:{
   45034              1:    4-block  0
   45035              1:    5:  int i, total;
   45036              -:    6:
   45037              1:    7:  total = 0;
   45038              -:    8:
   45039             11:    9:  for (i = 0; i < 10; i++)
   45040             11:    9-block  0
   45041             10:   10:    total += i;
   45042             10:   10-block  0
   45043              -:   11:
   45044              1:   12:  if (total != 45)
   45045              1:   12-block  0
   45046          #####:   13:    printf ("Failure\n");
   45047          $$$$$:   13-block  0
   45048              -:   14:  else
   45049              1:   15:    printf ("Success\n");
   45050              1:   15-block  0
   45051              1:   16:  return 0;
   45052              1:   16-block  0
   45053              -:   17:}
   45054 
   45055  In this mode, each basic block is only shown on one line - the last
   45056 line of the block.  A multi-line block will only contribute to the
   45057 execution count of that last line, and other lines will not be shown to
   45058 contain code, unless previous blocks end on those lines.  The total
   45059 execution count of a line is shown and subsequent lines show the
   45060 execution counts for individual blocks that end on that line.  After
   45061 each block, the branch and call counts of the block will be shown, if
   45062 the '-b' option is given.
   45063 
   45064  Because of the way GCC instruments calls, a call count can be shown
   45065 after a line with no individual blocks.  As you can see, line 13
   45066 contains a basic block that was not executed.
   45067 
   45068  When you use the '-b' option, your output looks like this:
   45069 
   45070      $ gcov -b tmp.c
   45071      90.00% of 10 source lines executed in file tmp.c
   45072      80.00% of 5 branches executed in file tmp.c
   45073      80.00% of 5 branches taken at least once in file tmp.c
   45074      50.00% of 2 calls executed in file tmp.c
   45075      Creating tmp.c.gcov.
   45076 
   45077  Here is a sample of a resulting 'tmp.c.gcov' file:
   45078 
   45079              -:    0:Source:tmp.c
   45080              -:    0:Graph:tmp.gcno
   45081              -:    0:Data:tmp.gcda
   45082              -:    0:Runs:1
   45083              -:    0:Programs:1
   45084              -:    1:#include <stdio.h>
   45085              -:    2:
   45086              -:    3:int main (void)
   45087      function main called 1 returned 1 blocks executed 75%
   45088              1:    4:{
   45089              1:    5:  int i, total;
   45090              -:    6:
   45091              1:    7:  total = 0;
   45092              -:    8:
   45093             11:    9:  for (i = 0; i < 10; i++)
   45094      branch  0 taken 91% (fallthrough)
   45095      branch  1 taken 9%
   45096             10:   10:    total += i;
   45097              -:   11:
   45098              1:   12:  if (total != 45)
   45099      branch  0 taken 0% (fallthrough)
   45100      branch  1 taken 100%
   45101          #####:   13:    printf ("Failure\n");
   45102      call    0 never executed
   45103              -:   14:  else
   45104              1:   15:    printf ("Success\n");
   45105      call    0 called 1 returned 100%
   45106              1:   16:  return 0;
   45107              -:   17:}
   45108 
   45109  For each function, a line is printed showing how many times the
   45110 function is called, how many times it returns and what percentage of the
   45111 function's blocks were executed.
   45112 
   45113  For each basic block, a line is printed after the last line of the
   45114 basic block describing the branch or call that ends the basic block.
   45115 There can be multiple branches and calls listed for a single source line
   45116 if there are multiple basic blocks that end on that line.  In this case,
   45117 the branches and calls are each given a number.  There is no simple way
   45118 to map these branches and calls back to source constructs.  In general,
   45119 though, the lowest numbered branch or call will correspond to the
   45120 leftmost construct on the source line.
   45121 
   45122  For a branch, if it was executed at least once, then a percentage
   45123 indicating the number of times the branch was taken divided by the
   45124 number of times the branch was executed will be printed.  Otherwise, the
   45125 message "never executed" is printed.
   45126 
   45127  For a call, if it was executed at least once, then a percentage
   45128 indicating the number of times the call returned divided by the number
   45129 of times the call was executed will be printed.  This will usually be
   45130 100%, but may be less for functions that call 'exit' or 'longjmp', and
   45131 thus may not return every time they are called.
   45132 
   45133  The execution counts are cumulative.  If the example program were
   45134 executed again without removing the '.gcda' file, the count for the
   45135 number of times each line in the source was executed would be added to
   45136 the results of the previous run(s).  This is potentially useful in
   45137 several ways.  For example, it could be used to accumulate data over a
   45138 number of program runs as part of a test verification suite, or to
   45139 provide more accurate long-term information over a large number of
   45140 program runs.
   45141 
   45142  The data in the '.gcda' files is saved immediately before the program
   45143 exits.  For each source file compiled with '-fprofile-arcs', the
   45144 profiling code first attempts to read in an existing '.gcda' file; if
   45145 the file doesn't match the executable (differing number of basic block
   45146 counts) it will ignore the contents of the file.  It then adds in the
   45147 new execution counts and finally writes the data to the file.
   45148 
   45149 
   45150 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
   45151 
   45152 10.3 Using 'gcov' with GCC Optimization
   45153 =======================================
   45154 
   45155 If you plan to use 'gcov' to help optimize your code, you must first
   45156 compile your program with two special GCC options: '-fprofile-arcs
   45157 -ftest-coverage'.  Aside from that, you can use any other GCC options;
   45158 but if you want to prove that every single line in your program was
   45159 executed, you should not compile with optimization at the same time.  On
   45160 some machines the optimizer can eliminate some simple code lines by
   45161 combining them with other lines.  For example, code like this:
   45162 
   45163      if (a != b)
   45164        c = 1;
   45165      else
   45166        c = 0;
   45167 
   45168 can be compiled into one instruction on some machines.  In this case,
   45169 there is no way for 'gcov' to calculate separate execution counts for
   45170 each line because there isn't separate code for each line.  Hence the
   45171 'gcov' output looks like this if you compiled the program with
   45172 optimization:
   45173 
   45174            100:   12:if (a != b)
   45175            100:   13:  c = 1;
   45176            100:   14:else
   45177            100:   15:  c = 0;
   45178 
   45179  The output shows that this block of code, combined by optimization,
   45180 executed 100 times.  In one sense this result is correct, because there
   45181 was only one instruction representing all four of these lines.  However,
   45182 the output does not indicate how many times the result was 0 and how
   45183 many times the result was 1.
   45184 
   45185  Inlineable functions can create unexpected line counts.  Line counts
   45186 are shown for the source code of the inlineable function, but what is
   45187 shown depends on where the function is inlined, or if it is not inlined
   45188 at all.
   45189 
   45190  If the function is not inlined, the compiler must emit an out of line
   45191 copy of the function, in any object file that needs it.  If 'fileA.o'
   45192 and 'fileB.o' both contain out of line bodies of a particular inlineable
   45193 function, they will also both contain coverage counts for that function.
   45194 When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
   45195 many systems, select one of those out of line bodies for all calls to
   45196 that function, and remove or ignore the other.  Unfortunately, it will
   45197 not remove the coverage counters for the unused function body.  Hence
   45198 when instrumented, all but one use of that function will show zero
   45199 counts.
   45200 
   45201  If the function is inlined in several places, the block structure in
   45202 each location might not be the same.  For instance, a condition might
   45203 now be calculable at compile time in some instances.  Because the
   45204 coverage of all the uses of the inline function will be shown for the
   45205 same source lines, the line counts themselves might seem inconsistent.
   45206 
   45207  Long-running applications can use the '_gcov_reset' and '_gcov_dump'
   45208 facilities to restrict profile collection to the program region of
   45209 interest.  Calling '_gcov_reset(void)' will clear all profile counters
   45210 to zero, and calling '_gcov_dump(void)' will cause the profile
   45211 information collected at that point to be dumped to '.gcda' output
   45212 files.
   45213 
   45214 
   45215 File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
   45216 
   45217 10.4 Brief description of 'gcov' data files
   45218 ===========================================
   45219 
   45220 'gcov' uses two files for profiling.  The names of these files are
   45221 derived from the original _object_ file by substituting the file suffix
   45222 with either '.gcno', or '.gcda'.  The files contain coverage and profile
   45223 data stored in a platform-independent format.  The '.gcno' files are
   45224 placed in the same directory as the object file.  By default, the
   45225 '.gcda' files are also stored in the same directory as the object file,
   45226 but the GCC '-fprofile-dir' option may be used to store the '.gcda'
   45227 files in a separate directory.
   45228 
   45229  The '.gcno' notes file is generated when the source file is compiled
   45230 with the GCC '-ftest-coverage' option.  It contains information to
   45231 reconstruct the basic block graphs and assign source line numbers to
   45232 blocks.
   45233 
   45234  The '.gcda' count data file is generated when a program containing
   45235 object files built with the GCC '-fprofile-arcs' option is executed.  A
   45236 separate '.gcda' file is created for each object file compiled with this
   45237 option.  It contains arc transition counts, value profile counts, and
   45238 some summary information.
   45239 
   45240  The full details of the file format is specified in 'gcov-io.h', and
   45241 functions provided in that header file should be used to access the
   45242 coverage files.
   45243 
   45244 
   45245 File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
   45246 
   45247 10.5 Data file relocation to support cross-profiling
   45248 ====================================================
   45249 
   45250 Running the program will cause profile output to be generated.  For each
   45251 source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
   45252 will be placed in the object file directory.  That implicitly requires
   45253 running the program on the same system as it was built or having the
   45254 same absolute directory structure on the target system.  The program
   45255 will try to create the needed directory structure, if it is not already
   45256 present.
   45257 
   45258  To support cross-profiling, a program compiled with '-fprofile-arcs'
   45259 can relocate the data files based on two environment variables:
   45260 
   45261    * GCOV_PREFIX contains the prefix to add to the absolute paths in the
   45262      object file.  Prefix can be absolute, or relative.  The default is
   45263      no prefix.
   45264 
   45265    * GCOV_PREFIX_STRIP indicates the how many initial directory names to
   45266      strip off the hardwired absolute paths.  Default value is 0.
   45267 
   45268      _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
   45269      undefined, then a relative path is made out of the hardwired
   45270      absolute paths.
   45271 
   45272  For example, if the object file '/user/build/foo.o' was built with
   45273 '-fprofile-arcs', the final executable will try to create the data file
   45274 '/user/build/foo.gcda' when running on the target system.  This will
   45275 fail if the corresponding directory does not exist and it is unable to
   45276 create it.  This can be overcome by, for example, setting the
   45277 environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
   45278 Such a setting will name the data file '/target/run/build/foo.gcda'.
   45279 
   45280  You must move the data files to the expected directory tree in order to
   45281 use them for profile directed optimizations ('--use-profile'), or to use
   45282 the 'gcov' tool.
   45283 
   45284 
   45285 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
   45286 
   45287 11 Known Causes of Trouble with GCC
   45288 ***********************************
   45289 
   45290 This section describes known problems that affect users of GCC.  Most of
   45291 these are not GCC bugs per se--if they were, we would fix them.  But the
   45292 result for a user may be like the result of a bug.
   45293 
   45294  Some of these problems are due to bugs in other software, some are
   45295 missing features that are too much work to add, and some are places
   45296 where people's opinions differ as to what is best.
   45297 
   45298 * Menu:
   45299 
   45300 * Actual Bugs::         Bugs we will fix later.
   45301 * Interoperation::      Problems using GCC with other compilers,
   45302                         and with certain linkers, assemblers and debuggers.
   45303 * Incompatibilities::   GCC is incompatible with traditional C.
   45304 * Fixed Headers::       GCC uses corrected versions of system header files.
   45305                         This is necessary, but doesn't always work smoothly.
   45306 * Standard Libraries::  GCC uses the system C library, which might not be
   45307                         compliant with the ISO C standard.
   45308 * Disappointments::     Regrettable things we can't change, but not quite bugs.
   45309 * C++ Misunderstandings:: Common misunderstandings with GNU C++.
   45310 * Non-bugs::            Things we think are right, but some others disagree.
   45311 * Warnings and Errors:: Which problems in your code get warnings,
   45312                         and which get errors.
   45313 
   45314 
   45315 File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
   45316 
   45317 11.1 Actual Bugs We Haven't Fixed Yet
   45318 =====================================
   45319 
   45320    * The 'fixincludes' script interacts badly with automounters; if the
   45321      directory of system header files is automounted, it tends to be
   45322      unmounted while 'fixincludes' is running.  This would seem to be a
   45323      bug in the automounter.  We don't know any good way to work around
   45324      it.
   45325 
   45326 
   45327 File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
   45328 
   45329 11.2 Interoperation
   45330 ===================
   45331 
   45332 This section lists various difficulties encountered in using GCC
   45333 together with other compilers or with the assemblers, linkers, libraries
   45334 and debuggers on certain systems.
   45335 
   45336    * On many platforms, GCC supports a different ABI for C++ than do
   45337      other compilers, so the object files compiled by GCC cannot be used
   45338      with object files generated by another C++ compiler.
   45339 
   45340      An area where the difference is most apparent is name mangling.
   45341      The use of different name mangling is intentional, to protect you
   45342      from more subtle problems.  Compilers differ as to many internal
   45343      details of C++ implementation, including: how class instances are
   45344      laid out, how multiple inheritance is implemented, and how virtual
   45345      function calls are handled.  If the name encoding were made the
   45346      same, your programs would link against libraries provided from
   45347      other compilers--but the programs would then crash when run.
   45348      Incompatible libraries are then detected at link time, rather than
   45349      at run time.
   45350 
   45351    * On some BSD systems, including some versions of Ultrix, use of
   45352      profiling causes static variable destructors (currently used only
   45353      in C++) not to be run.
   45354 
   45355    * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
   45356      boundary, and it expects every 'double' to be so aligned.  The Sun
   45357      compiler usually gives 'double' values 8-byte alignment, with one
   45358      exception: function arguments of type 'double' may not be aligned.
   45359 
   45360      As a result, if a function compiled with Sun CC takes the address
   45361      of an argument of type 'double' and passes this pointer of type
   45362      'double *' to a function compiled with GCC, dereferencing the
   45363      pointer may cause a fatal signal.
   45364 
   45365      One way to solve this problem is to compile your entire program
   45366      with GCC.  Another solution is to modify the function that is
   45367      compiled with Sun CC to copy the argument into a local variable;
   45368      local variables are always properly aligned.  A third solution is
   45369      to modify the function that uses the pointer to dereference it via
   45370      the following function 'access_double' instead of directly with
   45371      '*':
   45372 
   45373           inline double
   45374           access_double (double *unaligned_ptr)
   45375           {
   45376             union d2i { double d; int i[2]; };
   45377 
   45378             union d2i *p = (union d2i *) unaligned_ptr;
   45379             union d2i u;
   45380 
   45381             u.i[0] = p->i[0];
   45382             u.i[1] = p->i[1];
   45383 
   45384             return u.d;
   45385           }
   45386 
   45387      Storing into the pointer can be done likewise with the same union.
   45388 
   45389    * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
   45390      allocate memory that is only 4 byte aligned.  Since GCC on the
   45391      SPARC assumes that doubles are 8 byte aligned, this may result in a
   45392      fatal signal if doubles are stored in memory allocated by the
   45393      'libmalloc.a' library.
   45394 
   45395      The solution is to not use the 'libmalloc.a' library.  Use instead
   45396      'malloc' and related functions from 'libc.a'; they do not have this
   45397      problem.
   45398 
   45399    * On the HP PA machine, ADB sometimes fails to work on functions
   45400      compiled with GCC.  Specifically, it fails to work on functions
   45401      that use 'alloca' or variable-size arrays.  This is because GCC
   45402      doesn't generate HP-UX unwind descriptors for such functions.  It
   45403      may even be impossible to generate them.
   45404 
   45405    * Debugging ('-g') is not supported on the HP PA machine, unless you
   45406      use the preliminary GNU tools.
   45407 
   45408    * Taking the address of a label may generate errors from the HP-UX PA
   45409      assembler.  GAS for the PA does not have this problem.
   45410 
   45411    * Using floating point parameters for indirect calls to static
   45412      functions will not work when using the HP assembler.  There simply
   45413      is no way for GCC to specify what registers hold arguments for
   45414      static functions when using the HP assembler.  GAS for the PA does
   45415      not have this problem.
   45416 
   45417    * In extremely rare cases involving some very large functions you may
   45418      receive errors from the HP linker complaining about an out of
   45419      bounds unconditional branch offset.  This used to occur more often
   45420      in previous versions of GCC, but is now exceptionally rare.  If you
   45421      should run into it, you can work around by making your function
   45422      smaller.
   45423 
   45424    * GCC compiled code sometimes emits warnings from the HP-UX assembler
   45425      of the form:
   45426 
   45427           (warning) Use of GR3 when
   45428             frame >= 8192 may cause conflict.
   45429 
   45430      These warnings are harmless and can be safely ignored.
   45431 
   45432    * In extremely rare cases involving some very large functions you may
   45433      receive errors from the AIX Assembler complaining about a
   45434      displacement that is too large.  If you should run into it, you can
   45435      work around by making your function smaller.
   45436 
   45437    * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
   45438      semantics which merges global symbols between libraries and
   45439      applications, especially necessary for C++ streams functionality.
   45440      This is not the default behavior of AIX shared libraries and
   45441      dynamic linking.  'libstdc++.a' is built on AIX with
   45442      "runtime-linking" enabled so that symbol merging can occur.  To
   45443      utilize this feature, the application linked with 'libstdc++.a'
   45444      must include the '-Wl,-brtl' flag on the link line.  G++ cannot
   45445      impose this because this option may interfere with the semantics of
   45446      the user program and users may not always use 'g++' to link his or
   45447      her application.  Applications are not required to use the
   45448      '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
   45449      library which is not dependent on the symbol merging semantics will
   45450      continue to function correctly.
   45451 
   45452    * An application can interpose its own definition of functions for
   45453      functions invoked by 'libstdc++.a' with "runtime-linking" enabled
   45454      on AIX.  To accomplish this the application must be linked with
   45455      "runtime-linking" option and the functions explicitly must be
   45456      exported by the application ('-Wl,-brtl,-bE:exportfile').
   45457 
   45458    * AIX on the RS/6000 provides support (NLS) for environments outside
   45459      of the United States.  Compilers and assemblers use NLS to support
   45460      locale-specific representations of various objects including
   45461      floating-point numbers ('.' vs ',' for separating decimal
   45462      fractions).  There have been problems reported where the library
   45463      linked with GCC does not produce the same floating-point formats
   45464      that the assembler accepts.  If you have this problem, set the
   45465      'LANG' environment variable to 'C' or 'En_US'.
   45466 
   45467    * Even if you specify '-fdollars-in-identifiers', you cannot
   45468      successfully use '$' in identifiers on the RS/6000 due to a
   45469      restriction in the IBM assembler.  GAS supports these identifiers.
   45470 
   45471 
   45472 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
   45473 
   45474 11.3 Incompatibilities of GCC
   45475 =============================
   45476 
   45477 There are several noteworthy incompatibilities between GNU C and K&R
   45478 (non-ISO) versions of C.
   45479 
   45480    * GCC normally makes string constants read-only.  If several
   45481      identical-looking string constants are used, GCC stores only one
   45482      copy of the string.
   45483 
   45484      One consequence is that you cannot call 'mktemp' with a string
   45485      constant argument.  The function 'mktemp' always alters the string
   45486      its argument points to.
   45487 
   45488      Another consequence is that 'sscanf' does not work on some very old
   45489      systems when passed a string constant as its format control string
   45490      or input.  This is because 'sscanf' incorrectly tries to write into
   45491      the string constant.  Likewise 'fscanf' and 'scanf'.
   45492 
   45493      The solution to these problems is to change the program to use
   45494      'char'-array variables with initialization strings for these
   45495      purposes instead of string constants.
   45496 
   45497    * '-2147483648' is positive.
   45498 
   45499      This is because 2147483648 cannot fit in the type 'int', so
   45500      (following the ISO C rules) its data type is 'unsigned long int'.
   45501      Negating this value yields 2147483648 again.
   45502 
   45503    * GCC does not substitute macro arguments when they appear inside of
   45504      string constants.  For example, the following macro in GCC
   45505 
   45506           #define foo(a) "a"
   45507 
   45508      will produce output '"a"' regardless of what the argument A is.
   45509 
   45510    * When you use 'setjmp' and 'longjmp', the only automatic variables
   45511      guaranteed to remain valid are those declared 'volatile'.  This is
   45512      a consequence of automatic register allocation.  Consider this
   45513      function:
   45514 
   45515           jmp_buf j;
   45516 
   45517           foo ()
   45518           {
   45519             int a, b;
   45520 
   45521             a = fun1 ();
   45522             if (setjmp (j))
   45523               return a;
   45524 
   45525             a = fun2 ();
   45526             /* 'longjmp (j)' may occur in 'fun3'. */
   45527             return a + fun3 ();
   45528           }
   45529 
   45530      Here 'a' may or may not be restored to its first value when the
   45531      'longjmp' occurs.  If 'a' is allocated in a register, then its
   45532      first value is restored; otherwise, it keeps the last value stored
   45533      in it.
   45534 
   45535      If you use the '-W' option with the '-O' option, you will get a
   45536      warning when GCC thinks such a problem might be possible.
   45537 
   45538    * Programs that use preprocessing directives in the middle of macro
   45539      arguments do not work with GCC.  For example, a program like this
   45540      will not work:
   45541 
   45542           foobar (
   45543           #define luser
   45544                   hack)
   45545 
   45546      ISO C does not permit such a construct.
   45547 
   45548    * K&R compilers allow comments to cross over an inclusion boundary
   45549      (i.e. started in an include file and ended in the including file).
   45550 
   45551    * Declarations of external variables and functions within a block
   45552      apply only to the block containing the declaration.  In other
   45553      words, they have the same scope as any other declaration in the
   45554      same place.
   45555 
   45556      In some other C compilers, an 'extern' declaration affects all the
   45557      rest of the file even if it happens within a block.
   45558 
   45559    * In traditional C, you can combine 'long', etc., with a typedef
   45560      name, as shown here:
   45561 
   45562           typedef int foo;
   45563           typedef long foo bar;
   45564 
   45565      In ISO C, this is not allowed: 'long' and other type modifiers
   45566      require an explicit 'int'.
   45567 
   45568    * PCC allows typedef names to be used as function parameters.
   45569 
   45570    * Traditional C allows the following erroneous pair of declarations
   45571      to appear together in a given scope:
   45572 
   45573           typedef int foo;
   45574           typedef foo foo;
   45575 
   45576    * GCC treats all characters of identifiers as significant.  According
   45577      to K&R-1 (2.2), "No more than the first eight characters are
   45578      significant, although more may be used.".  Also according to K&R-1
   45579      (2.2), "An identifier is a sequence of letters and digits; the
   45580      first character must be a letter.  The underscore _ counts as a
   45581      letter.", but GCC also allows dollar signs in identifiers.
   45582 
   45583    * PCC allows whitespace in the middle of compound assignment
   45584      operators such as '+='.  GCC, following the ISO standard, does not
   45585      allow this.
   45586 
   45587    * GCC complains about unterminated character constants inside of
   45588      preprocessing conditionals that fail.  Some programs have English
   45589      comments enclosed in conditionals that are guaranteed to fail; if
   45590      these comments contain apostrophes, GCC will probably report an
   45591      error.  For example, this code would produce an error:
   45592 
   45593           #if 0
   45594           You can't expect this to work.
   45595           #endif
   45596 
   45597      The best solution to such a problem is to put the text into an
   45598      actual C comment delimited by '/*...*/'.
   45599 
   45600    * Many user programs contain the declaration 'long time ();'.  In the
   45601      past, the system header files on many systems did not actually
   45602      declare 'time', so it did not matter what type your program
   45603      declared it to return.  But in systems with ISO C headers, 'time'
   45604      is declared to return 'time_t', and if that is not the same as
   45605      'long', then 'long time ();' is erroneous.
   45606 
   45607      The solution is to change your program to use appropriate system
   45608      headers ('<time.h>' on systems with ISO C headers) and not to
   45609      declare 'time' if the system header files declare it, or failing
   45610      that to use 'time_t' as the return type of 'time'.
   45611 
   45612    * When compiling functions that return 'float', PCC converts it to a
   45613      double.  GCC actually returns a 'float'.  If you are concerned with
   45614      PCC compatibility, you should declare your functions to return
   45615      'double'; you might as well say what you mean.
   45616 
   45617    * When compiling functions that return structures or unions, GCC
   45618      output code normally uses a method different from that used on most
   45619      versions of Unix.  As a result, code compiled with GCC cannot call
   45620      a structure-returning function compiled with PCC, and vice versa.
   45621 
   45622      The method used by GCC is as follows: a structure or union which is
   45623      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
   45624      union with any other size is stored into an address supplied by the
   45625      caller (usually in a special, fixed register, but on some machines
   45626      it is passed on the stack).  The target hook
   45627      'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
   45628 
   45629      By contrast, PCC on most target machines returns structures and
   45630      unions of any size by copying the data into an area of static
   45631      storage, and then returning the address of that storage as if it
   45632      were a pointer value.  The caller must copy the data from that
   45633      memory area to the place where the value is wanted.  GCC does not
   45634      use this method because it is slower and nonreentrant.
   45635 
   45636      On some newer machines, PCC uses a reentrant convention for all
   45637      structure and union returning.  GCC on most of these machines uses
   45638      a compatible convention when returning structures and unions in
   45639      memory, but still returns small structures and unions in registers.
   45640 
   45641      You can tell GCC to use a compatible convention for all structure
   45642      and union returning with the option '-fpcc-struct-return'.
   45643 
   45644    * GCC complains about program fragments such as '0x74ae-0x4000' which
   45645      appear to be two hexadecimal constants separated by the minus
   45646      operator.  Actually, this string is a single "preprocessing token".
   45647      Each such token must correspond to one token in C.  Since this does
   45648      not, GCC prints an error message.  Although it may appear obvious
   45649      that what is meant is an operator and two values, the ISO C
   45650      standard specifically requires that this be treated as erroneous.
   45651 
   45652      A "preprocessing token" is a "preprocessing number" if it begins
   45653      with a digit and is followed by letters, underscores, digits,
   45654      periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
   45655      character sequences.  (In strict C90 mode, the sequences 'p+',
   45656      'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)
   45657 
   45658      To make the above program fragment valid, place whitespace in front
   45659      of the minus sign.  This whitespace will end the preprocessing
   45660      number.
   45661 
   45662 
   45663 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
   45664 
   45665 11.4 Fixed Header Files
   45666 =======================
   45667 
   45668 GCC needs to install corrected versions of some system header files.
   45669 This is because most target systems have some header files that won't
   45670 work with GCC unless they are changed.  Some have bugs, some are
   45671 incompatible with ISO C, and some depend on special features of other
   45672 compilers.
   45673 
   45674  Installing GCC automatically creates and installs the fixed header
   45675 files, by running a program called 'fixincludes'.  Normally, you don't
   45676 need to pay attention to this.  But there are cases where it doesn't do
   45677 the right thing automatically.
   45678 
   45679    * If you update the system's header files, such as by installing a
   45680      new system version, the fixed header files of GCC are not
   45681      automatically updated.  They can be updated using the 'mkheaders'
   45682      script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   45683 
   45684    * On some systems, header file directories contain machine-specific
   45685      symbolic links in certain places.  This makes it possible to share
   45686      most of the header files among hosts running the same version of
   45687      the system on different machine models.
   45688 
   45689      The programs that fix the header files do not understand this
   45690      special way of using symbolic links; therefore, the directory of
   45691      fixed header files is good only for the machine model used to build
   45692      it.
   45693 
   45694      It is possible to make separate sets of fixed header files for the
   45695      different machine models, and arrange a structure of symbolic links
   45696      so as to use the proper set, but you'll have to do this by hand.
   45697 
   45698 
   45699 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
   45700 
   45701 11.5 Standard Libraries
   45702 =======================
   45703 
   45704 GCC by itself attempts to be a conforming freestanding implementation.
   45705 *Note Language Standards Supported by GCC: Standards, for details of
   45706 what this means.  Beyond the library facilities required of such an
   45707 implementation, the rest of the C library is supplied by the vendor of
   45708 the operating system.  If that C library doesn't conform to the C
   45709 standards, then your programs might get warnings (especially when using
   45710 '-Wall') that you don't expect.
   45711 
   45712  For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
   45713 while the C standard says that 'sprintf' returns an 'int'.  The
   45714 'fixincludes' program could make the prototype for this function match
   45715 the Standard, but that would be wrong, since the function will still
   45716 return 'char *'.
   45717 
   45718  If you need a Standard compliant library, then you need to find one, as
   45719 GCC does not provide one.  The GNU C library (called 'glibc') provides
   45720 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
   45721 HURD-based GNU systems; no recent version of it supports other systems,
   45722 though some very old versions did.  Version 2.2 of the GNU C library
   45723 includes nearly complete C99 support.  You could also ask your operating
   45724 system vendor if newer libraries are available.
   45725 
   45726 
   45727 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
   45728 
   45729 11.6 Disappointments and Misunderstandings
   45730 ==========================================
   45731 
   45732 These problems are perhaps regrettable, but we don't know any practical
   45733 way around them.
   45734 
   45735    * Certain local variables aren't recognized by debuggers when you
   45736      compile with optimization.
   45737 
   45738      This occurs because sometimes GCC optimizes the variable out of
   45739      existence.  There is no way to tell the debugger how to compute the
   45740      value such a variable "would have had", and it is not clear that
   45741      would be desirable anyway.  So GCC simply does not mention the
   45742      eliminated variable when it writes debugging information.
   45743 
   45744      You have to expect a certain amount of disagreement between the
   45745      executable and your source code, when you use optimization.
   45746 
   45747    * Users often think it is a bug when GCC reports an error for code
   45748      like this:
   45749 
   45750           int foo (struct mumble *);
   45751 
   45752           struct mumble { ... };
   45753 
   45754           int foo (struct mumble *x)
   45755           { ... }
   45756 
   45757      This code really is erroneous, because the scope of 'struct mumble'
   45758      in the prototype is limited to the argument list containing it.  It
   45759      does not refer to the 'struct mumble' defined with file scope
   45760      immediately below--they are two unrelated types with similar names
   45761      in different scopes.
   45762 
   45763      But in the definition of 'foo', the file-scope type is used because
   45764      that is available to be inherited.  Thus, the definition and the
   45765      prototype do not match, and you get an error.
   45766 
   45767      This behavior may seem silly, but it's what the ISO standard
   45768      specifies.  It is easy enough for you to make your code work by
   45769      moving the definition of 'struct mumble' above the prototype.  It's
   45770      not worth being incompatible with ISO C just to avoid an error for
   45771      the example shown above.
   45772 
   45773    * Accesses to bit-fields even in volatile objects works by accessing
   45774      larger objects, such as a byte or a word.  You cannot rely on what
   45775      size of object is accessed in order to read or write the bit-field;
   45776      it may even vary for a given bit-field according to the precise
   45777      usage.
   45778 
   45779      If you care about controlling the amount of memory that is
   45780      accessed, use volatile but do not use bit-fields.
   45781 
   45782    * GCC comes with shell scripts to fix certain known problems in
   45783      system header files.  They install corrected copies of various
   45784      header files in a special directory where only GCC will normally
   45785      look for them.  The scripts adapt to various systems by searching
   45786      all the system header files for the problem cases that we know
   45787      about.
   45788 
   45789      If new system header files are installed, nothing automatically
   45790      arranges to update the corrected header files.  They can be updated
   45791      using the 'mkheaders' script installed in
   45792      'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   45793 
   45794    * On 68000 and x86 systems, for instance, you can get paradoxical
   45795      results if you test the precise values of floating point numbers.
   45796      For example, you can find that a floating point value which is not
   45797      a NaN is not equal to itself.  This results from the fact that the
   45798      floating point registers hold a few more bits of precision than fit
   45799      in a 'double' in memory.  Compiled code moves values between memory
   45800      and floating point registers at its convenience, and moving them
   45801      into memory truncates them.
   45802 
   45803      You can partially avoid this problem by using the '-ffloat-store'
   45804      option (*note Optimize Options::).
   45805 
   45806    * On AIX and other platforms without weak symbol support, templates
   45807      need to be instantiated explicitly and symbols for static members
   45808      of templates will not be generated.
   45809 
   45810    * On AIX, GCC scans object files and library archives for static
   45811      constructors and destructors when linking an application before the
   45812      linker prunes unreferenced symbols.  This is necessary to prevent
   45813      the AIX linker from mistakenly assuming that static constructor or
   45814      destructor are unused and removing them before the scanning can
   45815      occur.  All static constructors and destructors found will be
   45816      referenced even though the modules in which they occur may not be
   45817      used by the program.  This may lead to both increased executable
   45818      size and unexpected symbol references.
   45819 
   45820 
   45821 File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
   45822 
   45823 11.7 Common Misunderstandings with GNU C++
   45824 ==========================================
   45825 
   45826 C++ is a complex language and an evolving one, and its standard
   45827 definition (the ISO C++ standard) was only recently completed.  As a
   45828 result, your C++ compiler may occasionally surprise you, even when its
   45829 behavior is correct.  This section discusses some areas that frequently
   45830 give rise to questions of this sort.
   45831 
   45832 * Menu:
   45833 
   45834 * Static Definitions::  Static member declarations are not definitions
   45835 * Name lookup::         Name lookup, templates, and accessing members of base classes
   45836 * Temporaries::         Temporaries may vanish before you expect
   45837 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
   45838 
   45839 
   45840 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
   45841 
   45842 11.7.1 Declare _and_ Define Static Members
   45843 ------------------------------------------
   45844 
   45845 When a class has static data members, it is not enough to _declare_ the
   45846 static member; you must also _define_ it.  For example:
   45847 
   45848      class Foo
   45849      {
   45850        ...
   45851        void method();
   45852        static int bar;
   45853      };
   45854 
   45855  This declaration only establishes that the class 'Foo' has an 'int'
   45856 named 'Foo::bar', and a member function named 'Foo::method'.  But you
   45857 still need to define _both_ 'method' and 'bar' elsewhere.  According to
   45858 the ISO standard, you must supply an initializer in one (and only one)
   45859 source file, such as:
   45860 
   45861      int Foo::bar = 0;
   45862 
   45863  Other C++ compilers may not correctly implement the standard behavior.
   45864 As a result, when you switch to 'g++' from one of these compilers, you
   45865 may discover that a program that appeared to work correctly in fact does
   45866 not conform to the standard: 'g++' reports as undefined symbols any
   45867 static data members that lack definitions.
   45868 
   45869 
   45870 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
   45871 
   45872 11.7.2 Name lookup, templates, and accessing members of base classes
   45873 --------------------------------------------------------------------
   45874 
   45875 The C++ standard prescribes that all names that are not dependent on
   45876 template parameters are bound to their present definitions when parsing
   45877 a template function or class.(1)  Only names that are dependent are
   45878 looked up at the point of instantiation.  For example, consider
   45879 
   45880        void foo(double);
   45881 
   45882        struct A {
   45883          template <typename T>
   45884          void f () {
   45885            foo (1);        // 1
   45886            int i = N;      // 2
   45887            T t;
   45888            t.bar();        // 3
   45889            foo (t);        // 4
   45890          }
   45891 
   45892          static const int N;
   45893        };
   45894 
   45895  Here, the names 'foo' and 'N' appear in a context that does not depend
   45896 on the type of 'T'.  The compiler will thus require that they are
   45897 defined in the context of use in the template, not only before the point
   45898 of instantiation, and will here use '::foo(double)' and 'A::N',
   45899 respectively.  In particular, it will convert the integer value to a
   45900 'double' when passing it to '::foo(double)'.
   45901 
   45902  Conversely, 'bar' and the call to 'foo' in the fourth marked line are
   45903 used in contexts that do depend on the type of 'T', so they are only
   45904 looked up at the point of instantiation, and you can provide
   45905 declarations for them after declaring the template, but before
   45906 instantiating it.  In particular, if you instantiate 'A::f<int>', the
   45907 last line will call an overloaded '::foo(int)' if one was provided, even
   45908 if after the declaration of 'struct A'.
   45909 
   45910  This distinction between lookup of dependent and non-dependent names is
   45911 called two-stage (or dependent) name lookup.  G++ implements it since
   45912 version 3.4.
   45913 
   45914  Two-stage name lookup sometimes leads to situations with behavior
   45915 different from non-template codes.  The most common is probably this:
   45916 
   45917        template <typename T> struct Base {
   45918          int i;
   45919        };
   45920 
   45921        template <typename T> struct Derived : public Base<T> {
   45922          int get_i() { return i; }
   45923        };
   45924 
   45925  In 'get_i()', 'i' is not used in a dependent context, so the compiler
   45926 will look for a name declared at the enclosing namespace scope (which is
   45927 the global scope here).  It will not look into the base class, since
   45928 that is dependent and you may declare specializations of 'Base' even
   45929 after declaring 'Derived', so the compiler can't really know what 'i'
   45930 would refer to.  If there is no global variable 'i', then you will get
   45931 an error message.
   45932 
   45933  In order to make it clear that you want the member of the base class,
   45934 you need to defer lookup until instantiation time, at which the base
   45935 class is known.  For this, you need to access 'i' in a dependent
   45936 context, by either using 'this->i' (remember that 'this' is of type
   45937 'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
   45938 Alternatively, 'Base<T>::i' might be brought into scope by a
   45939 'using'-declaration.
   45940 
   45941  Another, similar example involves calling member functions of a base
   45942 class:
   45943 
   45944        template <typename T> struct Base {
   45945            int f();
   45946        };
   45947 
   45948        template <typename T> struct Derived : Base<T> {
   45949            int g() { return f(); };
   45950        };
   45951 
   45952  Again, the call to 'f()' is not dependent on template arguments (there
   45953 are no arguments that depend on the type 'T', and it is also not
   45954 otherwise specified that the call should be in a dependent context).
   45955 Thus a global declaration of such a function must be available, since
   45956 the one in the base class is not visible until instantiation time.  The
   45957 compiler will consequently produce the following error message:
   45958 
   45959        x.cc: In member function `int Derived<T>::g()':
   45960        x.cc:6: error: there are no arguments to `f' that depend on a template
   45961           parameter, so a declaration of `f' must be available
   45962        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
   45963           allowing the use of an undeclared name is deprecated)
   45964 
   45965  To make the code valid either use 'this->f()', or 'Base<T>::f()'.
   45966 Using the '-fpermissive' flag will also let the compiler accept the
   45967 code, by marking all function calls for which no declaration is visible
   45968 at the time of definition of the template for later lookup at
   45969 instantiation time, as if it were a dependent call.  We do not recommend
   45970 using '-fpermissive' to work around invalid code, and it will also only
   45971 catch cases where functions in base classes are called, not where
   45972 variables in base classes are used (as in the example above).
   45973 
   45974  Note that some compilers (including G++ versions prior to 3.4) get
   45975 these examples wrong and accept above code without an error.  Those
   45976 compilers do not implement two-stage name lookup correctly.
   45977 
   45978    ---------- Footnotes ----------
   45979 
   45980    (1) The C++ standard just uses the term "dependent" for names that
   45981 depend on the type or value of template parameters.  This shorter term
   45982 will also be used in the rest of this section.
   45983 
   45984 
   45985 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
   45986 
   45987 11.7.3 Temporaries May Vanish Before You Expect
   45988 -----------------------------------------------
   45989 
   45990 It is dangerous to use pointers or references to _portions_ of a
   45991 temporary object.  The compiler may very well delete the object before
   45992 you expect it to, leaving a pointer to garbage.  The most common place
   45993 where this problem crops up is in classes like string classes,
   45994 especially ones that define a conversion function to type 'char *' or
   45995 'const char *'--which is one reason why the standard 'string' class
   45996 requires you to call the 'c_str' member function.  However, any class
   45997 that returns a pointer to some internal structure is potentially subject
   45998 to this problem.
   45999 
   46000  For example, a program may use a function 'strfunc' that returns
   46001 'string' objects, and another function 'charfunc' that operates on
   46002 pointers to 'char':
   46003 
   46004      string strfunc ();
   46005      void charfunc (const char *);
   46006 
   46007      void
   46008      f ()
   46009      {
   46010        const char *p = strfunc().c_str();
   46011        ...
   46012        charfunc (p);
   46013        ...
   46014        charfunc (p);
   46015      }
   46016 
   46017 In this situation, it may seem reasonable to save a pointer to the C
   46018 string returned by the 'c_str' member function and use that rather than
   46019 call 'c_str' repeatedly.  However, the temporary string created by the
   46020 call to 'strfunc' is destroyed after 'p' is initialized, at which point
   46021 'p' is left pointing to freed memory.
   46022 
   46023  Code like this may run successfully under some other compilers,
   46024 particularly obsolete cfront-based compilers that delete temporaries
   46025 along with normal local variables.  However, the GNU C++ behavior is
   46026 standard-conforming, so if your program depends on late destruction of
   46027 temporaries it is not portable.
   46028 
   46029  The safe way to write such code is to give the temporary a name, which
   46030 forces it to remain until the end of the scope of the name.  For
   46031 example:
   46032 
   46033      const string& tmp = strfunc ();
   46034      charfunc (tmp.c_str ());
   46035 
   46036 
   46037 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
   46038 
   46039 11.7.4 Implicit Copy-Assignment for Virtual Bases
   46040 -------------------------------------------------
   46041 
   46042 When a base class is virtual, only one subobject of the base class
   46043 belongs to each full object.  Also, the constructors and destructors are
   46044 invoked only once, and called from the most-derived class.  However,
   46045 such objects behave unspecified when being assigned.  For example:
   46046 
   46047      struct Base{
   46048        char *name;
   46049        Base(char *n) : name(strdup(n)){}
   46050        Base& operator= (const Base& other){
   46051         free (name);
   46052         name = strdup (other.name);
   46053        }
   46054      };
   46055 
   46056      struct A:virtual Base{
   46057        int val;
   46058        A():Base("A"){}
   46059      };
   46060 
   46061      struct B:virtual Base{
   46062        int bval;
   46063        B():Base("B"){}
   46064      };
   46065 
   46066      struct Derived:public A, public B{
   46067        Derived():Base("Derived"){}
   46068      };
   46069 
   46070      void func(Derived &d1, Derived &d2)
   46071      {
   46072        d1 = d2;
   46073      }
   46074 
   46075  The C++ standard specifies that 'Base::Base' is only called once when
   46076 constructing or copy-constructing a Derived object.  It is unspecified
   46077 whether 'Base::operator=' is called more than once when the implicit
   46078 copy-assignment for Derived objects is invoked (as it is inside 'func'
   46079 in the example).
   46080 
   46081  G++ implements the "intuitive" algorithm for copy-assignment: assign
   46082 all direct bases, then assign all members.  In that algorithm, the
   46083 virtual base subobject can be encountered more than once.  In the
   46084 example, copying proceeds in the following order: 'val', 'name' (via
   46085 'strdup'), 'bval', and 'name' again.
   46086 
   46087  If application code relies on copy-assignment, a user-defined
   46088 copy-assignment operator removes any uncertainties.  With such an
   46089 operator, the application can define whether and how the virtual base
   46090 subobject is assigned.
   46091 
   46092 
   46093 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
   46094 
   46095 11.8 Certain Changes We Don't Want to Make
   46096 ==========================================
   46097 
   46098 This section lists changes that people frequently request, but which we
   46099 do not make because we think GCC is better without them.
   46100 
   46101    * Checking the number and type of arguments to a function which has
   46102      an old-fashioned definition and no prototype.
   46103 
   46104      Such a feature would work only occasionally--only for calls that
   46105      appear in the same file as the called function, following the
   46106      definition.  The only way to check all calls reliably is to add a
   46107      prototype for the function.  But adding a prototype eliminates the
   46108      motivation for this feature.  So the feature is not worthwhile.
   46109 
   46110    * Warning about using an expression whose type is signed as a shift
   46111      count.
   46112 
   46113      Shift count operands are probably signed more often than unsigned.
   46114      Warning about this would cause far more annoyance than good.
   46115 
   46116    * Warning about assigning a signed value to an unsigned variable.
   46117 
   46118      Such assignments must be very common; warning about them would
   46119      cause more annoyance than good.
   46120 
   46121    * Warning when a non-void function value is ignored.
   46122 
   46123      C contains many standard functions that return a value that most
   46124      programs choose to ignore.  One obvious example is 'printf'.
   46125      Warning about this practice only leads the defensive programmer to
   46126      clutter programs with dozens of casts to 'void'.  Such casts are
   46127      required so frequently that they become visual noise.  Writing
   46128      those casts becomes so automatic that they no longer convey useful
   46129      information about the intentions of the programmer.  For functions
   46130      where the return value should never be ignored, use the
   46131      'warn_unused_result' function attribute (*note Function
   46132      Attributes::).
   46133 
   46134    * Making '-fshort-enums' the default.
   46135 
   46136      This would cause storage layout to be incompatible with most other
   46137      C compilers.  And it doesn't seem very important, given that you
   46138      can get the same result in other ways.  The case where it matters
   46139      most is when the enumeration-valued object is inside a structure,
   46140      and in that case you can specify a field width explicitly.
   46141 
   46142    * Making bit-fields unsigned by default on particular machines where
   46143      "the ABI standard" says to do so.
   46144 
   46145      The ISO C standard leaves it up to the implementation whether a
   46146      bit-field declared plain 'int' is signed or not.  This in effect
   46147      creates two alternative dialects of C.
   46148 
   46149      The GNU C compiler supports both dialects; you can specify the
   46150      signed dialect with '-fsigned-bitfields' and the unsigned dialect
   46151      with '-funsigned-bitfields'.  However, this leaves open the
   46152      question of which dialect to use by default.
   46153 
   46154      Currently, the preferred dialect makes plain bit-fields signed,
   46155      because this is simplest.  Since 'int' is the same as 'signed int'
   46156      in every other context, it is cleanest for them to be the same in
   46157      bit-fields as well.
   46158 
   46159      Some computer manufacturers have published Application Binary
   46160      Interface standards which specify that plain bit-fields should be
   46161      unsigned.  It is a mistake, however, to say anything about this
   46162      issue in an ABI.  This is because the handling of plain bit-fields
   46163      distinguishes two dialects of C.  Both dialects are meaningful on
   46164      every type of machine.  Whether a particular object file was
   46165      compiled using signed bit-fields or unsigned is of no concern to
   46166      other object files, even if they access the same bit-fields in the
   46167      same data structures.
   46168 
   46169      A given program is written in one or the other of these two
   46170      dialects.  The program stands a chance to work on most any machine
   46171      if it is compiled with the proper dialect.  It is unlikely to work
   46172      at all if compiled with the wrong dialect.
   46173 
   46174      Many users appreciate the GNU C compiler because it provides an
   46175      environment that is uniform across machines.  These users would be
   46176      inconvenienced if the compiler treated plain bit-fields differently
   46177      on certain machines.
   46178 
   46179      Occasionally users write programs intended only for a particular
   46180      machine type.  On these occasions, the users would benefit if the
   46181      GNU C compiler were to support by default the same dialect as the
   46182      other compilers on that machine.  But such applications are rare.
   46183      And users writing a program to run on more than one type of machine
   46184      cannot possibly benefit from this kind of compatibility.
   46185 
   46186      This is why GCC does and will treat plain bit-fields in the same
   46187      fashion on all types of machines (by default).
   46188 
   46189      There are some arguments for making bit-fields unsigned by default
   46190      on all machines.  If, for example, this becomes a universal de
   46191      facto standard, it would make sense for GCC to go along with it.
   46192      This is something to be considered in the future.
   46193 
   46194      (Of course, users strongly concerned about portability should
   46195      indicate explicitly in each bit-field whether it is signed or not.
   46196      In this way, they write programs which have the same meaning in
   46197      both C dialects.)
   46198 
   46199    * Undefining '__STDC__' when '-ansi' is not used.
   46200 
   46201      Currently, GCC defines '__STDC__' unconditionally.  This provides
   46202      good results in practice.
   46203 
   46204      Programmers normally use conditionals on '__STDC__' to ask whether
   46205      it is safe to use certain features of ISO C, such as function
   46206      prototypes or ISO token concatenation.  Since plain 'gcc' supports
   46207      all the features of ISO C, the correct answer to these questions is
   46208      "yes".
   46209 
   46210      Some users try to use '__STDC__' to check for the availability of
   46211      certain library facilities.  This is actually incorrect usage in an
   46212      ISO C program, because the ISO C standard says that a conforming
   46213      freestanding implementation should define '__STDC__' even though it
   46214      does not have the library facilities.  'gcc -ansi -pedantic' is a
   46215      conforming freestanding implementation, and it is therefore
   46216      required to define '__STDC__', even though it does not come with an
   46217      ISO C library.
   46218 
   46219      Sometimes people say that defining '__STDC__' in a compiler that
   46220      does not completely conform to the ISO C standard somehow violates
   46221      the standard.  This is illogical.  The standard is a standard for
   46222      compilers that claim to support ISO C, such as 'gcc -ansi'--not for
   46223      other compilers such as plain 'gcc'.  Whatever the ISO C standard
   46224      says is relevant to the design of plain 'gcc' without '-ansi' only
   46225      for pragmatic reasons, not as a requirement.
   46226 
   46227      GCC normally defines '__STDC__' to be 1, and in addition defines
   46228      '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
   46229      option for strict conformance to some version of ISO C.  On some
   46230      hosts, system include files use a different convention, where
   46231      '__STDC__' is normally 0, but is 1 if the user specifies strict
   46232      conformance to the C Standard.  GCC follows the host convention
   46233      when processing system include files, but when processing user
   46234      files it follows the usual GNU C convention.
   46235 
   46236    * Undefining '__STDC__' in C++.
   46237 
   46238      Programs written to compile with C++-to-C translators get the value
   46239      of '__STDC__' that goes with the C compiler that is subsequently
   46240      used.  These programs must test '__STDC__' to determine what kind
   46241      of C preprocessor that compiler uses: whether they should
   46242      concatenate tokens in the ISO C fashion or in the traditional
   46243      fashion.
   46244 
   46245      These programs work properly with GNU C++ if '__STDC__' is defined.
   46246      They would not work otherwise.
   46247 
   46248      In addition, many header files are written to provide prototypes in
   46249      ISO C but not in traditional C.  Many of these header files can
   46250      work without change in C++ provided '__STDC__' is defined.  If
   46251      '__STDC__' is not defined, they will all fail, and will all need to
   46252      be changed to test explicitly for C++ as well.
   46253 
   46254    * Deleting "empty" loops.
   46255 
   46256      Historically, GCC has not deleted "empty" loops under the
   46257      assumption that the most likely reason you would put one in a
   46258      program is to have a delay, so deleting them will not make real
   46259      programs run any faster.
   46260 
   46261      However, the rationale here is that optimization of a nonempty loop
   46262      cannot produce an empty one.  This held for carefully written C
   46263      compiled with less powerful optimizers but is not always the case
   46264      for carefully written C++ or with more powerful optimizers.  Thus
   46265      GCC will remove operations from loops whenever it can determine
   46266      those operations are not externally visible (apart from the time
   46267      taken to execute them, of course).  In case the loop can be proved
   46268      to be finite, GCC will also remove the loop itself.
   46269 
   46270      Be aware of this when performing timing tests, for instance the
   46271      following loop can be completely removed, provided
   46272      'some_expression' can provably not change any global state.
   46273 
   46274           {
   46275              int sum = 0;
   46276              int ix;
   46277 
   46278              for (ix = 0; ix != 10000; ix++)
   46279                 sum += some_expression;
   46280           }
   46281 
   46282      Even though 'sum' is accumulated in the loop, no use is made of
   46283      that summation, so the accumulation can be removed.
   46284 
   46285    * Making side effects happen in the same order as in some other
   46286      compiler.
   46287 
   46288      It is never safe to depend on the order of evaluation of side
   46289      effects.  For example, a function call like this may very well
   46290      behave differently from one compiler to another:
   46291 
   46292           void func (int, int);
   46293 
   46294           int i = 2;
   46295           func (i++, i++);
   46296 
   46297      There is no guarantee (in either the C or the C++ standard language
   46298      definitions) that the increments will be evaluated in any
   46299      particular order.  Either increment might happen first.  'func'
   46300      might get the arguments '2, 3', or it might get '3, 2', or even '2,
   46301      2'.
   46302 
   46303    * Making certain warnings into errors by default.
   46304 
   46305      Some ISO C testsuites report failure when the compiler does not
   46306      produce an error message for a certain program.
   46307 
   46308      ISO C requires a "diagnostic" message for certain kinds of invalid
   46309      programs, but a warning is defined by GCC to count as a diagnostic.
   46310      If GCC produces a warning but not an error, that is correct ISO C
   46311      support.  If testsuites call this "failure", they should be run
   46312      with the GCC option '-pedantic-errors', which will turn these
   46313      warnings into errors.
   46314 
   46315 
   46316 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
   46317 
   46318 11.9 Warning Messages and Error Messages
   46319 ========================================
   46320 
   46321 The GNU compiler can produce two kinds of diagnostics: errors and
   46322 warnings.  Each kind has a different purpose:
   46323 
   46324      "Errors" report problems that make it impossible to compile your
   46325      program.  GCC reports errors with the source file name and line
   46326      number where the problem is apparent.
   46327 
   46328      "Warnings" report other unusual conditions in your code that _may_
   46329      indicate a problem, although compilation can (and does) proceed.
   46330      Warning messages also report the source file name and line number,
   46331      but include the text 'warning:' to distinguish them from error
   46332      messages.
   46333 
   46334  Warnings may indicate danger points where you should check to make sure
   46335 that your program really does what you intend; or the use of obsolete
   46336 features; or the use of nonstandard features of GNU C or C++.  Many
   46337 warnings are issued only if you ask for them, with one of the '-W'
   46338 options (for instance, '-Wall' requests a variety of useful warnings).
   46339 
   46340  GCC always tries to compile your program if possible; it never
   46341 gratuitously rejects a program whose meaning is clear merely because
   46342 (for instance) it fails to conform to a standard.  In some cases,
   46343 however, the C and C++ standards specify that certain extensions are
   46344 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
   46345 The '-pedantic' option tells GCC to issue warnings in such cases;
   46346 '-pedantic-errors' says to make them errors instead.  This does not mean
   46347 that _all_ non-ISO constructs get warnings or errors.
   46348 
   46349  *Note Options to Request or Suppress Warnings: Warning Options, for
   46350 more detail on these and related command-line options.
   46351 
   46352 
   46353 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
   46354 
   46355 12 Reporting Bugs
   46356 *****************
   46357 
   46358 Your bug reports play an essential role in making GCC reliable.
   46359 
   46360  When you encounter a problem, the first thing to do is to see if it is
   46361 already known.  *Note Trouble::.  If it isn't known, then you should
   46362 report the problem.
   46363 
   46364 * Menu:
   46365 
   46366 * Criteria:  Bug Criteria.   Have you really found a bug?
   46367 * Reporting: Bug Reporting.  How to report a bug effectively.
   46368 * Known: Trouble.            Known problems.
   46369 * Help: Service.             Where to ask for help.
   46370 
   46371 
   46372 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
   46373 
   46374 12.1 Have You Found a Bug?
   46375 ==========================
   46376 
   46377 If you are not sure whether you have found a bug, here are some
   46378 guidelines:
   46379 
   46380    * If the compiler gets a fatal signal, for any input whatever, that
   46381      is a compiler bug.  Reliable compilers never crash.
   46382 
   46383    * If the compiler produces invalid assembly code, for any input
   46384      whatever (except an 'asm' statement), that is a compiler bug,
   46385      unless the compiler reports errors (not just warnings) which would
   46386      ordinarily prevent the assembler from being run.
   46387 
   46388    * If the compiler produces valid assembly code that does not
   46389      correctly execute the input source code, that is a compiler bug.
   46390 
   46391      However, you must double-check to make sure, because you may have a
   46392      program whose behavior is undefined, which happened by chance to
   46393      give the desired results with another C or C++ compiler.
   46394 
   46395      For example, in many nonoptimizing compilers, you can write 'x;' at
   46396      the end of a function instead of 'return x;', with the same
   46397      results.  But the value of the function is undefined if 'return' is
   46398      omitted; it is not a bug when GCC produces different results.
   46399 
   46400      Problems often result from expressions with two increment
   46401      operators, as in 'f (*p++, *p++)'.  Your previous compiler might
   46402      have interpreted that expression the way you intended; GCC might
   46403      interpret it another way.  Neither compiler is wrong.  The bug is
   46404      in your code.
   46405 
   46406      After you have localized the error to a single source line, it
   46407      should be easy to check for these things.  If your program is
   46408      correct and well defined, you have found a compiler bug.
   46409 
   46410    * If the compiler produces an error message for valid input, that is
   46411      a compiler bug.
   46412 
   46413    * If the compiler does not produce an error message for invalid
   46414      input, that is a compiler bug.  However, you should note that your
   46415      idea of "invalid input" might be someone else's idea of "an
   46416      extension" or "support for traditional practice".
   46417 
   46418    * If you are an experienced user of one of the languages GCC
   46419      supports, your suggestions for improvement of GCC are welcome in
   46420      any case.
   46421 
   46422 
   46423 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
   46424 
   46425 12.2 How and where to Report Bugs
   46426 =================================
   46427 
   46428 Bugs should be reported to the bug database at
   46429 <http://gcc.gnu.org/bugs.html>.
   46430 
   46431 
   46432 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
   46433 
   46434 13 How To Get Help with GCC
   46435 ***************************
   46436 
   46437 If you need help installing, using or changing GCC, there are two ways
   46438 to find it:
   46439 
   46440    * Send a message to a suitable network mailing list.  First try
   46441      <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if
   46442      that brings no response, try <gcc (a] gcc.gnu.org>.  For help changing
   46443      GCC, ask <gcc (a] gcc.gnu.org>.  If you think you have found a bug in
   46444      GCC, please report it following the instructions at *note Bug
   46445      Reporting::.
   46446 
   46447    * Look in the service directory for someone who might help you for a
   46448      fee.  The service directory is found at
   46449      <http://www.fsf.org/resources/service>.
   46450 
   46451  For further information, see <http://gcc.gnu.org/faq.html#support>.
   46452 
   46453 
   46454 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
   46455 
   46456 14 Contributing to GCC Development
   46457 **********************************
   46458 
   46459 If you would like to help pretest GCC releases to assure they work well,
   46460 current development sources are available by SVN (see
   46461 <http://gcc.gnu.org/svn.html>).  Source and binary snapshots are also
   46462 available for FTP; see <http://gcc.gnu.org/snapshots.html>.
   46463 
   46464  If you would like to work on improvements to GCC, please read the
   46465 advice at these URLs:
   46466 
   46467      <http://gcc.gnu.org/contribute.html>
   46468      <http://gcc.gnu.org/contributewhy.html>
   46469 
   46470 for information on how to make useful contributions and avoid
   46471 duplication of effort.  Suggested projects are listed at
   46472 <http://gcc.gnu.org/projects/>.
   46473 
   46474 
   46475 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
   46476 
   46477 Funding Free Software
   46478 *********************
   46479 
   46480 If you want to have more free software a few years from now, it makes
   46481 sense for you to help encourage people to contribute funds for its
   46482 development.  The most effective approach known is to encourage
   46483 commercial redistributors to donate.
   46484 
   46485  Users of free software systems can boost the pace of development by
   46486 encouraging for-a-fee distributors to donate part of their selling price
   46487 to free software developers--the Free Software Foundation, and others.
   46488 
   46489  The way to convince distributors to do this is to demand it and expect
   46490 it from them.  So when you compare distributors, judge them partly by
   46491 how much they give to free software development.  Show distributors they
   46492 must compete to be the one who gives the most.
   46493 
   46494  To make this approach work, you must insist on numbers that you can
   46495 compare, such as, "We will donate ten dollars to the Frobnitz project
   46496 for each disk sold."  Don't be satisfied with a vague promise, such as
   46497 "A portion of the profits are donated," since it doesn't give a basis
   46498 for comparison.
   46499 
   46500  Even a precise fraction "of the profits from this disk" is not very
   46501 meaningful, since creative accounting and unrelated business decisions
   46502 can greatly alter what fraction of the sales price counts as profit.  If
   46503 the price you pay is $50, ten percent of the profit is probably less
   46504 than a dollar; it might be a few cents, or nothing at all.
   46505 
   46506  Some redistributors do development work themselves.  This is useful
   46507 too; but to keep everyone honest, you need to inquire how much they do,
   46508 and what kind.  Some kinds of development make much more long-term
   46509 difference than others.  For example, maintaining a separate version of
   46510 a program contributes very little; maintaining the standard version of a
   46511 program for the whole community contributes much.  Easy new ports
   46512 contribute little, since someone else would surely do them; difficult
   46513 ports such as adding a new CPU to the GNU Compiler Collection contribute
   46514 more; major new features or packages contribute the most.
   46515 
   46516  By establishing the idea that supporting further development is "the
   46517 proper thing to do" when distributing free software for a fee, we can
   46518 assure a steady flow of resources into making more free software.
   46519 
   46520      Copyright (C) 1994 Free Software Foundation, Inc.
   46521      Verbatim copying and redistribution of this section is permitted
   46522      without royalty; alteration is not permitted.
   46523 
   46524 
   46525 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
   46526 
   46527 The GNU Project and GNU/Linux
   46528 *****************************
   46529 
   46530 The GNU Project was launched in 1984 to develop a complete Unix-like
   46531 operating system which is free software: the GNU system.  (GNU is a
   46532 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
   46533 Variants of the GNU operating system, which use the kernel Linux, are
   46534 now widely used; though these systems are often referred to as "Linux",
   46535 they are more accurately called GNU/Linux systems.
   46536 
   46537  For more information, see:
   46538      <http://www.gnu.org/>
   46539      <http://www.gnu.org/gnu/linux-and-gnu.html>
   46540 
   46541 
   46542 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
   46543 
   46544 GNU General Public License
   46545 **************************
   46546 
   46547                         Version 3, 29 June 2007
   46548 
   46549      Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
   46550 
   46551      Everyone is permitted to copy and distribute verbatim copies of this
   46552      license document, but changing it is not allowed.
   46553 
   46554 Preamble
   46555 ========
   46556 
   46557 The GNU General Public License is a free, copyleft license for software
   46558 and other kinds of works.
   46559 
   46560  The licenses for most software and other practical works are designed
   46561 to take away your freedom to share and change the works.  By contrast,
   46562 the GNU General Public License is intended to guarantee your freedom to
   46563 share and change all versions of a program-to make sure it remains free
   46564 software for all its users.  We, the Free Software Foundation, use the
   46565 GNU General Public License for most of our software; it applies also to
   46566 any other work released this way by its authors.  You can apply it to
   46567 your programs, too.
   46568 
   46569  When we speak of free software, we are referring to freedom, not price.
   46570 Our General Public Licenses are designed to make sure that you have the
   46571 freedom to distribute copies of free software (and charge for them if
   46572 you wish), that you receive source code or can get it if you want it,
   46573 that you can change the software or use pieces of it in new free
   46574 programs, and that you know you can do these things.
   46575 
   46576  To protect your rights, we need to prevent others from denying you
   46577 these rights or asking you to surrender the rights.  Therefore, you have
   46578 certain responsibilities if you distribute copies of the software, or if
   46579 you modify it: responsibilities to respect the freedom of others.
   46580 
   46581  For example, if you distribute copies of such a program, whether gratis
   46582 or for a fee, you must pass on to the recipients the same freedoms that
   46583 you received.  You must make sure that they, too, receive or can get the
   46584 source code.  And you must show them these terms so they know their
   46585 rights.
   46586 
   46587  Developers that use the GNU GPL protect your rights with two steps: (1)
   46588 assert copyright on the software, and (2) offer you this License giving
   46589 you legal permission to copy, distribute and/or modify it.
   46590 
   46591  For the developers' and authors' protection, the GPL clearly explains
   46592 that there is no warranty for this free software.  For both users' and
   46593 authors' sake, the GPL requires that modified versions be marked as
   46594 changed, so that their problems will not be attributed erroneously to
   46595 authors of previous versions.
   46596 
   46597  Some devices are designed to deny users access to install or run
   46598 modified versions of the software inside them, although the manufacturer
   46599 can do so.  This is fundamentally incompatible with the aim of
   46600 protecting users' freedom to change the software.  The systematic
   46601 pattern of such abuse occurs in the area of products for individuals to
   46602 use, which is precisely where it is most unacceptable.  Therefore, we
   46603 have designed this version of the GPL to prohibit the practice for those
   46604 products.  If such problems arise substantially in other domains, we
   46605 stand ready to extend this provision to those domains in future versions
   46606 of the GPL, as needed to protect the freedom of users.
   46607 
   46608  Finally, every program is threatened constantly by software patents.
   46609 States should not allow patents to restrict development and use of
   46610 software on general-purpose computers, but in those that do, we wish to
   46611 avoid the special danger that patents applied to a free program could
   46612 make it effectively proprietary.  To prevent this, the GPL assures that
   46613 patents cannot be used to render the program non-free.
   46614 
   46615  The precise terms and conditions for copying, distribution and
   46616 modification follow.
   46617 
   46618 TERMS AND CONDITIONS
   46619 ====================
   46620 
   46621   0. Definitions.
   46622 
   46623      "This License" refers to version 3 of the GNU General Public
   46624      License.
   46625 
   46626      "Copyright" also means copyright-like laws that apply to other
   46627      kinds of works, such as semiconductor masks.
   46628 
   46629      "The Program" refers to any copyrightable work licensed under this
   46630      License.  Each licensee is addressed as "you".  "Licensees" and
   46631      "recipients" may be individuals or organizations.
   46632 
   46633      To "modify" a work means to copy from or adapt all or part of the
   46634      work in a fashion requiring copyright permission, other than the
   46635      making of an exact copy.  The resulting work is called a "modified
   46636      version" of the earlier work or a work "based on" the earlier work.
   46637 
   46638      A "covered work" means either the unmodified Program or a work
   46639      based on the Program.
   46640 
   46641      To "propagate" a work means to do anything with it that, without
   46642      permission, would make you directly or secondarily liable for
   46643      infringement under applicable copyright law, except executing it on
   46644      a computer or modifying a private copy.  Propagation includes
   46645      copying, distribution (with or without modification), making
   46646      available to the public, and in some countries other activities as
   46647      well.
   46648 
   46649      To "convey" a work means any kind of propagation that enables other
   46650      parties to make or receive copies.  Mere interaction with a user
   46651      through a computer network, with no transfer of a copy, is not
   46652      conveying.
   46653 
   46654      An interactive user interface displays "Appropriate Legal Notices"
   46655      to the extent that it includes a convenient and prominently visible
   46656      feature that (1) displays an appropriate copyright notice, and (2)
   46657      tells the user that there is no warranty for the work (except to
   46658      the extent that warranties are provided), that licensees may convey
   46659      the work under this License, and how to view a copy of this
   46660      License.  If the interface presents a list of user commands or
   46661      options, such as a menu, a prominent item in the list meets this
   46662      criterion.
   46663 
   46664   1. Source Code.
   46665 
   46666      The "source code" for a work means the preferred form of the work
   46667      for making modifications to it.  "Object code" means any non-source
   46668      form of a work.
   46669 
   46670      A "Standard Interface" means an interface that either is an
   46671      official standard defined by a recognized standards body, or, in
   46672      the case of interfaces specified for a particular programming
   46673      language, one that is widely used among developers working in that
   46674      language.
   46675 
   46676      The "System Libraries" of an executable work include anything,
   46677      other than the work as a whole, that (a) is included in the normal
   46678      form of packaging a Major Component, but which is not part of that
   46679      Major Component, and (b) serves only to enable use of the work with
   46680      that Major Component, or to implement a Standard Interface for
   46681      which an implementation is available to the public in source code
   46682      form.  A "Major Component", in this context, means a major
   46683      essential component (kernel, window system, and so on) of the
   46684      specific operating system (if any) on which the executable work
   46685      runs, or a compiler used to produce the work, or an object code
   46686      interpreter used to run it.
   46687 
   46688      The "Corresponding Source" for a work in object code form means all
   46689      the source code needed to generate, install, and (for an executable
   46690      work) run the object code and to modify the work, including scripts
   46691      to control those activities.  However, it does not include the
   46692      work's System Libraries, or general-purpose tools or generally
   46693      available free programs which are used unmodified in performing
   46694      those activities but which are not part of the work.  For example,
   46695      Corresponding Source includes interface definition files associated
   46696      with source files for the work, and the source code for shared
   46697      libraries and dynamically linked subprograms that the work is
   46698      specifically designed to require, such as by intimate data
   46699      communication or control flow between those subprograms and other
   46700      parts of the work.
   46701 
   46702      The Corresponding Source need not include anything that users can
   46703      regenerate automatically from other parts of the Corresponding
   46704      Source.
   46705 
   46706      The Corresponding Source for a work in source code form is that
   46707      same work.
   46708 
   46709   2. Basic Permissions.
   46710 
   46711      All rights granted under this License are granted for the term of
   46712      copyright on the Program, and are irrevocable provided the stated
   46713      conditions are met.  This License explicitly affirms your unlimited
   46714      permission to run the unmodified Program.  The output from running
   46715      a covered work is covered by this License only if the output, given
   46716      its content, constitutes a covered work.  This License acknowledges
   46717      your rights of fair use or other equivalent, as provided by
   46718      copyright law.
   46719 
   46720      You may make, run and propagate covered works that you do not
   46721      convey, without conditions so long as your license otherwise
   46722      remains in force.  You may convey covered works to others for the
   46723      sole purpose of having them make modifications exclusively for you,
   46724      or provide you with facilities for running those works, provided
   46725      that you comply with the terms of this License in conveying all
   46726      material for which you do not control copyright.  Those thus making
   46727      or running the covered works for you must do so exclusively on your
   46728      behalf, under your direction and control, on terms that prohibit
   46729      them from making any copies of your copyrighted material outside
   46730      their relationship with you.
   46731 
   46732      Conveying under any other circumstances is permitted solely under
   46733      the conditions stated below.  Sublicensing is not allowed; section
   46734      10 makes it unnecessary.
   46735 
   46736   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   46737 
   46738      No covered work shall be deemed part of an effective technological
   46739      measure under any applicable law fulfilling obligations under
   46740      article 11 of the WIPO copyright treaty adopted on 20 December
   46741      1996, or similar laws prohibiting or restricting circumvention of
   46742      such measures.
   46743 
   46744      When you convey a covered work, you waive any legal power to forbid
   46745      circumvention of technological measures to the extent such
   46746      circumvention is effected by exercising rights under this License
   46747      with respect to the covered work, and you disclaim any intention to
   46748      limit operation or modification of the work as a means of
   46749      enforcing, against the work's users, your or third parties' legal
   46750      rights to forbid circumvention of technological measures.
   46751 
   46752   4. Conveying Verbatim Copies.
   46753 
   46754      You may convey verbatim copies of the Program's source code as you
   46755      receive it, in any medium, provided that you conspicuously and
   46756      appropriately publish on each copy an appropriate copyright notice;
   46757      keep intact all notices stating that this License and any
   46758      non-permissive terms added in accord with section 7 apply to the
   46759      code; keep intact all notices of the absence of any warranty; and
   46760      give all recipients a copy of this License along with the Program.
   46761 
   46762      You may charge any price or no price for each copy that you convey,
   46763      and you may offer support or warranty protection for a fee.
   46764 
   46765   5. Conveying Modified Source Versions.
   46766 
   46767      You may convey a work based on the Program, or the modifications to
   46768      produce it from the Program, in the form of source code under the
   46769      terms of section 4, provided that you also meet all of these
   46770      conditions:
   46771 
   46772        a. The work must carry prominent notices stating that you
   46773           modified it, and giving a relevant date.
   46774 
   46775        b. The work must carry prominent notices stating that it is
   46776           released under this License and any conditions added under
   46777           section 7.  This requirement modifies the requirement in
   46778           section 4 to "keep intact all notices".
   46779 
   46780        c. You must license the entire work, as a whole, under this
   46781           License to anyone who comes into possession of a copy.  This
   46782           License will therefore apply, along with any applicable
   46783           section 7 additional terms, to the whole of the work, and all
   46784           its parts, regardless of how they are packaged.  This License
   46785           gives no permission to license the work in any other way, but
   46786           it does not invalidate such permission if you have separately
   46787           received it.
   46788 
   46789        d. If the work has interactive user interfaces, each must display
   46790           Appropriate Legal Notices; however, if the Program has
   46791           interactive interfaces that do not display Appropriate Legal
   46792           Notices, your work need not make them do so.
   46793 
   46794      A compilation of a covered work with other separate and independent
   46795      works, which are not by their nature extensions of the covered
   46796      work, and which are not combined with it such as to form a larger
   46797      program, in or on a volume of a storage or distribution medium, is
   46798      called an "aggregate" if the compilation and its resulting
   46799      copyright are not used to limit the access or legal rights of the
   46800      compilation's users beyond what the individual works permit.
   46801      Inclusion of a covered work in an aggregate does not cause this
   46802      License to apply to the other parts of the aggregate.
   46803 
   46804   6. Conveying Non-Source Forms.
   46805 
   46806      You may convey a covered work in object code form under the terms
   46807      of sections 4 and 5, provided that you also convey the
   46808      machine-readable Corresponding Source under the terms of this
   46809      License, in one of these ways:
   46810 
   46811        a. Convey the object code in, or embodied in, a physical product
   46812           (including a physical distribution medium), accompanied by the
   46813           Corresponding Source fixed on a durable physical medium
   46814           customarily used for software interchange.
   46815 
   46816        b. Convey the object code in, or embodied in, a physical product
   46817           (including a physical distribution medium), accompanied by a
   46818           written offer, valid for at least three years and valid for as
   46819           long as you offer spare parts or customer support for that
   46820           product model, to give anyone who possesses the object code
   46821           either (1) a copy of the Corresponding Source for all the
   46822           software in the product that is covered by this License, on a
   46823           durable physical medium customarily used for software
   46824           interchange, for a price no more than your reasonable cost of
   46825           physically performing this conveying of source, or (2) access
   46826           to copy the Corresponding Source from a network server at no
   46827           charge.
   46828 
   46829        c. Convey individual copies of the object code with a copy of the
   46830           written offer to provide the Corresponding Source.  This
   46831           alternative is allowed only occasionally and noncommercially,
   46832           and only if you received the object code with such an offer,
   46833           in accord with subsection 6b.
   46834 
   46835        d. Convey the object code by offering access from a designated
   46836           place (gratis or for a charge), and offer equivalent access to
   46837           the Corresponding Source in the same way through the same
   46838           place at no further charge.  You need not require recipients
   46839           to copy the Corresponding Source along with the object code.
   46840           If the place to copy the object code is a network server, the
   46841           Corresponding Source may be on a different server (operated by
   46842           you or a third party) that supports equivalent copying
   46843           facilities, provided you maintain clear directions next to the
   46844           object code saying where to find the Corresponding Source.
   46845           Regardless of what server hosts the Corresponding Source, you
   46846           remain obligated to ensure that it is available for as long as
   46847           needed to satisfy these requirements.
   46848 
   46849        e. Convey the object code using peer-to-peer transmission,
   46850           provided you inform other peers where the object code and
   46851           Corresponding Source of the work are being offered to the
   46852           general public at no charge under subsection 6d.
   46853 
   46854      A separable portion of the object code, whose source code is
   46855      excluded from the Corresponding Source as a System Library, need
   46856      not be included in conveying the object code work.
   46857 
   46858      A "User Product" is either (1) a "consumer product", which means
   46859      any tangible personal property which is normally used for personal,
   46860      family, or household purposes, or (2) anything designed or sold for
   46861      incorporation into a dwelling.  In determining whether a product is
   46862      a consumer product, doubtful cases shall be resolved in favor of
   46863      coverage.  For a particular product received by a particular user,
   46864      "normally used" refers to a typical or common use of that class of
   46865      product, regardless of the status of the particular user or of the
   46866      way in which the particular user actually uses, or expects or is
   46867      expected to use, the product.  A product is a consumer product
   46868      regardless of whether the product has substantial commercial,
   46869      industrial or non-consumer uses, unless such uses represent the
   46870      only significant mode of use of the product.
   46871 
   46872      "Installation Information" for a User Product means any methods,
   46873      procedures, authorization keys, or other information required to
   46874      install and execute modified versions of a covered work in that
   46875      User Product from a modified version of its Corresponding Source.
   46876      The information must suffice to ensure that the continued
   46877      functioning of the modified object code is in no case prevented or
   46878      interfered with solely because modification has been made.
   46879 
   46880      If you convey an object code work under this section in, or with,
   46881      or specifically for use in, a User Product, and the conveying
   46882      occurs as part of a transaction in which the right of possession
   46883      and use of the User Product is transferred to the recipient in
   46884      perpetuity or for a fixed term (regardless of how the transaction
   46885      is characterized), the Corresponding Source conveyed under this
   46886      section must be accompanied by the Installation Information.  But
   46887      this requirement does not apply if neither you nor any third party
   46888      retains the ability to install modified object code on the User
   46889      Product (for example, the work has been installed in ROM).
   46890 
   46891      The requirement to provide Installation Information does not
   46892      include a requirement to continue to provide support service,
   46893      warranty, or updates for a work that has been modified or installed
   46894      by the recipient, or for the User Product in which it has been
   46895      modified or installed.  Access to a network may be denied when the
   46896      modification itself materially and adversely affects the operation
   46897      of the network or violates the rules and protocols for
   46898      communication across the network.
   46899 
   46900      Corresponding Source conveyed, and Installation Information
   46901      provided, in accord with this section must be in a format that is
   46902      publicly documented (and with an implementation available to the
   46903      public in source code form), and must require no special password
   46904      or key for unpacking, reading or copying.
   46905 
   46906   7. Additional Terms.
   46907 
   46908      "Additional permissions" are terms that supplement the terms of
   46909      this License by making exceptions from one or more of its
   46910      conditions.  Additional permissions that are applicable to the
   46911      entire Program shall be treated as though they were included in
   46912      this License, to the extent that they are valid under applicable
   46913      law.  If additional permissions apply only to part of the Program,
   46914      that part may be used separately under those permissions, but the
   46915      entire Program remains governed by this License without regard to
   46916      the additional permissions.
   46917 
   46918      When you convey a copy of a covered work, you may at your option
   46919      remove any additional permissions from that copy, or from any part
   46920      of it.  (Additional permissions may be written to require their own
   46921      removal in certain cases when you modify the work.)  You may place
   46922      additional permissions on material, added by you to a covered work,
   46923      for which you have or can give appropriate copyright permission.
   46924 
   46925      Notwithstanding any other provision of this License, for material
   46926      you add to a covered work, you may (if authorized by the copyright
   46927      holders of that material) supplement the terms of this License with
   46928      terms:
   46929 
   46930        a. Disclaiming warranty or limiting liability differently from
   46931           the terms of sections 15 and 16 of this License; or
   46932 
   46933        b. Requiring preservation of specified reasonable legal notices
   46934           or author attributions in that material or in the Appropriate
   46935           Legal Notices displayed by works containing it; or
   46936 
   46937        c. Prohibiting misrepresentation of the origin of that material,
   46938           or requiring that modified versions of such material be marked
   46939           in reasonable ways as different from the original version; or
   46940 
   46941        d. Limiting the use for publicity purposes of names of licensors
   46942           or authors of the material; or
   46943 
   46944        e. Declining to grant rights under trademark law for use of some
   46945           trade names, trademarks, or service marks; or
   46946 
   46947        f. Requiring indemnification of licensors and authors of that
   46948           material by anyone who conveys the material (or modified
   46949           versions of it) with contractual assumptions of liability to
   46950           the recipient, for any liability that these contractual
   46951           assumptions directly impose on those licensors and authors.
   46952 
   46953      All other non-permissive additional terms are considered "further
   46954      restrictions" within the meaning of section 10.  If the Program as
   46955      you received it, or any part of it, contains a notice stating that
   46956      it is governed by this License along with a term that is a further
   46957      restriction, you may remove that term.  If a license document
   46958      contains a further restriction but permits relicensing or conveying
   46959      under this License, you may add to a covered work material governed
   46960      by the terms of that license document, provided that the further
   46961      restriction does not survive such relicensing or conveying.
   46962 
   46963      If you add terms to a covered work in accord with this section, you
   46964      must place, in the relevant source files, a statement of the
   46965      additional terms that apply to those files, or a notice indicating
   46966      where to find the applicable terms.
   46967 
   46968      Additional terms, permissive or non-permissive, may be stated in
   46969      the form of a separately written license, or stated as exceptions;
   46970      the above requirements apply either way.
   46971 
   46972   8. Termination.
   46973 
   46974      You may not propagate or modify a covered work except as expressly
   46975      provided under this License.  Any attempt otherwise to propagate or
   46976      modify it is void, and will automatically terminate your rights
   46977      under this License (including any patent licenses granted under the
   46978      third paragraph of section 11).
   46979 
   46980      However, if you cease all violation of this License, then your
   46981      license from a particular copyright holder is reinstated (a)
   46982      provisionally, unless and until the copyright holder explicitly and
   46983      finally terminates your license, and (b) permanently, if the
   46984      copyright holder fails to notify you of the violation by some
   46985      reasonable means prior to 60 days after the cessation.
   46986 
   46987      Moreover, your license from a particular copyright holder is
   46988      reinstated permanently if the copyright holder notifies you of the
   46989      violation by some reasonable means, this is the first time you have
   46990      received notice of violation of this License (for any work) from
   46991      that copyright holder, and you cure the violation prior to 30 days
   46992      after your receipt of the notice.
   46993 
   46994      Termination of your rights under this section does not terminate
   46995      the licenses of parties who have received copies or rights from you
   46996      under this License.  If your rights have been terminated and not
   46997      permanently reinstated, you do not qualify to receive new licenses
   46998      for the same material under section 10.
   46999 
   47000   9. Acceptance Not Required for Having Copies.
   47001 
   47002      You are not required to accept this License in order to receive or
   47003      run a copy of the Program.  Ancillary propagation of a covered work
   47004      occurring solely as a consequence of using peer-to-peer
   47005      transmission to receive a copy likewise does not require
   47006      acceptance.  However, nothing other than this License grants you
   47007      permission to propagate or modify any covered work.  These actions
   47008      infringe copyright if you do not accept this License.  Therefore,
   47009      by modifying or propagating a covered work, you indicate your
   47010      acceptance of this License to do so.
   47011 
   47012   10. Automatic Licensing of Downstream Recipients.
   47013 
   47014      Each time you convey a covered work, the recipient automatically
   47015      receives a license from the original licensors, to run, modify and
   47016      propagate that work, subject to this License.  You are not
   47017      responsible for enforcing compliance by third parties with this
   47018      License.
   47019 
   47020      An "entity transaction" is a transaction transferring control of an
   47021      organization, or substantially all assets of one, or subdividing an
   47022      organization, or merging organizations.  If propagation of a
   47023      covered work results from an entity transaction, each party to that
   47024      transaction who receives a copy of the work also receives whatever
   47025      licenses to the work the party's predecessor in interest had or
   47026      could give under the previous paragraph, plus a right to possession
   47027      of the Corresponding Source of the work from the predecessor in
   47028      interest, if the predecessor has it or can get it with reasonable
   47029      efforts.
   47030 
   47031      You may not impose any further restrictions on the exercise of the
   47032      rights granted or affirmed under this License.  For example, you
   47033      may not impose a license fee, royalty, or other charge for exercise
   47034      of rights granted under this License, and you may not initiate
   47035      litigation (including a cross-claim or counterclaim in a lawsuit)
   47036      alleging that any patent claim is infringed by making, using,
   47037      selling, offering for sale, or importing the Program or any portion
   47038      of it.
   47039 
   47040   11. Patents.
   47041 
   47042      A "contributor" is a copyright holder who authorizes use under this
   47043      License of the Program or a work on which the Program is based.
   47044      The work thus licensed is called the contributor's "contributor
   47045      version".
   47046 
   47047      A contributor's "essential patent claims" are all patent claims
   47048      owned or controlled by the contributor, whether already acquired or
   47049      hereafter acquired, that would be infringed by some manner,
   47050      permitted by this License, of making, using, or selling its
   47051      contributor version, but do not include claims that would be
   47052      infringed only as a consequence of further modification of the
   47053      contributor version.  For purposes of this definition, "control"
   47054      includes the right to grant patent sublicenses in a manner
   47055      consistent with the requirements of this License.
   47056 
   47057      Each contributor grants you a non-exclusive, worldwide,
   47058      royalty-free patent license under the contributor's essential
   47059      patent claims, to make, use, sell, offer for sale, import and
   47060      otherwise run, modify and propagate the contents of its contributor
   47061      version.
   47062 
   47063      In the following three paragraphs, a "patent license" is any
   47064      express agreement or commitment, however denominated, not to
   47065      enforce a patent (such as an express permission to practice a
   47066      patent or covenant not to sue for patent infringement).  To "grant"
   47067      such a patent license to a party means to make such an agreement or
   47068      commitment not to enforce a patent against the party.
   47069 
   47070      If you convey a covered work, knowingly relying on a patent
   47071      license, and the Corresponding Source of the work is not available
   47072      for anyone to copy, free of charge and under the terms of this
   47073      License, through a publicly available network server or other
   47074      readily accessible means, then you must either (1) cause the
   47075      Corresponding Source to be so available, or (2) arrange to deprive
   47076      yourself of the benefit of the patent license for this particular
   47077      work, or (3) arrange, in a manner consistent with the requirements
   47078      of this License, to extend the patent license to downstream
   47079      recipients.  "Knowingly relying" means you have actual knowledge
   47080      that, but for the patent license, your conveying the covered work
   47081      in a country, or your recipient's use of the covered work in a
   47082      country, would infringe one or more identifiable patents in that
   47083      country that you have reason to believe are valid.
   47084 
   47085      If, pursuant to or in connection with a single transaction or
   47086      arrangement, you convey, or propagate by procuring conveyance of, a
   47087      covered work, and grant a patent license to some of the parties
   47088      receiving the covered work authorizing them to use, propagate,
   47089      modify or convey a specific copy of the covered work, then the
   47090      patent license you grant is automatically extended to all
   47091      recipients of the covered work and works based on it.
   47092 
   47093      A patent license is "discriminatory" if it does not include within
   47094      the scope of its coverage, prohibits the exercise of, or is
   47095      conditioned on the non-exercise of one or more of the rights that
   47096      are specifically granted under this License.  You may not convey a
   47097      covered work if you are a party to an arrangement with a third
   47098      party that is in the business of distributing software, under which
   47099      you make payment to the third party based on the extent of your
   47100      activity of conveying the work, and under which the third party
   47101      grants, to any of the parties who would receive the covered work
   47102      from you, a discriminatory patent license (a) in connection with
   47103      copies of the covered work conveyed by you (or copies made from
   47104      those copies), or (b) primarily for and in connection with specific
   47105      products or compilations that contain the covered work, unless you
   47106      entered into that arrangement, or that patent license was granted,
   47107      prior to 28 March 2007.
   47108 
   47109      Nothing in this License shall be construed as excluding or limiting
   47110      any implied license or other defenses to infringement that may
   47111      otherwise be available to you under applicable patent law.
   47112 
   47113   12. No Surrender of Others' Freedom.
   47114 
   47115      If conditions are imposed on you (whether by court order, agreement
   47116      or otherwise) that contradict the conditions of this License, they
   47117      do not excuse you from the conditions of this License.  If you
   47118      cannot convey a covered work so as to satisfy simultaneously your
   47119      obligations under this License and any other pertinent obligations,
   47120      then as a consequence you may not convey it at all.  For example,
   47121      if you agree to terms that obligate you to collect a royalty for
   47122      further conveying from those to whom you convey the Program, the
   47123      only way you could satisfy both those terms and this License would
   47124      be to refrain entirely from conveying the Program.
   47125 
   47126   13. Use with the GNU Affero General Public License.
   47127 
   47128      Notwithstanding any other provision of this License, you have
   47129      permission to link or combine any covered work with a work licensed
   47130      under version 3 of the GNU Affero General Public License into a
   47131      single combined work, and to convey the resulting work.  The terms
   47132      of this License will continue to apply to the part which is the
   47133      covered work, but the special requirements of the GNU Affero
   47134      General Public License, section 13, concerning interaction through
   47135      a network will apply to the combination as such.
   47136 
   47137   14. Revised Versions of this License.
   47138 
   47139      The Free Software Foundation may publish revised and/or new
   47140      versions of the GNU General Public License from time to time.  Such
   47141      new versions will be similar in spirit to the present version, but
   47142      may differ in detail to address new problems or concerns.
   47143 
   47144      Each version is given a distinguishing version number.  If the
   47145      Program specifies that a certain numbered version of the GNU
   47146      General Public License "or any later version" applies to it, you
   47147      have the option of following the terms and conditions either of
   47148      that numbered version or of any later version published by the Free
   47149      Software Foundation.  If the Program does not specify a version
   47150      number of the GNU General Public License, you may choose any
   47151      version ever published by the Free Software Foundation.
   47152 
   47153      If the Program specifies that a proxy can decide which future
   47154      versions of the GNU General Public License can be used, that
   47155      proxy's public statement of acceptance of a version permanently
   47156      authorizes you to choose that version for the Program.
   47157 
   47158      Later license versions may give you additional or different
   47159      permissions.  However, no additional obligations are imposed on any
   47160      author or copyright holder as a result of your choosing to follow a
   47161      later version.
   47162 
   47163   15. Disclaimer of Warranty.
   47164 
   47165      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   47166      APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   47167      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   47168      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   47169      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   47170      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
   47171      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   47172      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   47173      NECESSARY SERVICING, REPAIR OR CORRECTION.
   47174 
   47175   16. Limitation of Liability.
   47176 
   47177      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   47178      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   47179      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
   47180      DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   47181      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   47182      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   47183      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   47184      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   47185      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   47186      THE POSSIBILITY OF SUCH DAMAGES.
   47187 
   47188   17. Interpretation of Sections 15 and 16.
   47189 
   47190      If the disclaimer of warranty and limitation of liability provided
   47191      above cannot be given local legal effect according to their terms,
   47192      reviewing courts shall apply local law that most closely
   47193      approximates an absolute waiver of all civil liability in
   47194      connection with the Program, unless a warranty or assumption of
   47195      liability accompanies a copy of the Program in return for a fee.
   47196 
   47197 END OF TERMS AND CONDITIONS
   47198 ===========================
   47199 
   47200 How to Apply These Terms to Your New Programs
   47201 =============================================
   47202 
   47203 If you develop a new program, and you want it to be of the greatest
   47204 possible use to the public, the best way to achieve this is to make it
   47205 free software which everyone can redistribute and change under these
   47206 terms.
   47207 
   47208  To do so, attach the following notices to the program.  It is safest to
   47209 attach them to the start of each source file to most effectively state
   47210 the exclusion of warranty; and each file should have at least the
   47211 "copyright" line and a pointer to where the full notice is found.
   47212 
   47213      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   47214      Copyright (C) YEAR NAME OF AUTHOR
   47215 
   47216      This program is free software: you can redistribute it and/or modify
   47217      it under the terms of the GNU General Public License as published by
   47218      the Free Software Foundation, either version 3 of the License, or (at
   47219      your option) any later version.
   47220 
   47221      This program is distributed in the hope that it will be useful, but
   47222      WITHOUT ANY WARRANTY; without even the implied warranty of
   47223      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   47224      General Public License for more details.
   47225 
   47226      You should have received a copy of the GNU General Public License
   47227      along with this program.  If not, see <http://www.gnu.org/licenses/>.
   47228 
   47229  Also add information on how to contact you by electronic and paper
   47230 mail.
   47231 
   47232  If the program does terminal interaction, make it output a short notice
   47233 like this when it starts in an interactive mode:
   47234 
   47235      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   47236      This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
   47237      This is free software, and you are welcome to redistribute it
   47238      under certain conditions; type 'show c' for details.
   47239 
   47240  The hypothetical commands 'show w' and 'show c' should show the
   47241 appropriate parts of the General Public License.  Of course, your
   47242 program's commands might be different; for a GUI interface, you would
   47243 use an "about box".
   47244 
   47245  You should also get your employer (if you work as a programmer) or
   47246 school, if any, to sign a "copyright disclaimer" for the program, if
   47247 necessary.  For more information on this, and how to apply and follow
   47248 the GNU GPL, see <http://www.gnu.org/licenses/>.
   47249 
   47250  The GNU General Public License does not permit incorporating your
   47251 program into proprietary programs.  If your program is a subroutine
   47252 library, you may consider it more useful to permit linking proprietary
   47253 applications with the library.  If this is what you want to do, use the
   47254 GNU Lesser General Public License instead of this License.  But first,
   47255 please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
   47256 
   47257 
   47258 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
   47259 
   47260 GNU Free Documentation License
   47261 ******************************
   47262 
   47263                      Version 1.3, 3 November 2008
   47264 
   47265      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   47266      <http://fsf.org/>
   47267 
   47268      Everyone is permitted to copy and distribute verbatim copies
   47269      of this license document, but changing it is not allowed.
   47270 
   47271   0. PREAMBLE
   47272 
   47273      The purpose of this License is to make a manual, textbook, or other
   47274      functional and useful document "free" in the sense of freedom: to
   47275      assure everyone the effective freedom to copy and redistribute it,
   47276      with or without modifying it, either commercially or
   47277      noncommercially.  Secondarily, this License preserves for the
   47278      author and publisher a way to get credit for their work, while not
   47279      being considered responsible for modifications made by others.
   47280 
   47281      This License is a kind of "copyleft", which means that derivative
   47282      works of the document must themselves be free in the same sense.
   47283      It complements the GNU General Public License, which is a copyleft
   47284      license designed for free software.
   47285 
   47286      We have designed this License in order to use it for manuals for
   47287      free software, because free software needs free documentation: a
   47288      free program should come with manuals providing the same freedoms
   47289      that the software does.  But this License is not limited to
   47290      software manuals; it can be used for any textual work, regardless
   47291      of subject matter or whether it is published as a printed book.  We
   47292      recommend this License principally for works whose purpose is
   47293      instruction or reference.
   47294 
   47295   1. APPLICABILITY AND DEFINITIONS
   47296 
   47297      This License applies to any manual or other work, in any medium,
   47298      that contains a notice placed by the copyright holder saying it can
   47299      be distributed under the terms of this License.  Such a notice
   47300      grants a world-wide, royalty-free license, unlimited in duration,
   47301      to use that work under the conditions stated herein.  The
   47302      "Document", below, refers to any such manual or work.  Any member
   47303      of the public is a licensee, and is addressed as "you".  You accept
   47304      the license if you copy, modify or distribute the work in a way
   47305      requiring permission under copyright law.
   47306 
   47307      A "Modified Version" of the Document means any work containing the
   47308      Document or a portion of it, either copied verbatim, or with
   47309      modifications and/or translated into another language.
   47310 
   47311      A "Secondary Section" is a named appendix or a front-matter section
   47312      of the Document that deals exclusively with the relationship of the
   47313      publishers or authors of the Document to the Document's overall
   47314      subject (or to related matters) and contains nothing that could
   47315      fall directly within that overall subject.  (Thus, if the Document
   47316      is in part a textbook of mathematics, a Secondary Section may not
   47317      explain any mathematics.)  The relationship could be a matter of
   47318      historical connection with the subject or with related matters, or
   47319      of legal, commercial, philosophical, ethical or political position
   47320      regarding them.
   47321 
   47322      The "Invariant Sections" are certain Secondary Sections whose
   47323      titles are designated, as being those of Invariant Sections, in the
   47324      notice that says that the Document is released under this License.
   47325      If a section does not fit the above definition of Secondary then it
   47326      is not allowed to be designated as Invariant.  The Document may
   47327      contain zero Invariant Sections.  If the Document does not identify
   47328      any Invariant Sections then there are none.
   47329 
   47330      The "Cover Texts" are certain short passages of text that are
   47331      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   47332      that says that the Document is released under this License.  A
   47333      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   47334      be at most 25 words.
   47335 
   47336      A "Transparent" copy of the Document means a machine-readable copy,
   47337      represented in a format whose specification is available to the
   47338      general public, that is suitable for revising the document
   47339      straightforwardly with generic text editors or (for images composed
   47340      of pixels) generic paint programs or (for drawings) some widely
   47341      available drawing editor, and that is suitable for input to text
   47342      formatters or for automatic translation to a variety of formats
   47343      suitable for input to text formatters.  A copy made in an otherwise
   47344      Transparent file format whose markup, or absence of markup, has
   47345      been arranged to thwart or discourage subsequent modification by
   47346      readers is not Transparent.  An image format is not Transparent if
   47347      used for any substantial amount of text.  A copy that is not
   47348      "Transparent" is called "Opaque".
   47349 
   47350      Examples of suitable formats for Transparent copies include plain
   47351      ASCII without markup, Texinfo input format, LaTeX input format,
   47352      SGML or XML using a publicly available DTD, and standard-conforming
   47353      simple HTML, PostScript or PDF designed for human modification.
   47354      Examples of transparent image formats include PNG, XCF and JPG.
   47355      Opaque formats include proprietary formats that can be read and
   47356      edited only by proprietary word processors, SGML or XML for which
   47357      the DTD and/or processing tools are not generally available, and
   47358      the machine-generated HTML, PostScript or PDF produced by some word
   47359      processors for output purposes only.
   47360 
   47361      The "Title Page" means, for a printed book, the title page itself,
   47362      plus such following pages as are needed to hold, legibly, the
   47363      material this License requires to appear in the title page.  For
   47364      works in formats which do not have any title page as such, "Title
   47365      Page" means the text near the most prominent appearance of the
   47366      work's title, preceding the beginning of the body of the text.
   47367 
   47368      The "publisher" means any person or entity that distributes copies
   47369      of the Document to the public.
   47370 
   47371      A section "Entitled XYZ" means a named subunit of the Document
   47372      whose title either is precisely XYZ or contains XYZ in parentheses
   47373      following text that translates XYZ in another language.  (Here XYZ
   47374      stands for a specific section name mentioned below, such as
   47375      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   47376      To "Preserve the Title" of such a section when you modify the
   47377      Document means that it remains a section "Entitled XYZ" according
   47378      to this definition.
   47379 
   47380      The Document may include Warranty Disclaimers next to the notice
   47381      which states that this License applies to the Document.  These
   47382      Warranty Disclaimers are considered to be included by reference in
   47383      this License, but only as regards disclaiming warranties: any other
   47384      implication that these Warranty Disclaimers may have is void and
   47385      has no effect on the meaning of this License.
   47386 
   47387   2. VERBATIM COPYING
   47388 
   47389      You may copy and distribute the Document in any medium, either
   47390      commercially or noncommercially, provided that this License, the
   47391      copyright notices, and the license notice saying this License
   47392      applies to the Document are reproduced in all copies, and that you
   47393      add no other conditions whatsoever to those of this License.  You
   47394      may not use technical measures to obstruct or control the reading
   47395      or further copying of the copies you make or distribute.  However,
   47396      you may accept compensation in exchange for copies.  If you
   47397      distribute a large enough number of copies you must also follow the
   47398      conditions in section 3.
   47399 
   47400      You may also lend copies, under the same conditions stated above,
   47401      and you may publicly display copies.
   47402 
   47403   3. COPYING IN QUANTITY
   47404 
   47405      If you publish printed copies (or copies in media that commonly
   47406      have printed covers) of the Document, numbering more than 100, and
   47407      the Document's license notice requires Cover Texts, you must
   47408      enclose the copies in covers that carry, clearly and legibly, all
   47409      these Cover Texts: Front-Cover Texts on the front cover, and
   47410      Back-Cover Texts on the back cover.  Both covers must also clearly
   47411      and legibly identify you as the publisher of these copies.  The
   47412      front cover must present the full title with all words of the title
   47413      equally prominent and visible.  You may add other material on the
   47414      covers in addition.  Copying with changes limited to the covers, as
   47415      long as they preserve the title of the Document and satisfy these
   47416      conditions, can be treated as verbatim copying in other respects.
   47417 
   47418      If the required texts for either cover are too voluminous to fit
   47419      legibly, you should put the first ones listed (as many as fit
   47420      reasonably) on the actual cover, and continue the rest onto
   47421      adjacent pages.
   47422 
   47423      If you publish or distribute Opaque copies of the Document
   47424      numbering more than 100, you must either include a machine-readable
   47425      Transparent copy along with each Opaque copy, or state in or with
   47426      each Opaque copy a computer-network location from which the general
   47427      network-using public has access to download using public-standard
   47428      network protocols a complete Transparent copy of the Document, free
   47429      of added material.  If you use the latter option, you must take
   47430      reasonably prudent steps, when you begin distribution of Opaque
   47431      copies in quantity, to ensure that this Transparent copy will
   47432      remain thus accessible at the stated location until at least one
   47433      year after the last time you distribute an Opaque copy (directly or
   47434      through your agents or retailers) of that edition to the public.
   47435 
   47436      It is requested, but not required, that you contact the authors of
   47437      the Document well before redistributing any large number of copies,
   47438      to give them a chance to provide you with an updated version of the
   47439      Document.
   47440 
   47441   4. MODIFICATIONS
   47442 
   47443      You may copy and distribute a Modified Version of the Document
   47444      under the conditions of sections 2 and 3 above, provided that you
   47445      release the Modified Version under precisely this License, with the
   47446      Modified Version filling the role of the Document, thus licensing
   47447      distribution and modification of the Modified Version to whoever
   47448      possesses a copy of it.  In addition, you must do these things in
   47449      the Modified Version:
   47450 
   47451        A. Use in the Title Page (and on the covers, if any) a title
   47452           distinct from that of the Document, and from those of previous
   47453           versions (which should, if there were any, be listed in the
   47454           History section of the Document).  You may use the same title
   47455           as a previous version if the original publisher of that
   47456           version gives permission.
   47457 
   47458        B. List on the Title Page, as authors, one or more persons or
   47459           entities responsible for authorship of the modifications in
   47460           the Modified Version, together with at least five of the
   47461           principal authors of the Document (all of its principal
   47462           authors, if it has fewer than five), unless they release you
   47463           from this requirement.
   47464 
   47465        C. State on the Title page the name of the publisher of the
   47466           Modified Version, as the publisher.
   47467 
   47468        D. Preserve all the copyright notices of the Document.
   47469 
   47470        E. Add an appropriate copyright notice for your modifications
   47471           adjacent to the other copyright notices.
   47472 
   47473        F. Include, immediately after the copyright notices, a license
   47474           notice giving the public permission to use the Modified
   47475           Version under the terms of this License, in the form shown in
   47476           the Addendum below.
   47477 
   47478        G. Preserve in that license notice the full lists of Invariant
   47479           Sections and required Cover Texts given in the Document's
   47480           license notice.
   47481 
   47482        H. Include an unaltered copy of this License.
   47483 
   47484        I. Preserve the section Entitled "History", Preserve its Title,
   47485           and add to it an item stating at least the title, year, new
   47486           authors, and publisher of the Modified Version as given on the
   47487           Title Page.  If there is no section Entitled "History" in the
   47488           Document, create one stating the title, year, authors, and
   47489           publisher of the Document as given on its Title Page, then add
   47490           an item describing the Modified Version as stated in the
   47491           previous sentence.
   47492 
   47493        J. Preserve the network location, if any, given in the Document
   47494           for public access to a Transparent copy of the Document, and
   47495           likewise the network locations given in the Document for
   47496           previous versions it was based on.  These may be placed in the
   47497           "History" section.  You may omit a network location for a work
   47498           that was published at least four years before the Document
   47499           itself, or if the original publisher of the version it refers
   47500           to gives permission.
   47501 
   47502        K. For any section Entitled "Acknowledgements" or "Dedications",
   47503           Preserve the Title of the section, and preserve in the section
   47504           all the substance and tone of each of the contributor
   47505           acknowledgements and/or dedications given therein.
   47506 
   47507        L. Preserve all the Invariant Sections of the Document, unaltered
   47508           in their text and in their titles.  Section numbers or the
   47509           equivalent are not considered part of the section titles.
   47510 
   47511        M. Delete any section Entitled "Endorsements".  Such a section
   47512           may not be included in the Modified Version.
   47513 
   47514        N. Do not retitle any existing section to be Entitled
   47515           "Endorsements" or to conflict in title with any Invariant
   47516           Section.
   47517 
   47518        O. Preserve any Warranty Disclaimers.
   47519 
   47520      If the Modified Version includes new front-matter sections or
   47521      appendices that qualify as Secondary Sections and contain no
   47522      material copied from the Document, you may at your option designate
   47523      some or all of these sections as invariant.  To do this, add their
   47524      titles to the list of Invariant Sections in the Modified Version's
   47525      license notice.  These titles must be distinct from any other
   47526      section titles.
   47527 
   47528      You may add a section Entitled "Endorsements", provided it contains
   47529      nothing but endorsements of your Modified Version by various
   47530      parties--for example, statements of peer review or that the text
   47531      has been approved by an organization as the authoritative
   47532      definition of a standard.
   47533 
   47534      You may add a passage of up to five words as a Front-Cover Text,
   47535      and a passage of up to 25 words as a Back-Cover Text, to the end of
   47536      the list of Cover Texts in the Modified Version.  Only one passage
   47537      of Front-Cover Text and one of Back-Cover Text may be added by (or
   47538      through arrangements made by) any one entity.  If the Document
   47539      already includes a cover text for the same cover, previously added
   47540      by you or by arrangement made by the same entity you are acting on
   47541      behalf of, you may not add another; but you may replace the old
   47542      one, on explicit permission from the previous publisher that added
   47543      the old one.
   47544 
   47545      The author(s) and publisher(s) of the Document do not by this
   47546      License give permission to use their names for publicity for or to
   47547      assert or imply endorsement of any Modified Version.
   47548 
   47549   5. COMBINING DOCUMENTS
   47550 
   47551      You may combine the Document with other documents released under
   47552      this License, under the terms defined in section 4 above for
   47553      modified versions, provided that you include in the combination all
   47554      of the Invariant Sections of all of the original documents,
   47555      unmodified, and list them all as Invariant Sections of your
   47556      combined work in its license notice, and that you preserve all
   47557      their Warranty Disclaimers.
   47558 
   47559      The combined work need only contain one copy of this License, and
   47560      multiple identical Invariant Sections may be replaced with a single
   47561      copy.  If there are multiple Invariant Sections with the same name
   47562      but different contents, make the title of each such section unique
   47563      by adding at the end of it, in parentheses, the name of the
   47564      original author or publisher of that section if known, or else a
   47565      unique number.  Make the same adjustment to the section titles in
   47566      the list of Invariant Sections in the license notice of the
   47567      combined work.
   47568 
   47569      In the combination, you must combine any sections Entitled
   47570      "History" in the various original documents, forming one section
   47571      Entitled "History"; likewise combine any sections Entitled
   47572      "Acknowledgements", and any sections Entitled "Dedications".  You
   47573      must delete all sections Entitled "Endorsements."
   47574 
   47575   6. COLLECTIONS OF DOCUMENTS
   47576 
   47577      You may make a collection consisting of the Document and other
   47578      documents released under this License, and replace the individual
   47579      copies of this License in the various documents with a single copy
   47580      that is included in the collection, provided that you follow the
   47581      rules of this License for verbatim copying of each of the documents
   47582      in all other respects.
   47583 
   47584      You may extract a single document from such a collection, and
   47585      distribute it individually under this License, provided you insert
   47586      a copy of this License into the extracted document, and follow this
   47587      License in all other respects regarding verbatim copying of that
   47588      document.
   47589 
   47590   7. AGGREGATION WITH INDEPENDENT WORKS
   47591 
   47592      A compilation of the Document or its derivatives with other
   47593      separate and independent documents or works, in or on a volume of a
   47594      storage or distribution medium, is called an "aggregate" if the
   47595      copyright resulting from the compilation is not used to limit the
   47596      legal rights of the compilation's users beyond what the individual
   47597      works permit.  When the Document is included in an aggregate, this
   47598      License does not apply to the other works in the aggregate which
   47599      are not themselves derivative works of the Document.
   47600 
   47601      If the Cover Text requirement of section 3 is applicable to these
   47602      copies of the Document, then if the Document is less than one half
   47603      of the entire aggregate, the Document's Cover Texts may be placed
   47604      on covers that bracket the Document within the aggregate, or the
   47605      electronic equivalent of covers if the Document is in electronic
   47606      form.  Otherwise they must appear on printed covers that bracket
   47607      the whole aggregate.
   47608 
   47609   8. TRANSLATION
   47610 
   47611      Translation is considered a kind of modification, so you may
   47612      distribute translations of the Document under the terms of section
   47613      4.  Replacing Invariant Sections with translations requires special
   47614      permission from their copyright holders, but you may include
   47615      translations of some or all Invariant Sections in addition to the
   47616      original versions of these Invariant Sections.  You may include a
   47617      translation of this License, and all the license notices in the
   47618      Document, and any Warranty Disclaimers, provided that you also
   47619      include the original English version of this License and the
   47620      original versions of those notices and disclaimers.  In case of a
   47621      disagreement between the translation and the original version of
   47622      this License or a notice or disclaimer, the original version will
   47623      prevail.
   47624 
   47625      If a section in the Document is Entitled "Acknowledgements",
   47626      "Dedications", or "History", the requirement (section 4) to
   47627      Preserve its Title (section 1) will typically require changing the
   47628      actual title.
   47629 
   47630   9. TERMINATION
   47631 
   47632      You may not copy, modify, sublicense, or distribute the Document
   47633      except as expressly provided under this License.  Any attempt
   47634      otherwise to copy, modify, sublicense, or distribute it is void,
   47635      and will automatically terminate your rights under this License.
   47636 
   47637      However, if you cease all violation of this License, then your
   47638      license from a particular copyright holder is reinstated (a)
   47639      provisionally, unless and until the copyright holder explicitly and
   47640      finally terminates your license, and (b) permanently, if the
   47641      copyright holder fails to notify you of the violation by some
   47642      reasonable means prior to 60 days after the cessation.
   47643 
   47644      Moreover, your license from a particular copyright holder is
   47645      reinstated permanently if the copyright holder notifies you of the
   47646      violation by some reasonable means, this is the first time you have
   47647      received notice of violation of this License (for any work) from
   47648      that copyright holder, and you cure the violation prior to 30 days
   47649      after your receipt of the notice.
   47650 
   47651      Termination of your rights under this section does not terminate
   47652      the licenses of parties who have received copies or rights from you
   47653      under this License.  If your rights have been terminated and not
   47654      permanently reinstated, receipt of a copy of some or all of the
   47655      same material does not give you any rights to use it.
   47656 
   47657   10. FUTURE REVISIONS OF THIS LICENSE
   47658 
   47659      The Free Software Foundation may publish new, revised versions of
   47660      the GNU Free Documentation License from time to time.  Such new
   47661      versions will be similar in spirit to the present version, but may
   47662      differ in detail to address new problems or concerns.  See
   47663      <http://www.gnu.org/copyleft/>.
   47664 
   47665      Each version of the License is given a distinguishing version
   47666      number.  If the Document specifies that a particular numbered
   47667      version of this License "or any later version" applies to it, you
   47668      have the option of following the terms and conditions either of
   47669      that specified version or of any later version that has been
   47670      published (not as a draft) by the Free Software Foundation.  If the
   47671      Document does not specify a version number of this License, you may
   47672      choose any version ever published (not as a draft) by the Free
   47673      Software Foundation.  If the Document specifies that a proxy can
   47674      decide which future versions of this License can be used, that
   47675      proxy's public statement of acceptance of a version permanently
   47676      authorizes you to choose that version for the Document.
   47677 
   47678   11. RELICENSING
   47679 
   47680      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   47681      World Wide Web server that publishes copyrightable works and also
   47682      provides prominent facilities for anybody to edit those works.  A
   47683      public wiki that anybody can edit is an example of such a server.
   47684      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   47685      site means any set of copyrightable works thus published on the MMC
   47686      site.
   47687 
   47688      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   47689      license published by Creative Commons Corporation, a not-for-profit
   47690      corporation with a principal place of business in San Francisco,
   47691      California, as well as future copyleft versions of that license
   47692      published by that same organization.
   47693 
   47694      "Incorporate" means to publish or republish a Document, in whole or
   47695      in part, as part of another Document.
   47696 
   47697      An MMC is "eligible for relicensing" if it is licensed under this
   47698      License, and if all works that were first published under this
   47699      License somewhere other than this MMC, and subsequently
   47700      incorporated in whole or in part into the MMC, (1) had no cover
   47701      texts or invariant sections, and (2) were thus incorporated prior
   47702      to November 1, 2008.
   47703 
   47704      The operator of an MMC Site may republish an MMC contained in the
   47705      site under CC-BY-SA on the same site at any time before August 1,
   47706      2009, provided the MMC is eligible for relicensing.
   47707 
   47708 ADDENDUM: How to use this License for your documents
   47709 ====================================================
   47710 
   47711 To use this License in a document you have written, include a copy of
   47712 the License in the document and put the following copyright and license
   47713 notices just after the title page:
   47714 
   47715        Copyright (C)  YEAR  YOUR NAME.
   47716        Permission is granted to copy, distribute and/or modify this document
   47717        under the terms of the GNU Free Documentation License, Version 1.3
   47718        or any later version published by the Free Software Foundation;
   47719        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   47720        Texts.  A copy of the license is included in the section entitled ``GNU
   47721        Free Documentation License''.
   47722 
   47723  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
   47724 replace the "with...Texts."  line with this:
   47725 
   47726          with the Invariant Sections being LIST THEIR TITLES, with
   47727          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   47728          being LIST.
   47729 
   47730  If you have Invariant Sections without Cover Texts, or some other
   47731 combination of the three, merge those two alternatives to suit the
   47732 situation.
   47733 
   47734  If your document contains nontrivial examples of program code, we
   47735 recommend releasing these examples in parallel under your choice of free
   47736 software license, such as the GNU General Public License, to permit
   47737 their use in free software.
   47738 
   47739 
   47740 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
   47741 
   47742 Contributors to GCC
   47743 *******************
   47744 
   47745 The GCC project would like to thank its many contributors.  Without them
   47746 the project would not have been nearly as successful as it has been.
   47747 Any omissions in this list are accidental.  Feel free to contact
   47748 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or
   47749 some of your contributions are not listed.  Please keep this list in
   47750 alphabetical order.
   47751 
   47752    * Analog Devices helped implement the support for complex data types
   47753      and iterators.
   47754 
   47755    * John David Anglin for threading-related fixes and improvements to
   47756      libstdc++-v3, and the HP-UX port.
   47757 
   47758    * James van Artsdalen wrote the code that makes efficient use of the
   47759      Intel 80387 register stack.
   47760 
   47761    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
   47762      Series port.
   47763 
   47764    * Alasdair Baird for various bug fixes.
   47765 
   47766    * Giovanni Bajo for analyzing lots of complicated C++ problem
   47767      reports.
   47768 
   47769    * Peter Barada for his work to improve code generation for new
   47770      ColdFire cores.
   47771 
   47772    * Gerald Baumgartner added the signature extension to the C++ front
   47773      end.
   47774 
   47775    * Godmar Back for his Java improvements and encouragement.
   47776 
   47777    * Scott Bambrough for help porting the Java compiler.
   47778 
   47779    * Wolfgang Bangerth for processing tons of bug reports.
   47780 
   47781    * Jon Beniston for his Microsoft Windows port of Java and port to
   47782      Lattice Mico32.
   47783 
   47784    * Daniel Berlin for better DWARF2 support, faster/better
   47785      optimizations, improved alias analysis, plus migrating GCC to
   47786      Bugzilla.
   47787 
   47788    * Geoff Berry for his Java object serialization work and various
   47789      patches.
   47790 
   47791    * David Binderman tests weekly snapshots of GCC trunk against Fedora
   47792      Rawhide for several architectures.
   47793 
   47794    * Uros Bizjak for the implementation of x87 math built-in functions
   47795      and for various middle end and i386 back end improvements and bug
   47796      fixes.
   47797 
   47798    * Eric Blake for helping to make GCJ and libgcj conform to the
   47799      specifications.
   47800 
   47801    * Janne Blomqvist for contributions to GNU Fortran.
   47802 
   47803    * Segher Boessenkool for various fixes.
   47804 
   47805    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
   47806      other Java work.
   47807 
   47808    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
   47809      miscellaneous clean-ups.
   47810 
   47811    * Steven Bosscher for integrating the GNU Fortran front end into GCC
   47812      and for contributing to the tree-ssa branch.
   47813 
   47814    * Eric Botcazou for fixing middle- and backend bugs left and right.
   47815 
   47816    * Per Bothner for his direction via the steering committee and
   47817      various improvements to the infrastructure for supporting new
   47818      languages.  Chill front end implementation.  Initial
   47819      implementations of cpplib, fix-header, config.guess, libio, and
   47820      past C++ library (libg++) maintainer.  Dreaming up, designing and
   47821      implementing much of GCJ.
   47822 
   47823    * Devon Bowen helped port GCC to the Tahoe.
   47824 
   47825    * Don Bowman for mips-vxworks contributions.
   47826 
   47827    * Dave Brolley for work on cpplib and Chill.
   47828 
   47829    * Paul Brook for work on the ARM architecture and maintaining GNU
   47830      Fortran.
   47831 
   47832    * Robert Brown implemented the support for Encore 32000 systems.
   47833 
   47834    * Christian Bruel for improvements to local store elimination.
   47835 
   47836    * Herman A.J. ten Brugge for various fixes.
   47837 
   47838    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
   47839      FAQ.
   47840 
   47841    * Joe Buck for his direction via the steering committee.
   47842 
   47843    * Craig Burley for leadership of the G77 Fortran effort.
   47844 
   47845    * Stephan Buys for contributing Doxygen notes for libstdc++.
   47846 
   47847    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
   47848      to the C++ strings, streambufs and formatted I/O, hard detective
   47849      work on the frustrating localization issues, and keeping up with
   47850      the problem reports.
   47851 
   47852    * John Carr for his alias work, SPARC hacking, infrastructure
   47853      improvements, previous contributions to the steering committee,
   47854      loop optimizations, etc.
   47855 
   47856    * Stephane Carrez for 68HC11 and 68HC12 ports.
   47857 
   47858    * Steve Chamberlain for support for the Renesas SH and H8 processors
   47859      and the PicoJava processor, and for GCJ config fixes.
   47860 
   47861    * Glenn Chambers for help with the GCJ FAQ.
   47862 
   47863    * John-Marc Chandonia for various libgcj patches.
   47864 
   47865    * Denis Chertykov for contributing and maintaining the AVR port, the
   47866      first GCC port for an 8-bit architecture.
   47867 
   47868    * Scott Christley for his Objective-C contributions.
   47869 
   47870    * Eric Christopher for his Java porting help and clean-ups.
   47871 
   47872    * Branko Cibej for more warning contributions.
   47873 
   47874    * The GNU Classpath project for all of their merged runtime code.
   47875 
   47876    * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, '--help',
   47877      and other random hacking.
   47878 
   47879    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
   47880 
   47881    * R. Kelley Cook for making GCC buildable from a read-only directory
   47882      as well as other miscellaneous build process and documentation
   47883      clean-ups.
   47884 
   47885    * Ralf Corsepius for SH testing and minor bug fixing.
   47886 
   47887    * Stan Cox for care and feeding of the x86 port and lots of behind
   47888      the scenes hacking.
   47889 
   47890    * Alex Crain provided changes for the 3b1.
   47891 
   47892    * Ian Dall for major improvements to the NS32k port.
   47893 
   47894    * Paul Dale for his work to add uClinux platform support to the m68k
   47895      backend.
   47896 
   47897    * Dario Dariol contributed the four varieties of sample programs that
   47898      print a copy of their source.
   47899 
   47900    * Russell Davidson for fstream and stringstream fixes in libstdc++.
   47901 
   47902    * Bud Davis for work on the G77 and GNU Fortran compilers.
   47903 
   47904    * Mo DeJong for GCJ and libgcj bug fixes.
   47905 
   47906    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
   47907      various bug fixes, and the M32C, MeP, and RL78 ports.
   47908 
   47909    * Arnaud Desitter for helping to debug GNU Fortran.
   47910 
   47911    * Gabriel Dos Reis for contributions to G++, contributions and
   47912      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
   47913      including 'valarray<>', 'complex<>', maintaining the numerics
   47914      library (including that pesky '<limits>' :-) and keeping up-to-date
   47915      anything to do with numbers.
   47916 
   47917    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
   47918      ISO C99 support, CFG dumping support, etc., plus support of the C++
   47919      runtime libraries including for all kinds of C interface issues,
   47920      contributing and maintaining 'complex<>', sanity checking and
   47921      disbursement, configuration architecture, libio maintenance, and
   47922      early math work.
   47923 
   47924    * Zdenek Dvorak for a new loop unroller and various fixes.
   47925 
   47926    * Michael Eager for his work on the Xilinx MicroBlaze port.
   47927 
   47928    * Richard Earnshaw for his ongoing work with the ARM.
   47929 
   47930    * David Edelsohn for his direction via the steering committee,
   47931      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
   47932      loop changes, doing the entire AIX port of libstdc++ with his bare
   47933      hands, and for ensuring GCC properly keeps working on AIX.
   47934 
   47935    * Kevin Ediger for the floating point formatting of num_put::do_put
   47936      in libstdc++.
   47937 
   47938    * Phil Edwards for libstdc++ work including configuration hackery,
   47939      documentation maintainer, chief breaker of the web pages, the
   47940      occasional iostream bug fix, and work on shared library symbol
   47941      versioning.
   47942 
   47943    * Paul Eggert for random hacking all over GCC.
   47944 
   47945    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
   47946      configuration support for locales and fstream-related fixes.
   47947 
   47948    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
   47949      iostreams.
   47950 
   47951    * Christian Ehrhardt for dealing with bug reports.
   47952 
   47953    * Ben Elliston for his work to move the Objective-C runtime into its
   47954      own subdirectory and for his work on autoconf.
   47955 
   47956    * Revital Eres for work on the PowerPC 750CL port.
   47957 
   47958    * Marc Espie for OpenBSD support.
   47959 
   47960    * Doug Evans for much of the global optimization framework, arc,
   47961      m32r, and SPARC work.
   47962 
   47963    * Christopher Faylor for his work on the Cygwin port and for caring
   47964      and feeding the gcc.gnu.org box and saving its users tons of spam.
   47965 
   47966    * Fred Fish for BeOS support and Ada fixes.
   47967 
   47968    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
   47969 
   47970    * Peter Gerwinski for various bug fixes and the Pascal front end.
   47971 
   47972    * Kaveh R. Ghazi for his direction via the steering committee,
   47973      amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
   47974      on a plethora of platforms.  Kaveh extends his gratitude to the
   47975      CAIP Center at Rutgers University for providing him with computing
   47976      resources to work on Free Software from the late 1980s to 2010.
   47977 
   47978    * John Gilmore for a donation to the FSF earmarked improving GNU
   47979      Java.
   47980 
   47981    * Judy Goldberg for c++ contributions.
   47982 
   47983    * Torbjorn Granlund for various fixes and the c-torture testsuite,
   47984      multiply- and divide-by-constant optimization, improved long long
   47985      support, improved leaf function register allocation, and his
   47986      direction via the steering committee.
   47987 
   47988    * Anthony Green for his '-Os' contributions, the moxie port, and Java
   47989      front end work.
   47990 
   47991    * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
   47992      code.
   47993 
   47994    * Michael K. Gschwind contributed the port to the PDP-11.
   47995 
   47996    * Richard Guenther for his ongoing middle-end contributions and bug
   47997      fixes and for release management.
   47998 
   47999    * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
   48000      the support for Dwarf symbolic debugging information, and much of
   48001      the support for System V Release 4.  He has also worked heavily on
   48002      the Intel 386 and 860 support.
   48003 
   48004    * Sumanth Gundapaneni for contributing the CR16 port.
   48005 
   48006    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
   48007      GCSE.
   48008 
   48009    * Bruno Haible for improvements in the runtime overhead for EH, new
   48010      warnings and assorted bug fixes.
   48011 
   48012    * Andrew Haley for his amazing Java compiler and library efforts.
   48013 
   48014    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
   48015      series 300.
   48016 
   48017    * Michael Hayes for various thankless work he's done trying to get
   48018      the c30/c40 ports functional.  Lots of loop and unroll improvements
   48019      and fixes.
   48020 
   48021    * Dara Hazeghi for wading through myriads of target-specific bug
   48022      reports.
   48023 
   48024    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
   48025 
   48026    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
   48027      work, loop opts, and generally fixing lots of old problems we've
   48028      ignored for years, flow rewrite and lots of further stuff,
   48029      including reviewing tons of patches.
   48030 
   48031    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
   48032      various fixes.
   48033 
   48034    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
   48035      contributed the support for the Sony NEWS machine.
   48036 
   48037    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
   48038      various fixes.
   48039 
   48040    * Katherine Holcomb for work on GNU Fortran.
   48041 
   48042    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
   48043      of testing and bug fixing, particularly of GCC configury code.
   48044 
   48045    * Steve Holmgren for MachTen patches.
   48046 
   48047    * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
   48048 
   48049    * Jan Hubicka for his x86 port improvements.
   48050 
   48051    * Falk Hueffner for working on C and optimization bug reports.
   48052 
   48053    * Bernardo Innocenti for his m68k work, including merging of ColdFire
   48054      improvements and uClinux support.
   48055 
   48056    * Christian Iseli for various bug fixes.
   48057 
   48058    * Kamil Iskra for general m68k hacking.
   48059 
   48060    * Lee Iverson for random fixes and MIPS testing.
   48061 
   48062    * Andreas Jaeger for testing and benchmarking of GCC and various bug
   48063      fixes.
   48064 
   48065    * Jakub Jelinek for his SPARC work and sibling call optimizations as
   48066      well as lots of bug fixes and test cases, and for improving the
   48067      Java build system.
   48068 
   48069    * Janis Johnson for ia64 testing and fixes, her quality improvement
   48070      sidetracks, and web page maintenance.
   48071 
   48072    * Kean Johnston for SCO OpenServer support and various fixes.
   48073 
   48074    * Tim Josling for the sample language treelang based originally on
   48075      Richard Kenner's "toy" language.
   48076 
   48077    * Nicolai Josuttis for additional libstdc++ documentation.
   48078 
   48079    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
   48080      target.
   48081 
   48082    * Steven G. Kargl for work on GNU Fortran.
   48083 
   48084    * David Kashtan of SRI adapted GCC to VMS.
   48085 
   48086    * Ryszard Kabatek for many, many libstdc++ bug fixes and
   48087      optimizations of strings, especially member functions, and for
   48088      auto_ptr fixes.
   48089 
   48090    * Geoffrey Keating for his ongoing work to make the PPC work for
   48091      GNU/Linux and his automatic regression tester.
   48092 
   48093    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
   48094      work in just about every part of libstdc++.
   48095 
   48096    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
   48097      MIL-STD-1750A.
   48098 
   48099    * Richard Kenner of the New York University Ultracomputer Research
   48100      Laboratory wrote the machine descriptions for the AMD 29000, the
   48101      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
   48102      support for instruction attributes.  He also made changes to better
   48103      support RISC processors including changes to common subexpression
   48104      elimination, strength reduction, function calling sequence
   48105      handling, and condition code support, in addition to generalizing
   48106      the code for frame pointer elimination and delay slot scheduling.
   48107      Richard Kenner was also the head maintainer of GCC for several
   48108      years.
   48109 
   48110    * Mumit Khan for various contributions to the Cygwin and Mingw32
   48111      ports and maintaining binary releases for Microsoft Windows hosts,
   48112      and for massive libstdc++ porting work to Cygwin/Mingw32.
   48113 
   48114    * Robin Kirkham for cpu32 support.
   48115 
   48116    * Mark Klein for PA improvements.
   48117 
   48118    * Thomas Koenig for various bug fixes.
   48119 
   48120    * Bruce Korb for the new and improved fixincludes code.
   48121 
   48122    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
   48123      effort.
   48124 
   48125    * Charles LaBrec contributed the support for the Integrated Solutions
   48126      68020 system.
   48127 
   48128    * Asher Langton and Mike Kumbera for contributing Cray pointer
   48129      support to GNU Fortran, and for other GNU Fortran improvements.
   48130 
   48131    * Jeff Law for his direction via the steering committee, coordinating
   48132      the entire egcs project and GCC 2.95, rolling out snapshots and
   48133      releases, handling merges from GCC2, reviewing tons of patches that
   48134      might have fallen through the cracks else, and random but extensive
   48135      hacking.
   48136 
   48137    * Walter Lee for work on the TILE-Gx and TILEPro ports.
   48138 
   48139    * Marc Lehmann for his direction via the steering committee and
   48140      helping with analysis and improvements of x86 performance.
   48141 
   48142    * Victor Leikehman for work on GNU Fortran.
   48143 
   48144    * Ted Lemon wrote parts of the RTL reader and printer.
   48145 
   48146    * Kriang Lerdsuwanakij for C++ improvements including template as
   48147      template parameter support, and many C++ fixes.
   48148 
   48149    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
   48150      and random work on the Java front end.
   48151 
   48152    * Alain Lichnewsky ported GCC to the MIPS CPU.
   48153 
   48154    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
   48155      and patches.
   48156 
   48157    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
   48158 
   48159    * Chen Liqin for various S+core related fixes/improvement, and for
   48160      maintaining the S+core port.
   48161 
   48162    * Weiwen Liu for testing and various bug fixes.
   48163 
   48164    * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
   48165      diagnostics fixes and improvements.
   48166 
   48167    * Dave Love for his ongoing work with the Fortran front end and
   48168      runtime libraries.
   48169 
   48170    * Martin von Lo"wis for internal consistency checking infrastructure,
   48171      various C++ improvements including namespace support, and tons of
   48172      assistance with libstdc++/compiler merges.
   48173 
   48174    * H.J. Lu for his previous contributions to the steering committee,
   48175      many x86 bug reports, prototype patches, and keeping the GNU/Linux
   48176      ports working.
   48177 
   48178    * Greg McGary for random fixes and (someday) bounded pointers.
   48179 
   48180    * Andrew MacLeod for his ongoing work in building a real EH system,
   48181      various code generation improvements, work on the global optimizer,
   48182      etc.
   48183 
   48184    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
   48185      hacking improvements to compile-time performance, overall knowledge
   48186      and direction in the area of instruction scheduling, and design and
   48187      implementation of the automaton based instruction scheduler.
   48188 
   48189    * Bob Manson for his behind the scenes work on dejagnu.
   48190 
   48191    * Philip Martin for lots of libstdc++ string and vector iterator
   48192      fixes and improvements, and string clean up and testsuites.
   48193 
   48194    * All of the Mauve project contributors, for Java test code.
   48195 
   48196    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
   48197 
   48198    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
   48199 
   48200    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
   48201      powerpc, haifa, ECOFF debug support, and other assorted hacking.
   48202 
   48203    * Jason Merrill for his direction via the steering committee and
   48204      leading the G++ effort.
   48205 
   48206    * Martin Michlmayr for testing GCC on several architectures using the
   48207      entire Debian archive.
   48208 
   48209    * David Miller for his direction via the steering committee, lots of
   48210      SPARC work, improvements in jump.c and interfacing with the Linux
   48211      kernel developers.
   48212 
   48213    * Gary Miller ported GCC to Charles River Data Systems machines.
   48214 
   48215    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
   48216      the entire libstdc++ testsuite namespace-compatible.
   48217 
   48218    * Mark Mitchell for his direction via the steering committee,
   48219      mountains of C++ work, load/store hoisting out of loops, alias
   48220      analysis improvements, ISO C 'restrict' support, and serving as
   48221      release manager from 2000 to 2011.
   48222 
   48223    * Alan Modra for various GNU/Linux bits and testing.
   48224 
   48225    * Toon Moene for his direction via the steering committee, Fortran
   48226      maintenance, and his ongoing work to make us make Fortran run fast.
   48227 
   48228    * Jason Molenda for major help in the care and feeding of all the
   48229      services on the gcc.gnu.org (formerly egcs.cygnus.com)
   48230      machine--mail, web services, ftp services, etc etc.  Doing all this
   48231      work on scrap paper and the backs of envelopes would have been...
   48232      difficult.
   48233 
   48234    * Catherine Moore for fixing various ugly problems we have sent her
   48235      way, including the haifa bug which was killing the Alpha & PowerPC
   48236      Linux kernels.
   48237 
   48238    * Mike Moreton for his various Java patches.
   48239 
   48240    * David Mosberger-Tang for various Alpha improvements, and for the
   48241      initial IA-64 port.
   48242 
   48243    * Stephen Moshier contributed the floating point emulator that
   48244      assists in cross-compilation and permits support for floating point
   48245      numbers wider than 64 bits and for ISO C99 support.
   48246 
   48247    * Bill Moyer for his behind the scenes work on various issues.
   48248 
   48249    * Philippe De Muyter for his work on the m68k port.
   48250 
   48251    * Joseph S. Myers for his work on the PDP-11 port, format checking
   48252      and ISO C99 support, and continuous emphasis on (and contributions
   48253      to) documentation.
   48254 
   48255    * Nathan Myers for his work on libstdc++-v3: architecture and
   48256      authorship through the first three snapshots, including
   48257      implementation of locale infrastructure, string, shadow C headers,
   48258      and the initial project documentation (DESIGN, CHECKLIST, and so
   48259      forth).  Later, more work on MT-safe string and shadow headers.
   48260 
   48261    * Felix Natter for documentation on porting libstdc++.
   48262 
   48263    * Nathanael Nerode for cleaning up the configuration/build process.
   48264 
   48265    * NeXT, Inc. donated the front end that supports the Objective-C
   48266      language.
   48267 
   48268    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
   48269      search engine setup, various documentation fixes and other small
   48270      fixes.
   48271 
   48272    * Geoff Noer for his work on getting cygwin native builds working.
   48273 
   48274    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
   48275      tracking web pages, GIMPLE tuples, and assorted fixes.
   48276 
   48277    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
   48278      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
   48279      infrastructure improvements.
   48280 
   48281    * Alexandre Oliva for various build infrastructure improvements,
   48282      scripts and amazing testing work, including keeping libtool issues
   48283      sane and happy.
   48284 
   48285    * Stefan Olsson for work on mt_alloc.
   48286 
   48287    * Melissa O'Neill for various NeXT fixes.
   48288 
   48289    * Rainer Orth for random MIPS work, including improvements to GCC's
   48290      o32 ABI support, improvements to dejagnu's MIPS support, Java
   48291      configuration clean-ups and porting work, and maintaining the IRIX,
   48292      Solaris 2, and Tru64 UNIX ports.
   48293 
   48294    * Hartmut Penner for work on the s390 port.
   48295 
   48296    * Paul Petersen wrote the machine description for the Alliant FX/8.
   48297 
   48298    * Alexandre Petit-Bianco for implementing much of the Java compiler
   48299      and continued Java maintainership.
   48300 
   48301    * Matthias Pfaller for major improvements to the NS32k port.
   48302 
   48303    * Gerald Pfeifer for his direction via the steering committee,
   48304      pointing out lots of problems we need to solve, maintenance of the
   48305      web pages, and taking care of documentation maintenance in general.
   48306 
   48307    * Andrew Pinski for processing bug reports by the dozen.
   48308 
   48309    * Ovidiu Predescu for his work on the Objective-C front end and
   48310      runtime libraries.
   48311 
   48312    * Jerry Quinn for major performance improvements in C++ formatted
   48313      I/O.
   48314 
   48315    * Ken Raeburn for various improvements to checker, MIPS ports and
   48316      various cleanups in the compiler.
   48317 
   48318    * Rolf W. Rasmussen for hacking on AWT.
   48319 
   48320    * David Reese of Sun Microsystems contributed to the Solaris on
   48321      PowerPC port.
   48322 
   48323    * Volker Reichelt for keeping up with the problem reports.
   48324 
   48325    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
   48326      hacking and developing and maintaining the Epiphany port.
   48327 
   48328    * Loren J. Rittle for improvements to libstdc++-v3 including the
   48329      FreeBSD port, threading fixes, thread-related configury changes,
   48330      critical threading documentation, and solutions to really tricky
   48331      I/O problems, as well as keeping GCC properly working on FreeBSD
   48332      and continuous testing.
   48333 
   48334    * Craig Rodrigues for processing tons of bug reports.
   48335 
   48336    * Ola Ro"nnerup for work on mt_alloc.
   48337 
   48338    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
   48339 
   48340    * David Ronis inspired and encouraged Craig to rewrite the G77
   48341      documentation in texinfo format by contributing a first pass at a
   48342      translation of the old 'g77-0.5.16/f/DOC' file.
   48343 
   48344    * Ken Rose for fixes to GCC's delay slot filling code.
   48345 
   48346    * Paul Rubin wrote most of the preprocessor.
   48347 
   48348    * Pe'tur Runo'lfsson for major performance improvements in C++
   48349      formatted I/O and large file support in C++ filebuf.
   48350 
   48351    * Chip Salzenberg for libstdc++ patches and improvements to locales,
   48352      traits, Makefiles, libio, libtool hackery, and "long long" support.
   48353 
   48354    * Juha Sarlin for improvements to the H8 code generator.
   48355 
   48356    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
   48357      300.
   48358 
   48359    * Roger Sayle for improvements to constant folding and GCC's RTL
   48360      optimizers as well as for fixing numerous bugs.
   48361 
   48362    * Bradley Schatz for his work on the GCJ FAQ.
   48363 
   48364    * Peter Schauer wrote the code to allow debugging to work on the
   48365      Alpha.
   48366 
   48367    * William Schelter did most of the work on the Intel 80386 support.
   48368 
   48369    * Tobias Schlu"ter for work on GNU Fortran.
   48370 
   48371    * Bernd Schmidt for various code generation improvements and major
   48372      work in the reload pass, serving as release manager for GCC 2.95.3,
   48373      and work on the Blackfin and C6X ports.
   48374 
   48375    * Peter Schmid for constant testing of libstdc++--especially
   48376      application testing, going above and beyond what was requested for
   48377      the release criteria--and libstdc++ header file tweaks.
   48378 
   48379    * Jason Schroeder for jcf-dump patches.
   48380 
   48381    * Andreas Schwab for his work on the m68k port.
   48382 
   48383    * Lars Segerlund for work on GNU Fortran.
   48384 
   48385    * Dodji Seketeli for numerous C++ bug fixes and debug info
   48386      improvements.
   48387 
   48388    * Joel Sherrill for his direction via the steering committee, RTEMS
   48389      contributions and RTEMS testing.
   48390 
   48391    * Nathan Sidwell for many C++ fixes/improvements.
   48392 
   48393    * Jeffrey Siegal for helping RMS with the original design of GCC,
   48394      some code which handles the parse tree and RTL data structures,
   48395      constant folding and help with the original VAX & m68k ports.
   48396 
   48397    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
   48398      from the LWG (thereby keeping GCC in line with updates from the
   48399      ISO).
   48400 
   48401    * Franz Sirl for his ongoing work with making the PPC port stable for
   48402      GNU/Linux.
   48403 
   48404    * Andrey Slepuhin for assorted AIX hacking.
   48405 
   48406    * Trevor Smigiel for contributing the SPU port.
   48407 
   48408    * Christopher Smith did the port for Convex machines.
   48409 
   48410    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
   48411 
   48412    * Randy Smith finished the Sun FPA support.
   48413 
   48414    * Scott Snyder for queue, iterator, istream, and string fixes and
   48415      libstdc++ testsuite entries.  Also for providing the patch to G77
   48416      to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
   48417      'LOGICAL*1'.
   48418 
   48419    * Zdenek Sojka for running automated regression testing of GCC and
   48420      reporting numerous bugs.
   48421 
   48422    * Jayant Sonar for contributing the CR16 port.
   48423 
   48424    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
   48425 
   48426    * Richard Stallman, for writing the original GCC and launching the
   48427      GNU project.
   48428 
   48429    * Jan Stein of the Chalmers Computer Society provided support for
   48430      Genix, as well as part of the 32000 machine description.
   48431 
   48432    * Nigel Stephens for various mips16 related fixes/improvements.
   48433 
   48434    * Jonathan Stone wrote the machine description for the Pyramid
   48435      computer.
   48436 
   48437    * Graham Stott for various infrastructure improvements.
   48438 
   48439    * John Stracke for his Java HTTP protocol fixes.
   48440 
   48441    * Mike Stump for his Elxsi port, G++ contributions over the years and
   48442      more recently his vxworks contributions
   48443 
   48444    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
   48445 
   48446    * Shigeya Suzuki for this fixes for the bsdi platforms.
   48447 
   48448    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
   48449      support, general configury hacking, fixincludes, etc.
   48450 
   48451    * Holger Teutsch provided the support for the Clipper CPU.
   48452 
   48453    * Gary Thomas for his ongoing work to make the PPC work for
   48454      GNU/Linux.
   48455 
   48456    * Philipp Thomas for random bug fixes throughout the compiler
   48457 
   48458    * Jason Thorpe for thread support in libstdc++ on NetBSD.
   48459 
   48460    * Kresten Krab Thorup wrote the run time support for the Objective-C
   48461      language and the fantastic Java bytecode interpreter.
   48462 
   48463    * Michael Tiemann for random bug fixes, the first instruction
   48464      scheduler, initial C++ support, function integration, NS32k, SPARC
   48465      and M88k machine description work, delay slot scheduling.
   48466 
   48467    * Andreas Tobler for his work porting libgcj to Darwin.
   48468 
   48469    * Teemu Torma for thread safe exception handling support.
   48470 
   48471    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
   48472      definitions, and of the VAX machine description.
   48473 
   48474    * Daniel Towner and Hariharan Sandanagobalane contributed and
   48475      maintain the picoChip port.
   48476 
   48477    * Tom Tromey for internationalization support and for his many Java
   48478      contributions and libgcj maintainership.
   48479 
   48480    * Lassi Tuura for improvements to config.guess to determine HP
   48481      processor types.
   48482 
   48483    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
   48484 
   48485    * Andy Vaught for the design and initial implementation of the GNU
   48486      Fortran front end.
   48487 
   48488    * Brent Verner for work with the libstdc++ cshadow files and their
   48489      associated configure steps.
   48490 
   48491    * Todd Vierling for contributions for NetBSD ports.
   48492 
   48493    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
   48494      guidance.
   48495 
   48496    * Dean Wakerley for converting the install documentation from HTML to
   48497      texinfo in time for GCC 3.0.
   48498 
   48499    * Krister Walfridsson for random bug fixes.
   48500 
   48501    * Feng Wang for contributions to GNU Fortran.
   48502 
   48503    * Stephen M. Webb for time and effort on making libstdc++ shadow
   48504      files work with the tricky Solaris 8+ headers, and for pushing the
   48505      build-time header tree.
   48506 
   48507    * John Wehle for various improvements for the x86 code generator,
   48508      related infrastructure improvements to help x86 code generation,
   48509      value range propagation and other work, WE32k port.
   48510 
   48511    * Ulrich Weigand for work on the s390 port.
   48512 
   48513    * Zack Weinberg for major work on cpplib and various other bug fixes.
   48514 
   48515    * Matt Welsh for help with Linux Threads support in GCJ.
   48516 
   48517    * Urban Widmark for help fixing java.io.
   48518 
   48519    * Mark Wielaard for new Java library code and his work integrating
   48520      with Classpath.
   48521 
   48522    * Dale Wiles helped port GCC to the Tahoe.
   48523 
   48524    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
   48525 
   48526    * Jim Wilson for his direction via the steering committee, tackling
   48527      hard problems in various places that nobody else wanted to work on,
   48528      strength reduction and other loop optimizations.
   48529 
   48530    * Paul Woegerer and Tal Agmon for the CRX port.
   48531 
   48532    * Carlo Wood for various fixes.
   48533 
   48534    * Tom Wood for work on the m88k port.
   48535 
   48536    * Canqun Yang for work on GNU Fortran.
   48537 
   48538    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
   48539      description for the Tron architecture (specifically, the Gmicro).
   48540 
   48541    * Kevin Zachmann helped port GCC to the Tahoe.
   48542 
   48543    * Ayal Zaks for Swing Modulo Scheduling (SMS).
   48544 
   48545    * Xiaoqiang Zhang for work on GNU Fortran.
   48546 
   48547    * Gilles Zunino for help porting Java to Irix.
   48548 
   48549  The following people are recognized for their contributions to GNAT,
   48550 the Ada front end of GCC:
   48551    * Bernard Banner
   48552 
   48553    * Romain Berrendonner
   48554 
   48555    * Geert Bosch
   48556 
   48557    * Emmanuel Briot
   48558 
   48559    * Joel Brobecker
   48560 
   48561    * Ben Brosgol
   48562 
   48563    * Vincent Celier
   48564 
   48565    * Arnaud Charlet
   48566 
   48567    * Chien Chieng
   48568 
   48569    * Cyrille Comar
   48570 
   48571    * Cyrille Crozes
   48572 
   48573    * Robert Dewar
   48574 
   48575    * Gary Dismukes
   48576 
   48577    * Robert Duff
   48578 
   48579    * Ed Falis
   48580 
   48581    * Ramon Fernandez
   48582 
   48583    * Sam Figueroa
   48584 
   48585    * Vasiliy Fofanov
   48586 
   48587    * Michael Friess
   48588 
   48589    * Franco Gasperoni
   48590 
   48591    * Ted Giering
   48592 
   48593    * Matthew Gingell
   48594 
   48595    * Laurent Guerby
   48596 
   48597    * Jerome Guitton
   48598 
   48599    * Olivier Hainque
   48600 
   48601    * Jerome Hugues
   48602 
   48603    * Hristian Kirtchev
   48604 
   48605    * Jerome Lambourg
   48606 
   48607    * Bruno Leclerc
   48608 
   48609    * Albert Lee
   48610 
   48611    * Sean McNeil
   48612 
   48613    * Javier Miranda
   48614 
   48615    * Laurent Nana
   48616 
   48617    * Pascal Obry
   48618 
   48619    * Dong-Ik Oh
   48620 
   48621    * Laurent Pautet
   48622 
   48623    * Brett Porter
   48624 
   48625    * Thomas Quinot
   48626 
   48627    * Nicolas Roche
   48628 
   48629    * Pat Rogers
   48630 
   48631    * Jose Ruiz
   48632 
   48633    * Douglas Rupp
   48634 
   48635    * Sergey Rybin
   48636 
   48637    * Gail Schenker
   48638 
   48639    * Ed Schonberg
   48640 
   48641    * Nicolas Setton
   48642 
   48643    * Samuel Tardieu
   48644 
   48645  The following people are recognized for their contributions of new
   48646 features, bug reports, testing and integration of classpath/libgcj for
   48647 GCC version 4.1:
   48648    * Lillian Angel for 'JTree' implementation and lots Free Swing
   48649      additions and bug fixes.
   48650 
   48651    * Wolfgang Baer for 'GapContent' bug fixes.
   48652 
   48653    * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
   48654      event fixes, lots of Free Swing work including 'JTable' editing.
   48655 
   48656    * Stuart Ballard for RMI constant fixes.
   48657 
   48658    * Goffredo Baroncelli for 'HTTPURLConnection' fixes.
   48659 
   48660    * Gary Benson for 'MessageFormat' fixes.
   48661 
   48662    * Daniel Bonniot for 'Serialization' fixes.
   48663 
   48664    * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
   48665      and 'DOM xml:id' support.
   48666 
   48667    * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.
   48668 
   48669    * Archie Cobbs for build fixes, VM interface updates,
   48670      'URLClassLoader' updates.
   48671 
   48672    * Kelley Cook for build fixes.
   48673 
   48674    * Martin Cordova for Suggestions for better 'SocketTimeoutException'.
   48675 
   48676    * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
   48677      improvements.
   48678 
   48679    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
   48680      2D support.  Lots of imageio framework additions, lots of AWT and
   48681      Free Swing bug fixes.
   48682 
   48683    * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
   48684      fixes, better 'Proxy' support, bug fixes and IKVM integration.
   48685 
   48686    * Santiago Gala for 'AccessControlContext' fixes.
   48687 
   48688    * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
   48689      improvements.
   48690 
   48691    * David Gilbert for 'basic' and 'metal' icon and plaf support and
   48692      lots of documenting, Lots of Free Swing and metal theme additions.
   48693      'MetalIconFactory' implementation.
   48694 
   48695    * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.
   48696 
   48697    * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
   48698      build speedups.
   48699 
   48700    * Kim Ho for 'JFileChooser' implementation.
   48701 
   48702    * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
   48703      'Serialization' fixes, 'Properties' XML support and generic branch
   48704      work, VMIntegration guide update.
   48705 
   48706    * Bastiaan Huisman for 'TimeZone' bug fixing.
   48707 
   48708    * Andreas Jaeger for mprec updates.
   48709 
   48710    * Paul Jenner for better '-Werror' support.
   48711 
   48712    * Ito Kazumitsu for 'NetworkInterface' implementation and updates.
   48713 
   48714    * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
   48715      bug fixes all over.  Lots of Free Swing work including styled text.
   48716 
   48717    * Simon Kitching for 'String' cleanups and optimization suggestions.
   48718 
   48719    * Michael Koch for configuration fixes, 'Locale' updates, bug and
   48720      build fixes.
   48721 
   48722    * Guilhem Lavaux for configuration, thread and channel fixes and
   48723      Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
   48724      fixes.
   48725 
   48726    * David Lichteblau for JCL support library global/local reference
   48727      cleanups.
   48728 
   48729    * Aaron Luchko for JDWP updates and documentation fixes.
   48730 
   48731    * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
   48732      features.
   48733 
   48734    * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
   48735      fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
   48736      and implementing the Qt4 peers.
   48737 
   48738    * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
   48739      'SystemLogger' and 'FileHandler' rotate implementations, NIO
   48740      'FileChannel.map' support, security and policy updates.
   48741 
   48742    * Bryce McKinlay for RMI work.
   48743 
   48744    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
   48745      testing and documenting.
   48746 
   48747    * Kalle Olavi Niemitalo for build fixes.
   48748 
   48749    * Rainer Orth for build fixes.
   48750 
   48751    * Andrew Overholt for 'File' locking fixes.
   48752 
   48753    * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.
   48754 
   48755    * Olga Rodimina for 'MenuSelectionManager' implementation.
   48756 
   48757    * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.
   48758 
   48759    * Julian Scheid for documentation updates and gjdoc support.
   48760 
   48761    * Christian Schlichtherle for zip fixes and cleanups.
   48762 
   48763    * Robert Schuster for documentation updates and beans fixes,
   48764      'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
   48765      and URL, AWT and Free Swing bug fixes.
   48766 
   48767    * Keith Seitz for lots of JDWP work.
   48768 
   48769    * Christian Thalinger for 64-bit cleanups, Configuration and VM
   48770      interface fixes and 'CACAO' integration, 'fdlibm' updates.
   48771 
   48772    * Gael Thomas for 'VMClassLoader' boot packages support suggestions.
   48773 
   48774    * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
   48775      support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.
   48776 
   48777    * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
   48778      integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
   48779      'GdkPixbugDecoder' updates.
   48780 
   48781    * Tom Tromey for Eclipse integration, generics work, lots of bug
   48782      fixes and gcj integration including coordinating The Big Merge.
   48783 
   48784    * Mark Wielaard for bug fixes, packaging and release management,
   48785      'Clipboard' implementation, system call interrupts and network
   48786      timeouts and 'GdkPixpufDecoder' fixes.
   48787 
   48788  In addition to the above, all of which also contributed time and energy
   48789 in testing GCC, we would like to thank the following for their
   48790 contributions to testing:
   48791 
   48792    * Michael Abd-El-Malek
   48793 
   48794    * Thomas Arend
   48795 
   48796    * Bonzo Armstrong
   48797 
   48798    * Steven Ashe
   48799 
   48800    * Chris Baldwin
   48801 
   48802    * David Billinghurst
   48803 
   48804    * Jim Blandy
   48805 
   48806    * Stephane Bortzmeyer
   48807 
   48808    * Horst von Brand
   48809 
   48810    * Frank Braun
   48811 
   48812    * Rodney Brown
   48813 
   48814    * Sidney Cadot
   48815 
   48816    * Bradford Castalia
   48817 
   48818    * Robert Clark
   48819 
   48820    * Jonathan Corbet
   48821 
   48822    * Ralph Doncaster
   48823 
   48824    * Richard Emberson
   48825 
   48826    * Levente Farkas
   48827 
   48828    * Graham Fawcett
   48829 
   48830    * Mark Fernyhough
   48831 
   48832    * Robert A. French
   48833 
   48834    * Jo"rgen Freyh
   48835 
   48836    * Mark K. Gardner
   48837 
   48838    * Charles-Antoine Gauthier
   48839 
   48840    * Yung Shing Gene
   48841 
   48842    * David Gilbert
   48843 
   48844    * Simon Gornall
   48845 
   48846    * Fred Gray
   48847 
   48848    * John Griffin
   48849 
   48850    * Patrik Hagglund
   48851 
   48852    * Phil Hargett
   48853 
   48854    * Amancio Hasty
   48855 
   48856    * Takafumi Hayashi
   48857 
   48858    * Bryan W. Headley
   48859 
   48860    * Kevin B. Hendricks
   48861 
   48862    * Joep Jansen
   48863 
   48864    * Christian Joensson
   48865 
   48866    * Michel Kern
   48867 
   48868    * David Kidd
   48869 
   48870    * Tobias Kuipers
   48871 
   48872    * Anand Krishnaswamy
   48873 
   48874    * A. O. V. Le Blanc
   48875 
   48876    * llewelly
   48877 
   48878    * Damon Love
   48879 
   48880    * Brad Lucier
   48881 
   48882    * Matthias Klose
   48883 
   48884    * Martin Knoblauch
   48885 
   48886    * Rick Lutowski
   48887 
   48888    * Jesse Macnish
   48889 
   48890    * Stefan Morrell
   48891 
   48892    * Anon A. Mous
   48893 
   48894    * Matthias Mueller
   48895 
   48896    * Pekka Nikander
   48897 
   48898    * Rick Niles
   48899 
   48900    * Jon Olson
   48901 
   48902    * Magnus Persson
   48903 
   48904    * Chris Pollard
   48905 
   48906    * Richard Polton
   48907 
   48908    * Derk Reefman
   48909 
   48910    * David Rees
   48911 
   48912    * Paul Reilly
   48913 
   48914    * Tom Reilly
   48915 
   48916    * Torsten Rueger
   48917 
   48918    * Danny Sadinoff
   48919 
   48920    * Marc Schifer
   48921 
   48922    * Erik Schnetter
   48923 
   48924    * Wayne K. Schroll
   48925 
   48926    * David Schuler
   48927 
   48928    * Vin Shelton
   48929 
   48930    * Tim Souder
   48931 
   48932    * Adam Sulmicki
   48933 
   48934    * Bill Thorson
   48935 
   48936    * George Talbot
   48937 
   48938    * Pedro A. M. Vazquez
   48939 
   48940    * Gregory Warnes
   48941 
   48942    * Ian Watson
   48943 
   48944    * David E. Young
   48945 
   48946    * And many others
   48947 
   48948  And finally we'd like to thank everyone who uses the compiler, provides
   48949 feedback and generally reminds us why we're doing this work in the first
   48950 place.
   48951 
   48952 
   48953 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
   48954 
   48955 Option Index
   48956 ************
   48957 
   48958 GCC's command line options are indexed here without any initial '-' or
   48959 '--'.  Where an option has both positive and negative forms (such as
   48960 '-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
   48961 indexed under the most appropriate form; it may sometimes be useful to
   48962 look up both forms.
   48963 
   48964 [index]
   48965 * Menu:
   48966 
   48967 * ###:                                   Overall Options.    (line  209)
   48968 * -fno-keep-inline-dllexport:            Optimize Options.   (line  316)
   48969 * -mcpu:                                 RX Options.         (line   30)
   48970 * -mpointer-size=SIZE:                   VMS Options.        (line   20)
   48971 * 8bit-idiv:                             i386 and x86-64 Options.
   48972                                                              (line  816)
   48973 * A:                                     Preprocessor Options.
   48974                                                              (line  596)
   48975 * allowable_client:                      Darwin Options.     (line  196)
   48976 * all_load:                              Darwin Options.     (line  110)
   48977 * ansi:                                  Standards.          (line   16)
   48978 * ansi <1>:                              C Dialect Options.  (line   11)
   48979 * ansi <2>:                              Preprocessor Options.
   48980                                                              (line  340)
   48981 * ansi <3>:                              Other Builtins.     (line   21)
   48982 * ansi <4>:                              Non-bugs.           (line  107)
   48983 * arch_errors_fatal:                     Darwin Options.     (line  114)
   48984 * aux-info:                              C Dialect Options.  (line  167)
   48985 * avx256-split-unaligned-load:           i386 and x86-64 Options.
   48986                                                              (line  824)
   48987 * avx256-split-unaligned-store:          i386 and x86-64 Options.
   48988                                                              (line  824)
   48989 * B:                                     Directory Options.  (line   44)
   48990 * Bdynamic:                              VxWorks Options.    (line   22)
   48991 * bind_at_load:                          Darwin Options.     (line  118)
   48992 * Bstatic:                               VxWorks Options.    (line   22)
   48993 * bundle:                                Darwin Options.     (line  123)
   48994 * bundle_loader:                         Darwin Options.     (line  127)
   48995 * c:                                     Overall Options.    (line  164)
   48996 * C:                                     Preprocessor Options.
   48997                                                              (line  653)
   48998 * c <1>:                                 Link Options.       (line   20)
   48999 * client_name:                           Darwin Options.     (line  196)
   49000 * compatibility_version:                 Darwin Options.     (line  196)
   49001 * coverage:                              Debugging Options.  (line  409)
   49002 * current_version:                       Darwin Options.     (line  196)
   49003 * d:                                     Debugging Options.  (line  541)
   49004 * D:                                     Preprocessor Options.
   49005                                                              (line   46)
   49006 * da:                                    Debugging Options.  (line  747)
   49007 * dA:                                    Debugging Options.  (line  750)
   49008 * dD:                                    Debugging Options.  (line  754)
   49009 * dD <1>:                                Preprocessor Options.
   49010                                                              (line  627)
   49011 * dead_strip:                            Darwin Options.     (line  196)
   49012 * dependency-file:                       Darwin Options.     (line  196)
   49013 * dH:                                    Debugging Options.  (line  758)
   49014 * dI:                                    Preprocessor Options.
   49015                                                              (line  636)
   49016 * dM:                                    Preprocessor Options.
   49017                                                              (line  612)
   49018 * dN:                                    Preprocessor Options.
   49019                                                              (line  633)
   49020 * dp:                                    Debugging Options.  (line  761)
   49021 * dP:                                    Debugging Options.  (line  766)
   49022 * dU:                                    Preprocessor Options.
   49023                                                              (line  640)
   49024 * dumpmachine:                           Debugging Options.  (line 1351)
   49025 * dumpspecs:                             Debugging Options.  (line 1359)
   49026 * dumpversion:                           Debugging Options.  (line 1355)
   49027 * dx:                                    Debugging Options.  (line  770)
   49028 * dylib_file:                            Darwin Options.     (line  196)
   49029 * dylinker_install_name:                 Darwin Options.     (line  196)
   49030 * dynamic:                               Darwin Options.     (line  196)
   49031 * dynamiclib:                            Darwin Options.     (line  131)
   49032 * E:                                     Overall Options.    (line  185)
   49033 * E <1>:                                 Link Options.       (line   20)
   49034 * EB:                                    MIPS Options.       (line    7)
   49035 * EL:                                    MIPS Options.       (line   10)
   49036 * exported_symbols_list:                 Darwin Options.     (line  196)
   49037 * F:                                     Darwin Options.     (line   31)
   49038 * fabi-version:                          C++ Dialect Options.
   49039                                                              (line   19)
   49040 * fada-spec-parent:                      Overall Options.    (line  367)
   49041 * faggressive-loop-optimizations:        Optimize Options.   (line  506)
   49042 * falign-functions:                      Optimize Options.   (line 1458)
   49043 * falign-jumps:                          Optimize Options.   (line 1507)
   49044 * falign-labels:                         Optimize Options.   (line 1476)
   49045 * falign-loops:                          Optimize Options.   (line 1494)
   49046 * fassociative-math:                     Optimize Options.   (line 1951)
   49047 * fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
   49048 * fauto-inc-dec:                         Optimize Options.   (line  530)
   49049 * fbounds-check:                         Code Gen Options.   (line   15)
   49050 * fbranch-probabilities:                 Optimize Options.   (line 2079)
   49051 * fbranch-target-load-optimize:          Optimize Options.   (line 2187)
   49052 * fbranch-target-load-optimize2:         Optimize Options.   (line 2193)
   49053 * fbtr-bb-exclusive:                     Optimize Options.   (line 2197)
   49054 * fcall-saved:                           Code Gen Options.   (line  343)
   49055 * fcall-used:                            Code Gen Options.   (line  329)
   49056 * fcaller-saves:                         Optimize Options.   (line  825)
   49057 * fcheck-data-deps:                      Optimize Options.   (line 1090)
   49058 * fcheck-new:                            C++ Dialect Options.
   49059                                                              (line   54)
   49060 * fcombine-stack-adjustments:            Optimize Options.   (line  837)
   49061 * fcommon:                               Variable Attributes.
   49062                                                              (line  104)
   49063 * fcompare-debug:                        Debugging Options.  (line  200)
   49064 * fcompare-debug-second:                 Debugging Options.  (line  226)
   49065 * fcompare-elim:                         Optimize Options.   (line 1787)
   49066 * fcond-mismatch:                        C Dialect Options.  (line  317)
   49067 * fconserve-stack:                       Optimize Options.   (line  843)
   49068 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
   49069                                                              (line   30)
   49070 * fconstexpr-depth:                      C++ Dialect Options.
   49071                                                              (line   64)
   49072 * fcprop-registers:                      Optimize Options.   (line 1805)
   49073 * fcrossjumping:                         Optimize Options.   (line  523)
   49074 * fcse-follow-jumps:                     Optimize Options.   (line  442)
   49075 * fcse-skip-blocks:                      Optimize Options.   (line  451)
   49076 * fcx-fortran-rules:                     Optimize Options.   (line 2066)
   49077 * fcx-limited-range:                     Optimize Options.   (line 2054)
   49078 * fdata-sections:                        Optimize Options.   (line 2168)
   49079 * fdbg-cnt:                              Debugging Options.  (line  461)
   49080 * fdbg-cnt-list:                         Debugging Options.  (line  458)
   49081 * fdce:                                  Optimize Options.   (line  536)
   49082 * fdebug-cpp:                            Preprocessor Options.
   49083                                                              (line  527)
   49084 * fdebug-prefix-map:                     Debugging Options.  (line  320)
   49085 * fdebug-types-section:                  Debugging Options.  (line   74)
   49086 * fdeduce-init-list:                     C++ Dialect Options.
   49087                                                              (line   70)
   49088 * fdelayed-branch:                       Optimize Options.   (line  672)
   49089 * fdelete-dead-exceptions:               Code Gen Options.   (line  131)
   49090 * fdelete-null-pointer-checks:           Optimize Options.   (line  559)
   49091 * fdevirtualize:                         Optimize Options.   (line  577)
   49092 * fdiagnostics-show-caret:               Language Independent Options.
   49093                                                              (line   40)
   49094 * fdiagnostics-show-location:            Language Independent Options.
   49095                                                              (line   20)
   49096 * fdiagnostics-show-option:              Language Independent Options.
   49097                                                              (line   34)
   49098 * fdirectives-only:                      Preprocessor Options.
   49099                                                              (line  475)
   49100 * fdisable-:                             Debugging Options.  (line  471)
   49101 * fdollars-in-identifiers:               Preprocessor Options.
   49102                                                              (line  496)
   49103 * fdollars-in-identifiers <1>:           Interoperation.     (line  141)
   49104 * fdse:                                  Optimize Options.   (line  540)
   49105 * fdump-ada-spec:                        Overall Options.    (line  362)
   49106 * fdump-class-hierarchy:                 Debugging Options.  (line  801)
   49107 * fdump-final-insns:                     Debugging Options.  (line  194)
   49108 * fdump-go-spec:                         Overall Options.    (line  371)
   49109 * fdump-ipa:                             Debugging Options.  (line  809)
   49110 * fdump-noaddr:                          Debugging Options.  (line  774)
   49111 * fdump-passes:                          Debugging Options.  (line  826)
   49112 * fdump-rtl-alignments:                  Debugging Options.  (line  562)
   49113 * fdump-rtl-all:                         Debugging Options.  (line  747)
   49114 * fdump-rtl-asmcons:                     Debugging Options.  (line  565)
   49115 * fdump-rtl-auto_inc_dec:                Debugging Options.  (line  569)
   49116 * fdump-rtl-barriers:                    Debugging Options.  (line  573)
   49117 * fdump-rtl-bbpart:                      Debugging Options.  (line  576)
   49118 * fdump-rtl-bbro:                        Debugging Options.  (line  579)
   49119 * fdump-rtl-btl2:                        Debugging Options.  (line  583)
   49120 * fdump-rtl-btl2 <1>:                    Debugging Options.  (line  583)
   49121 * fdump-rtl-bypass:                      Debugging Options.  (line  587)
   49122 * fdump-rtl-ce1:                         Debugging Options.  (line  598)
   49123 * fdump-rtl-ce2:                         Debugging Options.  (line  598)
   49124 * fdump-rtl-ce3:                         Debugging Options.  (line  598)
   49125 * fdump-rtl-combine:                     Debugging Options.  (line  590)
   49126 * fdump-rtl-compgotos:                   Debugging Options.  (line  593)
   49127 * fdump-rtl-cprop_hardreg:               Debugging Options.  (line  602)
   49128 * fdump-rtl-csa:                         Debugging Options.  (line  605)
   49129 * fdump-rtl-cse1:                        Debugging Options.  (line  609)
   49130 * fdump-rtl-cse2:                        Debugging Options.  (line  609)
   49131 * fdump-rtl-dbr:                         Debugging Options.  (line  616)
   49132 * fdump-rtl-dce:                         Debugging Options.  (line  613)
   49133 * fdump-rtl-dce1:                        Debugging Options.  (line  620)
   49134 * fdump-rtl-dce2:                        Debugging Options.  (line  620)
   49135 * fdump-rtl-dfinish:                     Debugging Options.  (line  743)
   49136 * fdump-rtl-dfinit:                      Debugging Options.  (line  743)
   49137 * fdump-rtl-eh:                          Debugging Options.  (line  624)
   49138 * fdump-rtl-eh_ranges:                   Debugging Options.  (line  627)
   49139 * fdump-rtl-expand:                      Debugging Options.  (line  630)
   49140 * fdump-rtl-fwprop1:                     Debugging Options.  (line  634)
   49141 * fdump-rtl-fwprop2:                     Debugging Options.  (line  634)
   49142 * fdump-rtl-gcse1:                       Debugging Options.  (line  639)
   49143 * fdump-rtl-gcse2:                       Debugging Options.  (line  639)
   49144 * fdump-rtl-init-regs:                   Debugging Options.  (line  643)
   49145 * fdump-rtl-initvals:                    Debugging Options.  (line  646)
   49146 * fdump-rtl-into_cfglayout:              Debugging Options.  (line  649)
   49147 * fdump-rtl-ira:                         Debugging Options.  (line  652)
   49148 * fdump-rtl-jump:                        Debugging Options.  (line  655)
   49149 * fdump-rtl-loop2:                       Debugging Options.  (line  658)
   49150 * fdump-rtl-mach:                        Debugging Options.  (line  662)
   49151 * fdump-rtl-mode_sw:                     Debugging Options.  (line  666)
   49152 * fdump-rtl-outof_cfglayout:             Debugging Options.  (line  672)
   49153 * fdump-rtl-peephole2:                   Debugging Options.  (line  675)
   49154 * fdump-rtl-postreload:                  Debugging Options.  (line  678)
   49155 * fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  681)
   49156 * fdump-rtl-regclass:                    Debugging Options.  (line  743)
   49157 * fdump-rtl-regmove:                     Debugging Options.  (line  684)
   49158 * fdump-rtl-rnreg:                       Debugging Options.  (line  669)
   49159 * fdump-rtl-sched1:                      Debugging Options.  (line  688)
   49160 * fdump-rtl-sched2:                      Debugging Options.  (line  688)
   49161 * fdump-rtl-see:                         Debugging Options.  (line  692)
   49162 * fdump-rtl-seqabstr:                    Debugging Options.  (line  695)
   49163 * fdump-rtl-shorten:                     Debugging Options.  (line  698)
   49164 * fdump-rtl-sibling:                     Debugging Options.  (line  701)
   49165 * fdump-rtl-sms:                         Debugging Options.  (line  713)
   49166 * fdump-rtl-split1:                      Debugging Options.  (line  708)
   49167 * fdump-rtl-split2:                      Debugging Options.  (line  708)
   49168 * fdump-rtl-split3:                      Debugging Options.  (line  708)
   49169 * fdump-rtl-split4:                      Debugging Options.  (line  708)
   49170 * fdump-rtl-split5:                      Debugging Options.  (line  708)
   49171 * fdump-rtl-stack:                       Debugging Options.  (line  717)
   49172 * fdump-rtl-subreg1:                     Debugging Options.  (line  723)
   49173 * fdump-rtl-subreg2:                     Debugging Options.  (line  723)
   49174 * fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  743)
   49175 * fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  743)
   49176 * fdump-rtl-unshare:                     Debugging Options.  (line  727)
   49177 * fdump-rtl-vartrack:                    Debugging Options.  (line  730)
   49178 * fdump-rtl-vregs:                       Debugging Options.  (line  733)
   49179 * fdump-rtl-web:                         Debugging Options.  (line  736)
   49180 * fdump-statistics:                      Debugging Options.  (line  830)
   49181 * fdump-translation-unit:                Debugging Options.  (line  792)
   49182 * fdump-tree:                            Debugging Options.  (line  842)
   49183 * fdump-tree-alias:                      Debugging Options.  (line  964)
   49184 * fdump-tree-all:                        Debugging Options.  (line 1053)
   49185 * fdump-tree-ccp:                        Debugging Options.  (line  968)
   49186 * fdump-tree-cfg:                        Debugging Options.  (line  952)
   49187 * fdump-tree-ch:                         Debugging Options.  (line  956)
   49188 * fdump-tree-copyprop:                   Debugging Options.  (line  984)
   49189 * fdump-tree-copyrename:                 Debugging Options.  (line 1029)
   49190 * fdump-tree-dce:                        Debugging Options.  (line  992)
   49191 * fdump-tree-dom:                        Debugging Options.  (line 1010)
   49192 * fdump-tree-dse:                        Debugging Options.  (line 1015)
   49193 * fdump-tree-forwprop:                   Debugging Options.  (line 1024)
   49194 * fdump-tree-fre:                        Debugging Options.  (line  980)
   49195 * fdump-tree-gimple:                     Debugging Options.  (line  947)
   49196 * fdump-tree-mudflap:                    Debugging Options.  (line  996)
   49197 * fdump-tree-nrv:                        Debugging Options.  (line 1034)
   49198 * fdump-tree-optimized:                  Debugging Options.  (line  944)
   49199 * fdump-tree-original:                   Debugging Options.  (line  941)
   49200 * fdump-tree-phiopt:                     Debugging Options.  (line 1019)
   49201 * fdump-tree-pre:                        Debugging Options.  (line  976)
   49202 * fdump-tree-sink:                       Debugging Options.  (line 1006)
   49203 * fdump-tree-slp:                        Debugging Options.  (line 1044)
   49204 * fdump-tree-sra:                        Debugging Options.  (line 1001)
   49205 * fdump-tree-ssa:                        Debugging Options.  (line  960)
   49206 * fdump-tree-storeccp:                   Debugging Options.  (line  972)
   49207 * fdump-tree-store_copyprop:             Debugging Options.  (line  988)
   49208 * fdump-tree-vect:                       Debugging Options.  (line 1039)
   49209 * fdump-tree-vrp:                        Debugging Options.  (line 1049)
   49210 * fdump-unnumbered:                      Debugging Options.  (line  780)
   49211 * fdump-unnumbered-links:                Debugging Options.  (line  786)
   49212 * fdwarf2-cfi-asm:                       Debugging Options.  (line  324)
   49213 * fearly-inlining:                       Optimize Options.   (line  275)
   49214 * feliminate-dwarf2-dups:                Debugging Options.  (line  239)
   49215 * feliminate-unused-debug-symbols:       Debugging Options.  (line   62)
   49216 * feliminate-unused-debug-types:         Debugging Options.  (line 1363)
   49217 * fenable-:                              Debugging Options.  (line  471)
   49218 * fexceptions:                           Code Gen Options.   (line  109)
   49219 * fexcess-precision:                     Optimize Options.   (line 1878)
   49220 * fexec-charset:                         Preprocessor Options.
   49221                                                              (line  554)
   49222 * fexpensive-optimizations:              Optimize Options.   (line  584)
   49223 * fext-numeric-literals:                 C++ Dialect Options.
   49224                                                              (line  541)
   49225 * fextended-identifiers:                 Preprocessor Options.
   49226                                                              (line  499)
   49227 * fextern-tls-init:                      C++ Dialect Options.
   49228                                                              (line  120)
   49229 * ffast-math:                            Optimize Options.   (line 1901)
   49230 * ffat-lto-objects:                      Optimize Options.   (line 1768)
   49231 * ffinite-math-only:                     Optimize Options.   (line 1978)
   49232 * ffix-and-continue:                     Darwin Options.     (line  104)
   49233 * ffixed:                                Code Gen Options.   (line  317)
   49234 * ffloat-store:                          Optimize Options.   (line 1864)
   49235 * ffloat-store <1>:                      Disappointments.    (line   77)
   49236 * ffor-scope:                            C++ Dialect Options.
   49237                                                              (line  141)
   49238 * fforward-propagate:                    Optimize Options.   (line  185)
   49239 * ffp-contract:                          Optimize Options.   (line  194)
   49240 * ffreestanding:                         Standards.          (line   93)
   49241 * ffreestanding <1>:                     C Dialect Options.  (line  246)
   49242 * ffreestanding <2>:                     Warning Options.    (line  253)
   49243 * ffreestanding <3>:                     Function Attributes.
   49244                                                              (line  454)
   49245 * ffriend-injection:                     C++ Dialect Options.
   49246                                                              (line   91)
   49247 * ffunction-sections:                    Optimize Options.   (line 2168)
   49248 * fgcse:                                 Optimize Options.   (line  465)
   49249 * fgcse-after-reload:                    Optimize Options.   (line  501)
   49250 * fgcse-las:                             Optimize Options.   (line  494)
   49251 * fgcse-lm:                              Optimize Options.   (line  476)
   49252 * fgcse-sm:                              Optimize Options.   (line  485)
   49253 * fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
   49254                                                              (line   39)
   49255 * fgnu-tm:                               C Dialect Options.  (line  266)
   49256 * fgnu89-inline:                         C Dialect Options.  (line  146)
   49257 * fgraphite-identity:                    Optimize Options.   (line 1070)
   49258 * fhosted:                               C Dialect Options.  (line  238)
   49259 * fif-conversion:                        Optimize Options.   (line  544)
   49260 * fif-conversion2:                       Optimize Options.   (line  553)
   49261 * filelist:                              Darwin Options.     (line  196)
   49262 * findirect-data:                        Darwin Options.     (line  104)
   49263 * findirect-inlining:                    Optimize Options.   (line  248)
   49264 * finhibit-size-directive:               Code Gen Options.   (line  238)
   49265 * finline-functions:                     Optimize Options.   (line  256)
   49266 * finline-functions-called-once:         Optimize Options.   (line  267)
   49267 * finline-limit:                         Optimize Options.   (line  291)
   49268 * finline-small-functions:               Optimize Options.   (line  239)
   49269 * finput-charset:                        Preprocessor Options.
   49270                                                              (line  567)
   49271 * finstrument-functions:                 Code Gen Options.   (line  373)
   49272 * finstrument-functions <1>:             Function Attributes.
   49273                                                              (line  953)
   49274 * finstrument-functions-exclude-file-list: Code Gen Options. (line  408)
   49275 * finstrument-functions-exclude-function-list: Code Gen Options.
   49276                                                              (line  429)
   49277 * fipa-cp:                               Optimize Options.   (line  909)
   49278 * fipa-cp-clone:                         Optimize Options.   (line  917)
   49279 * fipa-profile:                          Optimize Options.   (line  901)
   49280 * fipa-pta:                              Optimize Options.   (line  895)
   49281 * fipa-pure-const:                       Optimize Options.   (line  887)
   49282 * fipa-reference:                        Optimize Options.   (line  891)
   49283 * fipa-sra:                              Optimize Options.   (line  284)
   49284 * fira-hoist-pressure:                   Optimize Options.   (line  639)
   49285 * fira-loop-pressure:                    Optimize Options.   (line  646)
   49286 * fira-verbose:                          Optimize Options.   (line  666)
   49287 * fivopts:                               Optimize Options.   (line 1166)
   49288 * fkeep-inline-functions:                Optimize Options.   (line  322)
   49289 * fkeep-inline-functions <1>:            Inline.             (line   51)
   49290 * fkeep-static-consts:                   Optimize Options.   (line  329)
   49291 * flat_namespace:                        Darwin Options.     (line  196)
   49292 * flax-vector-conversions:               C Dialect Options.  (line  322)
   49293 * fleading-underscore:                   Code Gen Options.   (line  511)
   49294 * floop-block:                           Optimize Options.   (line 1041)
   49295 * floop-interchange:                     Optimize Options.   (line  996)
   49296 * floop-nest-optimize:                   Optimize Options.   (line 1078)
   49297 * floop-parallelize-all:                 Optimize Options.   (line 1084)
   49298 * floop-strip-mine:                      Optimize Options.   (line 1020)
   49299 * flto:                                  Optimize Options.   (line 1561)
   49300 * flto-partition:                        Optimize Options.   (line 1723)
   49301 * fmax-errors:                           Warning Options.    (line   18)
   49302 * fmem-report:                           Debugging Options.  (line  348)
   49303 * fmem-report-wpa:                       Debugging Options.  (line  352)
   49304 * fmerge-all-constants:                  Optimize Options.   (line  348)
   49305 * fmerge-constants:                      Optimize Options.   (line  338)
   49306 * fmerge-debug-strings:                  Debugging Options.  (line  313)
   49307 * fmessage-length:                       Language Independent Options.
   49308                                                              (line   14)
   49309 * fmodulo-sched:                         Optimize Options.   (line  359)
   49310 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  364)
   49311 * fmove-loop-invariants:                 Optimize Options.   (line 2158)
   49312 * fms-extensions:                        C Dialect Options.  (line  281)
   49313 * fms-extensions <1>:                    C++ Dialect Options.
   49314                                                              (line  175)
   49315 * fms-extensions <2>:                    Unnamed Fields.     (line   36)
   49316 * fmudflap:                              Optimize Options.   (line  404)
   49317 * fmudflapir:                            Optimize Options.   (line  404)
   49318 * fmudflapth:                            Optimize Options.   (line  404)
   49319 * fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
   49320                                                              (line   43)
   49321 * fno-access-control:                    C++ Dialect Options.
   49322                                                              (line   50)
   49323 * fno-asm:                               C Dialect Options.  (line  190)
   49324 * fno-branch-count-reg:                  Optimize Options.   (line  371)
   49325 * fno-builtin:                           C Dialect Options.  (line  204)
   49326 * fno-builtin <1>:                       Warning Options.    (line  253)
   49327 * fno-builtin <2>:                       Function Attributes.
   49328                                                              (line  454)
   49329 * fno-builtin <3>:                       Other Builtins.     (line   14)
   49330 * fno-canonical-system-headers:          Preprocessor Options.
   49331                                                              (line  504)
   49332 * fno-common:                            Code Gen Options.   (line  216)
   49333 * fno-common <1>:                        Variable Attributes.
   49334                                                              (line  104)
   49335 * fno-compare-debug:                     Debugging Options.  (line  200)
   49336 * fno-debug-types-section:               Debugging Options.  (line   74)
   49337 * fno-default-inline:                    C++ Dialect Options.
   49338                                                              (line  354)
   49339 * fno-default-inline <1>:                Optimize Options.   (line  169)
   49340 * fno-default-inline <2>:                Inline.             (line   71)
   49341 * fno-defer-pop:                         Optimize Options.   (line  177)
   49342 * fno-diagnostics-show-caret:            Language Independent Options.
   49343                                                              (line   40)
   49344 * fno-diagnostics-show-option:           Language Independent Options.
   49345                                                              (line   34)
   49346 * fno-dwarf2-cfi-asm:                    Debugging Options.  (line  324)
   49347 * fno-elide-constructors:                C++ Dialect Options.
   49348                                                              (line  104)
   49349 * fno-eliminate-unused-debug-types:      Debugging Options.  (line 1363)
   49350 * fno-enforce-eh-specs:                  C++ Dialect Options.
   49351                                                              (line  110)
   49352 * fno-ext-numeric-literals:              C++ Dialect Options.
   49353                                                              (line  541)
   49354 * fno-extern-tls-init:                   C++ Dialect Options.
   49355                                                              (line  120)
   49356 * fno-for-scope:                         C++ Dialect Options.
   49357                                                              (line  141)
   49358 * fno-function-cse:                      Optimize Options.   (line  381)
   49359 * fno-gnu-keywords:                      C++ Dialect Options.
   49360                                                              (line  153)
   49361 * fno-guess-branch-probability:          Optimize Options.   (line 1330)
   49362 * fno-ident:                             Code Gen Options.   (line  235)
   49363 * fno-implement-inlines:                 C++ Dialect Options.
   49364                                                              (line  170)
   49365 * fno-implement-inlines <1>:             C++ Interface.      (line   75)
   49366 * fno-implicit-inline-templates:         C++ Dialect Options.
   49367                                                              (line  164)
   49368 * fno-implicit-templates:                C++ Dialect Options.
   49369                                                              (line  158)
   49370 * fno-implicit-templates <1>:            Template Instantiation.
   49371                                                              (line   78)
   49372 * fno-inline:                            Optimize Options.   (line  231)
   49373 * fno-ira-share-save-slots:              Optimize Options.   (line  654)
   49374 * fno-ira-share-spill-slots:             Optimize Options.   (line  660)
   49375 * fno-jump-tables:                       Code Gen Options.   (line  309)
   49376 * fno-math-errno:                        Optimize Options.   (line 1915)
   49377 * fno-merge-debug-strings:               Debugging Options.  (line  313)
   49378 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
   49379                                                              (line   49)
   49380 * fno-nonansi-builtins:                  C++ Dialect Options.
   49381                                                              (line  180)
   49382 * fno-operator-names:                    C++ Dialect Options.
   49383                                                              (line  196)
   49384 * fno-optional-diags:                    C++ Dialect Options.
   49385                                                              (line  200)
   49386 * fno-peephole:                          Optimize Options.   (line 1321)
   49387 * fno-peephole2:                         Optimize Options.   (line 1321)
   49388 * fno-pretty-templates:                  C++ Dialect Options.
   49389                                                              (line  210)
   49390 * fno-rtti:                              C++ Dialect Options.
   49391                                                              (line  227)
   49392 * fno-sched-interblock:                  Optimize Options.   (line  698)
   49393 * fno-sched-spec:                        Optimize Options.   (line  703)
   49394 * fno-set-stack-executable:              i386 and x86-64 Windows Options.
   49395                                                              (line   46)
   49396 * fno-show-column:                       Preprocessor Options.
   49397                                                              (line  591)
   49398 * fno-signed-bitfields:                  C Dialect Options.  (line  355)
   49399 * fno-signed-zeros:                      Optimize Options.   (line 1990)
   49400 * fno-stack-limit:                       Code Gen Options.   (line  479)
   49401 * fno-threadsafe-statics:                C++ Dialect Options.
   49402                                                              (line  264)
   49403 * fno-toplevel-reorder:                  Optimize Options.   (line 1527)
   49404 * fno-trapping-math:                     Optimize Options.   (line 2000)
   49405 * fno-unsigned-bitfields:                C Dialect Options.  (line  355)
   49406 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
   49407                                                              (line  277)
   49408 * fno-var-tracking-assignments:          Debugging Options.  (line 1271)
   49409 * fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1280)
   49410 * fno-weak:                              C++ Dialect Options.
   49411                                                              (line  339)
   49412 * fno-working-directory:                 Preprocessor Options.
   49413                                                              (line  577)
   49414 * fno-writable-relocated-rdata:          i386 and x86-64 Windows Options.
   49415                                                              (line   53)
   49416 * fno-zero-initialized-in-bss:           Optimize Options.   (line  392)
   49417 * fnon-call-exceptions:                  Code Gen Options.   (line  123)
   49418 * fnothrow-opt:                          C++ Dialect Options.
   49419                                                              (line  185)
   49420 * fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
   49421                                                              (line   56)
   49422 * fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
   49423                                                              (line   67)
   49424 * fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
   49425                                                              (line   92)
   49426 * fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
   49427                                                              (line   96)
   49428 * fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
   49429                                                              (line  105)
   49430 * fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
   49431                                                              (line  111)
   49432 * fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
   49433                                                              (line  120)
   49434 * fomit-frame-pointer:                   Optimize Options.   (line  205)
   49435 * fopenmp:                               C Dialect Options.  (line  257)
   49436 * fopt-info:                             Debugging Options.  (line 1059)
   49437 * foptimize-register-move:               Optimize Options.   (line  599)
   49438 * foptimize-sibling-calls:               Optimize Options.   (line  226)
   49439 * force_cpusubtype_ALL:                  Darwin Options.     (line  135)
   49440 * force_flat_namespace:                  Darwin Options.     (line  196)
   49441 * fpack-struct:                          Code Gen Options.   (line  360)
   49442 * fpartial-inlining:                     Optimize Options.   (line 1296)
   49443 * fpcc-struct-return:                    Code Gen Options.   (line  152)
   49444 * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
   49445 * fpch-deps:                             Preprocessor Options.
   49446                                                              (line  296)
   49447 * fpch-preprocess:                       Preprocessor Options.
   49448                                                              (line  304)
   49449 * fpeel-loops:                           Optimize Options.   (line 2150)
   49450 * fpermissive:                           C++ Dialect Options.
   49451                                                              (line  205)
   49452 * fpic:                                  Code Gen Options.   (line  266)
   49453 * fPIC:                                  Code Gen Options.   (line  287)
   49454 * fpie:                                  Code Gen Options.   (line  300)
   49455 * fPIE:                                  Code Gen Options.   (line  300)
   49456 * fplan9-extensions:                     Unnamed Fields.     (line   43)
   49457 * fpost-ipa-mem-report:                  Debugging Options.  (line  357)
   49458 * fpre-ipa-mem-report:                   Debugging Options.  (line  356)
   49459 * fpredictive-commoning:                 Optimize Options.   (line 1303)
   49460 * fprefetch-loop-arrays:                 Optimize Options.   (line 1310)
   49461 * fpreprocessed:                         Preprocessor Options.
   49462                                                              (line  508)
   49463 * fprofile-arcs:                         Debugging Options.  (line  394)
   49464 * fprofile-arcs <1>:                     Other Builtins.     (line  253)
   49465 * fprofile-correction:                   Optimize Options.   (line 1812)
   49466 * fprofile-dir:                          Optimize Options.   (line 1819)
   49467 * fprofile-generate:                     Optimize Options.   (line 1830)
   49468 * fprofile-report:                       Debugging Options.  (line  361)
   49469 * fprofile-use:                          Optimize Options.   (line 1844)
   49470 * fprofile-values:                       Optimize Options.   (line 2098)
   49471 * fpu:                                   RX Options.         (line   17)
   49472 * frandom-seed:                          Debugging Options.  (line 1165)
   49473 * freciprocal-math:                      Optimize Options.   (line 1968)
   49474 * frecord-gcc-switches:                  Code Gen Options.   (line  254)
   49475 * free:                                  Optimize Options.   (line  590)
   49476 * freg-struct-return:                    Code Gen Options.   (line  170)
   49477 * fregmove:                              Optimize Options.   (line  599)
   49478 * frename-registers:                     Optimize Options.   (line 2117)
   49479 * freorder-blocks:                       Optimize Options.   (line 1347)
   49480 * freorder-blocks-and-partition:         Optimize Options.   (line 1353)
   49481 * freorder-functions:                    Optimize Options.   (line 1364)
   49482 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
   49483                                                              (line  131)
   49484 * frepo:                                 C++ Dialect Options.
   49485                                                              (line  222)
   49486 * frepo <1>:                             Template Instantiation.
   49487                                                              (line   54)
   49488 * frerun-cse-after-loop:                 Optimize Options.   (line  459)
   49489 * freschedule-modulo-scheduled-loops:    Optimize Options.   (line  797)
   49490 * frounding-math:                        Optimize Options.   (line 2015)
   49491 * fsched-critical-path-heuristic:        Optimize Options.   (line  763)
   49492 * fsched-dep-count-heuristic:            Optimize Options.   (line  790)
   49493 * fsched-group-heuristic:                Optimize Options.   (line  757)
   49494 * fsched-last-insn-heuristic:            Optimize Options.   (line  783)
   49495 * fsched-pressure:                       Optimize Options.   (line  708)
   49496 * fsched-rank-heuristic:                 Optimize Options.   (line  776)
   49497 * fsched-spec-insn-heuristic:            Optimize Options.   (line  769)
   49498 * fsched-spec-load:                      Optimize Options.   (line  717)
   49499 * fsched-spec-load-dangerous:            Optimize Options.   (line  722)
   49500 * fsched-stalled-insns:                  Optimize Options.   (line  728)
   49501 * fsched-stalled-insns-dep:              Optimize Options.   (line  738)
   49502 * fsched-verbose:                        Debugging Options.  (line 1175)
   49503 * fsched2-use-superblocks:               Optimize Options.   (line  747)
   49504 * fschedule-insns:                       Optimize Options.   (line  679)
   49505 * fschedule-insns2:                      Optimize Options.   (line  689)
   49506 * fsection-anchors:                      Optimize Options.   (line 2213)
   49507 * fsel-sched-pipelining:                 Optimize Options.   (line  810)
   49508 * fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  815)
   49509 * fselective-scheduling:                 Optimize Options.   (line  802)
   49510 * fselective-scheduling2:                Optimize Options.   (line  806)
   49511 * fshort-double:                         Code Gen Options.   (line  198)
   49512 * fshort-enums:                          Code Gen Options.   (line  188)
   49513 * fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
   49514                                                              (line   43)
   49515 * fshort-enums <2>:                      Type Attributes.    (line  113)
   49516 * fshort-enums <3>:                      Non-bugs.           (line   42)
   49517 * fshort-wchar:                          Code Gen Options.   (line  206)
   49518 * fshrink-wrap:                          Optimize Options.   (line  820)
   49519 * fsignaling-nans:                       Optimize Options.   (line 2035)
   49520 * fsigned-bitfields:                     C Dialect Options.  (line  355)
   49521 * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
   49522 * fsigned-char:                          C Dialect Options.  (line  345)
   49523 * fsigned-char <1>:                      Characters implementation.
   49524                                                              (line   31)
   49525 * fsingle-precision-constant:            Optimize Options.   (line 2050)
   49526 * fsplit-ivs-in-unroller:                Optimize Options.   (line 1277)
   49527 * fsplit-stack:                          Code Gen Options.   (line  493)
   49528 * fsplit-stack <1>:                      Function Attributes.
   49529                                                              (line  958)
   49530 * fsplit-wide-types:                     Optimize Options.   (line  434)
   49531 * fstack-check:                          Code Gen Options.   (line  441)
   49532 * fstack-limit-register:                 Code Gen Options.   (line  479)
   49533 * fstack-limit-symbol:                   Code Gen Options.   (line  479)
   49534 * fstack-protector:                      Optimize Options.   (line 2201)
   49535 * fstack-protector-all:                  Optimize Options.   (line 2210)
   49536 * fstack-usage:                          Debugging Options.  (line  365)
   49537 * fstack_reuse:                          Code Gen Options.   (line   21)
   49538 * fstats:                                C++ Dialect Options.
   49539                                                              (line  237)
   49540 * fstrict-aliasing:                      Optimize Options.   (line 1377)
   49541 * fstrict-enums:                         C++ Dialect Options.
   49542                                                              (line  242)
   49543 * fstrict-overflow:                      Optimize Options.   (line 1423)
   49544 * fstrict-volatile-bitfields:            Code Gen Options.   (line  596)
   49545 * fsync-libcalls:                        Code Gen Options.   (line  624)
   49546 * fsyntax-only:                          Warning Options.    (line   14)
   49547 * ftabstop:                              Preprocessor Options.
   49548                                                              (line  521)
   49549 * ftemplate-backtrace-limit:             C++ Dialect Options.
   49550                                                              (line  251)
   49551 * ftemplate-depth:                       C++ Dialect Options.
   49552                                                              (line  255)
   49553 * ftest-coverage:                        Debugging Options.  (line  449)
   49554 * fthread-jumps:                         Optimize Options.   (line  425)
   49555 * ftime-report:                          Debugging Options.  (line  344)
   49556 * ftls-model:                            Code Gen Options.   (line  522)
   49557 * ftracer:                               Optimize Options.   (line 1260)
   49558 * ftracer <1>:                           Optimize Options.   (line 2127)
   49559 * ftrack-macro-expansion:                Preprocessor Options.
   49560                                                              (line  536)
   49561 * ftrapv:                                Code Gen Options.   (line   97)
   49562 * ftree-bit-ccp:                         Optimize Options.   (line  931)
   49563 * ftree-builtin-call-dce:                Optimize Options.   (line  959)
   49564 * ftree-ccp:                             Optimize Options.   (line  937)
   49565 * ftree-ch:                              Optimize Options.   (line  979)
   49566 * ftree-copy-prop:                       Optimize Options.   (line  882)
   49567 * ftree-copyrename:                      Optimize Options.   (line 1190)
   49568 * ftree-dce:                             Optimize Options.   (line  955)
   49569 * ftree-dominator-opts:                  Optimize Options.   (line  965)
   49570 * ftree-dse:                             Optimize Options.   (line  972)
   49571 * ftree-forwprop:                        Optimize Options.   (line  861)
   49572 * ftree-fre:                             Optimize Options.   (line  865)
   49573 * ftree-loop-im:                         Optimize Options.   (line 1151)
   49574 * ftree-loop-ivcanon:                    Optimize Options.   (line 1160)
   49575 * ftree-loop-linear:                     Optimize Options.   (line  990)
   49576 * ftree-loop-optimize:                   Optimize Options.   (line  986)
   49577 * ftree-parallelize-loops:               Optimize Options.   (line 1171)
   49578 * ftree-partial-pre:                     Optimize Options.   (line  857)
   49579 * ftree-phiprop:                         Optimize Options.   (line  872)
   49580 * ftree-pre:                             Optimize Options.   (line  853)
   49581 * ftree-pta:                             Optimize Options.   (line 1180)
   49582 * ftree-reassoc:                         Optimize Options.   (line  849)
   49583 * ftree-sink:                            Optimize Options.   (line  927)
   49584 * ftree-slp-vectorize:                   Optimize Options.   (line 1234)
   49585 * ftree-slsr:                            Optimize Options.   (line 1224)
   49586 * ftree-sra:                             Optimize Options.   (line 1184)
   49587 * ftree-ter:                             Optimize Options.   (line 1216)
   49588 * ftree-vect-loop-version:               Optimize Options.   (line 1238)
   49589 * ftree-vectorize:                       Optimize Options.   (line 1230)
   49590 * ftree-vectorizer-verbose:              Debugging Options.  (line 1148)
   49591 * ftree-vrp:                             Optimize Options.   (line 1251)
   49592 * funit-at-a-time:                       Optimize Options.   (line 1520)
   49593 * funroll-all-loops:                     Optimize Options.   (line 1271)
   49594 * funroll-all-loops <1>:                 Optimize Options.   (line 2144)
   49595 * funroll-loops:                         Optimize Options.   (line 1265)
   49596 * funroll-loops <1>:                     Optimize Options.   (line 2134)
   49597 * funsafe-loop-optimizations:            Optimize Options.   (line  515)
   49598 * funsafe-math-optimizations:            Optimize Options.   (line 1933)
   49599 * funsigned-bitfields:                   C Dialect Options.  (line  355)
   49600 * funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
   49601                                                              (line   17)
   49602 * funsigned-bitfields <2>:               Non-bugs.           (line   57)
   49603 * funsigned-char:                        C Dialect Options.  (line  327)
   49604 * funsigned-char <1>:                    Characters implementation.
   49605                                                              (line   31)
   49606 * funswitch-loops:                       Optimize Options.   (line 2162)
   49607 * funwind-tables:                        Code Gen Options.   (line  139)
   49608 * fuse-cxa-atexit:                       C++ Dialect Options.
   49609                                                              (line  270)
   49610 * fvar-tracking:                         Debugging Options.  (line 1261)
   49611 * fvar-tracking-assignments:             Debugging Options.  (line 1271)
   49612 * fvar-tracking-assignments-toggle:      Debugging Options.  (line 1280)
   49613 * fvariable-expansion-in-unroller:       Optimize Options.   (line 1291)
   49614 * fvect-cost-model:                      Optimize Options.   (line 1247)
   49615 * fverbose-asm:                          Code Gen Options.   (line  245)
   49616 * fvisibility:                           Code Gen Options.   (line  530)
   49617 * fvisibility-inlines-hidden:            C++ Dialect Options.
   49618                                                              (line  282)
   49619 * fvisibility-ms-compat:                 C++ Dialect Options.
   49620                                                              (line  310)
   49621 * fvpt:                                  Optimize Options.   (line 2107)
   49622 * fweb:                                  Optimize Options.   (line 1539)
   49623 * fwhole-program:                        Optimize Options.   (line 1550)
   49624 * fwide-exec-charset:                    Preprocessor Options.
   49625                                                              (line  559)
   49626 * fworking-directory:                    Preprocessor Options.
   49627                                                              (line  577)
   49628 * fwrapv:                                Code Gen Options.   (line  101)
   49629 * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
   49630                                                              (line  141)
   49631 * g:                                     Debugging Options.  (line   10)
   49632 * G:                                     M32R/D Options.     (line   57)
   49633 * G <1>:                                 MIPS Options.       (line  329)
   49634 * G <2>:                                 RS/6000 and PowerPC Options.
   49635                                                              (line  739)
   49636 * G <3>:                                 System V Options.   (line   10)
   49637 * gcoff:                                 Debugging Options.  (line   89)
   49638 * gdwarf-VERSION:                        Debugging Options.  (line  107)
   49639 * gen-decls:                             Objective-C and Objective-C++ Dialect Options.
   49640                                                              (line  153)
   49641 * gfull:                                 Darwin Options.     (line   69)
   49642 * ggdb:                                  Debugging Options.  (line   45)
   49643 * gno-record-gcc-switches:               Debugging Options.  (line  127)
   49644 * gno-strict-dwarf:                      Debugging Options.  (line  137)
   49645 * gpubnames:                             Debugging Options.  (line   51)
   49646 * grecord-gcc-switches:                  Debugging Options.  (line  118)
   49647 * gsplit-dwarf:                          Debugging Options.  (line   38)
   49648 * gstabs:                                Debugging Options.  (line   54)
   49649 * gstabs+:                               Debugging Options.  (line   83)
   49650 * gstrict-dwarf:                         Debugging Options.  (line  131)
   49651 * gtoggle:                               Debugging Options.  (line  174)
   49652 * gused:                                 Darwin Options.     (line   64)
   49653 * gvms:                                  Debugging Options.  (line  141)
   49654 * gxcoff:                                Debugging Options.  (line   94)
   49655 * gxcoff+:                               Debugging Options.  (line   99)
   49656 * H:                                     Preprocessor Options.
   49657                                                              (line  707)
   49658 * headerpad_max_install_names:           Darwin Options.     (line  196)
   49659 * help:                                  Overall Options.    (line  221)
   49660 * help <1>:                              Preprocessor Options.
   49661                                                              (line  699)
   49662 * hoist-adjacent-loads:                  Optimize Options.   (line  876)
   49663 * I:                                     Preprocessor Options.
   49664                                                              (line   77)
   49665 * I <1>:                                 Directory Options.  (line   10)
   49666 * I-:                                    Preprocessor Options.
   49667                                                              (line  389)
   49668 * I- <1>:                                Directory Options.  (line  116)
   49669 * idirafter:                             Preprocessor Options.
   49670                                                              (line  431)
   49671 * iframework:                            Darwin Options.     (line   57)
   49672 * imacros:                               Preprocessor Options.
   49673                                                              (line  422)
   49674 * image_base:                            Darwin Options.     (line  196)
   49675 * imultilib:                             Preprocessor Options.
   49676                                                              (line  456)
   49677 * include:                               Preprocessor Options.
   49678                                                              (line  411)
   49679 * init:                                  Darwin Options.     (line  196)
   49680 * install_name:                          Darwin Options.     (line  196)
   49681 * iprefix:                               Preprocessor Options.
   49682                                                              (line  438)
   49683 * iquote:                                Preprocessor Options.
   49684                                                              (line  468)
   49685 * iquote <1>:                            Directory Options.  (line   34)
   49686 * isysroot:                              Preprocessor Options.
   49687                                                              (line  450)
   49688 * isystem:                               Preprocessor Options.
   49689                                                              (line  460)
   49690 * iwithprefix:                           Preprocessor Options.
   49691                                                              (line  444)
   49692 * iwithprefixbefore:                     Preprocessor Options.
   49693                                                              (line  444)
   49694 * keep_private_externs:                  Darwin Options.     (line  196)
   49695 * l:                                     Link Options.       (line   26)
   49696 * L:                                     Directory Options.  (line   40)
   49697 * lobjc:                                 Link Options.       (line   53)
   49698 * M:                                     Preprocessor Options.
   49699                                                              (line  185)
   49700 * m:                                     RS/6000 and PowerPC Options.
   49701                                                              (line  581)
   49702 * m1:                                    SH Options.         (line    9)
   49703 * m10:                                   PDP-11 Options.     (line   29)
   49704 * m128bit-long-double:                   i386 and x86-64 Options.
   49705                                                              (line  335)
   49706 * m16-bit:                               CRIS Options.       (line   64)
   49707 * m1reg-:                                Adapteva Epiphany Options.
   49708                                                              (line  131)
   49709 * m2:                                    SH Options.         (line   12)
   49710 * m210:                                  MCore Options.      (line   43)
   49711 * m2a:                                   SH Options.         (line   30)
   49712 * m2a-nofpu:                             SH Options.         (line   18)
   49713 * m2a-single:                            SH Options.         (line   26)
   49714 * m2a-single-only:                       SH Options.         (line   22)
   49715 * m3:                                    SH Options.         (line   34)
   49716 * m31:                                   S/390 and zSeries Options.
   49717                                                              (line   86)
   49718 * m32:                                   i386 and x86-64 Options.
   49719                                                              (line  832)
   49720 * m32 <1>:                               RS/6000 and PowerPC Options.
   49721                                                              (line  274)
   49722 * m32 <2>:                               SPARC Options.      (line  256)
   49723 * m32 <3>:                               TILE-Gx Options.    (line   23)
   49724 * m32 <4>:                               TILEPro Options.    (line   13)
   49725 * m32-bit:                               CRIS Options.       (line   64)
   49726 * m32bit-doubles:                        RX Options.         (line   10)
   49727 * m32r:                                  M32R/D Options.     (line   15)
   49728 * m32r2:                                 M32R/D Options.     (line    9)
   49729 * m32rx:                                 M32R/D Options.     (line   12)
   49730 * m340:                                  MCore Options.      (line   43)
   49731 * m3dnow:                                i386 and x86-64 Options.
   49732                                                              (line  564)
   49733 * m3e:                                   SH Options.         (line   37)
   49734 * m4:                                    SH Options.         (line   51)
   49735 * m4-nofpu:                              SH Options.         (line   40)
   49736 * m4-single:                             SH Options.         (line   47)
   49737 * m4-single-only:                        SH Options.         (line   43)
   49738 * m40:                                   PDP-11 Options.     (line   23)
   49739 * m45:                                   PDP-11 Options.     (line   26)
   49740 * m4a:                                   SH Options.         (line   66)
   49741 * m4a-nofpu:                             SH Options.         (line   54)
   49742 * m4a-single:                            SH Options.         (line   62)
   49743 * m4a-single-only:                       SH Options.         (line   58)
   49744 * m4al:                                  SH Options.         (line   69)
   49745 * m4byte-functions:                      MCore Options.      (line   27)
   49746 * m5200:                                 M680x0 Options.     (line  144)
   49747 * m5206e:                                M680x0 Options.     (line  153)
   49748 * m528x:                                 M680x0 Options.     (line  157)
   49749 * m5307:                                 M680x0 Options.     (line  161)
   49750 * m5407:                                 M680x0 Options.     (line  165)
   49751 * m64:                                   i386 and x86-64 Options.
   49752                                                              (line  832)
   49753 * m64 <1>:                               RS/6000 and PowerPC Options.
   49754                                                              (line  274)
   49755 * m64 <2>:                               S/390 and zSeries Options.
   49756                                                              (line   86)
   49757 * m64 <3>:                               SPARC Options.      (line  256)
   49758 * m64 <4>:                               TILE-Gx Options.    (line   23)
   49759 * m64bit-doubles:                        RX Options.         (line   10)
   49760 * m68000:                                M680x0 Options.     (line   93)
   49761 * m68010:                                M680x0 Options.     (line  101)
   49762 * m68020:                                M680x0 Options.     (line  107)
   49763 * m68020-40:                             M680x0 Options.     (line  175)
   49764 * m68020-60:                             M680x0 Options.     (line  184)
   49765 * m68030:                                M680x0 Options.     (line  112)
   49766 * m68040:                                M680x0 Options.     (line  117)
   49767 * m68060:                                M680x0 Options.     (line  126)
   49768 * m68881:                                M680x0 Options.     (line  194)
   49769 * m8-bit:                                CRIS Options.       (line   64)
   49770 * m8byte-align:                          V850 Options.       (line  170)
   49771 * m96bit-long-double:                    i386 and x86-64 Options.
   49772                                                              (line  335)
   49773 * mabi:                                  ARM Options.        (line   10)
   49774 * mabi <1>:                              i386 and x86-64 Options.
   49775                                                              (line  714)
   49776 * mabi <2>:                              RS/6000 and PowerPC Options.
   49777                                                              (line  608)
   49778 * mabi=32:                               MIPS Options.       (line  130)
   49779 * mabi=64:                               MIPS Options.       (line  130)
   49780 * mabi=eabi:                             MIPS Options.       (line  130)
   49781 * mabi=elfv1:                            RS/6000 and PowerPC Options.
   49782                                                              (line  629)
   49783 * mabi=elfv2:                            RS/6000 and PowerPC Options.
   49784                                                              (line  635)
   49785 * mabi=gnu:                              MMIX Options.       (line   20)
   49786 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
   49787                                                              (line  621)
   49788 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
   49789                                                              (line  625)
   49790 * mabi=mmixware:                         MMIX Options.       (line   20)
   49791 * mabi=n32:                              MIPS Options.       (line  130)
   49792 * mabi=no-spe:                           RS/6000 and PowerPC Options.
   49793                                                              (line  618)
   49794 * mabi=o64:                              MIPS Options.       (line  130)
   49795 * mabi=spe:                              RS/6000 and PowerPC Options.
   49796                                                              (line  613)
   49797 * mabicalls:                             MIPS Options.       (line  154)
   49798 * mabort-on-noreturn:                    ARM Options.        (line  184)
   49799 * mabsdiff:                              MeP Options.        (line    7)
   49800 * mabshi:                                PDP-11 Options.     (line   55)
   49801 * mac0:                                  PDP-11 Options.     (line   16)
   49802 * macc-4:                                FRV Options.        (line  139)
   49803 * macc-8:                                FRV Options.        (line  143)
   49804 * maccumulate-args:                      AVR Options.        (line  137)
   49805 * maccumulate-outgoing-args:             i386 and x86-64 Options.
   49806                                                              (line  737)
   49807 * maccumulate-outgoing-args <1>:         SH Options.         (line  325)
   49808 * maddress-mode=long:                    i386 and x86-64 Options.
   49809                                                              (line  875)
   49810 * maddress-mode=short:                   i386 and x86-64 Options.
   49811                                                              (line  880)
   49812 * maddress-space-conversion:             SPU Options.        (line   68)
   49813 * mads:                                  RS/6000 and PowerPC Options.
   49814                                                              (line  663)
   49815 * maix-struct-return:                    RS/6000 and PowerPC Options.
   49816                                                              (line  601)
   49817 * maix32:                                RS/6000 and PowerPC Options.
   49818                                                              (line  312)
   49819 * maix64:                                RS/6000 and PowerPC Options.
   49820                                                              (line  312)
   49821 * malign-300:                            H8/300 Options.     (line   41)
   49822 * malign-double:                         i386 and x86-64 Options.
   49823                                                              (line  320)
   49824 * malign-int:                            M680x0 Options.     (line  263)
   49825 * malign-labels:                         FRV Options.        (line  128)
   49826 * malign-loops:                          M32R/D Options.     (line   73)
   49827 * malign-natural:                        RS/6000 and PowerPC Options.
   49828                                                              (line  350)
   49829 * malign-power:                          RS/6000 and PowerPC Options.
   49830                                                              (line  350)
   49831 * mall-opts:                             MeP Options.        (line   11)
   49832 * malloc-cc:                             FRV Options.        (line   31)
   49833 * maltivec:                              RS/6000 and PowerPC Options.
   49834                                                              (line  132)
   49835 * maltivec=be:                           RS/6000 and PowerPC Options.
   49836                                                              (line  148)
   49837 * maltivec=le:                           RS/6000 and PowerPC Options.
   49838                                                              (line  158)
   49839 * mam33:                                 MN10300 Options.    (line   17)
   49840 * mam33-2:                               MN10300 Options.    (line   24)
   49841 * mam34:                                 MN10300 Options.    (line   27)
   49842 * mandroid:                              GNU/Linux Options.  (line   21)
   49843 * mapcs:                                 ARM Options.        (line   22)
   49844 * mapcs-frame:                           ARM Options.        (line   14)
   49845 * mapp-regs:                             SPARC Options.      (line   10)
   49846 * mapp-regs <1>:                         V850 Options.       (line  181)
   49847 * march:                                 AArch64 Options.    (line   55)
   49848 * march <1>:                             ARM Options.        (line   75)
   49849 * march <2>:                             C6X Options.        (line    7)
   49850 * march <3>:                             CRIS Options.       (line   10)
   49851 * march <4>:                             HPPA Options.       (line    9)
   49852 * march <5>:                             HPPA Options.       (line  161)
   49853 * march <6>:                             i386 and x86-64 Options.
   49854                                                              (line   10)
   49855 * march <7>:                             M680x0 Options.     (line   12)
   49856 * march <8>:                             MIPS Options.       (line   14)
   49857 * march <9>:                             S/390 and zSeries Options.
   49858                                                              (line  114)
   49859 * marm:                                  ARM Options.        (line  248)
   49860 * mas100-syntax:                         RX Options.         (line   76)
   49861 * masm=DIALECT:                          i386 and x86-64 Options.
   49862                                                              (line  276)
   49863 * matomic-model=MODEL:                   SH Options.         (line  144)
   49864 * matomic-updates:                       SPU Options.        (line   83)
   49865 * mauto-pic:                             IA-64 Options.      (line   50)
   49866 * maverage:                              MeP Options.        (line   16)
   49867 * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
   49868                                                              (line  420)
   49869 * max-vect-align:                        Adapteva Epiphany Options.
   49870                                                              (line  119)
   49871 * mb:                                    SH Options.         (line   74)
   49872 * mbackchain:                            S/390 and zSeries Options.
   49873                                                              (line   35)
   49874 * mbarrel-shift-enabled:                 LM32 Options.       (line    9)
   49875 * mbase-addresses:                       MMIX Options.       (line   53)
   49876 * mbased=:                               MeP Options.        (line   20)
   49877 * mbcopy:                                PDP-11 Options.     (line   36)
   49878 * mbcopy-builtin:                        PDP-11 Options.     (line   32)
   49879 * mbig:                                  RS/6000 and PowerPC Options.
   49880                                                              (line  500)
   49881 * mbig-endian:                           AArch64 Options.    (line    9)
   49882 * mbig-endian <1>:                       ARM Options.        (line   62)
   49883 * mbig-endian <2>:                       C6X Options.        (line   13)
   49884 * mbig-endian <3>:                       IA-64 Options.      (line    9)
   49885 * mbig-endian <4>:                       MCore Options.      (line   39)
   49886 * mbig-endian <5>:                       MicroBlaze Options. (line   57)
   49887 * mbig-endian <6>:                       RS/6000 and PowerPC Options.
   49888                                                              (line  500)
   49889 * mbig-endian-data:                      RX Options.         (line   42)
   49890 * mbig-switch:                           HPPA Options.       (line   23)
   49891 * mbig-switch <1>:                       V850 Options.       (line  176)
   49892 * mbigtable:                             SH Options.         (line   89)
   49893 * mbionic:                               GNU/Linux Options.  (line   17)
   49894 * mbit-align:                            RS/6000 and PowerPC Options.
   49895                                                              (line  452)
   49896 * mbit-ops:                              CR16 Options.       (line   25)
   49897 * mbitfield:                             M680x0 Options.     (line  231)
   49898 * mbitops:                               MeP Options.        (line   26)
   49899 * mbitops <1>:                           SH Options.         (line   93)
   49900 * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
   49901                                                              (line  733)
   49902 * mbranch-cheap:                         PDP-11 Options.     (line   65)
   49903 * mbranch-cost:                          Adapteva Epiphany Options.
   49904                                                              (line   18)
   49905 * mbranch-cost <1>:                      AVR Options.        (line  152)
   49906 * mbranch-cost <2>:                      MIPS Options.       (line  625)
   49907 * mbranch-cost=NUM:                      SH Options.         (line  389)
   49908 * mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
   49909 * mbranch-expensive:                     PDP-11 Options.     (line   61)
   49910 * mbranch-hints:                         SPU Options.        (line   29)
   49911 * mbranch-likely:                        MIPS Options.       (line  632)
   49912 * mbranch-predict:                       MMIX Options.       (line   48)
   49913 * mbss-plt:                              RS/6000 and PowerPC Options.
   49914                                                              (line  185)
   49915 * mbuild-constants:                      DEC Alpha Options.  (line  141)
   49916 * mbwx:                                  DEC Alpha Options.  (line  163)
   49917 * mc68000:                               M680x0 Options.     (line   93)
   49918 * mc68020:                               M680x0 Options.     (line  107)
   49919 * mc=:                                   MeP Options.        (line   31)
   49920 * mcache-size:                           SPU Options.        (line   75)
   49921 * mcall-eabi:                            RS/6000 and PowerPC Options.
   49922                                                              (line  575)
   49923 * mcall-freebsd:                         RS/6000 and PowerPC Options.
   49924                                                              (line  589)
   49925 * mcall-linux:                           RS/6000 and PowerPC Options.
   49926                                                              (line  585)
   49927 * mcall-netbsd:                          RS/6000 and PowerPC Options.
   49928                                                              (line  593)
   49929 * mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
   49930                                                              (line  597)
   49931 * mcall-prologues:                       AVR Options.        (line  157)
   49932 * mcall-sysv:                            RS/6000 and PowerPC Options.
   49933                                                              (line  567)
   49934 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
   49935                                                              (line  575)
   49936 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
   49937                                                              (line  578)
   49938 * mcallee-super-interworking:            ARM Options.        (line  267)
   49939 * mcaller-super-interworking:            ARM Options.        (line  274)
   49940 * mcallgraph-data:                       MCore Options.      (line   31)
   49941 * mcbcond:                               SPARC Options.      (line  223)
   49942 * mcbranchdi:                            SH Options.         (line  404)
   49943 * mcc-init:                              CRIS Options.       (line   42)
   49944 * mcfv4e:                                M680x0 Options.     (line  169)
   49945 * mcheck-zero-division:                  MIPS Options.       (line  439)
   49946 * mcix:                                  DEC Alpha Options.  (line  163)
   49947 * mcld:                                  i386 and x86-64 Options.
   49948                                                              (line  587)
   49949 * mclip:                                 MeP Options.        (line   35)
   49950 * mcmodel:                               SPARC Options.      (line  261)
   49951 * mcmodel=kernel:                        i386 and x86-64 Options.
   49952                                                              (line  859)
   49953 * mcmodel=large:                         AArch64 Options.    (line   33)
   49954 * mcmodel=large <1>:                     i386 and x86-64 Options.
   49955                                                              (line  871)
   49956 * mcmodel=large <2>:                     RS/6000 and PowerPC Options.
   49957                                                              (line  126)
   49958 * mcmodel=large <3>:                     TILE-Gx Options.    (line   14)
   49959 * mcmodel=medium:                        i386 and x86-64 Options.
   49960                                                              (line  864)
   49961 * mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
   49962                                                              (line  122)
   49963 * mcmodel=small:                         AArch64 Options.    (line   27)
   49964 * mcmodel=small <1>:                     i386 and x86-64 Options.
   49965                                                              (line  853)
   49966 * mcmodel=small <2>:                     RS/6000 and PowerPC Options.
   49967                                                              (line  118)
   49968 * mcmodel=small <3>:                     TILE-Gx Options.    (line    9)
   49969 * mcmodel=tiny:                          AArch64 Options.    (line   20)
   49970 * mcmove:                                Adapteva Epiphany Options.
   49971                                                              (line   23)
   49972 * mcmpb:                                 RS/6000 and PowerPC Options.
   49973                                                              (line   27)
   49974 * mcmpeqdi:                              SH Options.         (line  407)
   49975 * mcode-readable:                        MIPS Options.       (line  399)
   49976 * mcompat-align-parm:                    RS/6000 and PowerPC Options.
   49977                                                              (line  889)
   49978 * mcond-exec:                            FRV Options.        (line  187)
   49979 * mcond-move:                            FRV Options.        (line  159)
   49980 * mconfig=:                              MeP Options.        (line   39)
   49981 * mconsole:                              i386 and x86-64 Windows Options.
   49982                                                              (line    9)
   49983 * mconst-align:                          CRIS Options.       (line   55)
   49984 * mconst16:                              Xtensa Options.     (line   10)
   49985 * mconstant-gp:                          IA-64 Options.      (line   46)
   49986 * mcop:                                  MeP Options.        (line   48)
   49987 * mcop32:                                MeP Options.        (line   53)
   49988 * mcop64:                                MeP Options.        (line   56)
   49989 * mcorea:                                Blackfin Options.   (line  156)
   49990 * mcoreb:                                Blackfin Options.   (line  163)
   49991 * mcpu:                                  AArch64 Options.    (line   69)
   49992 * mcpu <1>:                              ARM Options.        (line  124)
   49993 * mcpu <2>:                              CRIS Options.       (line   10)
   49994 * mcpu <3>:                              DEC Alpha Options.  (line  215)
   49995 * mcpu <4>:                              FRV Options.        (line  258)
   49996 * mcpu <5>:                              i386 and x86-64 Options.
   49997                                                              (line  224)
   49998 * mcpu <6>:                              M680x0 Options.     (line   28)
   49999 * mcpu <7>:                              picoChip Options.   (line    9)
   50000 * mcpu <8>:                              RS/6000 and PowerPC Options.
   50001                                                              (line   68)
   50002 * mcpu <9>:                              SPARC Options.      (line  101)
   50003 * mcpu <10>:                             TILE-Gx Options.    (line   18)
   50004 * mcpu <11>:                             TILEPro Options.    (line    9)
   50005 * mcpu32:                                M680x0 Options.     (line  135)
   50006 * mcpu=:                                 Blackfin Options.   (line    7)
   50007 * mcpu= <1>:                             M32C Options.       (line    7)
   50008 * mcpu= <2>:                             MicroBlaze Options. (line   20)
   50009 * mcr16c:                                CR16 Options.       (line   14)
   50010 * mcr16cplus:                            CR16 Options.       (line   14)
   50011 * mcrc32:                                i386 and x86-64 Options.
   50012                                                              (line  634)
   50013 * mcrypto:                               RS/6000 and PowerPC Options.
   50014                                                              (line  220)
   50015 * mcsync-anomaly:                        Blackfin Options.   (line   59)
   50016 * mcx16:                                 i386 and x86-64 Options.
   50017                                                              (line  611)
   50018 * MD:                                    Preprocessor Options.
   50019                                                              (line  276)
   50020 * mdalign:                               SH Options.         (line   80)
   50021 * mdata-align:                           CRIS Options.       (line   55)
   50022 * mdata-model:                           CR16 Options.       (line   28)
   50023 * mdc:                                   MeP Options.        (line   62)
   50024 * mdebug:                                M32R/D Options.     (line   69)
   50025 * mdebug <1>:                            S/390 and zSeries Options.
   50026                                                              (line  110)
   50027 * mdebug-main=PREFIX:                    VMS Options.        (line   13)
   50028 * mdec-asm:                              PDP-11 Options.     (line   72)
   50029 * mdirect-move:                          RS/6000 and PowerPC Options.
   50030                                                              (line  226)
   50031 * mdisable-callt:                        V850 Options.       (line   92)
   50032 * mdisable-fpregs:                       HPPA Options.       (line   33)
   50033 * mdisable-indexing:                     HPPA Options.       (line   39)
   50034 * mdiv:                                  M680x0 Options.     (line  206)
   50035 * mdiv <1>:                              MCore Options.      (line   15)
   50036 * mdiv <2>:                              MeP Options.        (line   65)
   50037 * mdiv=STRATEGY:                         SH Options.         (line  236)
   50038 * mdivide-breaks:                        MIPS Options.       (line  445)
   50039 * mdivide-enabled:                       LM32 Options.       (line   12)
   50040 * mdivide-traps:                         MIPS Options.       (line  445)
   50041 * mdivsi3_libfunc=NAME:                  SH Options.         (line  331)
   50042 * mdll:                                  i386 and x86-64 Windows Options.
   50043                                                              (line   16)
   50044 * mdlmzb:                                RS/6000 and PowerPC Options.
   50045                                                              (line  445)
   50046 * mdmx:                                  MIPS Options.       (line  289)
   50047 * mdouble:                               FRV Options.        (line   48)
   50048 * mdouble-float:                         MIPS Options.       (line  247)
   50049 * mdouble-float <1>:                     RS/6000 and PowerPC Options.
   50050                                                              (line  368)
   50051 * mdsp:                                  MIPS Options.       (line  266)
   50052 * mdspr2:                                MIPS Options.       (line  272)
   50053 * mdual-nops:                            SPU Options.        (line   95)
   50054 * mdwarf2-asm:                           IA-64 Options.      (line   94)
   50055 * mdword:                                FRV Options.        (line   40)
   50056 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
   50057                                                              (line  505)
   50058 * mea32:                                 SPU Options.        (line   60)
   50059 * mea64:                                 SPU Options.        (line   60)
   50060 * meabi:                                 RS/6000 and PowerPC Options.
   50061                                                              (line  682)
   50062 * mearly-stop-bits:                      IA-64 Options.      (line  100)
   50063 * meb:                                   MeP Options.        (line   68)
   50064 * meb <1>:                               Moxie Options.      (line    7)
   50065 * meb <2>:                               Score Options.      (line    9)
   50066 * mel:                                   MeP Options.        (line   71)
   50067 * mel <1>:                               Moxie Options.      (line   11)
   50068 * mel <2>:                               Score Options.      (line   12)
   50069 * melf:                                  CRIS Options.       (line   87)
   50070 * melf <1>:                              MMIX Options.       (line   43)
   50071 * memb:                                  RS/6000 and PowerPC Options.
   50072                                                              (line  677)
   50073 * membedded-data:                        MIPS Options.       (line  386)
   50074 * memregs=:                              M32C Options.       (line   21)
   50075 * mep:                                   V850 Options.       (line   16)
   50076 * mepsilon:                              MMIX Options.       (line   15)
   50077 * merror-reloc:                          SPU Options.        (line   10)
   50078 * mesa:                                  S/390 and zSeries Options.
   50079                                                              (line   94)
   50080 * metrax100:                             CRIS Options.       (line   27)
   50081 * metrax4:                               CRIS Options.       (line   27)
   50082 * mexplicit-relocs:                      DEC Alpha Options.  (line  176)
   50083 * mexplicit-relocs <1>:                  MIPS Options.       (line  430)
   50084 * mexr:                                  H8/300 Options.     (line   28)
   50085 * mextern-sdata:                         MIPS Options.       (line  349)
   50086 * MF:                                    Preprocessor Options.
   50087                                                              (line  220)
   50088 * mfast-fp:                              Blackfin Options.   (line  132)
   50089 * mfast-indirect-calls:                  HPPA Options.       (line   51)
   50090 * mfaster-structs:                       SPARC Options.      (line   91)
   50091 * mfdpic:                                FRV Options.        (line   72)
   50092 * mfentry:                               i386 and x86-64 Options.
   50093                                                              (line  809)
   50094 * mfix:                                  DEC Alpha Options.  (line  163)
   50095 * mfix-24k:                              MIPS Options.       (line  496)
   50096 * mfix-and-continue:                     Darwin Options.     (line  104)
   50097 * mfix-at697f:                           SPARC Options.      (line  243)
   50098 * mfix-cortex-m3-ldrd:                   ARM Options.        (line  307)
   50099 * mfix-r10000:                           MIPS Options.       (line  518)
   50100 * mfix-r4000:                            MIPS Options.       (line  502)
   50101 * mfix-r4400:                            MIPS Options.       (line  512)
   50102 * mfix-sb1:                              MIPS Options.       (line  549)
   50103 * mfix-ut699:                            SPARC Options.      (line  248)
   50104 * mfix-vr4120:                           MIPS Options.       (line  529)
   50105 * mfix-vr4130:                           MIPS Options.       (line  542)
   50106 * mfixed-cc:                             FRV Options.        (line   35)
   50107 * mfixed-range:                          HPPA Options.       (line   58)
   50108 * mfixed-range <1>:                      IA-64 Options.      (line  105)
   50109 * mfixed-range <2>:                      SH Options.         (line  338)
   50110 * mfixed-range <3>:                      SPU Options.        (line   52)
   50111 * mflat:                                 SPARC Options.      (line   22)
   50112 * mflip-mips16:                          MIPS Options.       (line  110)
   50113 * mfloat-abi:                            ARM Options.        (line   42)
   50114 * mfloat-gprs:                           RS/6000 and PowerPC Options.
   50115                                                              (line  257)
   50116 * mfloat-ieee:                           DEC Alpha Options.  (line  171)
   50117 * mfloat-vax:                            DEC Alpha Options.  (line  171)
   50118 * mfloat32:                              PDP-11 Options.     (line   52)
   50119 * mfloat64:                              PDP-11 Options.     (line   48)
   50120 * mflush-func:                           MIPS Options.       (line  616)
   50121 * mflush-func=NAME:                      M32R/D Options.     (line   93)
   50122 * mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
   50123 * mfmaf:                                 SPARC Options.      (line  237)
   50124 * mfmovd:                                SH Options.         (line   96)
   50125 * mforce-no-pic:                         Xtensa Options.     (line   41)
   50126 * mfp-exceptions:                        MIPS Options.       (line  643)
   50127 * mfp-mode:                              Adapteva Epiphany Options.
   50128                                                              (line   71)
   50129 * mfp-reg:                               DEC Alpha Options.  (line   25)
   50130 * mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
   50131 * mfp-trap-mode:                         DEC Alpha Options.  (line   63)
   50132 * mfp16-format:                          ARM Options.        (line  164)
   50133 * mfp32:                                 MIPS Options.       (line  220)
   50134 * mfp64:                                 MIPS Options.       (line  223)
   50135 * mfpmath:                               Optimize Options.   (line 1893)
   50136 * mfpmath <1>:                           i386 and x86-64 Options.
   50137                                                              (line  227)
   50138 * mfpr-32:                               FRV Options.        (line   15)
   50139 * mfpr-64:                               FRV Options.        (line   19)
   50140 * mfprnd:                                RS/6000 and PowerPC Options.
   50141                                                              (line   27)
   50142 * mfpu:                                  ARM Options.        (line  144)
   50143 * mfpu <1>:                              PDP-11 Options.     (line    9)
   50144 * mfpu <2>:                              RS/6000 and PowerPC Options.
   50145                                                              (line  376)
   50146 * mfpu <3>:                              SPARC Options.      (line   34)
   50147 * mfriz:                                 RS/6000 and PowerPC Options.
   50148                                                              (line  860)
   50149 * mfsca:                                 SH Options.         (line  421)
   50150 * mfsrra:                                SH Options.         (line  430)
   50151 * mfull-toc:                             RS/6000 and PowerPC Options.
   50152                                                              (line  285)
   50153 * mfused-madd:                           IA-64 Options.      (line   88)
   50154 * mfused-madd <1>:                       MIPS Options.       (line  479)
   50155 * mfused-madd <2>:                       RS/6000 and PowerPC Options.
   50156                                                              (line  429)
   50157 * mfused-madd <3>:                       S/390 and zSeries Options.
   50158                                                              (line  135)
   50159 * mfused-madd <4>:                       SH Options.         (line  412)
   50160 * mfused-madd <5>:                       Xtensa Options.     (line   19)
   50161 * MG:                                    Preprocessor Options.
   50162                                                              (line  229)
   50163 * mg:                                    VAX Options.        (line   17)
   50164 * mgas:                                  HPPA Options.       (line   74)
   50165 * mgcc-abi:                              V850 Options.       (line  148)
   50166 * mgen-cell-microcode:                   RS/6000 and PowerPC Options.
   50167                                                              (line  173)
   50168 * mgeneral-regs-only:                    AArch64 Options.    (line   13)
   50169 * mgettrcost=NUMBER:                     SH Options.         (line  355)
   50170 * mghs:                                  V850 Options.       (line  127)
   50171 * mglibc:                                GNU/Linux Options.  (line    9)
   50172 * mgnu:                                  VAX Options.        (line   13)
   50173 * mgnu-as:                               IA-64 Options.      (line   18)
   50174 * mgnu-ld:                               HPPA Options.       (line  110)
   50175 * mgnu-ld <1>:                           IA-64 Options.      (line   23)
   50176 * mgotplt:                               CRIS Options.       (line   81)
   50177 * mgp32:                                 MIPS Options.       (line  214)
   50178 * mgp64:                                 MIPS Options.       (line  217)
   50179 * mgpopt:                                MIPS Options.       (line  371)
   50180 * mgpr-32:                               FRV Options.        (line    7)
   50181 * mgpr-64:                               FRV Options.        (line   11)
   50182 * mgprel-ro:                             FRV Options.        (line   99)
   50183 * mh:                                    H8/300 Options.     (line   14)
   50184 * mhalf-reg-file:                        Adapteva Epiphany Options.
   50185                                                              (line    9)
   50186 * mhard-dfp:                             RS/6000 and PowerPC Options.
   50187                                                              (line   27)
   50188 * mhard-dfp <1>:                         S/390 and zSeries Options.
   50189                                                              (line   20)
   50190 * mhard-float:                           FRV Options.        (line   23)
   50191 * mhard-float <1>:                       M680x0 Options.     (line  194)
   50192 * mhard-float <2>:                       MicroBlaze Options. (line   10)
   50193 * mhard-float <3>:                       MIPS Options.       (line  226)
   50194 * mhard-float <4>:                       RS/6000 and PowerPC Options.
   50195                                                              (line  362)
   50196 * mhard-float <5>:                       S/390 and zSeries Options.
   50197                                                              (line   11)
   50198 * mhard-float <6>:                       SPARC Options.      (line   34)
   50199 * mhard-float <7>:                       V850 Options.       (line  113)
   50200 * mhard-quad-float:                      SPARC Options.      (line   55)
   50201 * mhardlit:                              MCore Options.      (line   10)
   50202 * mhint-max-distance:                    SPU Options.        (line  107)
   50203 * mhint-max-nops:                        SPU Options.        (line  101)
   50204 * mhitachi:                              SH Options.         (line  100)
   50205 * mhitachi <1>:                          SH Options.         (line  103)
   50206 * mhitachi <2>:                          SH Options.         (line  106)
   50207 * mhotpatch:                             S/390 and zSeries Options.
   50208                                                              (line  171)
   50209 * mhp-ld:                                HPPA Options.       (line  122)
   50210 * micplb:                                Blackfin Options.   (line  177)
   50211 * mid-shared-library:                    Blackfin Options.   (line   80)
   50212 * mieee:                                 DEC Alpha Options.  (line   39)
   50213 * mieee <1>:                             SH Options.         (line  116)
   50214 * mieee-conformant:                      DEC Alpha Options.  (line  134)
   50215 * mieee-fp:                              i386 and x86-64 Options.
   50216                                                              (line  282)
   50217 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
   50218 * milp32:                                IA-64 Options.      (line  121)
   50219 * mimpure-text:                          Solaris 2 Options.  (line    9)
   50220 * mincoming-stack-boundary:              i386 and x86-64 Options.
   50221                                                              (line  485)
   50222 * mindexed-addressing:                   SH Options.         (line  345)
   50223 * minline-all-stringops:                 i386 and x86-64 Options.
   50224                                                              (line  757)
   50225 * minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
   50226 * minline-float-divide-min-latency:      IA-64 Options.      (line   54)
   50227 * minline-ic_invalidate:                 SH Options.         (line  125)
   50228 * minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
   50229 * minline-int-divide-min-latency:        IA-64 Options.      (line   65)
   50230 * minline-plt:                           Blackfin Options.   (line  137)
   50231 * minline-plt <1>:                       FRV Options.        (line   81)
   50232 * minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
   50233 * minline-sqrt-min-latency:              IA-64 Options.      (line   76)
   50234 * minline-stringops-dynamically:         i386 and x86-64 Options.
   50235                                                              (line  764)
   50236 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
   50237                                                              (line  545)
   50238 * mint-register:                         RX Options.         (line  100)
   50239 * mint16:                                PDP-11 Options.     (line   40)
   50240 * mint32:                                CR16 Options.       (line   22)
   50241 * mint32 <1>:                            H8/300 Options.     (line   38)
   50242 * mint32 <2>:                            PDP-11 Options.     (line   44)
   50243 * mint8:                                 AVR Options.        (line  161)
   50244 * minterlink-mips16:                     MIPS Options.       (line  117)
   50245 * minvalid-symbols:                      SH Options.         (line  379)
   50246 * mio-volatile:                          MeP Options.        (line   74)
   50247 * mips1:                                 MIPS Options.       (line   77)
   50248 * mips16:                                MIPS Options.       (line  102)
   50249 * mips2:                                 MIPS Options.       (line   80)
   50250 * mips3:                                 MIPS Options.       (line   83)
   50251 * mips32:                                MIPS Options.       (line   89)
   50252 * mips32r2:                              MIPS Options.       (line   92)
   50253 * mips3d:                                MIPS Options.       (line  295)
   50254 * mips4:                                 MIPS Options.       (line   86)
   50255 * mips64:                                MIPS Options.       (line   95)
   50256 * mips64r2:                              MIPS Options.       (line   98)
   50257 * misel:                                 RS/6000 and PowerPC Options.
   50258                                                              (line  191)
   50259 * misize:                                SH Options.         (line  137)
   50260 * missue-rate=NUMBER:                    M32R/D Options.     (line   79)
   50261 * mivc2:                                 MeP Options.        (line   59)
   50262 * mjump-in-delay:                        HPPA Options.       (line   28)
   50263 * mkernel:                               Darwin Options.     (line   82)
   50264 * mknuthdiv:                             MMIX Options.       (line   32)
   50265 * ml:                                    MeP Options.        (line   78)
   50266 * ml <1>:                                SH Options.         (line   77)
   50267 * mlarge-data:                           DEC Alpha Options.  (line  187)
   50268 * mlarge-data-threshold:                 i386 and x86-64 Options.
   50269                                                              (line  371)
   50270 * mlarge-mem:                            SPU Options.        (line   38)
   50271 * mlarge-text:                           DEC Alpha Options.  (line  205)
   50272 * mleadz:                                MeP Options.        (line   81)
   50273 * mleaf-id-shared-library:               Blackfin Options.   (line   91)
   50274 * mlibfuncs:                             MMIX Options.       (line   10)
   50275 * mlibrary-pic:                          FRV Options.        (line  135)
   50276 * mlinked-fp:                            FRV Options.        (line  116)
   50277 * mlinker-opt:                           HPPA Options.       (line   84)
   50278 * mlinux:                                CRIS Options.       (line   91)
   50279 * mlittle:                               RS/6000 and PowerPC Options.
   50280                                                              (line  494)
   50281 * mlittle-endian:                        AArch64 Options.    (line   16)
   50282 * mlittle-endian <1>:                    ARM Options.        (line   58)
   50283 * mlittle-endian <2>:                    C6X Options.        (line   16)
   50284 * mlittle-endian <3>:                    IA-64 Options.      (line   13)
   50285 * mlittle-endian <4>:                    MCore Options.      (line   39)
   50286 * mlittle-endian <5>:                    MicroBlaze Options. (line   60)
   50287 * mlittle-endian <6>:                    RS/6000 and PowerPC Options.
   50288                                                              (line  494)
   50289 * mlittle-endian-data:                   RX Options.         (line   42)
   50290 * mliw:                                  MN10300 Options.    (line   54)
   50291 * mllsc:                                 MIPS Options.       (line  252)
   50292 * mlocal-sdata:                          MIPS Options.       (line  337)
   50293 * mlong-calls:                           Adapteva Epiphany Options.
   50294                                                              (line   55)
   50295 * mlong-calls <1>:                       ARM Options.        (line  189)
   50296 * mlong-calls <2>:                       Blackfin Options.   (line  120)
   50297 * mlong-calls <3>:                       FRV Options.        (line  122)
   50298 * mlong-calls <4>:                       MIPS Options.       (line  465)
   50299 * mlong-calls <5>:                       V850 Options.       (line   10)
   50300 * mlong-double-128:                      S/390 and zSeries Options.
   50301                                                              (line   29)
   50302 * mlong-double-64:                       i386 and x86-64 Options.
   50303                                                              (line  360)
   50304 * mlong-double-64 <1>:                   S/390 and zSeries Options.
   50305                                                              (line   29)
   50306 * mlong-double-80:                       i386 and x86-64 Options.
   50307                                                              (line  360)
   50308 * mlong-jumps:                           V850 Options.       (line  108)
   50309 * mlong-load-store:                      HPPA Options.       (line   65)
   50310 * mlong32:                               MIPS Options.       (line  312)
   50311 * mlong64:                               MIPS Options.       (line  307)
   50312 * mlongcall:                             RS/6000 and PowerPC Options.
   50313                                                              (line  753)
   50314 * mlongcalls:                            Xtensa Options.     (line   72)
   50315 * mloop:                                 V850 Options.       (line  121)
   50316 * mlow-64k:                              Blackfin Options.   (line   69)
   50317 * mlp64:                                 IA-64 Options.      (line  121)
   50318 * MM:                                    Preprocessor Options.
   50319                                                              (line  210)
   50320 * mm:                                    MeP Options.        (line   84)
   50321 * mmac:                                  CR16 Options.       (line    9)
   50322 * mmac <1>:                              Score Options.      (line   21)
   50323 * mmad:                                  MIPS Options.       (line  474)
   50324 * mmalloc64:                             VMS Options.        (line   17)
   50325 * mmax:                                  DEC Alpha Options.  (line  163)
   50326 * mmax-constant-size:                    RX Options.         (line   82)
   50327 * mmax-stack-frame:                      CRIS Options.       (line   23)
   50328 * mmcount-ra-address:                    MIPS Options.       (line  692)
   50329 * mmcu:                                  AVR Options.        (line    9)
   50330 * mmcu <1>:                              MIPS Options.       (line  304)
   50331 * MMD:                                   Preprocessor Options.
   50332                                                              (line  292)
   50333 * mmedia:                                FRV Options.        (line   56)
   50334 * mmemcpy:                               MicroBlaze Options. (line   13)
   50335 * mmemcpy <1>:                           MIPS Options.       (line  459)
   50336 * mmemory-latency:                       DEC Alpha Options.  (line  268)
   50337 * mmemory-model:                         SPARC Options.      (line  289)
   50338 * mmfcrf:                                RS/6000 and PowerPC Options.
   50339                                                              (line   27)
   50340 * mmfpgpr:                               RS/6000 and PowerPC Options.
   50341                                                              (line   27)
   50342 * mminimal-toc:                          RS/6000 and PowerPC Options.
   50343                                                              (line  285)
   50344 * mminmax:                               MeP Options.        (line   87)
   50345 * mmmx:                                  i386 and x86-64 Options.
   50346                                                              (line  564)
   50347 * mmodel=large:                          M32R/D Options.     (line   33)
   50348 * mmodel=medium:                         M32R/D Options.     (line   27)
   50349 * mmodel=small:                          M32R/D Options.     (line   18)
   50350 * mmovbe:                                i386 and x86-64 Options.
   50351                                                              (line  630)
   50352 * mmt:                                   MIPS Options.       (line  300)
   50353 * mmul:                                  RL78 Options.       (line   13)
   50354 * mmul-bug-workaround:                   CRIS Options.       (line   32)
   50355 * mmuladd:                               FRV Options.        (line   64)
   50356 * mmulhw:                                RS/6000 and PowerPC Options.
   50357                                                              (line  438)
   50358 * mmult:                                 MeP Options.        (line   90)
   50359 * mmult-bug:                             MN10300 Options.    (line    9)
   50360 * mmulti-cond-exec:                      FRV Options.        (line  215)
   50361 * mmulticore:                            Blackfin Options.   (line  141)
   50362 * mmultiple:                             RS/6000 and PowerPC Options.
   50363                                                              (line  388)
   50364 * mmvcle:                                S/390 and zSeries Options.
   50365                                                              (line  104)
   50366 * mmvme:                                 RS/6000 and PowerPC Options.
   50367                                                              (line  658)
   50368 * mn:                                    H8/300 Options.     (line   20)
   50369 * mnested-cond-exec:                     FRV Options.        (line  230)
   50370 * mnhwloop:                              Score Options.      (line   15)
   50371 * mno-3dnow:                             i386 and x86-64 Options.
   50372                                                              (line  564)
   50373 * mno-4byte-functions:                   MCore Options.      (line   27)
   50374 * mno-8byte-align:                       V850 Options.       (line  170)
   50375 * mno-abicalls:                          MIPS Options.       (line  154)
   50376 * mno-abshi:                             PDP-11 Options.     (line   58)
   50377 * mno-ac0:                               PDP-11 Options.     (line   20)
   50378 * mno-address-space-conversion:          SPU Options.        (line   68)
   50379 * mno-align-double:                      i386 and x86-64 Options.
   50380                                                              (line  320)
   50381 * mno-align-int:                         M680x0 Options.     (line  263)
   50382 * mno-align-loops:                       M32R/D Options.     (line   76)
   50383 * mno-align-stringops:                   i386 and x86-64 Options.
   50384                                                              (line  752)
   50385 * mno-altivec:                           RS/6000 and PowerPC Options.
   50386                                                              (line  132)
   50387 * mno-am33:                              MN10300 Options.    (line   20)
   50388 * mno-app-regs:                          SPARC Options.      (line   10)
   50389 * mno-app-regs <1>:                      V850 Options.       (line  185)
   50390 * mno-as100-syntax:                      RX Options.         (line   76)
   50391 * mno-atomic-updates:                    SPU Options.        (line   83)
   50392 * mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
   50393                                                              (line  420)
   50394 * mno-backchain:                         S/390 and zSeries Options.
   50395                                                              (line   35)
   50396 * mno-base-addresses:                    MMIX Options.       (line   53)
   50397 * mno-bit-align:                         RS/6000 and PowerPC Options.
   50398                                                              (line  452)
   50399 * mno-bitfield:                          M680x0 Options.     (line  227)
   50400 * mno-branch-likely:                     MIPS Options.       (line  632)
   50401 * mno-branch-predict:                    MMIX Options.       (line   48)
   50402 * mno-bwx:                               DEC Alpha Options.  (line  163)
   50403 * mno-callgraph-data:                    MCore Options.      (line   31)
   50404 * mno-cbcond:                            SPARC Options.      (line  223)
   50405 * mno-check-zero-division:               MIPS Options.       (line  439)
   50406 * mno-cix:                               DEC Alpha Options.  (line  163)
   50407 * mno-clearbss:                          MicroBlaze Options. (line   16)
   50408 * mno-cmpb:                              RS/6000 and PowerPC Options.
   50409                                                              (line   27)
   50410 * mno-cond-exec:                         FRV Options.        (line  194)
   50411 * mno-cond-move:                         FRV Options.        (line  166)
   50412 * mno-const-align:                       CRIS Options.       (line   55)
   50413 * mno-const16:                           Xtensa Options.     (line   10)
   50414 * mno-crt0:                              MN10300 Options.    (line   43)
   50415 * mno-crt0 <1>:                          Moxie Options.      (line   14)
   50416 * mno-crypto:                            RS/6000 and PowerPC Options.
   50417                                                              (line  220)
   50418 * mno-csync-anomaly:                     Blackfin Options.   (line   65)
   50419 * mno-data-align:                        CRIS Options.       (line   55)
   50420 * mno-debug:                             S/390 and zSeries Options.
   50421                                                              (line  110)
   50422 * mno-direct-move:                       RS/6000 and PowerPC Options.
   50423                                                              (line  226)
   50424 * mno-disable-callt:                     V850 Options.       (line   92)
   50425 * mno-div:                               M680x0 Options.     (line  206)
   50426 * mno-div <1>:                           MCore Options.      (line   15)
   50427 * mno-dlmzb:                             RS/6000 and PowerPC Options.
   50428                                                              (line  445)
   50429 * mno-double:                            FRV Options.        (line   52)
   50430 * mno-dsp:                               MIPS Options.       (line  266)
   50431 * mno-dspr2:                             MIPS Options.       (line  272)
   50432 * mno-dwarf2-asm:                        IA-64 Options.      (line   94)
   50433 * mno-dword:                             FRV Options.        (line   44)
   50434 * mno-eabi:                              RS/6000 and PowerPC Options.
   50435                                                              (line  682)
   50436 * mno-early-stop-bits:                   IA-64 Options.      (line  100)
   50437 * mno-eflags:                            FRV Options.        (line  155)
   50438 * mno-embedded-data:                     MIPS Options.       (line  386)
   50439 * mno-ep:                                V850 Options.       (line   16)
   50440 * mno-epsilon:                           MMIX Options.       (line   15)
   50441 * mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
   50442 * mno-explicit-relocs <1>:               MIPS Options.       (line  430)
   50443 * mno-exr:                               H8/300 Options.     (line   33)
   50444 * mno-extern-sdata:                      MIPS Options.       (line  349)
   50445 * mno-fancy-math-387:                    i386 and x86-64 Options.
   50446                                                              (line  310)
   50447 * mno-faster-structs:                    SPARC Options.      (line   91)
   50448 * mno-fix:                               DEC Alpha Options.  (line  163)
   50449 * mno-fix-24k:                           MIPS Options.       (line  496)
   50450 * mno-fix-r10000:                        MIPS Options.       (line  518)
   50451 * mno-fix-r4000:                         MIPS Options.       (line  502)
   50452 * mno-fix-r4400:                         MIPS Options.       (line  512)
   50453 * mno-flat:                              SPARC Options.      (line   22)
   50454 * mno-float:                             MIPS Options.       (line  233)
   50455 * mno-float32:                           PDP-11 Options.     (line   48)
   50456 * mno-float64:                           PDP-11 Options.     (line   52)
   50457 * mno-flush-func:                        M32R/D Options.     (line   98)
   50458 * mno-flush-trap:                        M32R/D Options.     (line   90)
   50459 * mno-fmaf:                              SPARC Options.      (line  237)
   50460 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
   50461                                                              (line  285)
   50462 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
   50463 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
   50464                                                              (line  300)
   50465 * mno-fprnd:                             RS/6000 and PowerPC Options.
   50466                                                              (line   27)
   50467 * mno-fpu:                               SPARC Options.      (line   39)
   50468 * mno-fsca:                              SH Options.         (line  421)
   50469 * mno-fsrra:                             SH Options.         (line  430)
   50470 * mno-fused-madd:                        IA-64 Options.      (line   88)
   50471 * mno-fused-madd <1>:                    MIPS Options.       (line  479)
   50472 * mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
   50473                                                              (line  429)
   50474 * mno-fused-madd <3>:                    S/390 and zSeries Options.
   50475                                                              (line  135)
   50476 * mno-fused-madd <4>:                    SH Options.         (line  412)
   50477 * mno-fused-madd <5>:                    Xtensa Options.     (line   19)
   50478 * mno-gnu-as:                            IA-64 Options.      (line   18)
   50479 * mno-gnu-ld:                            IA-64 Options.      (line   23)
   50480 * mno-gotplt:                            CRIS Options.       (line   81)
   50481 * mno-gpopt:                             MIPS Options.       (line  371)
   50482 * mno-hard-dfp:                          RS/6000 and PowerPC Options.
   50483                                                              (line   27)
   50484 * mno-hard-dfp <1>:                      S/390 and zSeries Options.
   50485                                                              (line   20)
   50486 * mno-hardlit:                           MCore Options.      (line   10)
   50487 * mno-id-shared-library:                 Blackfin Options.   (line   87)
   50488 * mno-ieee-fp:                           i386 and x86-64 Options.
   50489                                                              (line  282)
   50490 * mno-inline-float-divide:               IA-64 Options.      (line   62)
   50491 * mno-inline-int-divide:                 IA-64 Options.      (line   73)
   50492 * mno-inline-sqrt:                       IA-64 Options.      (line   84)
   50493 * mno-int16:                             PDP-11 Options.     (line   44)
   50494 * mno-int32:                             PDP-11 Options.     (line   40)
   50495 * mno-interlink-mips16:                  MIPS Options.       (line  117)
   50496 * mno-interrupts:                        AVR Options.        (line  167)
   50497 * mno-isel:                              RS/6000 and PowerPC Options.
   50498                                                              (line  191)
   50499 * mno-knuthdiv:                          MMIX Options.       (line   32)
   50500 * mno-leaf-id-shared-library:            Blackfin Options.   (line   97)
   50501 * mno-libfuncs:                          MMIX Options.       (line   10)
   50502 * mno-llsc:                              MIPS Options.       (line  252)
   50503 * mno-local-sdata:                       MIPS Options.       (line  337)
   50504 * mno-long-calls:                        ARM Options.        (line  189)
   50505 * mno-long-calls <1>:                    Blackfin Options.   (line  120)
   50506 * mno-long-calls <2>:                    HPPA Options.       (line  135)
   50507 * mno-long-calls <3>:                    MIPS Options.       (line  465)
   50508 * mno-long-calls <4>:                    V850 Options.       (line   10)
   50509 * mno-long-jumps:                        V850 Options.       (line  108)
   50510 * mno-longcall:                          RS/6000 and PowerPC Options.
   50511                                                              (line  753)
   50512 * mno-longcalls:                         Xtensa Options.     (line   72)
   50513 * mno-low-64k:                           Blackfin Options.   (line   73)
   50514 * mno-lsim:                              FR30 Options.       (line   14)
   50515 * mno-lsim <1>:                          MCore Options.      (line   46)
   50516 * mno-mad:                               MIPS Options.       (line  474)
   50517 * mno-max:                               DEC Alpha Options.  (line  163)
   50518 * mno-mcount-ra-address:                 MIPS Options.       (line  692)
   50519 * mno-mcu:                               MIPS Options.       (line  304)
   50520 * mno-mdmx:                              MIPS Options.       (line  289)
   50521 * mno-media:                             FRV Options.        (line   60)
   50522 * mno-memcpy:                            MIPS Options.       (line  459)
   50523 * mno-mfcrf:                             RS/6000 and PowerPC Options.
   50524                                                              (line   27)
   50525 * mno-mfpgpr:                            RS/6000 and PowerPC Options.
   50526                                                              (line   27)
   50527 * mno-mips16:                            MIPS Options.       (line  102)
   50528 * mno-mips3d:                            MIPS Options.       (line  295)
   50529 * mno-mmx:                               i386 and x86-64 Options.
   50530                                                              (line  564)
   50531 * mno-mt:                                MIPS Options.       (line  300)
   50532 * mno-mul-bug-workaround:                CRIS Options.       (line   32)
   50533 * mno-muladd:                            FRV Options.        (line   68)
   50534 * mno-mulhw:                             RS/6000 and PowerPC Options.
   50535                                                              (line  438)
   50536 * mno-mult-bug:                          MN10300 Options.    (line   13)
   50537 * mno-multi-cond-exec:                   FRV Options.        (line  223)
   50538 * mno-multiple:                          RS/6000 and PowerPC Options.
   50539                                                              (line  388)
   50540 * mno-mvcle:                             S/390 and zSeries Options.
   50541                                                              (line  104)
   50542 * mno-nested-cond-exec:                  FRV Options.        (line  237)
   50543 * mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   43)
   50544 * mno-optimize-membar:                   FRV Options.        (line  249)
   50545 * mno-opts:                              MeP Options.        (line   93)
   50546 * mno-pack:                              FRV Options.        (line  151)
   50547 * mno-packed-stack:                      S/390 and zSeries Options.
   50548                                                              (line   54)
   50549 * mno-paired:                            RS/6000 and PowerPC Options.
   50550                                                              (line  205)
   50551 * mno-paired-single:                     MIPS Options.       (line  283)
   50552 * mno-pic:                               IA-64 Options.      (line   26)
   50553 * mno-pid:                               RX Options.         (line  117)
   50554 * mno-plt:                               MIPS Options.       (line  181)
   50555 * mno-popc:                              SPARC Options.      (line  230)
   50556 * mno-popcntb:                           RS/6000 and PowerPC Options.
   50557                                                              (line   27)
   50558 * mno-popcntd:                           RS/6000 and PowerPC Options.
   50559                                                              (line   27)
   50560 * mno-postinc:                           Adapteva Epiphany Options.
   50561                                                              (line  109)
   50562 * mno-postmodify:                        Adapteva Epiphany Options.
   50563                                                              (line  109)
   50564 * mno-power8-fusion:                     RS/6000 and PowerPC Options.
   50565                                                              (line  232)
   50566 * mno-power8-vector:                     RS/6000 and PowerPC Options.
   50567                                                              (line  238)
   50568 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
   50569                                                              (line   27)
   50570 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
   50571                                                              (line   27)
   50572 * mno-powerpc64:                         RS/6000 and PowerPC Options.
   50573                                                              (line   27)
   50574 * mno-prolog-function:                   V850 Options.       (line   23)
   50575 * mno-prologue-epilogue:                 CRIS Options.       (line   71)
   50576 * mno-prototype:                         RS/6000 and PowerPC Options.
   50577                                                              (line  642)
   50578 * mno-push-args:                         i386 and x86-64 Options.
   50579                                                              (line  730)
   50580 * mno-quad-memory:                       RS/6000 and PowerPC Options.
   50581                                                              (line  245)
   50582 * mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
   50583                                                              (line  251)
   50584 * mno-red-zone:                          i386 and x86-64 Options.
   50585                                                              (line  845)
   50586 * mno-register-names:                    IA-64 Options.      (line   37)
   50587 * mno-regnames:                          RS/6000 and PowerPC Options.
   50588                                                              (line  747)
   50589 * mno-relax:                             V850 Options.       (line  103)
   50590 * mno-relax-immediate:                   MCore Options.      (line   19)
   50591 * mno-relocatable:                       RS/6000 and PowerPC Options.
   50592                                                              (line  468)
   50593 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
   50594                                                              (line  479)
   50595 * mno-round-nearest:                     Adapteva Epiphany Options.
   50596                                                              (line   51)
   50597 * mno-rtd:                               M680x0 Options.     (line  258)
   50598 * mno-scc:                               FRV Options.        (line  180)
   50599 * mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
   50600 * mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
   50601 * mno-sched-br-data-spec:                IA-64 Options.      (line  128)
   50602 * mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
   50603 * mno-sched-control-spec:                IA-64 Options.      (line  140)
   50604 * mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
   50605 * mno-sched-in-control-spec:             IA-64 Options.      (line  162)
   50606 * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
   50607 * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
   50608 * mno-sched-prolog:                      ARM Options.        (line   33)
   50609 * mno-sdata:                             IA-64 Options.      (line   42)
   50610 * mno-sdata <1>:                         RS/6000 and PowerPC Options.
   50611                                                              (line  728)
   50612 * mno-sep-data:                          Blackfin Options.   (line  115)
   50613 * mno-serialize-volatile:                Xtensa Options.     (line   35)
   50614 * mno-short:                             M680x0 Options.     (line  222)
   50615 * mno-side-effects:                      CRIS Options.       (line   46)
   50616 * mno-sim:                               RX Options.         (line   71)
   50617 * mno-single-exit:                       MMIX Options.       (line   65)
   50618 * mno-slow-bytes:                        MCore Options.      (line   35)
   50619 * mno-small-exec:                        S/390 and zSeries Options.
   50620                                                              (line   79)
   50621 * mno-smartmips:                         MIPS Options.       (line  279)
   50622 * mno-soft-cmpsf:                        Adapteva Epiphany Options.
   50623                                                              (line   29)
   50624 * mno-soft-float:                        DEC Alpha Options.  (line   10)
   50625 * mno-space-regs:                        HPPA Options.       (line   44)
   50626 * mno-spe:                               RS/6000 and PowerPC Options.
   50627                                                              (line  200)
   50628 * mno-specld-anomaly:                    Blackfin Options.   (line   55)
   50629 * mno-split-addresses:                   MIPS Options.       (line  424)
   50630 * mno-sse:                               i386 and x86-64 Options.
   50631                                                              (line  564)
   50632 * mno-stack-align:                       CRIS Options.       (line   55)
   50633 * mno-stack-bias:                        SPARC Options.      (line  313)
   50634 * mno-strict-align:                      M680x0 Options.     (line  283)
   50635 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
   50636                                                              (line  463)
   50637 * mno-string:                            RS/6000 and PowerPC Options.
   50638                                                              (line  399)
   50639 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
   50640                                                              (line  285)
   50641 * mno-sym32:                             MIPS Options.       (line  322)
   50642 * mno-target-align:                      Xtensa Options.     (line   59)
   50643 * mno-text-section-literals:             Xtensa Options.     (line   47)
   50644 * mno-tls-markers:                       RS/6000 and PowerPC Options.
   50645                                                              (line  785)
   50646 * mno-toc:                               RS/6000 and PowerPC Options.
   50647                                                              (line  488)
   50648 * mno-toplevel-symbols:                  MMIX Options.       (line   39)
   50649 * mno-tpf-trace:                         S/390 and zSeries Options.
   50650                                                              (line  129)
   50651 * mno-unaligned-access:                  ARM Options.        (line  314)
   50652 * mno-unaligned-doubles:                 SPARC Options.      (line   73)
   50653 * mno-uninit-const-in-rodata:            MIPS Options.       (line  394)
   50654 * mno-update:                            RS/6000 and PowerPC Options.
   50655                                                              (line  410)
   50656 * mno-user-mode:                         SPARC Options.      (line   85)
   50657 * mno-v8plus:                            SPARC Options.      (line  194)
   50658 * mno-vect-double:                       Adapteva Epiphany Options.
   50659                                                              (line  115)
   50660 * mno-vis:                               SPARC Options.      (line  201)
   50661 * mno-vis2:                              SPARC Options.      (line  207)
   50662 * mno-vis3:                              SPARC Options.      (line  215)
   50663 * mno-vliw-branch:                       FRV Options.        (line  208)
   50664 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
   50665 * mno-vrsave:                            RS/6000 and PowerPC Options.
   50666                                                              (line  170)
   50667 * mno-vsx:                               RS/6000 and PowerPC Options.
   50668                                                              (line  214)
   50669 * mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
   50670 * mno-wide-bitfields:                    MCore Options.      (line   23)
   50671 * mno-xgot:                              M680x0 Options.     (line  315)
   50672 * mno-xgot <1>:                          MIPS Options.       (line  191)
   50673 * mno-xl-compat:                         RS/6000 and PowerPC Options.
   50674                                                              (line  320)
   50675 * mno-zdcbranch:                         SH Options.         (line  396)
   50676 * mno-zero-extend:                       MMIX Options.       (line   26)
   50677 * mnobitfield:                           M680x0 Options.     (line  227)
   50678 * mnoieee:                               SH Options.         (line  116)
   50679 * mnoliw:                                MN10300 Options.    (line   59)
   50680 * mnomacsave:                            SH Options.         (line  111)
   50681 * mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
   50682                                                              (line   22)
   50683 * mnops:                                 Adapteva Epiphany Options.
   50684                                                              (line   26)
   50685 * mnosetlb:                              MN10300 Options.    (line   69)
   50686 * mnosplit-lohi:                         Adapteva Epiphany Options.
   50687                                                              (line  109)
   50688 * momit-leaf-frame-pointer:              AArch64 Options.    (line   43)
   50689 * momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
   50690 * momit-leaf-frame-pointer <2>:          i386 and x86-64 Options.
   50691                                                              (line  786)
   50692 * mone-byte-bool:                        Darwin Options.     (line   90)
   50693 * moptimize-membar:                      FRV Options.        (line  244)
   50694 * MP:                                    Preprocessor Options.
   50695                                                              (line  239)
   50696 * mpa-risc-1-0:                          HPPA Options.       (line   19)
   50697 * mpa-risc-1-1:                          HPPA Options.       (line   19)
   50698 * mpa-risc-2-0:                          HPPA Options.       (line   19)
   50699 * mpack:                                 FRV Options.        (line  147)
   50700 * mpacked-stack:                         S/390 and zSeries Options.
   50701                                                              (line   54)
   50702 * mpadstruct:                            SH Options.         (line  140)
   50703 * mpaired:                               RS/6000 and PowerPC Options.
   50704                                                              (line  205)
   50705 * mpaired-single:                        MIPS Options.       (line  283)
   50706 * mpc32:                                 i386 and x86-64 Options.
   50707                                                              (line  434)
   50708 * mpc64:                                 i386 and x86-64 Options.
   50709                                                              (line  434)
   50710 * mpc80:                                 i386 and x86-64 Options.
   50711                                                              (line  434)
   50712 * mpcrel:                                M680x0 Options.     (line  275)
   50713 * mpdebug:                               CRIS Options.       (line   36)
   50714 * mpe:                                   RS/6000 and PowerPC Options.
   50715                                                              (line  339)
   50716 * mpe-aligned-commons:                   i386 and x86-64 Windows Options.
   50717                                                              (line   59)
   50718 * mpic-register:                         ARM Options.        (line  219)
   50719 * mpid:                                  RX Options.         (line  117)
   50720 * mplt:                                  MIPS Options.       (line  181)
   50721 * mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
   50722                                                              (line  868)
   50723 * mpoke-function-name:                   ARM Options.        (line  226)
   50724 * mpopc:                                 SPARC Options.      (line  230)
   50725 * mpopcntb:                              RS/6000 and PowerPC Options.
   50726                                                              (line   27)
   50727 * mpopcntd:                              RS/6000 and PowerPC Options.
   50728                                                              (line   27)
   50729 * mportable-runtime:                     HPPA Options.       (line   70)
   50730 * mpower8-fusion:                        RS/6000 and PowerPC Options.
   50731                                                              (line  232)
   50732 * mpower8-vector:                        RS/6000 and PowerPC Options.
   50733                                                              (line  238)
   50734 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
   50735                                                              (line   27)
   50736 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
   50737                                                              (line   27)
   50738 * mpowerpc64:                            RS/6000 and PowerPC Options.
   50739                                                              (line   27)
   50740 * mprefer-avx128:                        i386 and x86-64 Options.
   50741                                                              (line  607)
   50742 * mprefer-short-insn-regs:               Adapteva Epiphany Options.
   50743                                                              (line   13)
   50744 * mprefergot:                            SH Options.         (line  223)
   50745 * mpreferred-stack-boundary:             i386 and x86-64 Options.
   50746                                                              (line  464)
   50747 * mpretend-cmove:                        SH Options.         (line  439)
   50748 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
   50749                                                              (line  517)
   50750 * mprolog-function:                      V850 Options.       (line   23)
   50751 * mprologue-epilogue:                    CRIS Options.       (line   71)
   50752 * mprototype:                            RS/6000 and PowerPC Options.
   50753                                                              (line  642)
   50754 * mpt-fixed:                             SH Options.         (line  359)
   50755 * mpush-args:                            i386 and x86-64 Options.
   50756                                                              (line  730)
   50757 * MQ:                                    Preprocessor Options.
   50758                                                              (line  266)
   50759 * mquad-memory:                          RS/6000 and PowerPC Options.
   50760                                                              (line  245)
   50761 * mquad-memory-atomic:                   RS/6000 and PowerPC Options.
   50762                                                              (line  251)
   50763 * mr10k-cache-barrier:                   MIPS Options.       (line  554)
   50764 * mrecip:                                i386 and x86-64 Options.
   50765                                                              (line  640)
   50766 * mrecip <1>:                            RS/6000 and PowerPC Options.
   50767                                                              (line  797)
   50768 * mrecip-precision:                      RS/6000 and PowerPC Options.
   50769                                                              (line  832)
   50770 * mrecip=opt:                            i386 and x86-64 Options.
   50771                                                              (line  662)
   50772 * mrecip=opt <1>:                        RS/6000 and PowerPC Options.
   50773                                                              (line  810)
   50774 * mregister-names:                       IA-64 Options.      (line   37)
   50775 * mregnames:                             RS/6000 and PowerPC Options.
   50776                                                              (line  747)
   50777 * mregparm:                              i386 and x86-64 Options.
   50778                                                              (line  401)
   50779 * mrelax:                                AVR Options.        (line  171)
   50780 * mrelax <1>:                            H8/300 Options.     (line    9)
   50781 * mrelax <2>:                            MN10300 Options.    (line   46)
   50782 * mrelax <3>:                            RX Options.         (line   95)
   50783 * mrelax <4>:                            SH Options.         (line   85)
   50784 * mrelax <5>:                            V850 Options.       (line  103)
   50785 * mrelax-immediate:                      MCore Options.      (line   19)
   50786 * mrelax-pic-calls:                      MIPS Options.       (line  679)
   50787 * mrelocatable:                          RS/6000 and PowerPC Options.
   50788                                                              (line  468)
   50789 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
   50790                                                              (line  479)
   50791 * mrepeat:                               MeP Options.        (line   96)
   50792 * mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
   50793 * mrh850-abi:                            V850 Options.       (line  127)
   50794 * mrtd:                                  i386 and x86-64 Options.
   50795                                                              (line  377)
   50796 * mrtd <1>:                              M680x0 Options.     (line  236)
   50797 * mrtd <2>:                              Function Attributes.
   50798                                                              (line  175)
   50799 * mrtp:                                  VxWorks Options.    (line   11)
   50800 * ms:                                    H8/300 Options.     (line   17)
   50801 * ms <1>:                                MeP Options.        (line  100)
   50802 * ms2600:                                H8/300 Options.     (line   24)
   50803 * msafe-dma:                             SPU Options.        (line   18)
   50804 * msafe-hints:                           SPU Options.        (line  112)
   50805 * msahf:                                 i386 and x86-64 Options.
   50806                                                              (line  620)
   50807 * msatur:                                MeP Options.        (line  105)
   50808 * msave-acc-in-interrupts:               RX Options.         (line  109)
   50809 * msave-toc-indirect:                    RS/6000 and PowerPC Options.
   50810                                                              (line  880)
   50811 * mscc:                                  FRV Options.        (line  173)
   50812 * msched-ar-data-spec:                   IA-64 Options.      (line  134)
   50813 * msched-ar-in-data-spec:                IA-64 Options.      (line  155)
   50814 * msched-br-data-spec:                   IA-64 Options.      (line  128)
   50815 * msched-br-in-data-spec:                IA-64 Options.      (line  148)
   50816 * msched-control-spec:                   IA-64 Options.      (line  140)
   50817 * msched-costly-dep:                     RS/6000 and PowerPC Options.
   50818                                                              (line  524)
   50819 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
   50820 * msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
   50821 * msched-in-control-spec:                IA-64 Options.      (line  162)
   50822 * msched-max-memory-insns:               IA-64 Options.      (line  207)
   50823 * msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
   50824 * msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
   50825 * msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
   50826 * msched-spec-ldc:                       IA-64 Options.      (line  187)
   50827 * msched-spec-ldc <1>:                   IA-64 Options.      (line  190)
   50828 * msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
   50829 * mschedule:                             HPPA Options.       (line   77)
   50830 * mscore5:                               Score Options.      (line   25)
   50831 * mscore5u:                              Score Options.      (line   28)
   50832 * mscore7:                               Score Options.      (line   31)
   50833 * mscore7d:                              Score Options.      (line   35)
   50834 * msda:                                  V850 Options.       (line   40)
   50835 * msdata:                                IA-64 Options.      (line   42)
   50836 * msdata <1>:                            RS/6000 and PowerPC Options.
   50837                                                              (line  715)
   50838 * msdata=all:                            C6X Options.        (line   30)
   50839 * msdata=data:                           RS/6000 and PowerPC Options.
   50840                                                              (line  720)
   50841 * msdata=default:                        C6X Options.        (line   22)
   50842 * msdata=default <1>:                    RS/6000 and PowerPC Options.
   50843                                                              (line  715)
   50844 * msdata=eabi:                           RS/6000 and PowerPC Options.
   50845                                                              (line  696)
   50846 * msdata=none:                           C6X Options.        (line   35)
   50847 * msdata=none <1>:                       M32R/D Options.     (line   40)
   50848 * msdata=none <2>:                       RS/6000 and PowerPC Options.
   50849                                                              (line  728)
   50850 * msdata=sdata:                          M32R/D Options.     (line   49)
   50851 * msdata=sysv:                           RS/6000 and PowerPC Options.
   50852                                                              (line  706)
   50853 * msdata=use:                            M32R/D Options.     (line   53)
   50854 * msdram:                                Blackfin Options.   (line  171)
   50855 * msdram <1>:                            MeP Options.        (line  110)
   50856 * msecure-plt:                           RS/6000 and PowerPC Options.
   50857                                                              (line  180)
   50858 * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
   50859 * msep-data:                             Blackfin Options.   (line  109)
   50860 * mserialize-volatile:                   Xtensa Options.     (line   35)
   50861 * msetlb:                                MN10300 Options.    (line   64)
   50862 * mshared-library-id:                    Blackfin Options.   (line  102)
   50863 * mshort:                                M680x0 Options.     (line  216)
   50864 * msign-extend-enabled:                  LM32 Options.       (line   18)
   50865 * msim:                                  Blackfin Options.   (line   36)
   50866 * msim <1>:                              C6X Options.        (line   19)
   50867 * msim <2>:                              CR16 Options.       (line   18)
   50868 * msim <3>:                              M32C Options.       (line   13)
   50869 * msim <4>:                              MeP Options.        (line  114)
   50870 * msim <5>:                              RL78 Options.       (line    7)
   50871 * msim <6>:                              RS/6000 and PowerPC Options.
   50872                                                              (line  652)
   50873 * msim <7>:                              RX Options.         (line   71)
   50874 * msim <8>:                              Xstormy16 Options.  (line    9)
   50875 * msimnovec:                             MeP Options.        (line  117)
   50876 * msimple-fpu:                           RS/6000 and PowerPC Options.
   50877                                                              (line  372)
   50878 * msingle-exit:                          MMIX Options.       (line   65)
   50879 * msingle-float:                         MIPS Options.       (line  243)
   50880 * msingle-float <1>:                     RS/6000 and PowerPC Options.
   50881                                                              (line  368)
   50882 * msingle-pic-base:                      ARM Options.        (line  213)
   50883 * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
   50884                                                              (line  511)
   50885 * msio:                                  HPPA Options.       (line  104)
   50886 * mslow-bytes:                           MCore Options.      (line   35)
   50887 * msmall-data:                           DEC Alpha Options.  (line  187)
   50888 * msmall-data-limit:                     RX Options.         (line   47)
   50889 * msmall-divides:                        MicroBlaze Options. (line   39)
   50890 * msmall-exec:                           S/390 and zSeries Options.
   50891                                                              (line   79)
   50892 * msmall-mem:                            SPU Options.        (line   38)
   50893 * msmall-model:                          FR30 Options.       (line    9)
   50894 * msmall-text:                           DEC Alpha Options.  (line  205)
   50895 * msmall16:                              Adapteva Epiphany Options.
   50896                                                              (line   66)
   50897 * msmartmips:                            MIPS Options.       (line  279)
   50898 * msoft-float:                           DEC Alpha Options.  (line   10)
   50899 * msoft-float <1>:                       FRV Options.        (line   27)
   50900 * msoft-float <2>:                       HPPA Options.       (line   90)
   50901 * msoft-float <3>:                       i386 and x86-64 Options.
   50902                                                              (line  287)
   50903 * msoft-float <4>:                       M680x0 Options.     (line  200)
   50904 * msoft-float <5>:                       MicroBlaze Options. (line    7)
   50905 * msoft-float <6>:                       MIPS Options.       (line  229)
   50906 * msoft-float <7>:                       PDP-11 Options.     (line   13)
   50907 * msoft-float <8>:                       RS/6000 and PowerPC Options.
   50908                                                              (line  362)
   50909 * msoft-float <9>:                       S/390 and zSeries Options.
   50910                                                              (line   11)
   50911 * msoft-float <10>:                      SPARC Options.      (line   39)
   50912 * msoft-float <11>:                      V850 Options.       (line  113)
   50913 * msoft-quad-float:                      SPARC Options.      (line   59)
   50914 * msp8:                                  AVR Options.        (line  185)
   50915 * mspace:                                SH Options.         (line  220)
   50916 * mspace <1>:                            V850 Options.       (line   30)
   50917 * mspe:                                  RS/6000 and PowerPC Options.
   50918                                                              (line  200)
   50919 * mspecld-anomaly:                       Blackfin Options.   (line   50)
   50920 * msplit-addresses:                      MIPS Options.       (line  424)
   50921 * msplit-vecmove-early:                  Adapteva Epiphany Options.
   50922                                                              (line  126)
   50923 * msse:                                  i386 and x86-64 Options.
   50924                                                              (line  564)
   50925 * msse2avx:                              i386 and x86-64 Options.
   50926                                                              (line  804)
   50927 * msseregparm:                           i386 and x86-64 Options.
   50928                                                              (line  412)
   50929 * mstack-align:                          CRIS Options.       (line   55)
   50930 * mstack-bias:                           SPARC Options.      (line  313)
   50931 * mstack-check-l1:                       Blackfin Options.   (line   76)
   50932 * mstack-guard:                          S/390 and zSeries Options.
   50933                                                              (line  154)
   50934 * mstack-increment:                      MCore Options.      (line   50)
   50935 * mstack-offset:                         Adapteva Epiphany Options.
   50936                                                              (line   37)
   50937 * mstack-size:                           S/390 and zSeries Options.
   50938                                                              (line  154)
   50939 * mstackrealign:                         i386 and x86-64 Options.
   50940                                                              (line  455)
   50941 * mstdmain:                              SPU Options.        (line   44)
   50942 * mstrict-align:                         AArch64 Options.    (line   38)
   50943 * mstrict-align <1>:                     M680x0 Options.     (line  283)
   50944 * mstrict-align <2>:                     RS/6000 and PowerPC Options.
   50945                                                              (line  463)
   50946 * mstrict-X:                             AVR Options.        (line  198)
   50947 * mstring:                               RS/6000 and PowerPC Options.
   50948                                                              (line  399)
   50949 * mstringop-strategy=ALG:                i386 and x86-64 Options.
   50950                                                              (line  768)
   50951 * mstructure-size-boundary:              ARM Options.        (line  170)
   50952 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
   50953                                                              (line  604)
   50954 * msym32:                                MIPS Options.       (line  322)
   50955 * msynci:                                MIPS Options.       (line  664)
   50956 * MT:                                    Preprocessor Options.
   50957                                                              (line  251)
   50958 * mtarget-align:                         Xtensa Options.     (line   59)
   50959 * mtas:                                  SH Options.         (line  211)
   50960 * mtda:                                  V850 Options.       (line   34)
   50961 * mtext-section-literals:                Xtensa Options.     (line   47)
   50962 * mtf:                                   MeP Options.        (line  121)
   50963 * mthread:                               i386 and x86-64 Windows Options.
   50964                                                              (line   26)
   50965 * mthreads:                              i386 and x86-64 Options.
   50966                                                              (line  745)
   50967 * mthumb:                                ARM Options.        (line  248)
   50968 * mthumb-interwork:                      ARM Options.        (line   25)
   50969 * mtiny-stack:                           AVR Options.        (line  212)
   50970 * mtiny=:                                MeP Options.        (line  125)
   50971 * mTLS:                                  FRV Options.        (line   90)
   50972 * mtls:                                  FRV Options.        (line   94)
   50973 * mtls-dialect:                          ARM Options.        (line  290)
   50974 * mtls-dialect <1>:                      i386 and x86-64 Options.
   50975                                                              (line  723)
   50976 * mtls-dialect=desc:                     AArch64 Options.    (line   47)
   50977 * mtls-dialect=traditional:              AArch64 Options.    (line   51)
   50978 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
   50979                                                              (line  794)
   50980 * mtls-markers:                          RS/6000 and PowerPC Options.
   50981                                                              (line  785)
   50982 * mtls-size:                             IA-64 Options.      (line  112)
   50983 * mtoc:                                  RS/6000 and PowerPC Options.
   50984                                                              (line  488)
   50985 * mtomcat-stats:                         FRV Options.        (line  254)
   50986 * mtoplevel-symbols:                     MMIX Options.       (line   39)
   50987 * mtp:                                   ARM Options.        (line  282)
   50988 * mtpcs-frame:                           ARM Options.        (line  255)
   50989 * mtpcs-leaf-frame:                      ARM Options.        (line  261)
   50990 * mtpf-trace:                            S/390 and zSeries Options.
   50991                                                              (line  129)
   50992 * mtrap-precision:                       DEC Alpha Options.  (line  109)
   50993 * mtune:                                 AArch64 Options.    (line   82)
   50994 * mtune <1>:                             ARM Options.        (line   90)
   50995 * mtune <2>:                             CRIS Options.       (line   17)
   50996 * mtune <3>:                             DEC Alpha Options.  (line  259)
   50997 * mtune <4>:                             i386 and x86-64 Options.
   50998                                                              (line  191)
   50999 * mtune <5>:                             IA-64 Options.      (line  116)
   51000 * mtune <6>:                             M680x0 Options.     (line   68)
   51001 * mtune <7>:                             MIPS Options.       (line   63)
   51002 * mtune <8>:                             MN10300 Options.    (line   30)
   51003 * mtune <9>:                             RS/6000 and PowerPC Options.
   51004                                                              (line  110)
   51005 * mtune <10>:                            S/390 and zSeries Options.
   51006                                                              (line  122)
   51007 * mtune <11>:                            SPARC Options.      (line  180)
   51008 * muclibc:                               GNU/Linux Options.  (line   13)
   51009 * muls:                                  Score Options.      (line   18)
   51010 * multcost=NUMBER:                       SH Options.         (line  233)
   51011 * multilib-library-pic:                  FRV Options.        (line  110)
   51012 * multiply-enabled:                      LM32 Options.       (line   15)
   51013 * multiply_defined:                      Darwin Options.     (line  196)
   51014 * multiply_defined_unused:               Darwin Options.     (line  196)
   51015 * multi_module:                          Darwin Options.     (line  196)
   51016 * munaligned-access:                     ARM Options.        (line  314)
   51017 * munaligned-doubles:                    SPARC Options.      (line   73)
   51018 * municode:                              i386 and x86-64 Windows Options.
   51019                                                              (line   30)
   51020 * muninit-const-in-rodata:               MIPS Options.       (line  394)
   51021 * munix:                                 VAX Options.        (line    9)
   51022 * munix-asm:                             PDP-11 Options.     (line   68)
   51023 * munsafe-dma:                           SPU Options.        (line   18)
   51024 * mupdate:                               RS/6000 and PowerPC Options.
   51025                                                              (line  410)
   51026 * muser-enabled:                         LM32 Options.       (line   21)
   51027 * muser-mode:                            SPARC Options.      (line   85)
   51028 * musermode:                             SH Options.         (line  228)
   51029 * mv850:                                 V850 Options.       (line   49)
   51030 * mv850e:                                V850 Options.       (line   79)
   51031 * mv850e1:                               V850 Options.       (line   70)
   51032 * mv850e2:                               V850 Options.       (line   66)
   51033 * mv850e2v3:                             V850 Options.       (line   61)
   51034 * mv850e2v4:                             V850 Options.       (line   57)
   51035 * mv850e3v5:                             V850 Options.       (line   52)
   51036 * mv850es:                               V850 Options.       (line   75)
   51037 * mv8plus:                               SPARC Options.      (line  194)
   51038 * mveclibabi:                            i386 and x86-64 Options.
   51039                                                              (line  691)
   51040 * mveclibabi <1>:                        RS/6000 and PowerPC Options.
   51041                                                              (line  841)
   51042 * mvect8-ret-in-mem:                     i386 and x86-64 Options.
   51043                                                              (line  422)
   51044 * mvis:                                  SPARC Options.      (line  201)
   51045 * mvis2:                                 SPARC Options.      (line  207)
   51046 * mvis3:                                 SPARC Options.      (line  215)
   51047 * mvliw-branch:                          FRV Options.        (line  201)
   51048 * mvms-return-codes:                     VMS Options.        (line    9)
   51049 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
   51050 * mvr4130-align:                         MIPS Options.       (line  653)
   51051 * mvrsave:                               RS/6000 and PowerPC Options.
   51052                                                              (line  170)
   51053 * mvsx:                                  RS/6000 and PowerPC Options.
   51054                                                              (line  214)
   51055 * mvxworks:                              RS/6000 and PowerPC Options.
   51056                                                              (line  673)
   51057 * mvzeroupper:                           i386 and x86-64 Options.
   51058                                                              (line  601)
   51059 * mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
   51060                                                              (line  176)
   51061 * mwarn-dynamicstack:                    S/390 and zSeries Options.
   51062                                                              (line  148)
   51063 * mwarn-framesize:                       S/390 and zSeries Options.
   51064                                                              (line  140)
   51065 * mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
   51066 * mwarn-reloc:                           SPU Options.        (line   10)
   51067 * mwide-bitfields:                       MCore Options.      (line   23)
   51068 * mwin32:                                i386 and x86-64 Windows Options.
   51069                                                              (line   35)
   51070 * mwindows:                              i386 and x86-64 Windows Options.
   51071                                                              (line   41)
   51072 * mword-relocations:                     ARM Options.        (line  301)
   51073 * mwords-little-endian:                  ARM Options.        (line   66)
   51074 * mx32:                                  i386 and x86-64 Options.
   51075                                                              (line  832)
   51076 * mxgot:                                 M680x0 Options.     (line  315)
   51077 * mxgot <1>:                             MIPS Options.       (line  191)
   51078 * mxilinx-fpu:                           RS/6000 and PowerPC Options.
   51079                                                              (line  383)
   51080 * mxl-barrel-shift:                      MicroBlaze Options. (line   33)
   51081 * mxl-compat:                            RS/6000 and PowerPC Options.
   51082                                                              (line  320)
   51083 * mxl-float-convert:                     MicroBlaze Options. (line   51)
   51084 * mxl-float-sqrt:                        MicroBlaze Options. (line   54)
   51085 * mxl-gp-opt:                            MicroBlaze Options. (line   45)
   51086 * mxl-multiply-high:                     MicroBlaze Options. (line   48)
   51087 * mxl-pattern-compare:                   MicroBlaze Options. (line   36)
   51088 * mxl-reorder:                           MicroBlaze Options. (line   63)
   51089 * mxl-soft-div:                          MicroBlaze Options. (line   30)
   51090 * mxl-soft-mul:                          MicroBlaze Options. (line   27)
   51091 * mxl-stack-check:                       MicroBlaze Options. (line   42)
   51092 * myellowknife:                          RS/6000 and PowerPC Options.
   51093                                                              (line  668)
   51094 * mzarch:                                S/390 and zSeries Options.
   51095                                                              (line   94)
   51096 * mzda:                                  V850 Options.       (line   45)
   51097 * mzdcbranch:                            SH Options.         (line  396)
   51098 * mzero-extend:                          MMIX Options.       (line   26)
   51099 * no-canonical-prefixes:                 Overall Options.    (line  334)
   51100 * no-integrated-cpp:                     Preprocessor Options.
   51101                                                              (line   34)
   51102 * no-sysroot-suffix:                     Directory Options.  (line  109)
   51103 * noall_load:                            Darwin Options.     (line  196)
   51104 * nocpp:                                 MIPS Options.       (line  491)
   51105 * nodefaultlibs:                         Link Options.       (line   62)
   51106 * nofixprebinding:                       Darwin Options.     (line  196)
   51107 * nofpu:                                 RX Options.         (line   17)
   51108 * nolibdld:                              HPPA Options.       (line  187)
   51109 * nomultidefs:                           Darwin Options.     (line  196)
   51110 * non-static:                            VxWorks Options.    (line   16)
   51111 * noprebind:                             Darwin Options.     (line  196)
   51112 * noseglinkedit:                         Darwin Options.     (line  196)
   51113 * nostartfiles:                          Link Options.       (line   57)
   51114 * nostdinc:                              Preprocessor Options.
   51115                                                              (line  401)
   51116 * nostdinc++:                            C++ Dialect Options.
   51117                                                              (line  346)
   51118 * nostdinc++ <1>:                        Preprocessor Options.
   51119                                                              (line  406)
   51120 * nostdlib:                              Link Options.       (line   74)
   51121 * no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
   51122 * o:                                     Overall Options.    (line  192)
   51123 * O:                                     Optimize Options.   (line   39)
   51124 * o <1>:                                 Preprocessor Options.
   51125                                                              (line   87)
   51126 * O0:                                    Optimize Options.   (line  128)
   51127 * O1:                                    Optimize Options.   (line   39)
   51128 * O2:                                    Optimize Options.   (line   83)
   51129 * O3:                                    Optimize Options.   (line  121)
   51130 * Ofast:                                 Optimize Options.   (line  142)
   51131 * Og:                                    Optimize Options.   (line  148)
   51132 * Os:                                    Optimize Options.   (line  132)
   51133 * p:                                     Debugging Options.  (line  328)
   51134 * P:                                     Preprocessor Options.
   51135                                                              (line  647)
   51136 * pagezero_size:                         Darwin Options.     (line  196)
   51137 * param:                                 Optimize Options.   (line 2237)
   51138 * pass-exit-codes:                       Overall Options.    (line  150)
   51139 * pedantic:                              Standards.          (line   16)
   51140 * pedantic <1>:                          Warning Options.    (line   71)
   51141 * pedantic <2>:                          Preprocessor Options.
   51142                                                              (line  175)
   51143 * pedantic <3>:                          C Extensions.       (line    6)
   51144 * pedantic <4>:                          Alternate Keywords. (line   30)
   51145 * pedantic <5>:                          Warnings and Errors.
   51146                                                              (line   25)
   51147 * pedantic-errors:                       Standards.          (line   16)
   51148 * pedantic-errors <1>:                   Warning Options.    (line  112)
   51149 * pedantic-errors <2>:                   Preprocessor Options.
   51150                                                              (line  180)
   51151 * pedantic-errors <3>:                   Non-bugs.           (line  216)
   51152 * pedantic-errors <4>:                   Warnings and Errors.
   51153                                                              (line   25)
   51154 * pg:                                    Debugging Options.  (line  334)
   51155 * pie:                                   Link Options.       (line   99)
   51156 * pipe:                                  Overall Options.    (line  215)
   51157 * prebind:                               Darwin Options.     (line  196)
   51158 * prebind_all_twolevel_modules:          Darwin Options.     (line  196)
   51159 * print-file-name:                       Debugging Options.  (line 1284)
   51160 * print-libgcc-file-name:                Debugging Options.  (line 1318)
   51161 * print-multi-directory:                 Debugging Options.  (line 1290)
   51162 * print-multi-lib:                       Debugging Options.  (line 1295)
   51163 * print-multi-os-directory:              Debugging Options.  (line 1302)
   51164 * print-multiarch:                       Debugging Options.  (line 1311)
   51165 * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
   51166                                                              (line  203)
   51167 * print-prog-name:                       Debugging Options.  (line 1315)
   51168 * print-search-dirs:                     Debugging Options.  (line 1326)
   51169 * print-sysroot:                         Debugging Options.  (line 1339)
   51170 * print-sysroot-headers-suffix:          Debugging Options.  (line 1346)
   51171 * private_bundle:                        Darwin Options.     (line  196)
   51172 * pthread:                               RS/6000 and PowerPC Options.
   51173                                                              (line  792)
   51174 * pthread <1>:                           Solaris 2 Options.  (line   30)
   51175 * pthreads:                              Solaris 2 Options.  (line   24)
   51176 * Q:                                     Debugging Options.  (line  340)
   51177 * Qn:                                    System V Options.   (line   18)
   51178 * Qy:                                    System V Options.   (line   14)
   51179 * rdynamic:                              Link Options.       (line  105)
   51180 * read_only_relocs:                      Darwin Options.     (line  196)
   51181 * remap:                                 Preprocessor Options.
   51182                                                              (line  694)
   51183 * S:                                     Overall Options.    (line  175)
   51184 * S <1>:                                 Link Options.       (line   20)
   51185 * s:                                     Link Options.       (line  112)
   51186 * save-temps:                            Debugging Options.  (line 1193)
   51187 * save-temps=obj:                        Debugging Options.  (line 1219)
   51188 * sectalign:                             Darwin Options.     (line  196)
   51189 * sectcreate:                            Darwin Options.     (line  196)
   51190 * sectobjectsymbols:                     Darwin Options.     (line  196)
   51191 * sectobjectsymbols <1>:                 Darwin Options.     (line  196)
   51192 * sectorder:                             Darwin Options.     (line  196)
   51193 * seg1addr:                              Darwin Options.     (line  196)
   51194 * segaddr:                               Darwin Options.     (line  196)
   51195 * seglinkedit:                           Darwin Options.     (line  196)
   51196 * segprot:                               Darwin Options.     (line  196)
   51197 * segs_read_only_addr:                   Darwin Options.     (line  196)
   51198 * segs_read_only_addr <1>:               Darwin Options.     (line  196)
   51199 * segs_read_write_addr:                  Darwin Options.     (line  196)
   51200 * segs_read_write_addr <1>:              Darwin Options.     (line  196)
   51201 * seg_addr_table:                        Darwin Options.     (line  196)
   51202 * seg_addr_table_filename:               Darwin Options.     (line  196)
   51203 * shared:                                Link Options.       (line  120)
   51204 * shared-libgcc:                         Link Options.       (line  128)
   51205 * short-calls:                           Adapteva Epiphany Options.
   51206                                                              (line   61)
   51207 * sim:                                   CRIS Options.       (line   95)
   51208 * sim2:                                  CRIS Options.       (line  101)
   51209 * single_module:                         Darwin Options.     (line  196)
   51210 * specs:                                 Directory Options.  (line   86)
   51211 * static:                                Link Options.       (line  116)
   51212 * static <1>:                            Darwin Options.     (line  196)
   51213 * static <2>:                            HPPA Options.       (line  191)
   51214 * static-libgcc:                         Link Options.       (line  128)
   51215 * std:                                   Standards.          (line   16)
   51216 * std <1>:                               C Dialect Options.  (line   46)
   51217 * std <2>:                               Other Builtins.     (line   21)
   51218 * std <3>:                               Non-bugs.           (line  107)
   51219 * std=:                                  Preprocessor Options.
   51220                                                              (line  340)
   51221 * sub_library:                           Darwin Options.     (line  196)
   51222 * sub_umbrella:                          Darwin Options.     (line  196)
   51223 * symbolic:                              Link Options.       (line  190)
   51224 * sysroot:                               Directory Options.  (line   94)
   51225 * T:                                     Link Options.       (line  196)
   51226 * target-help:                           Overall Options.    (line  230)
   51227 * target-help <1>:                       Preprocessor Options.
   51228                                                              (line  699)
   51229 * threads:                               HPPA Options.       (line  204)
   51230 * time:                                  Debugging Options.  (line 1234)
   51231 * tno-android-cc:                        GNU/Linux Options.  (line   31)
   51232 * tno-android-ld:                        GNU/Linux Options.  (line   35)
   51233 * traditional:                           C Dialect Options.  (line  311)
   51234 * traditional <1>:                       Incompatibilities.  (line    6)
   51235 * traditional-cpp:                       C Dialect Options.  (line  311)
   51236 * traditional-cpp <1>:                   Preprocessor Options.
   51237                                                              (line  677)
   51238 * trigraphs:                             C Dialect Options.  (line  306)
   51239 * trigraphs <1>:                         Preprocessor Options.
   51240                                                              (line  681)
   51241 * twolevel_namespace:                    Darwin Options.     (line  196)
   51242 * U:                                     Preprocessor Options.
   51243                                                              (line   69)
   51244 * u:                                     Link Options.       (line  228)
   51245 * umbrella:                              Darwin Options.     (line  196)
   51246 * undef:                                 Preprocessor Options.
   51247                                                              (line   73)
   51248 * undefined:                             Darwin Options.     (line  196)
   51249 * unexported_symbols_list:               Darwin Options.     (line  196)
   51250 * v:                                     Overall Options.    (line  203)
   51251 * v <1>:                                 Preprocessor Options.
   51252                                                              (line  703)
   51253 * version:                               Overall Options.    (line  338)
   51254 * version <1>:                           Preprocessor Options.
   51255                                                              (line  715)
   51256 * w:                                     Warning Options.    (line   25)
   51257 * W:                                     Warning Options.    (line  166)
   51258 * W <1>:                                 Warning Options.    (line 1248)
   51259 * W <2>:                                 Warning Options.    (line 1327)
   51260 * w <1>:                                 Preprocessor Options.
   51261                                                              (line  171)
   51262 * W <3>:                                 Incompatibilities.  (line   64)
   51263 * Wa:                                    Assembler Options.  (line    9)
   51264 * Wabi:                                  C++ Dialect Options.
   51265                                                              (line  360)
   51266 * Waddr-space-convert:                   AVR Options.        (line  215)
   51267 * Waddress:                              Warning Options.    (line 1165)
   51268 * Waggregate-return:                     Warning Options.    (line 1183)
   51269 * Waggressive-loop-optimizations:        Warning Options.    (line 1188)
   51270 * Wall:                                  Warning Options.    (line  116)
   51271 * Wall <1>:                              Preprocessor Options.
   51272                                                              (line   93)
   51273 * Wall <2>:                              Standard Libraries. (line    6)
   51274 * Warray-bounds:                         Warning Options.    (line  825)
   51275 * Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
   51276                                                              (line  157)
   51277 * Wattributes:                           Warning Options.    (line 1193)
   51278 * Wbad-function-cast:                    Warning Options.    (line 1040)
   51279 * Wbuiltin-macro-redefined:              Warning Options.    (line 1199)
   51280 * Wcast-align:                           Warning Options.    (line 1071)
   51281 * Wcast-qual:                            Warning Options.    (line 1055)
   51282 * Wchar-subscripts:                      Warning Options.    (line  205)
   51283 * Wclobbered:                            Warning Options.    (line 1090)
   51284 * Wcomment:                              Warning Options.    (line  210)
   51285 * Wcomment <1>:                          Preprocessor Options.
   51286                                                              (line  101)
   51287 * Wcomments:                             Preprocessor Options.
   51288                                                              (line  101)
   51289 * Wconversion:                           Warning Options.    (line 1094)
   51290 * Wconversion-null:                      Warning Options.    (line 1112)
   51291 * Wctor-dtor-privacy:                    C++ Dialect Options.
   51292                                                              (line  467)
   51293 * Wdeclaration-after-statement:          Warning Options.    (line  957)
   51294 * Wdelete-non-virtual-dtor:              C++ Dialect Options.
   51295                                                              (line  474)
   51296 * Wdeprecated:                           Warning Options.    (line 1314)
   51297 * Wdeprecated-declarations:              Warning Options.    (line 1318)
   51298 * Wdisabled-optimization:                Warning Options.    (line 1473)
   51299 * Wdiv-by-zero:                          Warning Options.    (line  830)
   51300 * Wdouble-promotion:                     Warning Options.    (line  234)
   51301 * weak_reference_mismatches:             Darwin Options.     (line  196)
   51302 * Weffc++:                               C++ Dialect Options.
   51303                                                              (line  552)
   51304 * Wempty-body:                           Warning Options.    (line 1123)
   51305 * Wendif-labels:                         Warning Options.    (line  967)
   51306 * Wendif-labels <1>:                     Preprocessor Options.
   51307                                                              (line  148)
   51308 * Wenum-compare:                         Warning Options.    (line 1127)
   51309 * Werror:                                Warning Options.    (line   28)
   51310 * Werror <1>:                            Preprocessor Options.
   51311                                                              (line  161)
   51312 * Werror=:                               Warning Options.    (line   31)
   51313 * Wextra:                                Warning Options.    (line  166)
   51314 * Wextra <1>:                            Warning Options.    (line 1248)
   51315 * Wextra <2>:                            Warning Options.    (line 1327)
   51316 * Wfatal-errors:                         Warning Options.    (line   48)
   51317 * Wfloat-equal:                          Warning Options.    (line  857)
   51318 * Wformat:                               Warning Options.    (line  253)
   51319 * Wformat <1>:                           Warning Options.    (line  804)
   51320 * Wformat <2>:                           Function Attributes.
   51321                                                              (line  414)
   51322 * Wformat-contains-nul:                  Warning Options.    (line  287)
   51323 * Wformat-extra-args:                    Warning Options.    (line  291)
   51324 * Wformat-nonliteral:                    Warning Options.    (line  315)
   51325 * Wformat-nonliteral <1>:                Function Attributes.
   51326                                                              (line  479)
   51327 * Wformat-security:                      Warning Options.    (line  320)
   51328 * Wformat-y2k:                           Warning Options.    (line  332)
   51329 * Wformat-zero-length:                   Warning Options.    (line  305)
   51330 * Wformat=:                              Warning Options.    (line  253)
   51331 * Wframe-larger-than:                    Warning Options.    (line  981)
   51332 * Wfree-nonheap-object:                  Warning Options.    (line  990)
   51333 * whatsloaded:                           Darwin Options.     (line  196)
   51334 * whyload:                               Darwin Options.     (line  196)
   51335 * Wignored-qualifiers:                   Warning Options.    (line  372)
   51336 * Wimplicit:                             Warning Options.    (line  368)
   51337 * Wimplicit-function-declaration:        Warning Options.    (line  362)
   51338 * Wimplicit-int:                         Warning Options.    (line  358)
   51339 * Winherited-variadic-ctor:              Warning Options.    (line 1383)
   51340 * Winit-self:                            Warning Options.    (line  343)
   51341 * Winline:                               Warning Options.    (line 1388)
   51342 * Winline <1>:                           Inline.             (line   63)
   51343 * Wint-to-pointer-cast:                  Warning Options.    (line 1415)
   51344 * Winvalid-offsetof:                     Warning Options.    (line 1401)
   51345 * Winvalid-pch:                          Warning Options.    (line 1424)
   51346 * Wjump-misses-init:                     Warning Options.    (line 1133)
   51347 * Wl:                                    Link Options.       (line  220)
   51348 * Wlarger-than-LEN:                      Warning Options.    (line  978)
   51349 * Wlarger-than=LEN:                      Warning Options.    (line  978)
   51350 * Wliteral-suffix:                       C++ Dialect Options.
   51351                                                              (line  481)
   51352 * Wlogical-op:                           Warning Options.    (line 1178)
   51353 * Wlong-long:                            Warning Options.    (line 1428)
   51354 * Wmain:                                 Warning Options.    (line  383)
   51355 * Wmaybe-uninitialized:                  Warning Options.    (line  641)
   51356 * Wmissing-braces:                       Warning Options.    (line  390)
   51357 * Wmissing-declarations:                 Warning Options.    (line 1238)
   51358 * Wmissing-field-initializers:           Warning Options.    (line 1248)
   51359 * Wmissing-format-attribute:             Warning Options.    (line  804)
   51360 * Wmissing-include-dirs:                 Warning Options.    (line  401)
   51361 * Wmissing-parameter-type:               Warning Options.    (line 1220)
   51362 * Wmissing-prototypes:                   Warning Options.    (line 1228)
   51363 * Wmultichar:                            Warning Options.    (line 1266)
   51364 * Wnarrowing:                            C++ Dialect Options.
   51365                                                              (line  502)
   51366 * Wnested-externs:                       Warning Options.    (line 1380)
   51367 * Wno-abi:                               C++ Dialect Options.
   51368                                                              (line  360)
   51369 * Wno-address:                           Warning Options.    (line 1165)
   51370 * Wno-aggregate-return:                  Warning Options.    (line 1183)
   51371 * Wno-aggressive-loop-optimizations:     Warning Options.    (line 1188)
   51372 * Wno-all:                               Warning Options.    (line  116)
   51373 * Wno-array-bounds:                      Warning Options.    (line  825)
   51374 * Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
   51375                                                              (line  157)
   51376 * Wno-attributes:                        Warning Options.    (line 1193)
   51377 * Wno-bad-function-cast:                 Warning Options.    (line 1040)
   51378 * Wno-builtin-macro-redefined:           Warning Options.    (line 1199)
   51379 * Wno-cast-align:                        Warning Options.    (line 1071)
   51380 * Wno-cast-qual:                         Warning Options.    (line 1055)
   51381 * Wno-char-subscripts:                   Warning Options.    (line  205)
   51382 * Wno-clobbered:                         Warning Options.    (line 1090)
   51383 * Wno-comment:                           Warning Options.    (line  210)
   51384 * Wno-conversion:                        Warning Options.    (line 1094)
   51385 * Wno-conversion-null:                   Warning Options.    (line 1112)
   51386 * Wno-coverage-mismatch:                 Warning Options.    (line  215)
   51387 * Wno-ctor-dtor-privacy:                 C++ Dialect Options.
   51388                                                              (line  467)
   51389 * Wno-declaration-after-statement:       Warning Options.    (line  957)
   51390 * Wno-delete-non-virtual-dtor:           C++ Dialect Options.
   51391                                                              (line  474)
   51392 * Wno-deprecated:                        Warning Options.    (line 1314)
   51393 * Wno-deprecated-declarations:           Warning Options.    (line 1318)
   51394 * Wno-disabled-optimization:             Warning Options.    (line 1473)
   51395 * Wno-div-by-zero:                       Warning Options.    (line  830)
   51396 * Wno-double-promotion:                  Warning Options.    (line  234)
   51397 * Wno-effc++:                            C++ Dialect Options.
   51398                                                              (line  552)
   51399 * Wno-empty-body:                        Warning Options.    (line 1123)
   51400 * Wno-endif-labels:                      Warning Options.    (line  967)
   51401 * Wno-enum-compare:                      Warning Options.    (line 1127)
   51402 * Wno-error:                             Warning Options.    (line   28)
   51403 * Wno-error=:                            Warning Options.    (line   31)
   51404 * Wno-extra:                             Warning Options.    (line  166)
   51405 * Wno-extra <1>:                         Warning Options.    (line 1248)
   51406 * Wno-extra <2>:                         Warning Options.    (line 1327)
   51407 * Wno-fatal-errors:                      Warning Options.    (line   48)
   51408 * Wno-float-equal:                       Warning Options.    (line  857)
   51409 * Wno-format:                            Warning Options.    (line  253)
   51410 * Wno-format <1>:                        Warning Options.    (line  804)
   51411 * Wno-format-contains-nul:               Warning Options.    (line  287)
   51412 * Wno-format-extra-args:                 Warning Options.    (line  291)
   51413 * Wno-format-nonliteral:                 Warning Options.    (line  315)
   51414 * Wno-format-security:                   Warning Options.    (line  320)
   51415 * Wno-format-y2k:                        Warning Options.    (line  332)
   51416 * Wno-format-zero-length:                Warning Options.    (line  305)
   51417 * Wno-free-nonheap-object:               Warning Options.    (line  990)
   51418 * Wno-ignored-qualifiers:                Warning Options.    (line  372)
   51419 * Wno-implicit:                          Warning Options.    (line  368)
   51420 * Wno-implicit-function-declaration:     Warning Options.    (line  362)
   51421 * Wno-implicit-int:                      Warning Options.    (line  358)
   51422 * Wno-inherited-variadic-ctor:           Warning Options.    (line 1383)
   51423 * Wno-init-self:                         Warning Options.    (line  343)
   51424 * Wno-inline:                            Warning Options.    (line 1388)
   51425 * Wno-int-to-pointer-cast:               Warning Options.    (line 1415)
   51426 * Wno-invalid-offsetof:                  Warning Options.    (line 1401)
   51427 * Wno-invalid-pch:                       Warning Options.    (line 1424)
   51428 * Wno-jump-misses-init:                  Warning Options.    (line 1133)
   51429 * Wno-literal-suffix:                    C++ Dialect Options.
   51430                                                              (line  481)
   51431 * Wno-logical-op:                        Warning Options.    (line 1178)
   51432 * Wno-long-long:                         Warning Options.    (line 1428)
   51433 * Wno-main:                              Warning Options.    (line  383)
   51434 * Wno-maybe-uninitialized:               Warning Options.    (line  641)
   51435 * Wno-missing-braces:                    Warning Options.    (line  390)
   51436 * Wno-missing-declarations:              Warning Options.    (line 1238)
   51437 * Wno-missing-field-initializers:        Warning Options.    (line 1248)
   51438 * Wno-missing-format-attribute:          Warning Options.    (line  804)
   51439 * Wno-missing-include-dirs:              Warning Options.    (line  401)
   51440 * Wno-missing-parameter-type:            Warning Options.    (line 1220)
   51441 * Wno-missing-prototypes:                Warning Options.    (line 1228)
   51442 * Wno-mudflap:                           Warning Options.    (line 1493)
   51443 * Wno-multichar:                         Warning Options.    (line 1266)
   51444 * Wno-narrowing:                         C++ Dialect Options.
   51445                                                              (line  502)
   51446 * Wno-nested-externs:                    Warning Options.    (line 1380)
   51447 * Wno-noexcept:                          C++ Dialect Options.
   51448                                                              (line  515)
   51449 * Wno-non-template-friend:               C++ Dialect Options.
   51450                                                              (line  587)
   51451 * Wno-non-virtual-dtor:                  C++ Dialect Options.
   51452                                                              (line  521)
   51453 * Wno-nonnull:                           Warning Options.    (line  336)
   51454 * Wno-old-style-cast:                    C++ Dialect Options.
   51455                                                              (line  603)
   51456 * Wno-old-style-declaration:             Warning Options.    (line 1210)
   51457 * Wno-old-style-definition:              Warning Options.    (line 1216)
   51458 * Wno-overflow:                          Warning Options.    (line 1324)
   51459 * Wno-overlength-strings:                Warning Options.    (line 1497)
   51460 * Wno-overloaded-virtual:                C++ Dialect Options.
   51461                                                              (line  609)
   51462 * Wno-override-init:                     Warning Options.    (line 1327)
   51463 * Wno-packed:                            Warning Options.    (line 1335)
   51464 * Wno-packed-bitfield-compat:            Warning Options.    (line 1352)
   51465 * Wno-padded:                            Warning Options.    (line 1369)
   51466 * Wno-parentheses:                       Warning Options.    (line  404)
   51467 * Wno-pedantic-ms-format:                Warning Options.    (line 1020)
   51468 * Wno-pmf-conversions:                   C++ Dialect Options.
   51469                                                              (line  628)
   51470 * Wno-pmf-conversions <1>:               Bound member functions.
   51471                                                              (line   35)
   51472 * Wno-pointer-arith:                     Warning Options.    (line 1026)
   51473 * Wno-pointer-sign:                      Warning Options.    (line 1482)
   51474 * Wno-pointer-to-int-cast:               Warning Options.    (line 1420)
   51475 * Wno-pragmas:                           Warning Options.    (line  691)
   51476 * Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
   51477                                                              (line  161)
   51478 * Wno-redundant-decls:                   Warning Options.    (line 1376)
   51479 * Wno-reorder:                           C++ Dialect Options.
   51480                                                              (line  527)
   51481 * Wno-return-local-addr:                 Warning Options.    (line  499)
   51482 * Wno-return-type:                       Warning Options.    (line  503)
   51483 * Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
   51484                                                              (line  171)
   51485 * Wno-sequence-point:                    Warning Options.    (line  453)
   51486 * Wno-shadow:                            Warning Options.    (line  971)
   51487 * Wno-sign-compare:                      Warning Options.    (line 1144)
   51488 * Wno-sign-conversion:                   Warning Options.    (line 1151)
   51489 * Wno-sign-promo:                        C++ Dialect Options.
   51490                                                              (line  632)
   51491 * Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1157)
   51492 * Wno-stack-protector:                   Warning Options.    (line 1488)
   51493 * Wno-strict-aliasing:                   Warning Options.    (line  696)
   51494 * Wno-strict-null-sentinel:              C++ Dialect Options.
   51495                                                              (line  580)
   51496 * Wno-strict-overflow:                   Warning Options.    (line  735)
   51497 * Wno-strict-prototypes:                 Warning Options.    (line 1204)
   51498 * Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
   51499                                                              (line  183)
   51500 * Wno-suggest-attribute=:                Warning Options.    (line  784)
   51501 * Wno-suggest-attribute=const:           Warning Options.    (line  790)
   51502 * Wno-suggest-attribute=format:          Warning Options.    (line  804)
   51503 * Wno-suggest-attribute=noreturn:        Warning Options.    (line  790)
   51504 * Wno-suggest-attribute=pure:            Warning Options.    (line  790)
   51505 * Wno-switch:                            Warning Options.    (line  517)
   51506 * Wno-switch-default:                    Warning Options.    (line  525)
   51507 * Wno-switch-enum:                       Warning Options.    (line  528)
   51508 * Wno-sync-nand:                         Warning Options.    (line  537)
   51509 * Wno-system-headers:                    Warning Options.    (line  835)
   51510 * Wno-traditional:                       Warning Options.    (line  872)
   51511 * Wno-traditional-conversion:            Warning Options.    (line  949)
   51512 * Wno-trampolines:                       Warning Options.    (line  846)
   51513 * Wno-trigraphs:                         Warning Options.    (line  542)
   51514 * Wno-type-limits:                       Warning Options.    (line 1033)
   51515 * Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
   51516                                                              (line  191)
   51517 * Wno-undef:                             Warning Options.    (line  964)
   51518 * Wno-uninitialized:                     Warning Options.    (line  619)
   51519 * Wno-unknown-pragmas:                   Warning Options.    (line  684)
   51520 * Wno-unsafe-loop-optimizations:         Warning Options.    (line 1014)
   51521 * Wno-unused:                            Warning Options.    (line  612)
   51522 * Wno-unused-but-set-parameter:          Warning Options.    (line  547)
   51523 * Wno-unused-but-set-variable:           Warning Options.    (line  556)
   51524 * Wno-unused-function:                   Warning Options.    (line  566)
   51525 * Wno-unused-label:                      Warning Options.    (line  571)
   51526 * Wno-unused-parameter:                  Warning Options.    (line  582)
   51527 * Wno-unused-result:                     Warning Options.    (line  589)
   51528 * Wno-unused-value:                      Warning Options.    (line  602)
   51529 * Wno-unused-variable:                   Warning Options.    (line  594)
   51530 * Wno-useless-cast:                      Warning Options.    (line 1120)
   51531 * Wno-varargs:                           Warning Options.    (line 1439)
   51532 * Wno-variadic-macros:                   Warning Options.    (line 1433)
   51533 * Wno-vector-operation-performance:      Warning Options.    (line 1444)
   51534 * Wno-virtual-move-assign:               Warning Options.    (line 1454)
   51535 * Wno-vla:                               Warning Options.    (line 1463)
   51536 * Wno-volatile-register-var:             Warning Options.    (line 1467)
   51537 * Wno-write-strings:                     Warning Options.    (line 1077)
   51538 * Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1116)
   51539 * Wnoexcept:                             C++ Dialect Options.
   51540                                                              (line  515)
   51541 * Wnon-template-friend:                  C++ Dialect Options.
   51542                                                              (line  587)
   51543 * Wnon-virtual-dtor:                     C++ Dialect Options.
   51544                                                              (line  521)
   51545 * Wnonnull:                              Warning Options.    (line  336)
   51546 * Wnormalized=:                          Warning Options.    (line 1272)
   51547 * Wold-style-cast:                       C++ Dialect Options.
   51548                                                              (line  603)
   51549 * Wold-style-declaration:                Warning Options.    (line 1210)
   51550 * Wold-style-definition:                 Warning Options.    (line 1216)
   51551 * Woverflow:                             Warning Options.    (line 1324)
   51552 * Woverlength-strings:                   Warning Options.    (line 1497)
   51553 * Woverloaded-virtual:                   C++ Dialect Options.
   51554                                                              (line  609)
   51555 * Woverride-init:                        Warning Options.    (line 1327)
   51556 * Wp:                                    Preprocessor Options.
   51557                                                              (line   14)
   51558 * Wpacked:                               Warning Options.    (line 1335)
   51559 * Wpacked-bitfield-compat:               Warning Options.    (line 1352)
   51560 * Wpadded:                               Warning Options.    (line 1369)
   51561 * Wparentheses:                          Warning Options.    (line  404)
   51562 * Wpedantic:                             Warning Options.    (line   71)
   51563 * Wpedantic-ms-format:                   Warning Options.    (line 1020)
   51564 * Wpmf-conversions:                      C++ Dialect Options.
   51565                                                              (line  628)
   51566 * Wpointer-arith:                        Warning Options.    (line 1026)
   51567 * Wpointer-arith <1>:                    Pointer Arith.      (line   13)
   51568 * Wpointer-sign:                         Warning Options.    (line 1482)
   51569 * Wpointer-to-int-cast:                  Warning Options.    (line 1420)
   51570 * Wpragmas:                              Warning Options.    (line  691)
   51571 * Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
   51572                                                              (line  161)
   51573 * wrapper:                               Overall Options.    (line  341)
   51574 * Wredundant-decls:                      Warning Options.    (line 1376)
   51575 * Wreorder:                              C++ Dialect Options.
   51576                                                              (line  527)
   51577 * Wreturn-local-addr:                    Warning Options.    (line  499)
   51578 * Wreturn-type:                          Warning Options.    (line  503)
   51579 * Wselector:                             Objective-C and Objective-C++ Dialect Options.
   51580                                                              (line  171)
   51581 * Wsequence-point:                       Warning Options.    (line  453)
   51582 * Wshadow:                               Warning Options.    (line  971)
   51583 * Wsign-compare:                         Warning Options.    (line 1144)
   51584 * Wsign-conversion:                      Warning Options.    (line 1151)
   51585 * Wsign-promo:                           C++ Dialect Options.
   51586                                                              (line  632)
   51587 * Wsizeof-pointer-memaccess:             Warning Options.    (line 1157)
   51588 * Wstack-protector:                      Warning Options.    (line 1488)
   51589 * Wstack-usage:                          Warning Options.    (line  994)
   51590 * Wstrict-aliasing:                      Warning Options.    (line  696)
   51591 * Wstrict-aliasing=n:                    Warning Options.    (line  703)
   51592 * Wstrict-null-sentinel:                 C++ Dialect Options.
   51593                                                              (line  580)
   51594 * Wstrict-overflow:                      Warning Options.    (line  735)
   51595 * Wstrict-prototypes:                    Warning Options.    (line 1204)
   51596 * Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
   51597                                                              (line  183)
   51598 * Wsuggest-attribute=:                   Warning Options.    (line  784)
   51599 * Wsuggest-attribute=const:              Warning Options.    (line  790)
   51600 * Wsuggest-attribute=format:             Warning Options.    (line  804)
   51601 * Wsuggest-attribute=noreturn:           Warning Options.    (line  790)
   51602 * Wsuggest-attribute=pure:               Warning Options.    (line  790)
   51603 * Wswitch:                               Warning Options.    (line  517)
   51604 * Wswitch-default:                       Warning Options.    (line  525)
   51605 * Wswitch-enum:                          Warning Options.    (line  528)
   51606 * Wsync-nand:                            Warning Options.    (line  537)
   51607 * Wsystem-headers:                       Warning Options.    (line  835)
   51608 * Wsystem-headers <1>:                   Preprocessor Options.
   51609                                                              (line  165)
   51610 * Wtraditional:                          Warning Options.    (line  872)
   51611 * Wtraditional <1>:                      Preprocessor Options.
   51612                                                              (line  118)
   51613 * Wtraditional-conversion:               Warning Options.    (line  949)
   51614 * Wtrampolines:                          Warning Options.    (line  846)
   51615 * Wtrigraphs:                            Warning Options.    (line  542)
   51616 * Wtrigraphs <1>:                        Preprocessor Options.
   51617                                                              (line  106)
   51618 * Wtype-limits:                          Warning Options.    (line 1033)
   51619 * Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
   51620                                                              (line  191)
   51621 * Wundef:                                Warning Options.    (line  964)
   51622 * Wundef <1>:                            Preprocessor Options.
   51623                                                              (line  124)
   51624 * Wuninitialized:                        Warning Options.    (line  619)
   51625 * Wunknown-pragmas:                      Warning Options.    (line  684)
   51626 * Wunsafe-loop-optimizations:            Warning Options.    (line 1014)
   51627 * Wunsuffixed-float-constants:           Warning Options.    (line 1512)
   51628 * Wunused:                               Warning Options.    (line  612)
   51629 * Wunused-but-set-parameter:             Warning Options.    (line  547)
   51630 * Wunused-but-set-variable:              Warning Options.    (line  556)
   51631 * Wunused-function:                      Warning Options.    (line  566)
   51632 * Wunused-label:                         Warning Options.    (line  571)
   51633 * Wunused-local-typedefs:                Warning Options.    (line  578)
   51634 * Wunused-macros:                        Preprocessor Options.
   51635                                                              (line  129)
   51636 * Wunused-parameter:                     Warning Options.    (line  582)
   51637 * Wunused-result:                        Warning Options.    (line  589)
   51638 * Wunused-value:                         Warning Options.    (line  602)
   51639 * Wunused-variable:                      Warning Options.    (line  594)
   51640 * Wuseless-cast:                         Warning Options.    (line 1120)
   51641 * Wvarargs:                              Warning Options.    (line 1439)
   51642 * Wvariadic-macros:                      Warning Options.    (line 1433)
   51643 * Wvector-operation-performance:         Warning Options.    (line 1444)
   51644 * Wvirtual-move-assign:                  Warning Options.    (line 1454)
   51645 * Wvla:                                  Warning Options.    (line 1463)
   51646 * Wvolatile-register-var:                Warning Options.    (line 1467)
   51647 * Wwrite-strings:                        Warning Options.    (line 1077)
   51648 * Wzero-as-null-pointer-constant:        Warning Options.    (line 1116)
   51649 * x:                                     Overall Options.    (line  126)
   51650 * x <1>:                                 Preprocessor Options.
   51651                                                              (line  324)
   51652 * Xassembler:                            Assembler Options.  (line   13)
   51653 * Xbind-lazy:                            VxWorks Options.    (line   26)
   51654 * Xbind-now:                             VxWorks Options.    (line   30)
   51655 * Xlinker:                               Link Options.       (line  202)
   51656 * Xpreprocessor:                         Preprocessor Options.
   51657                                                              (line   25)
   51658 * Ym:                                    System V Options.   (line   26)
   51659 * YP:                                    System V Options.   (line   22)
   51660 
   51661 
   51662 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
   51663 
   51664 Keyword Index
   51665 *************
   51666 
   51667 [index]
   51668 * Menu:
   51669 
   51670 * '!' in constraint:                     Multi-Alternative.  (line   33)
   51671 * '#' in constraint:                     Modifiers.          (line   57)
   51672 * '#pragma':                             Pragmas.            (line    6)
   51673 * #pragma implementation:                C++ Interface.      (line   39)
   51674 * '#pragma implementation', implied:     C++ Interface.      (line   46)
   51675 * #pragma interface:                     C++ Interface.      (line   20)
   51676 * '#pragma', reason for not using:       Function Attributes.
   51677                                                              (line 1875)
   51678 * $:                                     Dollar Signs.       (line    6)
   51679 * '%' in constraint:                     Modifiers.          (line   45)
   51680 * '%include':                            Spec Files.         (line   26)
   51681 * '%include_noerr':                      Spec Files.         (line   30)
   51682 * '%rename':                             Spec Files.         (line   34)
   51683 * '&' in constraint:                     Modifiers.          (line   25)
   51684 * ''':                                   Incompatibilities.  (line  116)
   51685 * '*' in constraint:                     Modifiers.          (line   62)
   51686 * *__builtin_assume_aligned:             Other Builtins.     (line  332)
   51687 * '+' in constraint:                     Modifiers.          (line   12)
   51688 * '-lgcc', use with '-nodefaultlibs':    Link Options.       (line   85)
   51689 * '-lgcc', use with '-nostdlib':         Link Options.       (line   85)
   51690 * '-march' feature modifiers:            AArch64 Options.    (line   91)
   51691 * '-mcpu' feature modifiers:             AArch64 Options.    (line   91)
   51692 * '-nodefaultlibs' and unresolved references: Link Options.  (line   85)
   51693 * '-nostdlib' and unresolved references: Link Options.       (line   85)
   51694 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
   51695                                                              (line  739)
   51696 * '//':                                  C++ Comments.       (line    6)
   51697 * '0' in constraint:                     Simple Constraints. (line  125)
   51698 * '<' in constraint:                     Simple Constraints. (line   47)
   51699 * '=' in constraint:                     Modifiers.          (line    8)
   51700 * '>' in constraint:                     Simple Constraints. (line   59)
   51701 * '?' in constraint:                     Multi-Alternative.  (line   27)
   51702 * '?:' extensions:                       Conditionals.       (line    6)
   51703 * '?:' side effect:                      Conditionals.       (line   20)
   51704 * '_' in variables in macros:            Typeof.             (line   46)
   51705 * '_Accum' data type:                    Fixed-Point.        (line    6)
   51706 * '_Complex' keyword:                    Complex.            (line    6)
   51707 * '_Decimal128' data type:               Decimal Float.      (line    6)
   51708 * '_Decimal32' data type:                Decimal Float.      (line    6)
   51709 * '_Decimal64' data type:                Decimal Float.      (line    6)
   51710 * _Exit:                                 Other Builtins.     (line    6)
   51711 * _exit:                                 Other Builtins.     (line    6)
   51712 * '_Fract' data type:                    Fixed-Point.        (line    6)
   51713 * _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
   51714                                                              (line   44)
   51715 * '_Sat' data type:                      Fixed-Point.        (line    6)
   51716 * _xabort:                               X86 transactional memory intrinsics.
   51717                                                              (line   61)
   51718 * _xbegin:                               X86 transactional memory intrinsics.
   51719                                                              (line   19)
   51720 * _xend:                                 X86 transactional memory intrinsics.
   51721                                                              (line   52)
   51722 * _xtest:                                X86 transactional memory intrinsics.
   51723                                                              (line   57)
   51724 * __atomic_add_fetch:                    __atomic Builtins.  (line  153)
   51725 * __atomic_always_lock_free:             __atomic Builtins.  (line  230)
   51726 * __atomic_and_fetch:                    __atomic Builtins.  (line  157)
   51727 * __atomic_clear:                        __atomic Builtins.  (line  204)
   51728 * __atomic_compare_exchange:             __atomic Builtins.  (line  145)
   51729 * __atomic_compare_exchange_n:           __atomic Builtins.  (line  124)
   51730 * __atomic_exchange:                     __atomic Builtins.  (line  118)
   51731 * __atomic_exchange_n:                   __atomic Builtins.  (line  108)
   51732 * __atomic_fetch_add:                    __atomic Builtins.  (line  172)
   51733 * __atomic_fetch_and:                    __atomic Builtins.  (line  176)
   51734 * __atomic_fetch_nand:                   __atomic Builtins.  (line  182)
   51735 * __atomic_fetch_or:                     __atomic Builtins.  (line  180)
   51736 * __atomic_fetch_sub:                    __atomic Builtins.  (line  174)
   51737 * __atomic_fetch_xor:                    __atomic Builtins.  (line  178)
   51738 * __atomic_is_lock_free:                 __atomic Builtins.  (line  244)
   51739 * __atomic_load:                         __atomic Builtins.  (line   90)
   51740 * __atomic_load_n:                       __atomic Builtins.  (line   83)
   51741 * __atomic_nand_fetch:                   __atomic Builtins.  (line  163)
   51742 * __atomic_or_fetch:                     __atomic Builtins.  (line  161)
   51743 * __atomic_signal_fence:                 __atomic Builtins.  (line  223)
   51744 * __atomic_store:                        __atomic Builtins.  (line  103)
   51745 * __atomic_store_n:                      __atomic Builtins.  (line   95)
   51746 * __atomic_sub_fetch:                    __atomic Builtins.  (line  155)
   51747 * __atomic_test_and_set:                 __atomic Builtins.  (line  192)
   51748 * __atomic_thread_fence:                 __atomic Builtins.  (line  216)
   51749 * __atomic_xor_fetch:                    __atomic Builtins.  (line  159)
   51750 * __builtin_apply:                       Constructing Calls. (line   29)
   51751 * __builtin_apply_args:                  Constructing Calls. (line   19)
   51752 * __builtin_bswap16:                     Other Builtins.     (line  597)
   51753 * __builtin_bswap32:                     Other Builtins.     (line  601)
   51754 * __builtin_bswap64:                     Other Builtins.     (line  605)
   51755 * __builtin_choose_expr:                 Other Builtins.     (line  154)
   51756 * __builtin_clrsb:                       Other Builtins.     (line  526)
   51757 * __builtin_clrsbl:                      Other Builtins.     (line  549)
   51758 * __builtin_clrsbll:                     Other Builtins.     (line  572)
   51759 * __builtin_clz:                         Other Builtins.     (line  518)
   51760 * __builtin_clzl:                        Other Builtins.     (line  541)
   51761 * __builtin_clzll:                       Other Builtins.     (line  564)
   51762 * __builtin_complex:                     Other Builtins.     (line  194)
   51763 * __builtin_constant_p:                  Other Builtins.     (line  203)
   51764 * __builtin_cpu_init:                    X86 Built-in Functions.
   51765                                                              (line   62)
   51766 * __builtin_cpu_is:                      X86 Built-in Functions.
   51767                                                              (line   90)
   51768 * __builtin_cpu_supports:                X86 Built-in Functions.
   51769                                                              (line  159)
   51770 * __builtin_ctz:                         Other Builtins.     (line  522)
   51771 * __builtin_ctzl:                        Other Builtins.     (line  545)
   51772 * __builtin_ctzll:                       Other Builtins.     (line  568)
   51773 * __builtin_expect:                      Other Builtins.     (line  252)
   51774 * __builtin_extract_return_addr:         Return Address.     (line   35)
   51775 * __builtin_ffs:                         Other Builtins.     (line  514)
   51776 * __builtin_ffsl:                        Other Builtins.     (line  537)
   51777 * __builtin_ffsll:                       Other Builtins.     (line  560)
   51778 * __builtin_FILE:                        Other Builtins.     (line  360)
   51779 * __builtin_fpclassify:                  Other Builtins.     (line    6)
   51780 * __builtin_fpclassify <1>:              Other Builtins.     (line  429)
   51781 * __builtin_frame_address:               Return Address.     (line   47)
   51782 * __builtin_frob_return_address:         Return Address.     (line   44)
   51783 * __builtin_FUNCTION:                    Other Builtins.     (line  355)
   51784 * __builtin_huge_val:                    Other Builtins.     (line  417)
   51785 * __builtin_huge_valf:                   Other Builtins.     (line  422)
   51786 * __builtin_huge_vall:                   Other Builtins.     (line  425)
   51787 * __builtin_huge_valq:                   X86 Built-in Functions.
   51788                                                              (line   57)
   51789 * __builtin_inf:                         Other Builtins.     (line  440)
   51790 * __builtin_infd128:                     Other Builtins.     (line  450)
   51791 * __builtin_infd32:                      Other Builtins.     (line  444)
   51792 * __builtin_infd64:                      Other Builtins.     (line  447)
   51793 * __builtin_inff:                        Other Builtins.     (line  454)
   51794 * __builtin_infl:                        Other Builtins.     (line  459)
   51795 * __builtin_infq:                        X86 Built-in Functions.
   51796                                                              (line   54)
   51797 * __builtin_isfinite:                    Other Builtins.     (line    6)
   51798 * __builtin_isgreater:                   Other Builtins.     (line    6)
   51799 * __builtin_isgreaterequal:              Other Builtins.     (line    6)
   51800 * __builtin_isinf_sign:                  Other Builtins.     (line    6)
   51801 * __builtin_isinf_sign <1>:              Other Builtins.     (line  463)
   51802 * __builtin_isless:                      Other Builtins.     (line    6)
   51803 * __builtin_islessequal:                 Other Builtins.     (line    6)
   51804 * __builtin_islessgreater:               Other Builtins.     (line    6)
   51805 * __builtin_isnormal:                    Other Builtins.     (line    6)
   51806 * __builtin_isunordered:                 Other Builtins.     (line    6)
   51807 * __builtin_LINE:                        Other Builtins.     (line  350)
   51808 * __builtin_nan:                         Other Builtins.     (line  470)
   51809 * __builtin_nand128:                     Other Builtins.     (line  492)
   51810 * __builtin_nand32:                      Other Builtins.     (line  486)
   51811 * __builtin_nand64:                      Other Builtins.     (line  489)
   51812 * __builtin_nanf:                        Other Builtins.     (line  496)
   51813 * __builtin_nanl:                        Other Builtins.     (line  499)
   51814 * __builtin_nans:                        Other Builtins.     (line  503)
   51815 * __builtin_nansf:                       Other Builtins.     (line  507)
   51816 * __builtin_nansl:                       Other Builtins.     (line  510)
   51817 * __builtin_non_tx_store:                S/390 System z Built-in Functions.
   51818                                                              (line   98)
   51819 * __builtin_object_size:                 Object Size Checking.
   51820                                                              (line    6)
   51821 * __builtin_object_size <1>:             Object Size Checking.
   51822                                                              (line    9)
   51823 * __builtin_offsetof:                    Offsetof.           (line    6)
   51824 * __builtin_parity:                      Other Builtins.     (line  534)
   51825 * __builtin_parityl:                     Other Builtins.     (line  556)
   51826 * __builtin_parityll:                    Other Builtins.     (line  580)
   51827 * __builtin_popcount:                    Other Builtins.     (line  531)
   51828 * __builtin_popcountl:                   Other Builtins.     (line  552)
   51829 * __builtin_popcountll:                  Other Builtins.     (line  576)
   51830 * __builtin_powi:                        Other Builtins.     (line    6)
   51831 * __builtin_powi <1>:                    Other Builtins.     (line  584)
   51832 * __builtin_powif:                       Other Builtins.     (line    6)
   51833 * __builtin_powif <1>:                   Other Builtins.     (line  589)
   51834 * __builtin_powil:                       Other Builtins.     (line    6)
   51835 * __builtin_powil <1>:                   Other Builtins.     (line  593)
   51836 * __builtin_prefetch:                    Other Builtins.     (line  378)
   51837 * __builtin_return:                      Constructing Calls. (line   47)
   51838 * __builtin_return_address:              Return Address.     (line    9)
   51839 * __builtin_rx_brk:                      RX Built-in Functions.
   51840                                                              (line   10)
   51841 * __builtin_rx_clrpsw:                   RX Built-in Functions.
   51842                                                              (line   13)
   51843 * __builtin_rx_int:                      RX Built-in Functions.
   51844                                                              (line   17)
   51845 * __builtin_rx_machi:                    RX Built-in Functions.
   51846                                                              (line   21)
   51847 * __builtin_rx_maclo:                    RX Built-in Functions.
   51848                                                              (line   26)
   51849 * __builtin_rx_mulhi:                    RX Built-in Functions.
   51850                                                              (line   31)
   51851 * __builtin_rx_mullo:                    RX Built-in Functions.
   51852                                                              (line   36)
   51853 * __builtin_rx_mvfachi:                  RX Built-in Functions.
   51854                                                              (line   41)
   51855 * __builtin_rx_mvfacmi:                  RX Built-in Functions.
   51856                                                              (line   45)
   51857 * __builtin_rx_mvfc:                     RX Built-in Functions.
   51858                                                              (line   49)
   51859 * __builtin_rx_mvtachi:                  RX Built-in Functions.
   51860                                                              (line   53)
   51861 * __builtin_rx_mvtaclo:                  RX Built-in Functions.
   51862                                                              (line   57)
   51863 * __builtin_rx_mvtc:                     RX Built-in Functions.
   51864                                                              (line   61)
   51865 * __builtin_rx_mvtipl:                   RX Built-in Functions.
   51866                                                              (line   65)
   51867 * __builtin_rx_racw:                     RX Built-in Functions.
   51868                                                              (line   69)
   51869 * __builtin_rx_revw:                     RX Built-in Functions.
   51870                                                              (line   73)
   51871 * __builtin_rx_rmpa:                     RX Built-in Functions.
   51872                                                              (line   78)
   51873 * __builtin_rx_round:                    RX Built-in Functions.
   51874                                                              (line   82)
   51875 * __builtin_rx_sat:                      RX Built-in Functions.
   51876                                                              (line   87)
   51877 * __builtin_rx_setpsw:                   RX Built-in Functions.
   51878                                                              (line   91)
   51879 * __builtin_rx_wait:                     RX Built-in Functions.
   51880                                                              (line   95)
   51881 * __builtin_set_thread_pointer:          SH Built-in Functions.
   51882                                                              (line    9)
   51883 * __builtin_tabort:                      S/390 System z Built-in Functions.
   51884                                                              (line   82)
   51885 * __builtin_tbegin:                      S/390 System z Built-in Functions.
   51886                                                              (line    6)
   51887 * __builtin_tbeginc:                     S/390 System z Built-in Functions.
   51888                                                              (line   73)
   51889 * __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
   51890                                                              (line   54)
   51891 * __builtin_tbegin_retry:                S/390 System z Built-in Functions.
   51892                                                              (line   60)
   51893 * __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
   51894                                                              (line   67)
   51895 * __builtin_tend:                        S/390 System z Built-in Functions.
   51896                                                              (line   77)
   51897 * __builtin_thread_pointer:              SH Built-in Functions.
   51898                                                              (line   18)
   51899 * __builtin_trap:                        Other Builtins.     (line  276)
   51900 * __builtin_tx_assist:                   S/390 System z Built-in Functions.
   51901                                                              (line   87)
   51902 * __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
   51903                                                              (line   93)
   51904 * __builtin_types_compatible_p:          Other Builtins.     (line  109)
   51905 * __builtin_unreachable:                 Other Builtins.     (line  283)
   51906 * __builtin_va_arg_pack:                 Constructing Calls. (line   52)
   51907 * __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
   51908 * __builtin___clear_cache:               Other Builtins.     (line  365)
   51909 * __builtin___fprintf_chk:               Object Size Checking.
   51910                                                              (line    6)
   51911 * __builtin___memcpy_chk:                Object Size Checking.
   51912                                                              (line    6)
   51913 * __builtin___memmove_chk:               Object Size Checking.
   51914                                                              (line    6)
   51915 * __builtin___mempcpy_chk:               Object Size Checking.
   51916                                                              (line    6)
   51917 * __builtin___memset_chk:                Object Size Checking.
   51918                                                              (line    6)
   51919 * __builtin___printf_chk:                Object Size Checking.
   51920                                                              (line    6)
   51921 * __builtin___snprintf_chk:              Object Size Checking.
   51922                                                              (line    6)
   51923 * __builtin___sprintf_chk:               Object Size Checking.
   51924                                                              (line    6)
   51925 * __builtin___stpcpy_chk:                Object Size Checking.
   51926                                                              (line    6)
   51927 * __builtin___strcat_chk:                Object Size Checking.
   51928                                                              (line    6)
   51929 * __builtin___strcpy_chk:                Object Size Checking.
   51930                                                              (line    6)
   51931 * __builtin___strncat_chk:               Object Size Checking.
   51932                                                              (line    6)
   51933 * __builtin___strncpy_chk:               Object Size Checking.
   51934                                                              (line    6)
   51935 * __builtin___vfprintf_chk:              Object Size Checking.
   51936                                                              (line    6)
   51937 * __builtin___vprintf_chk:               Object Size Checking.
   51938                                                              (line    6)
   51939 * __builtin___vsnprintf_chk:             Object Size Checking.
   51940                                                              (line    6)
   51941 * __builtin___vsprintf_chk:              Object Size Checking.
   51942                                                              (line    6)
   51943 * '__complex__' keyword:                 Complex.            (line    6)
   51944 * '__declspec(dllexport)':               Function Attributes.
   51945                                                              (line  256)
   51946 * '__declspec(dllimport)':               Function Attributes.
   51947                                                              (line  289)
   51948 * '__ea' SPU Named Address Spaces:       Named Address Spaces.
   51949                                                              (line  155)
   51950 * __extension__:                         Alternate Keywords. (line   30)
   51951 * '__far' M32C Named Address Spaces:     Named Address Spaces.
   51952                                                              (line  138)
   51953 * '__far' RL78 Named Address Spaces:     Named Address Spaces.
   51954                                                              (line  147)
   51955 * '__flash' AVR Named Address Spaces:    Named Address Spaces.
   51956                                                              (line   31)
   51957 * '__flash1' AVR Named Address Spaces:   Named Address Spaces.
   51958                                                              (line   40)
   51959 * '__flash2' AVR Named Address Spaces:   Named Address Spaces.
   51960                                                              (line   40)
   51961 * '__flash3' AVR Named Address Spaces:   Named Address Spaces.
   51962                                                              (line   40)
   51963 * '__flash4' AVR Named Address Spaces:   Named Address Spaces.
   51964                                                              (line   40)
   51965 * '__flash5' AVR Named Address Spaces:   Named Address Spaces.
   51966                                                              (line   40)
   51967 * '__float128' data type:                Floating Types.     (line    6)
   51968 * '__float80' data type:                 Floating Types.     (line    6)
   51969 * '__fp16' data type:                    Half-Precision.     (line    6)
   51970 * '__FUNCTION__' identifier:             Function Names.     (line    6)
   51971 * '__func__' identifier:                 Function Names.     (line    6)
   51972 * '__imag__' keyword:                    Complex.            (line   27)
   51973 * '__int128' data types:                 __int128.           (line    6)
   51974 * '__memx' AVR Named Address Spaces:     Named Address Spaces.
   51975                                                              (line   46)
   51976 * '__PRETTY_FUNCTION__' identifier:      Function Names.     (line    6)
   51977 * '__real__' keyword:                    Complex.            (line   27)
   51978 * __STDC_HOSTED__:                       Standards.          (line   13)
   51979 * __sync_add_and_fetch:                  __sync Builtins.    (line   60)
   51980 * __sync_and_and_fetch:                  __sync Builtins.    (line   60)
   51981 * __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
   51982 * __sync_fetch_and_add:                  __sync Builtins.    (line   44)
   51983 * __sync_fetch_and_and:                  __sync Builtins.    (line   44)
   51984 * __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
   51985 * __sync_fetch_and_or:                   __sync Builtins.    (line   44)
   51986 * __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
   51987 * __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
   51988 * __sync_lock_release:                   __sync Builtins.    (line  101)
   51989 * __sync_lock_test_and_set:              __sync Builtins.    (line   83)
   51990 * __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
   51991 * __sync_or_and_fetch:                   __sync Builtins.    (line   60)
   51992 * __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
   51993 * __sync_synchronize:                    __sync Builtins.    (line   80)
   51994 * __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
   51995 * __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
   51996 * '__thread':                            Thread-Local.       (line    6)
   51997 * AArch64 Options:                       AArch64 Options.    (line    6)
   51998 * ABI:                                   Compatibility.      (line    6)
   51999 * 'abi_tag' attribute:                   C++ Attributes.     (line    9)
   52000 * abort:                                 Other Builtins.     (line    6)
   52001 * abs:                                   Other Builtins.     (line    6)
   52002 * accessing volatiles:                   Volatiles.          (line    6)
   52003 * accessing volatiles <1>:               C++ Volatiles.      (line    6)
   52004 * acos:                                  Other Builtins.     (line    6)
   52005 * acosf:                                 Other Builtins.     (line    6)
   52006 * acosh:                                 Other Builtins.     (line    6)
   52007 * acoshf:                                Other Builtins.     (line    6)
   52008 * acoshl:                                Other Builtins.     (line    6)
   52009 * acosl:                                 Other Builtins.     (line    6)
   52010 * Ada:                                   G++ and GCC.        (line    6)
   52011 * Ada <1>:                               G++ and GCC.        (line   30)
   52012 * additional floating types:             Floating Types.     (line    6)
   52013 * address constraints:                   Simple Constraints. (line  152)
   52014 * address of a label:                    Labels as Values.   (line    6)
   52015 * address_operand:                       Simple Constraints. (line  156)
   52016 * 'alias' attribute:                     Function Attributes.
   52017                                                              (line   37)
   52018 * 'aligned' attribute:                   Function Attributes.
   52019                                                              (line   50)
   52020 * 'aligned' attribute <1>:               Variable Attributes.
   52021                                                              (line   23)
   52022 * 'aligned' attribute <2>:               Type Attributes.    (line   31)
   52023 * alignment:                             Alignment.          (line    6)
   52024 * alloca:                                Other Builtins.     (line    6)
   52025 * 'alloca' vs variable-length arrays:    Variable Length.    (line   26)
   52026 * 'alloc_size' attribute:                Function Attributes.
   52027                                                              (line   70)
   52028 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
   52029                                                              (line  942)
   52030 * alternate keywords:                    Alternate Keywords. (line    6)
   52031 * 'always_inline' function attribute:    Function Attributes.
   52032                                                              (line   91)
   52033 * AMD x86-64 Options:                    i386 and x86-64 Options.
   52034                                                              (line    6)
   52035 * AMD1:                                  Standards.          (line   13)
   52036 * ANSI C:                                Standards.          (line   13)
   52037 * ANSI C standard:                       Standards.          (line   13)
   52038 * ANSI C89:                              Standards.          (line   13)
   52039 * ANSI support:                          C Dialect Options.  (line   10)
   52040 * ANSI X3.159-1989:                      Standards.          (line   13)
   52041 * apostrophes:                           Incompatibilities.  (line  116)
   52042 * application binary interface:          Compatibility.      (line    6)
   52043 * ARM options:                           ARM Options.        (line    6)
   52044 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
   52045                                                              (line    6)
   52046 * arrays of length zero:                 Zero Length.        (line    6)
   52047 * arrays of variable length:             Variable Length.    (line    6)
   52048 * arrays, non-lvalue:                    Subscripting.       (line    6)
   52049 * 'artificial' function attribute:       Function Attributes.
   52050                                                              (line  132)
   52051 * asin:                                  Other Builtins.     (line    6)
   52052 * asinf:                                 Other Builtins.     (line    6)
   52053 * asinh:                                 Other Builtins.     (line    6)
   52054 * asinhf:                                Other Builtins.     (line    6)
   52055 * asinhl:                                Other Builtins.     (line    6)
   52056 * asinl:                                 Other Builtins.     (line    6)
   52057 * 'asm' constraints:                     Constraints.        (line    6)
   52058 * 'asm' expressions:                     Extended Asm.       (line    6)
   52059 * assembler instructions:                Extended Asm.       (line    6)
   52060 * assembler names for identifiers:       Asm Labels.         (line    6)
   52061 * assembly code, invalid:                Bug Criteria.       (line   12)
   52062 * atan:                                  Other Builtins.     (line    6)
   52063 * atan2:                                 Other Builtins.     (line    6)
   52064 * atan2f:                                Other Builtins.     (line    6)
   52065 * atan2l:                                Other Builtins.     (line    6)
   52066 * atanf:                                 Other Builtins.     (line    6)
   52067 * atanh:                                 Other Builtins.     (line    6)
   52068 * atanhf:                                Other Builtins.     (line    6)
   52069 * atanhl:                                Other Builtins.     (line    6)
   52070 * atanl:                                 Other Builtins.     (line    6)
   52071 * attribute of types:                    Type Attributes.    (line    6)
   52072 * attribute of variables:                Variable Attributes.
   52073                                                              (line    6)
   52074 * attribute syntax:                      Attribute Syntax.   (line    6)
   52075 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
   52076 * automatic 'inline' for C++ member fns: Inline.             (line   71)
   52077 * AVR Options:                           AVR Options.        (line    6)
   52078 * Backwards Compatibility:               Backwards Compatibility.
   52079                                                              (line    6)
   52080 * base class members:                    Name lookup.        (line    6)
   52081 * bcmp:                                  Other Builtins.     (line    6)
   52082 * 'below100' attribute:                  Variable Attributes.
   52083                                                              (line  578)
   52084 * binary compatibility:                  Compatibility.      (line    6)
   52085 * Binary constants using the '0b' prefix: Binary constants.  (line    6)
   52086 * Blackfin Options:                      Blackfin Options.   (line    6)
   52087 * bound pointer to member function:      Bound member functions.
   52088                                                              (line    6)
   52089 * bounds checking:                       Optimize Options.   (line  404)
   52090 * bug criteria:                          Bug Criteria.       (line    6)
   52091 * bugs:                                  Bugs.               (line    6)
   52092 * bugs, known:                           Trouble.            (line    6)
   52093 * built-in functions:                    C Dialect Options.  (line  204)
   52094 * built-in functions <1>:                Other Builtins.     (line    6)
   52095 * bzero:                                 Other Builtins.     (line    6)
   52096 * C compilation options:                 Invoking GCC.       (line   17)
   52097 * C intermediate output, nonexistent:    G++ and GCC.        (line   35)
   52098 * C language extensions:                 C Extensions.       (line    6)
   52099 * C language, traditional:               C Dialect Options.  (line  309)
   52100 * C standard:                            Standards.          (line   13)
   52101 * C standards:                           Standards.          (line   13)
   52102 * c++:                                   Invoking G++.       (line   14)
   52103 * C++:                                   G++ and GCC.        (line   30)
   52104 * C++ comments:                          C++ Comments.       (line    6)
   52105 * C++ compilation options:               Invoking GCC.       (line   23)
   52106 * C++ interface and implementation headers: C++ Interface.   (line    6)
   52107 * C++ language extensions:               C++ Extensions.     (line    6)
   52108 * C++ member fns, automatically 'inline': Inline.            (line   71)
   52109 * C++ misunderstandings:                 C++ Misunderstandings.
   52110                                                              (line    6)
   52111 * C++ options, command-line:             C++ Dialect Options.
   52112                                                              (line    6)
   52113 * C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
   52114 * C++ source file suffixes:              Invoking G++.       (line    6)
   52115 * C++ static data, declaring and defining: Static Definitions.
   52116                                                              (line    6)
   52117 * C11:                                   Standards.          (line   13)
   52118 * C1X:                                   Standards.          (line   13)
   52119 * C6X Options:                           C6X Options.        (line    6)
   52120 * C89:                                   Standards.          (line   13)
   52121 * C90:                                   Standards.          (line   13)
   52122 * C94:                                   Standards.          (line   13)
   52123 * C95:                                   Standards.          (line   13)
   52124 * C99:                                   Standards.          (line   13)
   52125 * C9X:                                   Standards.          (line   13)
   52126 * cabs:                                  Other Builtins.     (line    6)
   52127 * cabsf:                                 Other Builtins.     (line    6)
   52128 * cabsl:                                 Other Builtins.     (line    6)
   52129 * cacos:                                 Other Builtins.     (line    6)
   52130 * cacosf:                                Other Builtins.     (line    6)
   52131 * cacosh:                                Other Builtins.     (line    6)
   52132 * cacoshf:                               Other Builtins.     (line    6)
   52133 * cacoshl:                               Other Builtins.     (line    6)
   52134 * cacosl:                                Other Builtins.     (line    6)
   52135 * 'callee_pop_aggregate_return' attribute: Function Attributes.
   52136                                                              (line  890)
   52137 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
   52138                                                              (line  525)
   52139 * calloc:                                Other Builtins.     (line    6)
   52140 * carg:                                  Other Builtins.     (line    6)
   52141 * cargf:                                 Other Builtins.     (line    6)
   52142 * cargl:                                 Other Builtins.     (line    6)
   52143 * case labels in initializers:           Designated Inits.   (line    6)
   52144 * case ranges:                           Case Ranges.        (line    6)
   52145 * casin:                                 Other Builtins.     (line    6)
   52146 * casinf:                                Other Builtins.     (line    6)
   52147 * casinh:                                Other Builtins.     (line    6)
   52148 * casinhf:                               Other Builtins.     (line    6)
   52149 * casinhl:                               Other Builtins.     (line    6)
   52150 * casinl:                                Other Builtins.     (line    6)
   52151 * cast to a union:                       Cast to Union.      (line    6)
   52152 * catan:                                 Other Builtins.     (line    6)
   52153 * catanf:                                Other Builtins.     (line    6)
   52154 * catanh:                                Other Builtins.     (line    6)
   52155 * catanhf:                               Other Builtins.     (line    6)
   52156 * catanhl:                               Other Builtins.     (line    6)
   52157 * catanl:                                Other Builtins.     (line    6)
   52158 * cbrt:                                  Other Builtins.     (line    6)
   52159 * cbrtf:                                 Other Builtins.     (line    6)
   52160 * cbrtl:                                 Other Builtins.     (line    6)
   52161 * ccos:                                  Other Builtins.     (line    6)
   52162 * ccosf:                                 Other Builtins.     (line    6)
   52163 * ccosh:                                 Other Builtins.     (line    6)
   52164 * ccoshf:                                Other Builtins.     (line    6)
   52165 * ccoshl:                                Other Builtins.     (line    6)
   52166 * ccosl:                                 Other Builtins.     (line    6)
   52167 * ceil:                                  Other Builtins.     (line    6)
   52168 * ceilf:                                 Other Builtins.     (line    6)
   52169 * ceill:                                 Other Builtins.     (line    6)
   52170 * cexp:                                  Other Builtins.     (line    6)
   52171 * cexpf:                                 Other Builtins.     (line    6)
   52172 * cexpl:                                 Other Builtins.     (line    6)
   52173 * character set, execution:              Preprocessor Options.
   52174                                                              (line  554)
   52175 * character set, input:                  Preprocessor Options.
   52176                                                              (line  567)
   52177 * character set, input normalization:    Warning Options.    (line 1272)
   52178 * character set, wide execution:         Preprocessor Options.
   52179                                                              (line  559)
   52180 * cimag:                                 Other Builtins.     (line    6)
   52181 * cimagf:                                Other Builtins.     (line    6)
   52182 * cimagl:                                Other Builtins.     (line    6)
   52183 * 'cleanup' attribute:                   Variable Attributes.
   52184                                                              (line   89)
   52185 * clog:                                  Other Builtins.     (line    6)
   52186 * clogf:                                 Other Builtins.     (line    6)
   52187 * clogl:                                 Other Builtins.     (line    6)
   52188 * COBOL:                                 G++ and GCC.        (line   23)
   52189 * code generation conventions:           Code Gen Options.   (line    6)
   52190 * code, mixed with declarations:         Mixed Declarations. (line    6)
   52191 * 'cold' function attribute:             Function Attributes.
   52192                                                              (line 1165)
   52193 * 'cold' label attribute:                Function Attributes.
   52194                                                              (line 1183)
   52195 * command options:                       Invoking GCC.       (line    6)
   52196 * comments, C++ style:                   C++ Comments.       (line    6)
   52197 * 'common' attribute:                    Variable Attributes.
   52198                                                              (line  104)
   52199 * comparison of signed and unsigned values, warning: Warning Options.
   52200                                                              (line 1144)
   52201 * compiler bugs, reporting:              Bug Reporting.      (line    6)
   52202 * compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
   52203 * compiler options, C++:                 C++ Dialect Options.
   52204                                                              (line    6)
   52205 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   52206                                                              (line    6)
   52207 * compiler version, specifying:          Target Options.     (line    6)
   52208 * COMPILER_PATH:                         Environment Variables.
   52209                                                              (line   91)
   52210 * complex conjugation:                   Complex.            (line   34)
   52211 * complex numbers:                       Complex.            (line    6)
   52212 * compound literals:                     Compound Literals.  (line    6)
   52213 * computed gotos:                        Labels as Values.   (line    6)
   52214 * conditional expressions, extensions:   Conditionals.       (line    6)
   52215 * conflicting types:                     Disappointments.    (line   21)
   52216 * conj:                                  Other Builtins.     (line    6)
   52217 * conjf:                                 Other Builtins.     (line    6)
   52218 * conjl:                                 Other Builtins.     (line    6)
   52219 * 'const' applied to function:           Function Attributes.
   52220                                                              (line    6)
   52221 * 'const' function attribute:            Function Attributes.
   52222                                                              (line  181)
   52223 * constants in constraints:              Simple Constraints. (line   68)
   52224 * constraint modifier characters:        Modifiers.          (line    6)
   52225 * constraint, matching:                  Simple Constraints. (line  137)
   52226 * constraints, 'asm':                    Constraints.        (line    6)
   52227 * constraints, machine specific:         Machine Constraints.
   52228                                                              (line    6)
   52229 * constructing calls:                    Constructing Calls. (line    6)
   52230 * constructor expressions:               Compound Literals.  (line    6)
   52231 * 'constructor' function attribute:      Function Attributes.
   52232                                                              (line  209)
   52233 * contributors:                          Contributors.       (line    6)
   52234 * copysign:                              Other Builtins.     (line    6)
   52235 * copysignf:                             Other Builtins.     (line    6)
   52236 * copysignl:                             Other Builtins.     (line    6)
   52237 * core dump:                             Bug Criteria.       (line    9)
   52238 * cos:                                   Other Builtins.     (line    6)
   52239 * cosf:                                  Other Builtins.     (line    6)
   52240 * cosh:                                  Other Builtins.     (line    6)
   52241 * coshf:                                 Other Builtins.     (line    6)
   52242 * coshl:                                 Other Builtins.     (line    6)
   52243 * cosl:                                  Other Builtins.     (line    6)
   52244 * CPATH:                                 Environment Variables.
   52245                                                              (line  127)
   52246 * CPLUS_INCLUDE_PATH:                    Environment Variables.
   52247                                                              (line  129)
   52248 * cpow:                                  Other Builtins.     (line    6)
   52249 * cpowf:                                 Other Builtins.     (line    6)
   52250 * cpowl:                                 Other Builtins.     (line    6)
   52251 * cproj:                                 Other Builtins.     (line    6)
   52252 * cprojf:                                Other Builtins.     (line    6)
   52253 * cprojl:                                Other Builtins.     (line    6)
   52254 * CR16 Options:                          CR16 Options.       (line    6)
   52255 * creal:                                 Other Builtins.     (line    6)
   52256 * crealf:                                Other Builtins.     (line    6)
   52257 * creall:                                Other Builtins.     (line    6)
   52258 * CRIS Options:                          CRIS Options.       (line    6)
   52259 * cross compiling:                       Target Options.     (line    6)
   52260 * csin:                                  Other Builtins.     (line    6)
   52261 * csinf:                                 Other Builtins.     (line    6)
   52262 * csinh:                                 Other Builtins.     (line    6)
   52263 * csinhf:                                Other Builtins.     (line    6)
   52264 * csinhl:                                Other Builtins.     (line    6)
   52265 * csinl:                                 Other Builtins.     (line    6)
   52266 * csqrt:                                 Other Builtins.     (line    6)
   52267 * csqrtf:                                Other Builtins.     (line    6)
   52268 * csqrtl:                                Other Builtins.     (line    6)
   52269 * ctan:                                  Other Builtins.     (line    6)
   52270 * ctanf:                                 Other Builtins.     (line    6)
   52271 * ctanh:                                 Other Builtins.     (line    6)
   52272 * ctanhf:                                Other Builtins.     (line    6)
   52273 * ctanhl:                                Other Builtins.     (line    6)
   52274 * ctanl:                                 Other Builtins.     (line    6)
   52275 * C_INCLUDE_PATH:                        Environment Variables.
   52276                                                              (line  128)
   52277 * Darwin options:                        Darwin Options.     (line    6)
   52278 * dcgettext:                             Other Builtins.     (line    6)
   52279 * 'dd' integer suffix:                   Decimal Float.      (line    6)
   52280 * 'DD' integer suffix:                   Decimal Float.      (line    6)
   52281 * deallocating variable length arrays:   Variable Length.    (line   22)
   52282 * debugging information options:         Debugging Options.  (line    6)
   52283 * decimal floating types:                Decimal Float.      (line    6)
   52284 * declaration scope:                     Incompatibilities.  (line   80)
   52285 * declarations inside expressions:       Statement Exprs.    (line    6)
   52286 * declarations, mixed with code:         Mixed Declarations. (line    6)
   52287 * declaring attributes of functions:     Function Attributes.
   52288                                                              (line    6)
   52289 * declaring static data in C++:          Static Definitions. (line    6)
   52290 * defining static data in C++:           Static Definitions. (line    6)
   52291 * dependencies for make as output:       Environment Variables.
   52292                                                              (line  155)
   52293 * dependencies for make as output <1>:   Environment Variables.
   52294                                                              (line  171)
   52295 * dependencies, 'make':                  Preprocessor Options.
   52296                                                              (line  185)
   52297 * DEPENDENCIES_OUTPUT:                   Environment Variables.
   52298                                                              (line  154)
   52299 * dependent name lookup:                 Name lookup.        (line    6)
   52300 * 'deprecated' attribute:                Variable Attributes.
   52301                                                              (line  113)
   52302 * 'deprecated' attribute.:               Function Attributes.
   52303                                                              (line  231)
   52304 * designated initializers:               Designated Inits.   (line    6)
   52305 * designator lists:                      Designated Inits.   (line   93)
   52306 * designators:                           Designated Inits.   (line   61)
   52307 * 'destructor' function attribute:       Function Attributes.
   52308                                                              (line  209)
   52309 * 'df' integer suffix:                   Decimal Float.      (line    6)
   52310 * 'DF' integer suffix:                   Decimal Float.      (line    6)
   52311 * dgettext:                              Other Builtins.     (line    6)
   52312 * diagnostic messages:                   Language Independent Options.
   52313                                                              (line    6)
   52314 * dialect options:                       C Dialect Options.  (line    6)
   52315 * digits in constraint:                  Simple Constraints. (line  125)
   52316 * directory options:                     Directory Options.  (line    6)
   52317 * 'disinterrupt' attribute:              Function Attributes.
   52318                                                              (line  251)
   52319 * 'dl' integer suffix:                   Decimal Float.      (line    6)
   52320 * 'DL' integer suffix:                   Decimal Float.      (line    6)
   52321 * dollar signs in identifier names:      Dollar Signs.       (line    6)
   52322 * double-word arithmetic:                Long Long.          (line    6)
   52323 * downward funargs:                      Nested Functions.   (line    6)
   52324 * drem:                                  Other Builtins.     (line    6)
   52325 * dremf:                                 Other Builtins.     (line    6)
   52326 * dreml:                                 Other Builtins.     (line    6)
   52327 * 'E' in constraint:                     Simple Constraints. (line   87)
   52328 * earlyclobber operand:                  Modifiers.          (line   25)
   52329 * eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes.
   52330                                                              (line  341)
   52331 * 'EIND':                                AVR Options.        (line  222)
   52332 * empty structures:                      Empty Structures.   (line    6)
   52333 * environment variables:                 Environment Variables.
   52334                                                              (line    6)
   52335 * erf:                                   Other Builtins.     (line    6)
   52336 * erfc:                                  Other Builtins.     (line    6)
   52337 * erfcf:                                 Other Builtins.     (line    6)
   52338 * erfcl:                                 Other Builtins.     (line    6)
   52339 * erff:                                  Other Builtins.     (line    6)
   52340 * erfl:                                  Other Builtins.     (line    6)
   52341 * 'error' function attribute:            Function Attributes.
   52342                                                              (line  151)
   52343 * error messages:                        Warnings and Errors.
   52344                                                              (line    6)
   52345 * escaped newlines:                      Escaped Newlines.   (line    6)
   52346 * exception handler functions on the Blackfin processor: Function Attributes.
   52347                                                              (line  351)
   52348 * exclamation point:                     Multi-Alternative.  (line   33)
   52349 * exit:                                  Other Builtins.     (line    6)
   52350 * exp:                                   Other Builtins.     (line    6)
   52351 * exp10:                                 Other Builtins.     (line    6)
   52352 * exp10f:                                Other Builtins.     (line    6)
   52353 * exp10l:                                Other Builtins.     (line    6)
   52354 * exp2:                                  Other Builtins.     (line    6)
   52355 * exp2f:                                 Other Builtins.     (line    6)
   52356 * exp2l:                                 Other Builtins.     (line    6)
   52357 * expf:                                  Other Builtins.     (line    6)
   52358 * expl:                                  Other Builtins.     (line    6)
   52359 * explicit register variables:           Explicit Reg Vars.  (line    6)
   52360 * expm1:                                 Other Builtins.     (line    6)
   52361 * expm1f:                                Other Builtins.     (line    6)
   52362 * expm1l:                                Other Builtins.     (line    6)
   52363 * expressions containing statements:     Statement Exprs.    (line    6)
   52364 * expressions, constructor:              Compound Literals.  (line    6)
   52365 * extended 'asm':                        Extended Asm.       (line    6)
   52366 * extensible constraints:                Simple Constraints. (line  161)
   52367 * extensions, '?:':                      Conditionals.       (line    6)
   52368 * extensions, C language:                C Extensions.       (line    6)
   52369 * extensions, C++ language:              C++ Extensions.     (line    6)
   52370 * external declaration scope:            Incompatibilities.  (line   80)
   52371 * 'externally_visible' attribute.:       Function Attributes.
   52372                                                              (line  357)
   52373 * 'F' in constraint:                     Simple Constraints. (line   92)
   52374 * fabs:                                  Other Builtins.     (line    6)
   52375 * fabsf:                                 Other Builtins.     (line    6)
   52376 * fabsl:                                 Other Builtins.     (line    6)
   52377 * fatal signal:                          Bug Criteria.       (line    9)
   52378 * fdim:                                  Other Builtins.     (line    6)
   52379 * fdimf:                                 Other Builtins.     (line    6)
   52380 * fdiml:                                 Other Builtins.     (line    6)
   52381 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   52382                                                              (line    6)
   52383 * ffs:                                   Other Builtins.     (line    6)
   52384 * file name suffix:                      Overall Options.    (line   14)
   52385 * file names:                            Link Options.       (line   10)
   52386 * fixed-point types:                     Fixed-Point.        (line    6)
   52387 * 'flatten' function attribute:          Function Attributes.
   52388                                                              (line  144)
   52389 * flexible array members:                Zero Length.        (line    6)
   52390 * 'float' as function value type:        Incompatibilities.  (line  141)
   52391 * floating point precision:              Disappointments.    (line   68)
   52392 * floating-point precision:              Optimize Options.   (line 1868)
   52393 * floor:                                 Other Builtins.     (line    6)
   52394 * floorf:                                Other Builtins.     (line    6)
   52395 * floorl:                                Other Builtins.     (line    6)
   52396 * fma:                                   Other Builtins.     (line    6)
   52397 * fmaf:                                  Other Builtins.     (line    6)
   52398 * fmal:                                  Other Builtins.     (line    6)
   52399 * fmax:                                  Other Builtins.     (line    6)
   52400 * fmaxf:                                 Other Builtins.     (line    6)
   52401 * fmaxl:                                 Other Builtins.     (line    6)
   52402 * fmin:                                  Other Builtins.     (line    6)
   52403 * fminf:                                 Other Builtins.     (line    6)
   52404 * fminl:                                 Other Builtins.     (line    6)
   52405 * fmod:                                  Other Builtins.     (line    6)
   52406 * fmodf:                                 Other Builtins.     (line    6)
   52407 * fmodl:                                 Other Builtins.     (line    6)
   52408 * 'force_align_arg_pointer' attribute:   Function Attributes.
   52409                                                              (line 1225)
   52410 * 'format' function attribute:           Function Attributes.
   52411                                                              (line  414)
   52412 * 'format_arg' function attribute:       Function Attributes.
   52413                                                              (line  479)
   52414 * Fortran:                               G++ and GCC.        (line    6)
   52415 * 'forwarder_section' attribute:         Function Attributes.
   52416                                                              (line  680)
   52417 * forwarding calls:                      Constructing Calls. (line    6)
   52418 * fprintf:                               Other Builtins.     (line    6)
   52419 * fprintf_unlocked:                      Other Builtins.     (line    6)
   52420 * fputs:                                 Other Builtins.     (line    6)
   52421 * fputs_unlocked:                        Other Builtins.     (line    6)
   52422 * FR30 Options:                          FR30 Options.       (line    6)
   52423 * freestanding environment:              Standards.          (line   13)
   52424 * freestanding implementation:           Standards.          (line   13)
   52425 * frexp:                                 Other Builtins.     (line    6)
   52426 * frexpf:                                Other Builtins.     (line    6)
   52427 * frexpl:                                Other Builtins.     (line    6)
   52428 * FRV Options:                           FRV Options.        (line    6)
   52429 * fscanf:                                Other Builtins.     (line    6)
   52430 * 'fscanf', and constant strings:        Incompatibilities.  (line   17)
   52431 * function addressability on the M32R/D: Function Attributes.
   52432                                                              (line  848)
   52433 * function attributes:                   Function Attributes.
   52434                                                              (line    6)
   52435 * function pointers, arithmetic:         Pointer Arith.      (line    6)
   52436 * function prototype declarations:       Function Prototypes.
   52437                                                              (line    6)
   52438 * function versions:                     Function Multiversioning.
   52439                                                              (line    6)
   52440 * function without a prologue/epilogue code: Function Attributes.
   52441                                                              (line  920)
   52442 * function, size of pointer to:          Pointer Arith.      (line    6)
   52443 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
   52444                                                              (line  802)
   52445 * functions in arbitrary sections:       Function Attributes.
   52446                                                              (line    6)
   52447 * functions that are dynamically resolved: Function Attributes.
   52448                                                              (line    6)
   52449 * functions that are passed arguments in registers on the 386: Function Attributes.
   52450                                                              (line    6)
   52451 * functions that are passed arguments in registers on the 386 <1>: Function Attributes.
   52452                                                              (line 1201)
   52453 * functions that behave like malloc:     Function Attributes.
   52454                                                              (line    6)
   52455 * functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
   52456                                                              (line  932)
   52457 * functions that do not pop the argument stack on the 386: Function Attributes.
   52458                                                              (line    6)
   52459 * functions that do pop the argument stack on the 386: Function Attributes.
   52460                                                              (line  175)
   52461 * functions that handle memory bank switching: Function Attributes.
   52462                                                              (line  370)
   52463 * functions that have different compilation options on the 386: Function Attributes.
   52464                                                              (line    6)
   52465 * functions that have different optimization options: Function Attributes.
   52466                                                              (line    6)
   52467 * functions that have no side effects:   Function Attributes.
   52468                                                              (line    6)
   52469 * functions that never return:           Function Attributes.
   52470                                                              (line    6)
   52471 * functions that pop the argument stack on the 386: Function Attributes.
   52472                                                              (line    6)
   52473 * functions that pop the argument stack on the 386 <1>: Function Attributes.
   52474                                                              (line  396)
   52475 * functions that pop the argument stack on the 386 <2>: Function Attributes.
   52476                                                              (line  404)
   52477 * functions that pop the argument stack on the 386 <3>: Function Attributes.
   52478                                                              (line 1348)
   52479 * functions that return more than once:  Function Attributes.
   52480                                                              (line    6)
   52481 * functions with non-null pointer arguments: Function Attributes.
   52482                                                              (line    6)
   52483 * functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes.
   52484                                                              (line    6)
   52485 * 'G' in constraint:                     Simple Constraints. (line   96)
   52486 * 'g' in constraint:                     Simple Constraints. (line  118)
   52487 * g++:                                   Invoking G++.       (line   14)
   52488 * G++:                                   G++ and GCC.        (line   30)
   52489 * gamma:                                 Other Builtins.     (line    6)
   52490 * gammaf:                                Other Builtins.     (line    6)
   52491 * gammaf_r:                              Other Builtins.     (line    6)
   52492 * gammal:                                Other Builtins.     (line    6)
   52493 * gammal_r:                              Other Builtins.     (line    6)
   52494 * gamma_r:                               Other Builtins.     (line    6)
   52495 * GCC:                                   G++ and GCC.        (line    6)
   52496 * GCC command options:                   Invoking GCC.       (line    6)
   52497 * GCC_COMPARE_DEBUG:                     Environment Variables.
   52498                                                              (line   52)
   52499 * GCC_EXEC_PREFIX:                       Environment Variables.
   52500                                                              (line   57)
   52501 * 'gcc_struct':                          Type Attributes.    (line  323)
   52502 * 'gcc_struct' attribute:                Variable Attributes.
   52503                                                              (line  438)
   52504 * 'gcov':                                Debugging Options.  (line  408)
   52505 * gettext:                               Other Builtins.     (line    6)
   52506 * global offset table:                   Code Gen Options.   (line  266)
   52507 * global register after 'longjmp':       Global Reg Vars.    (line   65)
   52508 * global register variables:             Global Reg Vars.    (line    6)
   52509 * GNAT:                                  G++ and GCC.        (line   30)
   52510 * GNU C Compiler:                        G++ and GCC.        (line    6)
   52511 * GNU Compiler Collection:               G++ and GCC.        (line    6)
   52512 * 'gnu_inline' function attribute:       Function Attributes.
   52513                                                              (line   96)
   52514 * Go:                                    G++ and GCC.        (line    6)
   52515 * goto with computed label:              Labels as Values.   (line    6)
   52516 * 'gprof':                               Debugging Options.  (line  333)
   52517 * grouping options:                      Invoking GCC.       (line   26)
   52518 * 'H' in constraint:                     Simple Constraints. (line   96)
   52519 * half-precision floating point:         Half-Precision.     (line    6)
   52520 * hardware models and configurations, specifying: Submodel Options.
   52521                                                              (line    6)
   52522 * hex floats:                            Hex Floats.         (line    6)
   52523 * 'hk' fixed-suffix:                     Fixed-Point.        (line    6)
   52524 * 'HK' fixed-suffix:                     Fixed-Point.        (line    6)
   52525 * hosted environment:                    Standards.          (line   13)
   52526 * hosted environment <1>:                C Dialect Options.  (line  238)
   52527 * hosted environment <2>:                C Dialect Options.  (line  246)
   52528 * hosted implementation:                 Standards.          (line   13)
   52529 * 'hot' function attribute:              Function Attributes.
   52530                                                              (line 1143)
   52531 * 'hot' label attribute:                 Function Attributes.
   52532                                                              (line 1155)
   52533 * 'hotpatch' attribute:                  Function Attributes.
   52534                                                              (line  911)
   52535 * HPPA Options:                          HPPA Options.       (line    6)
   52536 * 'hr' fixed-suffix:                     Fixed-Point.        (line    6)
   52537 * 'HR' fixed-suffix:                     Fixed-Point.        (line    6)
   52538 * hypot:                                 Other Builtins.     (line    6)
   52539 * hypotf:                                Other Builtins.     (line    6)
   52540 * hypotl:                                Other Builtins.     (line    6)
   52541 * 'i' in constraint:                     Simple Constraints. (line   68)
   52542 * 'I' in constraint:                     Simple Constraints. (line   79)
   52543 * i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
   52544                                                              (line    6)
   52545 * i386 Options:                          i386 and x86-64 Options.
   52546                                                              (line    6)
   52547 * IA-64 Options:                         IA-64 Options.      (line    6)
   52548 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
   52549                                                              (line    6)
   52550 * identifier names, dollar signs in:     Dollar Signs.       (line    6)
   52551 * identifiers, names in assembler code:  Asm Labels.         (line    6)
   52552 * 'ifunc' attribute:                     Function Attributes.
   52553                                                              (line  586)
   52554 * ilogb:                                 Other Builtins.     (line    6)
   52555 * ilogbf:                                Other Builtins.     (line    6)
   52556 * ilogbl:                                Other Builtins.     (line    6)
   52557 * imaxabs:                               Other Builtins.     (line    6)
   52558 * implementation-defined behavior, C language: C Implementation.
   52559                                                              (line    6)
   52560 * implementation-defined behavior, C++ language: C++ Implementation.
   52561                                                              (line    6)
   52562 * implied '#pragma implementation':      C++ Interface.      (line   46)
   52563 * incompatibilities of GCC:              Incompatibilities.  (line    6)
   52564 * increment operators:                   Bug Criteria.       (line   17)
   52565 * index:                                 Other Builtins.     (line    6)
   52566 * indirect calls on ARM:                 Function Attributes.
   52567                                                              (line  792)
   52568 * indirect calls on MIPS:                Function Attributes.
   52569                                                              (line  814)
   52570 * initializations in expressions:        Compound Literals.  (line    6)
   52571 * initializers with labeled elements:    Designated Inits.   (line    6)
   52572 * initializers, non-constant:            Initializers.       (line    6)
   52573 * 'init_priority' attribute:             C++ Attributes.     (line   30)
   52574 * 'inline' automatic for C++ member fns: Inline.             (line   71)
   52575 * inline functions:                      Inline.             (line    6)
   52576 * inline functions, omission of:         Inline.             (line   51)
   52577 * inlining and C++ pragmas:              C++ Interface.      (line   66)
   52578 * installation trouble:                  Trouble.            (line    6)
   52579 * integrating function code:             Inline.             (line    6)
   52580 * Intel 386 Options:                     i386 and x86-64 Options.
   52581                                                              (line    6)
   52582 * interface and implementation headers, C++: C++ Interface.  (line    6)
   52583 * intermediate C version, nonexistent:   G++ and GCC.        (line   35)
   52584 * interrupt handler functions:           Function Attributes.
   52585                                                              (line  139)
   52586 * interrupt handler functions <1>:       Function Attributes.
   52587                                                              (line  390)
   52588 * interrupt handler functions <2>:       Function Attributes.
   52589                                                              (line  626)
   52590 * interrupt handler functions on the AVR processors: Function Attributes.
   52591                                                              (line 1320)
   52592 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
   52593                                                              (line  730)
   52594 * interrupt service routines on ARM:     Function Attributes.
   52595                                                              (line  744)
   52596 * interrupt thread functions on fido:    Function Attributes.
   52597                                                              (line  736)
   52598 * introduction:                          Top.                (line    6)
   52599 * invalid assembly code:                 Bug Criteria.       (line   12)
   52600 * invalid input:                         Bug Criteria.       (line   42)
   52601 * invoking 'g++':                        Invoking G++.       (line   22)
   52602 * isalnum:                               Other Builtins.     (line    6)
   52603 * isalpha:                               Other Builtins.     (line    6)
   52604 * isascii:                               Other Builtins.     (line    6)
   52605 * isblank:                               Other Builtins.     (line    6)
   52606 * iscntrl:                               Other Builtins.     (line    6)
   52607 * isdigit:                               Other Builtins.     (line    6)
   52608 * isgraph:                               Other Builtins.     (line    6)
   52609 * islower:                               Other Builtins.     (line    6)
   52610 * ISO 9899:                              Standards.          (line   13)
   52611 * ISO C:                                 Standards.          (line   13)
   52612 * ISO C standard:                        Standards.          (line   13)
   52613 * ISO C11:                               Standards.          (line   13)
   52614 * ISO C1X:                               Standards.          (line   13)
   52615 * ISO C90:                               Standards.          (line   13)
   52616 * ISO C94:                               Standards.          (line   13)
   52617 * ISO C95:                               Standards.          (line   13)
   52618 * ISO C99:                               Standards.          (line   13)
   52619 * ISO C9X:                               Standards.          (line   13)
   52620 * ISO support:                           C Dialect Options.  (line   10)
   52621 * ISO/IEC 9899:                          Standards.          (line   13)
   52622 * isprint:                               Other Builtins.     (line    6)
   52623 * ispunct:                               Other Builtins.     (line    6)
   52624 * isspace:                               Other Builtins.     (line    6)
   52625 * isupper:                               Other Builtins.     (line    6)
   52626 * iswalnum:                              Other Builtins.     (line    6)
   52627 * iswalpha:                              Other Builtins.     (line    6)
   52628 * iswblank:                              Other Builtins.     (line    6)
   52629 * iswcntrl:                              Other Builtins.     (line    6)
   52630 * iswdigit:                              Other Builtins.     (line    6)
   52631 * iswgraph:                              Other Builtins.     (line    6)
   52632 * iswlower:                              Other Builtins.     (line    6)
   52633 * iswprint:                              Other Builtins.     (line    6)
   52634 * iswpunct:                              Other Builtins.     (line    6)
   52635 * iswspace:                              Other Builtins.     (line    6)
   52636 * iswupper:                              Other Builtins.     (line    6)
   52637 * iswxdigit:                             Other Builtins.     (line    6)
   52638 * isxdigit:                              Other Builtins.     (line    6)
   52639 * j0:                                    Other Builtins.     (line    6)
   52640 * j0f:                                   Other Builtins.     (line    6)
   52641 * j0l:                                   Other Builtins.     (line    6)
   52642 * j1:                                    Other Builtins.     (line    6)
   52643 * j1f:                                   Other Builtins.     (line    6)
   52644 * j1l:                                   Other Builtins.     (line    6)
   52645 * Java:                                  G++ and GCC.        (line    6)
   52646 * 'java_interface' attribute:            C++ Attributes.     (line   51)
   52647 * jn:                                    Other Builtins.     (line    6)
   52648 * jnf:                                   Other Builtins.     (line    6)
   52649 * jnl:                                   Other Builtins.     (line    6)
   52650 * 'k' fixed-suffix:                      Fixed-Point.        (line    6)
   52651 * 'K' fixed-suffix:                      Fixed-Point.        (line    6)
   52652 * 'keep_interrupts_masked' attribute:    Function Attributes.
   52653                                                              (line  702)
   52654 * keywords, alternate:                   Alternate Keywords. (line    6)
   52655 * known causes of trouble:               Trouble.            (line    6)
   52656 * 'l1_data' variable attribute:          Variable Attributes.
   52657                                                              (line  352)
   52658 * 'l1_data_A' variable attribute:        Variable Attributes.
   52659                                                              (line  352)
   52660 * 'l1_data_B' variable attribute:        Variable Attributes.
   52661                                                              (line  352)
   52662 * 'l1_text' function attribute:          Function Attributes.
   52663                                                              (line  753)
   52664 * 'l2' function attribute:               Function Attributes.
   52665                                                              (line  759)
   52666 * 'l2' variable attribute:               Variable Attributes.
   52667                                                              (line  360)
   52668 * labeled elements in initializers:      Designated Inits.   (line    6)
   52669 * labels as values:                      Labels as Values.   (line    6)
   52670 * labs:                                  Other Builtins.     (line    6)
   52671 * LANG:                                  Environment Variables.
   52672                                                              (line   21)
   52673 * LANG <1>:                              Environment Variables.
   52674                                                              (line  106)
   52675 * language dialect options:              C Dialect Options.  (line    6)
   52676 * LC_ALL:                                Environment Variables.
   52677                                                              (line   21)
   52678 * LC_CTYPE:                              Environment Variables.
   52679                                                              (line   21)
   52680 * LC_MESSAGES:                           Environment Variables.
   52681                                                              (line   21)
   52682 * ldexp:                                 Other Builtins.     (line    6)
   52683 * ldexpf:                                Other Builtins.     (line    6)
   52684 * ldexpl:                                Other Builtins.     (line    6)
   52685 * 'leaf' function attribute:             Function Attributes.
   52686                                                              (line  765)
   52687 * length-zero arrays:                    Zero Length.        (line    6)
   52688 * lgamma:                                Other Builtins.     (line    6)
   52689 * lgammaf:                               Other Builtins.     (line    6)
   52690 * lgammaf_r:                             Other Builtins.     (line    6)
   52691 * lgammal:                               Other Builtins.     (line    6)
   52692 * lgammal_r:                             Other Builtins.     (line    6)
   52693 * lgamma_r:                              Other Builtins.     (line    6)
   52694 * Libraries:                             Link Options.       (line   24)
   52695 * LIBRARY_PATH:                          Environment Variables.
   52696                                                              (line   97)
   52697 * link options:                          Link Options.       (line    6)
   52698 * linker script:                         Link Options.       (line  196)
   52699 * 'lk' fixed-suffix:                     Fixed-Point.        (line    6)
   52700 * 'LK' fixed-suffix:                     Fixed-Point.        (line    6)
   52701 * 'LL' integer suffix:                   Long Long.          (line    6)
   52702 * llabs:                                 Other Builtins.     (line    6)
   52703 * 'llk' fixed-suffix:                    Fixed-Point.        (line    6)
   52704 * 'LLK' fixed-suffix:                    Fixed-Point.        (line    6)
   52705 * 'llr' fixed-suffix:                    Fixed-Point.        (line    6)
   52706 * 'LLR' fixed-suffix:                    Fixed-Point.        (line    6)
   52707 * llrint:                                Other Builtins.     (line    6)
   52708 * llrintf:                               Other Builtins.     (line    6)
   52709 * llrintl:                               Other Builtins.     (line    6)
   52710 * llround:                               Other Builtins.     (line    6)
   52711 * llroundf:                              Other Builtins.     (line    6)
   52712 * llroundl:                              Other Builtins.     (line    6)
   52713 * LM32 options:                          LM32 Options.       (line    6)
   52714 * load address instruction:              Simple Constraints. (line  152)
   52715 * local labels:                          Local Labels.       (line    6)
   52716 * local variables in macros:             Typeof.             (line   46)
   52717 * local variables, specifying registers: Local Reg Vars.     (line    6)
   52718 * locale:                                Environment Variables.
   52719                                                              (line   21)
   52720 * locale definition:                     Environment Variables.
   52721                                                              (line  106)
   52722 * log:                                   Other Builtins.     (line    6)
   52723 * log10:                                 Other Builtins.     (line    6)
   52724 * log10f:                                Other Builtins.     (line    6)
   52725 * log10l:                                Other Builtins.     (line    6)
   52726 * log1p:                                 Other Builtins.     (line    6)
   52727 * log1pf:                                Other Builtins.     (line    6)
   52728 * log1pl:                                Other Builtins.     (line    6)
   52729 * log2:                                  Other Builtins.     (line    6)
   52730 * log2f:                                 Other Builtins.     (line    6)
   52731 * log2l:                                 Other Builtins.     (line    6)
   52732 * logb:                                  Other Builtins.     (line    6)
   52733 * logbf:                                 Other Builtins.     (line    6)
   52734 * logbl:                                 Other Builtins.     (line    6)
   52735 * logf:                                  Other Builtins.     (line    6)
   52736 * logl:                                  Other Builtins.     (line    6)
   52737 * 'long long' data types:                Long Long.          (line    6)
   52738 * longjmp:                               Global Reg Vars.    (line   65)
   52739 * 'longjmp' incompatibilities:           Incompatibilities.  (line   39)
   52740 * 'longjmp' warnings:                    Warning Options.    (line  667)
   52741 * 'lr' fixed-suffix:                     Fixed-Point.        (line    6)
   52742 * 'LR' fixed-suffix:                     Fixed-Point.        (line    6)
   52743 * lrint:                                 Other Builtins.     (line    6)
   52744 * lrintf:                                Other Builtins.     (line    6)
   52745 * lrintl:                                Other Builtins.     (line    6)
   52746 * lround:                                Other Builtins.     (line    6)
   52747 * lroundf:                               Other Builtins.     (line    6)
   52748 * lroundl:                               Other Builtins.     (line    6)
   52749 * 'm' in constraint:                     Simple Constraints. (line   17)
   52750 * M32C options:                          M32C Options.       (line    6)
   52751 * M32R/D options:                        M32R/D Options.     (line    6)
   52752 * M680x0 options:                        M680x0 Options.     (line    6)
   52753 * machine dependent options:             Submodel Options.   (line    6)
   52754 * machine specific constraints:          Machine Constraints.
   52755                                                              (line    6)
   52756 * macro with variable arguments:         Variadic Macros.    (line    6)
   52757 * macros containing 'asm':               Extended Asm.       (line  237)
   52758 * macros, inline alternative:            Inline.             (line    6)
   52759 * macros, local labels:                  Local Labels.       (line    6)
   52760 * macros, local variables in:            Typeof.             (line   46)
   52761 * macros, statements in expressions:     Statement Exprs.    (line    6)
   52762 * macros, types of arguments:            Typeof.             (line    6)
   52763 * 'make':                                Preprocessor Options.
   52764                                                              (line  185)
   52765 * malloc:                                Other Builtins.     (line    6)
   52766 * 'malloc' attribute:                    Function Attributes.
   52767                                                              (line  824)
   52768 * matching constraint:                   Simple Constraints. (line  137)
   52769 * MCore options:                         MCore Options.      (line    6)
   52770 * member fns, automatically 'inline':    Inline.             (line   71)
   52771 * memchr:                                Other Builtins.     (line    6)
   52772 * memcmp:                                Other Builtins.     (line    6)
   52773 * memcpy:                                Other Builtins.     (line    6)
   52774 * memory references in constraints:      Simple Constraints. (line   17)
   52775 * mempcpy:                               Other Builtins.     (line    6)
   52776 * memset:                                Other Builtins.     (line    6)
   52777 * MeP options:                           MeP Options.        (line    6)
   52778 * Mercury:                               G++ and GCC.        (line   23)
   52779 * message formatting:                    Language Independent Options.
   52780                                                              (line    6)
   52781 * messages, warning:                     Warning Options.    (line    6)
   52782 * messages, warning and error:           Warnings and Errors.
   52783                                                              (line    6)
   52784 * MicroBlaze Options:                    MicroBlaze Options. (line    6)
   52785 * middle-operands, omitted:              Conditionals.       (line    6)
   52786 * MIPS options:                          MIPS Options.       (line    6)
   52787 * 'mips16' attribute:                    Function Attributes.
   52788                                                              (line  833)
   52789 * misunderstandings in C++:              C++ Misunderstandings.
   52790                                                              (line    6)
   52791 * mixed declarations and code:           Mixed Declarations. (line    6)
   52792 * 'mktemp', and constant strings:        Incompatibilities.  (line   13)
   52793 * MMIX Options:                          MMIX Options.       (line    6)
   52794 * MN10300 options:                       MN10300 Options.    (line    6)
   52795 * 'mode' attribute:                      Variable Attributes.
   52796                                                              (line  133)
   52797 * modf:                                  Other Builtins.     (line    6)
   52798 * modff:                                 Other Builtins.     (line    6)
   52799 * modfl:                                 Other Builtins.     (line    6)
   52800 * modifiers in constraints:              Modifiers.          (line    6)
   52801 * Moxie Options:                         Moxie Options.      (line    6)
   52802 * 'ms_abi' attribute:                    Function Attributes.
   52803                                                              (line  877)
   52804 * 'ms_hook_prologue' attribute:          Function Attributes.
   52805                                                              (line  904)
   52806 * 'ms_struct':                           Type Attributes.    (line  323)
   52807 * 'ms_struct' attribute:                 Variable Attributes.
   52808                                                              (line  438)
   52809 * mudflap:                               Optimize Options.   (line  404)
   52810 * multiple alternative constraints:      Multi-Alternative.  (line    6)
   52811 * multiprecision arithmetic:             Long Long.          (line    6)
   52812 * 'n' in constraint:                     Simple Constraints. (line   73)
   52813 * Named Address Spaces:                  Named Address Spaces.
   52814                                                              (line    6)
   52815 * names used in assembler code:          Asm Labels.         (line    6)
   52816 * naming convention, implementation headers: C++ Interface.  (line   46)
   52817 * nearbyint:                             Other Builtins.     (line    6)
   52818 * nearbyintf:                            Other Builtins.     (line    6)
   52819 * nearbyintl:                            Other Builtins.     (line    6)
   52820 * nested functions:                      Nested Functions.   (line    6)
   52821 * newlines (escaped):                    Escaped Newlines.   (line    6)
   52822 * nextafter:                             Other Builtins.     (line    6)
   52823 * nextafterf:                            Other Builtins.     (line    6)
   52824 * nextafterl:                            Other Builtins.     (line    6)
   52825 * nexttoward:                            Other Builtins.     (line    6)
   52826 * nexttowardf:                           Other Builtins.     (line    6)
   52827 * nexttowardl:                           Other Builtins.     (line    6)
   52828 * NFC:                                   Warning Options.    (line 1272)
   52829 * NFKC:                                  Warning Options.    (line 1272)
   52830 * NMI handler functions on the Blackfin processor: Function Attributes.
   52831                                                              (line  947)
   52832 * 'noclone' function attribute:          Function Attributes.
   52833                                                              (line  975)
   52834 * 'nocommon' attribute:                  Variable Attributes.
   52835                                                              (line  104)
   52836 * 'noinline' function attribute:         Function Attributes.
   52837                                                              (line  964)
   52838 * 'nomips16' attribute:                  Function Attributes.
   52839                                                              (line  833)
   52840 * non-constant initializers:             Initializers.       (line    6)
   52841 * non-static inline function:            Inline.             (line   85)
   52842 * 'nonnull' function attribute:          Function Attributes.
   52843                                                              (line  981)
   52844 * 'noreturn' function attribute:         Function Attributes.
   52845                                                              (line 1005)
   52846 * 'nosave_low_regs' attribute:           Function Attributes.
   52847                                                              (line 1055)
   52848 * 'nothrow' function attribute:          Function Attributes.
   52849                                                              (line 1047)
   52850 * 'no_instrument_function' function attribute: Function Attributes.
   52851                                                              (line  953)
   52852 * 'no_sanitize_address' function attribute: Function Attributes.
   52853                                                              (line 1193)
   52854 * 'no_split_stack' function attribute:   Function Attributes.
   52855                                                              (line  958)
   52856 * 'o' in constraint:                     Simple Constraints. (line   23)
   52857 * OBJC_INCLUDE_PATH:                     Environment Variables.
   52858                                                              (line  130)
   52859 * Objective-C:                           G++ and GCC.        (line    6)
   52860 * Objective-C <1>:                       Standards.          (line  163)
   52861 * Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
   52862                                                              (line    6)
   52863 * Objective-C++:                         G++ and GCC.        (line    6)
   52864 * Objective-C++ <1>:                     Standards.          (line  163)
   52865 * offsettable address:                   Simple Constraints. (line   23)
   52866 * old-style function definitions:        Function Prototypes.
   52867                                                              (line    6)
   52868 * omitted middle-operands:               Conditionals.       (line    6)
   52869 * open coding:                           Inline.             (line    6)
   52870 * OpenMP parallel:                       C Dialect Options.  (line  257)
   52871 * operand constraints, 'asm':            Constraints.        (line    6)
   52872 * 'optimize' function attribute:         Function Attributes.
   52873                                                              (line 1061)
   52874 * optimize options:                      Optimize Options.   (line    6)
   52875 * options to control diagnostics formatting: Language Independent Options.
   52876                                                              (line    6)
   52877 * options to control warnings:           Warning Options.    (line    6)
   52878 * options, C++:                          C++ Dialect Options.
   52879                                                              (line    6)
   52880 * options, code generation:              Code Gen Options.   (line    6)
   52881 * options, debugging:                    Debugging Options.  (line    6)
   52882 * options, dialect:                      C Dialect Options.  (line    6)
   52883 * options, directory search:             Directory Options.  (line    6)
   52884 * options, GCC command:                  Invoking GCC.       (line    6)
   52885 * options, grouping:                     Invoking GCC.       (line   26)
   52886 * options, linking:                      Link Options.       (line    6)
   52887 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   52888                                                              (line    6)
   52889 * options, optimization:                 Optimize Options.   (line    6)
   52890 * options, order:                        Invoking GCC.       (line   30)
   52891 * options, preprocessor:                 Preprocessor Options.
   52892                                                              (line    6)
   52893 * order of evaluation, side effects:     Non-bugs.           (line  196)
   52894 * order of options:                      Invoking GCC.       (line   30)
   52895 * 'OS_main' AVR function attribute:      Function Attributes.
   52896                                                              (line 1078)
   52897 * 'OS_task' AVR function attribute:      Function Attributes.
   52898                                                              (line 1078)
   52899 * other register constraints:            Simple Constraints. (line  161)
   52900 * output file option:                    Overall Options.    (line  191)
   52901 * overloaded virtual function, warning:  C++ Dialect Options.
   52902                                                              (line  609)
   52903 * 'p' in constraint:                     Simple Constraints. (line  152)
   52904 * 'packed' attribute:                    Variable Attributes.
   52905                                                              (line  144)
   52906 * parameter forward declaration:         Variable Length.    (line   59)
   52907 * Pascal:                                G++ and GCC.        (line   23)
   52908 * 'pcs' function attribute:              Function Attributes.
   52909                                                              (line 1102)
   52910 * PDP-11 Options:                        PDP-11 Options.     (line    6)
   52911 * PIC:                                   Code Gen Options.   (line  266)
   52912 * picoChip options:                      picoChip Options.   (line    6)
   52913 * pmf:                                   Bound member functions.
   52914                                                              (line    6)
   52915 * pointer arguments:                     Function Attributes.
   52916                                                              (line  186)
   52917 * pointer to member function:            Bound member functions.
   52918                                                              (line    6)
   52919 * portions of temporary objects, pointers to: Temporaries.   (line    6)
   52920 * pow:                                   Other Builtins.     (line    6)
   52921 * pow10:                                 Other Builtins.     (line    6)
   52922 * pow10f:                                Other Builtins.     (line    6)
   52923 * pow10l:                                Other Builtins.     (line    6)
   52924 * PowerPC options:                       PowerPC Options.    (line    6)
   52925 * powf:                                  Other Builtins.     (line    6)
   52926 * powl:                                  Other Builtins.     (line    6)
   52927 * pragma GCC optimize:                   Function Specific Option Pragmas.
   52928                                                              (line   22)
   52929 * pragma GCC pop_options:                Function Specific Option Pragmas.
   52930                                                              (line   36)
   52931 * pragma GCC push_options:               Function Specific Option Pragmas.
   52932                                                              (line   36)
   52933 * pragma GCC reset_options:              Function Specific Option Pragmas.
   52934                                                              (line   47)
   52935 * pragma GCC target:                     Function Specific Option Pragmas.
   52936                                                              (line    7)
   52937 * pragma, address:                       M32C Pragmas.       (line   15)
   52938 * pragma, align:                         Solaris Pragmas.    (line   11)
   52939 * pragma, call:                          MeP Pragmas.        (line   48)
   52940 * pragma, coprocessor available:         MeP Pragmas.        (line   13)
   52941 * pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
   52942 * pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
   52943 * pragma, custom io_volatile:            MeP Pragmas.        (line    7)
   52944 * pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
   52945 * pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
   52946 * pragma, disinterrupt:                  MeP Pragmas.        (line   38)
   52947 * pragma, fini:                          Solaris Pragmas.    (line   20)
   52948 * pragma, init:                          Solaris Pragmas.    (line   26)
   52949 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
   52950                                                              (line   14)
   52951 * pragma, long_calls:                    ARM Pragmas.        (line   11)
   52952 * pragma, long_calls_off:                ARM Pragmas.        (line   17)
   52953 * pragma, mark:                          Darwin Pragmas.     (line   11)
   52954 * pragma, memregs:                       M32C Pragmas.       (line    7)
   52955 * pragma, no_long_calls:                 ARM Pragmas.        (line   14)
   52956 * pragma, options align:                 Darwin Pragmas.     (line   14)
   52957 * pragma, pop_macro:                     Push/Pop Macro Pragmas.
   52958                                                              (line   15)
   52959 * pragma, push_macro:                    Push/Pop Macro Pragmas.
   52960                                                              (line   11)
   52961 * pragma, reason for not using:          Function Attributes.
   52962                                                              (line 1875)
   52963 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
   52964                                                              (line   12)
   52965 * pragma, segment:                       Darwin Pragmas.     (line   21)
   52966 * pragma, unused:                        Darwin Pragmas.     (line   24)
   52967 * pragma, visibility:                    Visibility Pragmas. (line    8)
   52968 * pragma, weak:                          Weak Pragmas.       (line   10)
   52969 * pragmas:                               Pragmas.            (line    6)
   52970 * pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
   52971 * pragmas, interface and implementation: C++ Interface.      (line    6)
   52972 * pragmas, warning of unknown:           Warning Options.    (line  684)
   52973 * precompiled headers:                   Precompiled Headers.
   52974                                                              (line    6)
   52975 * preprocessing numbers:                 Incompatibilities.  (line  173)
   52976 * preprocessing tokens:                  Incompatibilities.  (line  173)
   52977 * preprocessor options:                  Preprocessor Options.
   52978                                                              (line    6)
   52979 * printf:                                Other Builtins.     (line    6)
   52980 * printf_unlocked:                       Other Builtins.     (line    6)
   52981 * 'prof':                                Debugging Options.  (line  327)
   52982 * 'progmem' AVR variable attribute:      Variable Attributes.
   52983                                                              (line  314)
   52984 * promotion of formal parameters:        Function Prototypes.
   52985                                                              (line    6)
   52986 * 'pure' function attribute:             Function Attributes.
   52987                                                              (line 1121)
   52988 * push address instruction:              Simple Constraints. (line  152)
   52989 * putchar:                               Other Builtins.     (line    6)
   52990 * puts:                                  Other Builtins.     (line    6)
   52991 * 'q' floating point suffix:             Floating Types.     (line    6)
   52992 * 'Q' floating point suffix:             Floating Types.     (line    6)
   52993 * 'qsort', and global register variables: Global Reg Vars.   (line   41)
   52994 * question mark:                         Multi-Alternative.  (line   27)
   52995 * 'r' fixed-suffix:                      Fixed-Point.        (line    6)
   52996 * 'R' fixed-suffix:                      Fixed-Point.        (line    6)
   52997 * 'r' in constraint:                     Simple Constraints. (line   64)
   52998 * 'RAMPD':                               AVR Options.        (line  333)
   52999 * 'RAMPX':                               AVR Options.        (line  333)
   53000 * 'RAMPY':                               AVR Options.        (line  333)
   53001 * 'RAMPZ':                               AVR Options.        (line  333)
   53002 * ranges in case statements:             Case Ranges.        (line    6)
   53003 * read-only strings:                     Incompatibilities.  (line    9)
   53004 * register variable after 'longjmp':     Global Reg Vars.    (line   65)
   53005 * registers:                             Extended Asm.       (line    6)
   53006 * registers for local variables:         Local Reg Vars.     (line    6)
   53007 * registers in constraints:              Simple Constraints. (line   64)
   53008 * registers, global allocation:          Explicit Reg Vars.  (line    6)
   53009 * registers, global variables in:        Global Reg Vars.    (line    6)
   53010 * 'regparm' attribute:                   Function Attributes.
   53011                                                              (line 1201)
   53012 * relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
   53013 * relocation truncated to fit (MIPS):    MIPS Options.       (line  199)
   53014 * remainder:                             Other Builtins.     (line    6)
   53015 * remainderf:                            Other Builtins.     (line    6)
   53016 * remainderl:                            Other Builtins.     (line    6)
   53017 * remquo:                                Other Builtins.     (line    6)
   53018 * remquof:                               Other Builtins.     (line    6)
   53019 * remquol:                               Other Builtins.     (line    6)
   53020 * 'renesas' attribute:                   Function Attributes.
   53021                                                              (line 1233)
   53022 * reordering, warning:                   C++ Dialect Options.
   53023                                                              (line  527)
   53024 * reporting bugs:                        Bugs.               (line    6)
   53025 * 'resbank' attribute:                   Function Attributes.
   53026                                                              (line 1237)
   53027 * rest argument (in macro):              Variadic Macros.    (line    6)
   53028 * restricted pointers:                   Restricted Pointers.
   53029                                                              (line    6)
   53030 * restricted references:                 Restricted Pointers.
   53031                                                              (line    6)
   53032 * restricted this pointer:               Restricted Pointers.
   53033                                                              (line    6)
   53034 * 'returns_twice' attribute:             Function Attributes.
   53035                                                              (line 1251)
   53036 * rindex:                                Other Builtins.     (line    6)
   53037 * rint:                                  Other Builtins.     (line    6)
   53038 * rintf:                                 Other Builtins.     (line    6)
   53039 * rintl:                                 Other Builtins.     (line    6)
   53040 * RL78 Options:                          RL78 Options.       (line    6)
   53041 * round:                                 Other Builtins.     (line    6)
   53042 * roundf:                                Other Builtins.     (line    6)
   53043 * roundl:                                Other Builtins.     (line    6)
   53044 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
   53045                                                              (line    6)
   53046 * RTTI:                                  Vague Linkage.      (line   42)
   53047 * run-time options:                      Code Gen Options.   (line    6)
   53048 * RX Options:                            RX Options.         (line    6)
   53049 * 's' in constraint:                     Simple Constraints. (line  100)
   53050 * S/390 and zSeries Options:             S/390 and zSeries Options.
   53051                                                              (line    6)
   53052 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
   53053                                                              (line 1260)
   53054 * save volatile registers on the MicroBlaze: Function Attributes.
   53055                                                              (line 1265)
   53056 * scalb:                                 Other Builtins.     (line    6)
   53057 * scalbf:                                Other Builtins.     (line    6)
   53058 * scalbl:                                Other Builtins.     (line    6)
   53059 * scalbln:                               Other Builtins.     (line    6)
   53060 * scalblnf:                              Other Builtins.     (line    6)
   53061 * scalblnf <1>:                          Other Builtins.     (line    6)
   53062 * scalbn:                                Other Builtins.     (line    6)
   53063 * scalbnf:                               Other Builtins.     (line    6)
   53064 * 'scanf', and constant strings:         Incompatibilities.  (line   17)
   53065 * scanfnl:                               Other Builtins.     (line    6)
   53066 * scope of a variable length array:      Variable Length.    (line   22)
   53067 * scope of declaration:                  Disappointments.    (line   21)
   53068 * scope of external declarations:        Incompatibilities.  (line   80)
   53069 * Score Options:                         Score Options.      (line    6)
   53070 * search path:                           Directory Options.  (line    6)
   53071 * 'section' function attribute:          Function Attributes.
   53072                                                              (line 1273)
   53073 * 'section' variable attribute:          Variable Attributes.
   53074                                                              (line  165)
   53075 * 'sentinel' function attribute:         Function Attributes.
   53076                                                              (line 1289)
   53077 * setjmp:                                Global Reg Vars.    (line   65)
   53078 * 'setjmp' incompatibilities:            Incompatibilities.  (line   39)
   53079 * shared strings:                        Incompatibilities.  (line    9)
   53080 * 'shared' variable attribute:           Variable Attributes.
   53081                                                              (line  210)
   53082 * side effect in '?:':                   Conditionals.       (line   20)
   53083 * side effects, macro argument:          Statement Exprs.    (line   35)
   53084 * side effects, order of evaluation:     Non-bugs.           (line  196)
   53085 * signbit:                               Other Builtins.     (line    6)
   53086 * signbitd128:                           Other Builtins.     (line    6)
   53087 * signbitd32:                            Other Builtins.     (line    6)
   53088 * signbitd64:                            Other Builtins.     (line    6)
   53089 * signbitf:                              Other Builtins.     (line    6)
   53090 * signbitl:                              Other Builtins.     (line    6)
   53091 * signed and unsigned values, comparison warning: Warning Options.
   53092                                                              (line 1144)
   53093 * significand:                           Other Builtins.     (line    6)
   53094 * significandf:                          Other Builtins.     (line    6)
   53095 * significandl:                          Other Builtins.     (line    6)
   53096 * simple constraints:                    Simple Constraints. (line    6)
   53097 * sin:                                   Other Builtins.     (line    6)
   53098 * sincos:                                Other Builtins.     (line    6)
   53099 * sincosf:                               Other Builtins.     (line    6)
   53100 * sincosl:                               Other Builtins.     (line    6)
   53101 * sinf:                                  Other Builtins.     (line    6)
   53102 * sinh:                                  Other Builtins.     (line    6)
   53103 * sinhf:                                 Other Builtins.     (line    6)
   53104 * sinhl:                                 Other Builtins.     (line    6)
   53105 * sinl:                                  Other Builtins.     (line    6)
   53106 * sizeof:                                Typeof.             (line    6)
   53107 * smaller data references:               M32R/D Options.     (line   57)
   53108 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
   53109                                                              (line  739)
   53110 * snprintf:                              Other Builtins.     (line    6)
   53111 * Solaris 2 options:                     Solaris 2 Options.  (line    6)
   53112 * SPARC options:                         SPARC Options.      (line    6)
   53113 * Spec Files:                            Spec Files.         (line    6)
   53114 * specified registers:                   Explicit Reg Vars.  (line    6)
   53115 * specifying compiler version and target machine: Target Options.
   53116                                                              (line    6)
   53117 * specifying hardware config:            Submodel Options.   (line    6)
   53118 * specifying machine version:            Target Options.     (line    6)
   53119 * specifying registers for local variables: Local Reg Vars.  (line    6)
   53120 * speed of compilation:                  Precompiled Headers.
   53121                                                              (line    6)
   53122 * sprintf:                               Other Builtins.     (line    6)
   53123 * SPU options:                           SPU Options.        (line    6)
   53124 * 'sp_switch' attribute:                 Function Attributes.
   53125                                                              (line 1338)
   53126 * sqrt:                                  Other Builtins.     (line    6)
   53127 * sqrtf:                                 Other Builtins.     (line    6)
   53128 * sqrtl:                                 Other Builtins.     (line    6)
   53129 * sscanf:                                Other Builtins.     (line    6)
   53130 * 'sscanf', and constant strings:        Incompatibilities.  (line   17)
   53131 * 'sseregparm' attribute:                Function Attributes.
   53132                                                              (line 1218)
   53133 * statements inside expressions:         Statement Exprs.    (line    6)
   53134 * static data in C++, declaring and defining: Static Definitions.
   53135                                                              (line    6)
   53136 * stpcpy:                                Other Builtins.     (line    6)
   53137 * stpncpy:                               Other Builtins.     (line    6)
   53138 * strcasecmp:                            Other Builtins.     (line    6)
   53139 * strcat:                                Other Builtins.     (line    6)
   53140 * strchr:                                Other Builtins.     (line    6)
   53141 * strcmp:                                Other Builtins.     (line    6)
   53142 * strcpy:                                Other Builtins.     (line    6)
   53143 * strcspn:                               Other Builtins.     (line    6)
   53144 * strdup:                                Other Builtins.     (line    6)
   53145 * strfmon:                               Other Builtins.     (line    6)
   53146 * strftime:                              Other Builtins.     (line    6)
   53147 * string constants:                      Incompatibilities.  (line    9)
   53148 * strlen:                                Other Builtins.     (line    6)
   53149 * strncasecmp:                           Other Builtins.     (line    6)
   53150 * strncat:                               Other Builtins.     (line    6)
   53151 * strncmp:                               Other Builtins.     (line    6)
   53152 * strncpy:                               Other Builtins.     (line    6)
   53153 * strndup:                               Other Builtins.     (line    6)
   53154 * strpbrk:                               Other Builtins.     (line    6)
   53155 * strrchr:                               Other Builtins.     (line    6)
   53156 * strspn:                                Other Builtins.     (line    6)
   53157 * strstr:                                Other Builtins.     (line    6)
   53158 * 'struct':                              Unnamed Fields.     (line    6)
   53159 * struct __htm_tdb:                      S/390 System z Built-in Functions.
   53160                                                              (line   49)
   53161 * structures:                            Incompatibilities.  (line  146)
   53162 * structures, constructor expression:    Compound Literals.  (line    6)
   53163 * submodel options:                      Submodel Options.   (line    6)
   53164 * subscripting:                          Subscripting.       (line    6)
   53165 * subscripting and function values:      Subscripting.       (line    6)
   53166 * suffixes for C++ source:               Invoking G++.       (line    6)
   53167 * SUNPRO_DEPENDENCIES:                   Environment Variables.
   53168                                                              (line  170)
   53169 * suppressing warnings:                  Warning Options.    (line    6)
   53170 * surprises in C++:                      C++ Misunderstandings.
   53171                                                              (line    6)
   53172 * syntax checking:                       Warning Options.    (line   13)
   53173 * 'syscall_linkage' attribute:           Function Attributes.
   53174                                                              (line 1353)
   53175 * system headers, warnings from:         Warning Options.    (line  835)
   53176 * 'sysv_abi' attribute:                  Function Attributes.
   53177                                                              (line  877)
   53178 * tan:                                   Other Builtins.     (line    6)
   53179 * tanf:                                  Other Builtins.     (line    6)
   53180 * tanh:                                  Other Builtins.     (line    6)
   53181 * tanhf:                                 Other Builtins.     (line    6)
   53182 * tanhl:                                 Other Builtins.     (line    6)
   53183 * tanl:                                  Other Builtins.     (line    6)
   53184 * 'target' function attribute:           Function Attributes.
   53185                                                              (line 1360)
   53186 * target machine, specifying:            Target Options.     (line    6)
   53187 * target options:                        Target Options.     (line    6)
   53188 * 'target("abm")' attribute:             Function Attributes.
   53189                                                              (line 1386)
   53190 * 'target("aes")' attribute:             Function Attributes.
   53191                                                              (line 1391)
   53192 * 'target("align-stringops")' attribute: Function Attributes.
   53193                                                              (line 1485)
   53194 * 'target("altivec")' attribute:         Function Attributes.
   53195                                                              (line 1511)
   53196 * 'target("arch=ARCH")' attribute:       Function Attributes.
   53197                                                              (line 1494)
   53198 * 'target("avoid-indexed-addresses")' attribute: Function Attributes.
   53199                                                              (line 1632)
   53200 * 'target("cld")' attribute:             Function Attributes.
   53201                                                              (line 1456)
   53202 * 'target("cmpb")' attribute:            Function Attributes.
   53203                                                              (line 1517)
   53204 * 'target("cpu=CPU")' attribute:         Function Attributes.
   53205                                                              (line 1647)
   53206 * 'target("default")' attribute:         Function Attributes.
   53207                                                              (line 1394)
   53208 * 'target("dlmzb")' attribute:           Function Attributes.
   53209                                                              (line 1523)
   53210 * 'target("fancy-math-387")' attribute:  Function Attributes.
   53211                                                              (line 1460)
   53212 * 'target("fma4")' attribute:            Function Attributes.
   53213                                                              (line 1440)
   53214 * 'target("fpmath=FPMATH")' attribute:   Function Attributes.
   53215                                                              (line 1502)
   53216 * 'target("fprnd")' attribute:           Function Attributes.
   53217                                                              (line 1530)
   53218 * 'target("friz")' attribute:            Function Attributes.
   53219                                                              (line 1623)
   53220 * 'target("fused-madd")' attribute:      Function Attributes.
   53221                                                              (line 1465)
   53222 * 'target("hard-dfp")' attribute:        Function Attributes.
   53223                                                              (line 1536)
   53224 * 'target("ieee-fp")' attribute:         Function Attributes.
   53225                                                              (line 1470)
   53226 * 'target("inline-all-stringops")' attribute: Function Attributes.
   53227                                                              (line 1475)
   53228 * 'target("inline-stringops-dynamically")' attribute: Function Attributes.
   53229                                                              (line 1479)
   53230 * 'target("isel")' attribute:            Function Attributes.
   53231                                                              (line 1542)
   53232 * 'target("longcall")' attribute:        Function Attributes.
   53233                                                              (line 1642)
   53234 * 'target("lwp")' attribute:             Function Attributes.
   53235                                                              (line 1448)
   53236 * 'target("mfcrf")' attribute:           Function Attributes.
   53237                                                              (line 1546)
   53238 * 'target("mfpgpr")' attribute:          Function Attributes.
   53239                                                              (line 1553)
   53240 * 'target("mmx")' attribute:             Function Attributes.
   53241                                                              (line 1399)
   53242 * 'target("mulhw")' attribute:           Function Attributes.
   53243                                                              (line 1560)
   53244 * 'target("multiple")' attribute:        Function Attributes.
   53245                                                              (line 1567)
   53246 * 'target("paired")' attribute:          Function Attributes.
   53247                                                              (line 1637)
   53248 * 'target("pclmul")' attribute:          Function Attributes.
   53249                                                              (line 1403)
   53250 * 'target("popcnt")' attribute:          Function Attributes.
   53251                                                              (line 1407)
   53252 * 'target("popcntb")' attribute:         Function Attributes.
   53253                                                              (line 1578)
   53254 * 'target("popcntd")' attribute:         Function Attributes.
   53255                                                              (line 1585)
   53256 * 'target("powerpc-gfxopt")' attribute:  Function Attributes.
   53257                                                              (line 1591)
   53258 * 'target("powerpc-gpopt")' attribute:   Function Attributes.
   53259                                                              (line 1597)
   53260 * 'target("recip")' attribute:           Function Attributes.
   53261                                                              (line 1489)
   53262 * 'target("recip-precision")' attribute: Function Attributes.
   53263                                                              (line 1603)
   53264 * 'target("sse")' attribute:             Function Attributes.
   53265                                                              (line 1411)
   53266 * 'target("sse2")' attribute:            Function Attributes.
   53267                                                              (line 1415)
   53268 * 'target("sse3")' attribute:            Function Attributes.
   53269                                                              (line 1419)
   53270 * 'target("sse4")' attribute:            Function Attributes.
   53271                                                              (line 1423)
   53272 * 'target("sse4.1")' attribute:          Function Attributes.
   53273                                                              (line 1428)
   53274 * 'target("sse4.2")' attribute:          Function Attributes.
   53275                                                              (line 1432)
   53276 * 'target("sse4a")' attribute:           Function Attributes.
   53277                                                              (line 1436)
   53278 * 'target("ssse3")' attribute:           Function Attributes.
   53279                                                              (line 1452)
   53280 * 'target("string")' attribute:          Function Attributes.
   53281                                                              (line 1609)
   53282 * 'target("tune=TUNE")' attribute:       Function Attributes.
   53283                                                              (line 1498)
   53284 * 'target("tune=TUNE")' attribute <1>:   Function Attributes.
   53285                                                              (line 1654)
   53286 * 'target("update")' attribute:          Function Attributes.
   53287                                                              (line 1572)
   53288 * 'target("vsx")' attribute:             Function Attributes.
   53289                                                              (line 1615)
   53290 * 'target("xop")' attribute:             Function Attributes.
   53291                                                              (line 1444)
   53292 * TC1:                                   Standards.          (line   13)
   53293 * TC2:                                   Standards.          (line   13)
   53294 * TC3:                                   Standards.          (line   13)
   53295 * Technical Corrigenda:                  Standards.          (line   13)
   53296 * Technical Corrigendum 1:               Standards.          (line   13)
   53297 * Technical Corrigendum 2:               Standards.          (line   13)
   53298 * Technical Corrigendum 3:               Standards.          (line   13)
   53299 * template instantiation:                Template Instantiation.
   53300                                                              (line    6)
   53301 * temporaries, lifetime of:              Temporaries.        (line    6)
   53302 * tgamma:                                Other Builtins.     (line    6)
   53303 * tgammaf:                               Other Builtins.     (line    6)
   53304 * tgammal:                               Other Builtins.     (line    6)
   53305 * Thread-Local Storage:                  Thread-Local.       (line    6)
   53306 * thunks:                                Nested Functions.   (line    6)
   53307 * TILE-Gx options:                       TILE-Gx Options.    (line    6)
   53308 * TILEPro options:                       TILEPro Options.    (line    6)
   53309 * tiny data section on the H8/300H and H8S: Function Attributes.
   53310                                                              (line 1676)
   53311 * TLS:                                   Thread-Local.       (line    6)
   53312 * 'tls_model' attribute:                 Variable Attributes.
   53313                                                              (line  233)
   53314 * TMPDIR:                                Environment Variables.
   53315                                                              (line   45)
   53316 * toascii:                               Other Builtins.     (line    6)
   53317 * tolower:                               Other Builtins.     (line    6)
   53318 * toupper:                               Other Builtins.     (line    6)
   53319 * towlower:                              Other Builtins.     (line    6)
   53320 * towupper:                              Other Builtins.     (line    6)
   53321 * traditional C language:                C Dialect Options.  (line  309)
   53322 * 'trapa_handler' attribute:             Function Attributes.
   53323                                                              (line 1688)
   53324 * 'trap_exit' attribute:                 Function Attributes.
   53325                                                              (line 1683)
   53326 * trunc:                                 Other Builtins.     (line    6)
   53327 * truncf:                                Other Builtins.     (line    6)
   53328 * truncl:                                Other Builtins.     (line    6)
   53329 * two-stage name lookup:                 Name lookup.        (line    6)
   53330 * type alignment:                        Alignment.          (line    6)
   53331 * type attributes:                       Type Attributes.    (line    6)
   53332 * typedef names as function parameters:  Incompatibilities.  (line   97)
   53333 * typeof:                                Typeof.             (line    6)
   53334 * 'type_info':                           Vague Linkage.      (line   42)
   53335 * 'uhk' fixed-suffix:                    Fixed-Point.        (line    6)
   53336 * 'UHK' fixed-suffix:                    Fixed-Point.        (line    6)
   53337 * 'uhr' fixed-suffix:                    Fixed-Point.        (line    6)
   53338 * 'UHR' fixed-suffix:                    Fixed-Point.        (line    6)
   53339 * 'uk' fixed-suffix:                     Fixed-Point.        (line    6)
   53340 * 'UK' fixed-suffix:                     Fixed-Point.        (line    6)
   53341 * 'ulk' fixed-suffix:                    Fixed-Point.        (line    6)
   53342 * 'ULK' fixed-suffix:                    Fixed-Point.        (line    6)
   53343 * 'ULL' integer suffix:                  Long Long.          (line    6)
   53344 * 'ullk' fixed-suffix:                   Fixed-Point.        (line    6)
   53345 * 'ULLK' fixed-suffix:                   Fixed-Point.        (line    6)
   53346 * 'ullr' fixed-suffix:                   Fixed-Point.        (line    6)
   53347 * 'ULLR' fixed-suffix:                   Fixed-Point.        (line    6)
   53348 * 'ulr' fixed-suffix:                    Fixed-Point.        (line    6)
   53349 * 'ULR' fixed-suffix:                    Fixed-Point.        (line    6)
   53350 * undefined behavior:                    Bug Criteria.       (line   17)
   53351 * undefined function value:              Bug Criteria.       (line   17)
   53352 * underscores in variables in macros:    Typeof.             (line   46)
   53353 * 'union':                               Unnamed Fields.     (line    6)
   53354 * union, casting to a:                   Cast to Union.      (line    6)
   53355 * unions:                                Incompatibilities.  (line  146)
   53356 * unknown pragmas, warning:              Warning Options.    (line  684)
   53357 * unresolved references and '-nodefaultlibs': Link Options.  (line   85)
   53358 * unresolved references and '-nostdlib': Link Options.       (line   85)
   53359 * 'unused' attribute.:                   Function Attributes.
   53360                                                              (line 1692)
   53361 * 'ur' fixed-suffix:                     Fixed-Point.        (line    6)
   53362 * 'UR' fixed-suffix:                     Fixed-Point.        (line    6)
   53363 * 'used' attribute.:                     Function Attributes.
   53364                                                              (line 1697)
   53365 * User stack pointer in interrupts on the Blackfin: Function Attributes.
   53366                                                              (line  748)
   53367 * 'use_debug_exception_return' attribute: Function Attributes.
   53368                                                              (line  707)
   53369 * 'use_shadow_register_set' attribute:   Function Attributes.
   53370                                                              (line  698)
   53371 * 'V' in constraint:                     Simple Constraints. (line   43)
   53372 * V850 Options:                          V850 Options.       (line    6)
   53373 * vague linkage:                         Vague Linkage.      (line    6)
   53374 * value after 'longjmp':                 Global Reg Vars.    (line   65)
   53375 * variable addressability on the IA-64:  Function Attributes.
   53376                                                              (line  848)
   53377 * variable addressability on the M32R/D: Variable Attributes.
   53378                                                              (line  370)
   53379 * variable alignment:                    Alignment.          (line    6)
   53380 * variable attributes:                   Variable Attributes.
   53381                                                              (line    6)
   53382 * variable number of arguments:          Variadic Macros.    (line    6)
   53383 * variable-length array scope:           Variable Length.    (line   22)
   53384 * variable-length arrays:                Variable Length.    (line    6)
   53385 * variables in specified registers:      Explicit Reg Vars.  (line    6)
   53386 * variables, local, in macros:           Typeof.             (line   46)
   53387 * variadic macros:                       Variadic Macros.    (line    6)
   53388 * VAX options:                           VAX Options.        (line    6)
   53389 * 'version_id' attribute:                Function Attributes.
   53390                                                              (line 1707)
   53391 * vfprintf:                              Other Builtins.     (line    6)
   53392 * vfscanf:                               Other Builtins.     (line    6)
   53393 * 'visibility' attribute:                Function Attributes.
   53394                                                              (line 1717)
   53395 * VLAs:                                  Variable Length.    (line    6)
   53396 * 'vliw' attribute:                      Function Attributes.
   53397                                                              (line 1809)
   53398 * void pointers, arithmetic:             Pointer Arith.      (line    6)
   53399 * void, size of pointer to:              Pointer Arith.      (line    6)
   53400 * volatile access:                       Volatiles.          (line    6)
   53401 * volatile access <1>:                   C++ Volatiles.      (line    6)
   53402 * 'volatile' applied to function:        Function Attributes.
   53403                                                              (line    6)
   53404 * volatile read:                         Volatiles.          (line    6)
   53405 * volatile read <1>:                     C++ Volatiles.      (line    6)
   53406 * volatile write:                        Volatiles.          (line    6)
   53407 * volatile write <1>:                    C++ Volatiles.      (line    6)
   53408 * vprintf:                               Other Builtins.     (line    6)
   53409 * vscanf:                                Other Builtins.     (line    6)
   53410 * vsnprintf:                             Other Builtins.     (line    6)
   53411 * vsprintf:                              Other Builtins.     (line    6)
   53412 * vsscanf:                               Other Builtins.     (line    6)
   53413 * vtable:                                Vague Linkage.      (line   27)
   53414 * VxWorks Options:                       VxWorks Options.    (line    6)
   53415 * 'w' floating point suffix:             Floating Types.     (line    6)
   53416 * 'W' floating point suffix:             Floating Types.     (line    6)
   53417 * warning for comparison of signed and unsigned values: Warning Options.
   53418                                                              (line 1144)
   53419 * warning for overloaded virtual function: C++ Dialect Options.
   53420                                                              (line  609)
   53421 * warning for reordering of member initializers: C++ Dialect Options.
   53422                                                              (line  527)
   53423 * warning for unknown pragmas:           Warning Options.    (line  684)
   53424 * 'warning' function attribute:          Function Attributes.
   53425                                                              (line  164)
   53426 * warning messages:                      Warning Options.    (line    6)
   53427 * warnings from system headers:          Warning Options.    (line  835)
   53428 * warnings vs errors:                    Warnings and Errors.
   53429                                                              (line    6)
   53430 * 'warn_unused_result' attribute:        Function Attributes.
   53431                                                              (line 1815)
   53432 * 'weak' attribute:                      Function Attributes.
   53433                                                              (line 1832)
   53434 * 'weakref' attribute:                   Function Attributes.
   53435                                                              (line 1841)
   53436 * whitespace:                            Incompatibilities.  (line  112)
   53437 * 'X' in constraint:                     Simple Constraints. (line  122)
   53438 * X3.159-1989:                           Standards.          (line   13)
   53439 * x86-64 Options:                        i386 and x86-64 Options.
   53440                                                              (line    6)
   53441 * x86-64 options:                        x86-64 Options.     (line    6)
   53442 * Xstormy16 Options:                     Xstormy16 Options.  (line    6)
   53443 * Xtensa Options:                        Xtensa Options.     (line    6)
   53444 * y0:                                    Other Builtins.     (line    6)
   53445 * y0f:                                   Other Builtins.     (line    6)
   53446 * y0l:                                   Other Builtins.     (line    6)
   53447 * y1:                                    Other Builtins.     (line    6)
   53448 * y1f:                                   Other Builtins.     (line    6)
   53449 * y1l:                                   Other Builtins.     (line    6)
   53450 * yn:                                    Other Builtins.     (line    6)
   53451 * ynf:                                   Other Builtins.     (line    6)
   53452 * ynl:                                   Other Builtins.     (line    6)
   53453 * zero-length arrays:                    Zero Length.        (line    6)
   53454 * zero-size structures:                  Empty Structures.   (line    6)
   53455 * zSeries options:                       zSeries Options.    (line    6)
   53456 
   53457 
   53458 
   53459 Tag Table:
   53460 Node: Top1881
   53461 Node: G++ and GCC3646
   53462 Node: Standards5703
   53463 Node: Invoking GCC17883
   53464 Node: Option Summary21628
   53465 Node: Overall Options61756
   53466 Node: Invoking G++75943
   53467 Node: C Dialect Options77466
   53468 Node: C++ Dialect Options93301
   53469 Node: Objective-C and Objective-C++ Dialect Options121369
   53470 Node: Language Independent Options131876
   53471 Node: Warning Options134073
   53472 Node: Debugging Options203219
   53473 Node: Optimize Options260718
   53474 Ref: Type-punning319376
   53475 Node: Preprocessor Options397709
   53476 Ref: Wtrigraphs402492
   53477 Ref: dashMF407242
   53478 Ref: fdollars-in-identifiers418123
   53479 Node: Assembler Options428348
   53480 Node: Link Options429039
   53481 Ref: Link Options-Footnote-1440271
   53482 Node: Directory Options440607
   53483 Node: Spec Files447152
   53484 Node: Target Options468496
   53485 Node: Submodel Options468895
   53486 Node: AArch64 Options470588
   53487 Node: Adapteva Epiphany Options474460
   53488 Node: ARM Options480408
   53489 Node: AVR Options496259
   53490 Node: Blackfin Options516393
   53491 Node: C6X Options524411
   53492 Node: CRIS Options525954
   53493 Node: CR16 Options529693
   53494 Node: Darwin Options530604
   53495 Node: DEC Alpha Options538036
   53496 Node: FR30 Options549652
   53497 Node: FRV Options550216
   53498 Node: GNU/Linux Options556980
   53499 Node: H8/300 Options558240
   53500 Node: HPPA Options559692
   53501 Node: i386 and x86-64 Options569177
   53502 Node: i386 and x86-64 Windows Options606283
   53503 Node: IA-64 Options609136
   53504 Node: LM32 Options617202
   53505 Node: M32C Options617725
   53506 Node: M32R/D Options618998
   53507 Node: M680x0 Options622543
   53508 Node: MCore Options636578
   53509 Node: MeP Options638080
   53510 Node: MicroBlaze Options642039
   53511 Node: MIPS Options644841
   53512 Node: MMIX Options673693
   53513 Node: MN10300 Options676170
   53514 Node: Moxie Options678711
   53515 Node: PDP-11 Options679081
   53516 Node: picoChip Options680773
   53517 Node: PowerPC Options682911
   53518 Node: RL78 Options683132
   53519 Node: RS/6000 and PowerPC Options683793
   53520 Node: RX Options722790
   53521 Node: S/390 and zSeries Options730122
   53522 Node: Score Options738669
   53523 Node: SH Options739518
   53524 Node: Solaris 2 Options758356
   53525 Node: SPARC Options759586
   53526 Node: SPU Options772844
   53527 Node: System V Options777783
   53528 Node: TILE-Gx Options778609
   53529 Node: TILEPro Options779533
   53530 Node: V850 Options780037
   53531 Node: VAX Options786745
   53532 Node: VMS Options787280
   53533 Node: VxWorks Options788093
   53534 Node: x86-64 Options789248
   53535 Node: Xstormy16 Options789466
   53536 Node: Xtensa Options789755
   53537 Node: zSeries Options794066
   53538 Node: Code Gen Options794262
   53539 Node: Environment Variables824057
   53540 Node: Precompiled Headers832060
   53541 Node: C Implementation838063
   53542 Node: Translation implementation839733
   53543 Node: Environment implementation840306
   53544 Node: Identifiers implementation840855
   53545 Node: Characters implementation841908
   53546 Node: Integers implementation844714
   53547 Node: Floating point implementation846538
   53548 Node: Arrays and pointers implementation849465
   53549 Ref: Arrays and pointers implementation-Footnote-1850901
   53550 Node: Hints implementation851027
   53551 Node: Structures unions enumerations and bit-fields implementation852491
   53552 Node: Qualifiers implementation854476
   53553 Node: Declarators implementation856248
   53554 Node: Statements implementation856589
   53555 Node: Preprocessing directives implementation856915
   53556 Node: Library functions implementation859019
   53557 Node: Architecture implementation859658
   53558 Node: Locale-specific behavior implementation860360
   53559 Node: C++ Implementation860665
   53560 Node: Conditionally-supported behavior861948
   53561 Node: Exception handling862457
   53562 Node: C Extensions862865
   53563 Node: Statement Exprs867855
   53564 Node: Local Labels872315
   53565 Node: Labels as Values875288
   53566 Ref: Labels as Values-Footnote-1877689
   53567 Node: Nested Functions877874
   53568 Node: Constructing Calls881832
   53569 Node: Typeof886549
   53570 Node: Conditionals889858
   53571 Node: __int128890747
   53572 Node: Long Long891272
   53573 Node: Complex892748
   53574 Node: Floating Types895336
   53575 Node: Half-Precision896464
   53576 Node: Decimal Float898649
   53577 Node: Hex Floats900505
   53578 Node: Fixed-Point901542
   53579 Node: Named Address Spaces904802
   53580 Ref: AVR Named Address Spaces905483
   53581 Node: Zero Length910691
   53582 Node: Empty Structures913978
   53583 Node: Variable Length914384
   53584 Node: Variadic Macros917060
   53585 Node: Escaped Newlines919438
   53586 Node: Subscripting920277
   53587 Node: Pointer Arith921002
   53588 Node: Initializers921570
   53589 Node: Compound Literals922066
   53590 Node: Designated Inits925427
   53591 Node: Case Ranges929059
   53592 Node: Cast to Union929740
   53593 Node: Mixed Declarations930830
   53594 Node: Function Attributes931340
   53595 Node: Attribute Syntax1017737
   53596 Node: Function Prototypes1028127
   53597 Node: C++ Comments1029907
   53598 Node: Dollar Signs1030426
   53599 Node: Character Escapes1030891
   53600 Node: Variable Attributes1031185
   53601 Ref: AVR Variable Attributes1044836
   53602 Ref: MeP Variable Attributes1047498
   53603 Ref: i386 Variable Attributes1049434
   53604 Node: Type Attributes1055095
   53605 Ref: MeP Type Attributes1068983
   53606 Ref: i386 Type Attributes1069257
   53607 Ref: PowerPC Type Attributes1069949
   53608 Ref: SPU Type Attributes1070811
   53609 Node: Alignment1071102
   53610 Node: Inline1072472
   53611 Node: Volatiles1077448
   53612 Node: Extended Asm1080329
   53613 Ref: Example of asm with clobbered asm reg1086233
   53614 Ref: Extended asm with goto1095941
   53615 Node: Constraints1103791
   53616 Node: Simple Constraints1104875
   53617 Node: Multi-Alternative1112185
   53618 Node: Modifiers1113902
   53619 Node: Machine Constraints1116915
   53620 Node: Asm Labels1167684
   53621 Node: Explicit Reg Vars1169360
   53622 Node: Global Reg Vars1170958
   53623 Node: Local Reg Vars1175454
   53624 Node: Alternate Keywords1177870
   53625 Node: Incomplete Enums1179356
   53626 Node: Function Names1180112
   53627 Node: Return Address1182273
   53628 Node: Vector Extensions1185780
   53629 Node: Offsetof1191963
   53630 Node: __sync Builtins1192768
   53631 Node: __atomic Builtins1198237
   53632 Node: x86 specific memory model extensions for transactional memory1209871
   53633 Node: Object Size Checking1211133
   53634 Node: Other Builtins1216622
   53635 Node: Target Builtins1245749
   53636 Node: Alpha Built-in Functions1246988
   53637 Node: ARM iWMMXt Built-in Functions1249997
   53638 Node: ARM NEON Intrinsics1256977
   53639 Node: AVR Built-in Functions1465406
   53640 Node: Blackfin Built-in Functions1468484
   53641 Node: FR-V Built-in Functions1469101
   53642 Node: Argument Types1469962
   53643 Node: Directly-mapped Integer Functions1471714
   53644 Node: Directly-mapped Media Functions1472796
   53645 Node: Raw read/write Functions1481000
   53646 Node: Other Built-in Functions1481906
   53647 Node: X86 Built-in Functions1483090
   53648 Node: X86 transactional memory intrinsics1542055
   53649 Node: MIPS DSP Built-in Functions1544728
   53650 Node: MIPS Paired-Single Support1557235
   53651 Node: MIPS Loongson Built-in Functions1558734
   53652 Node: Paired-Single Arithmetic1565249
   53653 Node: Paired-Single Built-in Functions1566197
   53654 Node: MIPS-3D Built-in Functions1568864
   53655 Node: Other MIPS Built-in Functions1574242
   53656 Node: picoChip Built-in Functions1574766
   53657 Node: PowerPC Built-in Functions1576114
   53658 Node: PowerPC AltiVec/VSX Built-in Functions1579927
   53659 Node: PowerPC Hardware Transactional Memory Built-in Functions1712825
   53660 Node: RX Built-in Functions1719366
   53661 Node: S/390 System z Built-in Functions1723399
   53662 Node: SH Built-in Functions1728628
   53663 Node: SPARC VIS Built-in Functions1730021
   53664 Node: SPU Built-in Functions1735624
   53665 Node: TI C6X Built-in Functions1737441
   53666 Node: TILE-Gx Built-in Functions1738466
   53667 Node: TILEPro Built-in Functions1739585
   53668 Node: Target Format Checks1740654
   53669 Node: Solaris Format Checks1741086
   53670 Node: Darwin Format Checks1741512
   53671 Node: Pragmas1742330
   53672 Node: ARM Pragmas1743040
   53673 Node: M32C Pragmas1743643
   53674 Node: MeP Pragmas1744715
   53675 Node: RS/6000 and PowerPC Pragmas1746783
   53676 Node: Darwin Pragmas1747524
   53677 Node: Solaris Pragmas1748591
   53678 Node: Symbol-Renaming Pragmas1749755
   53679 Node: Structure-Packing Pragmas1751311
   53680 Node: Weak Pragmas1752956
   53681 Node: Diagnostic Pragmas1753690
   53682 Node: Visibility Pragmas1756799
   53683 Node: Push/Pop Macro Pragmas1757551
   53684 Node: Function Specific Option Pragmas1758524
   53685 Node: Unnamed Fields1760784
   53686 Node: Thread-Local1763011
   53687 Node: C99 Thread-Local Edits1765116
   53688 Node: C++98 Thread-Local Edits1767114
   53689 Node: Binary constants1770559
   53690 Node: C++ Extensions1771230
   53691 Node: C++ Volatiles1772941
   53692 Node: Restricted Pointers1775289
   53693 Node: Vague Linkage1776880
   53694 Node: C++ Interface1780503
   53695 Ref: C++ Interface-Footnote-11784791
   53696 Node: Template Instantiation1784929
   53697 Node: Bound member functions1791515
   53698 Node: C++ Attributes1793047
   53699 Node: Function Multiversioning1795703
   53700 Node: Namespace Association1797520
   53701 Node: Type Traits1798900
   53702 Node: Java Exceptions1805383
   53703 Node: Deprecated Features1806773
   53704 Node: Backwards Compatibility1809740
   53705 Node: Objective-C1811087
   53706 Node: GNU Objective-C runtime API1811694
   53707 Node: Modern GNU Objective-C runtime API1812701
   53708 Node: Traditional GNU Objective-C runtime API1815137
   53709 Node: Executing code before main1815864
   53710 Node: What you can and what you cannot do in +load1818604
   53711 Node: Type encoding1820992
   53712 Node: Legacy type encoding1826019
   53713 Node: @encode1827109
   53714 Node: Method signatures1827650
   53715 Node: Garbage Collection1829642
   53716 Node: Constant string objects1832332
   53717 Node: compatibility_alias1834841
   53718 Node: Exceptions1835562
   53719 Node: Synchronization1838272
   53720 Node: Fast enumeration1839456
   53721 Node: Using fast enumeration1839768
   53722 Node: c99-like fast enumeration syntax1840979
   53723 Node: Fast enumeration details1841682
   53724 Node: Fast enumeration protocol1844022
   53725 Node: Messaging with the GNU Objective-C runtime1847174
   53726 Node: Dynamically registering methods1848546
   53727 Node: Forwarding hook1850237
   53728 Node: Compatibility1853277
   53729 Node: Gcov1859833
   53730 Node: Gcov Intro1860366
   53731 Node: Invoking Gcov1863084
   53732 Node: Gcov and Optimization1875986
   53733 Node: Gcov Data Files1878988
   53734 Node: Cross-profiling1880383
   53735 Node: Trouble1882237
   53736 Node: Actual Bugs1883649
   53737 Node: Interoperation1884096
   53738 Node: Incompatibilities1890987
   53739 Node: Fixed Headers1899139
   53740 Node: Standard Libraries1900797
   53741 Node: Disappointments1902169
   53742 Node: C++ Misunderstandings1906528
   53743 Node: Static Definitions1907339
   53744 Node: Name lookup1908392
   53745 Ref: Name lookup-Footnote-11913172
   53746 Node: Temporaries1913361
   53747 Node: Copy Assignment1915337
   53748 Node: Non-bugs1917144
   53749 Node: Warnings and Errors1927650
   53750 Node: Bugs1929412
   53751 Node: Bug Criteria1929976
   53752 Node: Bug Reporting1932186
   53753 Node: Service1932407
   53754 Node: Contributing1933226
   53755 Node: Funding1933966
   53756 Node: GNU Project1936456
   53757 Node: Copying1937102
   53758 Node: GNU Free Documentation License1974611
   53759 Node: Contributors1999729
   53760 Node: Option Index2037127
   53761 Node: Keyword Index2231663
   53762 
   53763 End Tag Table
   53764