Home | History | Annotate | Download | only in info
      1 This is doc/gcc.info, produced by makeinfo version 4.13 from
      2 /tmp/android-15472/src/build/../gcc/gcc-4.6/gcc/doc/gcc.texi.
      3 
      4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
      5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
      6 Free Software Foundation, Inc.
      7 
      8  Permission is granted to copy, distribute and/or modify this document
      9 under the terms of the GNU Free Documentation License, Version 1.3 or
     10 any later version published by the Free Software Foundation; with the
     11 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     12 being (a) (see below), and with the Back-Cover Texts being (b) (see
     13 below).  A copy of the license is included in the section entitled "GNU
     14 Free Documentation License".
     15 
     16  (a) The FSF's Front-Cover Text is:
     17 
     18  A GNU Manual
     19 
     20  (b) The FSF's Back-Cover Text is:
     21 
     22  You have freedom to copy and modify this GNU Manual, like GNU
     23 software.  Copies published by the Free Software Foundation raise
     24 funds for GNU development.
     25 
     26 INFO-DIR-SECTION Software development
     27 START-INFO-DIR-ENTRY
     28 * gcc: (gcc).                  The GNU Compiler Collection.
     29 * g++: (gcc).                  The GNU C++ compiler.
     30 END-INFO-DIR-ENTRY
     31  This file documents the use of the GNU compilers.
     32 
     33  Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
     34 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
     35 Free Software Foundation, Inc.
     36 
     37  Permission is granted to copy, distribute and/or modify this document
     38 under the terms of the GNU Free Documentation License, Version 1.3 or
     39 any later version published by the Free Software Foundation; with the
     40 Invariant Sections being "Funding Free Software", the Front-Cover Texts
     41 being (a) (see below), and with the Back-Cover Texts being (b) (see
     42 below).  A copy of the license is included in the section entitled "GNU
     43 Free Documentation License".
     44 
     45  (a) The FSF's Front-Cover Text is:
     46 
     47  A GNU Manual
     48 
     49  (b) The FSF's Back-Cover Text is:
     50 
     51  You have freedom to copy and modify this GNU Manual, like GNU
     52 software.  Copies published by the Free Software Foundation raise
     53 funds for GNU development.
     54 
     55 
     56 
     57 File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
     58 
     59 Introduction
     60 ************
     61 
     62 This manual documents how to use the GNU compilers, as well as their
     63 features and incompatibilities, and how to report bugs.  It corresponds
     64 to the compilers (GCC) version 4.6.x-google.  The internals of the GNU
     65 compilers, including how to port them to new targets and some
     66 information about how to write front ends for new languages, are
     67 documented in a separate manual.  *Note Introduction: (gccint)Top.
     68 
     69 * Menu:
     70 
     71 * G++ and GCC::     You can compile C or C++ programs.
     72 * Standards::       Language standards supported by GCC.
     73 * Invoking GCC::    Command options supported by `gcc'.
     74 * C Implementation:: How GCC implements the ISO C specification.
     75 * C Extensions::    GNU extensions to the C language family.
     76 * C++ Implementation:: How GCC implements the ISO C++ specification.
     77 * C++ Extensions::  GNU extensions to the C++ language.
     78 * Objective-C::     GNU Objective-C runtime features.
     79 * Compatibility::   Binary Compatibility
     80 * Gcov::            `gcov'---a test coverage program.
     81 * Trouble::         If you have trouble using GCC.
     82 * Bugs::            How, why and where to report bugs.
     83 * Service::         How to find suppliers of support for GCC.
     84 * Contributing::    How to contribute to testing and developing GCC.
     85 
     86 * Funding::         How to help assure funding for free software.
     87 * GNU Project::     The GNU Project and GNU/Linux.
     88 
     89 * Copying::         GNU General Public License says
     90                     how you can copy and share GCC.
     91 * GNU Free Documentation License:: How you can copy and share this manual.
     92 * Contributors::    People who have contributed to GCC.
     93 
     94 * Option Index::    Index to command line options.
     95 * Keyword Index::   Index of concepts and symbol names.
     96 
     97 
     98 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
     99 
    100 1 Programming Languages Supported by GCC
    101 ****************************************
    102 
    103 GCC stands for "GNU Compiler Collection".  GCC is an integrated
    104 distribution of compilers for several major programming languages.
    105 These languages currently include C, C++, Objective-C, Objective-C++,
    106 Java, Fortran, Ada, and Go.
    107 
    108  The abbreviation "GCC" has multiple meanings in common use.  The
    109 current official meaning is "GNU Compiler Collection", which refers
    110 generically to the complete suite of tools.  The name historically stood
    111 for "GNU C Compiler", and this usage is still common when the emphasis
    112 is on compiling C programs.  Finally, the name is also used when
    113 speaking of the "language-independent" component of GCC: code shared
    114 among the compilers for all supported languages.
    115 
    116  The language-independent component of GCC includes the majority of the
    117 optimizers, as well as the "back ends" that generate machine code for
    118 various processors.
    119 
    120  The part of a compiler that is specific to a particular language is
    121 called the "front end".  In addition to the front ends that are
    122 integrated components of GCC, there are several other front ends that
    123 are maintained separately.  These support languages such as Pascal,
    124 Mercury, and COBOL.  To use these, they must be built together with GCC
    125 proper.
    126 
    127  Most of the compilers for languages other than C have their own names.
    128 The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
    129 talk about compiling one of those languages, we might refer to that
    130 compiler by its own name, or as GCC.  Either is correct.
    131 
    132  Historically, compilers for many languages, including C++ and Fortran,
    133 have been implemented as "preprocessors" which emit another high level
    134 language such as C.  None of the compilers included in GCC are
    135 implemented this way; they all generate machine code directly.  This
    136 sort of preprocessor should not be confused with the "C preprocessor",
    137 which is an integral feature of the C, C++, Objective-C and
    138 Objective-C++ languages.
    139 
    140 
    141 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
    142 
    143 2 Language Standards Supported by GCC
    144 *************************************
    145 
    146 For each language compiled by GCC for which there is a standard, GCC
    147 attempts to follow one or more versions of that standard, possibly with
    148 some exceptions, and possibly with some extensions.
    149 
    150 2.1 C language
    151 ==============
    152 
    153 GCC supports three versions of the C standard, although support for the
    154 most recent version is not yet complete.
    155 
    156  The original ANSI C standard (X3.159-1989) was ratified in 1989 and
    157 published in 1990.  This standard was ratified as an ISO standard
    158 (ISO/IEC 9899:1990) later in 1990.  There were no technical differences
    159 between these publications, although the sections of the ANSI standard
    160 were renumbered and became clauses in the ISO standard.  This standard,
    161 in both its forms, is commonly known as "C89", or occasionally as
    162 "C90", from the dates of ratification.  The ANSI standard, but not the
    163 ISO standard, also came with a Rationale document.  To select this
    164 standard in GCC, use one of the options `-ansi', `-std=c90' or
    165 `-std=iso9899:1990'; to obtain all the diagnostics required by the
    166 standard, you should also specify `-pedantic' (or `-pedantic-errors' if
    167 you want them to be errors rather than warnings).  *Note Options
    168 Controlling C Dialect: C Dialect Options.
    169 
    170  Errors in the 1990 ISO C standard were corrected in two Technical
    171 Corrigenda published in 1994 and 1996.  GCC does not support the
    172 uncorrected version.
    173 
    174  An amendment to the 1990 standard was published in 1995.  This
    175 amendment added digraphs and `__STDC_VERSION__' to the language, but
    176 otherwise concerned the library.  This amendment is commonly known as
    177 "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
    178 select this standard in GCC, use the option `-std=iso9899:199409'
    179 (with, as for other standard versions, `-pedantic' to receive all
    180 required diagnostics).
    181 
    182  A new edition of the ISO C standard was published in 1999 as ISO/IEC
    183 9899:1999, and is commonly known as "C99".  GCC has incomplete support
    184 for this standard version; see
    185 `http://gcc.gnu.org/gcc-4.6/c99status.html' for details.  To select this
    186 standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
    187 development, drafts of this standard version were referred to as "C9X".)
    188 
    189  Errors in the 1999 ISO C standard were corrected in three Technical
    190 Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
    191 uncorrected version.
    192 
    193  A fourth version of the C standard, known as "C1X", is under
    194 development; GCC has limited preliminary support for parts of this
    195 standard, enabled with `-std=c1x'.
    196 
    197  By default, GCC provides some extensions to the C language that on
    198 rare occasions conflict with the C standard.  *Note Extensions to the C
    199 Language Family: C Extensions.  Use of the `-std' options listed above
    200 will disable these extensions where they conflict with the C standard
    201 version selected.  You may also select an extended version of the C
    202 language explicitly with `-std=gnu90' (for C90 with GNU extensions),
    203 `-std=gnu99' (for C99 with GNU extensions) or `-std=gnu1x' (for C1X
    204 with GNU extensions).  The default, if no C language dialect options
    205 are given, is `-std=gnu90'; this will change to `-std=gnu99' in some
    206 future release when the C99 support is complete.  Some features that
    207 are part of the C99 standard are accepted as extensions in C90 mode.
    208 
    209  The ISO C standard defines (in clause 4) two classes of conforming
    210 implementation.  A "conforming hosted implementation" supports the
    211 whole standard including all the library facilities; a "conforming
    212 freestanding implementation" is only required to provide certain
    213 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
    214 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
    215 also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
    216 types, added in C99, are not required for freestanding implementations.
    217 The standard also defines two environments for programs, a
    218 "freestanding environment", required of all implementations and which
    219 may not have 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
    249 freestanding environment provide `memcpy', `memmove', `memset' and
    250 `memcmp'.  Finally, if `__builtin_trap' is used, and the target does
    251 not implement 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 ISO C++ standard (1998) and contains experimental
    261 support for the upcoming ISO C++ standard (200x).
    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' or `-std=c++98'; to
    269 obtain all the diagnostics required by the standard, you should also
    270 specify `-pedantic' (or `-pedantic-errors' if you want them to be
    271 errors rather than warnings).
    272 
    273  The ISO C++ committee is working on a new ISO C++ standard, dubbed
    274 C++0x, that is intended to be published by 2009. C++0x contains several
    275 changes to the C++ language, some of which have been implemented in an
    276 experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft
    277 working paper for the C++0x standard; the latest working paper is
    278 available on the ISO C++ committee's web site at
    279 `http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding
    280 the C++0x features available in the experimental C++0x mode, see
    281 `http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
    282 GCC, use the option `-std=c++0x'; to obtain all the diagnostics
    283 required by the standard, you should also specify `-pedantic' (or
    284 `-pedantic-errors' if you want them to be errors rather than warnings).
    285 
    286  By default, GCC provides some extensions to the C++ language; *Note
    287 Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
    288 `-std' option listed above will disable these extensions.  You may also
    289 select an extended version of the C++ language explicitly with
    290 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for
    291 C++0x with GNU extensions).  The default, if no C++ language dialect
    292 options are given, is `-std=gnu++98'.
    293 
    294 2.3 Objective-C and Objective-C++ languages
    295 ===========================================
    296 
    297 GCC supports "traditional" Objective-C (also known as "Objective-C
    298 1.0") and contains support for the Objective-C exception and
    299 synchronization syntax.  It has also support for a number of
    300 "Objective-C 2.0" language extensions, including properties, fast
    301 enumeration (only for Objective-C), method attributes and the @optional
    302 and @required keywords in protocols.  GCC supports Objective-C++ and
    303 features available in Objective-C are also available in Objective-C++.
    304 
    305  GCC by default uses the GNU Objective-C runtime library, which is part
    306 of GCC and is not the same as the Apple/NeXT Objective-C runtime
    307 library used on Apple systems.  There are a number of differences
    308 documented in this manual.  The options `-fgnu-runtime' and
    309 `-fnext-runtime' allow you to switch between producing output that
    310 works with the GNU Objective-C runtime library and output that works
    311 with the Apple/NeXT Objective-C runtime library.
    312 
    313  There is no formal written standard for Objective-C or Objective-C++.
    314 The authoritative manual on traditional Objective-C (1.0) is
    315 "Object-Oriented Programming and the Objective-C Language", available
    316 at a number of web sites:
    317    * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
    318      is the original NeXTstep document;
    319 
    320    * `http://objc.toodarkpark.net' is the same document in another
    321      format;
    322 
    323    *
    324      `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
    325      has an updated version but make sure you search for "Object
    326      Oriented Programming and the Objective-C Programming Language 1.0",
    327      not documentation on the newer "Objective-C 2.0" language
    328 
    329  The Objective-C exception and synchronization syntax (that is, the
    330 keywords @try, @throw, @catch, @finally and @synchronized) is supported
    331 by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
    332 is briefly documented in this manual and in the Objective-C 2.0 manuals
    333 from Apple.
    334 
    335  The Objective-C 2.0 language extensions and features are automatically
    336 enabled; they include properties (via the @property, @synthesize and
    337 @dynamic keywords), fast enumeration (not available in Objective-C++),
    338 attributes for methods (such as deprecated, noreturn, sentinel,
    339 format), the unused attribute for method arguments, the @package
    340 keyword for instance variables and the @optional and @required keywords
    341 in protocols.  You can disable all these Objective-C 2.0 language
    342 extensions with the option `-fobjc-std=objc1', which causes the
    343 compiler to recognize the same Objective-C language syntax recognized
    344 by GCC 4.0, and to produce an error if one of the new features is used.
    345 
    346  GCC has currently no support for non-fragile instance variables.
    347 
    348  The authoritative manual on Objective-C 2.0 is available from Apple:
    349    *
    350      `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
    351 
    352  For more information concerning the history of Objective-C that is
    353 available online, see `http://gcc.gnu.org/readings.html'
    354 
    355 2.4 Go language
    356 ===============
    357 
    358 The Go language continues to evolve as of this writing; see the current
    359 language specifications (http://golang.org/doc/go_spec.html).  At
    360 present there are no specific versions of Go, and there is no way to
    361 describe the language supported by GCC in terms of a specific version.
    362 In general GCC tracks the evolving specification closely, and any given
    363 release will support the language as of the date that the release was
    364 frozen.
    365 
    366 2.5 References for other languages
    367 ==================================
    368 
    369 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
    370 conformance and compatibility of the Ada compiler.
    371 
    372  *Note Standards: (gfortran)Standards, for details of standards
    373 supported by GNU Fortran.
    374 
    375  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
    376 details of compatibility between `gcj' and the Java Platform.
    377 
    378 
    379 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
    380 
    381 3 GCC Command Options
    382 *********************
    383 
    384 When you invoke GCC, it normally does preprocessing, compilation,
    385 assembly and linking.  The "overall options" allow you to stop this
    386 process at an intermediate stage.  For example, the `-c' option says
    387 not to run the linker.  Then the output consists of object files output
    388 by the assembler.
    389 
    390  Other options are passed on to one stage of processing.  Some options
    391 control the preprocessor and others the compiler itself.  Yet other
    392 options control the assembler and linker; most of these are not
    393 documented here, since you rarely need to use any of them.
    394 
    395  Most of the command line options that you can use with GCC are useful
    396 for C programs; when an option is only useful with another language
    397 (usually C++), the explanation says so explicitly.  If the description
    398 for a particular option does not mention a source language, you can use
    399 that option with all supported languages.
    400 
    401  *Note Compiling C++ Programs: Invoking G++, for a summary of special
    402 options for compiling C++ programs.
    403 
    404  The `gcc' program accepts options and file names as operands.  Many
    405 options have multi-letter names; therefore multiple single-letter
    406 options may _not_ be grouped: `-dv' is very different from `-d -v'.
    407 
    408  You can mix options and other arguments.  For the most part, the order
    409 you use doesn't matter.  Order does matter when you use several options
    410 of the same kind; for example, if you specify `-L' more than once, the
    411 directories are searched in the order specified.  Also, the placement
    412 of the `-l' option is significant.
    413 
    414  Many options have long names starting with `-f' or with `-W'--for
    415 example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
    416 have both positive and negative forms; the negative form of `-ffoo'
    417 would be `-fno-foo'.  This manual documents only one of these two
    418 forms, whichever one is not the default.
    419 
    420  *Note Option Index::, for an index to GCC's options.
    421 
    422 * Menu:
    423 
    424 * Option Summary::      Brief list of all options, without explanations.
    425 * Overall Options::     Controlling the kind of output:
    426                         an executable, object files, assembler files,
    427                         or preprocessed source.
    428 * Invoking G++::        Compiling C++ programs.
    429 * C Dialect Options::   Controlling the variant of C language compiled.
    430 * C++ Dialect Options:: Variations on C++.
    431 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
    432                         and Objective-C++.
    433 * Language Independent Options:: Controlling how diagnostics should be
    434                         formatted.
    435 * Warning Options::     How picky should the compiler be?
    436 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
    437 * Optimize Options::    How much optimization?
    438 * Preprocessor Options:: Controlling header files and macro definitions.
    439                          Also, getting dependency information for Make.
    440 * Assembler Options::   Passing options to the assembler.
    441 * Link Options::        Specifying libraries and so on.
    442 * Directory Options::   Where to find header files and libraries.
    443                         Where to find the compiler executable files.
    444 * Spec Files::          How to pass switches to sub-processes.
    445 * Target Options::      Running a cross-compiler, or an old version of GCC.
    446 * Submodel Options::    Specifying minor hardware or convention variations,
    447                         such as 68010 vs 68020.
    448 * Code Gen Options::    Specifying conventions for function calls, data layout
    449                         and register usage.
    450 * Environment Variables:: Env vars that affect GCC.
    451 * Precompiled Headers:: Compiling a header once, and using it many times.
    452 
    453 
    454 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
    455 
    456 3.1 Option Summary
    457 ==================
    458 
    459 Here is a summary of all the options, grouped by type.  Explanations are
    460 in the following sections.
    461 
    462 _Overall Options_
    463      *Note Options Controlling the Kind of Output: Overall Options.
    464           -c  -S  -E  -o FILE  -no-canonical-prefixes
    465           -pipe  -pass-exit-codes
    466           -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
    467           --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
    468           -fdump-ada-spec[-slim]
    469       -fdump-go-spec=FILE
    470 
    471 _C Language Options_
    472      *Note Options Controlling C Dialect: C Dialect Options.
    473           -ansi  -std=STANDARD  -fgnu89-inline
    474           -aux-info FILENAME
    475           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
    476           -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
    477           -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
    478           -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
    479           -fsigned-bitfields  -fsigned-char
    480           -funsigned-bitfields  -funsigned-char
    481 
    482 _C++ Language Options_
    483      *Note Options Controlling C++ Dialect: C++ Dialect Options.
    484           -fabi-version=N  -fno-access-control  -fcheck-new
    485           -fconserve-space  -fconstexpr-depth=N  -ffriend-injection
    486           -fno-elide-constructors
    487           -fno-enforce-eh-specs
    488           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
    489           -fno-implicit-templates
    490           -fno-implicit-inline-templates
    491           -fno-implement-inlines  -fms-extensions
    492           -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
    493           -fno-optional-diags  -fpermissive
    494           -fno-pretty-templates
    495           -frepo  -fno-rtti  -fstats  -ftemplate-depth=N
    496           -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
    497           -fno-default-inline  -fvisibility-inlines-hidden
    498           -fvisibility-ms-compat
    499           -Wabi  -Wconversion-null  -Wctor-dtor-privacy
    500           -Wnoexcept -Wnon-virtual-dtor  -Wreorder
    501           -Weffc++  -Wstrict-null-sentinel
    502           -Wno-non-template-friend  -Wold-style-cast
    503           -Woverloaded-virtual  -Wno-pmf-conversions
    504           -Wsign-promo
    505 
    506 _Objective-C and Objective-C++ Language Options_
    507      *Note Options Controlling Objective-C and Objective-C++ Dialects:
    508      Objective-C and Objective-C++ Dialect Options.
    509           -fconstant-string-class=CLASS-NAME
    510           -fgnu-runtime  -fnext-runtime
    511           -fno-nil-receivers
    512           -fobjc-abi-version=N
    513           -fobjc-call-cxx-cdtors
    514           -fobjc-direct-dispatch
    515           -fobjc-exceptions
    516           -fobjc-gc
    517           -fobjc-nilcheck
    518           -fobjc-std=objc1
    519           -freplace-objc-classes
    520           -fzero-link
    521           -gen-decls
    522           -Wassign-intercept
    523           -Wno-protocol  -Wselector
    524           -Wstrict-selector-match
    525           -Wundeclared-selector
    526 
    527 _Language Independent Options_
    528      *Note Options to Control Diagnostic Messages Formatting: Language
    529      Independent Options.
    530           -fmessage-length=N
    531           -fdiagnostics-show-location=[once|every-line]
    532           -fno-diagnostics-show-option
    533 
    534 _Warning Options_
    535      *Note Options to Request or Suppress Warnings: Warning Options.
    536           -fsyntax-only  -fmax-errors=N  -pedantic
    537           -pedantic-errors
    538           -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds
    539           -Wno-attributes -Wno-builtin-macro-redefined
    540           -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
    541           -Wchar-subscripts -Wclobbered  -Wcomment
    542           -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
    543           -Wno-deprecated-declarations -Wdisabled-optimization
    544           -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
    545           -Wno-endif-labels -Werror  -Werror=*
    546           -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
    547           -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
    548           -Wformat-security  -Wformat-y2k
    549           -Wframe-larger-than=LEN -Wjump-misses-init -Wignored-qualifiers
    550           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
    551           -Winit-self  -Winline -Wmaybe-uninitialized
    552           -Wno-int-to-pointer-cast -Wno-invalid-offsetof
    553           -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
    554           -Wlogical-op -Wlong-long
    555           -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers
    556           -Wmissing-format-attribute  -Wmissing-include-dirs
    557           -Wno-mudflap
    558           -Wno-multichar  -Wnonnull  -Wno-overflow
    559           -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
    560           -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
    561           -Wpointer-arith  -Wno-pointer-to-int-cast
    562           -Wreal-conversion  -Wredundant-decls  -Wreturn-type -Wripa-opt-mismatch
    563           -Wself-assign  -Wself-assign-non-pod  -Wsequence-point  -Wshadow
    564           -Wshadow-compatible-local -Wshadow-local
    565           -Wsign-compare  -Wsign-conversion  -Wstack-protector
    566           -Wstrict-aliasing -Wstrict-aliasing=n
    567           -Wstrict-overflow -Wstrict-overflow=N
    568           -Wsuggest-attribute=[pure|const|noreturn]
    569           -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
    570           -Wsystem-headers -Wthread-safety -Wthread-unguarded-var
    571           -Wthread-unguarded-func -Wthread-mismatched-lock-order
    572           -Wthread-mismatched-lock-acq-rel -Wthread-reentrant-lock
    573           -Wthread-unsupported-lock-name -Wthread-attr-bind-param
    574           -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
    575           -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
    576           -Wunsuffixed-float-constants  -Wunused  -Wunused-function
    577           -Wunused-label  -Wunused-parameter -Wno-unused-result -Wunused-value
    578           -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
    579           -Wvariadic-macros -Wvla -Wvolatile-register-var  -Wwrite-strings
    580 
    581 _C and Objective-C-only Warning Options_
    582           -Wbad-function-cast  -Wmissing-declarations
    583           -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
    584           -Wold-style-declaration  -Wold-style-definition
    585           -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
    586           -Wdeclaration-after-statement -Wpointer-sign
    587 
    588 _Debugging Options_
    589      *Note Options for Debugging Your Program or GCC: Debugging Options.
    590           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
    591           -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
    592           -fdisable-ipa-PASS_NAME
    593           -fdisable-rtl-PASS_NAME
    594           -fdisable-rtl-PASS-NAME=RANGE-LIST
    595           -fdisable-tree-PASS_NAME
    596           -fdisable-tree-PASS-NAME=RANGE-LIST
    597           -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
    598           -fdump-translation-unit[-N]
    599           -fdump-class-hierarchy[-N]
    600           -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
    601           -fdump-passes
    602           -fdump-statistics
    603           -fdump-tree-all
    604           -fdump-tree-original[-N]
    605           -fdump-tree-optimized[-N]
    606           -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
    607           -fdump-tree-ch
    608           -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
    609           -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
    610           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
    611           -fdump-tree-dom[-N]
    612           -fdump-tree-dse[-N]
    613           -fdump-tree-phiprop[-N]
    614           -fdump-tree-phiopt[-N]
    615           -fdump-tree-forwprop[-N]
    616           -fdump-tree-copyrename[-N]
    617           -fdump-tree-nrv -fdump-tree-vect
    618           -fdump-tree-sink
    619           -fdump-tree-sra[-N]
    620           -fdump-tree-forwprop[-N]
    621           -fdump-tree-fre[-N]
    622           -fdump-tree-vrp[-N]
    623           -ftree-vectorizer-verbose=N
    624           -fdump-tree-storeccp[-N]
    625           -fdump-final-insns=FILE
    626           -fcompare-debug[=OPTS]  -fcompare-debug-second
    627           -feliminate-dwarf2-dups -feliminate-unused-debug-types
    628           -feliminate-unused-debug-symbols -femit-class-debug-always
    629           -fenable-icf-debug
    630           -fenable-KIND-PASS
    631           -fenable-KIND-PASS=RANGE-LIST
    632           -fdebug-types-section
    633           -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
    634           -frandom-seed=STRING -fsched-verbose=N
    635           -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
    636           -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
    637           -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
    638           -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
    639           -ggdb  -gmlt  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
    640           -gvms  -gxcoff  -gxcoff+
    641           -fno-merge-debug-strings -fno-dwarf2-cfi-asm
    642           -fdebug-prefix-map=OLD=NEW
    643           -femit-struct-debug-baseonly -femit-struct-debug-reduced
    644           -femit-struct-debug-detailed[=SPEC-LIST]
    645           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
    646           -print-multi-directory  -print-multi-lib  -print-multi-os-directory
    647           -print-prog-name=PROGRAM  -print-search-dirs  -Q
    648           -print-sysroot -print-sysroot-headers-suffix
    649           -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
    650 
    651 _Optimization Options_
    652      *Note Options that Control Optimization: Optimize Options.
    653           -falign-functions[=N] -falign-jumps[=N]
    654           -falign-labels[=N] -falign-loops[=N] -fassociative-math
    655           -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize
    656           -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves
    657           -fcallgraph-profiles-sections -fcheck-data-deps -fclone-hot-version-paths
    658           -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 -fdce -fdelayed-branch
    663           -fdelete-null-pointer-checks -fdse -fdevirtualize -fdse
    664           -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math
    665           -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 -fif-conversion -fif-conversion2 -findirect-inlining
    669           -finline-functions -finline-functions-called-once -finline-limit=N
    670           -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg
    671           -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
    672           -fipa-struct-reorg -fira-algorithm=ALGORITHM
    673           -fira-region=REGION
    674           -fira-loop-pressure -fno-ira-share-save-slots
    675           -fno-ira-share-spill-slots -fira-verbose=N
    676           -fivopts -fkeep-inline-functions -fkeep-static-consts
    677           -floop-block -floop-flatten -floop-interchange -floop-strip-mine
    678           -floop-parallelize-all -flto -flto-compression-level
    679           -flto-partition=ALG -flto-report -fmerge-all-constants
    680           -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
    681           -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
    682           -fno-default-inline
    683           -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
    684           -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
    685           -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
    686           -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
    687           -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls
    688           -fpartial-inlining -fpeel-loops -fpredictive-commoning
    689           -fprefetch-loop-arrays
    690           -fprofile-correction -fprofile-dir=PATH -fprofile-generate
    691           -fprofile-generate=PATH -fprofile-generate-sampling
    692           -fprofile-use -fprofile-use=PATH -fprofile-values
    693           -fpmu-profile-generate=PMUOPTION
    694           -fpmu-profile-use=PMUOPTION
    695           -freciprocal-math -fregmove -frename-registers -freorder-blocks
    696           -frecord-gcc-switches-in-elf
    697           -freorder-blocks-and-partition -freorder-functions
    698           -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
    699           -fripa -fripa-disallow-asm-modules -fripa-disallow-opt-mismatch
    700           -fripa-no-promote-always-inline-func -fripa-verbose
    701           -fripa-peel-size-limit -fripa-unroll-size-limit -frounding-math
    702           -fsched2-use-superblocks -fsched-pressure
    703           -fsched-spec-load -fsched-spec-load-dangerous
    704           -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
    705           -fsched-group-heuristic -fsched-critical-path-heuristic
    706           -fsched-spec-insn-heuristic -fsched-rank-heuristic
    707           -fsched-last-insn-heuristic -fsched-dep-count-heuristic
    708           -fschedule-insns -fschedule-insns2 -fsection-anchors
    709           -fselective-scheduling -fselective-scheduling2
    710           -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
    711           -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
    712           -fsplit-wide-types -fstack-protector -fstack-protector-all
    713           -fstack-protector-strong -fstrict-aliasing -fstrict-overflow
    714           -fthread-jumps -ftracer -ftree-bit-ccp
    715           -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop
    716           -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
    717           -ftree-forwprop -ftree-fre -ftree-loop-if-convert
    718           -ftree-loop-if-convert-stores -ftree-loop-im
    719           -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
    720           -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
    721           -ftree-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc
    722           -ftree-sink -ftree-sra -ftree-switch-conversion
    723           -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
    724           -funit-at-a-time -funroll-all-loops -funroll-loops
    725           -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
    726           -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb
    727           -fwhole-program -fwpa -fuse-ld -fuse-linker-plugin
    728           --param NAME=VALUE
    729           -O  -O0  -O1  -O2  -O3  -Os -Ofast
    730 
    731 _Preprocessor Options_
    732      *Note Options Controlling the Preprocessor: Preprocessor Options.
    733           -AQUESTION=ANSWER
    734           -A-QUESTION[=ANSWER]
    735           -C  -dD  -dI  -dM  -dN
    736           -DMACRO[=DEFN]  -E  -H
    737           -idirafter DIR
    738           -include FILE  -imacros FILE
    739           -iprefix FILE  -iwithprefix DIR
    740           -iwithprefixbefore DIR  -isystem DIR
    741           -imultilib DIR -isysroot DIR
    742           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
    743           -P  -fworking-directory  -remap
    744           -trigraphs  -undef  -UMACRO  -Wp,OPTION
    745           -Xpreprocessor OPTION
    746 
    747 _Assembler Option_
    748      *Note Passing Options to the Assembler: Assembler Options.
    749           -Wa,OPTION  -Xassembler OPTION
    750 
    751 _Linker Options_
    752      *Note Options for Linking: Link Options.
    753           OBJECT-FILE-NAME  -lLIBRARY
    754           -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
    755           -s  -static  -static-libgcc  -static-libstdc++ -shared
    756           -shared-libgcc  -symbolic
    757           -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
    758           -u SYMBOL
    759 
    760 _Directory Options_
    761      *Note Options for Directory Search: Directory Options.
    762           -BPREFIX -IDIR -iplugindir=DIR
    763 
    764      -iquoteDIR -LDIR -specs=FILE -I- -sysroot=DIR
    765 
    766 _Machine Dependent Options_
    767      *Note Hardware Models and Configurations: Submodel Options.
    768 
    769      _ARC Options_
    770           -EB  -EL
    771           -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
    772           -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
    773 
    774      _ARM Options_
    775           -mapcs-frame  -mno-apcs-frame
    776           -mabi=NAME
    777           -mapcs-stack-check  -mno-apcs-stack-check
    778           -mapcs-float  -mno-apcs-float
    779           -mapcs-reentrant  -mno-apcs-reentrant
    780           -msched-prolog  -mno-sched-prolog
    781           -mlittle-endian  -mbig-endian  -mwords-little-endian
    782           -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
    783           -mfp16-format=NAME
    784           -mthumb-interwork  -mno-thumb-interwork
    785           -mcpu=NAME  -march=NAME  -mfpu=NAME
    786           -mstructure-size-boundary=N
    787           -mabort-on-noreturn
    788           -mlong-calls  -mno-long-calls
    789           -msingle-pic-base  -mno-single-pic-base
    790           -mpic-register=REG
    791           -mnop-fun-dllimport
    792           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
    793           -mpoke-function-name
    794           -mthumb  -marm
    795           -mtpcs-frame  -mtpcs-leaf-frame
    796           -mcaller-super-interworking  -mcallee-super-interworking
    797           -mtp=NAME
    798           -mword-relocations
    799           -mfix-cortex-m3-ldrd
    800 
    801      _AVR Options_
    802           -mmcu=MCU  -mno-interrupts
    803           -mcall-prologues  -mtiny-stack  -mint8
    804 
    805      _Blackfin Options_
    806           -mcpu=CPU[-SIREVISION]
    807           -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
    808           -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
    809           -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
    810           -mno-id-shared-library  -mshared-library-id=N
    811           -mleaf-id-shared-library  -mno-leaf-id-shared-library
    812           -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
    813           -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
    814           -micplb
    815 
    816      _CRIS Options_
    817           -mcpu=CPU  -march=CPU  -mtune=CPU
    818           -mmax-stack-frame=N  -melinux-stacksize=N
    819           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
    820           -mstack-align  -mdata-align  -mconst-align
    821           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
    822           -melf  -maout  -melinux  -mlinux  -sim  -sim2
    823           -mmul-bug-workaround  -mno-mul-bug-workaround
    824 
    825      _CRX Options_
    826           -mmac -mpush-args
    827 
    828      _Darwin Options_
    829           -all_load  -allowable_client  -arch  -arch_errors_fatal
    830           -arch_only  -bind_at_load  -bundle  -bundle_loader
    831           -client_name  -compatibility_version  -current_version
    832           -dead_strip
    833           -dependency-file  -dylib_file  -dylinker_install_name
    834           -dynamic  -dynamiclib  -exported_symbols_list
    835           -filelist  -flat_namespace  -force_cpusubtype_ALL
    836           -force_flat_namespace  -headerpad_max_install_names
    837           -iframework
    838           -image_base  -init  -install_name  -keep_private_externs
    839           -multi_module  -multiply_defined  -multiply_defined_unused
    840           -noall_load   -no_dead_strip_inits_and_terms
    841           -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
    842           -pagezero_size  -prebind  -prebind_all_twolevel_modules
    843           -private_bundle  -read_only_relocs  -sectalign
    844           -sectobjectsymbols  -whyload  -seg1addr
    845           -sectcreate  -sectobjectsymbols  -sectorder
    846           -segaddr -segs_read_only_addr -segs_read_write_addr
    847           -seg_addr_table  -seg_addr_table_filename  -seglinkedit
    848           -segprot  -segs_read_only_addr  -segs_read_write_addr
    849           -single_module  -static  -sub_library  -sub_umbrella
    850           -twolevel_namespace  -umbrella  -undefined
    851           -unexported_symbols_list  -weak_reference_mismatches
    852           -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
    853           -mkernel -mone-byte-bool
    854 
    855      _DEC Alpha Options_
    856           -mno-fp-regs  -msoft-float  -malpha-as  -mgas
    857           -mieee  -mieee-with-inexact  -mieee-conformant
    858           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
    859           -mtrap-precision=MODE  -mbuild-constants
    860           -mcpu=CPU-TYPE  -mtune=CPU-TYPE
    861           -mbwx  -mmax  -mfix  -mcix
    862           -mfloat-vax  -mfloat-ieee
    863           -mexplicit-relocs  -msmall-data  -mlarge-data
    864           -msmall-text  -mlarge-text
    865           -mmemory-latency=TIME
    866 
    867      _DEC Alpha/VMS Options_
    868           -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
    869 
    870      _FR30 Options_
    871           -msmall-model -mno-lsim
    872 
    873      _FRV Options_
    874           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
    875           -mhard-float  -msoft-float
    876           -malloc-cc  -mfixed-cc  -mdword  -mno-dword
    877           -mdouble  -mno-double
    878           -mmedia  -mno-media  -mmuladd  -mno-muladd
    879           -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
    880           -mlinked-fp  -mlong-calls  -malign-labels
    881           -mlibrary-pic  -macc-4  -macc-8
    882           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
    883           -moptimize-membar -mno-optimize-membar
    884           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
    885           -mvliw-branch  -mno-vliw-branch
    886           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
    887           -mno-nested-cond-exec  -mtomcat-stats
    888           -mTLS -mtls
    889           -mcpu=CPU
    890 
    891      _GNU/Linux Options_
    892           -mglibc -muclibc -mbionic -mandroid
    893           -tno-android-cc -tno-android-ld
    894 
    895      _H8/300 Options_
    896           -mrelax  -mh  -ms  -mn  -mint32  -malign-300
    897 
    898      _HPPA Options_
    899           -march=ARCHITECTURE-TYPE
    900           -mbig-switch  -mdisable-fpregs  -mdisable-indexing
    901           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
    902           -mfixed-range=REGISTER-RANGE
    903           -mjump-in-delay -mlinker-opt -mlong-calls
    904           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
    905           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
    906           -mno-jump-in-delay  -mno-long-load-store
    907           -mno-portable-runtime  -mno-soft-float
    908           -mno-space-regs  -msoft-float  -mpa-risc-1-0
    909           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
    910           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
    911           -munix=UNIX-STD  -nolibdld  -static  -threads
    912 
    913      _i386 and x86-64 Options_
    914           -mtune=CPU-TYPE  -march=CPU-TYPE
    915           -mfpmath=UNIT
    916           -masm=DIALECT  -mno-fancy-math-387
    917           -mno-fp-ret-in-387  -msoft-float
    918           -mno-wide-multiply  -mrtd  -malign-double
    919           -mpreferred-stack-boundary=NUM
    920           -mincoming-stack-boundary=NUM
    921           -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip -mvzeroupper
    922           -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
    923           -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfused-madd
    924           -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlwp
    925           -mthreads  -mno-align-stringops  -minline-all-stringops
    926           -minline-stringops-dynamically -mstringop-strategy=ALG
    927           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
    928           -m96bit-long-double  -mregparm=NUM  -msseregparm
    929           -mveclibabi=TYPE -mvect8-ret-in-mem
    930           -mpc32 -mpc64 -mpc80 -mstackrealign
    931           -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
    932           -mcmodel=CODE-MODEL -mabi=NAME
    933           -m32  -m64 -mlarge-data-threshold=NUM
    934           -msse2avx -mfentry -m8bit-idiv
    935           -mavx256-split-unaligned-load -mavx256-split-unaligned-store
    936 
    937      _i386 and x86-64 Windows Options_
    938           -mconsole -mcygwin -mno-cygwin -mdll
    939           -mnop-fun-dllimport -mthread
    940           -municode -mwin32 -mwindows -fno-set-stack-executable
    941 
    942      _IA-64 Options_
    943           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
    944           -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
    945           -mconstant-gp  -mauto-pic  -mfused-madd
    946           -minline-float-divide-min-latency
    947           -minline-float-divide-max-throughput
    948           -mno-inline-float-divide
    949           -minline-int-divide-min-latency
    950           -minline-int-divide-max-throughput
    951           -mno-inline-int-divide
    952           -minline-sqrt-min-latency -minline-sqrt-max-throughput
    953           -mno-inline-sqrt
    954           -mdwarf2-asm -mearly-stop-bits
    955           -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
    956           -mtune=CPU-TYPE -milp32 -mlp64
    957           -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
    958           -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
    959           -msched-spec-ldc -msched-spec-control-ldc
    960           -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
    961           -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
    962           -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
    963           -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
    964 
    965      _IA-64/VMS Options_
    966           -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
    967 
    968      _LM32 Options_
    969           -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
    970           -msign-extend-enabled -muser-enabled
    971 
    972      _M32R/D Options_
    973           -m32r2 -m32rx -m32r
    974           -mdebug
    975           -malign-loops -mno-align-loops
    976           -missue-rate=NUMBER
    977           -mbranch-cost=NUMBER
    978           -mmodel=CODE-SIZE-MODEL-TYPE
    979           -msdata=SDATA-TYPE
    980           -mno-flush-func -mflush-func=NAME
    981           -mno-flush-trap -mflush-trap=NUMBER
    982           -G NUM
    983 
    984      _M32C Options_
    985           -mcpu=CPU -msim -memregs=NUMBER
    986 
    987      _M680x0 Options_
    988           -march=ARCH  -mcpu=CPU  -mtune=TUNE
    989           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
    990           -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
    991           -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
    992           -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
    993           -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
    994           -malign-int  -mstrict-align  -msep-data  -mno-sep-data
    995           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
    996           -mxgot -mno-xgot
    997 
    998      _M68hc1x Options_
    999           -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
   1000           -mauto-incdec  -minmax  -mlong-calls  -mshort
   1001           -msoft-reg-count=COUNT
   1002 
   1003      _MCore Options_
   1004           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
   1005           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
   1006           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
   1007           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
   1008           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
   1009 
   1010      _MeP Options_
   1011           -mabsdiff -mall-opts -maverage -mbased=N -mbitops
   1012           -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
   1013           -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
   1014           -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
   1015           -mtiny=N
   1016 
   1017      _MicroBlaze Options_
   1018           -msoft-float -mhard-float -msmall-divides -mcpu=CPU
   1019           -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
   1020           -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
   1021           -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
   1022           -mxl-mode-APP-MODEL
   1023 
   1024      _MIPS Options_
   1025           -EL  -EB  -march=ARCH  -mtune=ARCH
   1026           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
   1027           -mips64  -mips64r2
   1028           -mips16  -mno-mips16  -mflip-mips16
   1029           -minterlink-mips16  -mno-interlink-mips16
   1030           -mabi=ABI  -mabicalls  -mno-abicalls
   1031           -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
   1032           -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
   1033           -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
   1034           -mfpu=FPU-TYPE
   1035           -msmartmips  -mno-smartmips
   1036           -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
   1037           -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
   1038           -mlong64  -mlong32  -msym32  -mno-sym32
   1039           -GNUM  -mlocal-sdata  -mno-local-sdata
   1040           -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
   1041           -membedded-data  -mno-embedded-data
   1042           -muninit-const-in-rodata  -mno-uninit-const-in-rodata
   1043           -mcode-readable=SETTING
   1044           -msplit-addresses  -mno-split-addresses
   1045           -mexplicit-relocs  -mno-explicit-relocs
   1046           -mcheck-zero-division  -mno-check-zero-division
   1047           -mdivide-traps  -mdivide-breaks
   1048           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
   1049           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
   1050           -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
   1051           -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120
   1052           -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
   1053           -mflush-func=FUNC  -mno-flush-func
   1054           -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
   1055           -mfp-exceptions -mno-fp-exceptions
   1056           -mvr4130-align -mno-vr4130-align -msynci -mno-synci
   1057           -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
   1058 
   1059      _MMIX Options_
   1060           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
   1061           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
   1062           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
   1063           -mno-base-addresses  -msingle-exit  -mno-single-exit
   1064 
   1065      _MN10300 Options_
   1066           -mmult-bug  -mno-mult-bug
   1067           -mno-am33 -mam33 -mam33-2 -mam34
   1068           -mtune=CPU-TYPE
   1069           -mreturn-pointer-on-d0
   1070           -mno-crt0  -mrelax -mliw
   1071 
   1072      _PDP-11 Options_
   1073           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
   1074           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
   1075           -mint16  -mno-int32  -mfloat32  -mno-float64
   1076           -mfloat64  -mno-float32  -mabshi  -mno-abshi
   1077           -mbranch-expensive  -mbranch-cheap
   1078           -munix-asm  -mdec-asm
   1079 
   1080      _picoChip Options_
   1081           -mae=AE_TYPE -mvliw-lookahead=N
   1082           -msymbol-as-address -mno-inefficient-warnings
   1083 
   1084      _PowerPC Options_ See RS/6000 and PowerPC Options.
   1085 
   1086      _RS/6000 and PowerPC Options_
   1087           -mcpu=CPU-TYPE
   1088           -mtune=CPU-TYPE
   1089           -mcmodel=CODE-MODEL
   1090           -mpower  -mno-power  -mpower2  -mno-power2
   1091           -mpowerpc  -mpowerpc64  -mno-powerpc
   1092           -maltivec  -mno-altivec
   1093           -mpowerpc-gpopt  -mno-powerpc-gpopt
   1094           -mpowerpc-gfxopt  -mno-powerpc-gfxopt
   1095           -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
   1096           -mfprnd  -mno-fprnd
   1097           -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
   1098           -mnew-mnemonics  -mold-mnemonics
   1099           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
   1100           -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
   1101           -malign-power  -malign-natural
   1102           -msoft-float  -mhard-float  -mmultiple  -mno-multiple
   1103           -msingle-float -mdouble-float -msimple-fpu
   1104           -mstring  -mno-string  -mupdate  -mno-update
   1105           -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
   1106           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
   1107           -mstrict-align  -mno-strict-align  -mrelocatable
   1108           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
   1109           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
   1110           -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
   1111           -mprioritize-restricted-insns=PRIORITY
   1112           -msched-costly-dep=DEPENDENCE_TYPE
   1113           -minsert-sched-nops=SCHEME
   1114           -mcall-sysv  -mcall-netbsd
   1115           -maix-struct-return  -msvr4-struct-return
   1116           -mabi=ABI-TYPE -msecure-plt -mbss-plt
   1117           -mblock-move-inline-limit=NUM
   1118           -misel -mno-isel
   1119           -misel=yes  -misel=no
   1120           -mspe -mno-spe
   1121           -mspe=yes  -mspe=no
   1122           -mpaired
   1123           -mgen-cell-microcode -mwarn-cell-microcode
   1124           -mvrsave -mno-vrsave
   1125           -mmulhw -mno-mulhw
   1126           -mdlmzb -mno-dlmzb
   1127           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
   1128           -mprototype  -mno-prototype
   1129           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
   1130           -msdata=OPT  -mvxworks  -G NUM  -pthread
   1131           -mrecip -mrecip=OPT -mno-recip -mrecip-precision
   1132           -mno-recip-precision
   1133           -mveclibabi=TYPE -mfriz -mno-friz
   1134 
   1135      _RX Options_
   1136           -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
   1137           -mcpu=
   1138           -mbig-endian-data -mlittle-endian-data
   1139           -msmall-data
   1140           -msim  -mno-sim
   1141           -mas100-syntax -mno-as100-syntax
   1142           -mrelax
   1143           -mmax-constant-size=
   1144           -mint-register=
   1145           -msave-acc-in-interrupts
   1146 
   1147      _S/390 and zSeries Options_
   1148           -mtune=CPU-TYPE  -march=CPU-TYPE
   1149           -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
   1150           -mlong-double-64 -mlong-double-128
   1151           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
   1152           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
   1153           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
   1154           -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
   1155           -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
   1156 
   1157      _Score Options_
   1158           -meb -mel
   1159           -mnhwloop
   1160           -muls
   1161           -mmac
   1162           -mscore5 -mscore5u -mscore7 -mscore7d
   1163 
   1164      _SH Options_
   1165           -m1  -m2  -m2e
   1166           -m2a-nofpu -m2a-single-only -m2a-single -m2a
   1167           -m3  -m3e
   1168           -m4-nofpu  -m4-single-only  -m4-single  -m4
   1169           -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
   1170           -m5-64media  -m5-64media-nofpu
   1171           -m5-32media  -m5-32media-nofpu
   1172           -m5-compact  -m5-compact-nofpu
   1173           -mb  -ml  -mdalign  -mrelax
   1174           -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
   1175           -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace
   1176           -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
   1177           -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
   1178           -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
   1179           -maccumulate-outgoing-args -minvalid-symbols
   1180 
   1181      _Solaris 2 Options_
   1182           -mimpure-text  -mno-impure-text
   1183           -threads -pthreads -pthread
   1184 
   1185      _SPARC Options_
   1186           -mcpu=CPU-TYPE
   1187           -mtune=CPU-TYPE
   1188           -mcmodel=CODE-MODEL
   1189           -m32  -m64  -mapp-regs  -mno-app-regs
   1190           -mfaster-structs  -mno-faster-structs
   1191           -mfpu  -mno-fpu  -mhard-float  -msoft-float
   1192           -mhard-quad-float  -msoft-quad-float
   1193           -mlittle-endian
   1194           -mstack-bias  -mno-stack-bias
   1195           -munaligned-doubles  -mno-unaligned-doubles
   1196           -mv8plus  -mno-v8plus  -mvis  -mno-vis
   1197           -mfix-at697f
   1198 
   1199      _SPU Options_
   1200           -mwarn-reloc -merror-reloc
   1201           -msafe-dma -munsafe-dma
   1202           -mbranch-hints
   1203           -msmall-mem -mlarge-mem -mstdmain
   1204           -mfixed-range=REGISTER-RANGE
   1205           -mea32 -mea64
   1206           -maddress-space-conversion -mno-address-space-conversion
   1207           -mcache-size=CACHE-SIZE
   1208           -matomic-updates -mno-atomic-updates
   1209 
   1210      _System V Options_
   1211           -Qy  -Qn  -YP,PATHS  -Ym,DIR
   1212 
   1213      _V850 Options_
   1214           -mlong-calls  -mno-long-calls  -mep  -mno-ep
   1215           -mprolog-function  -mno-prolog-function  -mspace
   1216           -mtda=N  -msda=N  -mzda=N
   1217           -mapp-regs  -mno-app-regs
   1218           -mdisable-callt  -mno-disable-callt
   1219           -mv850e2v3
   1220           -mv850e2
   1221           -mv850e1 -mv850es
   1222           -mv850e
   1223           -mv850  -mbig-switch
   1224 
   1225      _VAX Options_
   1226           -mg  -mgnu  -munix
   1227 
   1228      _VxWorks Options_
   1229           -mrtp  -non-static  -Bstatic  -Bdynamic
   1230           -Xbind-lazy  -Xbind-now
   1231 
   1232      _x86-64 Options_ See i386 and x86-64 Options.
   1233 
   1234      _Xstormy16 Options_
   1235           -msim
   1236 
   1237      _Xtensa Options_
   1238           -mconst16 -mno-const16
   1239           -mfused-madd  -mno-fused-madd
   1240           -mforce-no-pic
   1241           -mserialize-volatile  -mno-serialize-volatile
   1242           -mtext-section-literals  -mno-text-section-literals
   1243           -mtarget-align  -mno-target-align
   1244           -mlongcalls  -mno-longcalls
   1245 
   1246      _zSeries Options_ See S/390 and zSeries Options.
   1247 
   1248 _Code Generation Options_
   1249      *Note Options for Code Generation Conventions: Code Gen Options.
   1250           -fcall-saved-REG  -fcall-used-REG
   1251           -ffixed-REG  -fexceptions
   1252           -fnon-call-exceptions  -funwind-tables
   1253           -fasynchronous-unwind-tables
   1254           -finhibit-size-directive  -finstrument-functions
   1255           -finstrument-functions-exclude-function-list=SYM,SYM,...
   1256           -finstrument-functions-exclude-file-list=FILE,FILE,...
   1257           -fno-common  -fno-ident
   1258           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
   1259           -fno-jump-tables
   1260           -frecord-gcc-switches
   1261           -freg-struct-return  -fshort-enums
   1262           -fshort-double  -fshort-wchar
   1263           -fverbose-asm  -fpack-struct[=N]  -fstack-check
   1264           -fstack-limit-register=REG  -fstack-limit-symbol=SYM
   1265           -fno-stack-limit -fsplit-stack
   1266           -fleading-underscore  -ftls-model=MODEL
   1267           -ftrapv  -fwrapv  -fbounds-check
   1268           -fvisibility -fstrict-volatile-bitfields
   1269 
   1270 
   1271 * Menu:
   1272 
   1273 * Overall Options::     Controlling the kind of output:
   1274                         an executable, object files, assembler files,
   1275                         or preprocessed source.
   1276 * C Dialect Options::   Controlling the variant of C language compiled.
   1277 * C++ Dialect Options:: Variations on C++.
   1278 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
   1279                         and Objective-C++.
   1280 * Language Independent Options:: Controlling how diagnostics should be
   1281                         formatted.
   1282 * Warning Options::     How picky should the compiler be?
   1283 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
   1284 * Optimize Options::    How much optimization?
   1285 * Preprocessor Options:: Controlling header files and macro definitions.
   1286                          Also, getting dependency information for Make.
   1287 * Assembler Options::   Passing options to the assembler.
   1288 * Link Options::        Specifying libraries and so on.
   1289 * Directory Options::   Where to find header files and libraries.
   1290                         Where to find the compiler executable files.
   1291 * Spec Files::          How to pass switches to sub-processes.
   1292 * Target Options::      Running a cross-compiler, or an old version of GCC.
   1293 
   1294 
   1295 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
   1296 
   1297 3.2 Options Controlling the Kind of Output
   1298 ==========================================
   1299 
   1300 Compilation can involve up to four stages: preprocessing, compilation
   1301 proper, assembly and linking, always in that order.  GCC is capable of
   1302 preprocessing and compiling several files either into several assembler
   1303 input files, or into one assembler input file; then each assembler
   1304 input file produces an object file, and linking combines all the object
   1305 files (those newly compiled, and those specified as input) into an
   1306 executable file.
   1307 
   1308  For any given input file, the file name suffix determines what kind of
   1309 compilation is done:
   1310 
   1311 `FILE.c'
   1312      C source code which must be preprocessed.
   1313 
   1314 `FILE.i'
   1315      C source code which should not be preprocessed.
   1316 
   1317 `FILE.ii'
   1318      C++ source code which should not be preprocessed.
   1319 
   1320 `FILE.m'
   1321      Objective-C source code.  Note that you must link with the
   1322      `libobjc' library to make an Objective-C program work.
   1323 
   1324 `FILE.mi'
   1325      Objective-C source code which should not be preprocessed.
   1326 
   1327 `FILE.mm'
   1328 `FILE.M'
   1329      Objective-C++ source code.  Note that you must link with the
   1330      `libobjc' library to make an Objective-C++ program work.  Note
   1331      that `.M' refers to a literal capital M.
   1332 
   1333 `FILE.mii'
   1334      Objective-C++ source code which should not be preprocessed.
   1335 
   1336 `FILE.h'
   1337      C, C++, Objective-C or Objective-C++ header file to be turned into
   1338      a precompiled header (default), or C, C++ header file to be turned
   1339      into an Ada spec (via the `-fdump-ada-spec' switch).
   1340 
   1341 `FILE.cc'
   1342 `FILE.cp'
   1343 `FILE.cxx'
   1344 `FILE.cpp'
   1345 `FILE.CPP'
   1346 `FILE.c++'
   1347 `FILE.C'
   1348      C++ source code which must be preprocessed.  Note that in `.cxx',
   1349      the last two letters must both be literally `x'.  Likewise, `.C'
   1350      refers to a literal capital C.
   1351 
   1352 `FILE.mm'
   1353 `FILE.M'
   1354      Objective-C++ source code which must be preprocessed.
   1355 
   1356 `FILE.mii'
   1357      Objective-C++ source code which should not be preprocessed.
   1358 
   1359 `FILE.hh'
   1360 `FILE.H'
   1361 `FILE.hp'
   1362 `FILE.hxx'
   1363 `FILE.hpp'
   1364 `FILE.HPP'
   1365 `FILE.h++'
   1366 `FILE.tcc'
   1367      C++ header file to be turned into a precompiled header or Ada spec.
   1368 
   1369 `FILE.f'
   1370 `FILE.for'
   1371 `FILE.ftn'
   1372      Fixed form Fortran source code which should not be preprocessed.
   1373 
   1374 `FILE.F'
   1375 `FILE.FOR'
   1376 `FILE.fpp'
   1377 `FILE.FPP'
   1378 `FILE.FTN'
   1379      Fixed form Fortran source code which must be preprocessed (with
   1380      the traditional preprocessor).
   1381 
   1382 `FILE.f90'
   1383 `FILE.f95'
   1384 `FILE.f03'
   1385 `FILE.f08'
   1386      Free form Fortran source code which should not be preprocessed.
   1387 
   1388 `FILE.F90'
   1389 `FILE.F95'
   1390 `FILE.F03'
   1391 `FILE.F08'
   1392      Free form Fortran source code which must be preprocessed (with the
   1393      traditional preprocessor).
   1394 
   1395 `FILE.go'
   1396      Go source code.
   1397 
   1398 `FILE.ads'
   1399      Ada source code file which contains a library unit declaration (a
   1400      declaration of a package, subprogram, or generic, or a generic
   1401      instantiation), or a library unit renaming declaration (a package,
   1402      generic, or subprogram renaming declaration).  Such files are also
   1403      called "specs".
   1404 
   1405 `FILE.adb'
   1406      Ada source code file containing a library unit body (a subprogram
   1407      or package body).  Such files are also called "bodies".
   1408 
   1409 `FILE.s'
   1410      Assembler code.
   1411 
   1412 `FILE.S'
   1413 `FILE.sx'
   1414      Assembler code which must be preprocessed.
   1415 
   1416 `OTHER'
   1417      An object file to be fed straight into linking.  Any file name
   1418      with no recognized suffix is treated this way.
   1419 
   1420  You can specify the input language explicitly with the `-x' option:
   1421 
   1422 `-x LANGUAGE'
   1423      Specify explicitly the LANGUAGE for the following input files
   1424      (rather than letting the compiler choose a default based on the
   1425      file name suffix).  This option applies to all following input
   1426      files until the next `-x' option.  Possible values for LANGUAGE
   1427      are:
   1428           c  c-header  cpp-output
   1429           c++  c++-header  c++-cpp-output
   1430           objective-c  objective-c-header  objective-c-cpp-output
   1431           objective-c++ objective-c++-header objective-c++-cpp-output
   1432           assembler  assembler-with-cpp
   1433           ada
   1434           f77  f77-cpp-input f95  f95-cpp-input
   1435           go
   1436           java
   1437 
   1438 `-x none'
   1439      Turn off any specification of a language, so that subsequent files
   1440      are handled according to their file name suffixes (as they are if
   1441      `-x' has not been used at all).
   1442 
   1443 `-pass-exit-codes'
   1444      Normally the `gcc' program will exit with the code of 1 if any
   1445      phase of the compiler returns a non-success return code.  If you
   1446      specify `-pass-exit-codes', the `gcc' program will instead return
   1447      with numerically highest error produced by any phase that returned
   1448      an error indication.  The C, C++, and Fortran frontends return 4,
   1449      if an internal compiler error is encountered.
   1450 
   1451  If you only want some of the stages of compilation, you can use `-x'
   1452 (or filename suffixes) to tell `gcc' where to start, and one of the
   1453 options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
   1454 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
   1455 do nothing at all.
   1456 
   1457 `-c'
   1458      Compile or assemble the source files, but do not link.  The linking
   1459      stage simply is not done.  The ultimate output is in the form of an
   1460      object file for each source file.
   1461 
   1462      By default, the object file name for a source file is made by
   1463      replacing the suffix `.c', `.i', `.s', etc., with `.o'.
   1464 
   1465      Unrecognized input files, not requiring compilation or assembly,
   1466      are ignored.
   1467 
   1468 `-S'
   1469      Stop after the stage of compilation proper; do not assemble.  The
   1470      output is in the form of an assembler code file for each
   1471      non-assembler input file specified.
   1472 
   1473      By default, the assembler file name for a source file is made by
   1474      replacing the suffix `.c', `.i', etc., with `.s'.
   1475 
   1476      Input files that don't require compilation are ignored.
   1477 
   1478 `-E'
   1479      Stop after the preprocessing stage; do not run the compiler
   1480      proper.  The output is in the form of preprocessed source code,
   1481      which is sent to the standard output.
   1482 
   1483      Input files which don't require preprocessing are ignored.
   1484 
   1485 `-o FILE'
   1486      Place output in file FILE.  This applies regardless to whatever
   1487      sort of output is being produced, whether it be an executable file,
   1488      an object file, an assembler file or preprocessed C code.
   1489 
   1490      If `-o' is not specified, the default is to put an executable file
   1491      in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
   1492      assembler file in `SOURCE.s', a precompiled header file in
   1493      `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
   1494      output.
   1495 
   1496 `-v'
   1497      Print (on standard error output) the commands executed to run the
   1498      stages of compilation.  Also print the version number of the
   1499      compiler driver program and of the preprocessor and the compiler
   1500      proper.
   1501 
   1502 `-###'
   1503      Like `-v' except the commands are not executed and arguments are
   1504      quoted unless they contain only alphanumeric characters or `./-_'.
   1505      This is useful for shell scripts to capture the driver-generated
   1506      command lines.
   1507 
   1508 `-pipe'
   1509      Use pipes rather than temporary files for communication between the
   1510      various stages of compilation.  This fails to work on some systems
   1511      where the assembler is unable to read from a pipe; but the GNU
   1512      assembler has no trouble.
   1513 
   1514 `--help'
   1515      Print (on the standard output) a description of the command line
   1516      options understood by `gcc'.  If the `-v' option is also specified
   1517      then `--help' will also be passed on to the various processes
   1518      invoked by `gcc', so that they can display the command line options
   1519      they accept.  If the `-Wextra' option has also been specified
   1520      (prior to the `--help' option), then command line options which
   1521      have no documentation associated with them will also be displayed.
   1522 
   1523 `--target-help'
   1524      Print (on the standard output) a description of target-specific
   1525      command line options for each tool.  For some targets extra
   1526      target-specific information may also be printed.
   1527 
   1528 `--help={CLASS|[^]QUALIFIER}[,...]'
   1529      Print (on the standard output) a description of the command line
   1530      options understood by the compiler that fit into all specified
   1531      classes and qualifiers.  These are the supported classes:
   1532 
   1533     `optimizers'
   1534           This will display all of the optimization options supported
   1535           by the compiler.
   1536 
   1537     `warnings'
   1538           This will display all of the options controlling warning
   1539           messages produced by the compiler.
   1540 
   1541     `target'
   1542           This will display target-specific options.  Unlike the
   1543           `--target-help' option however, target-specific options of the
   1544           linker and assembler will not be displayed.  This is because
   1545           those tools do not currently support the extended `--help='
   1546           syntax.
   1547 
   1548     `params'
   1549           This will display the values recognized by the `--param'
   1550           option.
   1551 
   1552     LANGUAGE
   1553           This will display the options supported for LANGUAGE, where
   1554           LANGUAGE is the name of one of the languages supported in this
   1555           version of GCC.
   1556 
   1557     `common'
   1558           This will display the options that are common to all
   1559           languages.
   1560 
   1561      These are the supported qualifiers:
   1562 
   1563     `undocumented'
   1564           Display only those options which are undocumented.
   1565 
   1566     `joined'
   1567           Display options which take an argument that appears after an
   1568           equal sign in the same continuous piece of text, such as:
   1569           `--help=target'.
   1570 
   1571     `separate'
   1572           Display options which take an argument that appears as a
   1573           separate word following the original option, such as: `-o
   1574           output-file'.
   1575 
   1576      Thus for example to display all the undocumented target-specific
   1577      switches supported by the compiler the following can be used:
   1578 
   1579           --help=target,undocumented
   1580 
   1581      The sense of a qualifier can be inverted by prefixing it with the
   1582      `^' character, so for example to display all binary warning
   1583      options (i.e., ones that are either on or off and that do not take
   1584      an argument), which have a description the following can be used:
   1585 
   1586           --help=warnings,^joined,^undocumented
   1587 
   1588      The argument to `--help=' should not consist solely of inverted
   1589      qualifiers.
   1590 
   1591      Combining several classes is possible, although this usually
   1592      restricts the output by so much that there is nothing to display.
   1593      One case where it does work however is when one of the classes is
   1594      TARGET.  So for example to display all the target-specific
   1595      optimization options the following can be used:
   1596 
   1597           --help=target,optimizers
   1598 
   1599      The `--help=' option can be repeated on the command line.  Each
   1600      successive use will display its requested class of options,
   1601      skipping those that have already been displayed.
   1602 
   1603      If the `-Q' option appears on the command line before the
   1604      `--help=' option, then the descriptive text displayed by `--help='
   1605      is changed.  Instead of describing the displayed options, an
   1606      indication is given as to whether the option is enabled, disabled
   1607      or set to a specific value (assuming that the compiler knows this
   1608      at the point where the `--help=' option is used).
   1609 
   1610      Here is a truncated example from the ARM port of `gcc':
   1611 
   1612             % gcc -Q -mabi=2 --help=target -c
   1613             The following options are target specific:
   1614             -mabi=                                2
   1615             -mabort-on-noreturn                   [disabled]
   1616             -mapcs                                [disabled]
   1617 
   1618      The output is sensitive to the effects of previous command line
   1619      options, so for example it is possible to find out which
   1620      optimizations are enabled at `-O2' by using:
   1621 
   1622           -Q -O2 --help=optimizers
   1623 
   1624      Alternatively you can discover which binary optimizations are
   1625      enabled by `-O3' by using:
   1626 
   1627           gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
   1628           gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
   1629           diff /tmp/O2-opts /tmp/O3-opts | grep enabled
   1630 
   1631 `-canonical-prefixes'
   1632      Always expand any symbolic links, resolve references to `/../' or
   1633      `/./', and make the path absolute when generating a relative
   1634      prefix.
   1635 
   1636 `-no-canonical-prefixes'
   1637      Never expand any symbolic links, resolve references to `/../' or
   1638      `/./', or make the path absolute when generating a relative
   1639      prefix. If neither `-canonical-prefixes' nor
   1640      `-nocanonical-prefixes' is given, GCC tries to set an appropriate
   1641      default by looking for a target-specific subdirectory alongside the
   1642      directory containing the compiler driver.
   1643 
   1644 `--version'
   1645      Display the version number and copyrights of the invoked GCC.
   1646 
   1647 `-wrapper'
   1648      Invoke all subcommands under a wrapper program.  The name of the
   1649      wrapper program and its parameters are passed as a comma separated
   1650      list.
   1651 
   1652           gcc -c t.c -wrapper gdb,--args
   1653 
   1654      This will invoke all subprograms of `gcc' under `gdb --args', thus
   1655      the invocation of `cc1' will be `gdb --args cc1 ...'.
   1656 
   1657 `-fplugin=NAME.so'
   1658      Load the plugin code in file NAME.so, assumed to be a shared
   1659      object to be dlopen'd by the compiler.  The base name of the
   1660      shared object file is used to identify the plugin for the purposes
   1661      of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
   1662      Each plugin should define the callback functions specified in the
   1663      Plugins API.
   1664 
   1665 `-fplugin-arg-NAME-KEY=VALUE'
   1666      Define an argument called KEY with a value of VALUE for the plugin
   1667      called NAME.
   1668 
   1669 `-fdump-ada-spec[-slim]'
   1670      For C and C++ source and include files, generate corresponding Ada
   1671      specs. *Note Generating Ada Bindings for C and C++ headers:
   1672      (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
   1673      provides detailed documentation on this feature.
   1674 
   1675 `-fdump-go-spec=FILE'
   1676      For input files in any language, generate corresponding Go
   1677      declarations in FILE.  This generates Go `const', `type', `var',
   1678      and `func' declarations which may be a useful way to start writing
   1679      a Go interface to code written in some other language.
   1680 
   1681 `@FILE'
   1682      Read command-line options from FILE.  The options read are
   1683      inserted in place of the original @FILE option.  If FILE does not
   1684      exist, or cannot be read, then the option will be treated
   1685      literally, and not removed.
   1686 
   1687      Options in FILE are separated by whitespace.  A whitespace
   1688      character may be included in an option by surrounding the entire
   1689      option in either single or double quotes.  Any character
   1690      (including a backslash) may be included by prefixing the character
   1691      to be included with a backslash.  The FILE may itself contain
   1692      additional @FILE options; any such options will be processed
   1693      recursively.
   1694 
   1695 
   1696 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
   1697 
   1698 3.3 Compiling C++ Programs
   1699 ==========================
   1700 
   1701 C++ source files conventionally use one of the suffixes `.C', `.cc',
   1702 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
   1703 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
   1704 preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
   1705 these names and compiles them as C++ programs even if you call the
   1706 compiler the same way as for compiling C programs (usually with the
   1707 name `gcc').
   1708 
   1709  However, the use of `gcc' does not add the C++ library.  `g++' is a
   1710 program that calls GCC and treats `.c', `.h' and `.i' files as C++
   1711 source files instead of C source files unless `-x' is used, and
   1712 automatically specifies linking against the C++ library.  This program
   1713 is also useful when precompiling a C header file with a `.h' extension
   1714 for use in C++ compilations.  On many systems, `g++' is also installed
   1715 with the name `c++'.
   1716 
   1717  When you compile C++ programs, you may specify many of the same
   1718 command-line options that you use for compiling programs in any
   1719 language; or command-line options meaningful for C and related
   1720 languages; or options that are meaningful only for C++ programs.  *Note
   1721 Options Controlling C Dialect: C Dialect Options, for explanations of
   1722 options for languages related to C.  *Note Options Controlling C++
   1723 Dialect: C++ Dialect Options, for explanations of options that are
   1724 meaningful only for C++ programs.
   1725 
   1726 
   1727 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
   1728 
   1729 3.4 Options Controlling C Dialect
   1730 =================================
   1731 
   1732 The following options control the dialect of C (or languages derived
   1733 from C, such as C++, Objective-C and Objective-C++) that the compiler
   1734 accepts:
   1735 
   1736 `-ansi'
   1737      In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
   1738      equivalent to `-std=c++98'.
   1739 
   1740      This turns off certain features of GCC that are incompatible with
   1741      ISO C90 (when compiling C code), or of standard C++ (when
   1742      compiling C++ code), such as the `asm' and `typeof' keywords, and
   1743      predefined macros such as `unix' and `vax' that identify the type
   1744      of system you are using.  It also enables the undesirable and
   1745      rarely used ISO trigraph feature.  For the C compiler, it disables
   1746      recognition of C++ style `//' comments as well as the `inline'
   1747      keyword.
   1748 
   1749      The alternate keywords `__asm__', `__extension__', `__inline__'
   1750      and `__typeof__' continue to work despite `-ansi'.  You would not
   1751      want to use them in an ISO C program, of course, but it is useful
   1752      to put them in header files that might be included in compilations
   1753      done with `-ansi'.  Alternate predefined macros such as `__unix__'
   1754      and `__vax__' are also available, with or without `-ansi'.
   1755 
   1756      The `-ansi' option does not cause non-ISO programs to be rejected
   1757      gratuitously.  For that, `-pedantic' is required in addition to
   1758      `-ansi'.  *Note Warning Options::.
   1759 
   1760      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
   1761      is used.  Some header files may notice this macro and refrain from
   1762      declaring certain functions or defining certain macros that the
   1763      ISO standard doesn't call for; this is to avoid interfering with
   1764      any programs that might use these names for other things.
   1765 
   1766      Functions that would normally be built in but do not have semantics
   1767      defined by ISO C (such as `alloca' and `ffs') are not built-in
   1768      functions when `-ansi' is used.  *Note Other built-in functions
   1769      provided by GCC: Other Builtins, for details of the functions
   1770      affected.
   1771 
   1772 `-std='
   1773      Determine the language standard. *Note Language Standards
   1774      Supported by GCC: Standards, for details of these standard
   1775      versions.  This option is currently only supported when compiling
   1776      C or C++.
   1777 
   1778      The compiler can accept several base standards, such as `c90' or
   1779      `c++98', and GNU dialects of those standards, such as `gnu90' or
   1780      `gnu++98'.  By specifying a base standard, the compiler will
   1781      accept all programs following that standard and those using GNU
   1782      extensions that do not contradict it.  For example, `-std=c90'
   1783      turns off certain features of GCC that are incompatible with ISO
   1784      C90, such as the `asm' and `typeof' keywords, but not other GNU
   1785      extensions that do not have a meaning in ISO C90, such as omitting
   1786      the middle term of a `?:' expression. On the other hand, by
   1787      specifying a GNU dialect of a standard, all features the compiler
   1788      support are enabled, even when those features change the meaning
   1789      of the base standard and some strict-conforming programs may be
   1790      rejected.  The particular standard is used by `-pedantic' to
   1791      identify which features are GNU extensions given that version of
   1792      the standard. For example `-std=gnu90 -pedantic' would warn about
   1793      C++ style `//' comments, while `-std=gnu99 -pedantic' would not.
   1794 
   1795      A value for this option must be provided; possible values are
   1796 
   1797     `c90'
   1798     `c89'
   1799     `iso9899:1990'
   1800           Support all ISO C90 programs (certain GNU extensions that
   1801           conflict with ISO C90 are disabled). Same as `-ansi' for C
   1802           code.
   1803 
   1804     `iso9899:199409'
   1805           ISO C90 as modified in amendment 1.
   1806 
   1807     `c99'
   1808     `c9x'
   1809     `iso9899:1999'
   1810     `iso9899:199x'
   1811           ISO C99.  Note that this standard is not yet fully supported;
   1812           see `http://gcc.gnu.org/gcc-4.6/c99status.html' for more
   1813           information.  The names `c9x' and `iso9899:199x' are
   1814           deprecated.
   1815 
   1816     `c1x'
   1817           ISO C1X, the draft of the next revision of the ISO C standard.
   1818           Support is limited and experimental and features enabled by
   1819           this option may be changed or removed if changed in or
   1820           removed from the standard draft.
   1821 
   1822     `gnu90'
   1823     `gnu89'
   1824           GNU dialect of ISO C90 (including some C99 features). This is
   1825           the default for C code.
   1826 
   1827     `gnu99'
   1828     `gnu9x'
   1829           GNU dialect of ISO C99.  When ISO C99 is fully implemented in
   1830           GCC, this will become the default.  The name `gnu9x' is
   1831           deprecated.
   1832 
   1833     `gnu1x'
   1834           GNU dialect of ISO C1X.  Support is limited and experimental
   1835           and features enabled by this option may be changed or removed
   1836           if changed in or removed from the standard draft.
   1837 
   1838     `c++98'
   1839           The 1998 ISO C++ standard plus amendments. Same as `-ansi' for
   1840           C++ code.
   1841 
   1842     `gnu++98'
   1843           GNU dialect of `-std=c++98'.  This is the default for C++
   1844           code.
   1845 
   1846     `c++0x'
   1847           The working draft of the upcoming ISO C++0x standard. This
   1848           option enables experimental features that are likely to be
   1849           included in C++0x. The working draft is constantly changing,
   1850           and any feature that is enabled by this flag may be removed
   1851           from future versions of GCC if it is not part of the C++0x
   1852           standard.
   1853 
   1854     `gnu++0x'
   1855           GNU dialect of `-std=c++0x'. This option enables experimental
   1856           features that may be removed in future versions of GCC.
   1857 
   1858 `-fgnu89-inline'
   1859      The option `-fgnu89-inline' tells GCC to use the traditional GNU
   1860      semantics for `inline' functions when in C99 mode.  *Note An
   1861      Inline Function is As Fast As a Macro: Inline.  This option is
   1862      accepted and ignored by GCC versions 4.1.3 up to but not including
   1863      4.3.  In GCC versions 4.3 and later it changes the behavior of GCC
   1864      in C99 mode.  Using this option is roughly equivalent to adding the
   1865      `gnu_inline' function attribute to all inline functions (*note
   1866      Function Attributes::).
   1867 
   1868      The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
   1869      semantics for `inline' when in C99 or gnu99 mode (i.e., it
   1870      specifies the default behavior).  This option was first supported
   1871      in GCC 4.3.  This option is not supported in `-std=c90' or
   1872      `-std=gnu90' mode.
   1873 
   1874      The preprocessor macros `__GNUC_GNU_INLINE__' and
   1875      `__GNUC_STDC_INLINE__' may be used to check which semantics are in
   1876      effect for `inline' functions.  *Note Common Predefined Macros:
   1877      (cpp)Common Predefined Macros.
   1878 
   1879 `-aux-info FILENAME'
   1880      Output to the given filename prototyped declarations for all
   1881      functions declared and/or defined in a translation unit, including
   1882      those in header files.  This option is silently ignored in any
   1883      language other than C.
   1884 
   1885      Besides declarations, the file indicates, in comments, the origin
   1886      of each declaration (source file and line), whether the
   1887      declaration was implicit, prototyped or unprototyped (`I', `N' for
   1888      new or `O' for old, respectively, in the first character after the
   1889      line number and the colon), and whether it came from a declaration
   1890      or a definition (`C' or `F', respectively, in the following
   1891      character).  In the case of function definitions, a K&R-style list
   1892      of arguments followed by their declarations is also provided,
   1893      inside comments, after the declaration.
   1894 
   1895 `-fno-asm'
   1896      Do not recognize `asm', `inline' or `typeof' as a keyword, so that
   1897      code can use these words as identifiers.  You can use the keywords
   1898      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
   1899      `-fno-asm'.
   1900 
   1901      In C++, this switch only affects the `typeof' keyword, since `asm'
   1902      and `inline' are standard keywords.  You may want to use the
   1903      `-fno-gnu-keywords' flag instead, which has the same effect.  In
   1904      C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
   1905      the `asm' and `typeof' keywords, since `inline' is a standard
   1906      keyword in ISO C99.
   1907 
   1908 `-fno-builtin'
   1909 `-fno-builtin-FUNCTION'
   1910      Don't recognize built-in functions that do not begin with
   1911      `__builtin_' as prefix.  *Note Other built-in functions provided
   1912      by GCC: Other Builtins, for details of the functions affected,
   1913      including those which are not built-in functions when `-ansi' or
   1914      `-std' options for strict ISO C conformance are used because they
   1915      do not have an ISO standard meaning.
   1916 
   1917      GCC normally generates special code to handle certain built-in
   1918      functions more efficiently; for instance, calls to `alloca' may
   1919      become single instructions that adjust the stack directly, and
   1920      calls to `memcpy' may become inline copy loops.  The resulting
   1921      code is often both smaller and faster, but since the function
   1922      calls no longer appear as such, you cannot set a breakpoint on
   1923      those calls, nor can you change the behavior of the functions by
   1924      linking with a different library.  In addition, when a function is
   1925      recognized as a built-in function, GCC may use information about
   1926      that function to warn about problems with calls to that function,
   1927      or to generate more efficient code, even if the resulting code
   1928      still contains calls to that function.  For example, warnings are
   1929      given with `-Wformat' for bad calls to `printf', when `printf' is
   1930      built in, and `strlen' is known not to modify global memory.
   1931 
   1932      With the `-fno-builtin-FUNCTION' option only the built-in function
   1933      FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
   1934      If a function is named that is not built-in in this version of
   1935      GCC, this option is ignored.  There is no corresponding
   1936      `-fbuiltin-FUNCTION' option; if you wish to enable built-in
   1937      functions selectively when using `-fno-builtin' or
   1938      `-ffreestanding', you may define macros such as:
   1939 
   1940           #define abs(n)          __builtin_abs ((n))
   1941           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
   1942 
   1943 `-fhosted'
   1944      Assert that compilation takes place in a hosted environment.  This
   1945      implies `-fbuiltin'.  A hosted environment is one in which the
   1946      entire standard library is available, and in which `main' has a
   1947      return type of `int'.  Examples are nearly everything except a
   1948      kernel.  This is equivalent to `-fno-freestanding'.
   1949 
   1950 `-ffreestanding'
   1951      Assert that compilation takes place in a freestanding environment.
   1952      This implies `-fno-builtin'.  A freestanding environment is one in
   1953      which the standard library may not exist, and program startup may
   1954      not necessarily be at `main'.  The most obvious example is an OS
   1955      kernel.  This is equivalent to `-fno-hosted'.
   1956 
   1957      *Note Language Standards Supported by GCC: Standards, for details
   1958      of freestanding and hosted environments.
   1959 
   1960 `-fopenmp'
   1961      Enable handling of OpenMP directives `#pragma omp' in C/C++ and
   1962      `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
   1963      generates parallel code according to the OpenMP Application
   1964      Program Interface v3.0 `http://www.openmp.org/'.  This option
   1965      implies `-pthread', and thus is only supported on targets that
   1966      have support for `-pthread'.
   1967 
   1968 `-fms-extensions'
   1969      Accept some non-standard constructs used in Microsoft header files.
   1970 
   1971      In C++ code, this allows member names in structures to be similar
   1972      to previous types declarations.
   1973 
   1974           typedef int UOW;
   1975           struct ABC {
   1976             UOW UOW;
   1977           };
   1978 
   1979      Some cases of unnamed fields in structures and unions are only
   1980      accepted with this option.  *Note Unnamed struct/union fields
   1981      within structs/unions: Unnamed Fields, for details.
   1982 
   1983 `-fplan9-extensions'
   1984      Accept some non-standard constructs used in Plan 9 code.
   1985 
   1986      This enables `-fms-extensions', permits passing pointers to
   1987      structures with anonymous fields to functions which expect
   1988      pointers to elements of the type of the field, and permits
   1989      referring to anonymous fields declared using a typedef.  *Note
   1990      Unnamed struct/union fields within structs/unions: Unnamed Fields,
   1991      for details.  This is only supported for C, not C++.
   1992 
   1993 `-trigraphs'
   1994      Support ISO C trigraphs.  The `-ansi' option (and `-std' options
   1995      for strict ISO C conformance) implies `-trigraphs'.
   1996 
   1997 `-no-integrated-cpp'
   1998      Performs a compilation in two passes: preprocessing and compiling.
   1999      This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
   2000      via the `-B' option.  The user supplied compilation step can then
   2001      add in an additional preprocessing step after normal preprocessing
   2002      but before compiling.  The default is to use the integrated cpp
   2003      (internal cpp)
   2004 
   2005      The semantics of this option will change if "cc1", "cc1plus", and
   2006      "cc1obj" are merged.
   2007 
   2008 `-traditional'
   2009 `-traditional-cpp'
   2010      Formerly, these options caused GCC to attempt to emulate a
   2011      pre-standard C compiler.  They are now only supported with the
   2012      `-E' switch.  The preprocessor continues to support a pre-standard
   2013      mode.  See the GNU CPP manual for details.
   2014 
   2015 `-fcond-mismatch'
   2016      Allow conditional expressions with mismatched types in the second
   2017      and third arguments.  The value of such an expression is void.
   2018      This option is not supported for C++.
   2019 
   2020 `-flax-vector-conversions'
   2021      Allow implicit conversions between vectors with differing numbers
   2022      of elements and/or incompatible element types.  This option should
   2023      not be used for new code.
   2024 
   2025 `-funsigned-char'
   2026      Let the type `char' be unsigned, like `unsigned char'.
   2027 
   2028      Each kind of machine has a default for what `char' should be.  It
   2029      is either like `unsigned char' by default or like `signed char' by
   2030      default.
   2031 
   2032      Ideally, a portable program should always use `signed char' or
   2033      `unsigned char' when it depends on the signedness of an object.
   2034      But many programs have been written to use plain `char' and expect
   2035      it to be signed, or expect it to be unsigned, depending on the
   2036      machines they were written for.  This option, and its inverse, let
   2037      you make such a program work with the opposite default.
   2038 
   2039      The type `char' is always a distinct type from each of `signed
   2040      char' or `unsigned char', even though its behavior is always just
   2041      like one of those two.
   2042 
   2043 `-fsigned-char'
   2044      Let the type `char' be signed, like `signed char'.
   2045 
   2046      Note that this is equivalent to `-fno-unsigned-char', which is the
   2047      negative form of `-funsigned-char'.  Likewise, the option
   2048      `-fno-signed-char' is equivalent to `-funsigned-char'.
   2049 
   2050 `-fsigned-bitfields'
   2051 `-funsigned-bitfields'
   2052 `-fno-signed-bitfields'
   2053 `-fno-unsigned-bitfields'
   2054      These options control whether a bit-field is signed or unsigned,
   2055      when the declaration does not use either `signed' or `unsigned'.
   2056      By default, such a bit-field is signed, because this is
   2057      consistent: the basic integer types such as `int' are signed types.
   2058 
   2059 
   2060 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
   2061 
   2062 3.5 Options Controlling C++ Dialect
   2063 ===================================
   2064 
   2065 This section describes the command-line options that are only meaningful
   2066 for C++ programs; but you can also use most of the GNU compiler options
   2067 regardless of what language your program is in.  For example, you might
   2068 compile a file `firstClass.C' like this:
   2069 
   2070      g++ -g -frepo -O -c firstClass.C
   2071 
   2072 In this example, only `-frepo' is an option meant only for C++
   2073 programs; you can use the other options with any language supported by
   2074 GCC.
   2075 
   2076  Here is a list of options that are _only_ for compiling C++ programs:
   2077 
   2078 `-fabi-version=N'
   2079      Use version N of the C++ ABI.  Version 2 is the version of the C++
   2080      ABI that first appeared in G++ 3.4.  Version 1 is the version of
   2081      the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
   2082      be the version that conforms most closely to the C++ ABI
   2083      specification.  Therefore, the ABI obtained using version 0 will
   2084      change as ABI bugs are fixed.
   2085 
   2086      The default is version 2.
   2087 
   2088      Version 3 corrects an error in mangling a constant address as a
   2089      template argument.
   2090 
   2091      Version 4 implements a standard mangling for vector types.
   2092 
   2093      Version 5 corrects the mangling of attribute const/volatile on
   2094      function pointer types, decltype of a plain decl, and use of a
   2095      function parameter in the declaration of another parameter.
   2096 
   2097      See also `-Wabi'.
   2098 
   2099 `-fno-access-control'
   2100      Turn off all access checking.  This switch is mainly useful for
   2101      working around bugs in the access control code.
   2102 
   2103 `-fcheck-new'
   2104      Check that the pointer returned by `operator new' is non-null
   2105      before attempting to modify the storage allocated.  This check is
   2106      normally unnecessary because the C++ standard specifies that
   2107      `operator new' will only return `0' if it is declared `throw()',
   2108      in which case the compiler will always check the return value even
   2109      without this option.  In all other cases, when `operator new' has
   2110      a non-empty exception specification, memory exhaustion is
   2111      signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
   2112 
   2113 `-fconserve-space'
   2114      Put uninitialized or runtime-initialized global variables into the
   2115      common segment, as C does.  This saves space in the executable at
   2116      the cost of not diagnosing duplicate definitions.  If you compile
   2117      with this flag and your program mysteriously crashes after
   2118      `main()' has completed, you may have an object that is being
   2119      destroyed twice because two definitions were merged.
   2120 
   2121      This option is no longer useful on most targets, now that support
   2122      has been added for putting variables into BSS without making them
   2123      common.
   2124 
   2125 `-fconstexpr-depth=N'
   2126      Set the maximum nested evaluation depth for C++0x constexpr
   2127      functions to N.  A limit is needed to detect endless recursion
   2128      during constant expression evaluation.  The minimum specified by
   2129      the standard is 512.
   2130 
   2131 `-fno-deduce-init-list'
   2132      Disable deduction of a template type parameter as
   2133      std::initializer_list from a brace-enclosed initializer list, i.e.
   2134 
   2135           template <class T> auto forward(T t) -> decltype (realfn (t))
   2136           {
   2137             return realfn (t);
   2138           }
   2139 
   2140           void f()
   2141           {
   2142             forward({1,2}); // call forward<std::initializer_list<int>>
   2143           }
   2144 
   2145      This option is present because this deduction is an extension to
   2146      the current specification in the C++0x working draft, and there was
   2147      some concern about potential overload resolution problems.
   2148 
   2149 `-ffriend-injection'
   2150      Inject friend functions into the enclosing namespace, so that they
   2151      are visible outside the scope of the class in which they are
   2152      declared.  Friend functions were documented to work this way in
   2153      the old Annotated C++ Reference Manual, and versions of G++ before
   2154      4.1 always worked that way.  However, in ISO C++ a friend function
   2155      which is not declared in an enclosing scope can only be found
   2156      using argument dependent lookup.  This option causes friends to be
   2157      injected as they were in earlier releases.
   2158 
   2159      This option is for compatibility, and may be removed in a future
   2160      release of G++.
   2161 
   2162 `-fno-elide-constructors'
   2163      The C++ standard allows an implementation to omit creating a
   2164      temporary which is only used to initialize another object of the
   2165      same type.  Specifying this option disables that optimization, and
   2166      forces G++ to call the copy constructor in all cases.
   2167 
   2168 `-fno-enforce-eh-specs'
   2169      Don't generate code to check for violation of exception
   2170      specifications at runtime.  This option violates the C++ standard,
   2171      but may be useful for reducing code size in production builds,
   2172      much like defining `NDEBUG'.  This does not give user code
   2173      permission to throw exceptions in violation of the exception
   2174      specifications; the compiler will still optimize based on the
   2175      specifications, so throwing an unexpected exception will result in
   2176      undefined behavior.
   2177 
   2178 `-ffor-scope'
   2179 `-fno-for-scope'
   2180      If `-ffor-scope' is specified, the scope of variables declared in
   2181      a for-init-statement is limited to the `for' loop itself, as
   2182      specified by the C++ standard.  If `-fno-for-scope' is specified,
   2183      the scope of variables declared in a for-init-statement extends to
   2184      the end of the enclosing scope, as was the case in old versions of
   2185      G++, and other (traditional) implementations of C++.
   2186 
   2187      The default if neither flag is given to follow the standard, but
   2188      to allow and give a warning for old-style code that would
   2189      otherwise be invalid, or have different behavior.
   2190 
   2191 `-fno-gnu-keywords'
   2192      Do not recognize `typeof' as a keyword, so that code can use this
   2193      word as an identifier.  You can use the keyword `__typeof__'
   2194      instead.  `-ansi' implies `-fno-gnu-keywords'.
   2195 
   2196 `-fno-implicit-templates'
   2197      Never emit code for non-inline templates which are instantiated
   2198      implicitly (i.e. by use); only emit code for explicit
   2199      instantiations.  *Note Template Instantiation::, for more
   2200      information.
   2201 
   2202 `-fno-implicit-inline-templates'
   2203      Don't emit code for implicit instantiations of inline templates,
   2204      either.  The default is to handle inlines differently so that
   2205      compiles with and without optimization will need the same set of
   2206      explicit instantiations.
   2207 
   2208 `-fno-implement-inlines'
   2209      To save space, do not emit out-of-line copies of inline functions
   2210      controlled by `#pragma implementation'.  This will cause linker
   2211      errors if these functions are not inlined everywhere they are
   2212      called.
   2213 
   2214 `-fms-extensions'
   2215      Disable pedantic warnings about constructs used in MFC, such as
   2216      implicit int and getting a pointer to member function via
   2217      non-standard syntax.
   2218 
   2219 `-fno-nonansi-builtins'
   2220      Disable built-in declarations of functions that are not mandated by
   2221      ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
   2222      `bzero', `conjf', and other related functions.
   2223 
   2224 `-fnothrow-opt'
   2225      Treat a `throw()' exception specification as though it were a
   2226      `noexcept' specification to reduce or eliminate the text size
   2227      overhead relative to a function with no exception specification.
   2228      If the function has local variables of types with non-trivial
   2229      destructors, the exception specification will actually make the
   2230      function smaller because the EH cleanups for those variables can be
   2231      optimized away.  The semantic effect is that an exception thrown
   2232      out of a function with such an exception specification will result
   2233      in a call to `terminate' rather than `unexpected'.
   2234 
   2235 `-fno-operator-names'
   2236      Do not treat the operator name keywords `and', `bitand', `bitor',
   2237      `compl', `not', `or' and `xor' as synonyms as keywords.
   2238 
   2239 `-fno-optional-diags'
   2240      Disable diagnostics that the standard says a compiler does not
   2241      need to issue.  Currently, the only such diagnostic issued by G++
   2242      is the one for a name having multiple meanings within a class.
   2243 
   2244 `-fpermissive'
   2245      Downgrade some diagnostics about nonconformant code from errors to
   2246      warnings.  Thus, using `-fpermissive' will allow some
   2247      nonconforming code to compile.
   2248 
   2249 `-fno-pretty-templates'
   2250      When an error message refers to a specialization of a function
   2251      template, the compiler will normally print the signature of the
   2252      template followed by the template arguments and any typedefs or
   2253      typenames in the signature (e.g. `void f(T) [with T = int]' rather
   2254      than `void f(int)') so that it's clear which template is involved.
   2255      When an error message refers to a specialization of a class
   2256      template, the compiler will omit any template arguments which match
   2257      the default template arguments for that template.  If either of
   2258      these behaviors make it harder to understand the error message
   2259      rather than easier, using `-fno-pretty-templates' will disable
   2260      them.
   2261 
   2262 `-frepo'
   2263      Enable automatic template instantiation at link time.  This option
   2264      also implies `-fno-implicit-templates'.  *Note Template
   2265      Instantiation::, for more information.
   2266 
   2267 `-fno-rtti'
   2268      Disable generation of information about every class with virtual
   2269      functions for use by the C++ runtime type identification features
   2270      (`dynamic_cast' and `typeid').  If you don't use those parts of
   2271      the language, you can save some space by using this flag.  Note
   2272      that exception handling uses the same information, but it will
   2273      generate it as needed. The `dynamic_cast' operator can still be
   2274      used for casts that do not require runtime type information, i.e.
   2275      casts to `void *' or to unambiguous base classes.
   2276 
   2277 `-fstats'
   2278      Emit statistics about front-end processing at the end of the
   2279      compilation.  This information is generally only useful to the G++
   2280      development team.
   2281 
   2282 `-fstrict-enums'
   2283      Allow the compiler to optimize using the assumption that a value of
   2284      enumeration type can only be one of the values of the enumeration
   2285      (as defined in the C++ standard; basically, a value which can be
   2286      represented in the minimum number of bits needed to represent all
   2287      the enumerators).  This assumption may not be valid if the program
   2288      uses a cast to convert an arbitrary integer value to the
   2289      enumeration type.
   2290 
   2291 `-ftemplate-depth=N'
   2292      Set the maximum instantiation depth for template classes to N.  A
   2293      limit on the template instantiation depth is needed to detect
   2294      endless recursions during template class instantiation.  ANSI/ISO
   2295      C++ conforming programs must not rely on a maximum depth greater
   2296      than 17 (changed to 1024 in C++0x).
   2297 
   2298 `-fno-threadsafe-statics'
   2299      Do not emit the extra code to use the routines specified in the C++
   2300      ABI for thread-safe initialization of local statics.  You can use
   2301      this option to reduce code size slightly in code that doesn't need
   2302      to be thread-safe.
   2303 
   2304 `-fuse-cxa-atexit'
   2305      Register destructors for objects with static storage duration with
   2306      the `__cxa_atexit' function rather than the `atexit' function.
   2307      This option is required for fully standards-compliant handling of
   2308      static destructors, but will only work if your C library supports
   2309      `__cxa_atexit'.
   2310 
   2311 `-fno-use-cxa-get-exception-ptr'
   2312      Don't use the `__cxa_get_exception_ptr' runtime routine.  This
   2313      will cause `std::uncaught_exception' to be incorrect, but is
   2314      necessary if the runtime routine is not available.
   2315 
   2316 `-fvisibility-inlines-hidden'
   2317      This switch declares that the user does not attempt to compare
   2318      pointers to inline methods where the addresses of the two functions
   2319      were taken in different shared objects.
   2320 
   2321      The effect of this is that GCC may, effectively, mark inline
   2322      methods with `__attribute__ ((visibility ("hidden")))' so that
   2323      they do not appear in the export table of a DSO and do not require
   2324      a PLT indirection when used within the DSO.  Enabling this option
   2325      can have a dramatic effect on load and link times of a DSO as it
   2326      massively reduces the size of the dynamic export table when the
   2327      library makes heavy use of templates.
   2328 
   2329      The behavior of this switch is not quite the same as marking the
   2330      methods as hidden directly, because it does not affect static
   2331      variables local to the function or cause the compiler to deduce
   2332      that the function is defined in only one shared object.
   2333 
   2334      You may mark a method as having a visibility explicitly to negate
   2335      the effect of the switch for that method.  For example, if you do
   2336      want to compare pointers to a particular inline method, you might
   2337      mark it as having default visibility.  Marking the enclosing class
   2338      with explicit visibility will have no effect.
   2339 
   2340      Explicitly instantiated inline methods are unaffected by this
   2341      option as their linkage might otherwise cross a shared library
   2342      boundary.  *Note Template Instantiation::.
   2343 
   2344 `-fvisibility-ms-compat'
   2345      This flag attempts to use visibility settings to make GCC's C++
   2346      linkage model compatible with that of Microsoft Visual Studio.
   2347 
   2348      The flag makes these changes to GCC's linkage model:
   2349 
   2350        1. It sets the default visibility to `hidden', like
   2351           `-fvisibility=hidden'.
   2352 
   2353        2. Types, but not their members, are not hidden by default.
   2354 
   2355        3. The One Definition Rule is relaxed for types without explicit
   2356           visibility specifications which are defined in more than one
   2357           different shared object: those declarations are permitted if
   2358           they would have been permitted when this option was not used.
   2359 
   2360      In new code it is better to use `-fvisibility=hidden' and export
   2361      those classes which are intended to be externally visible.
   2362      Unfortunately it is possible for code to rely, perhaps
   2363      accidentally, on the Visual Studio behavior.
   2364 
   2365      Among the consequences of these changes are that static data
   2366      members of the same type with the same name but defined in
   2367      different shared objects will be different, so changing one will
   2368      not change the other; and that pointers to function members
   2369      defined in different shared objects may not compare equal.  When
   2370      this flag is given, it is a violation of the ODR to define types
   2371      with the same name differently.
   2372 
   2373 `-fno-weak'
   2374      Do not use weak symbol support, even if it is provided by the
   2375      linker.  By default, G++ will use weak symbols if they are
   2376      available.  This option exists only for testing, and should not be
   2377      used by end-users; it will result in inferior code and has no
   2378      benefits.  This option may be removed in a future release of G++.
   2379 
   2380 `-nostdinc++'
   2381      Do not search for header files in the standard directories
   2382      specific to C++, but do still search the other standard
   2383      directories.  (This option is used when building the C++ library.)
   2384 
   2385  In addition, these optimization, warning, and code generation options
   2386 have meanings only for C++ programs:
   2387 
   2388 `-fno-default-inline'
   2389      Do not assume `inline' for functions defined inside a class scope.
   2390      *Note Options That Control Optimization: Optimize Options.  Note
   2391      that these functions will have linkage like inline functions; they
   2392      just won't be inlined by default.
   2393 
   2394 `-Wabi (C, Objective-C, C++ and Objective-C++ only)'
   2395      Warn when G++ generates code that is probably not compatible with
   2396      the vendor-neutral C++ ABI.  Although an effort has been made to
   2397      warn about all such cases, there are probably some cases that are
   2398      not warned about, even though G++ is generating incompatible code.
   2399      There may also be cases where warnings are emitted even though the
   2400      code that is generated will be compatible.
   2401 
   2402      You should rewrite your code to avoid these warnings if you are
   2403      concerned about the fact that code generated by G++ may not be
   2404      binary compatible with code generated by other compilers.
   2405 
   2406      The known incompatibilities in `-fabi-version=2' (the default)
   2407      include:
   2408 
   2409         * A template with a non-type template parameter of reference
   2410           type is mangled incorrectly:
   2411                extern int N;
   2412                template <int &> struct S {};
   2413                void n (S<N>) {2}
   2414 
   2415           This is fixed in `-fabi-version=3'.
   2416 
   2417         * SIMD vector types declared using `__attribute
   2418           ((vector_size))' are mangled in a non-standard way that does
   2419           not allow for overloading of functions taking vectors of
   2420           different sizes.
   2421 
   2422           The mangling is changed in `-fabi-version=4'.
   2423 
   2424      The known incompatibilities in `-fabi-version=1' include:
   2425 
   2426         * Incorrect handling of tail-padding for bit-fields.  G++ may
   2427           attempt to pack data into the same byte as a base class.  For
   2428           example:
   2429 
   2430                struct A { virtual void f(); int f1 : 1; };
   2431                struct B : public A { int f2 : 1; };
   2432 
   2433           In this case, G++ will place `B::f2' into the same byte
   2434           as`A::f1'; other compilers will not.  You can avoid this
   2435           problem by explicitly padding `A' so that its size is a
   2436           multiple of the byte size on your platform; that will cause
   2437           G++ and other compilers to layout `B' identically.
   2438 
   2439         * Incorrect handling of tail-padding for virtual bases.  G++
   2440           does not use tail padding when laying out virtual bases.  For
   2441           example:
   2442 
   2443                struct A { virtual void f(); char c1; };
   2444                struct B { B(); char c2; };
   2445                struct C : public A, public virtual B {};
   2446 
   2447           In this case, G++ will not place `B' into the tail-padding for
   2448           `A'; other compilers will.  You can avoid this problem by
   2449           explicitly padding `A' so that its size is a multiple of its
   2450           alignment (ignoring virtual base classes); that will cause
   2451           G++ and other compilers to layout `C' identically.
   2452 
   2453         * Incorrect handling of bit-fields with declared widths greater
   2454           than that of their underlying types, when the bit-fields
   2455           appear in a union.  For example:
   2456 
   2457                union U { int i : 4096; };
   2458 
   2459           Assuming that an `int' does not have 4096 bits, G++ will make
   2460           the union too small by the number of bits in an `int'.
   2461 
   2462         * Empty classes can be placed at incorrect offsets.  For
   2463           example:
   2464 
   2465                struct A {};
   2466 
   2467                struct B {
   2468                  A a;
   2469                  virtual void f ();
   2470                };
   2471 
   2472                struct C : public B, public A {};
   2473 
   2474           G++ will place the `A' base class of `C' at a nonzero offset;
   2475           it should be placed at offset zero.  G++ mistakenly believes
   2476           that the `A' data member of `B' is already at offset zero.
   2477 
   2478         * Names of template functions whose types involve `typename' or
   2479           template template parameters can be mangled incorrectly.
   2480 
   2481                template <typename Q>
   2482                void f(typename Q::X) {}
   2483 
   2484                template <template <typename> class Q>
   2485                void f(typename Q<int>::X) {}
   2486 
   2487           Instantiations of these templates may be mangled incorrectly.
   2488 
   2489 
   2490      It also warns psABI related changes.  The known psABI changes at
   2491      this point include:
   2492 
   2493         * For SYSV/x86-64, when passing union with long double, it is
   2494           changed to pass in memory as specified in psABI.  For example:
   2495 
   2496                union U {
   2497                  long double ld;
   2498                  int i;
   2499                };
   2500 
   2501           `union U' will always be passed in memory.
   2502 
   2503 
   2504 `-Wctor-dtor-privacy (C++ and Objective-C++ only)'
   2505      Warn when a class seems unusable because all the constructors or
   2506      destructors in that class are private, and it has neither friends
   2507      nor public static member functions.
   2508 
   2509 `-Wnoexcept (C++ and Objective-C++ only)'
   2510      Warn when a noexcept-expression evaluates to false because of a
   2511      call to a function that does not have a non-throwing exception
   2512      specification (i.e. `throw()' or `noexcept') but is known by the
   2513      compiler to never throw an exception.
   2514 
   2515 `-Wnon-virtual-dtor (C++ and Objective-C++ only)'
   2516      Warn when a class has virtual functions and accessible non-virtual
   2517      destructor, in which case it would be possible but unsafe to delete
   2518      an instance of a derived class through a pointer to the base class.
   2519      This warning is also enabled if -Weffc++ is specified.
   2520 
   2521 `-Wreorder (C++ and Objective-C++ only)'
   2522      Warn when the order of member initializers given in the code does
   2523      not match the order in which they must be executed.  For instance:
   2524 
   2525           struct A {
   2526             int i;
   2527             int j;
   2528             A(): j (0), i (1) { }
   2529           };
   2530 
   2531      The compiler will rearrange the member initializers for `i' and
   2532      `j' to match the declaration order of the members, emitting a
   2533      warning to that effect.  This warning is enabled by `-Wall'.
   2534 
   2535  The following `-W...' options are not affected by `-Wall'.
   2536 
   2537 `-Weffc++ (C++ and Objective-C++ only)'
   2538      Warn about violations of the following style guidelines from Scott
   2539      Meyers' `Effective C++' book:
   2540 
   2541         * Item 11:  Define a copy constructor and an assignment
   2542           operator for classes with dynamically allocated memory.
   2543 
   2544         * Item 12:  Prefer initialization to assignment in constructors.
   2545 
   2546         * Item 14:  Make destructors virtual in base classes.
   2547 
   2548         * Item 15:  Have `operator=' return a reference to `*this'.
   2549 
   2550         * Item 23:  Don't try to return a reference when you must
   2551           return an object.
   2552 
   2553 
   2554      Also warn about violations of the following style guidelines from
   2555      Scott Meyers' `More Effective C++' book:
   2556 
   2557         * Item 6:  Distinguish between prefix and postfix forms of
   2558           increment and decrement operators.
   2559 
   2560         * Item 7:  Never overload `&&', `||', or `,'.
   2561 
   2562 
   2563      When selecting this option, be aware that the standard library
   2564      headers do not obey all of these guidelines; use `grep -v' to
   2565      filter out those warnings.
   2566 
   2567 `-Wstrict-null-sentinel (C++ and Objective-C++ only)'
   2568      Warn also about the use of an uncasted `NULL' as sentinel.  When
   2569      compiling only with GCC this is a valid sentinel, as `NULL' is
   2570      defined to `__null'.  Although it is a null pointer constant not a
   2571      null pointer, it is guaranteed to be of the same size as a
   2572      pointer.  But this use is not portable across different compilers.
   2573 
   2574 `-Wno-non-template-friend (C++ and Objective-C++ only)'
   2575      Disable warnings when non-templatized friend functions are declared
   2576      within a template.  Since the advent of explicit template
   2577      specification support in G++, if the name of the friend is an
   2578      unqualified-id (i.e., `friend foo(int)'), the C++ language
   2579      specification demands that the friend declare or define an
   2580      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
   2581      implemented explicit specification, unqualified-ids could be
   2582      interpreted as a particular specialization of a templatized
   2583      function.  Because this non-conforming behavior is no longer the
   2584      default behavior for G++, `-Wnon-template-friend' allows the
   2585      compiler to check existing code for potential trouble spots and is
   2586      on by default.  This new compiler behavior can be turned off with
   2587      `-Wno-non-template-friend' which keeps the conformant compiler code
   2588      but disables the helpful warning.
   2589 
   2590 `-Wold-style-cast (C++ and Objective-C++ only)'
   2591      Warn if an old-style (C-style) cast to a non-void type is used
   2592      within a C++ program.  The new-style casts (`dynamic_cast',
   2593      `static_cast', `reinterpret_cast', and `const_cast') are less
   2594      vulnerable to unintended effects and much easier to search for.
   2595 
   2596 `-Woverloaded-virtual (C++ and Objective-C++ only)'
   2597      Warn when a function declaration hides virtual functions from a
   2598      base class.  For example, in:
   2599 
   2600           struct A {
   2601             virtual void f();
   2602           };
   2603 
   2604           struct B: public A {
   2605             void f(int);
   2606           };
   2607 
   2608      the `A' class version of `f' is hidden in `B', and code like:
   2609 
   2610           B* b;
   2611           b->f();
   2612 
   2613      will fail to compile.
   2614 
   2615 `-Wno-pmf-conversions (C++ and Objective-C++ only)'
   2616      Disable the diagnostic for converting a bound pointer to member
   2617      function to a plain pointer.
   2618 
   2619 `-Wsign-promo (C++ and Objective-C++ only)'
   2620      Warn when overload resolution chooses a promotion from unsigned or
   2621      enumerated type to a signed type, over a conversion to an unsigned
   2622      type of the same size.  Previous versions of G++ would try to
   2623      preserve unsignedness, but the standard mandates the current
   2624      behavior.
   2625 
   2626           struct A {
   2627             operator int ();
   2628             A& operator = (int);
   2629           };
   2630 
   2631           main ()
   2632           {
   2633             A a,b;
   2634             a = b;
   2635           }
   2636 
   2637      In this example, G++ will synthesize a default `A& operator =
   2638      (const A&);', while cfront will use the user-defined `operator ='.
   2639 
   2640 
   2641 File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
   2642 
   2643 3.6 Options Controlling Objective-C and Objective-C++ Dialects
   2644 ==============================================================
   2645 
   2646 (NOTE: This manual does not describe the Objective-C and Objective-C++
   2647 languages themselves.  *Note Language Standards Supported by GCC:
   2648 Standards, for references.)
   2649 
   2650  This section describes the command-line options that are only
   2651 meaningful for Objective-C and Objective-C++ programs, but you can also
   2652 use most of the language-independent GNU compiler options.  For
   2653 example, you might compile a file `some_class.m' like this:
   2654 
   2655      gcc -g -fgnu-runtime -O -c some_class.m
   2656 
   2657 In this example, `-fgnu-runtime' is an option meant only for
   2658 Objective-C and Objective-C++ programs; you can use the other options
   2659 with any language supported by GCC.
   2660 
   2661  Note that since Objective-C is an extension of the C language,
   2662 Objective-C compilations may also use options specific to the C
   2663 front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
   2664 compilations may use C++-specific options (e.g., `-Wabi').
   2665 
   2666  Here is a list of options that are _only_ for compiling Objective-C
   2667 and Objective-C++ programs:
   2668 
   2669 `-fconstant-string-class=CLASS-NAME'
   2670      Use CLASS-NAME as the name of the class to instantiate for each
   2671      literal string specified with the syntax `@"..."'.  The default
   2672      class name is `NXConstantString' if the GNU runtime is being used,
   2673      and `NSConstantString' if the NeXT runtime is being used (see
   2674      below).  The `-fconstant-cfstrings' option, if also present, will
   2675      override the `-fconstant-string-class' setting and cause `@"..."'
   2676      literals to be laid out as constant CoreFoundation strings.
   2677 
   2678 `-fgnu-runtime'
   2679      Generate object code compatible with the standard GNU Objective-C
   2680      runtime.  This is the default for most types of systems.
   2681 
   2682 `-fnext-runtime'
   2683      Generate output compatible with the NeXT runtime.  This is the
   2684      default for NeXT-based systems, including Darwin and Mac OS X.
   2685      The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
   2686      option is used.
   2687 
   2688 `-fno-nil-receivers'
   2689      Assume that all Objective-C message dispatches (`[receiver
   2690      message:arg]') in this translation unit ensure that the receiver is
   2691      not `nil'.  This allows for more efficient entry points in the
   2692      runtime to be used.  This option is only available in conjunction
   2693      with the NeXT runtime and ABI version 0 or 1.
   2694 
   2695 `-fobjc-abi-version=N'
   2696      Use version N of the Objective-C ABI for the selected runtime.
   2697      This option is currently supported only for the NeXT runtime.  In
   2698      that case, Version 0 is the traditional (32-bit) ABI without
   2699      support for properties and other Objective-C 2.0 additions.
   2700      Version 1 is the traditional (32-bit) ABI with support for
   2701      properties and other Objective-C 2.0 additions.  Version 2 is the
   2702      modern (64-bit) ABI.  If nothing is specified, the default is
   2703      Version 0 on 32-bit target machines, and Version 2 on 64-bit
   2704      target machines.
   2705 
   2706 `-fobjc-call-cxx-cdtors'
   2707      For each Objective-C class, check if any of its instance variables
   2708      is a C++ object with a non-trivial default constructor.  If so,
   2709      synthesize a special `- (id) .cxx_construct' instance method that
   2710      will run non-trivial default constructors on any such instance
   2711      variables, in order, and then return `self'.  Similarly, check if
   2712      any instance variable is a C++ object with a non-trivial
   2713      destructor, and if so, synthesize a special `- (void)
   2714      .cxx_destruct' method that will run all such default destructors,
   2715      in reverse order.
   2716 
   2717      The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
   2718      thusly generated will only operate on instance variables declared
   2719      in the current Objective-C class, and not those inherited from
   2720      superclasses.  It is the responsibility of the Objective-C runtime
   2721      to invoke all such methods in an object's inheritance hierarchy.
   2722      The `- (id) .cxx_construct' methods will be invoked by the runtime
   2723      immediately after a new object instance is allocated; the `-
   2724      (void) .cxx_destruct' methods will be invoked immediately before
   2725      the runtime deallocates an object instance.
   2726 
   2727      As of this writing, only the NeXT runtime on Mac OS X 10.4 and
   2728      later has support for invoking the `- (id) .cxx_construct' and `-
   2729      (void) .cxx_destruct' methods.
   2730 
   2731 `-fobjc-direct-dispatch'
   2732      Allow fast jumps to the message dispatcher.  On Darwin this is
   2733      accomplished via the comm page.
   2734 
   2735 `-fobjc-exceptions'
   2736      Enable syntactic support for structured exception handling in
   2737      Objective-C, similar to what is offered by C++ and Java.  This
   2738      option is required to use the Objective-C keywords `@try',
   2739      `@throw', `@catch', `@finally' and `@synchronized'.  This option
   2740      is available with both the GNU runtime and the NeXT runtime (but
   2741      not available in conjunction with the NeXT runtime on Mac OS X
   2742      10.2 and earlier).
   2743 
   2744 `-fobjc-gc'
   2745      Enable garbage collection (GC) in Objective-C and Objective-C++
   2746      programs.  This option is only available with the NeXT runtime; the
   2747      GNU runtime has a different garbage collection implementation that
   2748      does not require special compiler flags.
   2749 
   2750 `-fobjc-nilcheck'
   2751      For the NeXT runtime with version 2 of the ABI, check for a nil
   2752      receiver in method invocations before doing the actual method call.
   2753      This is the default and can be disabled using
   2754      `-fno-objc-nilcheck'.  Class methods and super calls are never
   2755      checked for nil in this way no matter what this flag is set to.
   2756      Currently this flag does nothing when the GNU runtime, or an older
   2757      version of the NeXT runtime ABI, is used.
   2758 
   2759 `-fobjc-std=objc1'
   2760      Conform to the language syntax of Objective-C 1.0, the language
   2761      recognized by GCC 4.0.  This only affects the Objective-C
   2762      additions to the C/C++ language; it does not affect conformance to
   2763      C/C++ standards, which is controlled by the separate C/C++ dialect
   2764      option flags.  When this option is used with the Objective-C or
   2765      Objective-C++ compiler, any Objective-C syntax that is not
   2766      recognized by GCC 4.0 is rejected.  This is useful if you need to
   2767      make sure that your Objective-C code can be compiled with older
   2768      versions of GCC.
   2769 
   2770 `-freplace-objc-classes'
   2771      Emit a special marker instructing `ld(1)' not to statically link in
   2772      the resulting object file, and allow `dyld(1)' to load it in at
   2773      run time instead.  This is used in conjunction with the
   2774      Fix-and-Continue debugging mode, where the object file in question
   2775      may be recompiled and dynamically reloaded in the course of
   2776      program execution, without the need to restart the program itself.
   2777      Currently, Fix-and-Continue functionality is only available in
   2778      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
   2779 
   2780 `-fzero-link'
   2781      When compiling for the NeXT runtime, the compiler ordinarily
   2782      replaces calls to `objc_getClass("...")' (when the name of the
   2783      class is known at compile time) with static class references that
   2784      get initialized at load time, which improves run-time performance.
   2785      Specifying the `-fzero-link' flag suppresses this behavior and
   2786      causes calls to `objc_getClass("...")' to be retained.  This is
   2787      useful in Zero-Link debugging mode, since it allows for individual
   2788      class implementations to be modified during program execution.
   2789      The GNU runtime currently always retains calls to
   2790      `objc_get_class("...")' regardless of command line options.
   2791 
   2792 `-gen-decls'
   2793      Dump interface declarations for all classes seen in the source
   2794      file to a file named `SOURCENAME.decl'.
   2795 
   2796 `-Wassign-intercept (Objective-C and Objective-C++ only)'
   2797      Warn whenever an Objective-C assignment is being intercepted by the
   2798      garbage collector.
   2799 
   2800 `-Wno-protocol (Objective-C and Objective-C++ only)'
   2801      If a class is declared to implement a protocol, a warning is
   2802      issued for every method in the protocol that is not implemented by
   2803      the class.  The default behavior is to issue a warning for every
   2804      method not explicitly implemented in the class, even if a method
   2805      implementation is inherited from the superclass.  If you use the
   2806      `-Wno-protocol' option, then methods inherited from the superclass
   2807      are considered to be implemented, and no warning is issued for
   2808      them.
   2809 
   2810 `-Wselector (Objective-C and Objective-C++ only)'
   2811      Warn if multiple methods of different types for the same selector
   2812      are found during compilation.  The check is performed on the list
   2813      of methods in the final stage of compilation.  Additionally, a
   2814      check is performed for each selector appearing in a
   2815      `@selector(...)'  expression, and a corresponding method for that
   2816      selector has been found during compilation.  Because these checks
   2817      scan the method table only at the end of compilation, these
   2818      warnings are not produced if the final stage of compilation is not
   2819      reached, for example because an error is found during compilation,
   2820      or because the `-fsyntax-only' option is being used.
   2821 
   2822 `-Wstrict-selector-match (Objective-C and Objective-C++ only)'
   2823      Warn if multiple methods with differing argument and/or return
   2824      types are found for a given selector when attempting to send a
   2825      message using this selector to a receiver of type `id' or `Class'.
   2826      When this flag is off (which is the default behavior), the
   2827      compiler will omit such warnings if any differences found are
   2828      confined to types which share the same size and alignment.
   2829 
   2830 `-Wundeclared-selector (Objective-C and Objective-C++ only)'
   2831      Warn if a `@selector(...)' expression referring to an undeclared
   2832      selector is found.  A selector is considered undeclared if no
   2833      method with that name has been declared before the
   2834      `@selector(...)' expression, either explicitly in an `@interface'
   2835      or `@protocol' declaration, or implicitly in an `@implementation'
   2836      section.  This option always performs its checks as soon as a
   2837      `@selector(...)' expression is found, while `-Wselector' only
   2838      performs its checks in the final stage of compilation.  This also
   2839      enforces the coding style convention that methods and selectors
   2840      must be declared before being used.
   2841 
   2842 `-print-objc-runtime-info'
   2843      Generate C header describing the largest structure that is passed
   2844      by value, if any.
   2845 
   2846 
   2847 
   2848 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
   2849 
   2850 3.7 Options to Control Diagnostic Messages Formatting
   2851 =====================================================
   2852 
   2853 Traditionally, diagnostic messages have been formatted irrespective of
   2854 the output device's aspect (e.g. its width, ...).  The options described
   2855 below can be used to control the diagnostic messages formatting
   2856 algorithm, e.g. how many characters per line, how often source location
   2857 information should be reported.  Right now, only the C++ front end can
   2858 honor these options.  However it is expected, in the near future, that
   2859 the remaining front ends would be able to digest them correctly.
   2860 
   2861 `-fmessage-length=N'
   2862      Try to format error messages so that they fit on lines of about N
   2863      characters.  The default is 72 characters for `g++' and 0 for the
   2864      rest of the front ends supported by GCC.  If N is zero, then no
   2865      line-wrapping will be done; each error message will appear on a
   2866      single line.
   2867 
   2868 `-fdiagnostics-show-location=once'
   2869      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   2870      messages reporter to emit _once_ source location information; that
   2871      is, in case the message is too long to fit on a single physical
   2872      line and has to be wrapped, the source location won't be emitted
   2873      (as prefix) again, over and over, in subsequent continuation
   2874      lines.  This is the default behavior.
   2875 
   2876 `-fdiagnostics-show-location=every-line'
   2877      Only meaningful in line-wrapping mode.  Instructs the diagnostic
   2878      messages reporter to emit the same source location information (as
   2879      prefix) for physical lines that result from the process of breaking
   2880      a message which is too long to fit on a single line.
   2881 
   2882 `-fno-diagnostics-show-option'
   2883      By default, each diagnostic emitted includes text which indicates
   2884      the command line option that directly controls the diagnostic (if
   2885      such an option is known to the diagnostic machinery).  Specifying
   2886      the `-fno-diagnostics-show-option' flag suppresses that behavior.
   2887 
   2888 `-Wcoverage-mismatch'
   2889      Warn if feedback profiles do not match when using the
   2890      `-fprofile-use' option.  If a source file was changed between
   2891      `-fprofile-gen' and `-fprofile-use', the files with the profile
   2892      feedback can fail to match the source file and GCC can not use the
   2893      profile feedback information.  By default, this warning is enabled
   2894      and is treated as an error.  `-Wno-coverage-mismatch' can be used
   2895      to disable the warning or `-Wno-error=coverage-mismatch' can be
   2896      used to disable the error.  Disable the error for this warning can
   2897      result in poorly optimized code, so disabling the error is useful
   2898      only in the case of very minor changes such as bug fixes to an
   2899      existing code-base.  Completely disabling the warning is not
   2900      recommended.
   2901 
   2902 
   2903 
   2904 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
   2905 
   2906 3.8 Options to Request or Suppress Warnings
   2907 ===========================================
   2908 
   2909 Warnings are diagnostic messages that report constructions which are
   2910 not inherently erroneous but which are risky or suggest there may have
   2911 been an error.
   2912 
   2913  The following language-independent options do not enable specific
   2914 warnings but control the kinds of diagnostics produced by GCC.
   2915 
   2916 `-fsyntax-only'
   2917      Check the code for syntax errors, but don't do anything beyond
   2918      that.
   2919 
   2920 `-fmax-errors=N'
   2921      Limits the maximum number of error messages to N, at which point
   2922      GCC bails out rather than attempting to continue processing the
   2923      source code.  If N is 0 (the default), there is no limit on the
   2924      number of error messages produced.  If `-Wfatal-errors' is also
   2925      specified, then `-Wfatal-errors' takes precedence over this option.
   2926 
   2927 `-w'
   2928      Inhibit all warning messages.
   2929 
   2930 `-Werror'
   2931      Make all warnings into errors.
   2932 
   2933 `-Werror='
   2934      Make the specified warning into an error.  The specifier for a
   2935      warning is appended, for example `-Werror=switch' turns the
   2936      warnings controlled by `-Wswitch' into errors.  This switch takes a
   2937      negative form, to be used to negate `-Werror' for specific
   2938      warnings, for example `-Wno-error=switch' makes `-Wswitch'
   2939      warnings not be errors, even when `-Werror' is in effect.
   2940 
   2941      The warning message for each controllable warning includes the
   2942      option which controls the warning.  That option can then be used
   2943      with `-Werror=' and `-Wno-error=' as described above.  (Printing
   2944      of the option in the warning message can be disabled using the
   2945      `-fno-diagnostics-show-option' flag.)
   2946 
   2947      Note that specifying `-Werror='FOO automatically implies `-W'FOO.
   2948      However, `-Wno-error='FOO does not imply anything.
   2949 
   2950 `-Wfatal-errors'
   2951      This option causes the compiler to abort compilation on the first
   2952      error occurred rather than trying to keep going and printing
   2953      further error messages.
   2954 
   2955 
   2956  You can request many specific warnings with options beginning `-W',
   2957 for example `-Wimplicit' to request warnings on implicit declarations.
   2958 Each of these specific warning options also has a negative form
   2959 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
   2960 This manual lists only one of the two forms, whichever is not the
   2961 default.  For further, language-specific options also refer to *note
   2962 C++ Dialect Options:: and *note Objective-C and Objective-C++ Dialect
   2963 Options::.
   2964 
   2965  When an unrecognized warning option is requested (e.g.,
   2966 `-Wunknown-warning'), GCC will emit a diagnostic stating that the
   2967 option is not recognized.  However, if the `-Wno-' form is used, the
   2968 behavior is slightly different: No diagnostic will be produced for
   2969 `-Wno-unknown-warning' unless other diagnostics are being produced.
   2970 This allows the use of new `-Wno-' options with old compilers, but if
   2971 something goes wrong, the compiler will warn that an unrecognized
   2972 option was used.
   2973 
   2974 `-pedantic'
   2975      Issue all the warnings demanded by strict ISO C and ISO C++;
   2976      reject all programs that use forbidden extensions, and some other
   2977      programs that do not follow ISO C and ISO C++.  For ISO C, follows
   2978      the version of the ISO C standard specified by any `-std' option
   2979      used.
   2980 
   2981      Valid ISO C and ISO C++ programs should compile properly with or
   2982      without this option (though a rare few will require `-ansi' or a
   2983      `-std' option specifying the required version of ISO C).  However,
   2984      without this option, certain GNU extensions and traditional C and
   2985      C++ features are supported as well.  With this option, they are
   2986      rejected.
   2987 
   2988      `-pedantic' does not cause warning messages for use of the
   2989      alternate keywords whose names begin and end with `__'.  Pedantic
   2990      warnings are also disabled in the expression that follows
   2991      `__extension__'.  However, only system header files should use
   2992      these escape routes; application programs should avoid them.
   2993      *Note Alternate Keywords::.
   2994 
   2995      Some users try to use `-pedantic' to check programs for strict ISO
   2996      C conformance.  They soon find that it does not do quite what they
   2997      want: it finds some non-ISO practices, but not all--only those for
   2998      which ISO C _requires_ a diagnostic, and some others for which
   2999      diagnostics have been added.
   3000 
   3001      A feature to report any failure to conform to ISO C might be
   3002      useful in some instances, but would require considerable
   3003      additional work and would be quite different from `-pedantic'.  We
   3004      don't have plans to support such a feature in the near future.
   3005 
   3006      Where the standard specified with `-std' represents a GNU extended
   3007      dialect of C, such as `gnu90' or `gnu99', there is a corresponding
   3008      "base standard", the version of ISO C on which the GNU extended
   3009      dialect is based.  Warnings from `-pedantic' are given where they
   3010      are required by the base standard.  (It would not make sense for
   3011      such warnings to be given only for features not in the specified
   3012      GNU C dialect, since by definition the GNU dialects of C include
   3013      all features the compiler supports with the given option, and
   3014      there would be nothing to warn about.)
   3015 
   3016 `-pedantic-errors'
   3017      Like `-pedantic', except that errors are produced rather than
   3018      warnings.
   3019 
   3020 `-Wall'
   3021      This enables all the warnings about constructions that some users
   3022      consider questionable, and that are easy to avoid (or modify to
   3023      prevent the warning), even in conjunction with macros.  This also
   3024      enables some language-specific warnings described in *note C++
   3025      Dialect Options:: and *note Objective-C and Objective-C++ Dialect
   3026      Options::.
   3027 
   3028      `-Wall' turns on the following warning flags:
   3029 
   3030           -Waddress
   3031           -Warray-bounds (only with `-O2')
   3032           -Wc++0x-compat
   3033           -Wchar-subscripts
   3034           -Wenum-compare (in C/Objc; this is on by default in C++)
   3035           -Wimplicit-int (C and Objective-C only)
   3036           -Wimplicit-function-declaration (C and Objective-C only)
   3037           -Wcomment
   3038           -Wformat
   3039           -Wmain (only for C/ObjC and unless `-ffreestanding')
   3040           -Wmaybe-uninitialized
   3041           -Wmissing-braces
   3042           -Wnonnull
   3043           -Wparentheses
   3044           -Wpointer-sign
   3045           -Wreorder
   3046           -Wreturn-type
   3047           -Wripa-opt-mismatch
   3048           -Wsequence-point
   3049           -Wsign-compare (only in C++)
   3050           -Wstrict-aliasing
   3051           -Wstrict-overflow=1
   3052           -Wswitch
   3053           -Wtrigraphs
   3054           -Wuninitialized
   3055           -Wunknown-pragmas
   3056           -Wunused-function
   3057           -Wunused-label
   3058           -Wunused-value
   3059           -Wunused-variable
   3060           -Wvolatile-register-var
   3061 
   3062      Note that some warning flags are not implied by `-Wall'.  Some of
   3063      them warn about constructions that users generally do not consider
   3064      questionable, but which occasionally you might wish to check for;
   3065      others warn about constructions that are necessary or hard to
   3066      avoid in some cases, and there is no simple way to modify the code
   3067      to suppress the warning. Some of them are enabled by `-Wextra' but
   3068      many of them must be enabled individually.
   3069 
   3070 `-Wextra'
   3071      This enables some extra warning flags that are not enabled by
   3072      `-Wall'. (This option used to be called `-W'.  The older name is
   3073      still supported, but the newer name is more descriptive.)
   3074 
   3075           -Wclobbered
   3076           -Wempty-body
   3077           -Wignored-qualifiers
   3078           -Wmissing-field-initializers
   3079           -Wmissing-parameter-type (C only)
   3080           -Wold-style-declaration (C only)
   3081           -Woverride-init
   3082           -Wsign-compare
   3083           -Wtype-limits
   3084           -Wuninitialized
   3085           -Wunused-parameter (only with `-Wunused' or `-Wall')
   3086           -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
   3087 
   3088      The option `-Wextra' also prints warning messages for the
   3089      following cases:
   3090 
   3091         * A pointer is compared against integer zero with `<', `<=',
   3092           `>', or `>='.
   3093 
   3094         * (C++ only) An enumerator and a non-enumerator both appear in a
   3095           conditional expression.
   3096 
   3097         * (C++ only) Ambiguous virtual bases.
   3098 
   3099         * (C++ only) Subscripting an array which has been declared
   3100           `register'.
   3101 
   3102         * (C++ only) Taking the address of a variable which has been
   3103           declared `register'.
   3104 
   3105         * (C++ only) A base class is not initialized in a derived
   3106           class' copy constructor.
   3107 
   3108 
   3109 `-Wchar-subscripts'
   3110      Warn if an array subscript has type `char'.  This is a common cause
   3111      of error, as programmers often forget that this type is signed on
   3112      some machines.  This warning is enabled by `-Wall'.
   3113 
   3114 `-Wcomment'
   3115      Warn whenever a comment-start sequence `/*' appears in a `/*'
   3116      comment, or whenever a Backslash-Newline appears in a `//' comment.
   3117      This warning is enabled by `-Wall'.
   3118 
   3119 `-Wno-cpp'
   3120      (C, Objective-C, C++, Objective-C++ and Fortran only)
   3121 
   3122      Suppress warning messages emitted by `#warning' directives.
   3123 
   3124 `-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
   3125      Give a warning when a value of type `float' is implicitly promoted
   3126      to `double'.  CPUs with a 32-bit "single-precision" floating-point
   3127      unit implement `float' in hardware, but emulate `double' in
   3128      software.  On such a machine, doing computations using `double'
   3129      values is much more expensive because of the overhead required for
   3130      software emulation.
   3131 
   3132      It is easy to accidentally do computations with `double' because
   3133      floating-point literals are implicitly of type `double'.  For
   3134      example, in:
   3135           float area(float radius)
   3136           {
   3137              return 3.14159 * radius * radius;
   3138           }
   3139      the compiler will perform the entire computation with `double'
   3140      because the floating-point literal is a `double'.
   3141 
   3142 `-Wformat'
   3143      Check calls to `printf' and `scanf', etc., to make sure that the
   3144      arguments supplied have types appropriate to the format string
   3145      specified, and that the conversions specified in the format string
   3146      make sense.  This includes standard functions, and others
   3147      specified by format attributes (*note Function Attributes::), in
   3148      the `printf', `scanf', `strftime' and `strfmon' (an X/Open
   3149      extension, not in the C standard) families (or other
   3150      target-specific families).  Which functions are checked without
   3151      format attributes having been specified depends on the standard
   3152      version selected, and such checks of functions without the
   3153      attribute specified are disabled by `-ffreestanding' or
   3154      `-fno-builtin'.
   3155 
   3156      The formats are checked against the format features supported by
   3157      GNU libc version 2.2.  These include all ISO C90 and C99 features,
   3158      as well as features from the Single Unix Specification and some
   3159      BSD and GNU extensions.  Other library implementations may not
   3160      support all these features; GCC does not support warning about
   3161      features that go beyond a particular library's limitations.
   3162      However, if `-pedantic' is used with `-Wformat', warnings will be
   3163      given about format features not in the selected standard version
   3164      (but not for `strfmon' formats, since those are not in any version
   3165      of the C standard).  *Note Options Controlling C Dialect: C
   3166      Dialect Options.
   3167 
   3168      Since `-Wformat' also checks for null format arguments for several
   3169      functions, `-Wformat' also implies `-Wnonnull'.
   3170 
   3171      `-Wformat' is included in `-Wall'.  For more control over some
   3172      aspects of format checking, the options `-Wformat-y2k',
   3173      `-Wno-format-extra-args', `-Wno-format-zero-length',
   3174      `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
   3175      available, but are not included in `-Wall'.
   3176 
   3177 `-Wformat-y2k'
   3178      If `-Wformat' is specified, also warn about `strftime' formats
   3179      which may yield only a two-digit year.
   3180 
   3181 `-Wno-format-contains-nul'
   3182      If `-Wformat' is specified, do not warn about format strings that
   3183      contain NUL bytes.
   3184 
   3185 `-Wno-format-extra-args'
   3186      If `-Wformat' is specified, do not warn about excess arguments to a
   3187      `printf' or `scanf' format function.  The C standard specifies
   3188      that such arguments are ignored.
   3189 
   3190      Where the unused arguments lie between used arguments that are
   3191      specified with `$' operand number specifications, normally
   3192      warnings are still given, since the implementation could not know
   3193      what type to pass to `va_arg' to skip the unused arguments.
   3194      However, in the case of `scanf' formats, this option will suppress
   3195      the warning if the unused arguments are all pointers, since the
   3196      Single Unix Specification says that such unused arguments are
   3197      allowed.
   3198 
   3199 `-Wno-format-zero-length (C and Objective-C only)'
   3200      If `-Wformat' is specified, do not warn about zero-length formats.
   3201      The C standard specifies that zero-length formats are allowed.
   3202 
   3203 `-Wformat-nonliteral'
   3204      If `-Wformat' is specified, also warn if the format string is not a
   3205      string literal and so cannot be checked, unless the format function
   3206      takes its format arguments as a `va_list'.
   3207 
   3208 `-Wformat-security'
   3209      If `-Wformat' is specified, also warn about uses of format
   3210      functions that represent possible security problems.  At present,
   3211      this warns about calls to `printf' and `scanf' functions where the
   3212      format string is not a string literal and there are no format
   3213      arguments, as in `printf (foo);'.  This may be a security hole if
   3214      the format string came from untrusted input and contains `%n'.
   3215      (This is currently a subset of what `-Wformat-nonliteral' warns
   3216      about, but in future warnings may be added to `-Wformat-security'
   3217      that are not included in `-Wformat-nonliteral'.)
   3218 
   3219 `-Wformat=2'
   3220      Enable `-Wformat' plus format checks not included in `-Wformat'.
   3221      Currently equivalent to `-Wformat -Wformat-nonliteral
   3222      -Wformat-security -Wformat-y2k'.
   3223 
   3224 `-Wnonnull (C, C++, Objective-C, and Objective-C++ only)'
   3225      Warn about passing a null pointer for arguments marked as
   3226      requiring a non-null value by the `nonnull' function attribute.
   3227 
   3228      `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
   3229      disabled with the `-Wno-nonnull' option.
   3230 
   3231 `-Winit-self (C, C++, Objective-C and Objective-C++ only)'
   3232      Warn about uninitialized variables which are initialized with
   3233      themselves.  Note this option can only be used with the
   3234      `-Wuninitialized' option.
   3235 
   3236      For example, GCC will warn about `i' being uninitialized in the
   3237      following snippet only when `-Winit-self' has been specified:
   3238           int f()
   3239           {
   3240             int i = i;
   3241             return i;
   3242           }
   3243 
   3244 `-Wimplicit-int (C and Objective-C only)'
   3245      Warn when a declaration does not specify a type.  This warning is
   3246      enabled by `-Wall'.
   3247 
   3248 `-Wimplicit-function-declaration (C and Objective-C only)'
   3249      Give a warning whenever a function is used before being declared.
   3250      In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
   3251      by default and it is made into an error by `-pedantic-errors'.
   3252      This warning is also enabled by `-Wall'.
   3253 
   3254 `-Wimplicit (C and Objective-C only)'
   3255      Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
   3256      This warning is enabled by `-Wall'.
   3257 
   3258 `-Wignored-qualifiers (C and C++ only)'
   3259      Warn if the return type of a function has a type qualifier such as
   3260      `const'.  For ISO C such a type qualifier has no effect, since the
   3261      value returned by a function is not an lvalue.  For C++, the
   3262      warning is only emitted for scalar types or `void'.  ISO C
   3263      prohibits qualified `void' return types on function definitions,
   3264      so such return types always receive a warning even without this
   3265      option.
   3266 
   3267      This warning is also enabled by `-Wextra'.
   3268 
   3269 `-Wmain'
   3270      Warn if the type of `main' is suspicious.  `main' should be a
   3271      function with external linkage, returning int, taking either zero
   3272      arguments, two, or three arguments of appropriate types.  This
   3273      warning is enabled by default in C++ and is enabled by either
   3274      `-Wall' or `-pedantic'.
   3275 
   3276 `-Wmissing-braces'
   3277      Warn if an aggregate or union initializer is not fully bracketed.
   3278      In the following example, the initializer for `a' is not fully
   3279      bracketed, but that for `b' is fully bracketed.
   3280 
   3281           int a[2][2] = { 0, 1, 2, 3 };
   3282           int b[2][2] = { { 0, 1 }, { 2, 3 } };
   3283 
   3284      This warning is enabled by `-Wall'.
   3285 
   3286 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
   3287      Warn if a user-supplied include directory does not exist.
   3288 
   3289 `-Wparentheses'
   3290      Warn if parentheses are omitted in certain contexts, such as when
   3291      there is an assignment in a context where a truth value is
   3292      expected, or when operators are nested whose precedence people
   3293      often get confused about.
   3294 
   3295      Also warn if a comparison like `x<=y<=z' appears; this is
   3296      equivalent to `(x<=y ? 1 : 0) <= z', which is a different
   3297      interpretation from that of ordinary mathematical notation.
   3298 
   3299      Also warn about constructions where there may be confusion to which
   3300      `if' statement an `else' branch belongs.  Here is an example of
   3301      such a case:
   3302 
   3303           {
   3304             if (a)
   3305               if (b)
   3306                 foo ();
   3307             else
   3308               bar ();
   3309           }
   3310 
   3311      In C/C++, every `else' branch belongs to the innermost possible
   3312      `if' statement, which in this example is `if (b)'.  This is often
   3313      not what the programmer expected, as illustrated in the above
   3314      example by indentation the programmer chose.  When there is the
   3315      potential for this confusion, GCC will issue a warning when this
   3316      flag is specified.  To eliminate the warning, add explicit braces
   3317      around the innermost `if' statement so there is no way the `else'
   3318      could belong to the enclosing `if'.  The resulting code would look
   3319      like this:
   3320 
   3321           {
   3322             if (a)
   3323               {
   3324                 if (b)
   3325                   foo ();
   3326                 else
   3327                   bar ();
   3328               }
   3329           }
   3330 
   3331      Also warn for dangerous uses of the ?: with omitted middle operand
   3332      GNU extension. When the condition in the ?: operator is a boolean
   3333      expression the omitted value will be always 1. Often the user
   3334      expects it to be a value computed inside the conditional
   3335      expression instead.
   3336 
   3337      This warning is enabled by `-Wall'.
   3338 
   3339 `-Wsequence-point'
   3340      Warn about code that may have undefined semantics because of
   3341      violations of sequence point rules in the C and C++ standards.
   3342 
   3343      The C and C++ standards defines the order in which expressions in
   3344      a C/C++ program are evaluated in terms of "sequence points", which
   3345      represent a partial ordering between the execution of parts of the
   3346      program: those executed before the sequence point, and those
   3347      executed after it.  These occur after the evaluation of a full
   3348      expression (one which is not part of a larger expression), after
   3349      the evaluation of the first operand of a `&&', `||', `? :' or `,'
   3350      (comma) operator, before a function is called (but after the
   3351      evaluation of its arguments and the expression denoting the called
   3352      function), and in certain other places.  Other than as expressed
   3353      by the sequence point rules, the order of evaluation of
   3354      subexpressions of an expression is not specified.  All these rules
   3355      describe only a partial order rather than a total order, since,
   3356      for example, if two functions are called within one expression
   3357      with no sequence point between them, the order in which the
   3358      functions are called is not specified.  However, the standards
   3359      committee have ruled that function calls do not overlap.
   3360 
   3361      It is not specified when between sequence points modifications to
   3362      the values of objects take effect.  Programs whose behavior
   3363      depends on this have undefined behavior; the C and C++ standards
   3364      specify that "Between the previous and next sequence point an
   3365      object shall have its stored value modified at most once by the
   3366      evaluation of an expression.  Furthermore, the prior value shall
   3367      be read only to determine the value to be stored.".  If a program
   3368      breaks these rules, the results on any particular implementation
   3369      are entirely unpredictable.
   3370 
   3371      Examples of code with undefined behavior are `a = a++;', `a[n] =
   3372      b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
   3373      diagnosed by this option, and it may give an occasional false
   3374      positive result, but in general it has been found fairly effective
   3375      at detecting this sort of problem in programs.
   3376 
   3377      The standard is worded confusingly, therefore there is some debate
   3378      over the precise meaning of the sequence point rules in subtle
   3379      cases.  Links to discussions of the problem, including proposed
   3380      formal definitions, may be found on the GCC readings page, at
   3381      `http://gcc.gnu.org/readings.html'.
   3382 
   3383      This warning is enabled by `-Wall' for C and C++.
   3384 
   3385 `-Wself-assign'
   3386      Warn about self-assignment and self-initialization. This warning
   3387      is intended for detecting accidental self-assignment due to typos,
   3388      and therefore does not warn on a statement that is semantically a
   3389      self-assignment after constant folding. Here is an example of what
   3390      will trigger a self-assign warning and what will not:
   3391 
   3392           void func()
   3393           {
   3394              int i = 2;
   3395              int x = x;   /* warn */
   3396              float f = 5.0;
   3397              double a[3];
   3398 
   3399              i = i + 0;   /* not warn */
   3400              f = f / 1;   /* not warn */
   3401              a[1] = a[1]; /* warn */
   3402              i += 0;      /* not warn */
   3403           }
   3404 
   3405      In C++ it will not warn on self-assignment of non-POD variables
   3406      unless `-Wself-assign-non-pod' is also enabled.
   3407 
   3408 `-Wself-assign-non-pod'
   3409      Warn about self-assignment of non-POD variables. This is a
   3410      C++-specific warning and only effective when `-Wself-assign' is
   3411      enabled.
   3412 
   3413      There are cases where self-assignment might be intentional. For
   3414      example, a C++ programmer might write code to test whether an
   3415      overloaded `operator=' works when the same object is assigned to
   3416      itself.  One way to work around the self-assign warning in such
   3417      cases when this flag is enabled is using the functional form
   3418      `object.operator=(object)' instead of the assignment form `object
   3419      = object', as shown in the following example.
   3420 
   3421           void test_func()
   3422           {
   3423              MyType t;
   3424 
   3425              t.operator=(t);  // not warn
   3426              t = t;           // warn
   3427           }
   3428 
   3429 `-Wreturn-type'
   3430      Warn whenever a function is defined with a return-type that
   3431      defaults to `int'.  Also warn about any `return' statement with no
   3432      return-value in a function whose return-type is not `void'
   3433      (falling off the end of the function body is considered returning
   3434      without a value), and about a `return' statement with an
   3435      expression in a function whose return-type is `void'.
   3436 
   3437      For C++, a function without return type always produces a
   3438      diagnostic message, even when `-Wno-return-type' is specified.
   3439      The only exceptions are `main' and functions defined in system
   3440      headers.
   3441 
   3442      This warning is enabled by `-Wall'.
   3443 
   3444 `-Wripa-opt-mismatch'
   3445      When doing an FDO build with `-fprofile-use' and `-fripa', warn if
   3446      importing an axuiliary module that was built with a different GCC
   3447      command line during the profile-generate phase than the primary
   3448      module.
   3449 
   3450      This warning is enabled by `-Wall'.
   3451 
   3452 `-Wswitch'
   3453      Warn whenever a `switch' statement has an index of enumerated type
   3454      and lacks a `case' for one or more of the named codes of that
   3455      enumeration.  (The presence of a `default' label prevents this
   3456      warning.)  `case' labels outside the enumeration range also
   3457      provoke warnings when this option is used (even if there is a
   3458      `default' label).  This warning is enabled by `-Wall'.
   3459 
   3460 `-Wswitch-default'
   3461      Warn whenever a `switch' statement does not have a `default' case.
   3462 
   3463 `-Wswitch-enum'
   3464      Warn whenever a `switch' statement has an index of enumerated type
   3465      and lacks a `case' for one or more of the named codes of that
   3466      enumeration.  `case' labels outside the enumeration range also
   3467      provoke warnings when this option is used.  The only difference
   3468      between `-Wswitch' and this option is that this option gives a
   3469      warning about an omitted enumeration code even if there is a
   3470      `default' label.
   3471 
   3472 `-Wsync-nand (C and C++ only)'
   3473      Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
   3474      built-in functions are used.  These functions changed semantics in
   3475      GCC 4.4.
   3476 
   3477 `-Wthread-safety'
   3478      Warn about potential thread safety issues when the code is
   3479      annotated with thread safety attributes.
   3480 
   3481 `Wthread-unguarded-var'
   3482      Warn about shared variables not properly protected by locks
   3483      specified in the attributes. This flag is effective only with
   3484      `-Wthread-safety' and enabled by default.
   3485 
   3486 `Wthread-unguarded-func'
   3487      Warn about function calls not properly protected by locks
   3488      specified in the attributes. This flag is effective only with
   3489      `-Wthread-safety' and enabled by default.
   3490 
   3491 `Wthread-mismatched-lock-order'
   3492      Warn about lock acquisition order inconsistent with what specified
   3493      in the attributes. This flag is effective only with
   3494      `-Wthread-safety' and enabled by default.
   3495 
   3496 `Wthread-mismatched-lock-acq-rel'
   3497      Warn about mismatched lock acquisition and release. This flag is
   3498      effective only with `-Wthread-safety' and enabled by default.
   3499 
   3500 `Wthread-reentrant-lock'
   3501      Warn about a lock being acquired recursively. This flag is
   3502      effective only with `-Wthread-safety' and enabled by default.
   3503 
   3504 `Wthread-unsupported-lock-name'
   3505      Warn about uses of unsupported lock names in attributes. This flag
   3506      is effective only with `-Wthread-safety' and disabled by default.
   3507 
   3508 `Wthread-attr-bind-param'
   3509      Make the thread safety analysis try to bind the function
   3510      parameters used in the attributes. This flag is effective only
   3511      with `-Wthread-safety' and enabled by default.
   3512 
   3513 `-Wtrigraphs'
   3514      Warn if any trigraphs are encountered that might change the
   3515      meaning of the program (trigraphs within comments are not warned
   3516      about).  This warning is enabled by `-Wall'.
   3517 
   3518 `-Wunused-but-set-parameter'
   3519      Warn whenever a function parameter is assigned to, but otherwise
   3520      unused (aside from its declaration).
   3521 
   3522      To suppress this warning use the `unused' attribute (*note
   3523      Variable Attributes::).
   3524 
   3525      This warning is also enabled by `-Wunused' together with `-Wextra'.
   3526 
   3527 `-Wunused-but-set-variable'
   3528      Warn whenever a local variable is assigned to, but otherwise unused
   3529      (aside from its declaration).  This warning is enabled by `-Wall'.
   3530 
   3531      To suppress this warning use the `unused' attribute (*note
   3532      Variable Attributes::).
   3533 
   3534      This warning is also enabled by `-Wunused', which is enabled by
   3535      `-Wall'.
   3536 
   3537 `-Wunused-function'
   3538      Warn whenever a static function is declared but not defined or a
   3539      non-inline static function is unused.  This warning is enabled by
   3540      `-Wall'.
   3541 
   3542 `-Wunused-label'
   3543      Warn whenever a label is declared but not used.  This warning is
   3544      enabled by `-Wall'.
   3545 
   3546      To suppress this warning use the `unused' attribute (*note
   3547      Variable Attributes::).
   3548 
   3549 `-Wunused-parameter'
   3550      Warn whenever a function parameter is unused aside from its
   3551      declaration.
   3552 
   3553      To suppress this warning use the `unused' attribute (*note
   3554      Variable Attributes::).
   3555 
   3556 `-Wno-unused-result'
   3557      Do not warn if a caller of a function marked with attribute
   3558      `warn_unused_result' (*note Variable Attributes::) does not use
   3559      its return value. The default is `-Wunused-result'.
   3560 
   3561 `-Wunused-variable'
   3562      Warn whenever a local variable or non-constant static variable is
   3563      unused aside from its declaration.  This warning is enabled by
   3564      `-Wall'.
   3565 
   3566      To suppress this warning use the `unused' attribute (*note
   3567      Variable Attributes::).
   3568 
   3569      Note that a classic way to avoid `-Wunused-variable' warning is
   3570      using `x = x', but that does not work with `-Wself-assign'.  Use
   3571      `(void) x' or `static_cast<void>(x)' instead.
   3572 
   3573 `-Wunused-value'
   3574      Warn whenever a statement computes a result that is explicitly not
   3575      used. To suppress this warning cast the unused expression to
   3576      `void'. This includes an expression-statement or the left-hand
   3577      side of a comma expression that contains no side effects. For
   3578      example, an expression such as `x[i,j]' will cause a warning, while
   3579      `x[(void)i,j]' will not.
   3580 
   3581      This warning is enabled by `-Wall'.
   3582 
   3583 `-Wunused'
   3584      All the above `-Wunused' options combined.
   3585 
   3586      In order to get a warning about an unused function parameter, you
   3587      must either specify `-Wextra -Wunused' (note that `-Wall' implies
   3588      `-Wunused'), or separately specify `-Wunused-parameter'.
   3589 
   3590 `-Wuninitialized'
   3591      Warn if an automatic variable is used without first being
   3592      initialized or if a variable may be clobbered by a `setjmp' call.
   3593      In C++, warn if a non-static reference or non-static `const' member
   3594      appears in a class without constructors.
   3595 
   3596      If you want to warn about code which uses the uninitialized value
   3597      of the variable in its own initializer, use the `-Winit-self'
   3598      option.
   3599 
   3600      These warnings occur for individual uninitialized or clobbered
   3601      elements of structure, union or array variables as well as for
   3602      variables which are uninitialized or clobbered as a whole.  They do
   3603      not occur for variables or elements declared `volatile'.  Because
   3604      these warnings depend on optimization, the exact variables or
   3605      elements for which there are warnings will depend on the precise
   3606      optimization options and version of GCC used.
   3607 
   3608      Note that there may be no warning about a variable that is used
   3609      only to compute a value that itself is never used, because such
   3610      computations may be deleted by data flow analysis before the
   3611      warnings are printed.
   3612 
   3613 `-Wmaybe-uninitialized'
   3614      For an automatic variable, if there exists a path from the function
   3615      entry to a use of the variable that is initialized, but there exist
   3616      some other paths the variable is not initialized, the compiler will
   3617      emit a warning if it can not prove the uninitialized paths do not
   3618      happen at runtime. These warnings are made optional because GCC is
   3619      not smart enough to see all the reasons why the code might be
   3620      correct despite appearing to have an error.  Here is one example
   3621      of how this can happen:
   3622 
   3623           {
   3624             int x;
   3625             switch (y)
   3626               {
   3627               case 1: x = 1;
   3628                 break;
   3629               case 2: x = 4;
   3630                 break;
   3631               case 3: x = 5;
   3632               }
   3633             foo (x);
   3634           }
   3635 
   3636      If the value of `y' is always 1, 2 or 3, then `x' is always
   3637      initialized, but GCC doesn't know this. To suppress the warning,
   3638      the user needs to provide a default case with assert(0) or similar
   3639      code.
   3640 
   3641      This option also warns when a non-volatile automatic variable
   3642      might be changed by a call to `longjmp'.  These warnings as well
   3643      are possible only in optimizing compilation.
   3644 
   3645      The compiler sees only the calls to `setjmp'.  It cannot know
   3646      where `longjmp' will be called; in fact, a signal handler could
   3647      call it at any point in the code.  As a result, you may get a
   3648      warning even when there is in fact no problem because `longjmp'
   3649      cannot in fact be called at the place which would cause a problem.
   3650 
   3651      Some spurious warnings can be avoided if you declare all the
   3652      functions you use that never return as `noreturn'.  *Note Function
   3653      Attributes::.
   3654 
   3655      This warning is enabled by `-Wall' or `-Wextra'.
   3656 
   3657 `-Wunknown-pragmas'
   3658      Warn when a #pragma directive is encountered which is not
   3659      understood by GCC.  If this command line option is used, warnings
   3660      will even be issued for unknown pragmas in system header files.
   3661      This is not the case if the warnings were only enabled by the
   3662      `-Wall' command line option.
   3663 
   3664 `-Wno-pragmas'
   3665      Do not warn about misuses of pragmas, such as incorrect parameters,
   3666      invalid syntax, or conflicts between pragmas.  See also
   3667      `-Wunknown-pragmas'.
   3668 
   3669 `-Wstrict-aliasing'
   3670      This option is only active when `-fstrict-aliasing' is active.  It
   3671      warns about code which might break the strict aliasing rules that
   3672      the compiler is using for optimization.  The warning does not
   3673      catch all cases, but does attempt to catch the more common
   3674      pitfalls.  It is included in `-Wall'.  It is equivalent to
   3675      `-Wstrict-aliasing=3'
   3676 
   3677 `-Wstrict-aliasing=n'
   3678      This option is only active when `-fstrict-aliasing' is active.  It
   3679      warns about code which might break the strict aliasing rules that
   3680      the compiler is using for optimization.  Higher levels correspond
   3681      to higher accuracy (fewer false positives).  Higher levels also
   3682      correspond to more effort, similar to the way -O works.
   3683      `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with
   3684      n=3.
   3685 
   3686      Level 1: Most aggressive, quick, least accurate.  Possibly useful
   3687      when higher levels do not warn but -fstrict-aliasing still breaks
   3688      the code, as it has very few false negatives.  However, it has
   3689      many false positives.  Warns for all pointer conversions between
   3690      possibly incompatible types, even if never dereferenced.  Runs in
   3691      the frontend only.
   3692 
   3693      Level 2: Aggressive, quick, not too precise.  May still have many
   3694      false positives (not as many as level 1 though), and few false
   3695      negatives (but possibly more than level 1).  Unlike level 1, it
   3696      only warns when an address is taken.  Warns about incomplete
   3697      types.  Runs in the frontend only.
   3698 
   3699      Level 3 (default for `-Wstrict-aliasing'): Should have very few
   3700      false positives and few false negatives.  Slightly slower than
   3701      levels 1 or 2 when optimization is enabled.  Takes care of the
   3702      common pun+dereference pattern in the frontend:
   3703      `*(int*)&some_float'.  If optimization is enabled, it also runs in
   3704      the backend, where it deals with multiple statement cases using
   3705      flow-sensitive points-to information.  Only warns when the
   3706      converted pointer is dereferenced.  Does not warn about incomplete
   3707      types.
   3708 
   3709 `-Wstrict-overflow'
   3710 `-Wstrict-overflow=N'
   3711      This option is only active when `-fstrict-overflow' is active.  It
   3712      warns about cases where the compiler optimizes based on the
   3713      assumption that signed overflow does not occur.  Note that it does
   3714      not warn about all cases where the code might overflow: it only
   3715      warns about cases where the compiler implements some optimization.
   3716      Thus this warning depends on the optimization level.
   3717 
   3718      An optimization which assumes that signed overflow does not occur
   3719      is perfectly safe if the values of the variables involved are such
   3720      that overflow never does, in fact, occur.  Therefore this warning
   3721      can easily give a false positive: a warning about code which is not
   3722      actually a problem.  To help focus on important issues, several
   3723      warning levels are defined.  No warnings are issued for the use of
   3724      undefined signed overflow when estimating how many iterations a
   3725      loop will require, in particular when determining whether a loop
   3726      will be executed at all.
   3727 
   3728     `-Wstrict-overflow=1'
   3729           Warn about cases which are both questionable and easy to
   3730           avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
   3731           the compiler will simplify this to `1'.  This level of
   3732           `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
   3733           not, and must be explicitly requested.
   3734 
   3735     `-Wstrict-overflow=2'
   3736           Also warn about other cases where a comparison is simplified
   3737           to a constant.  For example: `abs (x) >= 0'.  This can only be
   3738           simplified when `-fstrict-overflow' is in effect, because
   3739           `abs (INT_MIN)' overflows to `INT_MIN', which is less than
   3740           zero.  `-Wstrict-overflow' (with no level) is the same as
   3741           `-Wstrict-overflow=2'.
   3742 
   3743     `-Wstrict-overflow=3'
   3744           Also warn about other cases where a comparison is simplified.
   3745           For example: `x + 1 > 1' will be simplified to `x > 0'.
   3746 
   3747     `-Wstrict-overflow=4'
   3748           Also warn about other simplifications not covered by the
   3749           above cases.  For example: `(x * 10) / 5' will be simplified
   3750           to `x * 2'.
   3751 
   3752     `-Wstrict-overflow=5'
   3753           Also warn about cases where the compiler reduces the
   3754           magnitude of a constant involved in a comparison.  For
   3755           example: `x + 2 > y' will be simplified to `x + 1 >= y'.
   3756           This is reported only at the highest warning level because
   3757           this simplification applies to many comparisons, so this
   3758           warning level will give a very large number of false
   3759           positives.
   3760 
   3761 `-Wsuggest-attribute=[pure|const|noreturn]'
   3762      Warn for cases where adding an attribute may be beneficial. The
   3763      attributes currently supported are listed below.
   3764 
   3765     `-Wsuggest-attribute=pure'
   3766     `-Wsuggest-attribute=const'
   3767     `-Wsuggest-attribute=noreturn'
   3768           Warn about functions which might be candidates for attributes
   3769           `pure', `const' or `noreturn'.  The compiler only warns for
   3770           functions visible in other compilation units or (in the case
   3771           of `pure' and `const') if it cannot prove that the function
   3772           returns normally. A function returns normally if it doesn't
   3773           contain an infinite loop nor returns abnormally by throwing,
   3774           calling `abort()' or trapping.  This analysis requires option
   3775           `-fipa-pure-const', which is enabled by default at `-O' and
   3776           higher.  Higher optimization levels improve the accuracy of
   3777           the analysis.
   3778 
   3779 `-Warray-bounds'
   3780      This option is only active when `-ftree-vrp' is active (default
   3781      for `-O2' and above). It warns about subscripts to arrays that are
   3782      always out of bounds. This warning is enabled by `-Wall'.
   3783 
   3784 `-Wno-div-by-zero'
   3785      Do not warn about compile-time integer division by zero.  Floating
   3786      point division by zero is not warned about, as it can be a
   3787      legitimate way of obtaining infinities and NaNs.
   3788 
   3789 `-Wsystem-headers'
   3790      Print warning messages for constructs found in system header files.
   3791      Warnings from system headers are normally suppressed, on the
   3792      assumption that they usually do not indicate real problems and
   3793      would only make the compiler output harder to read.  Using this
   3794      command line option tells GCC to emit warnings from system headers
   3795      as if they occurred in user code.  However, note that using
   3796      `-Wall' in conjunction with this option will _not_ warn about
   3797      unknown pragmas in system headers--for that, `-Wunknown-pragmas'
   3798      must also be used.
   3799 
   3800 `-Wtrampolines'
   3801      Warn about trampolines generated for pointers to nested functions.
   3802 
   3803      A trampoline is a small piece of data or code that is created at
   3804      run  time on the stack when the address of a nested function is
   3805      taken, and  is used to call the nested function indirectly.  For
   3806      some targets, it  is made up of data only and thus requires no
   3807      special treatment.  But,  for most targets, it is made up of code
   3808      and thus requires the stack  to be made executable in order for
   3809      the program to work properly.
   3810 
   3811 `-Wfloat-equal'
   3812      Warn if floating point values are used in equality comparisons.
   3813 
   3814      The idea behind this is that sometimes it is convenient (for the
   3815      programmer) to consider floating-point values as approximations to
   3816      infinitely precise real numbers.  If you are doing this, then you
   3817      need to compute (by analyzing the code, or in some other way) the
   3818      maximum or likely maximum error that the computation introduces,
   3819      and allow for it when performing comparisons (and when producing
   3820      output, but that's a different problem).  In particular, instead
   3821      of testing for equality, you would check to see whether the two
   3822      values have ranges that overlap; and this is done with the
   3823      relational operators, so equality comparisons are probably
   3824      mistaken.
   3825 
   3826 `-Wtraditional (C and Objective-C only)'
   3827      Warn about certain constructs that behave differently in
   3828      traditional and ISO C.  Also warn about ISO C constructs that have
   3829      no traditional C equivalent, and/or problematic constructs which
   3830      should be avoided.
   3831 
   3832         * Macro parameters that appear within string literals in the
   3833           macro body.  In traditional C macro replacement takes place
   3834           within string literals, but does not in ISO C.
   3835 
   3836         * In traditional C, some preprocessor directives did not exist.
   3837           Traditional preprocessors would only consider a line to be a
   3838           directive if the `#' appeared in column 1 on the line.
   3839           Therefore `-Wtraditional' warns about directives that
   3840           traditional C understands but would ignore because the `#'
   3841           does not appear as the first character on the line.  It also
   3842           suggests you hide directives like `#pragma' not understood by
   3843           traditional C by indenting them.  Some traditional
   3844           implementations would not recognize `#elif', so it suggests
   3845           avoiding it altogether.
   3846 
   3847         * A function-like macro that appears without arguments.
   3848 
   3849         * The unary plus operator.
   3850 
   3851         * The `U' integer constant suffix, or the `F' or `L' floating
   3852           point constant suffixes.  (Traditional C does support the `L'
   3853           suffix on integer constants.)  Note, these suffixes appear in
   3854           macros defined in the system headers of most modern systems,
   3855           e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
   3856           macros in user code might normally lead to spurious warnings,
   3857           however GCC's integrated preprocessor has enough context to
   3858           avoid warning in these cases.
   3859 
   3860         * A function declared external in one block and then used after
   3861           the end of the block.
   3862 
   3863         * A `switch' statement has an operand of type `long'.
   3864 
   3865         * A non-`static' function declaration follows a `static' one.
   3866           This construct is not accepted by some traditional C
   3867           compilers.
   3868 
   3869         * The ISO type of an integer constant has a different width or
   3870           signedness from its traditional type.  This warning is only
   3871           issued if the base of the constant is ten.  I.e. hexadecimal
   3872           or octal values, which typically represent bit patterns, are
   3873           not warned about.
   3874 
   3875         * Usage of ISO string concatenation is detected.
   3876 
   3877         * Initialization of automatic aggregates.
   3878 
   3879         * Identifier conflicts with labels.  Traditional C lacks a
   3880           separate namespace for labels.
   3881 
   3882         * Initialization of unions.  If the initializer is zero, the
   3883           warning is omitted.  This is done under the assumption that
   3884           the zero initializer in user code appears conditioned on e.g.
   3885           `__STDC__' to avoid missing initializer warnings and relies
   3886           on default initialization to zero in the traditional C case.
   3887 
   3888         * Conversions by prototypes between fixed/floating point values
   3889           and vice versa.  The absence of these prototypes when
   3890           compiling with traditional C would cause serious problems.
   3891           This is a subset of the possible conversion warnings, for the
   3892           full set use `-Wtraditional-conversion'.
   3893 
   3894         * Use of ISO C style function definitions.  This warning
   3895           intentionally is _not_ issued for prototype declarations or
   3896           variadic functions because these ISO C features will appear
   3897           in your code when using libiberty's traditional C
   3898           compatibility macros, `PARAMS' and `VPARAMS'.  This warning
   3899           is also bypassed for nested functions because that feature is
   3900           already a GCC extension and thus not relevant to traditional
   3901           C compatibility.
   3902 
   3903 `-Wtraditional-conversion (C and Objective-C only)'
   3904      Warn if a prototype causes a type conversion that is different
   3905      from what would happen to the same argument in the absence of a
   3906      prototype.  This includes conversions of fixed point to floating
   3907      and vice versa, and conversions changing the width or signedness
   3908      of a fixed point argument except when the same as the default
   3909      promotion.
   3910 
   3911 `-Wdeclaration-after-statement (C and Objective-C only)'
   3912      Warn when a declaration is found after a statement in a block.
   3913      This construct, known from C++, was introduced with ISO C99 and is
   3914      by default allowed in GCC.  It is not supported by ISO C90 and was
   3915      not supported by GCC versions before GCC 3.0.  *Note Mixed
   3916      Declarations::.
   3917 
   3918 `-Wundef'
   3919      Warn if an undefined identifier is evaluated in an `#if' directive.
   3920 
   3921 `-Wno-endif-labels'
   3922      Do not warn whenever an `#else' or an `#endif' are followed by
   3923      text.
   3924 
   3925 `-Wshadow'
   3926      Warn whenever a local variable or type declaration shadows another
   3927      variable, parameter, type, or class member (in C++), or whenever a
   3928      built-in function is shadowed. Note that in C++, the compiler will
   3929      not warn if a local variable shadows a struct/class/enum, but will
   3930      warn if it shadows an explicit typedef.
   3931 
   3932 `-Wshadow-local'
   3933      Warn when a local variable shadows another local variable or
   3934      parameter.
   3935 
   3936 `-Wshadow-compatible-local'
   3937      Warn when a local variable shadows another local variable or
   3938      parameter whose type is compatible with that of the shadowing
   3939      variable. In C++, type compatibility here means the type of the
   3940      shadowing variable can be converted to that of the shadowed
   3941      variable. The creation of this flag (in addition to
   3942      `-Wshadow-local') is based on the idea that when a local variable
   3943      shadows another one of incompatible type, it is most likely
   3944      intentional, not a bug or typo, as shown in the following example:
   3945 
   3946           for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
   3947           {
   3948             for (int i = 0; i < N; ++i)
   3949             {
   3950               ...
   3951             }
   3952             ...
   3953           }
   3954 
   3955      Since the two variable `i' in the example above have incompatible
   3956      types, enabling only `-Wshadow-compatible-local' will not emit a
   3957      warning.  Because their types are incompatible, if a programmer
   3958      accidentally uses one in place of the other, type checking will
   3959      catch that and emit an error or warning. So not warning (about
   3960      shadowing) in this case will not lead to undetected bugs. Use of
   3961      this flag instead of `-Wshadow-local' can possibly reduce the
   3962      number of warnings triggered by intentional shadowing.
   3963 
   3964 `-Wlarger-than=LEN'
   3965      Warn whenever an object of larger than LEN bytes is defined.
   3966 
   3967 `-Wframe-larger-than=LEN'
   3968      Warn if the size of a function frame is larger than LEN bytes.
   3969      The computation done to determine the stack frame size is
   3970      approximate and not conservative.  The actual requirements may be
   3971      somewhat greater than LEN even if you do not get a warning.  In
   3972      addition, any space allocated via `alloca', variable-length
   3973      arrays, or related constructs is not included by the compiler when
   3974      determining whether or not to issue a warning.
   3975 
   3976 `-Wunsafe-loop-optimizations'
   3977      Warn if the loop cannot be optimized because the compiler could not
   3978      assume anything on the bounds of the loop indices.  With
   3979      `-funsafe-loop-optimizations' warn if the compiler made such
   3980      assumptions.
   3981 
   3982 `-Wno-pedantic-ms-format (MinGW targets only)'
   3983      Disables the warnings about non-ISO `printf' / `scanf' format
   3984      width specifiers `I32', `I64', and `I' used on Windows targets
   3985      depending on the MS runtime, when you are using the options
   3986      `-Wformat' and `-pedantic' without gnu-extensions.
   3987 
   3988 `-Wpointer-arith'
   3989      Warn about anything that depends on the "size of" a function type
   3990      or of `void'.  GNU C assigns these types a size of 1, for
   3991      convenience in calculations with `void *' pointers and pointers to
   3992      functions.  In C++, warn also when an arithmetic operation involves
   3993      `NULL'.  This warning is also enabled by `-pedantic'.
   3994 
   3995 `-Wtype-limits'
   3996      Warn if a comparison is always true or always false due to the
   3997      limited range of the data type, but do not warn for constant
   3998      expressions.  For example, warn if an unsigned variable is
   3999      compared against zero with `<' or `>='.  This warning is also
   4000      enabled by `-Wextra'.
   4001 
   4002 `-Wbad-function-cast (C and Objective-C only)'
   4003      Warn whenever a function call is cast to a non-matching type.  For
   4004      example, warn if `int malloc()' is cast to `anything *'.
   4005 
   4006 `-Wc++-compat (C and Objective-C only)'
   4007      Warn about ISO C constructs that are outside of the common subset
   4008      of ISO C and ISO C++, e.g. request for implicit conversion from
   4009      `void *' to a pointer to non-`void' type.
   4010 
   4011 `-Wc++0x-compat (C++ and Objective-C++ only)'
   4012      Warn about C++ constructs whose meaning differs between ISO C++
   4013      1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
   4014      become keywords in ISO C++ 200x.  This warning is enabled by
   4015      `-Wall'.
   4016 
   4017 `-Wcast-qual'
   4018      Warn whenever a pointer is cast so as to remove a type qualifier
   4019      from the target type.  For example, warn if a `const char *' is
   4020      cast to an ordinary `char *'.
   4021 
   4022      Also warn when making a cast which introduces a type qualifier in
   4023      an unsafe way.  For example, casting `char **' to `const char **'
   4024      is unsafe, as in this example:
   4025 
   4026             /* p is char ** value.  */
   4027             const char **q = (const char **) p;
   4028             /* Assignment of readonly string to const char * is OK.  */
   4029             *q = "string";
   4030             /* Now char** pointer points to read-only memory.  */
   4031             **p = 'b';
   4032 
   4033 `-Wcast-align'
   4034      Warn whenever a pointer is cast such that the required alignment
   4035      of the target is increased.  For example, warn if a `char *' is
   4036      cast to an `int *' on machines where integers can only be accessed
   4037      at two- or four-byte boundaries.
   4038 
   4039 `-Wwrite-strings'
   4040      When compiling C, give string constants the type `const
   4041      char[LENGTH]' so that copying the address of one into a
   4042      non-`const' `char *' pointer will get a warning.  These warnings
   4043      will help you find at compile time code that can try to write into
   4044      a string constant, but only if you have been very careful about
   4045      using `const' in declarations and prototypes.  Otherwise, it will
   4046      just be a nuisance. This is why we did not make `-Wall' request
   4047      these warnings.
   4048 
   4049      When compiling C++, warn about the deprecated conversion from
   4050      string literals to `char *'.  This warning is enabled by default
   4051      for C++ programs.
   4052 
   4053 `-Wclobbered'
   4054      Warn for variables that might be changed by `longjmp' or `vfork'.
   4055      This warning is also enabled by `-Wextra'.
   4056 
   4057 `-Wconversion'
   4058      Warn for implicit conversions that may alter a value. This includes
   4059      conversions between real and integer, like `abs (x)' when `x' is
   4060      `double'; conversions between signed and unsigned, like `unsigned
   4061      ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
   4062      Do not warn for explicit casts like `abs ((int) x)' and `ui =
   4063      (unsigned) -1', or if the value is not changed by the conversion
   4064      like in `abs (2.0)'.  Warnings about conversions between signed
   4065      and unsigned integers can be disabled by using
   4066      `-Wno-sign-conversion'.
   4067 
   4068      For C++, also warn for confusing overload resolution for
   4069      user-defined conversions; and conversions that will never use a
   4070      type conversion operator: conversions to `void', the same type, a
   4071      base class or a reference to them. Warnings about conversions
   4072      between signed and unsigned integers are disabled by default in
   4073      C++ unless `-Wsign-conversion' is explicitly enabled.
   4074 
   4075 `-Wno-conversion-null (C++ and Objective-C++ only)'
   4076      Do not warn for conversions between `NULL' and non-pointer types.
   4077      `-Wconversion-null' is enabled by default.
   4078 
   4079 `-Wreal-conversion'
   4080      Warn for implicit type conversions from real (`double' or `float')
   4081      to integral values.
   4082 
   4083 `-Wempty-body'
   4084      Warn if an empty body occurs in an `if', `else' or `do while'
   4085      statement.  This warning is also enabled by `-Wextra'.
   4086 
   4087 `-Wenum-compare'
   4088      Warn about a comparison between values of different enum types. In
   4089      C++ this warning is enabled by default.  In C this warning is
   4090      enabled by `-Wall'.
   4091 
   4092 `-Wjump-misses-init (C, Objective-C only)'
   4093      Warn if a `goto' statement or a `switch' statement jumps forward
   4094      across the initialization of a variable, or jumps backward to a
   4095      label after the variable has been initialized.  This only warns
   4096      about variables which are initialized when they are declared.
   4097      This warning is only supported for C and Objective C; in C++ this
   4098      sort of branch is an error in any case.
   4099 
   4100      `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
   4101      disabled with the `-Wno-jump-misses-init' option.
   4102 
   4103 `-Wsign-compare'
   4104      Warn when a comparison between signed and unsigned values could
   4105      produce an incorrect result when the signed value is converted to
   4106      unsigned.  This warning is also enabled by `-Wextra'; to get the
   4107      other warnings of `-Wextra' without this warning, use `-Wextra
   4108      -Wno-sign-compare'.
   4109 
   4110 `-Wsign-conversion'
   4111      Warn for implicit conversions that may change the sign of an
   4112      integer value, like assigning a signed integer expression to an
   4113      unsigned integer variable. An explicit cast silences the warning.
   4114      In C, this option is enabled also by `-Wconversion'.
   4115 
   4116 `-Waddress'
   4117      Warn about suspicious uses of memory addresses. These include using
   4118      the address of a function in a conditional expression, such as
   4119      `void func(void); if (func)', and comparisons against the memory
   4120      address of a string literal, such as `if (x == "abc")'.  Such uses
   4121      typically indicate a programmer error: the address of a function
   4122      always evaluates to true, so their use in a conditional usually
   4123      indicate that the programmer forgot the parentheses in a function
   4124      call; and comparisons against string literals result in unspecified
   4125      behavior and are not portable in C, so they usually indicate that
   4126      the programmer intended to use `strcmp'.  This warning is enabled
   4127      by `-Wall'.
   4128 
   4129 `-Wlogical-op'
   4130      Warn about suspicious uses of logical operators in expressions.
   4131      This includes using logical operators in contexts where a bit-wise
   4132      operator is likely to be expected.
   4133 
   4134 `-Waggregate-return'
   4135      Warn if any functions that return structures or unions are defined
   4136      or called.  (In languages where you can return an array, this also
   4137      elicits a warning.)
   4138 
   4139 `-Wno-attributes'
   4140      Do not warn if an unexpected `__attribute__' is used, such as
   4141      unrecognized attributes, function attributes applied to variables,
   4142      etc.  This will not stop errors for incorrect use of supported
   4143      attributes.
   4144 
   4145 `-Wno-builtin-macro-redefined'
   4146      Do not warn if certain built-in macros are redefined.  This
   4147      suppresses warnings for redefinition of `__TIMESTAMP__',
   4148      `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
   4149 
   4150 `-Wstrict-prototypes (C and Objective-C only)'
   4151      Warn if a function is declared or defined without specifying the
   4152      argument types.  (An old-style function definition is permitted
   4153      without a warning if preceded by a declaration which specifies the
   4154      argument types.)
   4155 
   4156 `-Wold-style-declaration (C and Objective-C only)'
   4157      Warn for obsolescent usages, according to the C Standard, in a
   4158      declaration. For example, warn if storage-class specifiers like
   4159      `static' are not the first things in a declaration.  This warning
   4160      is also enabled by `-Wextra'.
   4161 
   4162 `-Wold-style-definition (C and Objective-C only)'
   4163      Warn if an old-style function definition is used.  A warning is
   4164      given even if there is a previous prototype.
   4165 
   4166 `-Wmissing-parameter-type (C and Objective-C only)'
   4167      A function parameter is declared without a type specifier in
   4168      K&R-style functions:
   4169 
   4170           void foo(bar) { }
   4171 
   4172      This warning is also enabled by `-Wextra'.
   4173 
   4174 `-Wmissing-prototypes (C and Objective-C only)'
   4175      Warn if a global function is defined without a previous prototype
   4176      declaration.  This warning is issued even if the definition itself
   4177      provides a prototype.  The aim is to detect global functions that
   4178      fail to be declared in header files.
   4179 
   4180 `-Wmissing-declarations'
   4181      Warn if a global function is defined without a previous
   4182      declaration.  Do so even if the definition itself provides a
   4183      prototype.  Use this option to detect global functions that are
   4184      not declared in header files.  In C++, no warnings are issued for
   4185      function templates, or for inline functions, or for functions in
   4186      anonymous namespaces.
   4187 
   4188 `-Wmissing-field-initializers'
   4189      Warn if a structure's initializer has some fields missing.  For
   4190      example, the following code would cause such a warning, because
   4191      `x.h' is implicitly zero:
   4192 
   4193           struct s { int f, g, h; };
   4194           struct s x = { 3, 4 };
   4195 
   4196      This option does not warn about designated initializers, so the
   4197      following modification would not trigger a warning:
   4198 
   4199           struct s { int f, g, h; };
   4200           struct s x = { .f = 3, .g = 4 };
   4201 
   4202      This warning is included in `-Wextra'.  To get other `-Wextra'
   4203      warnings without this one, use `-Wextra
   4204      -Wno-missing-field-initializers'.
   4205 
   4206 `-Wmissing-format-attribute'
   4207      Warn about function pointers which might be candidates for `format'
   4208      attributes.  Note these are only possible candidates, not absolute
   4209      ones.  GCC will guess that function pointers with `format'
   4210      attributes that are used in assignment, initialization, parameter
   4211      passing or return statements should have a corresponding `format'
   4212      attribute in the resulting type.  I.e. the left-hand side of the
   4213      assignment or initialization, the type of the parameter variable,
   4214      or the return type of the containing function respectively should
   4215      also have a `format' attribute to avoid the warning.
   4216 
   4217      GCC will also warn about function definitions which might be
   4218      candidates for `format' attributes.  Again, these are only
   4219      possible candidates.  GCC will guess that `format' attributes
   4220      might be appropriate for any function that calls a function like
   4221      `vprintf' or `vscanf', but this might not always be the case, and
   4222      some functions for which `format' attributes are appropriate may
   4223      not be detected.
   4224 
   4225 `-Wno-multichar'
   4226      Do not warn if a multicharacter constant (`'FOOF'') is used.
   4227      Usually they indicate a typo in the user's code, as they have
   4228      implementation-defined values, and should not be used in portable
   4229      code.
   4230 
   4231 `-Wnormalized=<none|id|nfc|nfkc>'
   4232      In ISO C and ISO C++, two identifiers are different if they are
   4233      different sequences of characters.  However, sometimes when
   4234      characters outside the basic ASCII character set are used, you can
   4235      have two different character sequences that look the same.  To
   4236      avoid confusion, the ISO 10646 standard sets out some
   4237      "normalization rules" which when applied ensure that two sequences
   4238      that look the same are turned into the same sequence.  GCC can
   4239      warn you if you are using identifiers which have not been
   4240      normalized; this option controls that warning.
   4241 
   4242      There are four levels of warning that GCC supports.  The default is
   4243      `-Wnormalized=nfc', which warns about any identifier which is not
   4244      in the ISO 10646 "C" normalized form, "NFC".  NFC is the
   4245      recommended form for most uses.
   4246 
   4247      Unfortunately, there are some characters which ISO C and ISO C++
   4248      allow in identifiers that when turned into NFC aren't allowable as
   4249      identifiers.  That is, there's no way to use these symbols in
   4250      portable ISO C or C++ and have all your identifiers in NFC.
   4251      `-Wnormalized=id' suppresses the warning for these characters.  It
   4252      is hoped that future versions of the standards involved will
   4253      correct this, which is why this option is not the default.
   4254 
   4255      You can switch the warning off for all characters by writing
   4256      `-Wnormalized=none'.  You would only want to do this if you were
   4257      using some other normalization scheme (like "D"), because
   4258      otherwise you can easily create bugs that are literally impossible
   4259      to see.
   4260 
   4261      Some characters in ISO 10646 have distinct meanings but look
   4262      identical in some fonts or display methodologies, especially once
   4263      formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
   4264      LATIN SMALL LETTER N", will display just like a regular `n' which
   4265      has been placed in a superscript.  ISO 10646 defines the "NFKC"
   4266      normalization scheme to convert all these into a standard form as
   4267      well, and GCC will warn if your code is not in NFKC if you use
   4268      `-Wnormalized=nfkc'.  This warning is comparable to warning about
   4269      every identifier that contains the letter O because it might be
   4270      confused with the digit 0, and so is not the default, but may be
   4271      useful as a local coding convention if the programming environment
   4272      is unable to be fixed to display these characters distinctly.
   4273 
   4274 `-Wno-deprecated'
   4275      Do not warn about usage of deprecated features.  *Note Deprecated
   4276      Features::.
   4277 
   4278 `-Wno-deprecated-declarations'
   4279      Do not warn about uses of functions (*note Function Attributes::),
   4280      variables (*note Variable Attributes::), and types (*note Type
   4281      Attributes::) marked as deprecated by using the `deprecated'
   4282      attribute.
   4283 
   4284 `-Wno-overflow'
   4285      Do not warn about compile-time overflow in constant expressions.
   4286 
   4287 `-Woverride-init (C and Objective-C only)'
   4288      Warn if an initialized field without side effects is overridden
   4289      when using designated initializers (*note Designated Initializers:
   4290      Designated Inits.).
   4291 
   4292      This warning is included in `-Wextra'.  To get other `-Wextra'
   4293      warnings without this one, use `-Wextra -Wno-override-init'.
   4294 
   4295 `-Wpacked'
   4296      Warn if a structure is given the packed attribute, but the packed
   4297      attribute has no effect on the layout or size of the structure.
   4298      Such structures may be mis-aligned for little benefit.  For
   4299      instance, in this code, the variable `f.x' in `struct bar' will be
   4300      misaligned even though `struct bar' does not itself have the
   4301      packed attribute:
   4302 
   4303           struct foo {
   4304             int x;
   4305             char a, b, c, d;
   4306           } __attribute__((packed));
   4307           struct bar {
   4308             char z;
   4309             struct foo f;
   4310           };
   4311 
   4312 `-Wpacked-bitfield-compat'
   4313      The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
   4314      on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
   4315      the change can lead to differences in the structure layout.  GCC
   4316      informs you when the offset of such a field has changed in GCC 4.4.
   4317      For example there is no longer a 4-bit padding between field `a'
   4318      and `b' in this structure:
   4319 
   4320           struct foo
   4321           {
   4322             char a:4;
   4323             char b:8;
   4324           } __attribute__ ((packed));
   4325 
   4326      This warning is enabled by default.  Use
   4327      `-Wno-packed-bitfield-compat' to disable this warning.
   4328 
   4329 `-Wpadded'
   4330      Warn if padding is included in a structure, either to align an
   4331      element of the structure or to align the whole structure.
   4332      Sometimes when this happens it is possible to rearrange the fields
   4333      of the structure to reduce the padding and so make the structure
   4334      smaller.
   4335 
   4336 `-Wredundant-decls'
   4337      Warn if anything is declared more than once in the same scope,
   4338      even in cases where multiple declaration is valid and changes
   4339      nothing.
   4340 
   4341 `-Wnested-externs (C and Objective-C only)'
   4342      Warn if an `extern' declaration is encountered within a function.
   4343 
   4344 `-Winline'
   4345      Warn if a function can not be inlined and it was declared as
   4346      inline.  Even with this option, the compiler will not warn about
   4347      failures to inline functions declared in system headers.
   4348 
   4349      The compiler uses a variety of heuristics to determine whether or
   4350      not to inline a function.  For example, the compiler takes into
   4351      account the size of the function being inlined and the amount of
   4352      inlining that has already been done in the current function.
   4353      Therefore, seemingly insignificant changes in the source program
   4354      can cause the warnings produced by `-Winline' to appear or
   4355      disappear.
   4356 
   4357 `-Wno-invalid-offsetof (C++ and Objective-C++ only)'
   4358      Suppress warnings from applying the `offsetof' macro to a non-POD
   4359      type.  According to the 1998 ISO C++ standard, applying `offsetof'
   4360      to a non-POD type is undefined.  In existing C++ implementations,
   4361      however, `offsetof' typically gives meaningful results even when
   4362      applied to certain kinds of non-POD types. (Such as a simple
   4363      `struct' that fails to be a POD type only by virtue of having a
   4364      constructor.)  This flag is for users who are aware that they are
   4365      writing nonportable code and who have deliberately chosen to
   4366      ignore the warning about it.
   4367 
   4368      The restrictions on `offsetof' may be relaxed in a future version
   4369      of the C++ standard.
   4370 
   4371 `-Wno-int-to-pointer-cast'
   4372      Suppress warnings from casts to pointer type of an integer of a
   4373      different size. In C++, casting to a pointer type of smaller size
   4374      is an error. `Wint-to-pointer-cast' is enabled by default.
   4375 
   4376 `max-lipo-mem'
   4377      When importing auxiliary modules during profile-use, check current
   4378      memory consumption after parsing each auxiliary module. If it
   4379      exceeds this limit (specified in kb), don't import any more
   4380      auxiliary modules.  Specifying a value of 0 means don't enforce
   4381      this limit. This parameter is only useful when using
   4382      `-fprofile-use' and `-fripa'.
   4383 
   4384 `-Wno-pointer-to-int-cast (C and Objective-C only)'
   4385      Suppress warnings from casts from a pointer to an integer type of a
   4386      different size.
   4387 
   4388 `-Winvalid-pch'
   4389      Warn if a precompiled header (*note Precompiled Headers::) is
   4390      found in the search path but can't be used.
   4391 
   4392 `-Wlong-long'
   4393      Warn if `long long' type is used.  This is enabled by either
   4394      `-pedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
   4395      inhibit the warning messages, use `-Wno-long-long'.
   4396 
   4397 `-Wvariadic-macros'
   4398      Warn if variadic macros are used in pedantic ISO C90 mode, or the
   4399      GNU alternate syntax when in pedantic ISO C99 mode.  This is
   4400      default.  To inhibit the warning messages, use
   4401      `-Wno-variadic-macros'.
   4402 
   4403 `-Wvla'
   4404      Warn if variable length array is used in the code.  `-Wno-vla'
   4405      will prevent the `-pedantic' warning of the variable length array.
   4406 
   4407 `-Wvolatile-register-var'
   4408      Warn if a register variable is declared volatile.  The volatile
   4409      modifier does not inhibit all optimizations that may eliminate
   4410      reads and/or writes to register variables.  This warning is
   4411      enabled by `-Wall'.
   4412 
   4413 `-Wdisabled-optimization'
   4414      Warn if a requested optimization pass is disabled.  This warning
   4415      does not generally indicate that there is anything wrong with your
   4416      code; it merely indicates that GCC's optimizers were unable to
   4417      handle the code effectively.  Often, the problem is that your code
   4418      is too big or too complex; GCC will refuse to optimize programs
   4419      when the optimization itself is likely to take inordinate amounts
   4420      of time.
   4421 
   4422 `-Wpointer-sign (C and Objective-C only)'
   4423      Warn for pointer argument passing or assignment with different
   4424      signedness.  This option is only supported for C and Objective-C.
   4425      It is implied by `-Wall' and by `-pedantic', which can be disabled
   4426      with `-Wno-pointer-sign'.
   4427 
   4428 `-Wstack-protector'
   4429      This option is only active when `-fstack-protector' is active.  It
   4430      warns about functions that will not be protected against stack
   4431      smashing.
   4432 
   4433 `-Wno-mudflap'
   4434      Suppress warnings about constructs that cannot be instrumented by
   4435      `-fmudflap'.
   4436 
   4437 `-Woverlength-strings'
   4438      Warn about string constants which are longer than the "minimum
   4439      maximum" length specified in the C standard.  Modern compilers
   4440      generally allow string constants which are much longer than the
   4441      standard's minimum limit, but very portable programs should avoid
   4442      using longer strings.
   4443 
   4444      The limit applies _after_ string constant concatenation, and does
   4445      not count the trailing NUL.  In C90, the limit was 509 characters;
   4446      in C99, it was raised to 4095.  C++98 does not specify a normative
   4447      minimum maximum, so we do not diagnose overlength strings in C++.
   4448 
   4449      This option is implied by `-pedantic', and can be disabled with
   4450      `-Wno-overlength-strings'.
   4451 
   4452 `-Wunsuffixed-float-constants (C and Objective-C only)'
   4453      GCC will issue a warning for any floating constant that does not
   4454      have a suffix.  When used together with `-Wsystem-headers' it will
   4455      warn about such constants in system header files.  This can be
   4456      useful when preparing code to use with the `FLOAT_CONST_DECIMAL64'
   4457      pragma from the decimal floating-point extension to C99.
   4458 
   4459 
   4460 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
   4461 
   4462 3.9 Options for Debugging Your Program or GCC
   4463 =============================================
   4464 
   4465 GCC has various special options that are used for debugging either your
   4466 program or GCC:
   4467 
   4468 `-g'
   4469      Produce debugging information in the operating system's native
   4470      format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
   4471      debugging information.
   4472 
   4473      On most systems that use stabs format, `-g' enables use of extra
   4474      debugging information that only GDB can use; this extra information
   4475      makes debugging work better in GDB but will probably make other
   4476      debuggers crash or refuse to read the program.  If you want to
   4477      control for certain whether to generate the extra information, use
   4478      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
   4479      below).
   4480 
   4481      GCC allows you to use `-g' with `-O'.  The shortcuts taken by
   4482      optimized code may occasionally produce surprising results: some
   4483      variables you declared may not exist at all; flow of control may
   4484      briefly move where you did not expect it; some statements may not
   4485      be executed because they compute constant results or their values
   4486      were already at hand; some statements may execute in different
   4487      places because they were moved out of loops.
   4488 
   4489      Nevertheless it proves possible to debug optimized output.  This
   4490      makes it reasonable to use the optimizer for programs that might
   4491      have bugs.
   4492 
   4493      The following options are useful when GCC is generated with the
   4494      capability for more than one debugging format.
   4495 
   4496 `-ggdb'
   4497      Produce debugging information for use by GDB.  This means to use
   4498      the most expressive format available (DWARF 2, stabs, or the
   4499      native format if neither of those are supported), including GDB
   4500      extensions if at all possible.
   4501 
   4502 `-gstabs'
   4503      Produce debugging information in stabs format (if that is
   4504      supported), without GDB extensions.  This is the format used by
   4505      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
   4506      systems this option produces stabs debugging output which is not
   4507      understood by DBX or SDB.  On System V Release 4 systems this
   4508      option requires the GNU assembler.
   4509 
   4510 `-feliminate-unused-debug-symbols'
   4511      Produce debugging information in stabs format (if that is
   4512      supported), for only symbols that are actually used.
   4513 
   4514 `-femit-class-debug-always'
   4515      Instead of emitting debugging information for a C++ class in only
   4516      one object file, emit it in all object files using the class.
   4517      This option should be used only with debuggers that are unable to
   4518      handle the way GCC normally emits debugging information for
   4519      classes because using this option will increase the size of
   4520      debugging information by as much as a factor of two.
   4521 
   4522 `-gstabs+'
   4523      Produce debugging information in stabs format (if that is
   4524      supported), using GNU extensions understood only by the GNU
   4525      debugger (GDB).  The use of these extensions is likely to make
   4526      other debuggers crash or refuse to read the program.
   4527 
   4528 `-gcoff'
   4529      Produce debugging information in COFF format (if that is
   4530      supported).  This is the format used by SDB on most System V
   4531      systems prior to System V Release 4.
   4532 
   4533 `-gxcoff'
   4534      Produce debugging information in XCOFF format (if that is
   4535      supported).  This is the format used by the DBX debugger on IBM
   4536      RS/6000 systems.
   4537 
   4538 `-gxcoff+'
   4539      Produce debugging information in XCOFF format (if that is
   4540      supported), using GNU extensions understood only by the GNU
   4541      debugger (GDB).  The use of these extensions is likely to make
   4542      other debuggers crash or refuse to read the program, and may cause
   4543      assemblers other than the GNU assembler (GAS) to fail with an
   4544      error.
   4545 
   4546 `-gdwarf-VERSION'
   4547      Produce debugging information in DWARF format (if that is
   4548      supported).  This is the format used by DBX on IRIX 6.  The value
   4549      of VERSION may be either 2, 3 or 4; the default version is 2.
   4550 
   4551      Note that with DWARF version 2 some ports require, and will always
   4552      use, some non-conflicting DWARF 3 extensions in the unwind tables.
   4553 
   4554      Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
   4555      maximum benefit.
   4556 
   4557 `-gstrict-dwarf'
   4558      Disallow using extensions of later DWARF standard version than
   4559      selected with `-gdwarf-VERSION'.  On most targets using
   4560      non-conflicting DWARF extensions from later standard versions is
   4561      allowed.
   4562 
   4563 `-gno-strict-dwarf'
   4564      Allow using extensions of later DWARF standard version than
   4565      selected with `-gdwarf-VERSION'.
   4566 
   4567 `-gvms'
   4568      Produce debugging information in VMS debug format (if that is
   4569      supported).  This is the format used by DEBUG on VMS systems.
   4570 
   4571 `-gLEVEL'
   4572 `-ggdbLEVEL'
   4573 `-gstabsLEVEL'
   4574 `-gcoffLEVEL'
   4575 `-gxcoffLEVEL'
   4576 `-gvmsLEVEL'
   4577      Request debugging information and also use LEVEL to specify how
   4578      much information.  The default level is 2.
   4579 
   4580      Level 0 produces no debug information at all.  Thus, `-g0' negates
   4581      `-g'.
   4582 
   4583      Level 1 produces minimal information, enough for making backtraces
   4584      in parts of the program that you don't plan to debug.  This
   4585      includes descriptions of functions and external variables, but no
   4586      information about local variables and no line numbers.
   4587 
   4588      Level 3 includes extra information, such as all the macro
   4589      definitions present in the program.  Some debuggers support macro
   4590      expansion when you use `-g3'.
   4591 
   4592      `-gdwarf-2' does not accept a concatenated debug level, because
   4593      GCC used to support an option `-gdwarf' that meant to generate
   4594      debug information in version 1 of the DWARF format (which is very
   4595      different from version 2), and it would have been too confusing.
   4596      That debug format is long obsolete, but the option cannot be
   4597      changed now.  Instead use an additional `-gLEVEL' option to change
   4598      the debug level for DWARF.
   4599 
   4600 `-gmlt'
   4601      Produce a minimal line table, with level 1 debugging information
   4602      plus information about inlined functions and line numbers.
   4603 
   4604 `-gtoggle'
   4605      Turn off generation of debug info, if leaving out this option
   4606      would have generated it, or turn it on at level 2 otherwise.  The
   4607      position of this argument in the command line does not matter, it
   4608      takes effect after all other options are processed, and it does so
   4609      only once, no matter how many times it is given.  This is mainly
   4610      intended to be used with `-fcompare-debug'.
   4611 
   4612 `-fdump-final-insns[=FILE]'
   4613      Dump the final internal representation (RTL) to FILE.  If the
   4614      optional argument is omitted (or if FILE is `.'), the name of the
   4615      dump file will be determined by appending `.gkd' to the
   4616      compilation output file name.
   4617 
   4618 `-fcompare-debug[=OPTS]'
   4619      If no error occurs during compilation, run the compiler a second
   4620      time, adding OPTS and `-fcompare-debug-second' to the arguments
   4621      passed to the second compilation.  Dump the final internal
   4622      representation in both compilations, and print an error if they
   4623      differ.
   4624 
   4625      If the equal sign is omitted, the default `-gtoggle' is used.
   4626 
   4627      The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
   4628      and nonzero, implicitly enables `-fcompare-debug'.  If
   4629      `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
   4630      then it is used for OPTS, otherwise the default `-gtoggle' is used.
   4631 
   4632      `-fcompare-debug=', with the equal sign but without OPTS, is
   4633      equivalent to `-fno-compare-debug', which disables the dumping of
   4634      the final representation and the second compilation, preventing
   4635      even `GCC_COMPARE_DEBUG' from taking effect.
   4636 
   4637      To verify full coverage during `-fcompare-debug' testing, set
   4638      `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
   4639      GCC will reject as an invalid option in any actual compilation
   4640      (rather than preprocessing, assembly or linking).  To get just a
   4641      warning, setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
   4642      overridden' will do.
   4643 
   4644 `-fcompare-debug-second'
   4645      This option is implicitly passed to the compiler for the second
   4646      compilation requested by `-fcompare-debug', along with options to
   4647      silence warnings, and omitting other options that would cause
   4648      side-effect compiler outputs to files or to the standard output.
   4649      Dump files and preserved temporary files are renamed so as to
   4650      contain the `.gk' additional extension during the second
   4651      compilation, to avoid overwriting those generated by the first.
   4652 
   4653      When this option is passed to the compiler driver, it causes the
   4654      _first_ compilation to be skipped, which makes it useful for little
   4655      other than debugging the compiler proper.
   4656 
   4657 `-feliminate-dwarf2-dups'
   4658      Compress DWARF2 debugging information by eliminating duplicated
   4659      information about each symbol.  This option only makes sense when
   4660      generating DWARF2 debugging information with `-gdwarf-2'.
   4661 
   4662 `-femit-struct-debug-baseonly'
   4663      Emit debug information for struct-like types only when the base
   4664      name of the compilation source file matches the base name of file
   4665      in which the struct was defined.
   4666 
   4667      This option substantially reduces the size of debugging
   4668      information, but at significant potential loss in type information
   4669      to the debugger.  See `-femit-struct-debug-reduced' for a less
   4670      aggressive option.  See `-femit-struct-debug-detailed' for more
   4671      detailed control.
   4672 
   4673      This option works only with DWARF 2.
   4674 
   4675 `-femit-struct-debug-reduced'
   4676      Emit debug information for struct-like types only when the base
   4677      name of the compilation source file matches the base name of file
   4678      in which the type was defined, unless the struct is a template or
   4679      defined in a system header.
   4680 
   4681      This option significantly reduces the size of debugging
   4682      information, with some potential loss in type information to the
   4683      debugger.  See `-femit-struct-debug-baseonly' for a more
   4684      aggressive option.  See `-femit-struct-debug-detailed' for more
   4685      detailed control.
   4686 
   4687      This option works only with DWARF 2.
   4688 
   4689 `-femit-struct-debug-detailed[=SPEC-LIST]'
   4690      Specify the struct-like types for which the compiler will generate
   4691      debug information.  The intent is to reduce duplicate struct debug
   4692      information between different object files within the same program.
   4693 
   4694      This option is a detailed version of `-femit-struct-debug-reduced'
   4695      and `-femit-struct-debug-baseonly', which will serve for most
   4696      needs.
   4697 
   4698      A specification has the syntax
   4699      [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
   4700 
   4701      The optional first word limits the specification to structs that
   4702      are used directly (`dir:') or used indirectly (`ind:').  A struct
   4703      type is used directly when it is the type of a variable, member.
   4704      Indirect uses arise through pointers to structs.  That is, when
   4705      use of an incomplete struct would be legal, the use is indirect.
   4706      An example is `struct one direct; struct two * indirect;'.
   4707 
   4708      The optional second word limits the specification to ordinary
   4709      structs (`ord:') or generic structs (`gen:').  Generic structs are
   4710      a bit complicated to explain.  For C++, these are non-explicit
   4711      specializations of template classes, or non-template classes
   4712      within the above.  Other programming languages have generics, but
   4713      `-femit-struct-debug-detailed' does not yet implement them.
   4714 
   4715      The third word specifies the source files for those structs for
   4716      which the compiler will emit debug information.  The values `none'
   4717      and `any' have the normal meaning.  The value `base' means that
   4718      the base of name of the file in which the type declaration appears
   4719      must match the base of the name of the main compilation file.  In
   4720      practice, this means that types declared in `foo.c' and `foo.h'
   4721      will have debug information, but types declared in other header
   4722      will not.  The value `sys' means those types satisfying `base' or
   4723      declared in system or compiler headers.
   4724 
   4725      You may need to experiment to determine the best settings for your
   4726      application.
   4727 
   4728      The default is `-femit-struct-debug-detailed=all'.
   4729 
   4730      This option works only with DWARF 2.
   4731 
   4732 `-fenable-icf-debug'
   4733      Generate additional debug information to support identical code
   4734      folding (ICF).  This option only works with DWARF version 2 or
   4735      higher.
   4736 
   4737 `-fno-merge-debug-strings'
   4738      Direct the linker to not merge together strings in the debugging
   4739      information which are identical in different object files.
   4740      Merging is not supported by all assemblers or linkers.  Merging
   4741      decreases the size of the debug information in the output file at
   4742      the cost of increasing link processing time.  Merging is enabled
   4743      by default.
   4744 
   4745 `-fdebug-prefix-map=OLD=NEW'
   4746      When compiling files in directory `OLD', record debugging
   4747      information describing them as in `NEW' instead.
   4748 
   4749 `-fno-dwarf2-cfi-asm'
   4750      Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
   4751      instead of using GAS `.cfi_*' directives.
   4752 
   4753 `-p'
   4754      Generate extra code to write profile information suitable for the
   4755      analysis program `prof'.  You must use this option when compiling
   4756      the source files you want data about, and you must also use it when
   4757      linking.
   4758 
   4759 `-pg'
   4760      Generate extra code to write profile information suitable for the
   4761      analysis program `gprof'.  You must use this option when compiling
   4762      the source files you want data about, and you must also use it when
   4763      linking.
   4764 
   4765 `-Q'
   4766      Makes the compiler print out each function name as it is compiled,
   4767      and print some statistics about each pass when it finishes.
   4768 
   4769 `-ftime-report'
   4770      Makes the compiler print some statistics about the time consumed
   4771      by each pass when it finishes.
   4772 
   4773 `-fmem-report'
   4774      Makes the compiler print some statistics about permanent memory
   4775      allocation when it finishes.
   4776 
   4777 `-fpre-ipa-mem-report'
   4778 
   4779 `-fpost-ipa-mem-report'
   4780      Makes the compiler print some statistics about permanent memory
   4781      allocation before or after interprocedural optimization.
   4782 
   4783 `-fstack-usage'
   4784      Makes the compiler output stack usage information for the program,
   4785      on a per-function basis.  The filename for the dump is made by
   4786      appending `.su' to the AUXNAME.  AUXNAME is generated from the
   4787      name of the output file, if explicitly specified and it is not an
   4788      executable, otherwise it is the basename of the source file.  An
   4789      entry is made up of three fields:
   4790 
   4791         * The name of the function.
   4792 
   4793         * A number of bytes.
   4794 
   4795         * One or more qualifiers: `static', `dynamic', `bounded'.
   4796 
   4797      The qualifier `static' means that the function manipulates the
   4798      stack statically: a fixed number of bytes are allocated for the
   4799      frame on function entry and released on function exit; no stack
   4800      adjustments are otherwise made in the function.  The second field
   4801      is this fixed number of bytes.
   4802 
   4803      The qualifier `dynamic' means that the function manipulates the
   4804      stack dynamically: in addition to the static allocation described
   4805      above, stack adjustments are made in the body of the function, for
   4806      example to push/pop arguments around function calls.  If the
   4807      qualifier `bounded' is also present, the amount of these
   4808      adjustments is bounded at compile-time and the second field is an
   4809      upper bound of the total amount of stack used by the function.  If
   4810      it is not present, the amount of these adjustments is not bounded
   4811      at compile-time and the second field only represents the bounded
   4812      part.
   4813 
   4814 `-fprofile-arcs'
   4815      Add code so that program flow "arcs" are instrumented.  During
   4816      execution the program records how many times each branch and call
   4817      is executed and how many times it is taken or returns.  When the
   4818      compiled program exits it saves this data to a file called
   4819      `AUXNAME.gcda' for each source file.  The data may be used for
   4820      profile-directed optimizations (`-fbranch-probabilities'), or for
   4821      test coverage analysis (`-ftest-coverage').  Each object file's
   4822      AUXNAME is generated from the name of the output file, if
   4823      explicitly specified and it is not the final executable, otherwise
   4824      it is the basename of the source file.  In both cases any suffix
   4825      is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
   4826      `dir/foo.gcda' for output file specified as `-o dir/foo.o').
   4827      *Note Cross-profiling::.
   4828 
   4829 `--coverage'
   4830      This option is used to compile and link code instrumented for
   4831      coverage analysis.  The option is a synonym for `-fprofile-arcs'
   4832      `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
   4833      See the documentation for those options for more details.
   4834 
   4835         * Compile the source files with `-fprofile-arcs' plus
   4836           optimization and code generation options.  For test coverage
   4837           analysis, use the additional `-ftest-coverage' option.  You
   4838           do not need to profile every source file in a program.
   4839 
   4840         * Link your object files with `-lgcov' or `-fprofile-arcs' (the
   4841           latter implies the former).
   4842 
   4843         * Run the program on a representative workload to generate the
   4844           arc profile information.  This may be repeated any number of
   4845           times.  You can run concurrent instances of your program, and
   4846           provided that the file system supports locking, the data
   4847           files will be correctly updated.  Also `fork' calls are
   4848           detected and correctly handled (double counting will not
   4849           happen).
   4850 
   4851         * For profile-directed optimizations, compile the source files
   4852           again with the same optimization and code generation options
   4853           plus `-fbranch-probabilities' (*note Options that Control
   4854           Optimization: Optimize Options.).
   4855 
   4856         * For test coverage analysis, use `gcov' to produce human
   4857           readable information from the `.gcno' and `.gcda' files.
   4858           Refer to the `gcov' documentation for further information.
   4859 
   4860 
   4861      With `-fprofile-arcs', for each function of your program GCC
   4862      creates a program flow graph, then finds a spanning tree for the
   4863      graph.  Only arcs that are not on the spanning tree have to be
   4864      instrumented: the compiler adds code to count the number of times
   4865      that these arcs are executed.  When an arc is the only exit or
   4866      only entrance to a block, the instrumentation code can be added to
   4867      the block; otherwise, a new basic block must be created to hold
   4868      the instrumentation code.
   4869 
   4870 `-ftest-coverage'
   4871      Produce a notes file that the `gcov' code-coverage utility (*note
   4872      `gcov'--a Test Coverage Program: Gcov.) can use to show program
   4873      coverage.  Each source file's note file is called `AUXNAME.gcno'.
   4874      Refer to the `-fprofile-arcs' option above for a description of
   4875      AUXNAME and instructions on how to generate test coverage data.
   4876      Coverage data will match the source files more closely, if you do
   4877      not optimize.
   4878 
   4879 `-fdbg-cnt-list'
   4880      Print the name and the counter upper bound for all debug counters.
   4881 
   4882 `-fdbg-cnt=COUNTER-VALUE-LIST'
   4883      Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
   4884      a comma-separated list of NAME:VALUE pairs which sets the upper
   4885      bound of each debug counter NAME to VALUE.  All debug counters
   4886      have the initial upper bound of UINT_MAX, thus dbg_cnt() returns
   4887      true always unless the upper bound is set by this option.  e.g.
   4888      With -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true
   4889      only for first 10 invocations
   4890 
   4891 `-fenable-KIND-PASS'
   4892 `-fdisable-KIND-PASS=RANGE-LIST'
   4893      This is a set of debugging options that are used to explicitly
   4894      disable/enable optimization passes. For compiler users, regular
   4895      options for enabling/disabling passes should be used instead.
   4896 
   4897         * -fdisable-ipa-PASS Disable ipa pass PASS. PASS is the pass
   4898           name.  If the same pass is statically invoked in the compiler
   4899           multiple times, the pass name should be appended with a
   4900           sequential number starting from 1.
   4901 
   4902         * -fdisable-rtl-PASS
   4903 
   4904         * -fdisable-rtl-PASS=RANGE-LIST Disable rtl pass PASS.  PASS is
   4905           the pass name.  If the same pass is statically invoked in the
   4906           compiler multiple times, the pass name should be appended
   4907           with a sequential number starting from 1.  RANGE-LIST is a
   4908           comma seperated list of function ranges or assembler names.
   4909           Each range is a number pair seperated by a colon.  The range
   4910           is inclusive in both ends.  If the range is trivial, the
   4911           number pair can be simplified as a single number.  If the
   4912           function's cgraph node's UID is falling within one of the
   4913           specified ranges, the PASS is disabled for that function.
   4914           The UID is shown in the function header of a dump file, and
   4915           the pass names can be dumped by using option `-fdump-passes'.
   4916 
   4917         * -fdisable-tree-PASS
   4918 
   4919         * -fdisable-tree-PASS=RANGE-LIST Disable tree pass PASS.  See
   4920           `-fdisable-rtl' for the description of option arguments.
   4921 
   4922         * -fenable-ipa-PASS Enable ipa pass PASS.  PASS is the pass
   4923           name.  If the same pass is statically invoked in the compiler
   4924           multiple times, the pass name should be appended with a
   4925           sequential number starting from 1.
   4926 
   4927         * -fenable-rtl-PASS
   4928 
   4929         * -fenable-rtl-PASS=RANGE-LIST Enable rtl pass PASS.  See
   4930           `-fdisable-rtl' for option argument description and examples.
   4931 
   4932         * -fenable-tree-PASS
   4933 
   4934         * -fenable-tree-PASS=RANGE-LIST Enable tree pass PASS.  See
   4935           `-fdisable-rtl' for the description of option arguments.
   4936 
   4937 
   4938                # disable ccp1 for all functions
   4939                   -fdisable-tree-ccp1
   4940                # disable complete unroll for function whose cgraph node uid is 1
   4941                   -fenable-tree-cunroll=1
   4942                # disable gcse2 for functions at the following ranges [1,1],
   4943                # [300,400], and [400,1000]
   4944                # disable gcse2 for functions foo and foo2
   4945                   -fdisable-rtl-gcse2=foo,foo2
   4946                # disable early inlining
   4947                   -fdisable-tree-einline
   4948                # disable ipa inlining
   4949                   -fdisable-ipa-inline
   4950                # enable tree full unroll
   4951                   -fenable-tree-unroll
   4952 
   4953 
   4954 `-dLETTERS'
   4955 `-fdump-rtl-PASS'
   4956      Says to make debugging dumps during compilation at times specified
   4957      by LETTERS.  This is used for debugging the RTL-based passes of the
   4958      compiler.  The file names for most of the dumps are made by
   4959      appending a pass number and a word to the DUMPNAME, and the files
   4960      are created in the directory of the output file.  Note that the
   4961      pass number is computed statically as passes get registered into
   4962      the pass manager.  Thus the numbering is not related to the
   4963      dynamic order of execution of passes.  In particular, a pass
   4964      installed by a plugin could have a number over 200 even if it
   4965      executed quite early.  DUMPNAME is generated from the name of the
   4966      output file, if explicitly specified and it is not an executable,
   4967      otherwise it is the basename of the source file. These switches
   4968      may have different effects when `-E' is used for preprocessing.
   4969 
   4970      Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
   4971      option LETTERS.  Here are the possible letters for use in PASS and
   4972      LETTERS, and their meanings:
   4973 
   4974     `-fdump-rtl-alignments'
   4975           Dump after branch alignments have been computed.
   4976 
   4977     `-fdump-rtl-asmcons'
   4978           Dump after fixing rtl statements that have unsatisfied in/out
   4979           constraints.
   4980 
   4981     `-fdump-rtl-auto_inc_dec'
   4982           Dump after auto-inc-dec discovery.  This pass is only run on
   4983           architectures that have auto inc or auto dec instructions.
   4984 
   4985     `-fdump-rtl-barriers'
   4986           Dump after cleaning up the barrier instructions.
   4987 
   4988     `-fdump-rtl-bbpart'
   4989           Dump after partitioning hot and cold basic blocks.
   4990 
   4991     `-fdump-rtl-bbro'
   4992           Dump after block reordering.
   4993 
   4994     `-fdump-rtl-btl1'
   4995     `-fdump-rtl-btl2'
   4996           `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
   4997           the two branch target load optimization passes.
   4998 
   4999     `-fdump-rtl-bypass'
   5000           Dump after jump bypassing and control flow optimizations.
   5001 
   5002     `-fdump-rtl-combine'
   5003           Dump after the RTL instruction combination pass.
   5004 
   5005     `-fdump-rtl-compgotos'
   5006           Dump after duplicating the computed gotos.
   5007 
   5008     `-fdump-rtl-ce1'
   5009     `-fdump-rtl-ce2'
   5010     `-fdump-rtl-ce3'
   5011           `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
   5012           enable dumping after the three if conversion passes.
   5013 
   5014     `-fdump-rtl-cprop_hardreg'
   5015           Dump after hard register copy propagation.
   5016 
   5017     `-fdump-rtl-csa'
   5018           Dump after combining stack adjustments.
   5019 
   5020     `-fdump-rtl-cse1'
   5021     `-fdump-rtl-cse2'
   5022           `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
   5023           the two common sub-expression elimination passes.
   5024 
   5025     `-fdump-rtl-dce'
   5026           Dump after the standalone dead code elimination passes.
   5027 
   5028     `-fdump-rtl-dbr'
   5029           Dump after delayed branch scheduling.
   5030 
   5031     `-fdump-rtl-dce1'
   5032     `-fdump-rtl-dce2'
   5033           `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
   5034           the two dead store elimination passes.
   5035 
   5036     `-fdump-rtl-eh'
   5037           Dump after finalization of EH handling code.
   5038 
   5039     `-fdump-rtl-eh_ranges'
   5040           Dump after conversion of EH handling range regions.
   5041 
   5042     `-fdump-rtl-expand'
   5043           Dump after RTL generation.
   5044 
   5045     `-fdump-rtl-fwprop1'
   5046     `-fdump-rtl-fwprop2'
   5047           `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
   5048           after the two forward propagation passes.
   5049 
   5050     `-fdump-rtl-gcse1'
   5051     `-fdump-rtl-gcse2'
   5052           `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
   5053           after global common subexpression elimination.
   5054 
   5055     `-fdump-rtl-init-regs'
   5056           Dump after the initialization of the registers.
   5057 
   5058     `-fdump-rtl-initvals'
   5059           Dump after the computation of the initial value sets.
   5060 
   5061     `-fdump-rtl-into_cfglayout'
   5062           Dump after converting to cfglayout mode.
   5063 
   5064     `-fdump-rtl-ira'
   5065           Dump after iterated register allocation.
   5066 
   5067     `-fdump-rtl-jump'
   5068           Dump after the second jump optimization.
   5069 
   5070     `-fdump-rtl-loop2'
   5071           `-fdump-rtl-loop2' enables dumping after the rtl loop
   5072           optimization passes.
   5073 
   5074     `-fdump-rtl-mach'
   5075           Dump after performing the machine dependent reorganization
   5076           pass, if that pass exists.
   5077 
   5078     `-fdump-rtl-mode_sw'
   5079           Dump after removing redundant mode switches.
   5080 
   5081     `-fdump-rtl-rnreg'
   5082           Dump after register renumbering.
   5083 
   5084     `-fdump-rtl-outof_cfglayout'
   5085           Dump after converting from cfglayout mode.
   5086 
   5087     `-fdump-rtl-peephole2'
   5088           Dump after the peephole pass.
   5089 
   5090     `-fdump-rtl-postreload'
   5091           Dump after post-reload optimizations.
   5092 
   5093     `-fdump-rtl-pro_and_epilogue'
   5094           Dump after generating the function pro and epilogues.
   5095 
   5096     `-fdump-rtl-regmove'
   5097           Dump after the register move pass.
   5098 
   5099     `-fdump-rtl-sched1'
   5100     `-fdump-rtl-sched2'
   5101           `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
   5102           after the basic block scheduling passes.
   5103 
   5104     `-fdump-rtl-see'
   5105           Dump after sign extension elimination.
   5106 
   5107     `-fdump-rtl-seqabstr'
   5108           Dump after common sequence discovery.
   5109 
   5110     `-fdump-rtl-shorten'
   5111           Dump after shortening branches.
   5112 
   5113     `-fdump-rtl-sibling'
   5114           Dump after sibling call optimizations.
   5115 
   5116     `-fdump-rtl-split1'
   5117     `-fdump-rtl-split2'
   5118     `-fdump-rtl-split3'
   5119     `-fdump-rtl-split4'
   5120     `-fdump-rtl-split5'
   5121           `-fdump-rtl-split1', `-fdump-rtl-split2',
   5122           `-fdump-rtl-split3', `-fdump-rtl-split4' and
   5123           `-fdump-rtl-split5' enable dumping after five rounds of
   5124           instruction splitting.
   5125 
   5126     `-fdump-rtl-sms'
   5127           Dump after modulo scheduling.  This pass is only run on some
   5128           architectures.
   5129 
   5130     `-fdump-rtl-stack'
   5131           Dump after conversion from GCC's "flat register file"
   5132           registers to the x87's stack-like registers.  This pass is
   5133           only run on x86 variants.
   5134 
   5135     `-fdump-rtl-subreg1'
   5136     `-fdump-rtl-subreg2'
   5137           `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
   5138           after the two subreg expansion passes.
   5139 
   5140     `-fdump-rtl-unshare'
   5141           Dump after all rtl has been unshared.
   5142 
   5143     `-fdump-rtl-vartrack'
   5144           Dump after variable tracking.
   5145 
   5146     `-fdump-rtl-vregs'
   5147           Dump after converting virtual registers to hard registers.
   5148 
   5149     `-fdump-rtl-web'
   5150           Dump after live range splitting.
   5151 
   5152     `-fdump-rtl-regclass'
   5153     `-fdump-rtl-subregs_of_mode_init'
   5154     `-fdump-rtl-subregs_of_mode_finish'
   5155     `-fdump-rtl-dfinit'
   5156     `-fdump-rtl-dfinish'
   5157           These dumps are defined but always produce empty files.
   5158 
   5159     `-fdump-rtl-all'
   5160           Produce all the dumps listed above.
   5161 
   5162     `-dA'
   5163           Annotate the assembler output with miscellaneous debugging
   5164           information.
   5165 
   5166     `-dD'
   5167           Dump all macro definitions, at the end of preprocessing, in
   5168           addition to normal output.
   5169 
   5170     `-dH'
   5171           Produce a core dump whenever an error occurs.
   5172 
   5173     `-dm'
   5174           Print statistics on memory usage, at the end of the run, to
   5175           standard error.
   5176 
   5177     `-dp'
   5178           Annotate the assembler output with a comment indicating which
   5179           pattern and alternative was used.  The length of each
   5180           instruction is also printed.
   5181 
   5182     `-dP'
   5183           Dump the RTL in the assembler output as a comment before each
   5184           instruction.  Also turns on `-dp' annotation.
   5185 
   5186     `-dv'
   5187           For each of the other indicated dump files
   5188           (`-fdump-rtl-PASS'), dump a representation of the control
   5189           flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
   5190 
   5191     `-dx'
   5192           Just generate RTL for a function instead of compiling it.
   5193           Usually used with `-fdump-rtl-expand'.
   5194 
   5195 `-fdump-noaddr'
   5196      When doing debugging dumps, suppress address output.  This makes
   5197      it more feasible to use diff on debugging dumps for compiler
   5198      invocations with different compiler binaries and/or different text
   5199      / bss / data / heap / stack / dso start locations.
   5200 
   5201 `-fdump-unnumbered'
   5202      When doing debugging dumps, suppress instruction numbers and
   5203      address output.  This makes it more feasible to use diff on
   5204      debugging dumps for compiler invocations with different options,
   5205      in particular with and without `-g'.
   5206 
   5207 `-fdump-unnumbered-links'
   5208      When doing debugging dumps (see `-d' option above), suppress
   5209      instruction numbers for the links to the previous and next
   5210      instructions in a sequence.
   5211 
   5212 `-fdump-translation-unit (C++ only)'
   5213 `-fdump-translation-unit-OPTIONS (C++ only)'
   5214      Dump a representation of the tree structure for the entire
   5215      translation unit to a file.  The file name is made by appending
   5216      `.tu' to the source file name, and the file is created in the same
   5217      directory as the output file.  If the `-OPTIONS' form is used,
   5218      OPTIONS controls the details of the dump as described for the
   5219      `-fdump-tree' options.
   5220 
   5221 `-fdump-class-hierarchy (C++ only)'
   5222 `-fdump-class-hierarchy-OPTIONS (C++ only)'
   5223      Dump a representation of each class's hierarchy and virtual
   5224      function table layout to a file.  The file name is made by
   5225      appending `.class' to the source file name, and the file is
   5226      created in the same directory as the output file.  If the
   5227      `-OPTIONS' form is used, OPTIONS controls the details of the dump
   5228      as described for the `-fdump-tree' options.
   5229 
   5230 `-fdump-ipa-SWITCH'
   5231      Control the dumping at various stages of inter-procedural analysis
   5232      language tree to a file.  The file name is generated by appending a
   5233      switch specific suffix to the source file name, and the file is
   5234      created in the same directory as the output file.  The following
   5235      dumps are possible:
   5236 
   5237     `all'
   5238           Enables all inter-procedural analysis dumps.
   5239 
   5240     `cgraph'
   5241           Dumps information about call-graph optimization, unused
   5242           function removal, and inlining decisions.
   5243 
   5244     `inline'
   5245           Dump after function inlining.
   5246 
   5247 
   5248 `-fdump-passes'
   5249      Dump the list of optimization passes that are turned on and off by
   5250      the current command line options.
   5251 
   5252 `-fdump-statistics-OPTION'
   5253      Enable and control dumping of pass statistics in a separate file.
   5254      The file name is generated by appending a suffix ending in
   5255      `.statistics' to the source file name, and the file is created in
   5256      the same directory as the output file.  If the `-OPTION' form is
   5257      used, `-stats' will cause counters to be summed over the whole
   5258      compilation unit while `-details' will dump every event as the
   5259      passes generate them.  The default with no option is to sum
   5260      counters for each function compiled.
   5261 
   5262 `-fdump-tree-SWITCH'
   5263 `-fdump-tree-SWITCH-OPTIONS'
   5264      Control the dumping at various stages of processing the
   5265      intermediate language tree to a file.  The file name is generated
   5266      by appending a switch specific suffix to the source file name, and
   5267      the file is created in the same directory as the output file.  If
   5268      the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
   5269      options that control the details of the dump.  Not all options are
   5270      applicable to all dumps, those which are not meaningful will be
   5271      ignored.  The following options are available
   5272 
   5273     `address'
   5274           Print the address of each node.  Usually this is not
   5275           meaningful as it changes according to the environment and
   5276           source file.  Its primary use is for tying up a dump file
   5277           with a debug environment.
   5278 
   5279     `asmname'
   5280           If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
   5281           that in the dump instead of `DECL_NAME'.  Its primary use is
   5282           ease of use working backward from mangled names in the
   5283           assembly file.
   5284 
   5285     `slim'
   5286           Inhibit dumping of members of a scope or body of a function
   5287           merely because that scope has been reached.  Only dump such
   5288           items when they are directly reachable by some other path.
   5289           When dumping pretty-printed trees, this option inhibits
   5290           dumping the bodies of control structures.
   5291 
   5292     `raw'
   5293           Print a raw representation of the tree.  By default, trees are
   5294           pretty-printed into a C-like representation.
   5295 
   5296     `details'
   5297           Enable more detailed dumps (not honored by every dump option).
   5298 
   5299     `stats'
   5300           Enable dumping various statistics about the pass (not honored
   5301           by every dump option).
   5302 
   5303     `blocks'
   5304           Enable showing basic block boundaries (disabled in raw dumps).
   5305 
   5306     `vops'
   5307           Enable showing virtual operands for every statement.
   5308 
   5309     `lineno'
   5310           Enable showing line numbers for statements.
   5311 
   5312     `uid'
   5313           Enable showing the unique ID (`DECL_UID') for each variable.
   5314 
   5315     `verbose'
   5316           Enable showing the tree dump for each statement.
   5317 
   5318     `eh'
   5319           Enable showing the EH region number holding each statement.
   5320 
   5321     `all'
   5322           Turn on all options, except `raw', `slim', `verbose' and
   5323           `lineno'.
   5324 
   5325      The following tree dumps are possible:
   5326     `original'
   5327           Dump before any tree based optimization, to `FILE.original'.
   5328 
   5329     `optimized'
   5330           Dump after all tree based optimization, to `FILE.optimized'.
   5331 
   5332     `gimple'
   5333           Dump each function before and after the gimplification pass
   5334           to a file.  The file name is made by appending `.gimple' to
   5335           the source file name.
   5336 
   5337     `cfg'
   5338           Dump the control flow graph of each function to a file.  The
   5339           file name is made by appending `.cfg' to the source file name.
   5340 
   5341     `vcg'
   5342           Dump the control flow graph of each function to a file in VCG
   5343           format.  The file name is made by appending `.vcg' to the
   5344           source file name.  Note that if the file contains more than
   5345           one function, the generated file cannot be used directly by
   5346           VCG.  You will need to cut and paste each function's graph
   5347           into its own separate file first.
   5348 
   5349     `ch'
   5350           Dump each function after copying loop headers.  The file name
   5351           is made by appending `.ch' to the source file name.
   5352 
   5353     `ssa'
   5354           Dump SSA related information to a file.  The file name is
   5355           made by appending `.ssa' to the source file name.
   5356 
   5357     `alias'
   5358           Dump aliasing information for each function.  The file name
   5359           is made by appending `.alias' to the source file name.
   5360 
   5361     `ccp'
   5362           Dump each function after CCP.  The file name is made by
   5363           appending `.ccp' to the source file name.
   5364 
   5365     `storeccp'
   5366           Dump each function after STORE-CCP.  The file name is made by
   5367           appending `.storeccp' to the source file name.
   5368 
   5369     `pre'
   5370           Dump trees after partial redundancy elimination.  The file
   5371           name is made by appending `.pre' to the source file name.
   5372 
   5373     `fre'
   5374           Dump trees after full redundancy elimination.  The file name
   5375           is made by appending `.fre' to the source file name.
   5376 
   5377     `copyprop'
   5378           Dump trees after copy propagation.  The file name is made by
   5379           appending `.copyprop' to the source file name.
   5380 
   5381     `store_copyprop'
   5382           Dump trees after store copy-propagation.  The file name is
   5383           made by appending `.store_copyprop' to the source file name.
   5384 
   5385     `dce'
   5386           Dump each function after dead code elimination.  The file
   5387           name is made by appending `.dce' to the source file name.
   5388 
   5389     `mudflap'
   5390           Dump each function after adding mudflap instrumentation.  The
   5391           file name is made by appending `.mudflap' to the source file
   5392           name.
   5393 
   5394     `sra'
   5395           Dump each function after performing scalar replacement of
   5396           aggregates.  The file name is made by appending `.sra' to the
   5397           source file name.
   5398 
   5399     `sink'
   5400           Dump each function after performing code sinking.  The file
   5401           name is made by appending `.sink' to the source file name.
   5402 
   5403     `dom'
   5404           Dump each function after applying dominator tree
   5405           optimizations.  The file name is made by appending `.dom' to
   5406           the source file name.
   5407 
   5408     `dse'
   5409           Dump each function after applying dead store elimination.
   5410           The file name is made by appending `.dse' to the source file
   5411           name.
   5412 
   5413     `phiopt'
   5414           Dump each function after optimizing PHI nodes into
   5415           straightline code.  The file name is made by appending
   5416           `.phiopt' to the source file name.
   5417 
   5418     `forwprop'
   5419           Dump each function after forward propagating single use
   5420           variables.  The file name is made by appending `.forwprop' to
   5421           the source file name.
   5422 
   5423     `copyrename'
   5424           Dump each function after applying the copy rename
   5425           optimization.  The file name is made by appending
   5426           `.copyrename' to the source file name.
   5427 
   5428     `nrv'
   5429           Dump each function after applying the named return value
   5430           optimization on generic trees.  The file name is made by
   5431           appending `.nrv' to the source file name.
   5432 
   5433     `vect'
   5434           Dump each function after applying vectorization of loops.
   5435           The file name is made by appending `.vect' to the source file
   5436           name.
   5437 
   5438     `slp'
   5439           Dump each function after applying vectorization of basic
   5440           blocks.  The file name is made by appending `.slp' to the
   5441           source file name.
   5442 
   5443     `vrp'
   5444           Dump each function after Value Range Propagation (VRP).  The
   5445           file name is made by appending `.vrp' to the source file name.
   5446 
   5447     `all'
   5448           Enable all the available tree dumps with the flags provided
   5449           in this option.
   5450 
   5451 `-ftree-vectorizer-verbose=N'
   5452      This option controls the amount of debugging output the vectorizer
   5453      prints.  This information is written to standard error, unless
   5454      `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
   5455      case it is output to the usual dump listing file, `.vect'.  For
   5456      N=0 no diagnostic information is reported.  If N=1 the vectorizer
   5457      reports each loop that got vectorized, and the total number of
   5458      loops that got vectorized.  If N=2 the vectorizer also reports
   5459      non-vectorized loops that passed the first analysis phase
   5460      (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
   5461      single-entry/exit loops.  This is the same verbosity level that
   5462      `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
   5463      either more information dumped for each reported loop, or same
   5464      amount of information reported for more loops: if N=3, vectorizer
   5465      cost model information is reported.  If N=4, alignment related
   5466      information is added to the reports.  If N=5, data-references
   5467      related information (e.g. memory dependences, memory
   5468      access-patterns) is added to the reports.  If N=6, the vectorizer
   5469      reports also non-vectorized inner-most loops that did not pass the
   5470      first analysis phase (i.e., may not be countable, or may have
   5471      complicated control-flow).  If N=7, the vectorizer reports also
   5472      non-vectorized nested loops.  If N=8, SLP related information is
   5473      added to the reports.  For N=9, all the information the vectorizer
   5474      generates during its analysis and transformation is reported.
   5475      This is the same verbosity level that `-fdump-tree-vect-details'
   5476      uses.
   5477 
   5478 `-frandom-seed=STRING'
   5479      This option provides a seed that GCC uses when it would otherwise
   5480      use random numbers.  It is used to generate certain symbol names
   5481      that have to be different in every compiled file.  It is also used
   5482      to place unique stamps in coverage data files and the object files
   5483      that produce them.  You can use the `-frandom-seed' option to
   5484      produce reproducibly identical object files.
   5485 
   5486      The STRING should be different for every file you compile.
   5487 
   5488 `-fsched-verbose=N'
   5489      On targets that use instruction scheduling, this option controls
   5490      the amount of debugging output the scheduler prints.  This
   5491      information is written to standard error, unless
   5492      `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
   5493      case it is output to the usual dump listing file, `.sched1' or
   5494      `.sched2' respectively.  However for N greater than nine, the
   5495      output is always printed to standard error.
   5496 
   5497      For N greater than zero, `-fsched-verbose' outputs the same
   5498      information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
   5499      greater than one, it also output basic block probabilities,
   5500      detailed ready list information and unit/insn info.  For N greater
   5501      than two, it includes RTL at abort point, control-flow and regions
   5502      info.  And for N over four, `-fsched-verbose' also includes
   5503      dependence info.
   5504 
   5505 `-save-temps'
   5506 `-save-temps=cwd'
   5507      Store the usual "temporary" intermediate files permanently; place
   5508      them in the current directory and name them based on the source
   5509      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
   5510      files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
   5511      preprocessed `foo.i' output file even though the compiler now
   5512      normally uses an integrated preprocessor.
   5513 
   5514      When used in combination with the `-x' command line option,
   5515      `-save-temps' is sensible enough to avoid over writing an input
   5516      source file with the same extension as an intermediate file.  The
   5517      corresponding intermediate file may be obtained by renaming the
   5518      source file before using `-save-temps'.
   5519 
   5520      If you invoke GCC in parallel, compiling several different source
   5521      files that share a common base name in different subdirectories or
   5522      the same source file compiled for multiple output destinations, it
   5523      is likely that the different parallel compilers will interfere
   5524      with each other, and overwrite the temporary files.  For instance:
   5525 
   5526           gcc -save-temps -o outdir1/foo.o indir1/foo.c&
   5527           gcc -save-temps -o outdir2/foo.o indir2/foo.c&
   5528 
   5529      may result in `foo.i' and `foo.o' being written to simultaneously
   5530      by both compilers.
   5531 
   5532 `-save-temps=obj'
   5533      Store the usual "temporary" intermediate files permanently.  If the
   5534      `-o' option is used, the temporary files are based on the object
   5535      file.  If the `-o' option is not used, the `-save-temps=obj'
   5536      switch behaves like `-save-temps'.
   5537 
   5538      For example:
   5539 
   5540           gcc -save-temps=obj -c foo.c
   5541           gcc -save-temps=obj -c bar.c -o dir/xbar.o
   5542           gcc -save-temps=obj foobar.c -o dir2/yfoobar
   5543 
   5544      would create `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
   5545      `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
   5546 
   5547 `-time[=FILE]'
   5548      Report the CPU time taken by each subprocess in the compilation
   5549      sequence.  For C source files, this is the compiler proper and
   5550      assembler (plus the linker if linking is done).
   5551 
   5552      Without the specification of an output file, the output looks like
   5553      this:
   5554 
   5555           # cc1 0.12 0.01
   5556           # as 0.00 0.01
   5557 
   5558      The first number on each line is the "user time", that is time
   5559      spent executing the program itself.  The second number is "system
   5560      time", time spent executing operating system routines on behalf of
   5561      the program.  Both numbers are in seconds.
   5562 
   5563      With the specification of an output file, the output is appended
   5564      to the named file, and it looks like this:
   5565 
   5566           0.12 0.01 cc1 OPTIONS
   5567           0.00 0.01 as OPTIONS
   5568 
   5569      The "user time" and the "system time" are moved before the program
   5570      name, and the options passed to the program are displayed, so that
   5571      one can later tell what file was being compiled, and with which
   5572      options.
   5573 
   5574 `-fvar-tracking'
   5575      Run variable tracking pass.  It computes where variables are
   5576      stored at each position in code.  Better debugging information is
   5577      then generated (if the debugging information format supports this
   5578      information).
   5579 
   5580      It is enabled by default when compiling with optimization (`-Os',
   5581      `-O', `-O2', ...), debugging information (`-g') and the debug info
   5582      format supports it.
   5583 
   5584 `-fvar-tracking-assignments'
   5585      Annotate assignments to user variables early in the compilation and
   5586      attempt to carry the annotations over throughout the compilation
   5587      all the way to the end, in an attempt to improve debug information
   5588      while optimizing.  Use of `-gdwarf-4' is recommended along with it.
   5589 
   5590      It can be enabled even if var-tracking is disabled, in which case
   5591      annotations will be created and maintained, but discarded at the
   5592      end.
   5593 
   5594 `-fvar-tracking-assignments-toggle'
   5595      Toggle `-fvar-tracking-assignments', in the same way that
   5596      `-gtoggle' toggles `-g'.
   5597 
   5598 `-print-file-name=LIBRARY'
   5599      Print the full absolute name of the library file LIBRARY that
   5600      would be used when linking--and don't do anything else.  With this
   5601      option, GCC does not compile or link anything; it just prints the
   5602      file name.
   5603 
   5604 `-print-multi-directory'
   5605      Print the directory name corresponding to the multilib selected by
   5606      any other switches present in the command line.  This directory is
   5607      supposed to exist in `GCC_EXEC_PREFIX'.
   5608 
   5609 `-print-multi-lib'
   5610      Print the mapping from multilib directory names to compiler
   5611      switches that enable them.  The directory name is separated from
   5612      the switches by `;', and each switch starts with an `@' instead of
   5613      the `-', without spaces between multiple switches.  This is
   5614      supposed to ease shell-processing.
   5615 
   5616 `-print-multi-os-directory'
   5617      Print the path to OS libraries for the selected multilib, relative
   5618      to some `lib' subdirectory.  If OS libraries are present in the
   5619      `lib' subdirectory and no multilibs are used, this is usually just
   5620      `.', if OS libraries are present in `libSUFFIX' sibling
   5621      directories this prints e.g. `../lib64', `../lib' or `../lib32',
   5622      or if OS libraries are present in `lib/SUBDIR' subdirectories it
   5623      prints e.g. `amd64', `sparcv9' or `ev6'.
   5624 
   5625 `-print-prog-name=PROGRAM'
   5626      Like `-print-file-name', but searches for a program such as `cpp'.
   5627 
   5628 `-print-libgcc-file-name'
   5629      Same as `-print-file-name=libgcc.a'.
   5630 
   5631      This is useful when you use `-nostdlib' or `-nodefaultlibs' but
   5632      you do want to link with `libgcc.a'.  You can do
   5633 
   5634           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
   5635 
   5636 `-print-search-dirs'
   5637      Print the name of the configured installation directory and a list
   5638      of program and library directories `gcc' will search--and don't do
   5639      anything else.
   5640 
   5641      This is useful when `gcc' prints the error message `installation
   5642      problem, cannot exec cpp0: No such file or directory'.  To resolve
   5643      this you either need to put `cpp0' and the other compiler
   5644      components where `gcc' expects to find them, or you can set the
   5645      environment variable `GCC_EXEC_PREFIX' to the directory where you
   5646      installed them.  Don't forget the trailing `/'.  *Note Environment
   5647      Variables::.
   5648 
   5649 `-print-sysroot'
   5650      Print the target sysroot directory that will be used during
   5651      compilation.  This is the target sysroot specified either at
   5652      configure time or using the `--sysroot' option, possibly with an
   5653      extra suffix that depends on compilation options.  If no target
   5654      sysroot is specified, the option prints nothing.
   5655 
   5656 `-print-sysroot-headers-suffix'
   5657      Print the suffix added to the target sysroot when searching for
   5658      headers, or give an error if the compiler is not configured with
   5659      such a suffix--and don't do anything else.
   5660 
   5661 `-dumpmachine'
   5662      Print the compiler's target machine (for example,
   5663      `i686-pc-linux-gnu')--and don't do anything else.
   5664 
   5665 `-dumpversion'
   5666      Print the compiler version (for example, `3.0')--and don't do
   5667      anything else.
   5668 
   5669 `-dumpspecs'
   5670      Print the compiler's built-in specs--and don't do anything else.
   5671      (This is used when GCC itself is being built.)  *Note Spec Files::.
   5672 
   5673 `-feliminate-unused-debug-types'
   5674      Normally, when producing DWARF2 output, GCC will emit debugging
   5675      information for all types declared in a compilation unit,
   5676      regardless of whether or not they are actually used in that
   5677      compilation unit.  Sometimes this is useful, such as if, in the
   5678      debugger, you want to cast a value to a type that is not actually
   5679      used in your program (but is declared).  More often, however, this
   5680      results in a significant amount of wasted space.  With this
   5681      option, GCC will avoid producing debug symbol output for types
   5682      that are nowhere used in the source file being compiled.
   5683 
   5684 
   5685 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
   5686 
   5687 3.10 Options That Control Optimization
   5688 ======================================
   5689 
   5690 These options control various sorts of optimizations.
   5691 
   5692  Without any optimization option, the compiler's goal is to reduce the
   5693 cost of compilation and to make debugging produce the expected results.
   5694 Statements are independent: if you stop the program with a breakpoint
   5695 between statements, you can then assign a new value to any variable or
   5696 change the program counter to any other statement in the function and
   5697 get exactly the results you would expect from the source code.
   5698 
   5699  Turning on optimization flags makes the compiler attempt to improve
   5700 the performance and/or code size at the expense of compilation time and
   5701 possibly the ability to debug the program.
   5702 
   5703  The compiler performs optimization based on the knowledge it has of the
   5704 program.  Compiling multiple files at once to a single output file mode
   5705 allows the compiler to use information gained from all of the files
   5706 when compiling each of them.
   5707 
   5708  Not all optimizations are controlled directly by a flag.  Only
   5709 optimizations that have a flag are listed in this section.
   5710 
   5711  Most optimizations are only enabled if an `-O' level is set on the
   5712 command line.  Otherwise they are disabled, even if individual
   5713 optimization flags are specified.
   5714 
   5715  Depending on the target and how GCC was configured, a slightly
   5716 different set of optimizations may be enabled at each `-O' level than
   5717 those listed here.  You can invoke GCC with `-Q --help=optimizers' to
   5718 find out the exact set of optimizations that are enabled at each level.
   5719 *Note Overall Options::, for examples.
   5720 
   5721 `-O'
   5722 `-O1'
   5723      Optimize.  Optimizing compilation takes somewhat more time, and a
   5724      lot more memory for a large function.
   5725 
   5726      With `-O', the compiler tries to reduce code size and execution
   5727      time, without performing any optimizations that take a great deal
   5728      of compilation time.
   5729 
   5730      `-O' turns on the following optimization flags:
   5731           -fauto-inc-dec
   5732           -fcompare-elim
   5733           -fcprop-registers
   5734           -fdce
   5735           -fdefer-pop
   5736           -fdelayed-branch
   5737           -fdse
   5738           -fguess-branch-probability
   5739           -fif-conversion2
   5740           -fif-conversion
   5741           -fipa-pure-const
   5742           -fipa-profile
   5743           -fipa-reference
   5744           -fmerge-constants
   5745           -fsplit-wide-types
   5746           -ftree-bit-ccp
   5747           -ftree-builtin-call-dce
   5748           -ftree-ccp
   5749           -ftree-ch
   5750           -ftree-copyrename
   5751           -ftree-dce
   5752           -ftree-dominator-opts
   5753           -ftree-dse
   5754           -ftree-forwprop
   5755           -ftree-fre
   5756           -ftree-phiprop
   5757           -ftree-sra
   5758           -ftree-pta
   5759           -ftree-ter
   5760           -funit-at-a-time
   5761 
   5762      `-O' also turns on `-fomit-frame-pointer' on machines where doing
   5763      so does not interfere with debugging.
   5764 
   5765 `-O2'
   5766      Optimize even more.  GCC performs nearly all supported
   5767      optimizations that do not involve a space-speed tradeoff.  As
   5768      compared to `-O', this option increases both compilation time and
   5769      the performance of the generated code.
   5770 
   5771      `-O2' turns on all optimization flags specified by `-O'.  It also
   5772      turns on the following optimization flags:
   5773           -fthread-jumps
   5774           -falign-functions  -falign-jumps
   5775           -falign-loops  -falign-labels
   5776           -fcaller-saves
   5777           -fcrossjumping
   5778           -fcse-follow-jumps  -fcse-skip-blocks
   5779           -fdelete-null-pointer-checks
   5780           -fdevirtualize
   5781           -fexpensive-optimizations
   5782           -fgcse  -fgcse-lm
   5783           -finline-small-functions
   5784           -findirect-inlining
   5785           -fipa-sra
   5786           -foptimize-sibling-calls
   5787           -fpartial-inlining
   5788           -fpeephole2
   5789           -fregmove
   5790           -freorder-blocks  -freorder-functions
   5791           -frerun-cse-after-loop
   5792           -fsched-interblock  -fsched-spec
   5793           -fschedule-insns  -fschedule-insns2
   5794           -fstrict-aliasing -fstrict-overflow
   5795           -ftree-switch-conversion
   5796           -ftree-pre
   5797           -ftree-vrp
   5798 
   5799      Please note the warning under `-fgcse' about invoking `-O2' on
   5800      programs that use computed gotos.
   5801 
   5802 `-O3'
   5803      Optimize yet more.  `-O3' turns on all optimizations specified by
   5804      `-O2' and also turns on the `-finline-functions',
   5805      `-funswitch-loops', `-fpredictive-commoning',
   5806      `-fgcse-after-reload', `-ftree-vectorize' and `-fipa-cp-clone'
   5807      options.
   5808 
   5809 `-O0'
   5810      Reduce compilation time and make debugging produce the expected
   5811      results.  This is the default.
   5812 
   5813 `-Os'
   5814      Optimize for size.  `-Os' enables all `-O2' optimizations that do
   5815      not typically increase code size.  It also performs further
   5816      optimizations designed to reduce code size.
   5817 
   5818      `-Os' disables the following optimization flags:
   5819           -falign-functions  -falign-jumps  -falign-loops
   5820           -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
   5821           -fprefetch-loop-arrays  -ftree-vect-loop-version
   5822 
   5823 `-Ofast'
   5824      Disregard strict standards compliance.  `-Ofast' enables all `-O3'
   5825      optimizations.  It also enables optimizations that are not valid
   5826      for all standard compliant programs.  It turns on `-ffast-math'.
   5827 
   5828      If you use multiple `-O' options, with or without level numbers,
   5829      the last such option is the one that is effective.
   5830 
   5831  Options of the form `-fFLAG' specify machine-independent flags.  Most
   5832 flags have both positive and negative forms; the negative form of
   5833 `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
   5834 is listed--the one you typically will use.  You can figure out the
   5835 other form by either removing `no-' or adding it.
   5836 
   5837  The following options control specific optimizations.  They are either
   5838 activated by `-O' options or are related to ones that are.  You can use
   5839 the following flags in the rare cases when "fine-tuning" of
   5840 optimizations to be performed is desired.
   5841 
   5842 `-fno-default-inline'
   5843      Do not make member functions inline by default merely because they
   5844      are defined inside the class scope (C++ only).  Otherwise, when
   5845      you specify `-O', member functions defined inside class scope are
   5846      compiled inline by default; i.e., you don't need to add `inline'
   5847      in front of the member function name.
   5848 
   5849 `-fno-defer-pop'
   5850      Always pop the arguments to each function call as soon as that
   5851      function returns.  For machines which must pop arguments after a
   5852      function call, the compiler normally lets arguments accumulate on
   5853      the stack for several function calls and pops them all at once.
   5854 
   5855      Disabled at levels `-O', `-O2', `-O3', `-Os'.
   5856 
   5857 `-fforward-propagate'
   5858      Perform a forward propagation pass on RTL.  The pass tries to
   5859      combine two instructions and checks if the result can be
   5860      simplified.  If loop unrolling is active, two passes are performed
   5861      and the second is scheduled after loop unrolling.
   5862 
   5863      This option is enabled by default at optimization levels `-O',
   5864      `-O2', `-O3', `-Os'.
   5865 
   5866 `-ffp-contract=STYLE'
   5867      `-ffp-contract=off' disables floating-point expression contraction.
   5868      `-ffp-contract=fast' enables floating-point expression contraction
   5869      such as forming of fused multiply-add operations if the target has
   5870      native support for them.  `-ffp-contract=on' enables
   5871      floating-point expression contraction if allowed by the language
   5872      standard.  This is currently not implemented and treated equal to
   5873      `-ffp-contract=off'.
   5874 
   5875      The default is `-ffp-contract=fast'.
   5876 
   5877 `-fomit-frame-pointer'
   5878      Don't keep the frame pointer in a register for functions that
   5879      don't need one.  This avoids the instructions to save, set up and
   5880      restore frame pointers; it also makes an extra register available
   5881      in many functions.  *It also makes debugging impossible on some
   5882      machines.*
   5883 
   5884      On some machines, such as the VAX, this flag has no effect, because
   5885      the standard calling sequence automatically handles the frame
   5886      pointer and nothing is saved by pretending it doesn't exist.  The
   5887      machine-description macro `FRAME_POINTER_REQUIRED' controls
   5888      whether a target machine supports this flag.  *Note Register
   5889      Usage: (gccint)Registers.
   5890 
   5891      Starting with GCC version 4.6, the default setting (when not
   5892      optimizing for size) for 32-bit Linux x86 and 32-bit Darwin x86
   5893      targets has been changed to `-fomit-frame-pointer'.  The default
   5894      can be reverted to `-fno-omit-frame-pointer' by configuring GCC
   5895      with the `--enable-frame-pointer' configure option.
   5896 
   5897      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   5898 
   5899 `-foptimize-sibling-calls'
   5900      Optimize sibling and tail recursive calls.
   5901 
   5902      Enabled at levels `-O2', `-O3', `-Os'.
   5903 
   5904 `-fno-inline'
   5905      Don't pay attention to the `inline' keyword.  Normally this option
   5906      is used to keep the compiler from expanding any functions inline.
   5907      Note that if you are not optimizing, no functions can be expanded
   5908      inline.
   5909 
   5910 `-finline-small-functions'
   5911      Integrate functions into their callers when their body is smaller
   5912      than expected function call code (so overall size of program gets
   5913      smaller).  The compiler heuristically decides which functions are
   5914      simple enough to be worth integrating in this way.
   5915 
   5916      Enabled at level `-O2'.
   5917 
   5918 `-findirect-inlining'
   5919      Inline also indirect calls that are discovered to be known at
   5920      compile time thanks to previous inlining.  This option has any
   5921      effect only when inlining itself is turned on by the
   5922      `-finline-functions' or `-finline-small-functions' options.
   5923 
   5924      Enabled at level `-O2'.
   5925 
   5926 `-finline-functions'
   5927      Integrate all simple functions into their callers.  The compiler
   5928      heuristically decides which functions are simple enough to be worth
   5929      integrating in this way.
   5930 
   5931      If all calls to a given function are integrated, and the function
   5932      is declared `static', then the function is normally not output as
   5933      assembler code in its own right.
   5934 
   5935      Enabled at level `-O3'.
   5936 
   5937 `-finline-functions-called-once'
   5938      Consider all `static' functions called once for inlining into their
   5939      caller even if they are not marked `inline'.  If a call to a given
   5940      function is integrated, then the function is not output as
   5941      assembler code in its own right.
   5942 
   5943      Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
   5944 
   5945 `-fearly-inlining'
   5946      Inline functions marked by `always_inline' and functions whose
   5947      body seems smaller than the function call overhead early before
   5948      doing `-fprofile-generate' instrumentation and real inlining pass.
   5949      Doing so makes profiling significantly cheaper and usually
   5950      inlining faster on programs having large chains of nested wrapper
   5951      functions.
   5952 
   5953      Enabled by default.
   5954 
   5955 `-fipa-sra'
   5956      Perform interprocedural scalar replacement of aggregates, removal
   5957      of unused parameters and replacement of parameters passed by
   5958      reference by parameters passed by value.
   5959 
   5960      Enabled at levels `-O2', `-O3' and `-Os'.
   5961 
   5962 `-finline-limit=N'
   5963      By default, GCC limits the size of functions that can be inlined.
   5964      This flag allows coarse control of this limit.  N is the size of
   5965      functions that can be inlined in number of pseudo instructions.
   5966 
   5967      Inlining is actually controlled by a number of parameters, which
   5968      may be specified individually by using `--param NAME=VALUE'.  The
   5969      `-finline-limit=N' option sets some of these parameters as follows:
   5970 
   5971     `max-inline-insns-single'
   5972           is set to N/2.
   5973 
   5974     `max-inline-insns-auto'
   5975           is set to N/2.
   5976 
   5977      See below for a documentation of the individual parameters
   5978      controlling inlining and for the defaults of these parameters.
   5979 
   5980      _Note:_ there may be no value to `-finline-limit' that results in
   5981      default behavior.
   5982 
   5983      _Note:_ pseudo instruction represents, in this particular context,
   5984      an abstract measurement of function's size.  In no way does it
   5985      represent a count of assembly instructions and as such its exact
   5986      meaning might change from one release to an another.
   5987 
   5988 `-fno-keep-inline-dllexport'
   5989      This is a more fine-grained version of `-fkeep-inline-functions',
   5990      which applies only to functions that are declared using the
   5991      `dllexport' attribute or declspec (*Note Declaring Attributes of
   5992      Functions: Function Attributes.)
   5993 
   5994 `-fkeep-inline-functions'
   5995      In C, emit `static' functions that are declared `inline' into the
   5996      object file, even if the function has been inlined into all of its
   5997      callers.  This switch does not affect functions using the `extern
   5998      inline' extension in GNU C90.  In C++, emit any and all inline
   5999      functions into the object file.
   6000 
   6001 `-fkeep-static-consts'
   6002      Emit variables declared `static const' when optimization isn't
   6003      turned on, even if the variables aren't referenced.
   6004 
   6005      GCC enables this option by default.  If you want to force the
   6006      compiler to check if the variable was referenced, regardless of
   6007      whether or not optimization is turned on, use the
   6008      `-fno-keep-static-consts' option.
   6009 
   6010 `-fmerge-constants'
   6011      Attempt to merge identical constants (string constants and
   6012      floating point constants) across compilation units.
   6013 
   6014      This option is the default for optimized compilation if the
   6015      assembler and linker support it.  Use `-fno-merge-constants' to
   6016      inhibit this behavior.
   6017 
   6018      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6019 
   6020 `-fmerge-all-constants'
   6021      Attempt to merge identical constants and identical variables.
   6022 
   6023      This option implies `-fmerge-constants'.  In addition to
   6024      `-fmerge-constants' this considers e.g. even constant initialized
   6025      arrays or initialized constant variables with integral or floating
   6026      point types.  Languages like C or C++ require each variable,
   6027      including multiple instances of the same variable in recursive
   6028      calls, to have distinct locations, so using this option will
   6029      result in non-conforming behavior.
   6030 
   6031 `-fmodulo-sched'
   6032      Perform swing modulo scheduling immediately before the first
   6033      scheduling pass.  This pass looks at innermost loops and reorders
   6034      their instructions by overlapping different iterations.
   6035 
   6036 `-fmodulo-sched-allow-regmoves'
   6037      Perform more aggressive SMS based modulo scheduling with register
   6038      moves allowed.  By setting this flag certain anti-dependences
   6039      edges will be deleted which will trigger the generation of
   6040      reg-moves based on the life-range analysis.  This option is
   6041      effective only with `-fmodulo-sched' enabled.
   6042 
   6043 `-fno-branch-count-reg'
   6044      Do not use "decrement and branch" instructions on a count register,
   6045      but instead generate a sequence of instructions that decrement a
   6046      register, compare it against zero, then branch based upon the
   6047      result.  This option is only meaningful on architectures that
   6048      support such instructions, which include x86, PowerPC, IA-64 and
   6049      S/390.
   6050 
   6051      The default is `-fbranch-count-reg'.
   6052 
   6053 `-fno-function-cse'
   6054      Do not put function addresses in registers; make each instruction
   6055      that calls a constant function contain the function's address
   6056      explicitly.
   6057 
   6058      This option results in less efficient code, but some strange hacks
   6059      that alter the assembler output may be confused by the
   6060      optimizations performed when this option is not used.
   6061 
   6062      The default is `-ffunction-cse'
   6063 
   6064 `-fno-zero-initialized-in-bss'
   6065      If the target supports a BSS section, GCC by default puts
   6066      variables that are initialized to zero into BSS.  This can save
   6067      space in the resulting code.
   6068 
   6069      This option turns off this behavior because some programs
   6070      explicitly rely on variables going to the data section.  E.g., so
   6071      that the resulting executable can find the beginning of that
   6072      section and/or make assumptions based on that.
   6073 
   6074      The default is `-fzero-initialized-in-bss'.
   6075 
   6076 `-fmudflap -fmudflapth -fmudflapir'
   6077      For front-ends that support it (C and C++), instrument all risky
   6078      pointer/array dereferencing operations, some standard library
   6079      string/heap functions, and some other associated constructs with
   6080      range/validity tests.  Modules so instrumented should be immune to
   6081      buffer overflows, invalid heap use, and some other classes of C/C++
   6082      programming errors.  The instrumentation relies on a separate
   6083      runtime library (`libmudflap'), which will be linked into a
   6084      program if `-fmudflap' is given at link time.  Run-time behavior
   6085      of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
   6086      environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
   6087      its options.
   6088 
   6089      Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
   6090      your program is multi-threaded.  Use `-fmudflapir', in addition to
   6091      `-fmudflap' or `-fmudflapth', if instrumentation should ignore
   6092      pointer reads.  This produces less instrumentation (and therefore
   6093      faster execution) and still provides some protection against
   6094      outright memory corrupting writes, but allows erroneously read
   6095      data to propagate within a program.
   6096 
   6097 `-fthread-jumps'
   6098      Perform optimizations where we check to see if a jump branches to a
   6099      location where another comparison subsumed by the first is found.
   6100      If so, the first branch is redirected to either the destination of
   6101      the second branch or a point immediately following it, depending
   6102      on whether the condition is known to be true or false.
   6103 
   6104      Enabled at levels `-O2', `-O3', `-Os'.
   6105 
   6106 `-fsplit-wide-types'
   6107      When using a type that occupies multiple registers, such as `long
   6108      long' on a 32-bit system, split the registers apart and allocate
   6109      them independently.  This normally generates better code for those
   6110      types, but may make debugging more difficult.
   6111 
   6112      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6113 
   6114 `-fcse-follow-jumps'
   6115      In common subexpression elimination (CSE), scan through jump
   6116      instructions when the target of the jump is not reached by any
   6117      other path.  For example, when CSE encounters an `if' statement
   6118      with an `else' clause, CSE will follow the jump when the condition
   6119      tested is false.
   6120 
   6121      Enabled at levels `-O2', `-O3', `-Os'.
   6122 
   6123 `-fcse-skip-blocks'
   6124      This is similar to `-fcse-follow-jumps', but causes CSE to follow
   6125      jumps which conditionally skip over blocks.  When CSE encounters a
   6126      simple `if' statement with no else clause, `-fcse-skip-blocks'
   6127      causes CSE to follow the jump around the body of the `if'.
   6128 
   6129      Enabled at levels `-O2', `-O3', `-Os'.
   6130 
   6131 `-frerun-cse-after-loop'
   6132      Re-run common subexpression elimination after loop optimizations
   6133      has been performed.
   6134 
   6135      Enabled at levels `-O2', `-O3', `-Os'.
   6136 
   6137 `-fgcse'
   6138      Perform a global common subexpression elimination pass.  This pass
   6139      also performs global constant and copy propagation.
   6140 
   6141      _Note:_ When compiling a program using computed gotos, a GCC
   6142      extension, you may get better runtime performance if you disable
   6143      the global common subexpression elimination pass by adding
   6144      `-fno-gcse' to the command line.
   6145 
   6146      Enabled at levels `-O2', `-O3', `-Os'.
   6147 
   6148 `-fgcse-lm'
   6149      When `-fgcse-lm' is enabled, global common subexpression
   6150      elimination will attempt to move loads which are only killed by
   6151      stores into themselves.  This allows a loop containing a
   6152      load/store sequence to be changed to a load outside the loop, and
   6153      a copy/store within the loop.
   6154 
   6155      Enabled by default when gcse is enabled.
   6156 
   6157 `-fgcse-sm'
   6158      When `-fgcse-sm' is enabled, a store motion pass is run after
   6159      global common subexpression elimination.  This pass will attempt
   6160      to move stores out of loops.  When used in conjunction with
   6161      `-fgcse-lm', loops containing a load/store sequence can be changed
   6162      to a load before the loop and a store after the loop.
   6163 
   6164      Not enabled at any optimization level.
   6165 
   6166 `-fgcse-las'
   6167      When `-fgcse-las' is enabled, the global common subexpression
   6168      elimination pass eliminates redundant loads that come after stores
   6169      to the same memory location (both partial and full redundancies).
   6170 
   6171      Not enabled at any optimization level.
   6172 
   6173 `-fgcse-after-reload'
   6174      When `-fgcse-after-reload' is enabled, a redundant load elimination
   6175      pass is performed after reload.  The purpose of this pass is to
   6176      cleanup redundant spilling.
   6177 
   6178 `-funsafe-loop-optimizations'
   6179      If given, the loop optimizer will assume that loop indices do not
   6180      overflow, and that the loops with nontrivial exit condition are not
   6181      infinite.  This enables a wider range of loop optimizations even if
   6182      the loop optimizer itself cannot prove that these assumptions are
   6183      valid.  Using `-Wunsafe-loop-optimizations', the compiler will
   6184      warn you if it finds this kind of loop.
   6185 
   6186 `-fcrossjumping'
   6187      Perform cross-jumping transformation.  This transformation unifies
   6188      equivalent code and save code size.  The resulting code may or may
   6189      not perform better than without cross-jumping.
   6190 
   6191      Enabled at levels `-O2', `-O3', `-Os'.
   6192 
   6193 `-fauto-inc-dec'
   6194      Combine increments or decrements of addresses with memory accesses.
   6195      This pass is always skipped on architectures that do not have
   6196      instructions to support this.  Enabled by default at `-O' and
   6197      higher on architectures that support this.
   6198 
   6199 `-fdce'
   6200      Perform dead code elimination (DCE) on RTL.  Enabled by default at
   6201      `-O' and higher.
   6202 
   6203 `-fdse'
   6204      Perform dead store elimination (DSE) on RTL.  Enabled by default
   6205      at `-O' and higher.
   6206 
   6207 `-fif-conversion'
   6208      Attempt to transform conditional jumps into branch-less
   6209      equivalents.  This include use of conditional moves, min, max, set
   6210      flags and abs instructions, and some tricks doable by standard
   6211      arithmetics.  The use of conditional execution on chips where it
   6212      is available is controlled by `if-conversion2'.
   6213 
   6214      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6215 
   6216 `-fif-conversion2'
   6217      Use conditional execution (where available) to transform
   6218      conditional jumps into branch-less equivalents.
   6219 
   6220      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6221 
   6222 `-fdelete-null-pointer-checks'
   6223      Assume that programs cannot safely dereference null pointers, and
   6224      that no code or data element resides there.  This enables simple
   6225      constant folding optimizations at all optimization levels.  In
   6226      addition, other optimization passes in GCC use this flag to
   6227      control global dataflow analyses that eliminate useless checks for
   6228      null pointers; these assume that if a pointer is checked after it
   6229      has already been dereferenced, it cannot be null.
   6230 
   6231      Note however that in some environments this assumption is not true.
   6232      Use `-fno-delete-null-pointer-checks' to disable this optimization
   6233      for programs which depend on that behavior.
   6234 
   6235      Some targets, especially embedded ones, disable this option at all
   6236      levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
   6237      `-O2', `-O3', `-Os'.  Passes that use the information are enabled
   6238      independently at different optimization levels.
   6239 
   6240 `-fdevirtualize'
   6241      Attempt to convert calls to virtual functions to direct calls.
   6242      This is done both within a procedure and interprocedurally as part
   6243      of indirect inlining (`-findirect-inlining') and interprocedural
   6244      constant propagation (`-fipa-cp').  Enabled at levels `-O2',
   6245      `-O3', `-Os'.
   6246 
   6247 `-fexpensive-optimizations'
   6248      Perform a number of minor optimizations that are relatively
   6249      expensive.
   6250 
   6251      Enabled at levels `-O2', `-O3', `-Os'.
   6252 
   6253 `-foptimize-register-move'
   6254 `-fregmove'
   6255      Attempt to reassign register numbers in move instructions and as
   6256      operands of other simple instructions in order to maximize the
   6257      amount of register tying.  This is especially helpful on machines
   6258      with two-operand instructions.
   6259 
   6260      Note `-fregmove' and `-foptimize-register-move' are the same
   6261      optimization.
   6262 
   6263      Enabled at levels `-O2', `-O3', `-Os'.
   6264 
   6265 `-fira-algorithm=ALGORITHM'
   6266      Use specified coloring algorithm for the integrated register
   6267      allocator.  The ALGORITHM argument should be `priority' or `CB'.
   6268      The first algorithm specifies Chow's priority coloring, the second
   6269      one specifies Chaitin-Briggs coloring.  The second algorithm can
   6270      be unimplemented for some architectures.  If it is implemented, it
   6271      is the default because Chaitin-Briggs coloring as a rule generates
   6272      a better code.
   6273 
   6274 `-fira-region=REGION'
   6275      Use specified regions for the integrated register allocator.  The
   6276      REGION argument should be one of `all', `mixed', or `one'.  The
   6277      first value means using all loops as register allocation regions,
   6278      the second value which is the default means using all loops except
   6279      for loops with small register pressure as the regions, and third
   6280      one means using all function as a single region.  The first value
   6281      can give best result for machines with small size and irregular
   6282      register set, the third one results in faster and generates decent
   6283      code and the smallest size code, and the default value usually
   6284      give the best results in most cases and for most architectures.
   6285 
   6286 `-fira-loop-pressure'
   6287      Use IRA to evaluate register pressure in loops for decision to move
   6288      loop invariants.  Usage of this option usually results in
   6289      generation of faster and smaller code on machines with big
   6290      register files (>= 32 registers) but it can slow compiler down.
   6291 
   6292      This option is enabled at level `-O3' for some targets.
   6293 
   6294 `-fno-ira-share-save-slots'
   6295      Switch off sharing stack slots used for saving call used hard
   6296      registers living through a call.  Each hard register will get a
   6297      separate stack slot and as a result function stack frame will be
   6298      bigger.
   6299 
   6300 `-fno-ira-share-spill-slots'
   6301      Switch off sharing stack slots allocated for pseudo-registers.
   6302      Each pseudo-register which did not get a hard register will get a
   6303      separate stack slot and as a result function stack frame will be
   6304      bigger.
   6305 
   6306 `-fira-verbose=N'
   6307      Set up how verbose dump file for the integrated register allocator
   6308      will be.  Default value is 5.  If the value is greater or equal to
   6309      10, the dump file will be stderr as if the value were N minus 10.
   6310 
   6311 `-fdelayed-branch'
   6312      If supported for the target machine, attempt to reorder
   6313      instructions to exploit instruction slots available after delayed
   6314      branch instructions.
   6315 
   6316      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   6317 
   6318 `-fschedule-insns'
   6319      If supported for the target machine, attempt to reorder
   6320      instructions to eliminate execution stalls due to required data
   6321      being unavailable.  This helps machines that have slow floating
   6322      point or memory load instructions by allowing other instructions
   6323      to be issued until the result of the load or floating point
   6324      instruction is required.
   6325 
   6326      Enabled at levels `-O2', `-O3'.
   6327 
   6328 `-fschedule-insns2'
   6329      Similar to `-fschedule-insns', but requests an additional pass of
   6330      instruction scheduling after register allocation has been done.
   6331      This is especially useful on machines with a relatively small
   6332      number of registers and where memory load instructions take more
   6333      than one cycle.
   6334 
   6335      Enabled at levels `-O2', `-O3', `-Os'.
   6336 
   6337 `-fno-sched-interblock'
   6338      Don't schedule instructions across basic blocks.  This is normally
   6339      enabled by default when scheduling before register allocation, i.e.
   6340      with `-fschedule-insns' or at `-O2' or higher.
   6341 
   6342 `-fno-sched-spec'
   6343      Don't allow speculative motion of non-load instructions.  This is
   6344      normally enabled by default when scheduling before register
   6345      allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
   6346 
   6347 `-fsched-pressure'
   6348      Enable register pressure sensitive insn scheduling before the
   6349      register allocation.  This only makes sense when scheduling before
   6350      register allocation is enabled, i.e. with `-fschedule-insns' or at
   6351      `-O2' or higher.  Usage of this option can improve the generated
   6352      code and decrease its size by preventing register pressure
   6353      increase above the number of available hard registers and as a
   6354      consequence register spills in the register allocation.
   6355 
   6356 `-fsched-spec-load'
   6357      Allow speculative motion of some load instructions.  This only
   6358      makes sense when scheduling before register allocation, i.e. with
   6359      `-fschedule-insns' or at `-O2' or higher.
   6360 
   6361 `-fsched-spec-load-dangerous'
   6362      Allow speculative motion of more load instructions.  This only
   6363      makes sense when scheduling before register allocation, i.e. with
   6364      `-fschedule-insns' or at `-O2' or higher.
   6365 
   6366 `-fsched-stalled-insns'
   6367 `-fsched-stalled-insns=N'
   6368      Define how many insns (if any) can be moved prematurely from the
   6369      queue of stalled insns into the ready list, during the second
   6370      scheduling pass.  `-fno-sched-stalled-insns' means that no insns
   6371      will be moved prematurely, `-fsched-stalled-insns=0' means there
   6372      is no limit on how many queued insns can be moved prematurely.
   6373      `-fsched-stalled-insns' without a value is equivalent to
   6374      `-fsched-stalled-insns=1'.
   6375 
   6376 `-fsched-stalled-insns-dep'
   6377 `-fsched-stalled-insns-dep=N'
   6378      Define how many insn groups (cycles) will be examined for a
   6379      dependency on a stalled insn that is candidate for premature
   6380      removal from the queue of stalled insns.  This has an effect only
   6381      during the second scheduling pass, and only if
   6382      `-fsched-stalled-insns' is used.  `-fno-sched-stalled-insns-dep'
   6383      is equivalent to `-fsched-stalled-insns-dep=0'.
   6384      `-fsched-stalled-insns-dep' without a value is equivalent to
   6385      `-fsched-stalled-insns-dep=1'.
   6386 
   6387 `-fsched2-use-superblocks'
   6388      When scheduling after register allocation, do use superblock
   6389      scheduling algorithm.  Superblock scheduling allows motion across
   6390      basic block boundaries resulting on faster schedules.  This option
   6391      is experimental, as not all machine descriptions used by GCC model
   6392      the CPU closely enough to avoid unreliable results from the
   6393      algorithm.
   6394 
   6395      This only makes sense when scheduling after register allocation,
   6396      i.e. with `-fschedule-insns2' or at `-O2' or higher.
   6397 
   6398 `-fsched-group-heuristic'
   6399      Enable the group heuristic in the scheduler.  This heuristic favors
   6400      the instruction that belongs to a schedule group.  This is enabled
   6401      by default when scheduling is enabled, i.e. with `-fschedule-insns'
   6402      or `-fschedule-insns2' or at `-O2' or higher.
   6403 
   6404 `-fsched-critical-path-heuristic'
   6405      Enable the critical-path heuristic in the scheduler.  This
   6406      heuristic favors instructions on the critical path.  This is
   6407      enabled by default when scheduling is enabled, i.e. with
   6408      `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
   6409 
   6410 `-fsched-spec-insn-heuristic'
   6411      Enable the speculative instruction heuristic in the scheduler.
   6412      This heuristic favors speculative instructions with greater
   6413      dependency weakness.  This is enabled by default when scheduling
   6414      is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
   6415      or at `-O2' or higher.
   6416 
   6417 `-fsched-rank-heuristic'
   6418      Enable the rank heuristic in the scheduler.  This heuristic favors
   6419      the instruction belonging to a basic block with greater size or
   6420      frequency.  This is enabled by default when scheduling is enabled,
   6421      i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
   6422      or higher.
   6423 
   6424 `-fsched-last-insn-heuristic'
   6425      Enable the last-instruction heuristic in the scheduler.  This
   6426      heuristic favors the instruction that is less dependent on the
   6427      last instruction scheduled.  This is enabled by default when
   6428      scheduling is enabled, i.e. with `-fschedule-insns' or
   6429      `-fschedule-insns2' or at `-O2' or higher.
   6430 
   6431 `-fsched-dep-count-heuristic'
   6432      Enable the dependent-count heuristic in the scheduler.  This
   6433      heuristic favors the instruction that has more instructions
   6434      depending on it.  This is enabled by default when scheduling is
   6435      enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
   6436      at `-O2' or higher.
   6437 
   6438 `-freschedule-modulo-scheduled-loops'
   6439      The modulo scheduling comes before the traditional scheduling, if
   6440      a loop was modulo scheduled we may want to prevent the later
   6441      scheduling passes from changing its schedule, we use this option
   6442      to control that.
   6443 
   6444 `-fselective-scheduling'
   6445      Schedule instructions using selective scheduling algorithm.
   6446      Selective scheduling runs instead of the first scheduler pass.
   6447 
   6448 `-fselective-scheduling2'
   6449      Schedule instructions using selective scheduling algorithm.
   6450      Selective scheduling runs instead of the second scheduler pass.
   6451 
   6452 `-fsel-sched-pipelining'
   6453      Enable software pipelining of innermost loops during selective
   6454      scheduling.  This option has no effect until one of
   6455      `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
   6456 
   6457 `-fsel-sched-pipelining-outer-loops'
   6458      When pipelining loops during selective scheduling, also pipeline
   6459      outer loops.  This option has no effect until
   6460      `-fsel-sched-pipelining' is turned on.
   6461 
   6462 `-fcaller-saves'
   6463      Enable values to be allocated in registers that will be clobbered
   6464      by function calls, by emitting extra instructions to save and
   6465      restore the registers around such calls.  Such allocation is done
   6466      only when it seems to result in better code than would otherwise
   6467      be produced.
   6468 
   6469      This option is always enabled by default on certain machines,
   6470      usually those which have no call-preserved registers to use
   6471      instead.
   6472 
   6473      Enabled at levels `-O2', `-O3', `-Os'.
   6474 
   6475 `-fcombine-stack-adjustments'
   6476      Tracks stack adjustments (pushes and pops) and stack memory
   6477      references and then tries to find ways to combine them.
   6478 
   6479      Enabled by default at `-O1' and higher.
   6480 
   6481 `-fconserve-stack'
   6482      Attempt to minimize stack usage.  The compiler will attempt to use
   6483      less stack space, even if that makes the program slower.  This
   6484      option implies setting the `large-stack-frame' parameter to 100
   6485      and the `large-stack-frame-growth' parameter to 400.
   6486 
   6487 `-ftree-reassoc'
   6488      Perform reassociation on trees.  This flag is enabled by default
   6489      at `-O' and higher.
   6490 
   6491 `-ftree-pre'
   6492      Perform partial redundancy elimination (PRE) on trees.  This flag
   6493      is enabled by default at `-O2' and `-O3'.
   6494 
   6495 `-ftree-forwprop'
   6496      Perform forward propagation on trees.  This flag is enabled by
   6497      default at `-O' and higher.
   6498 
   6499 `-ftree-fre'
   6500      Perform full redundancy elimination (FRE) on trees.  The difference
   6501      between FRE and PRE is that FRE only considers expressions that
   6502      are computed on all paths leading to the redundant computation.
   6503      This analysis is faster than PRE, though it exposes fewer
   6504      redundancies.  This flag is enabled by default at `-O' and higher.
   6505 
   6506 `-ftree-phiprop'
   6507      Perform hoisting of loads from conditional pointers on trees.  This
   6508      pass is enabled by default at `-O' and higher.
   6509 
   6510 `-ftree-copy-prop'
   6511      Perform copy propagation on trees.  This pass eliminates
   6512      unnecessary copy operations.  This flag is enabled by default at
   6513      `-O' and higher.
   6514 
   6515 `-fipa-pure-const'
   6516      Discover which functions are pure or constant.  Enabled by default
   6517      at `-O' and higher.
   6518 
   6519 `-fipa-reference'
   6520      Discover which static variables do not escape cannot escape the
   6521      compilation unit.  Enabled by default at `-O' and higher.
   6522 
   6523 `-fipa-struct-reorg'
   6524      Perform structure reorganization optimization, that change C-like
   6525      structures layout in order to better utilize spatial locality.
   6526      This transformation is affective for programs containing arrays of
   6527      structures.  Available in two compilation modes: profile-based
   6528      (enabled with `-fprofile-generate') or static (which uses built-in
   6529      heuristics).  It works only in whole program mode, so it requires
   6530      `-fwhole-program' to be enabled.  Structures considered `cold' by
   6531      this transformation are not affected (see `--param
   6532      struct-reorg-cold-struct-ratio=VALUE').
   6533 
   6534      With this flag, the program debug info reflects a new structure
   6535      layout.
   6536 
   6537 `-fipa-pta'
   6538      Perform interprocedural pointer analysis and interprocedural
   6539      modification and reference analysis.  This option can cause
   6540      excessive memory and compile-time usage on large compilation
   6541      units.  It is not enabled by default at any optimization level.
   6542 
   6543 `-fipa-profile'
   6544      Perform interprocedural profile propagation.  The functions called
   6545      only from cold functions are marked as cold. Also functions
   6546      executed once (such as `cold', `noreturn', static constructors or
   6547      destructors) are identified. Cold functions and loop less parts of
   6548      functions executed once are then optimized for size.  Enabled by
   6549      default at `-O' and higher.
   6550 
   6551 `-fipa-cp'
   6552      Perform interprocedural constant propagation.  This optimization
   6553      analyzes the program to determine when values passed to functions
   6554      are constants and then optimizes accordingly.  This optimization
   6555      can substantially increase performance if the application has
   6556      constants passed to functions.  This flag is enabled by default at
   6557      `-O2', `-Os' and `-O3'.
   6558 
   6559 `-fipa-cp-clone'
   6560      Perform function cloning to make interprocedural constant
   6561      propagation stronger.  When enabled, interprocedural constant
   6562      propagation will perform function cloning when externally visible
   6563      function can be called with constant arguments.  Because this
   6564      optimization can create multiple copies of functions, it may
   6565      significantly increase code size (see `--param
   6566      ipcp-unit-growth=VALUE').  This flag is enabled by default at
   6567      `-O3'.
   6568 
   6569 `-fipa-matrix-reorg'
   6570      Perform matrix flattening and transposing.  Matrix flattening
   6571      tries to replace an m-dimensional matrix with its equivalent
   6572      n-dimensional matrix, where n < m.  This reduces the level of
   6573      indirection needed for accessing the elements of the matrix. The
   6574      second optimization is matrix transposing that attempts to change
   6575      the order of the matrix's dimensions in order to improve cache
   6576      locality.  Both optimizations need the `-fwhole-program' flag.
   6577      Transposing is enabled only if profiling information is available.
   6578 
   6579 `-ftree-sink'
   6580      Perform forward store motion  on trees.  This flag is enabled by
   6581      default at `-O' and higher.
   6582 
   6583 `-ftree-bit-ccp'
   6584      Perform sparse conditional bit constant propagation on trees and
   6585      propagate pointer alignment information.  This pass only operates
   6586      on local scalar variables and is enabled by default at `-O' and
   6587      higher.  It requires that `-ftree-ccp' is enabled.
   6588 
   6589 `-ftree-ccp'
   6590      Perform sparse conditional constant propagation (CCP) on trees.
   6591      This pass only operates on local scalar variables and is enabled
   6592      by default at `-O' and higher.
   6593 
   6594 `-ftree-switch-conversion'
   6595      Perform conversion of simple initializations in a switch to
   6596      initializations from a scalar array.  This flag is enabled by
   6597      default at `-O2' and higher.
   6598 
   6599 `-ftree-dce'
   6600      Perform dead code elimination (DCE) on trees.  This flag is
   6601      enabled by default at `-O' and higher.
   6602 
   6603 `-ftree-builtin-call-dce'
   6604      Perform conditional dead code elimination (DCE) for calls to
   6605      builtin functions that may set `errno' but are otherwise
   6606      side-effect free.  This flag is enabled by default at `-O2' and
   6607      higher if `-Os' is not also specified.
   6608 
   6609 `-ftree-dominator-opts'
   6610      Perform a variety of simple scalar cleanups (constant/copy
   6611      propagation, redundancy elimination, range propagation and
   6612      expression simplification) based on a dominator tree traversal.
   6613      This also performs jump threading (to reduce jumps to jumps). This
   6614      flag is enabled by default at `-O' and higher.
   6615 
   6616 `-ftree-dse'
   6617      Perform dead store elimination (DSE) on trees.  A dead store is a
   6618      store into a memory location which will later be overwritten by
   6619      another store without any intervening loads.  In this case the
   6620      earlier store can be deleted.  This flag is enabled by default at
   6621      `-O' and higher.
   6622 
   6623 `-ftree-ch'
   6624      Perform loop header copying on trees.  This is beneficial since it
   6625      increases effectiveness of code motion optimizations.  It also
   6626      saves one jump.  This flag is enabled by default at `-O' and
   6627      higher.  It is not enabled for `-Os', since it usually increases
   6628      code size.
   6629 
   6630 `-ftree-loop-optimize'
   6631      Perform loop optimizations on trees.  This flag is enabled by
   6632      default at `-O' and higher.
   6633 
   6634 `-ftree-loop-linear'
   6635      Perform loop interchange transformations on tree.  Same as
   6636      `-floop-interchange'.  To use this code transformation, GCC has to
   6637      be configured with `--with-ppl' and `--with-cloog' to enable the
   6638      Graphite loop transformation infrastructure.
   6639 
   6640 `-floop-interchange'
   6641      Perform loop interchange transformations on loops.  Interchanging
   6642      two nested loops switches the inner and outer loops.  For example,
   6643      given a loop like:
   6644           DO J = 1, M
   6645             DO I = 1, N
   6646               A(J, I) = A(J, I) * C
   6647             ENDDO
   6648           ENDDO
   6649      loop interchange will transform the loop as if the user had
   6650      written:
   6651           DO I = 1, N
   6652             DO J = 1, M
   6653               A(J, I) = A(J, I) * C
   6654             ENDDO
   6655           ENDDO
   6656      which can be beneficial when `N' is larger than the caches,
   6657      because in Fortran, the elements of an array are stored in memory
   6658      contiguously by column, and the original loop iterates over rows,
   6659      potentially creating at each access a cache miss.  This
   6660      optimization applies to all the languages supported by GCC and is
   6661      not limited to Fortran.  To use this code transformation, GCC has
   6662      to be configured with `--with-ppl' and `--with-cloog' to enable the
   6663      Graphite loop transformation infrastructure.
   6664 
   6665 `-floop-strip-mine'
   6666      Perform loop strip mining transformations on loops.  Strip mining
   6667      splits a loop into two nested loops.  The outer loop has strides
   6668      equal to the strip size and the inner loop has strides of the
   6669      original loop within a strip.  The strip length can be changed
   6670      using the `loop-block-tile-size' parameter.  For example, given a
   6671      loop like:
   6672           DO I = 1, N
   6673             A(I) = A(I) + C
   6674           ENDDO
   6675      loop strip mining will transform the loop as if the user had
   6676      written:
   6677           DO II = 1, N, 51
   6678             DO I = II, min (II + 50, N)
   6679               A(I) = A(I) + C
   6680             ENDDO
   6681           ENDDO
   6682      This optimization applies to all the languages supported by GCC
   6683      and is not limited to Fortran.  To use this code transformation,
   6684      GCC has to be configured with `--with-ppl' and `--with-cloog' to
   6685      enable the Graphite loop transformation infrastructure.
   6686 
   6687 `-floop-block'
   6688      Perform loop blocking transformations on loops.  Blocking strip
   6689      mines each loop in the loop nest such that the memory accesses of
   6690      the element loops fit inside caches.  The strip length can be
   6691      changed using the `loop-block-tile-size' parameter.  For example,
   6692      given a loop like:
   6693           DO I = 1, N
   6694             DO J = 1, M
   6695               A(J, I) = B(I) + C(J)
   6696             ENDDO
   6697           ENDDO
   6698      loop blocking will transform the loop as if the user had written:
   6699           DO II = 1, N, 51
   6700             DO JJ = 1, M, 51
   6701               DO I = II, min (II + 50, N)
   6702                 DO J = JJ, min (JJ + 50, M)
   6703                   A(J, I) = B(I) + C(J)
   6704                 ENDDO
   6705               ENDDO
   6706             ENDDO
   6707           ENDDO
   6708      which can be beneficial when `M' is larger than the caches,
   6709      because the innermost loop will iterate over a smaller amount of
   6710      data that can be kept in the caches.  This optimization applies to
   6711      all the languages supported by GCC and is not limited to Fortran.
   6712      To use this code transformation, GCC has to be configured with
   6713      `--with-ppl' and `--with-cloog' to enable the Graphite loop
   6714      transformation infrastructure.
   6715 
   6716 `-fgraphite-identity'
   6717      Enable the identity transformation for graphite.  For every SCoP
   6718      we generate the polyhedral representation and transform it back to
   6719      gimple.  Using `-fgraphite-identity' we can check the costs or
   6720      benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
   6721      minimal optimizations are also performed by the code generator
   6722      CLooG, like index splitting and dead code elimination in loops.
   6723 
   6724 `-floop-flatten'
   6725      Removes the loop nesting structure: transforms the loop nest into a
   6726      single loop.  This transformation can be useful to vectorize all
   6727      the levels of the loop nest.
   6728 
   6729 `-floop-parallelize-all'
   6730      Use the Graphite data dependence analysis to identify loops that
   6731      can be parallelized.  Parallelize all the loops that can be
   6732      analyzed to not contain loop carried dependences without checking
   6733      that it is profitable to parallelize the loops.
   6734 
   6735 `-fcheck-data-deps'
   6736      Compare the results of several data dependence analyzers.  This
   6737      option is used for debugging the data dependence analyzers.
   6738 
   6739 `-ftree-loop-if-convert'
   6740      Attempt to transform conditional jumps in the innermost loops to
   6741      branch-less equivalents.  The intent is to remove control-flow from
   6742      the innermost loops in order to improve the ability of the
   6743      vectorization pass to handle these loops.  This is enabled by
   6744      default if vectorization is enabled.
   6745 
   6746 `-ftree-loop-if-convert-stores'
   6747      Attempt to also if-convert conditional jumps containing memory
   6748      writes.  This transformation can be unsafe for multi-threaded
   6749      programs as it transforms conditional memory writes into
   6750      unconditional memory writes.  For example,
   6751           for (i = 0; i < N; i++)
   6752             if (cond)
   6753               A[i] = expr;
   6754      would be transformed to
   6755           for (i = 0; i < N; i++)
   6756             A[i] = cond ? expr : A[i];
   6757      potentially producing data races.
   6758 
   6759 `-ftree-loop-distribution'
   6760      Perform loop distribution.  This flag can improve cache
   6761      performance on big loop bodies and allow further loop
   6762      optimizations, like parallelization or vectorization, to take
   6763      place.  For example, the loop
   6764           DO I = 1, N
   6765             A(I) = B(I) + C
   6766             D(I) = E(I) * F
   6767           ENDDO
   6768      is transformed to
   6769           DO I = 1, N
   6770              A(I) = B(I) + C
   6771           ENDDO
   6772           DO I = 1, N
   6773              D(I) = E(I) * F
   6774           ENDDO
   6775 
   6776 `-ftree-loop-distribute-patterns'
   6777      Perform loop distribution of patterns that can be code generated
   6778      with calls to a library.  This flag is enabled by default at `-O3'.
   6779 
   6780      This pass distributes the initialization loops and generates a
   6781      call to memset zero.  For example, the loop
   6782           DO I = 1, N
   6783             A(I) = 0
   6784             B(I) = A(I) + I
   6785           ENDDO
   6786      is transformed to
   6787           DO I = 1, N
   6788              A(I) = 0
   6789           ENDDO
   6790           DO I = 1, N
   6791              B(I) = A(I) + I
   6792           ENDDO
   6793      and the initialization loop is transformed into a call to memset
   6794      zero.
   6795 
   6796 `-ftree-loop-im'
   6797      Perform loop invariant motion on trees.  This pass moves only
   6798      invariants that would be hard to handle at RTL level (function
   6799      calls, operations that expand to nontrivial sequences of insns).
   6800      With `-funswitch-loops' it also moves operands of conditions that
   6801      are invariant out of the loop, so that we can use just trivial
   6802      invariantness analysis in loop unswitching.  The pass also includes
   6803      store motion.
   6804 
   6805 `-ftree-loop-ivcanon'
   6806      Create a canonical counter for number of iterations in the loop
   6807      for that determining number of iterations requires complicated
   6808      analysis.  Later optimizations then may determine the number
   6809      easily.  Useful especially in connection with unrolling.
   6810 
   6811 `-fivopts'
   6812      Perform induction variable optimizations (strength reduction,
   6813      induction variable merging and induction variable elimination) on
   6814      trees.
   6815 
   6816 `-ftree-parallelize-loops=n'
   6817      Parallelize loops, i.e., split their iteration space to run in n
   6818      threads.  This is only possible for loops whose iterations are
   6819      independent and can be arbitrarily reordered.  The optimization is
   6820      only profitable on multiprocessor machines, for loops that are
   6821      CPU-intensive, rather than constrained e.g. by memory bandwidth.
   6822      This option implies `-pthread', and thus is only supported on
   6823      targets that have support for `-pthread'.
   6824 
   6825 `-ftree-pta'
   6826      Perform function-local points-to analysis on trees.  This flag is
   6827      enabled by default at `-O' and higher.
   6828 
   6829 `-ftree-sra'
   6830      Perform scalar replacement of aggregates.  This pass replaces
   6831      structure references with scalars to prevent committing structures
   6832      to memory too early.  This flag is enabled by default at `-O' and
   6833      higher.
   6834 
   6835 `-ftree-copyrename'
   6836      Perform copy renaming on trees.  This pass attempts to rename
   6837      compiler temporaries to other variables at copy locations, usually
   6838      resulting in variable names which more closely resemble the
   6839      original variables.  This flag is enabled by default at `-O' and
   6840      higher.
   6841 
   6842 `-ftree-ter'
   6843      Perform temporary expression replacement during the SSA->normal
   6844      phase.  Single use/single def temporaries are replaced at their
   6845      use location with their defining expression.  This results in
   6846      non-GIMPLE code, but gives the expanders much more complex trees
   6847      to work on resulting in better RTL generation.  This is enabled by
   6848      default at `-O' and higher.
   6849 
   6850 `-ftree-vectorize'
   6851      Perform loop vectorization on trees. This flag is enabled by
   6852      default at `-O3'.
   6853 
   6854 `-ftree-slp-vectorize'
   6855      Perform basic block vectorization on trees. This flag is enabled
   6856      by default at `-O3' and when `-ftree-vectorize' is enabled.
   6857 
   6858 `-ftree-vect-loop-version'
   6859      Perform loop versioning when doing loop vectorization on trees.
   6860      When a loop appears to be vectorizable except that data alignment
   6861      or data dependence cannot be determined at compile time then
   6862      vectorized and non-vectorized versions of the loop are generated
   6863      along with runtime checks for alignment or dependence to control
   6864      which version is executed.  This option is enabled by default
   6865      except at level `-Os' where it is disabled.
   6866 
   6867 `-fvect-cost-model'
   6868      Enable cost model for vectorization.
   6869 
   6870 `-ftree-vrp'
   6871      Perform Value Range Propagation on trees.  This is similar to the
   6872      constant propagation pass, but instead of values, ranges of values
   6873      are propagated.  This allows the optimizers to remove unnecessary
   6874      range checks like array bound checks and null pointer checks.
   6875      This is enabled by default at `-O2' and higher.  Null pointer check
   6876      elimination is only done if `-fdelete-null-pointer-checks' is
   6877      enabled.
   6878 
   6879 `-ftracer'
   6880      Perform tail duplication to enlarge superblock size.  This
   6881      transformation simplifies the control flow of the function
   6882      allowing other optimizations to do better job.
   6883 
   6884 `-funroll-loops'
   6885      Unroll loops whose number of iterations can be determined at
   6886      compile time or upon entry to the loop.  `-funroll-loops' implies
   6887      `-frerun-cse-after-loop'.  This option makes code larger, and may
   6888      or may not make it run faster.
   6889 
   6890 `-funroll-all-loops'
   6891      Unroll all loops, even if their number of iterations is uncertain
   6892      when the loop is entered.  This usually makes programs run more
   6893      slowly.  `-funroll-all-loops' implies the same options as
   6894      `-funroll-loops',
   6895 
   6896 `-fsplit-ivs-in-unroller'
   6897      Enables expressing of values of induction variables in later
   6898      iterations of the unrolled loop using the value in the first
   6899      iteration.  This breaks long dependency chains, thus improving
   6900      efficiency of the scheduling passes.
   6901 
   6902      Combination of `-fweb' and CSE is often sufficient to obtain the
   6903      same effect.  However in cases the loop body is more complicated
   6904      than a single basic block, this is not reliable.  It also does not
   6905      work at all on some of the architectures due to restrictions in
   6906      the CSE pass.
   6907 
   6908      This optimization is enabled by default.
   6909 
   6910 `-fvariable-expansion-in-unroller'
   6911      With this option, the compiler will create multiple copies of some
   6912      local variables when unrolling a loop which can result in superior
   6913      code.
   6914 
   6915 `-fpartial-inlining'
   6916      Inline parts of functions.  This option has any effect only when
   6917      inlining itself is turned on by the `-finline-functions' or
   6918      `-finline-small-functions' options.
   6919 
   6920      Enabled at level `-O2'.
   6921 
   6922 `-fpredictive-commoning'
   6923      Perform predictive commoning optimization, i.e., reusing
   6924      computations (especially memory loads and stores) performed in
   6925      previous iterations of loops.
   6926 
   6927      This option is enabled at level `-O3'.
   6928 
   6929 `-fprefetch-loop-arrays'
   6930      If supported by the target machine, generate instructions to
   6931      prefetch memory to improve the performance of loops that access
   6932      large arrays.
   6933 
   6934      This option may generate better or worse code; results are highly
   6935      dependent on the structure of loops within the source code.
   6936 
   6937      Disabled at level `-Os'.
   6938 
   6939 `-fno-peephole'
   6940 `-fno-peephole2'
   6941      Disable any machine-specific peephole optimizations.  The
   6942      difference between `-fno-peephole' and `-fno-peephole2' is in how
   6943      they are implemented in the compiler; some targets use one, some
   6944      use the other, a few use both.
   6945 
   6946      `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
   6947      levels `-O2', `-O3', `-Os'.
   6948 
   6949 `-fno-guess-branch-probability'
   6950      Do not guess branch probabilities using heuristics.
   6951 
   6952      GCC will use heuristics to guess branch probabilities if they are
   6953      not provided by profiling feedback (`-fprofile-arcs').  These
   6954      heuristics are based on the control flow graph.  If some branch
   6955      probabilities are specified by `__builtin_expect', then the
   6956      heuristics will be used to guess branch probabilities for the rest
   6957      of the control flow graph, taking the `__builtin_expect' info into
   6958      account.  The interactions between the heuristics and
   6959      `__builtin_expect' can be complex, and in some cases, it may be
   6960      useful to disable the heuristics so that the effects of
   6961      `__builtin_expect' are easier to understand.
   6962 
   6963      The default is `-fguess-branch-probability' at levels `-O', `-O2',
   6964      `-O3', `-Os'.
   6965 
   6966 `-freorder-blocks'
   6967      Reorder basic blocks in the compiled function in order to reduce
   6968      number of taken branches and improve code locality.
   6969 
   6970      Enabled at levels `-O2', `-O3'.
   6971 
   6972 `-freorder-blocks-and-partition'
   6973      In addition to reordering basic blocks in the compiled function,
   6974      in order to reduce number of taken branches, partitions hot and
   6975      cold basic blocks into separate sections of the assembly and .o
   6976      files, to improve paging and cache locality performance.
   6977 
   6978      This optimization is automatically turned off in the presence of
   6979      exception handling, for linkonce sections, for functions with a
   6980      user-defined section attribute and on any architecture that does
   6981      not support named sections.
   6982 
   6983 `-freorder-functions'
   6984      Reorder functions in the object file in order to improve code
   6985      locality.  This is implemented by using special subsections
   6986      `.text.hot' for most frequently executed functions and
   6987      `.text.unlikely' for unlikely executed functions.  Reordering is
   6988      done by the linker so object file format must support named
   6989      sections and linker must place them in a reasonable way.
   6990 
   6991      Also profile feedback must be available in to make this option
   6992      effective.  See `-fprofile-arcs' for details.
   6993 
   6994      Enabled at levels `-O2', `-O3', `-Os'.
   6995 
   6996 `-fstrict-aliasing'
   6997      Allow the compiler to assume the strictest aliasing rules
   6998      applicable to the language being compiled.  For C (and C++), this
   6999      activates optimizations based on the type of expressions.  In
   7000      particular, an object of one type is assumed never to reside at
   7001      the same address as an object of a different type, unless the
   7002      types are almost the same.  For example, an `unsigned int' can
   7003      alias an `int', but not a `void*' or a `double'.  A character type
   7004      may alias any other type.
   7005 
   7006      Pay special attention to code like this:
   7007           union a_union {
   7008             int i;
   7009             double d;
   7010           };
   7011 
   7012           int f() {
   7013             union a_union t;
   7014             t.d = 3.0;
   7015             return t.i;
   7016           }
   7017      The practice of reading from a different union member than the one
   7018      most recently written to (called "type-punning") is common.  Even
   7019      with `-fstrict-aliasing', type-punning is allowed, provided the
   7020      memory is accessed through the union type.  So, the code above
   7021      will work as expected.  *Note Structures unions enumerations and
   7022      bit-fields implementation::.  However, this code might not:
   7023           int f() {
   7024             union a_union t;
   7025             int* ip;
   7026             t.d = 3.0;
   7027             ip = &t.i;
   7028             return *ip;
   7029           }
   7030 
   7031      Similarly, access by taking the address, casting the resulting
   7032      pointer and dereferencing the result has undefined behavior, even
   7033      if the cast uses a union type, e.g.:
   7034           int f() {
   7035             double d = 3.0;
   7036             return ((union a_union *) &d)->i;
   7037           }
   7038 
   7039      The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
   7040      `-Os'.
   7041 
   7042 `-fstrict-overflow'
   7043      Allow the compiler to assume strict signed overflow rules,
   7044      depending on the language being compiled.  For C (and C++) this
   7045      means that overflow when doing arithmetic with signed numbers is
   7046      undefined, which means that the compiler may assume that it will
   7047      not happen.  This permits various optimizations.  For example, the
   7048      compiler will assume that an expression like `i + 10 > i' will
   7049      always be true for signed `i'.  This assumption is only valid if
   7050      signed overflow is undefined, as the expression is false if `i +
   7051      10' overflows when using twos complement arithmetic.  When this
   7052      option is in effect any attempt to determine whether an operation
   7053      on signed numbers will overflow must be written carefully to not
   7054      actually involve overflow.
   7055 
   7056      This option also allows the compiler to assume strict pointer
   7057      semantics: given a pointer to an object, if adding an offset to
   7058      that pointer does not produce a pointer to the same object, the
   7059      addition is undefined.  This permits the compiler to conclude that
   7060      `p + u > p' is always true for a pointer `p' and unsigned integer
   7061      `u'.  This assumption is only valid because pointer wraparound is
   7062      undefined, as the expression is false if `p + u' overflows using
   7063      twos complement arithmetic.
   7064 
   7065      See also the `-fwrapv' option.  Using `-fwrapv' means that integer
   7066      signed overflow is fully defined: it wraps.  When `-fwrapv' is
   7067      used, there is no difference between `-fstrict-overflow' and
   7068      `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
   7069      of overflow are permitted.  For example, if the compiler gets an
   7070      overflow when doing arithmetic on constants, the overflowed value
   7071      can still be used with `-fwrapv', but not otherwise.
   7072 
   7073      The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
   7074      `-Os'.
   7075 
   7076 `-falign-functions'
   7077 `-falign-functions=N'
   7078      Align the start of functions to the next power-of-two greater than
   7079      N, skipping up to N bytes.  For instance, `-falign-functions=32'
   7080      aligns functions to the next 32-byte boundary, but
   7081      `-falign-functions=24' would align to the next 32-byte boundary
   7082      only if this can be done by skipping 23 bytes or less.
   7083 
   7084      `-fno-align-functions' and `-falign-functions=1' are equivalent
   7085      and mean that functions will not be aligned.
   7086 
   7087      Some assemblers only support this flag when N is a power of two;
   7088      in that case, it is rounded up.
   7089 
   7090      If N is not specified or is zero, use a machine-dependent default.
   7091 
   7092      Enabled at levels `-O2', `-O3'.
   7093 
   7094 `-falign-labels'
   7095 `-falign-labels=N'
   7096      Align all branch targets to a power-of-two boundary, skipping up to
   7097      N bytes like `-falign-functions'.  This option can easily make
   7098      code slower, because it must insert dummy operations for when the
   7099      branch target is reached in the usual flow of the code.
   7100 
   7101      `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
   7102      that labels will not be aligned.
   7103 
   7104      If `-falign-loops' or `-falign-jumps' are applicable and are
   7105      greater than this value, then their values are used instead.
   7106 
   7107      If N is not specified or is zero, use a machine-dependent default
   7108      which is very likely to be `1', meaning no alignment.
   7109 
   7110      Enabled at levels `-O2', `-O3'.
   7111 
   7112 `-falign-loops'
   7113 `-falign-loops=N'
   7114      Align loops to a power-of-two boundary, skipping up to N bytes
   7115      like `-falign-functions'.  The hope is that the loop will be
   7116      executed many times, which will make up for any execution of the
   7117      dummy operations.
   7118 
   7119      `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
   7120      that loops will not be aligned.
   7121 
   7122      If N is not specified or is zero, use a machine-dependent default.
   7123 
   7124      Enabled at levels `-O2', `-O3'.
   7125 
   7126 `-falign-jumps'
   7127 `-falign-jumps=N'
   7128      Align branch targets to a power-of-two boundary, for branch targets
   7129      where the targets can only be reached by jumping, skipping up to N
   7130      bytes like `-falign-functions'.  In this case, no dummy operations
   7131      need be executed.
   7132 
   7133      `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
   7134      that loops will not be aligned.
   7135 
   7136      If N is not specified or is zero, use a machine-dependent default.
   7137 
   7138      Enabled at levels `-O2', `-O3'.
   7139 
   7140 `-funit-at-a-time'
   7141      This option is left for compatibility reasons. `-funit-at-a-time'
   7142      has no effect, while `-fno-unit-at-a-time' implies
   7143      `-fno-toplevel-reorder' and `-fno-section-anchors'.
   7144 
   7145      Enabled by default.
   7146 
   7147 `-fno-toplevel-reorder'
   7148      Do not reorder top-level functions, variables, and `asm'
   7149      statements.  Output them in the same order that they appear in the
   7150      input file.  When this option is used, unreferenced static
   7151      variables will not be removed.  This option is intended to support
   7152      existing code which relies on a particular ordering.  For new
   7153      code, it is better to use attributes.
   7154 
   7155      Enabled at level `-O0'.  When disabled explicitly, it also imply
   7156      `-fno-section-anchors' that is otherwise enabled at `-O0' on some
   7157      targets.
   7158 
   7159 `-fweb'
   7160      Constructs webs as commonly used for register allocation purposes
   7161      and assign each web individual pseudo register.  This allows the
   7162      register allocation pass to operate on pseudos directly, but also
   7163      strengthens several other optimization passes, such as CSE, loop
   7164      optimizer and trivial dead code remover.  It can, however, make
   7165      debugging impossible, since variables will no longer stay in a
   7166      "home register".
   7167 
   7168      Enabled by default with `-funroll-loops'.
   7169 
   7170 `-fwhole-program'
   7171      Assume that the current compilation unit represents the whole
   7172      program being compiled.  All public functions and variables with
   7173      the exception of `main' and those merged by attribute
   7174      `externally_visible' become static functions and in effect are
   7175      optimized more aggressively by interprocedural optimizers. If
   7176      `gold' is used as the linker plugin, `externally_visible'
   7177      attributes are automatically added to functions (not variable yet
   7178      due to a current `gold' issue) that are accessed outside of LTO
   7179      objects according to resolution file produced by `gold'.  For
   7180      other linkers that cannot generate resolution file, explicit
   7181      `externally_visible' attributes are still necessary.  While this
   7182      option is equivalent to proper use of the `static' keyword for
   7183      programs consisting of a single file, in combination with option
   7184      `-flto' this flag can be used to compile many smaller scale
   7185      programs since the functions and variables become local for the
   7186      whole combined compilation unit, not for the single source file
   7187      itself.
   7188 
   7189      This option implies `-fwhole-file' for Fortran programs.
   7190 
   7191 `-flto[=N]'
   7192      This option runs the standard link-time optimizer.  When invoked
   7193      with source code, it generates GIMPLE (one of GCC's internal
   7194      representations) and writes it to special ELF sections in the
   7195      object file.  When the object files are linked together, all the
   7196      function bodies are read from these ELF sections and instantiated
   7197      as if they had been part of the same translation unit.
   7198 
   7199      To use the link-time optimizer, `-flto' needs to be specified at
   7200      compile time and during the final link.  For example:
   7201 
   7202           gcc -c -O2 -flto foo.c
   7203           gcc -c -O2 -flto bar.c
   7204           gcc -o myprog -flto -O2 foo.o bar.o
   7205 
   7206      The first two invocations to GCC save a bytecode representation of
   7207      GIMPLE into special ELF sections inside `foo.o' and `bar.o'.  The
   7208      final invocation reads the GIMPLE bytecode from `foo.o' and
   7209      `bar.o', merges the two files into a single internal image, and
   7210      compiles the result as usual.  Since both `foo.o' and `bar.o' are
   7211      merged into a single image, this causes all the interprocedural
   7212      analyses and optimizations in GCC to work across the two files as
   7213      if they were a single one.  This means, for example, that the
   7214      inliner is able to inline functions in `bar.o' into functions in
   7215      `foo.o' and vice-versa.
   7216 
   7217      Another (simpler) way to enable link-time optimization is:
   7218 
   7219           gcc -o myprog -flto -O2 foo.c bar.c
   7220 
   7221      The above generates bytecode for `foo.c' and `bar.c', merges them
   7222      together into a single GIMPLE representation and optimizes them as
   7223      usual to produce `myprog'.
   7224 
   7225      The only important thing to keep in mind is that to enable
   7226      link-time optimizations the `-flto' flag needs to be passed to
   7227      both the compile and the link commands.
   7228 
   7229      To make whole program optimization effective, it is necessary to
   7230      make certain whole program assumptions.  The compiler needs to know
   7231      what functions and variables can be accessed by libraries and
   7232      runtime outside of the link-time optimized unit.  When supported
   7233      by the linker, the linker plugin (see `-fuse-linker-plugin')
   7234      passes information to the compiler about used and externally
   7235      visible symbols.  When the linker plugin is not available,
   7236      `-fwhole-program' should be used to allow the compiler to make
   7237      these assumptions, which leads to more aggressive optimization
   7238      decisions.
   7239 
   7240      Note that when a file is compiled with `-flto', the generated
   7241      object file is larger than a regular object file because it
   7242      contains GIMPLE bytecodes and the usual final code.  This means
   7243      that object files with LTO information can be linked as normal
   7244      object files; if `-flto' is not passed to the linker, no
   7245      interprocedural optimizations are applied.
   7246 
   7247      Additionally, the optimization flags used to compile individual
   7248      files are not necessarily related to those used at link time.  For
   7249      instance,
   7250 
   7251           gcc -c -O0 -flto foo.c
   7252           gcc -c -O0 -flto bar.c
   7253           gcc -o myprog -flto -O3 foo.o bar.o
   7254 
   7255      This produces individual object files with unoptimized assembler
   7256      code, but the resulting binary `myprog' is optimized at `-O3'.
   7257      If, instead, the final binary is generated without `-flto', then
   7258      `myprog' is not optimized.
   7259 
   7260      When producing the final binary with `-flto', GCC only applies
   7261      link-time optimizations to those files that contain bytecode.
   7262      Therefore, you can mix and match object files and libraries with
   7263      GIMPLE bytecodes and final object code.  GCC automatically selects
   7264      which files to optimize in LTO mode and which files to link without
   7265      further processing.
   7266 
   7267      There are some code generation flags that GCC preserves when
   7268      generating bytecodes, as they need to be used during the final link
   7269      stage.  Currently, the following options are saved into the GIMPLE
   7270      bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags.
   7271 
   7272      At link time, these options are read in and reapplied.  Note that
   7273      the current implementation makes no attempt to recognize
   7274      conflicting values for these options.  If different files have
   7275      conflicting option values (e.g., one file is compiled with `-fPIC'
   7276      and another isn't), the compiler simply uses the last value read
   7277      from the bytecode files.  It is recommended, then, that you
   7278      compile all the files participating in the same link with the same
   7279      options.
   7280 
   7281      If LTO encounters objects with C linkage declared with incompatible
   7282      types in separate translation units to be linked together
   7283      (undefined behavior according to ISO C99 6.2.7), a non-fatal
   7284      diagnostic may be issued.  The behavior is still undefined at
   7285      runtime.
   7286 
   7287      Another feature of LTO is that it is possible to apply
   7288      interprocedural optimizations on files written in different
   7289      languages.  This requires support in the language front end.
   7290      Currently, the C, C++ and Fortran front ends are capable of
   7291      emitting GIMPLE bytecodes, so something like this should work:
   7292 
   7293           gcc -c -flto foo.c
   7294           g++ -c -flto bar.cc
   7295           gfortran -c -flto baz.f90
   7296           g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
   7297 
   7298      Notice that the final link is done with `g++' to get the C++
   7299      runtime libraries and `-lgfortran' is added to get the Fortran
   7300      runtime libraries.  In general, when mixing languages in LTO mode,
   7301      you should use the same link command options as when mixing
   7302      languages in a regular (non-LTO) compilation; all you need to add
   7303      is `-flto' to all the compile and link commands.
   7304 
   7305      If object files containing GIMPLE bytecode are stored in a library
   7306      archive, say `libfoo.a', it is possible to extract and use them in
   7307      an LTO link if you are using a linker with plugin support.  To
   7308      enable this feature, use the flag `-fuse-linker-plugin' at link
   7309      time:
   7310 
   7311           gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
   7312 
   7313      With the linker plugin enabled, the linker extracts the needed
   7314      GIMPLE files from `libfoo.a' and passes them on to the running GCC
   7315      to make them part of the aggregated GIMPLE image to be optimized.
   7316 
   7317      If you are not using a linker with plugin support and/or do not
   7318      enable the linker plugin, then the objects inside `libfoo.a' are
   7319      extracted and linked as usual, but they do not participate in the
   7320      LTO optimization process.
   7321 
   7322      Link-time optimizations do not require the presence of the whole
   7323      program to operate.  If the program does not require any symbols
   7324      to be exported, it is possible to combine `-flto' and
   7325      `-fwhole-program' to allow the interprocedural optimizers to use
   7326      more aggressive assumptions which may lead to improved
   7327      optimization opportunities.  Use of `-fwhole-program' is not
   7328      needed when linker plugin is active (see `-fuse-linker-plugin').
   7329 
   7330      The current implementation of LTO makes no attempt to generate
   7331      bytecode that is portable between different types of hosts.  The
   7332      bytecode files are versioned and there is a strict version check,
   7333      so bytecode files generated in one version of GCC will not work
   7334      with an older/newer version of GCC.
   7335 
   7336      Link-time optimization does not work well with generation of
   7337      debugging information.  Combining `-flto' with `-g' is currently
   7338      experimental and expected to produce wrong results.
   7339 
   7340      If you specify the optional N, the optimization and code
   7341      generation done at link time is executed in parallel using N
   7342      parallel jobs by utilizing an installed `make' program.  The
   7343      environment variable `MAKE' may be used to override the program
   7344      used.  The default value for N is 1.
   7345 
   7346      You can also specify `-flto=jobserver' to use GNU make's job
   7347      server mode to determine the number of parallel jobs. This is
   7348      useful when the Makefile calling GCC is already executing in
   7349      parallel.  You must prepend a `+' to the command recipe in the
   7350      parent Makefile for this to work.  This option likely only works
   7351      if `MAKE' is GNU make.
   7352 
   7353      This option is disabled by default.
   7354 
   7355 `-flto-partition=ALG'
   7356      Specify the partitioning algorithm used by the link-time optimizer.
   7357      The value is either `1to1' to specify a partitioning mirroring the
   7358      original source files or `balanced' to specify partitioning into
   7359      equally sized chunks (whenever possible).  Specifying `none' as an
   7360      algorithm disables partitioning and streaming completely. The
   7361      default value is `balanced'.
   7362 
   7363 `-flto-compression-level=N'
   7364      This option specifies the level of compression used for
   7365      intermediate language written to LTO object files, and is only
   7366      meaningful in conjunction with LTO mode (`-flto').  Valid values
   7367      are 0 (no compression) to 9 (maximum compression).  Values outside
   7368      this range are clamped to either 0 or 9.  If the option is not
   7369      given, a default balanced compression setting is used.
   7370 
   7371 `-flto-report'
   7372      Prints a report with internal details on the workings of the
   7373      link-time optimizer.  The contents of this report vary from
   7374      version to version.  It is meant to be useful to GCC developers
   7375      when processing object files in LTO mode (via `-flto').
   7376 
   7377      Disabled by default.
   7378 
   7379 `-fuse-linker-plugin'
   7380      Enables the use of a linker plugin during link-time optimization.
   7381      This option relies on the linker plugin support in linker that is
   7382      available in gold or in GNU ld 2.21 or newer.
   7383 
   7384      This option enables the extraction of object files with GIMPLE
   7385      bytecode out of library archives. This improves the quality of
   7386      optimization by exposing more code to the link-time optimizer.
   7387      This information specifies what symbols can be accessed externally
   7388      (by non-LTO object or during dynamic linking).  Resulting code
   7389      quality improvements on binaries (and shared libraries that use
   7390      hidden visibility) are similar to `-fwhole-program'.  See `-flto'
   7391      for a description of the effect of this flag and how to use it.
   7392 
   7393      This option is enabled by default when LTO support in GCC is
   7394      enabled and GCC was configured for use with a linker supporting
   7395      plugins (GNU ld 2.21 or newer or gold).
   7396 
   7397 `-fcompare-elim'
   7398      After register allocation and post-register allocation instruction
   7399      splitting, identify arithmetic instructions that compute processor
   7400      flags similar to a comparison operation based on that arithmetic.
   7401      If possible, eliminate the explicit comparison operation.
   7402 
   7403      This pass only applies to certain targets that cannot explicitly
   7404      represent the comparison operation before register allocation is
   7405      complete.
   7406 
   7407      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   7408 
   7409 `-fuse-ld=gold'
   7410      Use the `gold' linker instead of the default linker.  This option
   7411      is only necessary if GCC has been configured with `--enable-gold'
   7412      and `--enable-ld=default'.
   7413 
   7414 `-fuse-ld=bfd'
   7415      Use the `ld.bfd' linker instead of the default linker.  This
   7416      option is only necessary if GCC has been configured with
   7417      `--enable-gold' and `--enable-ld'.
   7418 
   7419 `-fcprop-registers'
   7420      After register allocation and post-register allocation instruction
   7421      splitting, we perform a copy-propagation pass to try to reduce
   7422      scheduling dependencies and occasionally eliminate the copy.
   7423 
   7424      Enabled at levels `-O', `-O2', `-O3', `-Os'.
   7425 
   7426 `-fprofile-correction'
   7427      Profiles collected using an instrumented binary for multi-threaded
   7428      programs may be inconsistent due to missed counter updates. When
   7429      this option is specified, GCC will use heuristics to correct or
   7430      smooth out such inconsistencies. By default, GCC will emit an
   7431      error message when an inconsistent profile is detected.
   7432 
   7433 `-fprofile-dir=PATH'
   7434      Set the directory to search for the profile data files in to PATH.
   7435      This option affects only the profile data generated by
   7436      `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
   7437      by `-fprofile-use' and `-fbranch-probabilities' and its related
   7438      options. Both absolute and relative paths can be used.  By
   7439      default, GCC will use the current directory as PATH, thus the
   7440      profile data file will appear in the same directory as the object
   7441      file.
   7442 
   7443 `-fprofile-generate'
   7444 `-fprofile-generate=PATH'
   7445      Enable options usually used for instrumenting application to
   7446      produce profile useful for later recompilation with profile
   7447      feedback based optimization.  You must use `-fprofile-generate'
   7448      both when compiling and when linking your program.
   7449 
   7450      The following options are enabled: `-fprofile-arcs',
   7451      `-fprofile-values', `-fvpt'.
   7452 
   7453      If PATH is specified, GCC will look at the PATH to find the
   7454      profile feedback data files. See `-fprofile-dir'.
   7455 
   7456 `-fprofile-generate-sampling'
   7457      Enable sampling for instrumented binaries.  Instead of recording
   7458      every event, record only every N-th event, where N (the sampling
   7459      rate) can be set either at compile time using `--param
   7460      profile-generate-sampling-rate=VALUE', or at execution start time
   7461      through environment variable `GCOV_SAMPLING_RATE'.
   7462 
   7463      At this time sampling applies only to branch counters.  A sampling
   7464      rate of 100 decreases instrumentated binary slowdown from up to
   7465      20x for heavily threaded applications down to around 2x.
   7466      `-fprofile-correction' is always needed with sampling.
   7467 
   7468 `-fprofile-use'
   7469 `-fprofile-use=PATH'
   7470      Enable profile feedback directed optimizations, and optimizations
   7471      generally profitable only with profile feedback available.
   7472 
   7473      The following options are enabled: `-fbranch-probabilities',
   7474      `-fvpt', `-funroll-loops', `-fpeel-loops'.
   7475 
   7476      By default, GCC emits an error message if the feedback profiles do
   7477      not match the source code.  This error can be turned into a
   7478      warning by using `-Wcoverage-mismatch'.  Note this may result in
   7479      poorly optimized code.
   7480 
   7481      If PATH is specified, GCC will look at the PATH to find the
   7482      profile feedback data files. See `-fprofile-dir'.
   7483 
   7484 `-fpmu-profile-generate=PMUOPTION'
   7485      Enable performance monitoring unit (PMU) profiling.  This collects
   7486      hardware counter data corresponding to PMUOPTION.  Currently only
   7487      LOAD-LATENCY and BRANCH-MISPREDICT are supported using pfmon tool.
   7488      You must use `-fpmu-profile-generate' both when compiling and when
   7489      linking your program.  This PMU profile data may later be used by
   7490      the compiler during optimizations as well can be displayed using
   7491      coverage tool gcov. The params variable "pmu_profile_n_addresses"
   7492      can be used to restrict PMU data collection to only this many
   7493      addresses.
   7494 
   7495 `-fpmu-profile-use=PMUOPTION'
   7496      Enable performance monitoring unit (PMU) profiling based
   7497      optimizations.  Currently only LOAD-LATENCY and BRANCH-MISPREDICT
   7498      are supported.
   7499 
   7500 `-fripa'
   7501      Perform dynamic inter-procedural analysis. This is used in
   7502      conjunction with the `-fprofile-generate' and `-fprofile-use'
   7503      options.  During the `-fprofile-generate' phase, this flag turns
   7504      on some additional instrumentation code that enables dynamic
   7505      call-graph analysis.  During the `-fprofile-use' phase, this flag
   7506      enables cross-module optimizations such as inlining.
   7507 
   7508 `-fripa-disallow-asm-modules'
   7509      During profile-gen, if this flag is enabled, and the module has
   7510      asm statements, arrange so that a bit recording this information
   7511      will be set in the profile feedback data file.  During
   7512      profile-use, if this flag is enabled, and the same bit in auxiliary
   7513      module's profile feedback data is set, don't import this auxiliary
   7514      module.  If this is the primary module, don't export it.
   7515 
   7516 `-fripa-disallow-opt-mismatch'
   7517      Don't import an auxiliary module, if the GCC command line options
   7518      used for this auxiliary module during the profile-generate stage
   7519      were different from those used for the primary module. Note that
   7520      any mismatches in warning-related options are ignored for this
   7521      comparison.
   7522 
   7523 `-fripa-no-promote-always-inline-func'
   7524      Do not promote static functions with always inline attribute in
   7525      LIPO compilation.
   7526 
   7527 `-fripa-verbose'
   7528      Enable printing of verbose information about dynamic
   7529      inter-procedural optimizations.  This is used in conjunction with
   7530      the `-fripa'.
   7531 
   7532 `-fripa-peel-size-limit'
   7533      Limit loop peeling of non-const non-FP loops in a LIPO compilation
   7534      under estimates of a large code footprint. Enabled by default
   7535      under `-fripa'. Code size estimation and thresholds are controlled
   7536      by the `codesize-hotness-threshold' and
   7537      `unrollpeel-codesize-threshold' parameters.
   7538 
   7539 `-fripa-unroll-size-limit'
   7540      Limit loop unrolling of non-const non-FP loops in a LIPO
   7541      compilation under estimates of a large code footprint. Enabled by
   7542      default under `-fripa'. Code size estimation and thresholds are
   7543      controlled by the `codesize-hotness-threshold' and
   7544      `unrollpeel-codesize-threshold' parameters.
   7545 
   7546 `-fcallgraph-profiles-sections'
   7547      Emit call graph edge profile counts in .note.callgraph.text
   7548      sections. This is used in conjunction with `-fprofile-use'. A new
   7549      .note.callgraph.text section is created for each function. This
   7550      section lists every callee and the number of times it is called.
   7551      The params variable "note-cgraph-section-edge-threshold" can be
   7552      used to only list edges above a certain threshold.
   7553 
   7554 `-frecord-gcc-switches-in-elf'
   7555      Record the command line options in the .gnu.switches.text elf
   7556      section for sample based LIPO to do module grouping.
   7557 
   7558  The following options control compiler behavior regarding floating
   7559 point arithmetic.  These options trade off between speed and
   7560 correctness.  All must be specifically enabled.
   7561 
   7562 `-ffloat-store'
   7563      Do not store floating point variables in registers, and inhibit
   7564      other options that might change whether a floating point value is
   7565      taken from a register or memory.
   7566 
   7567      This option prevents undesirable excess precision on machines such
   7568      as the 68000 where the floating registers (of the 68881) keep more
   7569      precision than a `double' is supposed to have.  Similarly for the
   7570      x86 architecture.  For most programs, the excess precision does
   7571      only good, but a few programs rely on the precise definition of
   7572      IEEE floating point.  Use `-ffloat-store' for such programs, after
   7573      modifying them to store all pertinent intermediate computations
   7574      into variables.
   7575 
   7576 `-fexcess-precision=STYLE'
   7577      This option allows further control over excess precision on
   7578      machines where floating-point registers have more precision than
   7579      the IEEE `float' and `double' types and the processor does not
   7580      support operations rounding to those types.  By default,
   7581      `-fexcess-precision=fast' is in effect; this means that operations
   7582      are carried out in the precision of the registers and that it is
   7583      unpredictable when rounding to the types specified in the source
   7584      code takes place.  When compiling C, if
   7585      `-fexcess-precision=standard' is specified then excess precision
   7586      will follow the rules specified in ISO C99; in particular, both
   7587      casts and assignments cause values to be rounded to their semantic
   7588      types (whereas `-ffloat-store' only affects assignments).  This
   7589      option is enabled by default for C if a strict conformance option
   7590      such as `-std=c99' is used.
   7591 
   7592      `-fexcess-precision=standard' is not implemented for languages
   7593      other than C, and has no effect if `-funsafe-math-optimizations'
   7594      or `-ffast-math' is specified.  On the x86, it also has no effect
   7595      if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
   7596      former case, IEEE semantics apply without excess precision, and in
   7597      the latter, rounding is unpredictable.
   7598 
   7599 `-ffast-math'
   7600      Sets `-fno-math-errno', `-funsafe-math-optimizations',
   7601      `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
   7602      and `-fcx-limited-range'.
   7603 
   7604      This option causes the preprocessor macro `__FAST_MATH__' to be
   7605      defined.
   7606 
   7607      This option is not turned on by any `-O' option besides `-Ofast'
   7608      since it can result in incorrect output for programs which depend
   7609      on an exact implementation of IEEE or ISO rules/specifications for
   7610      math functions. It may, however, yield faster code for programs
   7611      that do not require the guarantees of these specifications.
   7612 
   7613 `-fno-math-errno'
   7614      Do not set ERRNO after calling math functions that are executed
   7615      with a single instruction, e.g., sqrt.  A program that relies on
   7616      IEEE exceptions for math error handling may want to use this flag
   7617      for speed while maintaining IEEE arithmetic compatibility.
   7618 
   7619      This option is not turned on by any `-O' option since it can
   7620      result in incorrect output for programs which depend on an exact
   7621      implementation of IEEE or ISO rules/specifications for math
   7622      functions. It may, however, yield faster code for programs that do
   7623      not require the guarantees of these specifications.
   7624 
   7625      The default is `-fmath-errno'.
   7626 
   7627      On Darwin systems, the math library never sets `errno'.  There is
   7628      therefore no reason for the compiler to consider the possibility
   7629      that it might, and `-fno-math-errno' is the default.
   7630 
   7631 `-funsafe-math-optimizations'
   7632      Allow optimizations for floating-point arithmetic that (a) assume
   7633      that arguments and results are valid and (b) may violate IEEE or
   7634      ANSI standards.  When used at link-time, it may include libraries
   7635      or startup files that change the default FPU control word or other
   7636      similar optimizations.
   7637 
   7638      This option is not turned on by any `-O' option since it can
   7639      result in incorrect output for programs which depend on an exact
   7640      implementation of IEEE or ISO rules/specifications for math
   7641      functions. It may, however, yield faster code for programs that do
   7642      not require the guarantees of these specifications.  Enables
   7643      `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
   7644      and `-freciprocal-math'.
   7645 
   7646      The default is `-fno-unsafe-math-optimizations'.
   7647 
   7648 `-fassociative-math'
   7649      Allow re-association of operands in series of floating-point
   7650      operations.  This violates the ISO C and C++ language standard by
   7651      possibly changing computation result.  NOTE: re-ordering may
   7652      change the sign of zero as well as ignore NaNs and inhibit or
   7653      create underflow or overflow (and thus cannot be used on a code
   7654      which relies on rounding behavior like `(x + 2**52) - 2**52)'.
   7655      May also reorder floating-point comparisons and thus may not be
   7656      used when ordered comparisons are required.  This option requires
   7657      that both `-fno-signed-zeros' and `-fno-trapping-math' be in
   7658      effect.  Moreover, it doesn't make much sense with
   7659      `-frounding-math'. For Fortran the option is automatically enabled
   7660      when both `-fno-signed-zeros' and `-fno-trapping-math' are in
   7661      effect.
   7662 
   7663      The default is `-fno-associative-math'.
   7664 
   7665 `-freciprocal-math'
   7666      Allow the reciprocal of a value to be used instead of dividing by
   7667      the value if this enables optimizations.  For example `x / y' can
   7668      be replaced with `x * (1/y)' which is useful if `(1/y)' is subject
   7669      to common subexpression elimination.  Note that this loses
   7670      precision and increases the number of flops operating on the value.
   7671 
   7672      The default is `-fno-reciprocal-math'.
   7673 
   7674 `-ffinite-math-only'
   7675      Allow optimizations for floating-point arithmetic that assume that
   7676      arguments and results are not NaNs or +-Infs.
   7677 
   7678      This option is not turned on by any `-O' option since it can
   7679      result in incorrect output for programs which depend on an exact
   7680      implementation of IEEE or ISO rules/specifications for math
   7681      functions. It may, however, yield faster code for programs that do
   7682      not require the guarantees of these specifications.
   7683 
   7684      The default is `-fno-finite-math-only'.
   7685 
   7686 `-fno-signed-zeros'
   7687      Allow optimizations for floating point arithmetic that ignore the
   7688      signedness of zero.  IEEE arithmetic specifies the behavior of
   7689      distinct +0.0 and -0.0 values, which then prohibits simplification
   7690      of expressions such as x+0.0 or 0.0*x (even with
   7691      `-ffinite-math-only').  This option implies that the sign of a
   7692      zero result isn't significant.
   7693 
   7694      The default is `-fsigned-zeros'.
   7695 
   7696 `-fno-trapping-math'
   7697      Compile code assuming that floating-point operations cannot
   7698      generate user-visible traps.  These traps include division by
   7699      zero, overflow, underflow, inexact result and invalid operation.
   7700      This option requires that `-fno-signaling-nans' be in effect.
   7701      Setting this option may allow faster code if one relies on
   7702      "non-stop" IEEE arithmetic, for example.
   7703 
   7704      This option should never be turned on by any `-O' option since it
   7705      can result in incorrect output for programs which depend on an
   7706      exact implementation of IEEE or ISO rules/specifications for math
   7707      functions.
   7708 
   7709      The default is `-ftrapping-math'.
   7710 
   7711 `-frounding-math'
   7712      Disable transformations and optimizations that assume default
   7713      floating point rounding behavior.  This is round-to-zero for all
   7714      floating point to integer conversions, and round-to-nearest for
   7715      all other arithmetic truncations.  This option should be specified
   7716      for programs that change the FP rounding mode dynamically, or that
   7717      may be executed with a non-default rounding mode.  This option
   7718      disables constant folding of floating point expressions at
   7719      compile-time (which may be affected by rounding mode) and
   7720      arithmetic transformations that are unsafe in the presence of
   7721      sign-dependent rounding modes.
   7722 
   7723      The default is `-fno-rounding-math'.
   7724 
   7725      This option is experimental and does not currently guarantee to
   7726      disable all GCC optimizations that are affected by rounding mode.
   7727      Future versions of GCC may provide finer control of this setting
   7728      using C99's `FENV_ACCESS' pragma.  This command line option will
   7729      be used to specify the default state for `FENV_ACCESS'.
   7730 
   7731 `-fsignaling-nans'
   7732      Compile code assuming that IEEE signaling NaNs may generate
   7733      user-visible traps during floating-point operations.  Setting this
   7734      option disables optimizations that may change the number of
   7735      exceptions visible with signaling NaNs.  This option implies
   7736      `-ftrapping-math'.
   7737 
   7738      This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
   7739      defined.
   7740 
   7741      The default is `-fno-signaling-nans'.
   7742 
   7743      This option is experimental and does not currently guarantee to
   7744      disable all GCC optimizations that affect signaling NaN behavior.
   7745 
   7746 `-fsingle-precision-constant'
   7747      Treat floating point constant as single precision constant instead
   7748      of implicitly converting it to double precision constant.
   7749 
   7750 `-fcx-limited-range'
   7751      When enabled, this option states that a range reduction step is not
   7752      needed when performing complex division.  Also, there is no
   7753      checking whether the result of a complex multiplication or
   7754      division is `NaN + I*NaN', with an attempt to rescue the situation
   7755      in that case.  The default is `-fno-cx-limited-range', but is
   7756      enabled by `-ffast-math'.
   7757 
   7758      This option controls the default setting of the ISO C99
   7759      `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
   7760      all languages.
   7761 
   7762 `-fcx-fortran-rules'
   7763      Complex multiplication and division follow Fortran rules.  Range
   7764      reduction is done as part of complex division, but there is no
   7765      checking whether the result of a complex multiplication or
   7766      division is `NaN + I*NaN', with an attempt to rescue the situation
   7767      in that case.
   7768 
   7769      The default is `-fno-cx-fortran-rules'.
   7770 
   7771 `min-mcf-cancel-iters'
   7772      The minimum number of iterations of negative cycle cancellation
   7773      during MCF profile correction before early termination.  This
   7774      parameter is only useful when using `-fprofile-correction'.
   7775 
   7776 
   7777  The following options control optimizations that may improve
   7778 performance, but are not enabled by any `-O' options.  This section
   7779 includes experimental options that may produce broken code.
   7780 
   7781 `-fbranch-probabilities'
   7782      After running a program compiled with `-fprofile-arcs' (*note
   7783      Options for Debugging Your Program or `gcc': Debugging Options.),
   7784      you can compile it a second time using `-fbranch-probabilities',
   7785      to improve optimizations based on the number of times each branch
   7786      was taken.  When the program compiled with `-fprofile-arcs' exits
   7787      it saves arc execution counts to a file called `SOURCENAME.gcda'
   7788      for each source file.  The information in this data file is very
   7789      dependent on the structure of the generated code, so you must use
   7790      the same source code and the same optimization options for both
   7791      compilations.
   7792 
   7793      With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
   7794      each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
   7795      optimization.  Currently, they are only used in one place: in
   7796      `reorg.c', instead of guessing which path a branch is most likely
   7797      to take, the `REG_BR_PROB' values are used to exactly determine
   7798      which path is taken more often.
   7799 
   7800 `-fclone-hot-version-paths'
   7801      When multi-version calls are made using `__builtin_dispatch', this
   7802      flag enables cloning and hoisting of hot multiversioned paths.
   7803 
   7804 `-fprofile-values'
   7805      If combined with `-fprofile-arcs', it adds code so that some data
   7806      about values of expressions in the program is gathered.
   7807 
   7808      With `-fbranch-probabilities', it reads back the data gathered
   7809      from profiling values of expressions for usage in optimizations.
   7810 
   7811      Enabled with `-fprofile-generate' and `-fprofile-use'.
   7812 
   7813 `-fvpt'
   7814      If combined with `-fprofile-arcs', it instructs the compiler to add
   7815      a code to gather information about values of expressions.
   7816 
   7817      With `-fbranch-probabilities', it reads back the data gathered and
   7818      actually performs the optimizations based on them.  Currently the
   7819      optimizations include specialization of division operation using
   7820      the knowledge about the value of the denominator.
   7821 
   7822 `-frename-registers'
   7823      Attempt to avoid false dependencies in scheduled code by making use
   7824      of registers left over after register allocation.  This
   7825      optimization will most benefit processors with lots of registers.
   7826      Depending on the debug information format adopted by the target,
   7827      however, it can make debugging impossible, since variables will no
   7828      longer stay in a "home register".
   7829 
   7830      Enabled by default with `-funroll-loops' and `-fpeel-loops'.
   7831 
   7832 `-ftracer'
   7833      Perform tail duplication to enlarge superblock size.  This
   7834      transformation simplifies the control flow of the function
   7835      allowing other optimizations to do better job.
   7836 
   7837      Enabled with `-fprofile-use'.
   7838 
   7839 `-funroll-loops'
   7840      Unroll loops whose number of iterations can be determined at
   7841      compile time or upon entry to the loop.  `-funroll-loops' implies
   7842      `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
   7843      also turns on complete loop peeling (i.e. complete removal of
   7844      loops with small constant number of iterations).  This option
   7845      makes code larger, and may or may not make it run faster.
   7846 
   7847      Enabled with `-fprofile-use'.
   7848 
   7849 `-funroll-all-loops'
   7850      Unroll all loops, even if their number of iterations is uncertain
   7851      when the loop is entered.  This usually makes programs run more
   7852      slowly.  `-funroll-all-loops' implies the same options as
   7853      `-funroll-loops'.
   7854 
   7855 `-fpeel-loops'
   7856      Peels the loops for that there is enough information that they do
   7857      not roll much (from profile feedback).  It also turns on complete
   7858      loop peeling (i.e. complete removal of loops with small constant
   7859      number of iterations).
   7860 
   7861      Enabled with `-fprofile-use'.
   7862 
   7863 `-fmove-loop-invariants'
   7864      Enables the loop invariant motion pass in the RTL loop optimizer.
   7865      Enabled at level `-O1'
   7866 
   7867 `-funswitch-loops'
   7868      Move branches with loop invariant conditions out of the loop, with
   7869      duplicates of the loop on both branches (modified according to
   7870      result of the condition).
   7871 
   7872 `-ffunction-sections'
   7873 `-fdata-sections'
   7874      Place each function or data item into its own section in the output
   7875      file if the target supports arbitrary sections.  The name of the
   7876      function or the name of the data item determines the section's name
   7877      in the output file.
   7878 
   7879      Use these options on systems where the linker can perform
   7880      optimizations to improve locality of reference in the instruction
   7881      space.  Most systems using the ELF object format and SPARC
   7882      processors running Solaris 2 have linkers with such optimizations.
   7883      AIX may have these optimizations in the future.
   7884 
   7885      Only use these options when there are significant benefits from
   7886      doing so.  When you specify these options, the assembler and
   7887      linker will create larger object and executable files and will
   7888      also be slower.  You will not be able to use `gprof' on all
   7889      systems if you specify this option and you may have problems with
   7890      debugging if you specify both this option and `-g'.
   7891 
   7892 `-fbranch-target-load-optimize'
   7893      Perform branch target register load optimization before prologue /
   7894      epilogue threading.  The use of target registers can typically be
   7895      exposed only during reload, thus hoisting loads out of loops and
   7896      doing inter-block scheduling needs a separate optimization pass.
   7897 
   7898 `-fbranch-target-load-optimize2'
   7899      Perform branch target register load optimization after prologue /
   7900      epilogue threading.
   7901 
   7902 `-fbtr-bb-exclusive'
   7903      When performing branch target register load optimization, don't
   7904      reuse branch target registers in within any basic block.
   7905 
   7906 `-fstack-protector'
   7907      Emit extra code to check for buffer overflows, such as stack
   7908      smashing attacks.  This is done by adding a guard variable to
   7909      functions with vulnerable objects.  This includes functions that
   7910      call alloca, and functions with buffers larger than 8 bytes.  The
   7911      guards are initialized when a function is entered and then checked
   7912      when the function exits.  If a guard check fails, an error message
   7913      is printed and the program exits.
   7914 
   7915 `-fstack-protector-all'
   7916      Like `-fstack-protector' except that all functions are protected.
   7917 
   7918 `-fstack-protector-strong'
   7919      Like `-fstack-protector' but includes additional functions to be
   7920      protected - those that have local array definitions, or have
   7921      references to local frame addresses.
   7922 
   7923 `-fsection-anchors'
   7924      Try to reduce the number of symbolic address calculations by using
   7925      shared "anchor" symbols to address nearby objects.  This
   7926      transformation can help to reduce the number of GOT entries and
   7927      GOT accesses on some targets.
   7928 
   7929      For example, the implementation of the following function `foo':
   7930 
   7931           static int a, b, c;
   7932           int foo (void) { return a + b + c; }
   7933 
   7934      would usually calculate the addresses of all three variables, but
   7935      if you compile it with `-fsection-anchors', it will access the
   7936      variables from a common anchor point instead.  The effect is
   7937      similar to the following pseudocode (which isn't valid C):
   7938 
   7939           int foo (void)
   7940           {
   7941             register int *xr = &x;
   7942             return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
   7943           }
   7944 
   7945      Not all targets support this option.
   7946 
   7947 `--param NAME=VALUE'
   7948      In some places, GCC uses various constants to control the amount of
   7949      optimization that is done.  For example, GCC will not inline
   7950      functions that contain more that a certain number of instructions.
   7951      You can control some of these constants on the command-line using
   7952      the `--param' option.
   7953 
   7954      The names of specific parameters, and the meaning of the values,
   7955      are tied to the internals of the compiler, and are subject to
   7956      change without notice in future releases.
   7957 
   7958      In each case, the VALUE is an integer.  The allowable choices for
   7959      NAME are given in the following table:
   7960 
   7961     `struct-reorg-cold-struct-ratio'
   7962           The threshold ratio (as a percentage) between a structure
   7963           frequency and the frequency of the hottest structure in the
   7964           program.  This parameter is used by struct-reorg optimization
   7965           enabled by `-fipa-struct-reorg'.  We say that if the ratio of
   7966           a structure frequency, calculated by profiling, to the
   7967           hottest structure frequency in the program is less than this
   7968           parameter, then structure reorganization is not applied to
   7969           this structure.  The default is 10.
   7970 
   7971     `predictable-branch-outcome'
   7972           When branch is predicted to be taken with probability lower
   7973           than this threshold (in percent), then it is considered well
   7974           predictable. The default is 10.
   7975 
   7976     `max-crossjump-edges'
   7977           The maximum number of incoming edges to consider for
   7978           crossjumping.  The algorithm used by `-fcrossjumping' is
   7979           O(N^2) in the number of edges incoming to each block.
   7980           Increasing values mean more aggressive optimization, making
   7981           the compile time increase with probably small improvement in
   7982           executable size.
   7983 
   7984     `min-crossjump-insns'
   7985           The minimum number of instructions which must be matched at
   7986           the end of two blocks before crossjumping will be performed
   7987           on them.  This value is ignored in the case where all
   7988           instructions in the block being crossjumped from are matched.
   7989           The default value is 5.
   7990 
   7991     `max-grow-copy-bb-insns'
   7992           The maximum code size expansion factor when copying basic
   7993           blocks instead of jumping.  The expansion is relative to a
   7994           jump instruction.  The default value is 8.
   7995 
   7996     `max-goto-duplication-insns'
   7997           The maximum number of instructions to duplicate to a block
   7998           that jumps to a computed goto.  To avoid O(N^2) behavior in a
   7999           number of passes, GCC factors computed gotos early in the
   8000           compilation process, and unfactors them as late as possible.
   8001           Only computed jumps at the end of a basic blocks with no more
   8002           than max-goto-duplication-insns are unfactored.  The default
   8003           value is 8.
   8004 
   8005     `max-delay-slot-insn-search'
   8006           The maximum number of instructions to consider when looking
   8007           for an instruction to fill a delay slot.  If more than this
   8008           arbitrary number of instructions is searched, the time
   8009           savings from filling the delay slot will be minimal so stop
   8010           searching.  Increasing values mean more aggressive
   8011           optimization, making the compile time increase with probably
   8012           small improvement in executable run time.
   8013 
   8014     `max-delay-slot-live-search'
   8015           When trying to fill delay slots, the maximum number of
   8016           instructions to consider when searching for a block with
   8017           valid live register information.  Increasing this arbitrarily
   8018           chosen value means more aggressive optimization, increasing
   8019           the compile time.  This parameter should be removed when the
   8020           delay slot code is rewritten to maintain the control-flow
   8021           graph.
   8022 
   8023     `max-gcse-memory'
   8024           The approximate maximum amount of memory that will be
   8025           allocated in order to perform the global common subexpression
   8026           elimination optimization.  If more memory than specified is
   8027           required, the optimization will not be done.
   8028 
   8029     `max-gcse-insertion-ratio'
   8030           If the ratio of expression insertions to deletions is larger
   8031           than this value for any expression, then RTL PRE will insert
   8032           or remove the expression and thus leave partially redundant
   8033           computations in the instruction stream.  The default value is
   8034           20.
   8035 
   8036     `max-pending-list-length'
   8037           The maximum number of pending dependencies scheduling will
   8038           allow before flushing the current state and starting over.
   8039           Large functions with few branches or calls can create
   8040           excessively large lists which needlessly consume memory and
   8041           resources.
   8042 
   8043     `max-inline-insns-single'
   8044           Several parameters control the tree inliner used in gcc.
   8045           This number sets the maximum number of instructions (counted
   8046           in GCC's internal representation) in a single function that
   8047           the tree inliner will consider for inlining.  This only
   8048           affects functions declared inline and methods implemented in
   8049           a class declaration (C++).  The default value is 400.
   8050 
   8051     `max-inline-insns-auto'
   8052           When you use `-finline-functions' (included in `-O3'), a lot
   8053           of functions that would otherwise not be considered for
   8054           inlining by the compiler will be investigated.  To those
   8055           functions, a different (more restrictive) limit compared to
   8056           functions declared inline can be applied.  The default value
   8057           is 40.
   8058 
   8059     `mversn-clone-depth'
   8060           When using `-fclone-hot-version-paths', hot function paths
   8061           are multi- versioned via cloning.  This parameter specifies
   8062           the maximum length of the call graph path that can be cloned.
   8063           The default value is 2.
   8064 
   8065     `num-mversn-clones'
   8066           When using `-fclone-hot-version-paths', hot function paths
   8067           are multi- versioned via cloning.  This parameter specifies
   8068           the maximum number of functions that can be cloned. The
   8069           default value is 10.
   8070 
   8071     `large-function-insns'
   8072           The limit specifying really large functions.  For functions
   8073           larger than this limit after inlining, inlining is
   8074           constrained by `--param large-function-growth'.  This
   8075           parameter is useful primarily to avoid extreme compilation
   8076           time caused by non-linear algorithms used by the backend.
   8077           The default value is 2700.
   8078 
   8079     `large-function-growth'
   8080           Specifies maximal growth of large function caused by inlining
   8081           in percents.  The default value is 100 which limits large
   8082           function growth to 2.0 times the original size.
   8083 
   8084     `large-unit-insns'
   8085           The limit specifying large translation unit.  Growth caused
   8086           by inlining of units larger than this limit is limited by
   8087           `--param inline-unit-growth'.  For small units this might be
   8088           too tight (consider unit consisting of function A that is
   8089           inline and B that just calls A three time.  If B is small
   8090           relative to A, the growth of unit is 300\% and yet such
   8091           inlining is very sane.  For very large units consisting of
   8092           small inlineable functions however the overall unit growth
   8093           limit is needed to avoid exponential explosion of code size.
   8094           Thus for smaller units, the size is increased to `--param
   8095           large-unit-insns' before applying `--param
   8096           inline-unit-growth'.  The default is 10000
   8097 
   8098     `inline-unit-growth'
   8099           Specifies maximal overall growth of the compilation unit
   8100           caused by inlining.  The default value is 30 which limits
   8101           unit growth to 1.3 times the original size.
   8102 
   8103     `ipcp-unit-growth'
   8104           Specifies maximal overall growth of the compilation unit
   8105           caused by interprocedural constant propagation.  The default
   8106           value is 10 which limits unit growth to 1.1 times the
   8107           original size.
   8108 
   8109     `large-stack-frame'
   8110           The limit specifying large stack frames.  While inlining the
   8111           algorithm is trying to not grow past this limit too much.
   8112           Default value is 256 bytes.
   8113 
   8114     `large-stack-frame-growth'
   8115           Specifies maximal growth of large stack frames caused by
   8116           inlining in percents.  The default value is 1000 which limits
   8117           large stack frame growth to 11 times the original size.
   8118 
   8119     `max-inline-insns-recursive'
   8120     `max-inline-insns-recursive-auto'
   8121           Specifies maximum number of instructions out-of-line copy of
   8122           self recursive inline function can grow into by performing
   8123           recursive inlining.
   8124 
   8125           For functions declared inline `--param
   8126           max-inline-insns-recursive' is taken into account.  For
   8127           function not declared inline, recursive inlining happens only
   8128           when `-finline-functions' (included in `-O3') is enabled and
   8129           `--param max-inline-insns-recursive-auto' is used.  The
   8130           default value is 450.
   8131 
   8132     `max-inline-recursive-depth'
   8133     `max-inline-recursive-depth-auto'
   8134           Specifies maximum recursion depth used by the recursive
   8135           inlining.
   8136 
   8137           For functions declared inline `--param
   8138           max-inline-recursive-depth' is taken into account.  For
   8139           function not declared inline, recursive inlining happens only
   8140           when `-finline-functions' (included in `-O3') is enabled and
   8141           `--param max-inline-recursive-depth-auto' is used.  The
   8142           default value is 8.
   8143 
   8144     `min-inline-recursive-probability'
   8145           Recursive inlining is profitable only for function having
   8146           deep recursion in average and can hurt for function having
   8147           little recursion depth by increasing the prologue size or
   8148           complexity of function body to other optimizers.
   8149 
   8150           When profile feedback is available (see `-fprofile-generate')
   8151           the actual recursion depth can be guessed from probability
   8152           that function will recurse via given call expression.  This
   8153           parameter limits inlining only to call expression whose
   8154           probability exceeds given threshold (in percents).  The
   8155           default value is 10.
   8156 
   8157     `early-inlining-insns'
   8158           Specify growth that early inliner can make.  In effect it
   8159           increases amount of inlining for code having large
   8160           abstraction penalty.  The default value is 10.
   8161 
   8162     `max-early-inliner-iterations'
   8163     `max-early-inliner-iterations'
   8164           Limit of iterations of early inliner.  This basically bounds
   8165           number of nested indirect calls early inliner can resolve.
   8166           Deeper chains are still handled by late inlining.
   8167 
   8168     `comdat-sharing-probability'
   8169     `comdat-sharing-probability'
   8170           Probability (in percent) that C++ inline function with comdat
   8171           visibility will be shared across multiple compilation units.
   8172           The default value is 20.
   8173 
   8174     `min-vect-loop-bound'
   8175           The minimum number of iterations under which a loop will not
   8176           get vectorized when `-ftree-vectorize' is used.  The number
   8177           of iterations after vectorization needs to be greater than
   8178           the value specified by this option to allow vectorization.
   8179           The default value is 0.
   8180 
   8181     `gcse-cost-distance-ratio'
   8182           Scaling factor in calculation of maximum distance an
   8183           expression can be moved by GCSE optimizations.  This is
   8184           currently supported only in the code hoisting pass.  The
   8185           bigger the ratio, the more aggressive code hoisting will be
   8186           with simple expressions, i.e., the expressions which have cost
   8187           less than `gcse-unrestricted-cost'.  Specifying 0 will disable
   8188           hoisting of simple expressions.  The default value is 10.
   8189 
   8190     `gcse-unrestricted-cost'
   8191           Cost, roughly measured as the cost of a single typical machine
   8192           instruction, at which GCSE optimizations will not constrain
   8193           the distance an expression can travel.  This is currently
   8194           supported only in the code hoisting pass.  The lesser the
   8195           cost, the more aggressive code hoisting will be.  Specifying
   8196           0 will allow all expressions to travel unrestricted distances.
   8197           The default value is 3.
   8198 
   8199     `max-hoist-depth'
   8200           The depth of search in the dominator tree for expressions to
   8201           hoist.  This is used to avoid quadratic behavior in hoisting
   8202           algorithm.  The value of 0 will avoid limiting the search,
   8203           but may slow down compilation of huge functions.  The default
   8204           value is 30.
   8205 
   8206     `max-unrolled-insns'
   8207           The maximum number of instructions that a loop should have if
   8208           that loop is unrolled, and if the loop is unrolled, it
   8209           determines how many times the loop code is unrolled.
   8210 
   8211     `max-average-unrolled-insns'
   8212           The maximum number of instructions biased by probabilities of
   8213           their execution that a loop should have if that loop is
   8214           unrolled, and if the loop is unrolled, it determines how many
   8215           times the loop code is unrolled.
   8216 
   8217     `max-unroll-times'
   8218           The maximum number of unrollings of a single loop.
   8219 
   8220     `max-peeled-insns'
   8221           The maximum number of instructions that a loop should have if
   8222           that loop is peeled, and if the loop is peeled, it determines
   8223           how many times the loop code is peeled.
   8224 
   8225     `max-peel-times'
   8226           The maximum number of peelings of a single loop.
   8227 
   8228     `max-completely-peeled-insns'
   8229           The maximum number of insns of a completely peeled loop.
   8230 
   8231     `max-completely-peeled-insns-feedback'
   8232           The maximum number of insns of a completely peeled loop when
   8233           profile feedback is available and the loop is hot. Because of
   8234           the real profiles, this value may set to be larger for hot
   8235           loops. Its default value is 600.
   8236 
   8237     `max-once-peeled-insns'
   8238           The maximum number of insns of a peeled loop that rolls only
   8239           once.
   8240 
   8241     `max-once-peeled-insns-feedback'
   8242           The maximum number of insns of a peeled loop when profile
   8243           feedback is available and the loop is hot. Because of the
   8244           real profiles, this value may set to be larger for hot loops.
   8245           The default value is 600.
   8246 
   8247     `max-completely-peel-times'
   8248           The maximum number of iterations of a loop to be suitable for
   8249           complete peeling.
   8250 
   8251     `max-completely-peel-times-feedback'
   8252           The maximum number of iterations of a loop to be suitable for
   8253           complete peeling when profile feedback is available and the
   8254           loop is hot. Because of the real profiles, this value may set
   8255           to be larger for hot loops. Its default value is 16.
   8256 
   8257     `max-completely-peel-loop-nest-depth'
   8258           The maximum depth of a loop nest suitable for complete
   8259           peeling.
   8260 
   8261     `codesize-hotness-threshold'
   8262           The minimum profile count of basic blocks to look at when
   8263           estimating the code size footprint of the call graph in a
   8264           LIPO compile.
   8265 
   8266     `unrollpeel-codesize-threshold'
   8267           Maximum LIPO code size footprint estimate for loop unrolling
   8268           and peeling.
   8269 
   8270     `max-unswitch-insns'
   8271           The maximum number of insns of an unswitched loop.
   8272 
   8273     `max-unswitch-level'
   8274           The maximum number of branches unswitched in a single loop.
   8275 
   8276     `lim-expensive'
   8277           The minimum cost of an expensive expression in the loop
   8278           invariant motion.
   8279 
   8280     `iv-consider-all-candidates-bound'
   8281           Bound on number of candidates for induction variables below
   8282           that all candidates are considered for each use in induction
   8283           variable optimizations.  Only the most relevant candidates
   8284           are considered if there are more candidates, to avoid
   8285           quadratic time complexity.
   8286 
   8287     `iv-max-considered-uses'
   8288           The induction variable optimizations give up on loops that
   8289           contain more induction variable uses.
   8290 
   8291     `iv-always-prune-cand-set-bound'
   8292           If number of candidates in the set is smaller than this value,
   8293           we always try to remove unnecessary ivs from the set during
   8294           its optimization when a new iv is added to the set.
   8295 
   8296     `scev-max-expr-size'
   8297           Bound on size of expressions used in the scalar evolutions
   8298           analyzer.  Large expressions slow the analyzer.
   8299 
   8300     `scev-max-expr-complexity'
   8301           Bound on the complexity of the expressions in the scalar
   8302           evolutions analyzer.  Complex expressions slow the analyzer.
   8303 
   8304     `omega-max-vars'
   8305           The maximum number of variables in an Omega constraint system.
   8306           The default value is 128.
   8307 
   8308     `omega-max-geqs'
   8309           The maximum number of inequalities in an Omega constraint
   8310           system.  The default value is 256.
   8311 
   8312     `omega-max-eqs'
   8313           The maximum number of equalities in an Omega constraint
   8314           system.  The default value is 128.
   8315 
   8316     `omega-max-wild-cards'
   8317           The maximum number of wildcard variables that the Omega
   8318           solver will be able to insert.  The default value is 18.
   8319 
   8320     `omega-hash-table-size'
   8321           The size of the hash table in the Omega solver.  The default
   8322           value is 550.
   8323 
   8324     `omega-max-keys'
   8325           The maximal number of keys used by the Omega solver.  The
   8326           default value is 500.
   8327 
   8328     `omega-eliminate-redundant-constraints'
   8329           When set to 1, use expensive methods to eliminate all
   8330           redundant constraints.  The default value is 0.
   8331 
   8332     `vect-max-version-for-alignment-checks'
   8333           The maximum number of runtime checks that can be performed
   8334           when doing loop versioning for alignment in the vectorizer.
   8335           See option ftree-vect-loop-version for more information.
   8336 
   8337     `vect-max-version-for-alias-checks'
   8338           The maximum number of runtime checks that can be performed
   8339           when doing loop versioning for alias in the vectorizer.  See
   8340           option ftree-vect-loop-version for more information.
   8341 
   8342     `max-iterations-to-track'
   8343           The maximum number of iterations of a loop the brute force
   8344           algorithm for analysis of # of iterations of the loop tries
   8345           to evaluate.
   8346 
   8347     `hot-bb-count-fraction'
   8348           Select fraction of the maximal count of repetitions of basic
   8349           block in program given basic block needs to have to be
   8350           considered hot.
   8351 
   8352     `hot-bb-frequency-fraction'
   8353           Select fraction of the entry block frequency of executions of
   8354           basic block in function given basic block needs to have to be
   8355           considered hot
   8356 
   8357     `max-predicted-iterations'
   8358           The maximum number of loop iterations we predict statically.
   8359           This is useful in cases where function contain single loop
   8360           with known bound and other loop with unknown.  We predict the
   8361           known number of iterations correctly, while the unknown
   8362           number of iterations average to roughly 10.  This means that
   8363           the loop without bounds would appear artificially cold
   8364           relative to the other one.
   8365 
   8366     `align-threshold'
   8367           Select fraction of the maximal frequency of executions of
   8368           basic block in function given basic block will get aligned.
   8369 
   8370     `align-loop-iterations'
   8371           A loop expected to iterate at lest the selected number of
   8372           iterations will get aligned.
   8373 
   8374     `tracer-dynamic-coverage'
   8375     `tracer-dynamic-coverage-feedback'
   8376           This value is used to limit superblock formation once the
   8377           given percentage of executed instructions is covered.  This
   8378           limits unnecessary code size expansion.
   8379 
   8380           The `tracer-dynamic-coverage-feedback' is used only when
   8381           profile feedback is available.  The real profiles (as opposed
   8382           to statically estimated ones) are much less balanced allowing
   8383           the threshold to be larger value.
   8384 
   8385     `tracer-max-code-growth'
   8386           Stop tail duplication once code growth has reached given
   8387           percentage.  This is rather hokey argument, as most of the
   8388           duplicates will be eliminated later in cross jumping, so it
   8389           may be set to much higher values than is the desired code
   8390           growth.
   8391 
   8392     `tracer-min-branch-ratio'
   8393           Stop reverse growth when the reverse probability of best edge
   8394           is less than this threshold (in percent).
   8395 
   8396     `tracer-min-branch-ratio'
   8397     `tracer-min-branch-ratio-feedback'
   8398           Stop forward growth if the best edge do have probability
   8399           lower than this threshold.
   8400 
   8401           Similarly to `tracer-dynamic-coverage' two values are
   8402           present, one for compilation for profile feedback and one for
   8403           compilation without.  The value for compilation with profile
   8404           feedback needs to be more conservative (higher) in order to
   8405           make tracer effective.
   8406 
   8407     `max-cse-path-length'
   8408           Maximum number of basic blocks on path that cse considers.
   8409           The default is 10.
   8410 
   8411     `max-cse-insns'
   8412           The maximum instructions CSE process before flushing. The
   8413           default is 1000.
   8414 
   8415     `ggc-min-expand'
   8416           GCC uses a garbage collector to manage its own memory
   8417           allocation.  This parameter specifies the minimum percentage
   8418           by which the garbage collector's heap should be allowed to
   8419           expand between collections.  Tuning this may improve
   8420           compilation speed; it has no effect on code generation.
   8421 
   8422           The default is 30% + 70% * (RAM/1GB) with an upper bound of
   8423           100% when RAM >= 1GB.  If `getrlimit' is available, the
   8424           notion of "RAM" is the smallest of actual RAM and
   8425           `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
   8426           calculate RAM on a particular platform, the lower bound of
   8427           30% is used.  Setting this parameter and `ggc-min-heapsize'
   8428           to zero causes a full collection to occur at every
   8429           opportunity.  This is extremely slow, but can be useful for
   8430           debugging.
   8431 
   8432     `ggc-min-heapsize'
   8433           Minimum size of the garbage collector's heap before it begins
   8434           bothering to collect garbage.  The first collection occurs
   8435           after the heap expands by `ggc-min-expand'% beyond
   8436           `ggc-min-heapsize'.  Again, tuning this may improve
   8437           compilation speed, and has no effect on code generation.
   8438 
   8439           The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
   8440           which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
   8441           exceeded, but with a lower bound of 4096 (four megabytes) and
   8442           an upper bound of 131072 (128 megabytes).  If GCC is not able
   8443           to calculate RAM on a particular platform, the lower bound is
   8444           used.  Setting this parameter very large effectively disables
   8445           garbage collection.  Setting this parameter and
   8446           `ggc-min-expand' to zero causes a full collection to occur at
   8447           every opportunity.
   8448 
   8449     `max-reload-search-insns'
   8450           The maximum number of instruction reload should look backward
   8451           for equivalent register.  Increasing values mean more
   8452           aggressive optimization, making the compile time increase
   8453           with probably slightly better performance.  The default value
   8454           is 100.
   8455 
   8456     `max-cselib-memory-locations'
   8457           The maximum number of memory locations cselib should take
   8458           into account.  Increasing values mean more aggressive
   8459           optimization, making the compile time increase with probably
   8460           slightly better performance.  The default value is 500.
   8461 
   8462     `reorder-blocks-duplicate'
   8463     `reorder-blocks-duplicate-feedback'
   8464           Used by basic block reordering pass to decide whether to use
   8465           unconditional branch or duplicate the code on its
   8466           destination.  Code is duplicated when its estimated size is
   8467           smaller than this value multiplied by the estimated size of
   8468           unconditional jump in the hot spots of the program.
   8469 
   8470           The `reorder-block-duplicate-feedback' is used only when
   8471           profile feedback is available and may be set to higher values
   8472           than `reorder-block-duplicate' since information about the
   8473           hot spots is more accurate.
   8474 
   8475     `max-sched-ready-insns'
   8476           The maximum number of instructions ready to be issued the
   8477           scheduler should consider at any given time during the first
   8478           scheduling pass.  Increasing values mean more thorough
   8479           searches, making the compilation time increase with probably
   8480           little benefit.  The default value is 100.
   8481 
   8482     `max-sched-region-blocks'
   8483           The maximum number of blocks in a region to be considered for
   8484           interblock scheduling.  The default value is 10.
   8485 
   8486     `max-pipeline-region-blocks'
   8487           The maximum number of blocks in a region to be considered for
   8488           pipelining in the selective scheduler.  The default value is
   8489           15.
   8490 
   8491     `max-sched-region-insns'
   8492           The maximum number of insns in a region to be considered for
   8493           interblock scheduling.  The default value is 100.
   8494 
   8495     `max-pipeline-region-insns'
   8496           The maximum number of insns in a region to be considered for
   8497           pipelining in the selective scheduler.  The default value is
   8498           200.
   8499 
   8500     `min-spec-prob'
   8501           The minimum probability (in percents) of reaching a source
   8502           block for interblock speculative scheduling.  The default
   8503           value is 40.
   8504 
   8505     `max-sched-extend-regions-iters'
   8506           The maximum number of iterations through CFG to extend
   8507           regions.  0 - disable region extension, N - do at most N
   8508           iterations.  The default value is 0.
   8509 
   8510     `max-sched-insn-conflict-delay'
   8511           The maximum conflict delay for an insn to be considered for
   8512           speculative motion.  The default value is 3.
   8513 
   8514     `sched-spec-prob-cutoff'
   8515           The minimal probability of speculation success (in percents),
   8516           so that speculative insn will be scheduled.  The default
   8517           value is 40.
   8518 
   8519     `sched-mem-true-dep-cost'
   8520           Minimal distance (in CPU cycles) between store and load
   8521           targeting same memory locations.  The default value is 1.
   8522 
   8523     `selsched-max-lookahead'
   8524           The maximum size of the lookahead window of selective
   8525           scheduling.  It is a depth of search for available
   8526           instructions.  The default value is 50.
   8527 
   8528     `selsched-max-sched-times'
   8529           The maximum number of times that an instruction will be
   8530           scheduled during selective scheduling.  This is the limit on
   8531           the number of iterations through which the instruction may be
   8532           pipelined.  The default value is 2.
   8533 
   8534     `selsched-max-insns-to-rename'
   8535           The maximum number of best instructions in the ready list
   8536           that are considered for renaming in the selective scheduler.
   8537           The default value is 2.
   8538 
   8539     `max-last-value-rtl'
   8540           The maximum size measured as number of RTLs that can be
   8541           recorded in an expression in combiner for a pseudo register
   8542           as last known value of that register.  The default is 10000.
   8543 
   8544     `integer-share-limit'
   8545           Small integer constants can use a shared data structure,
   8546           reducing the compiler's memory usage and increasing its
   8547           speed.  This sets the maximum value of a shared integer
   8548           constant.  The default value is 256.
   8549 
   8550     `min-virtual-mappings'
   8551           Specifies the minimum number of virtual mappings in the
   8552           incremental SSA updater that should be registered to trigger
   8553           the virtual mappings heuristic defined by
   8554           virtual-mappings-ratio.  The default value is 100.
   8555 
   8556     `virtual-mappings-ratio'
   8557           If the number of virtual mappings is virtual-mappings-ratio
   8558           bigger than the number of virtual symbols to be updated, then
   8559           the incremental SSA updater switches to a full update for
   8560           those symbols.  The default ratio is 3.
   8561 
   8562     `ssp-buffer-size'
   8563           The minimum size of buffers (i.e. arrays) that will receive
   8564           stack smashing protection when `-fstack-protection' is used.
   8565 
   8566     `max-jump-thread-duplication-stmts'
   8567           Maximum number of statements allowed in a block that needs to
   8568           be duplicated when threading jumps.
   8569 
   8570     `max-fields-for-field-sensitive'
   8571           Maximum number of fields in a structure we will treat in a
   8572           field sensitive manner during pointer analysis.  The default
   8573           is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3.
   8574 
   8575     `prefetch-latency'
   8576           Estimate on average number of instructions that are executed
   8577           before prefetch finishes.  The distance we prefetch ahead is
   8578           proportional to this constant.  Increasing this number may
   8579           also lead to less streams being prefetched (see
   8580           `simultaneous-prefetches').
   8581 
   8582     `simultaneous-prefetches'
   8583           Maximum number of prefetches that can run at the same time.
   8584 
   8585     `l1-cache-line-size'
   8586           The size of cache line in L1 cache, in bytes.
   8587 
   8588     `l1-cache-size'
   8589           The size of L1 cache, in kilobytes.
   8590 
   8591     `l2-cache-size'
   8592           The size of L2 cache, in kilobytes.
   8593 
   8594     `min-insn-to-prefetch-ratio'
   8595           The minimum ratio between the number of instructions and the
   8596           number of prefetches to enable prefetching in a loop.
   8597 
   8598     `prefetch-min-insn-to-mem-ratio'
   8599           The minimum ratio between the number of instructions and the
   8600           number of memory references to enable prefetching in a loop.
   8601 
   8602     `use-canonical-types'
   8603           Whether the compiler should use the "canonical" type system.
   8604           By default, this should always be 1, which uses a more
   8605           efficient internal mechanism for comparing types in C++ and
   8606           Objective-C++.  However, if bugs in the canonical type system
   8607           are causing compilation failures, set this value to 0 to
   8608           disable canonical types.
   8609 
   8610     `switch-conversion-max-branch-ratio'
   8611           Switch initialization conversion will refuse to create arrays
   8612           that are bigger than `switch-conversion-max-branch-ratio'
   8613           times the number of branches in the switch.
   8614 
   8615     `max-partial-antic-length'
   8616           Maximum length of the partial antic set computed during the
   8617           tree partial redundancy elimination optimization
   8618           (`-ftree-pre') when optimizing at `-O3' and above.  For some
   8619           sorts of source code the enhanced partial redundancy
   8620           elimination optimization can run away, consuming all of the
   8621           memory available on the host machine.  This parameter sets a
   8622           limit on the length of the sets that are computed, which
   8623           prevents the runaway behavior.  Setting a value of 0 for this
   8624           parameter will allow an unlimited set length.
   8625 
   8626     `sccvn-max-scc-size'
   8627           Maximum size of a strongly connected component (SCC) during
   8628           SCCVN processing.  If this limit is hit, SCCVN processing for
   8629           the whole function will not be done and optimizations
   8630           depending on it will be disabled.  The default maximum SCC
   8631           size is 10000.
   8632 
   8633     `ira-max-loops-num'
   8634           IRA uses a regional register allocation by default.  If a
   8635           function contains loops more than number given by the
   8636           parameter, only at most given number of the most frequently
   8637           executed loops will form regions for the regional register
   8638           allocation.  The default value of the parameter is 100.
   8639 
   8640     `ira-max-conflict-table-size'
   8641           Although IRA uses a sophisticated algorithm of compression
   8642           conflict table, the table can be still big for huge
   8643           functions.  If the conflict table for a function could be
   8644           more than size in MB given by the parameter, the conflict
   8645           table is not built and faster, simpler, and lower quality
   8646           register allocation algorithm will be used.  The algorithm do
   8647           not use pseudo-register conflicts.  The default value of the
   8648           parameter is 2000.
   8649 
   8650     `ira-loop-reserved-regs'
   8651           IRA can be used to evaluate more accurate register pressure
   8652           in loops for decision to move loop invariants (see `-O3').
   8653           The number of available registers reserved for some other
   8654           purposes is described by this parameter.  The default value
   8655           of the parameter is 2 which is minimal number of registers
   8656           needed for execution of typical instruction.  This value is
   8657           the best found from numerous experiments.
   8658 
   8659     `loop-invariant-max-bbs-in-loop'
   8660           Loop invariant motion can be very expensive, both in compile
   8661           time and in amount of needed compile time memory, with very
   8662           large loops.  Loops with more basic blocks than this
   8663           parameter won't have loop invariant motion optimization
   8664           performed on them.  The default value of the parameter is
   8665           1000 for -O1 and 10000 for -O2 and above.
   8666 
   8667     `max-vartrack-size'
   8668           Sets a maximum number of hash table slots to use during
   8669           variable tracking dataflow analysis of any function.  If this
   8670           limit is exceeded with variable tracking at assignments
   8671           enabled, analysis for that function is retried without it,
   8672           after removing all debug insns from the function.  If the
   8673           limit is exceeded even without debug insns, var tracking
   8674           analysis is completely disabled for the function.  Setting
   8675           the parameter to zero makes it unlimited.
   8676 
   8677     `min-nondebug-insn-uid'
   8678           Use uids starting at this parameter for nondebug insns.  The
   8679           range below the parameter is reserved exclusively for debug
   8680           insns created by `-fvar-tracking-assignments', but debug
   8681           insns may get (non-overlapping) uids above it if the reserved
   8682           range is exhausted.
   8683 
   8684     `ipa-sra-ptr-growth-factor'
   8685           IPA-SRA will replace a pointer to an aggregate with one or
   8686           more new parameters only when their cumulative size is less
   8687           or equal to `ipa-sra-ptr-growth-factor' times the size of the
   8688           original pointer parameter.
   8689 
   8690     `graphite-max-nb-scop-params'
   8691           To avoid exponential effects in the Graphite loop transforms,
   8692           the number of parameters in a Static Control Part (SCoP) is
   8693           bounded.  The default value is 10 parameters.  A variable
   8694           whose value is unknown at compile time and defined outside a
   8695           SCoP is a parameter of the SCoP.
   8696 
   8697     `graphite-max-bbs-per-function'
   8698           To avoid exponential effects in the detection of SCoPs, the
   8699           size of the functions analyzed by Graphite is bounded.  The
   8700           default value is 100 basic blocks.
   8701 
   8702     `loop-block-tile-size'
   8703           Loop blocking or strip mining transforms, enabled with
   8704           `-floop-block' or `-floop-strip-mine', strip mine each loop
   8705           in the loop nest by a given number of iterations.  The strip
   8706           length can be changed using the `loop-block-tile-size'
   8707           parameter.  The default value is 51 iterations.
   8708 
   8709     `devirt-type-list-size'
   8710           IPA-CP attempts to track all possible types passed to a
   8711           function's parameter in order to perform devirtualization.
   8712           `devirt-type-list-size' is the maximum number of types it
   8713           stores per a single formal parameter of a function.
   8714 
   8715     `lto-partitions'
   8716           Specify desired number of partitions produced during WHOPR
   8717           compilation.  The number of partitions should exceed the
   8718           number of CPUs used for compilation.  The default value is 32.
   8719 
   8720     `lto-minpartition'
   8721           Size of minimal partition for WHOPR (in estimated
   8722           instructions).  This prevents expenses of splitting very
   8723           small programs into too many partitions.
   8724 
   8725     `cxx-max-namespaces-for-diagnostic-help'
   8726           The maximum number of namespaces to consult for suggestions
   8727           when C++ name lookup fails for an identifier.  The default is
   8728           1000.
   8729 
   8730 
   8731 
   8732 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
   8733 
   8734 3.11 Options Controlling the Preprocessor
   8735 =========================================
   8736 
   8737 These options control the C preprocessor, which is run on each C source
   8738 file before actual compilation.
   8739 
   8740  If you use the `-E' option, nothing is done except preprocessing.
   8741 Some of these options make sense only together with `-E' because they
   8742 cause the preprocessor output to be unsuitable for actual compilation.
   8743 
   8744 `-Wp,OPTION'
   8745      You can use `-Wp,OPTION' to bypass the compiler driver and pass
   8746      OPTION directly through to the preprocessor.  If OPTION contains
   8747      commas, it is split into multiple options at the commas.  However,
   8748      many options are modified, translated or interpreted by the
   8749      compiler driver before being passed to the preprocessor, and `-Wp'
   8750      forcibly bypasses this phase.  The preprocessor's direct interface
   8751      is undocumented and subject to change, so whenever possible you
   8752      should avoid using `-Wp' and let the driver handle the options
   8753      instead.
   8754 
   8755 `-Xpreprocessor OPTION'
   8756      Pass OPTION as an option to the preprocessor.  You can use this to
   8757      supply system-specific preprocessor options which GCC does not
   8758      know how to recognize.
   8759 
   8760      If you want to pass an option that takes an argument, you must use
   8761      `-Xpreprocessor' twice, once for the option and once for the
   8762      argument.
   8763 
   8764 `-D NAME'
   8765      Predefine NAME as a macro, with definition `1'.
   8766 
   8767 `-D NAME=DEFINITION'
   8768      The contents of DEFINITION are tokenized and processed as if they
   8769      appeared during translation phase three in a `#define' directive.
   8770      In particular, the definition will be truncated by embedded
   8771      newline characters.
   8772 
   8773      If you are invoking the preprocessor from a shell or shell-like
   8774      program you may need to use the shell's quoting syntax to protect
   8775      characters such as spaces that have a meaning in the shell syntax.
   8776 
   8777      If you wish to define a function-like macro on the command line,
   8778      write its argument list with surrounding parentheses before the
   8779      equals sign (if any).  Parentheses are meaningful to most shells,
   8780      so you will need to quote the option.  With `sh' and `csh',
   8781      `-D'NAME(ARGS...)=DEFINITION'' works.
   8782 
   8783      `-D' and `-U' options are processed in the order they are given on
   8784      the command line.  All `-imacros FILE' and `-include FILE' options
   8785      are processed after all `-D' and `-U' options.
   8786 
   8787 `-U NAME'
   8788      Cancel any previous definition of NAME, either built in or
   8789      provided with a `-D' option.
   8790 
   8791 `-undef'
   8792      Do not predefine any system-specific or GCC-specific macros.  The
   8793      standard predefined macros remain defined.
   8794 
   8795 `-I DIR'
   8796      Add the directory DIR to the list of directories to be searched
   8797      for header files.  Directories named by `-I' are searched before
   8798      the standard system include directories.  If the directory DIR is
   8799      a standard system include directory, the option is ignored to
   8800      ensure that the default search order for system directories and
   8801      the special treatment of system headers are not defeated .  If DIR
   8802      begins with `=', then the `=' will be replaced by the sysroot
   8803      prefix; see `--sysroot' and `-isysroot'.
   8804 
   8805 `-o FILE'
   8806      Write output to FILE.  This is the same as specifying FILE as the
   8807      second non-option argument to `cpp'.  `gcc' has a different
   8808      interpretation of a second non-option argument, so you must use
   8809      `-o' to specify the output file.
   8810 
   8811 `-Wall'
   8812      Turns on all optional warnings which are desirable for normal code.
   8813      At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
   8814      warning about integer promotion causing a change of sign in `#if'
   8815      expressions.  Note that many of the preprocessor's warnings are on
   8816      by default and have no options to control them.
   8817 
   8818 `-Wcomment'
   8819 `-Wcomments'
   8820      Warn whenever a comment-start sequence `/*' appears in a `/*'
   8821      comment, or whenever a backslash-newline appears in a `//' comment.
   8822      (Both forms have the same effect.)
   8823 
   8824 `-Wtrigraphs'
   8825      Most trigraphs in comments cannot affect the meaning of the
   8826      program.  However, a trigraph that would form an escaped newline
   8827      (`??/' at the end of a line) can, by changing where the comment
   8828      begins or ends.  Therefore, only trigraphs that would form escaped
   8829      newlines produce warnings inside a comment.
   8830 
   8831      This option is implied by `-Wall'.  If `-Wall' is not given, this
   8832      option is still enabled unless trigraphs are enabled.  To get
   8833      trigraph conversion without warnings, but get the other `-Wall'
   8834      warnings, use `-trigraphs -Wall -Wno-trigraphs'.
   8835 
   8836 `-Wtraditional'
   8837      Warn about certain constructs that behave differently in
   8838      traditional and ISO C.  Also warn about ISO C constructs that have
   8839      no traditional C equivalent, and problematic constructs which
   8840      should be avoided.
   8841 
   8842 `-Wundef'
   8843      Warn whenever an identifier which is not a macro is encountered in
   8844      an `#if' directive, outside of `defined'.  Such identifiers are
   8845      replaced with zero.
   8846 
   8847 `-Wunused-macros'
   8848      Warn about macros defined in the main file that are unused.  A
   8849      macro is "used" if it is expanded or tested for existence at least
   8850      once.  The preprocessor will also warn if the macro has not been
   8851      used at the time it is redefined or undefined.
   8852 
   8853      Built-in macros, macros defined on the command line, and macros
   8854      defined in include files are not warned about.
   8855 
   8856      _Note:_ If a macro is actually used, but only used in skipped
   8857      conditional blocks, then CPP will report it as unused.  To avoid
   8858      the warning in such a case, you might improve the scope of the
   8859      macro's definition by, for example, moving it into the first
   8860      skipped block.  Alternatively, you could provide a dummy use with
   8861      something like:
   8862 
   8863           #if defined the_macro_causing_the_warning
   8864           #endif
   8865 
   8866 `-Wendif-labels'
   8867      Warn whenever an `#else' or an `#endif' are followed by text.
   8868      This usually happens in code of the form
   8869 
   8870           #if FOO
   8871           ...
   8872           #else FOO
   8873           ...
   8874           #endif FOO
   8875 
   8876      The second and third `FOO' should be in comments, but often are not
   8877      in older programs.  This warning is on by default.
   8878 
   8879 `-Werror'
   8880      Make all warnings into hard errors.  Source code which triggers
   8881      warnings will be rejected.
   8882 
   8883 `-Wsystem-headers'
   8884      Issue warnings for code in system headers.  These are normally
   8885      unhelpful in finding bugs in your own code, therefore suppressed.
   8886      If you are responsible for the system library, you may want to see
   8887      them.
   8888 
   8889 `-w'
   8890      Suppress all warnings, including those which GNU CPP issues by
   8891      default.
   8892 
   8893 `-pedantic'
   8894      Issue all the mandatory diagnostics listed in the C standard.
   8895      Some of them are left out by default, since they trigger
   8896      frequently on harmless code.
   8897 
   8898 `-pedantic-errors'
   8899      Issue all the mandatory diagnostics, and make all mandatory
   8900      diagnostics into errors.  This includes mandatory diagnostics that
   8901      GCC issues without `-pedantic' but treats as warnings.
   8902 
   8903 `-M'
   8904      Instead of outputting the result of preprocessing, output a rule
   8905      suitable for `make' describing the dependencies of the main source
   8906      file.  The preprocessor outputs one `make' rule containing the
   8907      object file name for that source file, a colon, and the names of
   8908      all the included files, including those coming from `-include' or
   8909      `-imacros' command line options.
   8910 
   8911      Unless specified explicitly (with `-MT' or `-MQ'), the object file
   8912      name consists of the name of the source file with any suffix
   8913      replaced with object file suffix and with any leading directory
   8914      parts removed.  If there are many included files then the rule is
   8915      split into several lines using `\'-newline.  The rule has no
   8916      commands.
   8917 
   8918      This option does not suppress the preprocessor's debug output,
   8919      such as `-dM'.  To avoid mixing such debug output with the
   8920      dependency rules you should explicitly specify the dependency
   8921      output file with `-MF', or use an environment variable like
   8922      `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
   8923      output will still be sent to the regular output stream as normal.
   8924 
   8925      Passing `-M' to the driver implies `-E', and suppresses warnings
   8926      with an implicit `-w'.
   8927 
   8928 `-MM'
   8929      Like `-M' but do not mention header files that are found in system
   8930      header directories, nor header files that are included, directly
   8931      or indirectly, from such a header.
   8932 
   8933      This implies that the choice of angle brackets or double quotes in
   8934      an `#include' directive does not in itself determine whether that
   8935      header will appear in `-MM' dependency output.  This is a slight
   8936      change in semantics from GCC versions 3.0 and earlier.
   8937 
   8938 `-MF FILE'
   8939      When used with `-M' or `-MM', specifies a file to write the
   8940      dependencies to.  If no `-MF' switch is given the preprocessor
   8941      sends the rules to the same place it would have sent preprocessed
   8942      output.
   8943 
   8944      When used with the driver options `-MD' or `-MMD', `-MF' overrides
   8945      the default dependency output file.
   8946 
   8947 `-MG'
   8948      In conjunction with an option such as `-M' requesting dependency
   8949      generation, `-MG' assumes missing header files are generated files
   8950      and adds them to the dependency list without raising an error.
   8951      The dependency filename is taken directly from the `#include'
   8952      directive without prepending any path.  `-MG' also suppresses
   8953      preprocessed output, as a missing header file renders this useless.
   8954 
   8955      This feature is used in automatic updating of makefiles.
   8956 
   8957 `-MP'
   8958      This option instructs CPP to add a phony target for each dependency
   8959      other than the main file, causing each to depend on nothing.  These
   8960      dummy rules work around errors `make' gives if you remove header
   8961      files without updating the `Makefile' to match.
   8962 
   8963      This is typical output:
   8964 
   8965           test.o: test.c test.h
   8966 
   8967           test.h:
   8968 
   8969 `-MT TARGET'
   8970      Change the target of the rule emitted by dependency generation.  By
   8971      default CPP takes the name of the main input file, deletes any
   8972      directory components and any file suffix such as `.c', and appends
   8973      the platform's usual object suffix.  The result is the target.
   8974 
   8975      An `-MT' option will set the target to be exactly the string you
   8976      specify.  If you want multiple targets, you can specify them as a
   8977      single argument to `-MT', or use multiple `-MT' options.
   8978 
   8979      For example, `-MT '$(objpfx)foo.o'' might give
   8980 
   8981           $(objpfx)foo.o: foo.c
   8982 
   8983 `-MQ TARGET'
   8984      Same as `-MT', but it quotes any characters which are special to
   8985      Make.  `-MQ '$(objpfx)foo.o'' gives
   8986 
   8987           $$(objpfx)foo.o: foo.c
   8988 
   8989      The default target is automatically quoted, as if it were given
   8990      with `-MQ'.
   8991 
   8992 `-MD'
   8993      `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
   8994      implied.  The driver determines FILE based on whether an `-o'
   8995      option is given.  If it is, the driver uses its argument but with
   8996      a suffix of `.d', otherwise it takes the name of the input file,
   8997      removes any directory components and suffix, and applies a `.d'
   8998      suffix.
   8999 
   9000      If `-MD' is used in conjunction with `-E', any `-o' switch is
   9001      understood to specify the dependency output file (*note -MF:
   9002      dashMF.), but if used without `-E', each `-o' is understood to
   9003      specify a target object file.
   9004 
   9005      Since `-E' is not implied, `-MD' can be used to generate a
   9006      dependency output file as a side-effect of the compilation process.
   9007 
   9008 `-MMD'
   9009      Like `-MD' except mention only user header files, not system
   9010      header files.
   9011 
   9012 `-fpch-deps'
   9013      When using precompiled headers (*note Precompiled Headers::), this
   9014      flag will cause the dependency-output flags to also list the files
   9015      from the precompiled header's dependencies.  If not specified only
   9016      the precompiled header would be listed and not the files that were
   9017      used to create it because those files are not consulted when a
   9018      precompiled header is used.
   9019 
   9020 `-fpch-preprocess'
   9021      This option allows use of a precompiled header (*note Precompiled
   9022      Headers::) together with `-E'.  It inserts a special `#pragma',
   9023      `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
   9024      place where the precompiled header was found, and its FILENAME.
   9025      When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
   9026      loads the PCH.
   9027 
   9028      This option is off by default, because the resulting preprocessed
   9029      output is only really suitable as input to GCC.  It is switched on
   9030      by `-save-temps'.
   9031 
   9032      You should not write this `#pragma' in your own code, but it is
   9033      safe to edit the filename if the PCH file is available in a
   9034      different location.  The filename may be absolute or it may be
   9035      relative to GCC's current directory.
   9036 
   9037 `-x c'
   9038 `-x c++'
   9039 `-x objective-c'
   9040 `-x assembler-with-cpp'
   9041      Specify the source language: C, C++, Objective-C, or assembly.
   9042      This has nothing to do with standards conformance or extensions;
   9043      it merely selects which base syntax to expect.  If you give none
   9044      of these options, cpp will deduce the language from the extension
   9045      of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
   9046      extensions for C++ and assembly are also recognized.  If cpp does
   9047      not recognize the extension, it will treat the file as C; this is
   9048      the most generic mode.
   9049 
   9050      _Note:_ Previous versions of cpp accepted a `-lang' option which
   9051      selected both the language and the standards conformance level.
   9052      This option has been removed, because it conflicts with the `-l'
   9053      option.
   9054 
   9055 `-std=STANDARD'
   9056 `-ansi'
   9057      Specify the standard to which the code should conform.  Currently
   9058      CPP knows about C and C++ standards; others may be added in the
   9059      future.
   9060 
   9061      STANDARD may be one of:
   9062     `c90'
   9063     `c89'
   9064     `iso9899:1990'
   9065           The ISO C standard from 1990.  `c90' is the customary
   9066           shorthand for this version of the standard.
   9067 
   9068           The `-ansi' option is equivalent to `-std=c90'.
   9069 
   9070     `iso9899:199409'
   9071           The 1990 C standard, as amended in 1994.
   9072 
   9073     `iso9899:1999'
   9074     `c99'
   9075     `iso9899:199x'
   9076     `c9x'
   9077           The revised ISO C standard, published in December 1999.
   9078           Before publication, this was known as C9X.
   9079 
   9080     `c1x'
   9081           The next version of the ISO C standard, still under
   9082           development.
   9083 
   9084     `gnu90'
   9085     `gnu89'
   9086           The 1990 C standard plus GNU extensions.  This is the default.
   9087 
   9088     `gnu99'
   9089     `gnu9x'
   9090           The 1999 C standard plus GNU extensions.
   9091 
   9092     `gnu1x'
   9093           The next version of the ISO C standard, still under
   9094           development, plus GNU extensions.
   9095 
   9096     `c++98'
   9097           The 1998 ISO C++ standard plus amendments.
   9098 
   9099     `gnu++98'
   9100           The same as `-std=c++98' plus GNU extensions.  This is the
   9101           default for C++ code.
   9102 
   9103 `-I-'
   9104      Split the include path.  Any directories specified with `-I'
   9105      options before `-I-' are searched only for headers requested with
   9106      `#include "FILE"'; they are not searched for `#include <FILE>'.
   9107      If additional directories are specified with `-I' options after
   9108      the `-I-', those directories are searched for all `#include'
   9109      directives.
   9110 
   9111      In addition, `-I-' inhibits the use of the directory of the current
   9112      file directory as the first search directory for `#include "FILE"'.
   9113      This option has been deprecated.
   9114 
   9115 `-nostdinc'
   9116      Do not search the standard system directories for header files.
   9117      Only the directories you have specified with `-I' options (and the
   9118      directory of the current file, if appropriate) are searched.
   9119 
   9120 `-nostdinc++'
   9121      Do not search for header files in the C++-specific standard
   9122      directories, but do still search the other standard directories.
   9123      (This option is used when building the C++ library.)
   9124 
   9125 `-include FILE'
   9126      Process FILE as if `#include "file"' appeared as the first line of
   9127      the primary source file.  However, the first directory searched
   9128      for FILE is the preprocessor's working directory _instead of_ the
   9129      directory containing the main source file.  If not found there, it
   9130      is searched for in the remainder of the `#include "..."' search
   9131      chain as normal.
   9132 
   9133      If multiple `-include' options are given, the files are included
   9134      in the order they appear on the command line.
   9135 
   9136 `-imacros FILE'
   9137      Exactly like `-include', except that any output produced by
   9138      scanning FILE is thrown away.  Macros it defines remain defined.
   9139      This allows you to acquire all the macros from a header without
   9140      also processing its declarations.
   9141 
   9142      All files specified by `-imacros' are processed before all files
   9143      specified by `-include'.
   9144 
   9145 `-idirafter DIR'
   9146      Search DIR for header files, but do it _after_ all directories
   9147      specified with `-I' and the standard system directories have been
   9148      exhausted.  DIR is treated as a system include directory.  If DIR
   9149      begins with `=', then the `=' will be replaced by the sysroot
   9150      prefix; see `--sysroot' and `-isysroot'.
   9151 
   9152 `-iprefix PREFIX'
   9153      Specify PREFIX as the prefix for subsequent `-iwithprefix'
   9154      options.  If the prefix represents a directory, you should include
   9155      the final `/'.
   9156 
   9157 `-iwithprefix DIR'
   9158 `-iwithprefixbefore DIR'
   9159      Append DIR to the prefix specified previously with `-iprefix', and
   9160      add the resulting directory to the include search path.
   9161      `-iwithprefixbefore' puts it in the same place `-I' would;
   9162      `-iwithprefix' puts it where `-idirafter' would.
   9163 
   9164 `-isysroot DIR'
   9165      This option is like the `--sysroot' option, but applies only to
   9166      header files (except for Darwin targets, where it applies to both
   9167      header files and libraries).  See the `--sysroot' option for more
   9168      information.
   9169 
   9170 `-imultilib DIR'
   9171      Use DIR as a subdirectory of the directory containing
   9172      target-specific C++ headers.
   9173 
   9174 `-isystem DIR'
   9175      Search DIR for header files, after all directories specified by
   9176      `-I' but before the standard system directories.  Mark it as a
   9177      system directory, so that it gets the same special treatment as is
   9178      applied to the standard system directories.  If DIR begins with
   9179      `=', then the `=' will be replaced by the sysroot prefix; see
   9180      `--sysroot' and `-isysroot'.
   9181 
   9182 `-iquote DIR'
   9183      Search DIR only for header files requested with `#include "FILE"';
   9184      they are not searched for `#include <FILE>', before all
   9185      directories specified by `-I' and before the standard system
   9186      directories.  If DIR begins with `=', then the `=' will be replaced
   9187      by the sysroot prefix; see `--sysroot' and `-isysroot'.
   9188 
   9189 `-fdirectives-only'
   9190      When preprocessing, handle directives, but do not expand macros.
   9191 
   9192      The option's behavior depends on the `-E' and `-fpreprocessed'
   9193      options.
   9194 
   9195      With `-E', preprocessing is limited to the handling of directives
   9196      such as `#define', `#ifdef', and `#error'.  Other preprocessor
   9197      operations, such as macro expansion and trigraph conversion are
   9198      not performed.  In addition, the `-dD' option is implicitly
   9199      enabled.
   9200 
   9201      With `-fpreprocessed', predefinition of command line and most
   9202      builtin macros is disabled.  Macros such as `__LINE__', which are
   9203      contextually dependent, are handled normally.  This enables
   9204      compilation of files previously preprocessed with `-E
   9205      -fdirectives-only'.
   9206 
   9207      With both `-E' and `-fpreprocessed', the rules for
   9208      `-fpreprocessed' take precedence.  This enables full preprocessing
   9209      of files previously preprocessed with `-E -fdirectives-only'.
   9210 
   9211 `-fdollars-in-identifiers'
   9212      Accept `$' in identifiers.
   9213 
   9214 `-fextended-identifiers'
   9215      Accept universal character names in identifiers.  This option is
   9216      experimental; in a future version of GCC, it will be enabled by
   9217      default for C99 and C++.
   9218 
   9219 `-fpreprocessed'
   9220      Indicate to the preprocessor that the input file has already been
   9221      preprocessed.  This suppresses things like macro expansion,
   9222      trigraph conversion, escaped newline splicing, and processing of
   9223      most directives.  The preprocessor still recognizes and removes
   9224      comments, so that you can pass a file preprocessed with `-C' to
   9225      the compiler without problems.  In this mode the integrated
   9226      preprocessor is little more than a tokenizer for the front ends.
   9227 
   9228      `-fpreprocessed' is implicit if the input file has one of the
   9229      extensions `.i', `.ii' or `.mi'.  These are the extensions that
   9230      GCC uses for preprocessed files created by `-save-temps'.
   9231 
   9232 `-ftabstop=WIDTH'
   9233      Set the distance between tab stops.  This helps the preprocessor
   9234      report correct column numbers in warnings or errors, even if tabs
   9235      appear on the line.  If the value is less than 1 or greater than
   9236      100, the option is ignored.  The default is 8.
   9237 
   9238 `-fexec-charset=CHARSET'
   9239      Set the execution character set, used for string and character
   9240      constants.  The default is UTF-8.  CHARSET can be any encoding
   9241      supported by the system's `iconv' library routine.
   9242 
   9243 `-fwide-exec-charset=CHARSET'
   9244      Set the wide execution character set, used for wide string and
   9245      character constants.  The default is UTF-32 or UTF-16, whichever
   9246      corresponds to the width of `wchar_t'.  As with `-fexec-charset',
   9247      CHARSET can be any encoding supported by the system's `iconv'
   9248      library routine; however, you will have problems with encodings
   9249      that do not fit exactly in `wchar_t'.
   9250 
   9251 `-finput-charset=CHARSET'
   9252      Set the input character set, used for translation from the
   9253      character set of the input file to the source character set used
   9254      by GCC.  If the locale does not specify, or GCC cannot get this
   9255      information from the locale, the default is UTF-8.  This can be
   9256      overridden by either the locale or this command line option.
   9257      Currently the command line option takes precedence if there's a
   9258      conflict.  CHARSET can be any encoding supported by the system's
   9259      `iconv' library routine.
   9260 
   9261 `-fworking-directory'
   9262      Enable generation of linemarkers in the preprocessor output that
   9263      will let the compiler know the current working directory at the
   9264      time of preprocessing.  When this option is enabled, the
   9265      preprocessor will emit, after the initial linemarker, a second
   9266      linemarker with the current working directory followed by two
   9267      slashes.  GCC will use this directory, when it's present in the
   9268      preprocessed input, as the directory emitted as the current
   9269      working directory in some debugging information formats.  This
   9270      option is implicitly enabled if debugging information is enabled,
   9271      but this can be inhibited with the negated form
   9272      `-fno-working-directory'.  If the `-P' flag is present in the
   9273      command line, this option has no effect, since no `#line'
   9274      directives are emitted whatsoever.
   9275 
   9276 `-fno-show-column'
   9277      Do not print column numbers in diagnostics.  This may be necessary
   9278      if diagnostics are being scanned by a program that does not
   9279      understand the column numbers, such as `dejagnu'.
   9280 
   9281 `-A PREDICATE=ANSWER'
   9282      Make an assertion with the predicate PREDICATE and answer ANSWER.
   9283      This form is preferred to the older form `-A PREDICATE(ANSWER)',
   9284      which is still supported, because it does not use shell special
   9285      characters.
   9286 
   9287 `-A -PREDICATE=ANSWER'
   9288      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
   9289 
   9290 `-dCHARS'
   9291      CHARS is a sequence of one or more of the following characters,
   9292      and must not be preceded by a space.  Other characters are
   9293      interpreted by the compiler proper, or reserved for future
   9294      versions of GCC, and so are silently ignored.  If you specify
   9295      characters whose behavior conflicts, the result is undefined.
   9296 
   9297     `M'
   9298           Instead of the normal output, generate a list of `#define'
   9299           directives for all the macros defined during the execution of
   9300           the preprocessor, including predefined macros.  This gives
   9301           you a way of finding out what is predefined in your version
   9302           of the preprocessor.  Assuming you have no file `foo.h', the
   9303           command
   9304 
   9305                touch foo.h; cpp -dM foo.h
   9306 
   9307           will show all the predefined macros.
   9308 
   9309           If you use `-dM' without the `-E' option, `-dM' is
   9310           interpreted as a synonym for `-fdump-rtl-mach'.  *Note
   9311           Debugging Options: (gcc)Debugging Options.
   9312 
   9313     `D'
   9314           Like `M' except in two respects: it does _not_ include the
   9315           predefined macros, and it outputs _both_ the `#define'
   9316           directives and the result of preprocessing.  Both kinds of
   9317           output go to the standard output file.
   9318 
   9319     `N'
   9320           Like `D', but emit only the macro names, not their expansions.
   9321 
   9322     `I'
   9323           Output `#include' directives in addition to the result of
   9324           preprocessing.
   9325 
   9326     `U'
   9327           Like `D' except that only macros that are expanded, or whose
   9328           definedness is tested in preprocessor directives, are output;
   9329           the output is delayed until the use or test of the macro; and
   9330           `#undef' directives are also output for macros tested but
   9331           undefined at the time.
   9332 
   9333 `-P'
   9334      Inhibit generation of linemarkers in the output from the
   9335      preprocessor.  This might be useful when running the preprocessor
   9336      on something that is not C code, and will be sent to a program
   9337      which might be confused by the linemarkers.
   9338 
   9339 `-C'
   9340      Do not discard comments.  All comments are passed through to the
   9341      output file, except for comments in processed directives, which
   9342      are deleted along with the directive.
   9343 
   9344      You should be prepared for side effects when using `-C'; it causes
   9345      the preprocessor to treat comments as tokens in their own right.
   9346      For example, comments appearing at the start of what would be a
   9347      directive line have the effect of turning that line into an
   9348      ordinary source line, since the first token on the line is no
   9349      longer a `#'.
   9350 
   9351 `-CC'
   9352      Do not discard comments, including during macro expansion.  This is
   9353      like `-C', except that comments contained within macros are also
   9354      passed through to the output file where the macro is expanded.
   9355 
   9356      In addition to the side-effects of the `-C' option, the `-CC'
   9357      option causes all C++-style comments inside a macro to be
   9358      converted to C-style comments.  This is to prevent later use of
   9359      that macro from inadvertently commenting out the remainder of the
   9360      source line.
   9361 
   9362      The `-CC' option is generally used to support lint comments.
   9363 
   9364 `-traditional-cpp'
   9365      Try to imitate the behavior of old-fashioned C preprocessors, as
   9366      opposed to ISO C preprocessors.
   9367 
   9368 `-trigraphs'
   9369      Process trigraph sequences.  These are three-character sequences,
   9370      all starting with `??', that are defined by ISO C to stand for
   9371      single characters.  For example, `??/' stands for `\', so `'??/n''
   9372      is a character constant for a newline.  By default, GCC ignores
   9373      trigraphs, but in standard-conforming modes it converts them.  See
   9374      the `-std' and `-ansi' options.
   9375 
   9376      The nine trigraphs and their replacements are
   9377 
   9378           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
   9379           Replacement:      [    ]    {    }    #    \    ^    |    ~
   9380 
   9381 `-remap'
   9382      Enable special code to work around file systems which only permit
   9383      very short file names, such as MS-DOS.
   9384 
   9385 `--help'
   9386 `--target-help'
   9387      Print text describing all the command line options instead of
   9388      preprocessing anything.
   9389 
   9390 `-v'
   9391      Verbose mode.  Print out GNU CPP's version number at the beginning
   9392      of execution, and report the final form of the include path.
   9393 
   9394 `-H'
   9395      Print the name of each header file used, in addition to other
   9396      normal activities.  Each name is indented to show how deep in the
   9397      `#include' stack it is.  Precompiled header files are also
   9398      printed, even if they are found to be invalid; an invalid
   9399      precompiled header file is printed with `...x' and a valid one
   9400      with `...!' .
   9401 
   9402 `-version'
   9403 `--version'
   9404      Print out GNU CPP's version number.  With one dash, proceed to
   9405      preprocess as normal.  With two dashes, exit immediately.
   9406 
   9407 
   9408 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
   9409 
   9410 3.12 Passing Options to the Assembler
   9411 =====================================
   9412 
   9413 You can pass options to the assembler.
   9414 
   9415 `-Wa,OPTION'
   9416      Pass OPTION as an option to the assembler.  If OPTION contains
   9417      commas, it is split into multiple options at the commas.
   9418 
   9419 `-Xassembler OPTION'
   9420      Pass OPTION as an option to the assembler.  You can use this to
   9421      supply system-specific assembler options which GCC does not know
   9422      how to recognize.
   9423 
   9424      If you want to pass an option that takes an argument, you must use
   9425      `-Xassembler' twice, once for the option and once for the argument.
   9426 
   9427 `profile-generate-sampling-rate'
   9428      Set the sampling rate with `-fprofile-generate-sampling'.
   9429 
   9430 
   9431 
   9432 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
   9433 
   9434 3.13 Options for Linking
   9435 ========================
   9436 
   9437 These options come into play when the compiler links object files into
   9438 an executable output file.  They are meaningless if the compiler is not
   9439 doing a link step.
   9440 
   9441 `OBJECT-FILE-NAME'
   9442      A file name that does not end in a special recognized suffix is
   9443      considered to name an object file or library.  (Object files are
   9444      distinguished from libraries by the linker according to the file
   9445      contents.)  If linking is done, these object files are used as
   9446      input to the linker.
   9447 
   9448 `-c'
   9449 `-S'
   9450 `-E'
   9451      If any of these options is used, then the linker is not run, and
   9452      object file names should not be used as arguments.  *Note Overall
   9453      Options::.
   9454 
   9455 `-lLIBRARY'
   9456 `-l LIBRARY'
   9457      Search the library named LIBRARY when linking.  (The second
   9458      alternative with the library as a separate argument is only for
   9459      POSIX compliance and is not recommended.)
   9460 
   9461      It makes a difference where in the command you write this option;
   9462      the linker searches and processes libraries and object files in
   9463      the order they are specified.  Thus, `foo.o -lz bar.o' searches
   9464      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
   9465      refers to functions in `z', those functions may not be loaded.
   9466 
   9467      The linker searches a standard list of directories for the library,
   9468      which is actually a file named `libLIBRARY.a'.  The linker then
   9469      uses this file as if it had been specified precisely by name.
   9470 
   9471      The directories searched include several standard system
   9472      directories plus any that you specify with `-L'.
   9473 
   9474      Normally the files found this way are library files--archive files
   9475      whose members are object files.  The linker handles an archive
   9476      file by scanning through it for members which define symbols that
   9477      have so far been referenced but not defined.  But if the file that
   9478      is found is an ordinary object file, it is linked in the usual
   9479      fashion.  The only difference between using an `-l' option and
   9480      specifying a file name is that `-l' surrounds LIBRARY with `lib'
   9481      and `.a' and searches several directories.
   9482 
   9483 `-lobjc'
   9484      You need this special case of the `-l' option in order to link an
   9485      Objective-C or Objective-C++ program.
   9486 
   9487 `-nostartfiles'
   9488      Do not use the standard system startup files when linking.  The
   9489      standard system libraries are used normally, unless `-nostdlib' or
   9490      `-nodefaultlibs' is used.
   9491 
   9492 `-nodefaultlibs'
   9493      Do not use the standard system libraries when linking.  Only the
   9494      libraries you specify will be passed to the linker, options
   9495      specifying linkage of the system libraries, such as
   9496      `-static-libgcc' or `-shared-libgcc', will be ignored.  The
   9497      standard startup files are used normally, unless `-nostartfiles'
   9498      is used.  The compiler may generate calls to `memcmp', `memset',
   9499      `memcpy' and `memmove'.  These entries are usually resolved by
   9500      entries in libc.  These entry points should be supplied through
   9501      some other mechanism when this option is specified.
   9502 
   9503 `-nostdlib'
   9504      Do not use the standard system startup files or libraries when
   9505      linking.  No startup files and only the libraries you specify will
   9506      be passed to the linker, options specifying linkage of the system
   9507      libraries, such as `-static-libgcc' or `-shared-libgcc', will be
   9508      ignored.  The compiler may generate calls to `memcmp', `memset',
   9509      `memcpy' and `memmove'.  These entries are usually resolved by
   9510      entries in libc.  These entry points should be supplied through
   9511      some other mechanism when this option is specified.
   9512 
   9513      One of the standard libraries bypassed by `-nostdlib' and
   9514      `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
   9515      that GCC uses to overcome shortcomings of particular machines, or
   9516      special needs for some languages.  (*Note Interfacing to GCC
   9517      Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
   9518      most cases, you need `libgcc.a' even when you want to avoid other
   9519      standard libraries.  In other words, when you specify `-nostdlib'
   9520      or `-nodefaultlibs' you should usually specify `-lgcc' as well.
   9521      This ensures that you have no unresolved references to internal GCC
   9522      library subroutines.  (For example, `__main', used to ensure C++
   9523      constructors will be called; *note `collect2': (gccint)Collect2.)
   9524 
   9525 `-pie'
   9526      Produce a position independent executable on targets which support
   9527      it.  For predictable results, you must also specify the same set
   9528      of options that were used to generate code (`-fpie', `-fPIE', or
   9529      model suboptions) when you specify this option.
   9530 
   9531 `-rdynamic'
   9532      Pass the flag `-export-dynamic' to the ELF linker, on targets that
   9533      support it. This instructs the linker to add all symbols, not only
   9534      used ones, to the dynamic symbol table. This option is needed for
   9535      some uses of `dlopen' or to allow obtaining backtraces from within
   9536      a program.
   9537 
   9538 `-s'
   9539      Remove all symbol table and relocation information from the
   9540      executable.
   9541 
   9542 `-static'
   9543      On systems that support dynamic linking, this prevents linking
   9544      with the shared libraries.  On other systems, this option has no
   9545      effect.
   9546 
   9547 `-shared'
   9548      Produce a shared object which can then be linked with other
   9549      objects to form an executable.  Not all systems support this
   9550      option.  For predictable results, you must also specify the same
   9551      set of options that were used to generate code (`-fpic', `-fPIC',
   9552      or model suboptions) when you specify this option.(1)
   9553 
   9554 `-shared-libgcc'
   9555 `-static-libgcc'
   9556      On systems that provide `libgcc' as a shared library, these options
   9557      force the use of either the shared or static version respectively.
   9558      If no shared version of `libgcc' was built when the compiler was
   9559      configured, these options have no effect.
   9560 
   9561      There are several situations in which an application should use the
   9562      shared `libgcc' instead of the static version.  The most common of
   9563      these is when the application wishes to throw and catch exceptions
   9564      across different shared libraries.  In that case, each of the
   9565      libraries as well as the application itself should use the shared
   9566      `libgcc'.
   9567 
   9568      Therefore, the G++ and GCJ drivers automatically add
   9569      `-shared-libgcc' whenever you build a shared library or a main
   9570      executable, because C++ and Java programs typically use
   9571      exceptions, so this is the right thing to do.
   9572 
   9573      If, instead, you use the GCC driver to create shared libraries,
   9574      you may find that they will not always be linked with the shared
   9575      `libgcc'.  If GCC finds, at its configuration time, that you have
   9576      a non-GNU linker or a GNU linker that does not support option
   9577      `--eh-frame-hdr', it will link the shared version of `libgcc' into
   9578      shared libraries by default.  Otherwise, it will take advantage of
   9579      the linker and optimize away the linking with the shared version
   9580      of `libgcc', linking with the static version of libgcc by default.
   9581      This allows exceptions to propagate through such shared libraries,
   9582      without incurring relocation costs at library load time.
   9583 
   9584      However, if a library or main executable is supposed to throw or
   9585      catch exceptions, you must link it using the G++ or GCJ driver, as
   9586      appropriate for the languages used in the program, or using the
   9587      option `-shared-libgcc', such that it is linked with the shared
   9588      `libgcc'.
   9589 
   9590 `-static-libstdc++'
   9591      When the `g++' program is used to link a C++ program, it will
   9592      normally automatically link against `libstdc++'.  If `libstdc++'
   9593      is available as a shared library, and the `-static' option is not
   9594      used, then this will link against the shared version of
   9595      `libstdc++'.  That is normally fine.  However, it is sometimes
   9596      useful to freeze the version of `libstdc++' used by the program
   9597      without going all the way to a fully static link.  The
   9598      `-static-libstdc++' option directs the `g++' driver to link
   9599      `libstdc++' statically, without necessarily linking other
   9600      libraries statically.
   9601 
   9602 `-symbolic'
   9603      Bind references to global symbols when building a shared object.
   9604      Warn about any unresolved references (unless overridden by the
   9605      link editor option `-Xlinker -z -Xlinker defs').  Only a few
   9606      systems support this option.
   9607 
   9608 `-T SCRIPT'
   9609      Use SCRIPT as the linker script.  This option is supported by most
   9610      systems using the GNU linker.  On some targets, such as bare-board
   9611      targets without an operating system, the `-T' option may be
   9612      required when linking to avoid references to undefined symbols.
   9613 
   9614 `-Xlinker OPTION'
   9615      Pass OPTION as an option to the linker.  You can use this to
   9616      supply system-specific linker options which GCC does not know how
   9617      to recognize.
   9618 
   9619      If you want to pass an option that takes a separate argument, you
   9620      must use `-Xlinker' twice, once for the option and once for the
   9621      argument.  For example, to pass `-assert definitions', you must
   9622      write `-Xlinker -assert -Xlinker definitions'.  It does not work
   9623      to write `-Xlinker "-assert definitions"', because this passes the
   9624      entire string as a single argument, which is not what the linker
   9625      expects.
   9626 
   9627      When using the GNU linker, it is usually more convenient to pass
   9628      arguments to linker options using the `OPTION=VALUE' syntax than
   9629      as separate arguments.  For example, you can specify `-Xlinker
   9630      -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
   9631      Other linkers may not support this syntax for command-line options.
   9632 
   9633 `-Wl,OPTION'
   9634      Pass OPTION as an option to the linker.  If OPTION contains
   9635      commas, it is split into multiple options at the commas.  You can
   9636      use this syntax to pass an argument to the option.  For example,
   9637      `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
   9638      When using the GNU linker, you can also get the same effect with
   9639      `-Wl,-Map=output.map'.
   9640 
   9641 `-u SYMBOL'
   9642      Pretend the symbol SYMBOL is undefined, to force linking of
   9643      library modules to define it.  You can use `-u' multiple times with
   9644      different symbols to force loading of additional library modules.
   9645 
   9646  ---------- Footnotes ----------
   9647 
   9648  (1) On some systems, `gcc -shared' needs to build supplementary stub
   9649 code for constructors to work.  On multi-libbed systems, `gcc -shared'
   9650 must select the correct support libraries to link against.  Failing to
   9651 supply the correct flags may lead to subtle defects.  Supplying them in
   9652 cases where they are not necessary is innocuous.
   9653 
   9654 
   9655 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
   9656 
   9657 3.14 Options for Directory Search
   9658 =================================
   9659 
   9660 These options specify directories to search for header files, for
   9661 libraries and for parts of the compiler:
   9662 
   9663 `-IDIR'
   9664      Add the directory DIR to the head of the list of directories to be
   9665      searched for header files.  This can be used to override a system
   9666      header file, substituting your own version, since these
   9667      directories are searched before the system header file
   9668      directories.  However, you should not use this option to add
   9669      directories that contain vendor-supplied system header files (use
   9670      `-isystem' for that).  If you use more than one `-I' option, the
   9671      directories are scanned in left-to-right order; the standard
   9672      system directories come after.
   9673 
   9674      If a standard system include directory, or a directory specified
   9675      with `-isystem', is also specified with `-I', the `-I' option will
   9676      be ignored.  The directory will still be searched but as a system
   9677      directory at its normal position in the system include chain.
   9678      This is to ensure that GCC's procedure to fix buggy system headers
   9679      and the ordering for the include_next directive are not
   9680      inadvertently changed.  If you really need to change the search
   9681      order for system directories, use the `-nostdinc' and/or
   9682      `-isystem' options.
   9683 
   9684 `-iplugindir=DIR'
   9685      Set the directory to search for plugins which are passed by
   9686      `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
   9687      is not meant to be used by the user, but only passed by the driver.
   9688 
   9689 `-iquoteDIR'
   9690      Add the directory DIR to the head of the list of directories to be
   9691      searched for header files only for the case of `#include "FILE"';
   9692      they are not searched for `#include <FILE>', otherwise just like
   9693      `-I'.
   9694 
   9695 `-LDIR'
   9696      Add directory DIR to the list of directories to be searched for
   9697      `-l'.
   9698 
   9699 `-BPREFIX'
   9700      This option specifies where to find the executables, libraries,
   9701      include files, and data files of the compiler itself.
   9702 
   9703      The compiler driver program runs one or more of the subprograms
   9704      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
   9705      program it tries to run, both with and without `MACHINE/VERSION/'
   9706      (*note Target Options::).
   9707 
   9708      For each subprogram to be run, the compiler driver first tries the
   9709      `-B' prefix, if any.  If that name is not found, or if `-B' was
   9710      not specified, the driver tries two standard prefixes, which are
   9711      `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
   9712      results in a file name that is found, the unmodified program name
   9713      is searched for using the directories specified in your `PATH'
   9714      environment variable.
   9715 
   9716      The compiler will check to see if the path provided by the `-B'
   9717      refers to a directory, and if necessary it will add a directory
   9718      separator character at the end of the path.
   9719 
   9720      `-B' prefixes that effectively specify directory names also apply
   9721      to libraries in the linker, because the compiler translates these
   9722      options into `-L' options for the linker.  They also apply to
   9723      includes files in the preprocessor, because the compiler
   9724      translates these options into `-isystem' options for the
   9725      preprocessor.  In this case, the compiler appends `include' to the
   9726      prefix.
   9727 
   9728      The run-time support file `libgcc.a' can also be searched for using
   9729      the `-B' prefix, if needed.  If it is not found there, the two
   9730      standard prefixes above are tried, and that is all.  The file is
   9731      left out of the link if it is not found by those means.
   9732 
   9733      Another way to specify a prefix much like the `-B' prefix is to use
   9734      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
   9735      Variables::.
   9736 
   9737      As a special kludge, if the path provided by `-B' is
   9738      `[dir/]stageN/', where N is a number in the range 0 to 9, then it
   9739      will be replaced by `[dir/]include'.  This is to help with
   9740      boot-strapping the compiler.
   9741 
   9742 `-specs=FILE'
   9743      Process FILE after the compiler reads in the standard `specs'
   9744      file, in order to override the defaults that the `gcc' driver
   9745      program uses when determining what switches to pass to `cc1',
   9746      `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
   9747      specified on the command line, and they are processed in order,
   9748      from left to right.
   9749 
   9750 `--sysroot=DIR'
   9751      Use DIR as the logical root directory for headers and libraries.
   9752      For example, if the compiler would normally search for headers in
   9753      `/usr/include' and libraries in `/usr/lib', it will instead search
   9754      `DIR/usr/include' and `DIR/usr/lib'.
   9755 
   9756      If you use both this option and the `-isysroot' option, then the
   9757      `--sysroot' option will apply to libraries, but the `-isysroot'
   9758      option will apply to header files.
   9759 
   9760      The GNU linker (beginning with version 2.16) has the necessary
   9761      support for this option.  If your linker does not support this
   9762      option, the header file aspect of `--sysroot' will still work, but
   9763      the library aspect will not.
   9764 
   9765 `-I-'
   9766      This option has been deprecated.  Please use `-iquote' instead for
   9767      `-I' directories before the `-I-' and remove the `-I-'.  Any
   9768      directories you specify with `-I' options before the `-I-' option
   9769      are searched only for the case of `#include "FILE"'; they are not
   9770      searched for `#include <FILE>'.
   9771 
   9772      If additional directories are specified with `-I' options after
   9773      the `-I-', these directories are searched for all `#include'
   9774      directives.  (Ordinarily _all_ `-I' directories are used this way.)
   9775 
   9776      In addition, the `-I-' option inhibits the use of the current
   9777      directory (where the current input file came from) as the first
   9778      search directory for `#include "FILE"'.  There is no way to
   9779      override this effect of `-I-'.  With `-I.' you can specify
   9780      searching the directory which was current when the compiler was
   9781      invoked.  That is not exactly the same as what the preprocessor
   9782      does by default, but it is often satisfactory.
   9783 
   9784      `-I-' does not inhibit the use of the standard system directories
   9785      for header files.  Thus, `-I-' and `-nostdinc' are independent.
   9786 
   9787 
   9788 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
   9789 
   9790 3.15 Specifying subprocesses and the switches to pass to them
   9791 =============================================================
   9792 
   9793 `gcc' is a driver program.  It performs its job by invoking a sequence
   9794 of other programs to do the work of compiling, assembling and linking.
   9795 GCC interprets its command-line parameters and uses these to deduce
   9796 which programs it should invoke, and which command-line options it
   9797 ought to place on their command lines.  This behavior is controlled by
   9798 "spec strings".  In most cases there is one spec string for each
   9799 program that GCC can invoke, but a few programs have multiple spec
   9800 strings to control their behavior.  The spec strings built into GCC can
   9801 be overridden by using the `-specs=' command-line switch to specify a
   9802 spec file.
   9803 
   9804  "Spec files" are plaintext files that are used to construct spec
   9805 strings.  They consist of a sequence of directives separated by blank
   9806 lines.  The type of directive is determined by the first non-whitespace
   9807 character on the line and it can be one of the following:
   9808 
   9809 `%COMMAND'
   9810      Issues a COMMAND to the spec file processor.  The commands that can
   9811      appear here are:
   9812 
   9813     `%include <FILE>'
   9814           Search for FILE and insert its text at the current point in
   9815           the specs file.
   9816 
   9817     `%include_noerr <FILE>'
   9818           Just like `%include', but do not generate an error message if
   9819           the include file cannot be found.
   9820 
   9821     `%rename OLD_NAME NEW_NAME'
   9822           Rename the spec string OLD_NAME to NEW_NAME.
   9823 
   9824 
   9825 `*[SPEC_NAME]:'
   9826      This tells the compiler to create, override or delete the named
   9827      spec string.  All lines after this directive up to the next
   9828      directive or blank line are considered to be the text for the spec
   9829      string.  If this results in an empty string then the spec will be
   9830      deleted.  (Or, if the spec did not exist, then nothing will
   9831      happened.)  Otherwise, if the spec does not currently exist a new
   9832      spec will be created.  If the spec does exist then its contents
   9833      will be overridden by the text of this directive, unless the first
   9834      character of that text is the `+' character, in which case the
   9835      text will be appended to the spec.
   9836 
   9837 `[SUFFIX]:'
   9838      Creates a new `[SUFFIX] spec' pair.  All lines after this directive
   9839      and up to the next directive or blank line are considered to make
   9840      up the spec string for the indicated suffix.  When the compiler
   9841      encounters an input file with the named suffix, it will processes
   9842      the spec string in order to work out how to compile that file.
   9843      For example:
   9844 
   9845           .ZZ:
   9846           z-compile -input %i
   9847 
   9848      This says that any input file whose name ends in `.ZZ' should be
   9849      passed to the program `z-compile', which should be invoked with the
   9850      command-line switch `-input' and with the result of performing the
   9851      `%i' substitution.  (See below.)
   9852 
   9853      As an alternative to providing a spec string, the text that
   9854      follows a suffix directive can be one of the following:
   9855 
   9856     `@LANGUAGE'
   9857           This says that the suffix is an alias for a known LANGUAGE.
   9858           This is similar to using the `-x' command-line switch to GCC
   9859           to specify a language explicitly.  For example:
   9860 
   9861                .ZZ:
   9862                @c++
   9863 
   9864           Says that .ZZ files are, in fact, C++ source files.
   9865 
   9866     `#NAME'
   9867           This causes an error messages saying:
   9868 
   9869                NAME compiler not installed on this system.
   9870 
   9871      GCC already has an extensive list of suffixes built into it.  This
   9872      directive will add an entry to the end of the list of suffixes, but
   9873      since the list is searched from the end backwards, it is
   9874      effectively possible to override earlier entries using this
   9875      technique.
   9876 
   9877 
   9878  GCC has the following spec strings built into it.  Spec files can
   9879 override these strings or create their own.  Note that individual
   9880 targets can also add their own spec strings to this list.
   9881 
   9882      asm          Options to pass to the assembler
   9883      asm_final    Options to pass to the assembler post-processor
   9884      cpp          Options to pass to the C preprocessor
   9885      cc1          Options to pass to the C compiler
   9886      cc1plus      Options to pass to the C++ compiler
   9887      endfile      Object files to include at the end of the link
   9888      link         Options to pass to the linker
   9889      lib          Libraries to include on the command line to the linker
   9890      libgcc       Decides which GCC support library to pass to the linker
   9891      linker       Sets the name of the linker
   9892      predefines   Defines to be passed to the C preprocessor
   9893      signed_char  Defines to pass to CPP to say whether `char' is signed
   9894                   by default
   9895      startfile    Object files to include at the start of the link
   9896 
   9897  Here is a small example of a spec file:
   9898 
   9899      %rename lib                 old_lib
   9900 
   9901      *lib:
   9902      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
   9903 
   9904  This example renames the spec called `lib' to `old_lib' and then
   9905 overrides the previous definition of `lib' with a new one.  The new
   9906 definition adds in some extra command-line options before including the
   9907 text of the old definition.
   9908 
   9909  "Spec strings" are a list of command-line options to be passed to their
   9910 corresponding program.  In addition, the spec strings can contain
   9911 `%'-prefixed sequences to substitute variable text or to conditionally
   9912 insert text into the command line.  Using these constructs it is
   9913 possible to generate quite complex command lines.
   9914 
   9915  Here is a table of all defined `%'-sequences for spec strings.  Note
   9916 that spaces are not generated automatically around the results of
   9917 expanding these sequences.  Therefore you can concatenate them together
   9918 or combine them with constant text in a single argument.
   9919 
   9920 `%%'
   9921      Substitute one `%' into the program name or argument.
   9922 
   9923 `%i'
   9924      Substitute the name of the input file being processed.
   9925 
   9926 `%b'
   9927      Substitute the basename of the input file being processed.  This
   9928      is the substring up to (and not including) the last period and not
   9929      including the directory.
   9930 
   9931 `%B'
   9932      This is the same as `%b', but include the file suffix (text after
   9933      the last period).
   9934 
   9935 `%d'
   9936      Marks the argument containing or following the `%d' as a temporary
   9937      file name, so that that file will be deleted if GCC exits
   9938      successfully.  Unlike `%g', this contributes no text to the
   9939      argument.
   9940 
   9941 `%gSUFFIX'
   9942      Substitute a file name that has suffix SUFFIX and is chosen once
   9943      per compilation, and mark the argument in the same way as `%d'.
   9944      To reduce exposure to denial-of-service attacks, the file name is
   9945      now chosen in a way that is hard to predict even when previously
   9946      chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
   9947      might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
   9948      matches the regexp `[.A-Za-z]*' or the special string `%O', which
   9949      is treated exactly as if `%O' had been preprocessed.  Previously,
   9950      `%g' was simply substituted with a file name chosen once per
   9951      compilation, without regard to any appended suffix (which was
   9952      therefore treated just like ordinary text), making such attacks
   9953      more likely to succeed.
   9954 
   9955 `%uSUFFIX'
   9956      Like `%g', but generates a new temporary file name even if
   9957      `%uSUFFIX' was already seen.
   9958 
   9959 `%USUFFIX'
   9960      Substitutes the last file name generated with `%uSUFFIX',
   9961      generating a new one if there is no such last file name.  In the
   9962      absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
   9963      they don't share the same suffix _space_, so `%g.s ... %U.s ...
   9964      %g.s ... %U.s' would involve the generation of two distinct file
   9965      names, one for each `%g.s' and another for each `%U.s'.
   9966      Previously, `%U' was simply substituted with a file name chosen
   9967      for the previous `%u', without regard to any appended suffix.
   9968 
   9969 `%jSUFFIX'
   9970      Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
   9971      writable, and if save-temps is off; otherwise, substitute the name
   9972      of a temporary file, just like `%u'.  This temporary file is not
   9973      meant for communication between processes, but rather as a junk
   9974      disposal mechanism.
   9975 
   9976 `%|SUFFIX'
   9977 `%mSUFFIX'
   9978      Like `%g', except if `-pipe' is in effect.  In that case `%|'
   9979      substitutes a single dash and `%m' substitutes nothing at all.
   9980      These are the two most common ways to instruct a program that it
   9981      should read from standard input or write to standard output.  If
   9982      you need something more elaborate you can use an `%{pipe:`X'}'
   9983      construct: see for example `f/lang-specs.h'.
   9984 
   9985 `%.SUFFIX'
   9986      Substitutes .SUFFIX for the suffixes of a matched switch's args
   9987      when it is subsequently output with `%*'.  SUFFIX is terminated by
   9988      the next space or %.
   9989 
   9990 `%w'
   9991      Marks the argument containing or following the `%w' as the
   9992      designated output file of this compilation.  This puts the argument
   9993      into the sequence of arguments that `%o' will substitute later.
   9994 
   9995 `%o'
   9996      Substitutes the names of all the output files, with spaces
   9997      automatically placed around them.  You should write spaces around
   9998      the `%o' as well or the results are undefined.  `%o' is for use in
   9999      the specs for running the linker.  Input files whose names have no
   10000      recognized suffix are not compiled at all, but they are included
   10001      among the output files, so they will be linked.
   10002 
   10003 `%O'
   10004      Substitutes the suffix for object files.  Note that this is
   10005      handled specially when it immediately follows `%g, %u, or %U',
   10006      because of the need for those to form complete file names.  The
   10007      handling is such that `%O' is treated exactly as if it had already
   10008      been substituted, except that `%g, %u, and %U' do not currently
   10009      support additional SUFFIX characters following `%O' as they would
   10010      following, for example, `.o'.
   10011 
   10012 `%p'
   10013      Substitutes the standard macro predefinitions for the current
   10014      target machine.  Use this when running `cpp'.
   10015 
   10016 `%P'
   10017      Like `%p', but puts `__' before and after the name of each
   10018      predefined macro, except for macros that start with `__' or with
   10019      `_L', where L is an uppercase letter.  This is for ISO C.
   10020 
   10021 `%I'
   10022      Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
   10023      `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
   10024      from `COMPILER_PATH' and `-B' options) and `-imultilib' as
   10025      necessary.
   10026 
   10027 `%s'
   10028      Current argument is the name of a library or startup file of some
   10029      sort.  Search for that file in a standard list of directories and
   10030      substitute the full name found.  The current working directory is
   10031      included in the list of directories scanned.
   10032 
   10033 `%T'
   10034      Current argument is the name of a linker script.  Search for that
   10035      file in the current list of directories to scan for libraries. If
   10036      the file is located insert a `--script' option into the command
   10037      line followed by the full path name found.  If the file is not
   10038      found then generate an error message.  Note: the current working
   10039      directory is not searched.
   10040 
   10041 `%eSTR'
   10042      Print STR as an error message.  STR is terminated by a newline.
   10043      Use this when inconsistent options are detected.
   10044 
   10045 `%(NAME)'
   10046      Substitute the contents of spec string NAME at this point.
   10047 
   10048 `%[NAME]'
   10049      Like `%(...)' but put `__' around `-D' arguments.
   10050 
   10051 `%x{OPTION}'
   10052      Accumulate an option for `%X'.
   10053 
   10054 `%X'
   10055      Output the accumulated linker options specified by `-Wl' or a `%x'
   10056      spec string.
   10057 
   10058 `%Y'
   10059      Output the accumulated assembler options specified by `-Wa'.
   10060 
   10061 `%Z'
   10062      Output the accumulated preprocessor options specified by `-Wp'.
   10063 
   10064 `%a'
   10065      Process the `asm' spec.  This is used to compute the switches to
   10066      be passed to the assembler.
   10067 
   10068 `%A'
   10069      Process the `asm_final' spec.  This is a spec string for passing
   10070      switches to an assembler post-processor, if such a program is
   10071      needed.
   10072 
   10073 `%l'
   10074      Process the `link' spec.  This is the spec for computing the
   10075      command line passed to the linker.  Typically it will make use of
   10076      the `%L %G %S %D and %E' sequences.
   10077 
   10078 `%D'
   10079      Dump out a `-L' option for each directory that GCC believes might
   10080      contain startup files.  If the target supports multilibs then the
   10081      current multilib directory will be prepended to each of these
   10082      paths.
   10083 
   10084 `%L'
   10085      Process the `lib' spec.  This is a spec string for deciding which
   10086      libraries should be included on the command line to the linker.
   10087 
   10088 `%G'
   10089      Process the `libgcc' spec.  This is a spec string for deciding
   10090      which GCC support library should be included on the command line
   10091      to the linker.
   10092 
   10093 `%S'
   10094      Process the `startfile' spec.  This is a spec for deciding which
   10095      object files should be the first ones passed to the linker.
   10096      Typically this might be a file named `crt0.o'.
   10097 
   10098 `%E'
   10099      Process the `endfile' spec.  This is a spec string that specifies
   10100      the last object files that will be passed to the linker.
   10101 
   10102 `%C'
   10103      Process the `cpp' spec.  This is used to construct the arguments
   10104      to be passed to the C preprocessor.
   10105 
   10106 `%1'
   10107      Process the `cc1' spec.  This is used to construct the options to
   10108      be passed to the actual C compiler (`cc1').
   10109 
   10110 `%2'
   10111      Process the `cc1plus' spec.  This is used to construct the options
   10112      to be passed to the actual C++ compiler (`cc1plus').
   10113 
   10114 `%*'
   10115      Substitute the variable part of a matched option.  See below.
   10116      Note that each comma in the substituted string is replaced by a
   10117      single space.
   10118 
   10119 `%<`S''
   10120      Remove all occurrences of `-S' from the command line.  Note--this
   10121      command is position dependent.  `%' commands in the spec string
   10122      before this one will see `-S', `%' commands in the spec string
   10123      after this one will not.
   10124 
   10125 `%:FUNCTION(ARGS)'
   10126      Call the named function FUNCTION, passing it ARGS.  ARGS is first
   10127      processed as a nested spec string, then split into an argument
   10128      vector in the usual fashion.  The function returns a string which
   10129      is processed as if it had appeared literally as part of the
   10130      current spec.
   10131 
   10132      The following built-in spec functions are provided:
   10133 
   10134     ``getenv''
   10135           The `getenv' spec function takes two arguments: an environment
   10136           variable name and a string.  If the environment variable is
   10137           not defined, a fatal error is issued.  Otherwise, the return
   10138           value is the value of the environment variable concatenated
   10139           with the string.  For example, if `TOPDIR' is defined as
   10140           `/path/to/top', then:
   10141 
   10142                %:getenv(TOPDIR /include)
   10143 
   10144           expands to `/path/to/top/include'.
   10145 
   10146     ``if-exists''
   10147           The `if-exists' spec function takes one argument, an absolute
   10148           pathname to a file.  If the file exists, `if-exists' returns
   10149           the pathname.  Here is a small example of its usage:
   10150 
   10151                *startfile:
   10152                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
   10153 
   10154     ``if-exists-else''
   10155           The `if-exists-else' spec function is similar to the
   10156           `if-exists' spec function, except that it takes two
   10157           arguments.  The first argument is an absolute pathname to a
   10158           file.  If the file exists, `if-exists-else' returns the
   10159           pathname.  If it does not exist, it returns the second
   10160           argument.  This way, `if-exists-else' can be used to select
   10161           one file or another, based on the existence of the first.
   10162           Here is a small example of its usage:
   10163 
   10164                *startfile:
   10165                crt0%O%s %:if-exists(crti%O%s) \
   10166                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
   10167 
   10168     ``replace-outfile''
   10169           The `replace-outfile' spec function takes two arguments.  It
   10170           looks for the first argument in the outfiles array and
   10171           replaces it with the second argument.  Here is a small
   10172           example of its usage:
   10173 
   10174                %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
   10175 
   10176     ``remove-outfile''
   10177           The `remove-outfile' spec function takes one argument.  It
   10178           looks for the first argument in the outfiles array and
   10179           removes it.  Here is a small example its usage:
   10180 
   10181                %:remove-outfile(-lm)
   10182 
   10183     ``pass-through-libs''
   10184           The `pass-through-libs' spec function takes any number of
   10185           arguments.  It finds any `-l' options and any non-options
   10186           ending in ".a" (which it assumes are the names of linker
   10187           input library archive files) and returns a result containing
   10188           all the found arguments each prepended by
   10189           `-plugin-opt=-pass-through=' and joined by spaces.  This list
   10190           is intended to be passed to the LTO linker plugin.
   10191 
   10192                %:pass-through-libs(%G %L %G)
   10193 
   10194     ``print-asm-header''
   10195           The `print-asm-header' function takes no arguments and simply
   10196           prints a banner like:
   10197 
   10198                Assembler options
   10199                =================
   10200 
   10201                Use "-Wa,OPTION" to pass "OPTION" to the assembler.
   10202 
   10203           It is used to separate compiler options from assembler options
   10204           in the `--target-help' output.
   10205 
   10206 `%{`S'}'
   10207      Substitutes the `-S' switch, if that switch was given to GCC.  If
   10208      that switch was not specified, this substitutes nothing.  Note that
   10209      the leading dash is omitted when specifying this option, and it is
   10210      automatically inserted if the substitution is performed.  Thus the
   10211      spec string `%{foo}' would match the command-line option `-foo'
   10212      and would output the command line option `-foo'.
   10213 
   10214 `%W{`S'}'
   10215      Like %{`S'} but mark last argument supplied within as a file to be
   10216      deleted on failure.
   10217 
   10218 `%{`S'*}'
   10219      Substitutes all the switches specified to GCC whose names start
   10220      with `-S', but which also take an argument.  This is used for
   10221      switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
   10222      being one switch whose names starts with `o'.  %{o*} would
   10223      substitute this text, including the space.  Thus two arguments
   10224      would be generated.
   10225 
   10226 `%{`S'*&`T'*}'
   10227      Like %{`S'*}, but preserve order of `S' and `T' options (the order
   10228      of `S' and `T' in the spec is not significant).  There can be any
   10229      number of ampersand-separated variables; for each the wild card is
   10230      optional.  Useful for CPP as `%{D*&U*&A*}'.
   10231 
   10232 `%{`S':`X'}'
   10233      Substitutes `X', if the `-S' switch was given to GCC.
   10234 
   10235 `%{!`S':`X'}'
   10236      Substitutes `X', if the `-S' switch was _not_ given to GCC.
   10237 
   10238 `%{`S'*:`X'}'
   10239      Substitutes `X' if one or more switches whose names start with
   10240      `-S' are specified to GCC.  Normally `X' is substituted only once,
   10241      no matter how many such switches appeared.  However, if `%*'
   10242      appears somewhere in `X', then `X' will be substituted once for
   10243      each matching switch, with the `%*' replaced by the part of that
   10244      switch that matched the `*'.
   10245 
   10246 `%{.`S':`X'}'
   10247      Substitutes `X', if processing a file with suffix `S'.
   10248 
   10249 `%{!.`S':`X'}'
   10250      Substitutes `X', if _not_ processing a file with suffix `S'.
   10251 
   10252 `%{,`S':`X'}'
   10253      Substitutes `X', if processing a file for language `S'.
   10254 
   10255 `%{!,`S':`X'}'
   10256      Substitutes `X', if not processing a file for language `S'.
   10257 
   10258 `%{`S'|`P':`X'}'
   10259      Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
   10260      be combined with `!', `.', `,', and `*' sequences as well,
   10261      although they have a stronger binding than the `|'.  If `%*'
   10262      appears in `X', all of the alternatives must be starred, and only
   10263      the first matching alternative is substituted.
   10264 
   10265      For example, a spec string like this:
   10266 
   10267           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
   10268 
   10269      will output the following command-line options from the following
   10270      input command-line options:
   10271 
   10272           fred.c        -foo -baz
   10273           jim.d         -bar -boggle
   10274           -d fred.c     -foo -baz -boggle
   10275           -d jim.d      -bar -baz -boggle
   10276 
   10277 `%{S:X; T:Y; :D}'
   10278      If `S' was given to GCC, substitutes `X'; else if `T' was given to
   10279      GCC, substitutes `Y'; else substitutes `D'.  There can be as many
   10280      clauses as you need.  This may be combined with `.', `,', `!',
   10281      `|', and `*' as needed.
   10282 
   10283 `max-lipo-mem'
   10284      When importing auxiliary modules during profile-use, check current
   10285      memory consumption after parsing each auxiliary module. If it
   10286      exceeds this limit (specified in kb), don't import any more
   10287      auxiliary modules.  Specifying a value of 0 means don't enforce
   10288      this limit. This parameter is only useful when using
   10289      `-fprofile-use' and `-fripa'.
   10290 
   10291 
   10292  The conditional text `X' in a %{`S':`X'} or similar construct may
   10293 contain other nested `%' constructs or spaces, or even newlines.  They
   10294 are processed as usual, as described above.  Trailing white space in
   10295 `X' is ignored.  White space may also appear anywhere on the left side
   10296 of the colon in these constructs, except between `.' or `*' and the
   10297 corresponding word.
   10298 
   10299  The `-O', `-f', `-m', and `-W' switches are handled specifically in
   10300 these constructs.  If another value of `-O' or the negated form of a
   10301 `-f', `-m', or `-W' switch is found later in the command line, the
   10302 earlier switch value is ignored, except with {`S'*} where `S' is just
   10303 one letter, which passes all matching options.
   10304 
   10305  The character `|' at the beginning of the predicate text is used to
   10306 indicate that a command should be piped to the following command, but
   10307 only if `-pipe' is specified.
   10308 
   10309  It is built into GCC which switches take arguments and which do not.
   10310 (You might think it would be useful to generalize this to allow each
   10311 compiler's spec to say which switches take arguments.  But this cannot
   10312 be done in a consistent fashion.  GCC cannot even decide which input
   10313 files have been specified without knowing which switches take arguments,
   10314 and it must know which input files to compile in order to tell which
   10315 compilers to run).
   10316 
   10317  GCC also knows implicitly that arguments starting in `-l' are to be
   10318 treated as compiler output files, and passed to the linker in their
   10319 proper position among the other output files.
   10320 
   10321 
   10322 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
   10323 
   10324 3.16 Specifying Target Machine and Compiler Version
   10325 ===================================================
   10326 
   10327 The usual way to run GCC is to run the executable called `gcc', or
   10328 `MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
   10329 version other than the one that was installed last.
   10330 
   10331 
   10332 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
   10333 
   10334 3.17 Hardware Models and Configurations
   10335 =======================================
   10336 
   10337 Each target machine types can have its own special options, starting
   10338 with `-m', to choose among various hardware models or
   10339 configurations--for example, 68010 vs 68020, floating coprocessor or
   10340 none.  A single installed version of the compiler can compile for any
   10341 model or configuration, according to the options specified.
   10342 
   10343  Some configurations of the compiler also support additional special
   10344 options, usually for compatibility with other compilers on the same
   10345 platform.
   10346 
   10347 * Menu:
   10348 
   10349 * ARC Options::
   10350 * ARM Options::
   10351 * AVR Options::
   10352 * Blackfin Options::
   10353 * CRIS Options::
   10354 * CRX Options::
   10355 * Darwin Options::
   10356 * DEC Alpha Options::
   10357 * DEC Alpha/VMS Options::
   10358 * FR30 Options::
   10359 * FRV Options::
   10360 * GNU/Linux Options::
   10361 * H8/300 Options::
   10362 * HPPA Options::
   10363 * i386 and x86-64 Options::
   10364 * i386 and x86-64 Windows Options::
   10365 * IA-64 Options::
   10366 * IA-64/VMS Options::
   10367 * LM32 Options::
   10368 * M32C Options::
   10369 * M32R/D Options::
   10370 * M680x0 Options::
   10371 * M68hc1x Options::
   10372 * MCore Options::
   10373 * MeP Options::
   10374 * MicroBlaze Options::
   10375 * MIPS Options::
   10376 * MMIX Options::
   10377 * MN10300 Options::
   10378 * PDP-11 Options::
   10379 * picoChip Options::
   10380 * PowerPC Options::
   10381 * RS/6000 and PowerPC Options::
   10382 * RX Options::
   10383 * S/390 and zSeries Options::
   10384 * Score Options::
   10385 * SH Options::
   10386 * Solaris 2 Options::
   10387 * SPARC Options::
   10388 * SPU Options::
   10389 * System V Options::
   10390 * V850 Options::
   10391 * VAX Options::
   10392 * VxWorks Options::
   10393 * x86-64 Options::
   10394 * Xstormy16 Options::
   10395 * Xtensa Options::
   10396 * zSeries Options::
   10397 
   10398 
   10399 File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
   10400 
   10401 3.17.1 ARC Options
   10402 ------------------
   10403 
   10404 These options are defined for ARC implementations:
   10405 
   10406 `-EL'
   10407      Compile code for little endian mode.  This is the default.
   10408 
   10409 `-EB'
   10410      Compile code for big endian mode.
   10411 
   10412 `-mmangle-cpu'
   10413      Prepend the name of the CPU to all public symbol names.  In
   10414      multiple-processor systems, there are many ARC variants with
   10415      different instruction and register set characteristics.  This flag
   10416      prevents code compiled for one CPU to be linked with code compiled
   10417      for another.  No facility exists for handling variants that are
   10418      "almost identical".  This is an all or nothing option.
   10419 
   10420 `-mcpu=CPU'
   10421      Compile code for ARC variant CPU.  Which variants are supported
   10422      depend on the configuration.  All variants support `-mcpu=base',
   10423      this is the default.
   10424 
   10425 `-mtext=TEXT-SECTION'
   10426 `-mdata=DATA-SECTION'
   10427 `-mrodata=READONLY-DATA-SECTION'
   10428      Put functions, data, and readonly data in TEXT-SECTION,
   10429      DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
   10430      This can be overridden with the `section' attribute.  *Note
   10431      Variable Attributes::.
   10432 
   10433 
   10434 
   10435 File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
   10436 
   10437 3.17.2 ARM Options
   10438 ------------------
   10439 
   10440 These `-m' options are defined for Advanced RISC Machines (ARM)
   10441 architectures:
   10442 
   10443 `-mabi=NAME'
   10444      Generate code for the specified ABI.  Permissible values are:
   10445      `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
   10446 
   10447 `-mapcs-frame'
   10448      Generate a stack frame that is compliant with the ARM Procedure
   10449      Call Standard for all functions, even if this is not strictly
   10450      necessary for correct execution of the code.  Specifying
   10451      `-fomit-frame-pointer' with this option will cause the stack
   10452      frames not to be generated for leaf functions.  The default is
   10453      `-mno-apcs-frame'.
   10454 
   10455 `-mapcs'
   10456      This is a synonym for `-mapcs-frame'.
   10457 
   10458 `-mthumb-interwork'
   10459      Generate code which supports calling between the ARM and Thumb
   10460      instruction sets.  Without this option the two instruction sets
   10461      cannot be reliably used inside one program.  The default is
   10462      `-mno-thumb-interwork', since slightly larger code is generated
   10463      when `-mthumb-interwork' is specified.
   10464 
   10465 `-mno-sched-prolog'
   10466      Prevent the reordering of instructions in the function prolog, or
   10467      the merging of those instruction with the instructions in the
   10468      function's body.  This means that all functions will start with a
   10469      recognizable set of instructions (or in fact one of a choice from
   10470      a small set of different function prologues), and this information
   10471      can be used to locate the start if functions inside an executable
   10472      piece of code.  The default is `-msched-prolog'.
   10473 
   10474 `-mfloat-abi=NAME'
   10475      Specifies which floating-point ABI to use.  Permissible values
   10476      are: `soft', `softfp' and `hard'.
   10477 
   10478      Specifying `soft' causes GCC to generate output containing library
   10479      calls for floating-point operations.  `softfp' allows the
   10480      generation of code using hardware floating-point instructions, but
   10481      still uses the soft-float calling conventions.  `hard' allows
   10482      generation of floating-point instructions and uses FPU-specific
   10483      calling conventions.
   10484 
   10485      The default depends on the specific target configuration.  Note
   10486      that the hard-float and soft-float ABIs are not link-compatible;
   10487      you must compile your entire program with the same ABI, and link
   10488      with a compatible set of libraries.
   10489 
   10490 `-mhard-float'
   10491      Equivalent to `-mfloat-abi=hard'.
   10492 
   10493 `-msoft-float'
   10494      Equivalent to `-mfloat-abi=soft'.
   10495 
   10496 `-mlittle-endian'
   10497      Generate code for a processor running in little-endian mode.  This
   10498      is the default for all standard configurations.
   10499 
   10500 `-mbig-endian'
   10501      Generate code for a processor running in big-endian mode; the
   10502      default is to compile code for a little-endian processor.
   10503 
   10504 `-mwords-little-endian'
   10505      This option only applies when generating code for big-endian
   10506      processors.  Generate code for a little-endian word order but a
   10507      big-endian byte order.  That is, a byte order of the form
   10508      `32107654'.  Note: this option should only be used if you require
   10509      compatibility with code for big-endian ARM processors generated by
   10510      versions of the compiler prior to 2.8.
   10511 
   10512 `-mcpu=NAME'
   10513      This specifies the name of the target ARM processor.  GCC uses
   10514      this name to determine what kind of instructions it can emit when
   10515      generating assembly code.  Permissible names are: `arm2', `arm250',
   10516      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
   10517      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
   10518      `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500',
   10519      `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t',
   10520      `arm740t', `strongarm', `strongarm110', `strongarm1100',
   10521      `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920',
   10522      `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
   10523      `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
   10524      `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
   10525      `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s',
   10526      `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5',
   10527      `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f',
   10528      `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', `xscale',
   10529      `iwmmxt', `iwmmxt2', `ep9312'.
   10530 
   10531 `-mtune=NAME'
   10532      This option is very similar to the `-mcpu=' option, except that
   10533      instead of specifying the actual target processor type, and hence
   10534      restricting which instructions can be used, it specifies that GCC
   10535      should tune the performance of the code as if the target were of
   10536      the type specified in this option, but still choosing the
   10537      instructions that it will generate based on the CPU specified by a
   10538      `-mcpu=' option.  For some ARM implementations better performance
   10539      can be obtained by using this option.
   10540 
   10541 `-march=NAME'
   10542      This specifies the name of the target ARM architecture.  GCC uses
   10543      this name to determine what kind of instructions it can emit when
   10544      generating assembly code.  This option can be used in conjunction
   10545      with or instead of the `-mcpu=' option.  Permissible names are:
   10546      `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
   10547      `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
   10548      `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
   10549      `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'.
   10550 
   10551 `-mfpu=NAME'
   10552 `-mfpe=NUMBER'
   10553 `-mfp=NUMBER'
   10554      This specifies what floating point hardware (or hardware
   10555      emulation) is available on the target.  Permissible names are:
   10556      `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-fp16',
   10557      `vfpv3-d16', `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-fp16', `neon',
   10558      `neon-fp16', `vfpv4', `vfpv4-d16', `fpv4-sp-d16' and `neon-vfpv4'.
   10559      `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, for
   10560      compatibility with older versions of GCC.
   10561 
   10562      If `-msoft-float' is specified this specifies the format of
   10563      floating point values.
   10564 
   10565      If the selected floating-point hardware includes the NEON extension
   10566      (e.g. `-mfpu'=`neon'), note that floating-point operations will
   10567      not be used by GCC's auto-vectorization pass unless
   10568      `-funsafe-math-optimizations' is also specified.  This is because
   10569      NEON hardware does not fully implement the IEEE 754 standard for
   10570      floating-point arithmetic (in particular denormal values are
   10571      treated as zero), so the use of NEON instructions may lead to a
   10572      loss of precision.
   10573 
   10574 `-mfp16-format=NAME'
   10575      Specify the format of the `__fp16' half-precision floating-point
   10576      type.  Permissible names are `none', `ieee', and `alternative';
   10577      the default is `none', in which case the `__fp16' type is not
   10578      defined.  *Note Half-Precision::, for more information.
   10579 
   10580 `-mstructure-size-boundary=N'
   10581      The size of all structures and unions will be rounded up to a
   10582      multiple of the number of bits set by this option.  Permissible
   10583      values are 8, 32 and 64.  The default value varies for different
   10584      toolchains.  For the COFF targeted toolchain the default value is
   10585      8.  A value of 64 is only allowed if the underlying ABI supports
   10586      it.
   10587 
   10588      Specifying the larger number can produce faster, more efficient
   10589      code, but can also increase the size of the program.  Different
   10590      values are potentially incompatible.  Code compiled with one value
   10591      cannot necessarily expect to work with code or libraries compiled
   10592      with another value, if they exchange information using structures
   10593      or unions.
   10594 
   10595 `-mabort-on-noreturn'
   10596      Generate a call to the function `abort' at the end of a `noreturn'
   10597      function.  It will be executed if the function tries to return.
   10598 
   10599 `-mlong-calls'
   10600 `-mno-long-calls'
   10601      Tells the compiler to perform function calls by first loading the
   10602      address of the function into a register and then performing a
   10603      subroutine call on this register.  This switch is needed if the
   10604      target function will lie outside of the 64 megabyte addressing
   10605      range of the offset based version of subroutine call instruction.
   10606 
   10607      Even if this switch is enabled, not all function calls will be
   10608      turned into long calls.  The heuristic is that static functions,
   10609      functions which have the `short-call' attribute, functions that
   10610      are inside the scope of a `#pragma no_long_calls' directive and
   10611      functions whose definitions have already been compiled within the
   10612      current compilation unit, will not be turned into long calls.  The
   10613      exception to this rule is that weak function definitions,
   10614      functions with the `long-call' attribute or the `section'
   10615      attribute, and functions that are within the scope of a `#pragma
   10616      long_calls' directive, will always be turned into long calls.
   10617 
   10618      This feature is not enabled by default.  Specifying
   10619      `-mno-long-calls' will restore the default behavior, as will
   10620      placing the function calls within the scope of a `#pragma
   10621      long_calls_off' directive.  Note these switches have no effect on
   10622      how the compiler generates code to handle function calls via
   10623      function pointers.
   10624 
   10625 `-msingle-pic-base'
   10626      Treat the register used for PIC addressing as read-only, rather
   10627      than loading it in the prologue for each function.  The run-time
   10628      system is responsible for initializing this register with an
   10629      appropriate value before execution begins.
   10630 
   10631 `-mpic-register=REG'
   10632      Specify the register to be used for PIC addressing.  The default
   10633      is R10 unless stack-checking is enabled, when R9 is used.
   10634 
   10635 `-mcirrus-fix-invalid-insns'
   10636      Insert NOPs into the instruction stream to in order to work around
   10637      problems with invalid Maverick instruction combinations.  This
   10638      option is only valid if the `-mcpu=ep9312' option has been used to
   10639      enable generation of instructions for the Cirrus Maverick floating
   10640      point co-processor.  This option is not enabled by default, since
   10641      the problem is only present in older Maverick implementations.
   10642      The default can be re-enabled by use of the
   10643      `-mno-cirrus-fix-invalid-insns' switch.
   10644 
   10645 `-mpoke-function-name'
   10646      Write the name of each function into the text section, directly
   10647      preceding the function prologue.  The generated code is similar to
   10648      this:
   10649 
   10650                t0
   10651                    .ascii "arm_poke_function_name", 0
   10652                    .align
   10653                t1
   10654                    .word 0xff000000 + (t1 - t0)
   10655                arm_poke_function_name
   10656                    mov     ip, sp
   10657                    stmfd   sp!, {fp, ip, lr, pc}
   10658                    sub     fp, ip, #4
   10659 
   10660      When performing a stack backtrace, code can inspect the value of
   10661      `pc' stored at `fp + 0'.  If the trace function then looks at
   10662      location `pc - 12' and the top 8 bits are set, then we know that
   10663      there is a function name embedded immediately preceding this
   10664      location and has length `((pc[-3]) & 0xff000000)'.
   10665 
   10666 `-mthumb'
   10667      Generate code for the Thumb instruction set.  The default is to
   10668      use the 32-bit ARM instruction set.  This option automatically
   10669      enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2
   10670      instructions based on the `-mcpu=NAME' and `-march=NAME' options.
   10671      This option is not passed to the assembler. If you want to force
   10672      assembler files to be interpreted as Thumb code, either add a
   10673      `.thumb' directive to the source or pass the `-mthumb' option
   10674      directly to the assembler by prefixing it with `-Wa'.
   10675 
   10676 `-mtpcs-frame'
   10677      Generate a stack frame that is compliant with the Thumb Procedure
   10678      Call Standard for all non-leaf functions.  (A leaf function is one
   10679      that does not call any other functions.)  The default is
   10680      `-mno-tpcs-frame'.
   10681 
   10682 `-mtpcs-leaf-frame'
   10683      Generate a stack frame that is compliant with the Thumb Procedure
   10684      Call Standard for all leaf functions.  (A leaf function is one
   10685      that does not call any other functions.)  The default is
   10686      `-mno-apcs-leaf-frame'.
   10687 
   10688 `-mcallee-super-interworking'
   10689      Gives all externally visible functions in the file being compiled
   10690      an ARM instruction set header which switches to Thumb mode before
   10691      executing the rest of the function.  This allows these functions
   10692      to be called from non-interworking code.  This option is not valid
   10693      in AAPCS configurations because interworking is enabled by default.
   10694 
   10695 `-mcaller-super-interworking'
   10696      Allows calls via function pointers (including virtual functions) to
   10697      execute correctly regardless of whether the target code has been
   10698      compiled for interworking or not.  There is a small overhead in
   10699      the cost of executing a function pointer if this option is
   10700      enabled.  This option is not valid in AAPCS configurations because
   10701      interworking is enabled by default.
   10702 
   10703 `-mtp=NAME'
   10704      Specify the access model for the thread local storage pointer.
   10705      The valid models are `soft', which generates calls to
   10706      `__aeabi_read_tp', `cp15', which fetches the thread pointer from
   10707      `cp15' directly (supported in the arm6k architecture), and `auto',
   10708      which uses the best available method for the selected processor.
   10709      The default setting is `auto'.
   10710 
   10711 `-mword-relocations'
   10712      Only generate absolute relocations on word sized values (i.e.
   10713      R_ARM_ABS32).  This is enabled by default on targets (uClinux,
   10714      SymbianOS) where the runtime loader imposes this restriction, and
   10715      when `-fpic' or `-fPIC' is specified.
   10716 
   10717 `-mfix-cortex-m3-ldrd'
   10718      Some Cortex-M3 cores can cause data corruption when `ldrd'
   10719      instructions with overlapping destination and base registers are
   10720      used.  This option avoids generating these instructions.  This
   10721      option is enabled by default when `-mcpu=cortex-m3' is specified.
   10722 
   10723 
   10724 
   10725 File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
   10726 
   10727 3.17.3 AVR Options
   10728 ------------------
   10729 
   10730 These options are defined for AVR implementations:
   10731 
   10732 `-mmcu=MCU'
   10733      Specify ATMEL AVR instruction set or MCU type.
   10734 
   10735      Instruction set avr1 is for the minimal AVR core, not supported by
   10736      the C compiler, only for assembler programs (MCU types: at90s1200,
   10737      attiny10, attiny11, attiny12, attiny15, attiny28).
   10738 
   10739      Instruction set avr2 (default) is for the classic AVR core with up
   10740      to 8K program memory space (MCU types: at90s2313, at90s2323,
   10741      attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
   10742      at90s8515, at90c8534, at90s8535).
   10743 
   10744      Instruction set avr3 is for the classic AVR core with up to 128K
   10745      program memory space (MCU types: atmega103, atmega603, at43usb320,
   10746      at76c711).
   10747 
   10748      Instruction set avr4 is for the enhanced AVR core with up to 8K
   10749      program memory space (MCU types: atmega8, atmega83, atmega85).
   10750 
   10751      Instruction set avr5 is for the enhanced AVR core with up to 128K
   10752      program memory space (MCU types: atmega16, atmega161, atmega163,
   10753      atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
   10754 
   10755 `-mno-interrupts'
   10756      Generated code is not compatible with hardware interrupts.  Code
   10757      size will be smaller.
   10758 
   10759 `-mcall-prologues'
   10760      Functions prologues/epilogues expanded as call to appropriate
   10761      subroutines.  Code size will be smaller.
   10762 
   10763 `-mtiny-stack'
   10764      Change only the low 8 bits of the stack pointer.
   10765 
   10766 `-mint8'
   10767      Assume int to be 8 bit integer.  This affects the sizes of all
   10768      types: A char will be 1 byte, an int will be 1 byte, a long will
   10769      be 2 bytes and long long will be 4 bytes.  Please note that this
   10770      option does not comply to the C standards, but it will provide you
   10771      with smaller code size.
   10772 
   10773 3.17.3.1 `EIND' and Devices with more than 128k Bytes of Flash
   10774 ..............................................................
   10775 
   10776 Pointers in the implementation are 16 bits wide.  The address of a
   10777 function or label is represented as word address so that indirect jumps
   10778 and calls can address any code address in the range of 64k words.
   10779 
   10780  In order to faciliate indirect jump on devices with more than 128k
   10781 bytes of program memory space, there is a special function register
   10782 called `EIND' that serves as most significant part of the target address
   10783 when `EICALL' or `EIJMP' instructions are used.
   10784 
   10785  Indirect jumps and calls on these devices are handled as follows and
   10786 are subject to some limitations:
   10787 
   10788    * The compiler never sets `EIND'.
   10789 
   10790    * The startup code from libgcc never sets `EIND'.  Notice that
   10791      startup code is a blend of code from libgcc and avr-libc.  For the
   10792      impact of avr-libc on `EIND', see the
   10793      avr-libc user manual (http://nongnu.org/avr-libc/user-manual).
   10794 
   10795    * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP'
   10796      instructions or might read `EIND' directly.
   10797 
   10798    * The compiler assumes that `EIND' never changes during the startup
   10799      code or run of the application. In particular, `EIND' is not
   10800      saved/restored in function or interrupt service routine
   10801      prologue/epilogue.
   10802 
   10803    * It is legitimate for user-specific startup code to set up `EIND'
   10804      early, for example by means of initialization code located in
   10805      section `.init3', and thus prior to general startup code that
   10806      initializes RAM and calls constructors.
   10807 
   10808    * For indirect calls to functions and computed goto, the linker will
   10809      generate _stubs_. Stubs are jump pads sometimes also called
   10810      _trampolines_. Thus, the indirect call/jump will jump to such a
   10811      stub.  The stub contains a direct jump to the desired address.
   10812 
   10813    * Stubs will be generated automatically by the linker if the
   10814      following two conditions are met:
   10815         - The address of a label is taken by means of the `gs' modifier
   10816           (short for _generate stubs_) like so:
   10817                LDI r24, lo8(gs(FUNC))
   10818                LDI r25, hi8(gs(FUNC))
   10819 
   10820         - The final location of that label is in a code segment
   10821           _outside_ the segment where the stubs are located.
   10822 
   10823    * The compiler will emit such `gs' modifiers for code labels in the
   10824      following situations:
   10825         - Taking address of a function or code label.
   10826 
   10827         - Computed goto.
   10828 
   10829         - If prologue-save function is used, see `-mcall-prologues'
   10830           command line option.
   10831 
   10832         - Switch/case dispatch tables. If you do not want such dispatch
   10833           tables you can specify the `-fno-jump-tables' command line
   10834           option.
   10835 
   10836         - C and C++ constructors/destructors called during
   10837           startup/shutdown.
   10838 
   10839         - If the tools hit a `gs()' modifier explained above.
   10840 
   10841    * The default linker script is arranged for code with `EIND = 0'.
   10842      If code is supposed to work for a setup with `EIND != 0', a custom
   10843      linker script has to be used in order to place the sections whose
   10844      name start with `.trampolines' into the segment where `EIND'
   10845      points to.
   10846 
   10847    * Jumping to non-symbolic addresses like so is _not_ supported:
   10848 
   10849           int main (void)
   10850           {
   10851               /* Call function at word address 0x2 */
   10852               return ((int(*)(void)) 0x2)();
   10853           }
   10854 
   10855      Instead, a stub has to be set up:
   10856 
   10857           int main (void)
   10858           {
   10859               extern int func_4 (void);
   10860 
   10861               /* Call function at byte address 0x4 */
   10862               return func_4();
   10863           }
   10864 
   10865      and the application be linked with `-Wl,--defsym,func_4=0x4'.
   10866      Alternatively, `func_4' can be defined in the linker script.
   10867 
   10868 
   10869 File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
   10870 
   10871 3.17.4 Blackfin Options
   10872 -----------------------
   10873 
   10874 `-mcpu=CPU[-SIREVISION]'
   10875      Specifies the name of the target Blackfin processor.  Currently,
   10876      CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
   10877      `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
   10878      `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
   10879      `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
   10880      `bf548m', `bf549m', `bf561'.  The optional SIREVISION specifies
   10881      the silicon revision of the target Blackfin processor.  Any
   10882      workarounds available for the targeted silicon revision will be
   10883      enabled.  If SIREVISION is `none', no workarounds are enabled.  If
   10884      SIREVISION is `any', all workarounds for the targeted processor
   10885      will be enabled.  The `__SILICON_REVISION__' macro is defined to
   10886      two hexadecimal digits representing the major and minor numbers in
   10887      the silicon revision.  If SIREVISION is `none', the
   10888      `__SILICON_REVISION__' is not defined.  If SIREVISION is `any', the
   10889      `__SILICON_REVISION__' is defined to be `0xffff'.  If this
   10890      optional SIREVISION is not used, GCC assumes the latest known
   10891      silicon revision of the targeted Blackfin processor.
   10892 
   10893      Support for `bf561' is incomplete.  For `bf561', Only the
   10894      processor macro is defined.  Without this option, `bf532' is used
   10895      as the processor by default.  The corresponding predefined
   10896      processor macros for CPU is to be defined.  And for `bfin-elf'
   10897      toolchain, this causes the hardware BSP provided by libgloss to be
   10898      linked in if `-msim' is not given.
   10899 
   10900 `-msim'
   10901      Specifies that the program will be run on the simulator.  This
   10902      causes the simulator BSP provided by libgloss to be linked in.
   10903      This option has effect only for `bfin-elf' toolchain.  Certain
   10904      other options, such as `-mid-shared-library' and `-mfdpic', imply
   10905      `-msim'.
   10906 
   10907 `-momit-leaf-frame-pointer'
   10908      Don't keep the frame pointer in a register for leaf functions.
   10909      This avoids the instructions to save, set up and restore frame
   10910      pointers and makes an extra register available in leaf functions.
   10911      The option `-fomit-frame-pointer' removes the frame pointer for
   10912      all functions which might make debugging harder.
   10913 
   10914 `-mspecld-anomaly'
   10915      When enabled, the compiler will ensure that the generated code
   10916      does not contain speculative loads after jump instructions. If
   10917      this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
   10918 
   10919 `-mno-specld-anomaly'
   10920      Don't generate extra code to prevent speculative loads from
   10921      occurring.
   10922 
   10923 `-mcsync-anomaly'
   10924      When enabled, the compiler will ensure that the generated code
   10925      does not contain CSYNC or SSYNC instructions too soon after
   10926      conditional branches.  If this option is used,
   10927      `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
   10928 
   10929 `-mno-csync-anomaly'
   10930      Don't generate extra code to prevent CSYNC or SSYNC instructions
   10931      from occurring too soon after a conditional branch.
   10932 
   10933 `-mlow-64k'
   10934      When enabled, the compiler is free to take advantage of the
   10935      knowledge that the entire program fits into the low 64k of memory.
   10936 
   10937 `-mno-low-64k'
   10938      Assume that the program is arbitrarily large.  This is the default.
   10939 
   10940 `-mstack-check-l1'
   10941      Do stack checking using information placed into L1 scratchpad
   10942      memory by the uClinux kernel.
   10943 
   10944 `-mid-shared-library'
   10945      Generate code that supports shared libraries via the library ID
   10946      method.  This allows for execute in place and shared libraries in
   10947      an environment without virtual memory management.  This option
   10948      implies `-fPIC'.  With a `bfin-elf' target, this option implies
   10949      `-msim'.
   10950 
   10951 `-mno-id-shared-library'
   10952      Generate code that doesn't assume ID based shared libraries are
   10953      being used.  This is the default.
   10954 
   10955 `-mleaf-id-shared-library'
   10956      Generate code that supports shared libraries via the library ID
   10957      method, but assumes that this library or executable won't link
   10958      against any other ID shared libraries.  That allows the compiler
   10959      to use faster code for jumps and calls.
   10960 
   10961 `-mno-leaf-id-shared-library'
   10962      Do not assume that the code being compiled won't link against any
   10963      ID shared libraries.  Slower code will be generated for jump and
   10964      call insns.
   10965 
   10966 `-mshared-library-id=n'
   10967      Specified the identification number of the ID based shared library
   10968      being compiled.  Specifying a value of 0 will generate more
   10969      compact code, specifying other values will force the allocation of
   10970      that number to the current library but is no more space or time
   10971      efficient than omitting this option.
   10972 
   10973 `-msep-data'
   10974      Generate code that allows the data segment to be located in a
   10975      different area of memory from the text segment.  This allows for
   10976      execute in place in an environment without virtual memory
   10977      management by eliminating relocations against the text section.
   10978 
   10979 `-mno-sep-data'
   10980      Generate code that assumes that the data segment follows the text
   10981      segment.  This is the default.
   10982 
   10983 `-mlong-calls'
   10984 `-mno-long-calls'
   10985      Tells the compiler to perform function calls by first loading the
   10986      address of the function into a register and then performing a
   10987      subroutine call on this register.  This switch is needed if the
   10988      target function will lie outside of the 24 bit addressing range of
   10989      the offset based version of subroutine call instruction.
   10990 
   10991      This feature is not enabled by default.  Specifying
   10992      `-mno-long-calls' will restore the default behavior.  Note these
   10993      switches have no effect on how the compiler generates code to
   10994      handle function calls via function pointers.
   10995 
   10996 `-mfast-fp'
   10997      Link with the fast floating-point library. This library relaxes
   10998      some of the IEEE floating-point standard's rules for checking
   10999      inputs against Not-a-Number (NAN), in the interest of performance.
   11000 
   11001 `-minline-plt'
   11002      Enable inlining of PLT entries in function calls to functions that
   11003      are not known to bind locally.  It has no effect without `-mfdpic'.
   11004 
   11005 `-mmulticore'
   11006      Build standalone application for multicore Blackfin processor.
   11007      Proper start files and link scripts will be used to support
   11008      multicore.  This option defines `__BFIN_MULTICORE'. It can only be
   11009      used with `-mcpu=bf561[-SIREVISION]'. It can be used with
   11010      `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or
   11011      `-mcoreb', single application/dual core programming model is used.
   11012      In this model, the main function of Core B should be named as
   11013      coreb_main. If it's used with `-mcorea' or `-mcoreb', one
   11014      application per core programming model is used.  If this option is
   11015      not used, single core application programming model is used.
   11016 
   11017 `-mcorea'
   11018      Build standalone application for Core A of BF561 when using one
   11019      application per core programming model. Proper start files and
   11020      link scripts will be used to support Core A. This option defines
   11021      `__BFIN_COREA'. It must be used with `-mmulticore'.
   11022 
   11023 `-mcoreb'
   11024      Build standalone application for Core B of BF561 when using one
   11025      application per core programming model. Proper start files and
   11026      link scripts will be used to support Core B. This option defines
   11027      `__BFIN_COREB'. When this option is used, coreb_main should be
   11028      used instead of main. It must be used with `-mmulticore'.
   11029 
   11030 `-msdram'
   11031      Build standalone application for SDRAM. Proper start files and
   11032      link scripts will be used to put the application into SDRAM.
   11033      Loader should initialize SDRAM before loading the application into
   11034      SDRAM. This option defines `__BFIN_SDRAM'.
   11035 
   11036 `-micplb'
   11037      Assume that ICPLBs are enabled at runtime.  This has an effect on
   11038      certain anomaly workarounds.  For Linux targets, the default is to
   11039      assume ICPLBs are enabled; for standalone applications the default
   11040      is off.
   11041 
   11042 
   11043 File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
   11044 
   11045 3.17.5 CRIS Options
   11046 -------------------
   11047 
   11048 These options are defined specifically for the CRIS ports.
   11049 
   11050 `-march=ARCHITECTURE-TYPE'
   11051 `-mcpu=ARCHITECTURE-TYPE'
   11052      Generate code for the specified architecture.  The choices for
   11053      ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
   11054      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
   11055      cris-axis-linux-gnu, where the default is `v10'.
   11056 
   11057 `-mtune=ARCHITECTURE-TYPE'
   11058      Tune to ARCHITECTURE-TYPE everything applicable about the generated
   11059      code, except for the ABI and the set of available instructions.
   11060      The choices for ARCHITECTURE-TYPE are the same as for
   11061      `-march=ARCHITECTURE-TYPE'.
   11062 
   11063 `-mmax-stack-frame=N'
   11064      Warn when the stack frame of a function exceeds N bytes.
   11065 
   11066 `-metrax4'
   11067 `-metrax100'
   11068      The options `-metrax4' and `-metrax100' are synonyms for
   11069      `-march=v3' and `-march=v8' respectively.
   11070 
   11071 `-mmul-bug-workaround'
   11072 `-mno-mul-bug-workaround'
   11073      Work around a bug in the `muls' and `mulu' instructions for CPU
   11074      models where it applies.  This option is active by default.
   11075 
   11076 `-mpdebug'
   11077      Enable CRIS-specific verbose debug-related information in the
   11078      assembly code.  This option also has the effect to turn off the
   11079      `#NO_APP' formatted-code indicator to the assembler at the
   11080      beginning of the assembly file.
   11081 
   11082 `-mcc-init'
   11083      Do not use condition-code results from previous instruction;
   11084      always emit compare and test instructions before use of condition
   11085      codes.
   11086 
   11087 `-mno-side-effects'
   11088      Do not emit instructions with side-effects in addressing modes
   11089      other than post-increment.
   11090 
   11091 `-mstack-align'
   11092 `-mno-stack-align'
   11093 `-mdata-align'
   11094 `-mno-data-align'
   11095 `-mconst-align'
   11096 `-mno-const-align'
   11097      These options (no-options) arranges (eliminate arrangements) for
   11098      the stack-frame, individual data and constants to be aligned for
   11099      the maximum single data access size for the chosen CPU model.  The
   11100      default is to arrange for 32-bit alignment.  ABI details such as
   11101      structure layout are not affected by these options.
   11102 
   11103 `-m32-bit'
   11104 `-m16-bit'
   11105 `-m8-bit'
   11106      Similar to the stack- data- and const-align options above, these
   11107      options arrange for stack-frame, writable data and constants to
   11108      all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
   11109      alignment.
   11110 
   11111 `-mno-prologue-epilogue'
   11112 `-mprologue-epilogue'
   11113      With `-mno-prologue-epilogue', the normal function prologue and
   11114      epilogue that sets up the stack-frame are omitted and no return
   11115      instructions or return sequences are generated in the code.  Use
   11116      this option only together with visual inspection of the compiled
   11117      code: no warnings or errors are generated when call-saved
   11118      registers must be saved, or storage for local variable needs to be
   11119      allocated.
   11120 
   11121 `-mno-gotplt'
   11122 `-mgotplt'
   11123      With `-fpic' and `-fPIC', don't generate (do generate) instruction
   11124      sequences that load addresses for functions from the PLT part of
   11125      the GOT rather than (traditional on other architectures) calls to
   11126      the PLT.  The default is `-mgotplt'.
   11127 
   11128 `-melf'
   11129      Legacy no-op option only recognized with the cris-axis-elf and
   11130      cris-axis-linux-gnu targets.
   11131 
   11132 `-mlinux'
   11133      Legacy no-op option only recognized with the cris-axis-linux-gnu
   11134      target.
   11135 
   11136 `-sim'
   11137      This option, recognized for the cris-axis-elf arranges to link
   11138      with input-output functions from a simulator library.  Code,
   11139      initialized data and zero-initialized data are allocated
   11140      consecutively.
   11141 
   11142 `-sim2'
   11143      Like `-sim', but pass linker options to locate initialized data at
   11144      0x40000000 and zero-initialized data at 0x80000000.
   11145 
   11146 
   11147 File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
   11148 
   11149 3.17.6 CRX Options
   11150 ------------------
   11151 
   11152 These options are defined specifically for the CRX ports.
   11153 
   11154 `-mmac'
   11155      Enable the use of multiply-accumulate instructions. Disabled by
   11156      default.
   11157 
   11158 `-mpush-args'
   11159      Push instructions will be used to pass outgoing arguments when
   11160      functions are called. Enabled by default.
   11161 
   11162 
   11163 File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
   11164 
   11165 3.17.7 Darwin Options
   11166 ---------------------
   11167 
   11168 These options are defined for all architectures running the Darwin
   11169 operating system.
   11170 
   11171  FSF GCC on Darwin does not create "fat" object files; it will create
   11172 an object file for the single architecture that it was built to target.
   11173 Apple's GCC on Darwin does create "fat" files if multiple `-arch'
   11174 options are used; it does so by running the compiler or linker multiple
   11175 times and joining the results together with `lipo'.
   11176 
   11177  The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
   11178 is determined by the flags that specify the ISA that GCC is targetting,
   11179 like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
   11180 used to override this.
   11181 
   11182  The Darwin tools vary in their behavior when presented with an ISA
   11183 mismatch.  The assembler, `as', will only permit instructions to be
   11184 used that are valid for the subtype of the file it is generating, so
   11185 you cannot put 64-bit instructions in a `ppc750' object file.  The
   11186 linker for shared libraries, `/usr/bin/libtool', will fail and print an
   11187 error if asked to create a shared library with a less restrictive
   11188 subtype than its input files (for instance, trying to put a `ppc970'
   11189 object file in a `ppc7400' library).  The linker for executables, `ld',
   11190 will quietly give the executable the most restrictive subtype of any of
   11191 its input files.
   11192 
   11193 `-FDIR'
   11194      Add the framework directory DIR to the head of the list of
   11195      directories to be searched for header files.  These directories are
   11196      interleaved with those specified by `-I' options and are scanned
   11197      in a left-to-right order.
   11198 
   11199      A framework directory is a directory with frameworks in it.  A
   11200      framework is a directory with a `"Headers"' and/or
   11201      `"PrivateHeaders"' directory contained directly in it that ends in
   11202      `".framework"'.  The name of a framework is the name of this
   11203      directory excluding the `".framework"'.  Headers associated with
   11204      the framework are found in one of those two directories, with
   11205      `"Headers"' being searched first.  A subframework is a framework
   11206      directory that is in a framework's `"Frameworks"' directory.
   11207      Includes of subframework headers can only appear in a header of a
   11208      framework that contains the subframework, or in a sibling
   11209      subframework header.  Two subframeworks are siblings if they occur
   11210      in the same framework.  A subframework should not have the same
   11211      name as a framework, a warning will be issued if this is violated.
   11212      Currently a subframework cannot have subframeworks, in the future,
   11213      the mechanism may be extended to support this.  The standard
   11214      frameworks can be found in `"/System/Library/Frameworks"' and
   11215      `"/Library/Frameworks"'.  An example include looks like `#include
   11216      <Framework/header.h>', where `Framework' denotes the name of the
   11217      framework and header.h is found in the `"PrivateHeaders"' or
   11218      `"Headers"' directory.
   11219 
   11220 `-iframeworkDIR'
   11221      Like `-F' except the directory is a treated as a system directory.
   11222      The main difference between this `-iframework' and `-F' is that
   11223      with `-iframework' the compiler does not warn about constructs
   11224      contained within header files found via DIR.  This option is valid
   11225      only for the C family of languages.
   11226 
   11227 `-gused'
   11228      Emit debugging information for symbols that are used.  For STABS
   11229      debugging format, this enables `-feliminate-unused-debug-symbols'.
   11230      This is by default ON.
   11231 
   11232 `-gfull'
   11233      Emit debugging information for all symbols and types.
   11234 
   11235 `-mmacosx-version-min=VERSION'
   11236      The earliest version of MacOS X that this executable will run on
   11237      is VERSION.  Typical values of VERSION include `10.1', `10.2', and
   11238      `10.3.9'.
   11239 
   11240      If the compiler was built to use the system's headers by default,
   11241      then the default for this option is the system version on which the
   11242      compiler is running, otherwise the default is to make choices which
   11243      are compatible with as many systems and code bases as possible.
   11244 
   11245 `-mkernel'
   11246      Enable kernel development mode.  The `-mkernel' option sets
   11247      `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
   11248      `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
   11249      `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
   11250      `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
   11251      targets.
   11252 
   11253 `-mone-byte-bool'
   11254      Override the defaults for `bool' so that `sizeof(bool)==1'.  By
   11255      default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
   11256      and `1' when compiling for Darwin/x86, so this option has no
   11257      effect on x86.
   11258 
   11259      *Warning:* The `-mone-byte-bool' switch causes GCC to generate
   11260      code that is not binary compatible with code generated without
   11261      that switch.  Using this switch may require recompiling all other
   11262      modules in a program, including system libraries.  Use this switch
   11263      to conform to a non-default data model.
   11264 
   11265 `-mfix-and-continue'
   11266 `-ffix-and-continue'
   11267 `-findirect-data'
   11268      Generate code suitable for fast turn around development.  Needed to
   11269      enable gdb to dynamically load `.o' files into already running
   11270      programs.  `-findirect-data' and `-ffix-and-continue' are provided
   11271      for backwards compatibility.
   11272 
   11273 `-all_load'
   11274      Loads all members of static archive libraries.  See man ld(1) for
   11275      more information.
   11276 
   11277 `-arch_errors_fatal'
   11278      Cause the errors having to do with files that have the wrong
   11279      architecture to be fatal.
   11280 
   11281 `-bind_at_load'
   11282      Causes the output file to be marked such that the dynamic linker
   11283      will bind all undefined references when the file is loaded or
   11284      launched.
   11285 
   11286 `-bundle'
   11287      Produce a Mach-o bundle format file.  See man ld(1) for more
   11288      information.
   11289 
   11290 `-bundle_loader EXECUTABLE'
   11291      This option specifies the EXECUTABLE that will be loading the build
   11292      output file being linked.  See man ld(1) for more information.
   11293 
   11294 `-dynamiclib'
   11295      When passed this option, GCC will produce a dynamic library
   11296      instead of an executable when linking, using the Darwin `libtool'
   11297      command.
   11298 
   11299 `-force_cpusubtype_ALL'
   11300      This causes GCC's output file to have the ALL subtype, instead of
   11301      one controlled by the `-mcpu' or `-march' option.
   11302 
   11303 `-allowable_client  CLIENT_NAME'
   11304 `-client_name'
   11305 `-compatibility_version'
   11306 `-current_version'
   11307 `-dead_strip'
   11308 `-dependency-file'
   11309 `-dylib_file'
   11310 `-dylinker_install_name'
   11311 `-dynamic'
   11312 `-exported_symbols_list'
   11313 `-filelist'
   11314 `-flat_namespace'
   11315 `-force_flat_namespace'
   11316 `-headerpad_max_install_names'
   11317 `-image_base'
   11318 `-init'
   11319 `-install_name'
   11320 `-keep_private_externs'
   11321 `-multi_module'
   11322 `-multiply_defined'
   11323 `-multiply_defined_unused'
   11324 `-noall_load'
   11325 `-no_dead_strip_inits_and_terms'
   11326 `-nofixprebinding'
   11327 `-nomultidefs'
   11328 `-noprebind'
   11329 `-noseglinkedit'
   11330 `-pagezero_size'
   11331 `-prebind'
   11332 `-prebind_all_twolevel_modules'
   11333 `-private_bundle'
   11334 `-read_only_relocs'
   11335 `-sectalign'
   11336 `-sectobjectsymbols'
   11337 `-whyload'
   11338 `-seg1addr'
   11339 `-sectcreate'
   11340 `-sectobjectsymbols'
   11341 `-sectorder'
   11342 `-segaddr'
   11343 `-segs_read_only_addr'
   11344 `-segs_read_write_addr'
   11345 `-seg_addr_table'
   11346 `-seg_addr_table_filename'
   11347 `-seglinkedit'
   11348 `-segprot'
   11349 `-segs_read_only_addr'
   11350 `-segs_read_write_addr'
   11351 `-single_module'
   11352 `-static'
   11353 `-sub_library'
   11354 `-sub_umbrella'
   11355 `-twolevel_namespace'
   11356 `-umbrella'
   11357 `-undefined'
   11358 `-unexported_symbols_list'
   11359 `-weak_reference_mismatches'
   11360 `-whatsloaded'
   11361      These options are passed to the Darwin linker.  The Darwin linker
   11362      man page describes them in detail.
   11363 
   11364 
   11365 File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
   11366 
   11367 3.17.8 DEC Alpha Options
   11368 ------------------------
   11369 
   11370 These `-m' options are defined for the DEC Alpha implementations:
   11371 
   11372 `-mno-soft-float'
   11373 `-msoft-float'
   11374      Use (do not use) the hardware floating-point instructions for
   11375      floating-point operations.  When `-msoft-float' is specified,
   11376      functions in `libgcc.a' will be used to perform floating-point
   11377      operations.  Unless they are replaced by routines that emulate the
   11378      floating-point operations, or compiled in such a way as to call
   11379      such emulations routines, these routines will issue floating-point
   11380      operations.   If you are compiling for an Alpha without
   11381      floating-point operations, you must ensure that the library is
   11382      built so as not to call them.
   11383 
   11384      Note that Alpha implementations without floating-point operations
   11385      are required to have floating-point registers.
   11386 
   11387 `-mfp-reg'
   11388 `-mno-fp-regs'
   11389      Generate code that uses (does not use) the floating-point register
   11390      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
   11391      register set is not used, floating point operands are passed in
   11392      integer registers as if they were integers and floating-point
   11393      results are passed in `$0' instead of `$f0'.  This is a
   11394      non-standard calling sequence, so any function with a
   11395      floating-point argument or return value called by code compiled
   11396      with `-mno-fp-regs' must also be compiled with that option.
   11397 
   11398      A typical use of this option is building a kernel that does not
   11399      use, and hence need not save and restore, any floating-point
   11400      registers.
   11401 
   11402 `-mieee'
   11403      The Alpha architecture implements floating-point hardware
   11404      optimized for maximum performance.  It is mostly compliant with
   11405      the IEEE floating point standard.  However, for full compliance,
   11406      software assistance is required.  This option generates code fully
   11407      IEEE compliant code _except_ that the INEXACT-FLAG is not
   11408      maintained (see below).  If this option is turned on, the
   11409      preprocessor macro `_IEEE_FP' is defined during compilation.  The
   11410      resulting code is less efficient but is able to correctly support
   11411      denormalized numbers and exceptional IEEE values such as
   11412      not-a-number and plus/minus infinity.  Other Alpha compilers call
   11413      this option `-ieee_with_no_inexact'.
   11414 
   11415 `-mieee-with-inexact'
   11416      This is like `-mieee' except the generated code also maintains the
   11417      IEEE INEXACT-FLAG.  Turning on this option causes the generated
   11418      code to implement fully-compliant IEEE math.  In addition to
   11419      `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
   11420      On some Alpha implementations the resulting code may execute
   11421      significantly slower than the code generated by default.  Since
   11422      there is very little code that depends on the INEXACT-FLAG, you
   11423      should normally not specify this option.  Other Alpha compilers
   11424      call this option `-ieee_with_inexact'.
   11425 
   11426 `-mfp-trap-mode=TRAP-MODE'
   11427      This option controls what floating-point related traps are enabled.
   11428      Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
   11429      trap mode can be set to one of four values:
   11430 
   11431     `n'
   11432           This is the default (normal) setting.  The only traps that
   11433           are enabled are the ones that cannot be disabled in software
   11434           (e.g., division by zero trap).
   11435 
   11436     `u'
   11437           In addition to the traps enabled by `n', underflow traps are
   11438           enabled as well.
   11439 
   11440     `su'
   11441           Like `u', but the instructions are marked to be safe for
   11442           software completion (see Alpha architecture manual for
   11443           details).
   11444 
   11445     `sui'
   11446           Like `su', but inexact traps are enabled as well.
   11447 
   11448 `-mfp-rounding-mode=ROUNDING-MODE'
   11449      Selects the IEEE rounding mode.  Other Alpha compilers call this
   11450      option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
   11451 
   11452     `n'
   11453           Normal IEEE rounding mode.  Floating point numbers are
   11454           rounded towards the nearest machine number or towards the
   11455           even machine number in case of a tie.
   11456 
   11457     `m'
   11458           Round towards minus infinity.
   11459 
   11460     `c'
   11461           Chopped rounding mode.  Floating point numbers are rounded
   11462           towards zero.
   11463 
   11464     `d'
   11465           Dynamic rounding mode.  A field in the floating point control
   11466           register (FPCR, see Alpha architecture reference manual)
   11467           controls the rounding mode in effect.  The C library
   11468           initializes this register for rounding towards plus infinity.
   11469           Thus, unless your program modifies the FPCR, `d' corresponds
   11470           to round towards plus infinity.
   11471 
   11472 `-mtrap-precision=TRAP-PRECISION'
   11473      In the Alpha architecture, floating point traps are imprecise.
   11474      This means without software assistance it is impossible to recover
   11475      from a floating trap and program execution normally needs to be
   11476      terminated.  GCC can generate code that can assist operating
   11477      system trap handlers in determining the exact location that caused
   11478      a floating point trap.  Depending on the requirements of an
   11479      application, different levels of precisions can be selected:
   11480 
   11481     `p'
   11482           Program precision.  This option is the default and means a
   11483           trap handler can only identify which program caused a
   11484           floating point exception.
   11485 
   11486     `f'
   11487           Function precision.  The trap handler can determine the
   11488           function that caused a floating point exception.
   11489 
   11490     `i'
   11491           Instruction precision.  The trap handler can determine the
   11492           exact instruction that caused a floating point exception.
   11493 
   11494      Other Alpha compilers provide the equivalent options called
   11495      `-scope_safe' and `-resumption_safe'.
   11496 
   11497 `-mieee-conformant'
   11498      This option marks the generated code as IEEE conformant.  You must
   11499      not use this option unless you also specify `-mtrap-precision=i'
   11500      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
   11501      effect is to emit the line `.eflag 48' in the function prologue of
   11502      the generated assembly file.  Under DEC Unix, this has the effect
   11503      that IEEE-conformant math library routines will be linked in.
   11504 
   11505 `-mbuild-constants'
   11506      Normally GCC examines a 32- or 64-bit integer constant to see if
   11507      it can construct it from smaller constants in two or three
   11508      instructions.  If it cannot, it will output the constant as a
   11509      literal and generate code to load it from the data segment at
   11510      runtime.
   11511 
   11512      Use this option to require GCC to construct _all_ integer constants
   11513      using code, even if it takes more instructions (the maximum is
   11514      six).
   11515 
   11516      You would typically use this option to build a shared library
   11517      dynamic loader.  Itself a shared library, it must relocate itself
   11518      in memory before it can find the variables and constants in its
   11519      own data segment.
   11520 
   11521 `-malpha-as'
   11522 `-mgas'
   11523      Select whether to generate code to be assembled by the
   11524      vendor-supplied assembler (`-malpha-as') or by the GNU assembler
   11525      `-mgas'.
   11526 
   11527 `-mbwx'
   11528 `-mno-bwx'
   11529 `-mcix'
   11530 `-mno-cix'
   11531 `-mfix'
   11532 `-mno-fix'
   11533 `-mmax'
   11534 `-mno-max'
   11535      Indicate whether GCC should generate code to use the optional BWX,
   11536      CIX, FIX and MAX instruction sets.  The default is to use the
   11537      instruction sets supported by the CPU type specified via `-mcpu='
   11538      option or that of the CPU on which GCC was built if none was
   11539      specified.
   11540 
   11541 `-mfloat-vax'
   11542 `-mfloat-ieee'
   11543      Generate code that uses (does not use) VAX F and G floating point
   11544      arithmetic instead of IEEE single and double precision.
   11545 
   11546 `-mexplicit-relocs'
   11547 `-mno-explicit-relocs'
   11548      Older Alpha assemblers provided no way to generate symbol
   11549      relocations except via assembler macros.  Use of these macros does
   11550      not allow optimal instruction scheduling.  GNU binutils as of
   11551      version 2.12 supports a new syntax that allows the compiler to
   11552      explicitly mark which relocations should apply to which
   11553      instructions.  This option is mostly useful for debugging, as GCC
   11554      detects the capabilities of the assembler when it is built and
   11555      sets the default accordingly.
   11556 
   11557 `-msmall-data'
   11558 `-mlarge-data'
   11559      When `-mexplicit-relocs' is in effect, static data is accessed via
   11560      "gp-relative" relocations.  When `-msmall-data' is used, objects 8
   11561      bytes long or smaller are placed in a "small data area" (the
   11562      `.sdata' and `.sbss' sections) and are accessed via 16-bit
   11563      relocations off of the `$gp' register.  This limits the size of
   11564      the small data area to 64KB, but allows the variables to be
   11565      directly accessed via a single instruction.
   11566 
   11567      The default is `-mlarge-data'.  With this option the data area is
   11568      limited to just below 2GB.  Programs that require more than 2GB of
   11569      data must use `malloc' or `mmap' to allocate the data in the heap
   11570      instead of in the program's data segment.
   11571 
   11572      When generating code for shared libraries, `-fpic' implies
   11573      `-msmall-data' and `-fPIC' implies `-mlarge-data'.
   11574 
   11575 `-msmall-text'
   11576 `-mlarge-text'
   11577      When `-msmall-text' is used, the compiler assumes that the code of
   11578      the entire program (or shared library) fits in 4MB, and is thus
   11579      reachable with a branch instruction.  When `-msmall-data' is used,
   11580      the compiler can assume that all local symbols share the same
   11581      `$gp' value, and thus reduce the number of instructions required
   11582      for a function call from 4 to 1.
   11583 
   11584      The default is `-mlarge-text'.
   11585 
   11586 `-mcpu=CPU_TYPE'
   11587      Set the instruction set and instruction scheduling parameters for
   11588      machine type CPU_TYPE.  You can specify either the `EV' style name
   11589      or the corresponding chip number.  GCC supports scheduling
   11590      parameters for the EV4, EV5 and EV6 family of processors and will
   11591      choose the default values for the instruction set from the
   11592      processor you specify.  If you do not specify a processor type,
   11593      GCC will default to the processor on which the compiler was built.
   11594 
   11595      Supported values for CPU_TYPE are
   11596 
   11597     `ev4'
   11598     `ev45'
   11599     `21064'
   11600           Schedules as an EV4 and has no instruction set extensions.
   11601 
   11602     `ev5'
   11603     `21164'
   11604           Schedules as an EV5 and has no instruction set extensions.
   11605 
   11606     `ev56'
   11607     `21164a'
   11608           Schedules as an EV5 and supports the BWX extension.
   11609 
   11610     `pca56'
   11611     `21164pc'
   11612     `21164PC'
   11613           Schedules as an EV5 and supports the BWX and MAX extensions.
   11614 
   11615     `ev6'
   11616     `21264'
   11617           Schedules as an EV6 and supports the BWX, FIX, and MAX
   11618           extensions.
   11619 
   11620     `ev67'
   11621     `21264a'
   11622           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
   11623           extensions.
   11624 
   11625      Native Linux/GNU toolchains also support the value `native', which
   11626      selects the best architecture option for the host processor.
   11627      `-mcpu=native' has no effect if GCC does not recognize the
   11628      processor.
   11629 
   11630 `-mtune=CPU_TYPE'
   11631      Set only the instruction scheduling parameters for machine type
   11632      CPU_TYPE.  The instruction set is not changed.
   11633 
   11634      Native Linux/GNU toolchains also support the value `native', which
   11635      selects the best architecture option for the host processor.
   11636      `-mtune=native' has no effect if GCC does not recognize the
   11637      processor.
   11638 
   11639 `-mmemory-latency=TIME'
   11640      Sets the latency the scheduler should assume for typical memory
   11641      references as seen by the application.  This number is highly
   11642      dependent on the memory access patterns used by the application
   11643      and the size of the external cache on the machine.
   11644 
   11645      Valid options for TIME are
   11646 
   11647     `NUMBER'
   11648           A decimal number representing clock cycles.
   11649 
   11650     `L1'
   11651     `L2'
   11652     `L3'
   11653     `main'
   11654           The compiler contains estimates of the number of clock cycles
   11655           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
   11656           (also called Dcache, Scache, and Bcache), as well as to main
   11657           memory.  Note that L3 is only valid for EV5.
   11658 
   11659 
   11660 
   11661 File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
   11662 
   11663 3.17.9 DEC Alpha/VMS Options
   11664 ----------------------------
   11665 
   11666 These `-m' options are defined for the DEC Alpha/VMS implementations:
   11667 
   11668 `-mvms-return-codes'
   11669      Return VMS condition codes from main.  The default is to return
   11670      POSIX style condition (e.g. error) codes.
   11671 
   11672 `-mdebug-main=PREFIX'
   11673      Flag the first routine whose name starts with PREFIX as the main
   11674      routine for the debugger.
   11675 
   11676 `-mmalloc64'
   11677      Default to 64bit memory allocation routines.
   11678 
   11679 
   11680 File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
   11681 
   11682 3.17.10 FR30 Options
   11683 --------------------
   11684 
   11685 These options are defined specifically for the FR30 port.
   11686 
   11687 `-msmall-model'
   11688      Use the small address space model.  This can produce smaller code,
   11689      but it does assume that all symbolic values and addresses will fit
   11690      into a 20-bit range.
   11691 
   11692 `-mno-lsim'
   11693      Assume that run-time support has been provided and so there is no
   11694      need to include the simulator library (`libsim.a') on the linker
   11695      command line.
   11696 
   11697 
   11698 
   11699 File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
   11700 
   11701 3.17.11 FRV Options
   11702 -------------------
   11703 
   11704 `-mgpr-32'
   11705      Only use the first 32 general purpose registers.
   11706 
   11707 `-mgpr-64'
   11708      Use all 64 general purpose registers.
   11709 
   11710 `-mfpr-32'
   11711      Use only the first 32 floating point registers.
   11712 
   11713 `-mfpr-64'
   11714      Use all 64 floating point registers
   11715 
   11716 `-mhard-float'
   11717      Use hardware instructions for floating point operations.
   11718 
   11719 `-msoft-float'
   11720      Use library routines for floating point operations.
   11721 
   11722 `-malloc-cc'
   11723      Dynamically allocate condition code registers.
   11724 
   11725 `-mfixed-cc'
   11726      Do not try to dynamically allocate condition code registers, only
   11727      use `icc0' and `fcc0'.
   11728 
   11729 `-mdword'
   11730      Change ABI to use double word insns.
   11731 
   11732 `-mno-dword'
   11733      Do not use double word instructions.
   11734 
   11735 `-mdouble'
   11736      Use floating point double instructions.
   11737 
   11738 `-mno-double'
   11739      Do not use floating point double instructions.
   11740 
   11741 `-mmedia'
   11742      Use media instructions.
   11743 
   11744 `-mno-media'
   11745      Do not use media instructions.
   11746 
   11747 `-mmuladd'
   11748      Use multiply and add/subtract instructions.
   11749 
   11750 `-mno-muladd'
   11751      Do not use multiply and add/subtract instructions.
   11752 
   11753 `-mfdpic'
   11754      Select the FDPIC ABI, that uses function descriptors to represent
   11755      pointers to functions.  Without any PIC/PIE-related options, it
   11756      implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
   11757      and small data are within a 12-bit range from the GOT base
   11758      address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
   11759      bits.  With a `bfin-elf' target, this option implies `-msim'.
   11760 
   11761 `-minline-plt'
   11762      Enable inlining of PLT entries in function calls to functions that
   11763      are not known to bind locally.  It has no effect without `-mfdpic'.
   11764      It's enabled by default if optimizing for speed and compiling for
   11765      shared libraries (i.e., `-fPIC' or `-fpic'), or when an
   11766      optimization option such as `-O3' or above is present in the
   11767      command line.
   11768 
   11769 `-mTLS'
   11770      Assume a large TLS segment when generating thread-local code.
   11771 
   11772 `-mtls'
   11773      Do not assume a large TLS segment when generating thread-local
   11774      code.
   11775 
   11776 `-mgprel-ro'
   11777      Enable the use of `GPREL' relocations in the FDPIC ABI for data
   11778      that is known to be in read-only sections.  It's enabled by
   11779      default, except for `-fpic' or `-fpie': even though it may help
   11780      make the global offset table smaller, it trades 1 instruction for
   11781      4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
   11782      of which may be shared by multiple symbols, and it avoids the need
   11783      for a GOT entry for the referenced symbol, so it's more likely to
   11784      be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
   11785 
   11786 `-multilib-library-pic'
   11787      Link with the (library, not FD) pic libraries.  It's implied by
   11788      `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
   11789      `-mfdpic'.  You should never have to use it explicitly.
   11790 
   11791 `-mlinked-fp'
   11792      Follow the EABI requirement of always creating a frame pointer
   11793      whenever a stack frame is allocated.  This option is enabled by
   11794      default and can be disabled with `-mno-linked-fp'.
   11795 
   11796 `-mlong-calls'
   11797      Use indirect addressing to call functions outside the current
   11798      compilation unit.  This allows the functions to be placed anywhere
   11799      within the 32-bit address space.
   11800 
   11801 `-malign-labels'
   11802      Try to align labels to an 8-byte boundary by inserting nops into
   11803      the previous packet.  This option only has an effect when VLIW
   11804      packing is enabled.  It doesn't create new packets; it merely adds
   11805      nops to existing ones.
   11806 
   11807 `-mlibrary-pic'
   11808      Generate position-independent EABI code.
   11809 
   11810 `-macc-4'
   11811      Use only the first four media accumulator registers.
   11812 
   11813 `-macc-8'
   11814      Use all eight media accumulator registers.
   11815 
   11816 `-mpack'
   11817      Pack VLIW instructions.
   11818 
   11819 `-mno-pack'
   11820      Do not pack VLIW instructions.
   11821 
   11822 `-mno-eflags'
   11823      Do not mark ABI switches in e_flags.
   11824 
   11825 `-mcond-move'
   11826      Enable the use of conditional-move instructions (default).
   11827 
   11828      This switch is mainly for debugging the compiler and will likely
   11829      be removed in a future version.
   11830 
   11831 `-mno-cond-move'
   11832      Disable the use of conditional-move instructions.
   11833 
   11834      This switch is mainly for debugging the compiler and will likely
   11835      be removed in a future version.
   11836 
   11837 `-mscc'
   11838      Enable the use of conditional set instructions (default).
   11839 
   11840      This switch is mainly for debugging the compiler and will likely
   11841      be removed in a future version.
   11842 
   11843 `-mno-scc'
   11844      Disable the use of conditional set instructions.
   11845 
   11846      This switch is mainly for debugging the compiler and will likely
   11847      be removed in a future version.
   11848 
   11849 `-mcond-exec'
   11850      Enable the use of conditional execution (default).
   11851 
   11852      This switch is mainly for debugging the compiler and will likely
   11853      be removed in a future version.
   11854 
   11855 `-mno-cond-exec'
   11856      Disable the use of conditional execution.
   11857 
   11858      This switch is mainly for debugging the compiler and will likely
   11859      be removed in a future version.
   11860 
   11861 `-mvliw-branch'
   11862      Run a pass to pack branches into VLIW instructions (default).
   11863 
   11864      This switch is mainly for debugging the compiler and will likely
   11865      be removed in a future version.
   11866 
   11867 `-mno-vliw-branch'
   11868      Do not run a pass to pack branches into VLIW instructions.
   11869 
   11870      This switch is mainly for debugging the compiler and will likely
   11871      be removed in a future version.
   11872 
   11873 `-mmulti-cond-exec'
   11874      Enable optimization of `&&' and `||' in conditional execution
   11875      (default).
   11876 
   11877      This switch is mainly for debugging the compiler and will likely
   11878      be removed in a future version.
   11879 
   11880 `-mno-multi-cond-exec'
   11881      Disable optimization of `&&' and `||' in conditional execution.
   11882 
   11883      This switch is mainly for debugging the compiler and will likely
   11884      be removed in a future version.
   11885 
   11886 `-mnested-cond-exec'
   11887      Enable nested conditional execution optimizations (default).
   11888 
   11889      This switch is mainly for debugging the compiler and will likely
   11890      be removed in a future version.
   11891 
   11892 `-mno-nested-cond-exec'
   11893      Disable nested conditional execution optimizations.
   11894 
   11895      This switch is mainly for debugging the compiler and will likely
   11896      be removed in a future version.
   11897 
   11898 `-moptimize-membar'
   11899      This switch removes redundant `membar' instructions from the
   11900      compiler generated code.  It is enabled by default.
   11901 
   11902 `-mno-optimize-membar'
   11903      This switch disables the automatic removal of redundant `membar'
   11904      instructions from the generated code.
   11905 
   11906 `-mtomcat-stats'
   11907      Cause gas to print out tomcat statistics.
   11908 
   11909 `-mcpu=CPU'
   11910      Select the processor type for which to generate code.  Possible
   11911      values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
   11912      `fr400', `fr300' and `simple'.
   11913 
   11914 
   11915 
   11916 File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
   11917 
   11918 3.17.12 GNU/Linux Options
   11919 -------------------------
   11920 
   11921 These `-m' options are defined for GNU/Linux targets:
   11922 
   11923 `-mglibc'
   11924      Use the GNU C library.  This is the default except on
   11925      `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
   11926 
   11927 `-muclibc'
   11928      Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
   11929      targets.
   11930 
   11931 `-mbionic'
   11932      Use Bionic C library.  This is the default on
   11933      `*-*-linux-*android*' targets.
   11934 
   11935 `-mandroid'
   11936      Compile code compatible with Android platform.  This is the
   11937      default on `*-*-linux-*android*' targets.
   11938 
   11939      When compiling, this option enables `-mbionic', `-fPIC',
   11940      `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
   11941      option makes the GCC driver pass Android-specific options to the
   11942      linker.  Finally, this option causes the preprocessor macro
   11943      `__ANDROID__' to be defined.
   11944 
   11945 `-tno-android-cc'
   11946      Disable compilation effects of `-mandroid', i.e., do not enable
   11947      `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
   11948 
   11949 `-tno-android-ld'
   11950      Disable linking effects of `-mandroid', i.e., pass standard Linux
   11951      linking options to the linker.
   11952 
   11953 
   11954 
   11955 File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
   11956 
   11957 3.17.13 H8/300 Options
   11958 ----------------------
   11959 
   11960 These `-m' options are defined for the H8/300 implementations:
   11961 
   11962 `-mrelax'
   11963      Shorten some address references at link time, when possible; uses
   11964      the linker option `-relax'.  *Note `ld' and the H8/300:
   11965      (ld)H8/300, for a fuller description.
   11966 
   11967 `-mh'
   11968      Generate code for the H8/300H.
   11969 
   11970 `-ms'
   11971      Generate code for the H8S.
   11972 
   11973 `-mn'
   11974      Generate code for the H8S and H8/300H in the normal mode.  This
   11975      switch must be used either with `-mh' or `-ms'.
   11976 
   11977 `-ms2600'
   11978      Generate code for the H8S/2600.  This switch must be used with
   11979      `-ms'.
   11980 
   11981 `-mint32'
   11982      Make `int' data 32 bits by default.
   11983 
   11984 `-malign-300'
   11985      On the H8/300H and H8S, use the same alignment rules as for the
   11986      H8/300.  The default for the H8/300H and H8S is to align longs and
   11987      floats on 4 byte boundaries.  `-malign-300' causes them to be
   11988      aligned on 2 byte boundaries.  This option has no effect on the
   11989      H8/300.
   11990 
   11991 
   11992 File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
   11993 
   11994 3.17.14 HPPA Options
   11995 --------------------
   11996 
   11997 These `-m' options are defined for the HPPA family of computers:
   11998 
   11999 `-march=ARCHITECTURE-TYPE'
   12000      Generate code for the specified architecture.  The choices for
   12001      ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
   12002      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
   12003      an HP-UX system to determine the proper architecture option for
   12004      your machine.  Code compiled for lower numbered architectures will
   12005      run on higher numbered architectures, but not the other way around.
   12006 
   12007 `-mpa-risc-1-0'
   12008 `-mpa-risc-1-1'
   12009 `-mpa-risc-2-0'
   12010      Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
   12011      respectively.
   12012 
   12013 `-mbig-switch'
   12014      Generate code suitable for big switch tables.  Use this option
   12015      only if the assembler/linker complain about out of range branches
   12016      within a switch table.
   12017 
   12018 `-mjump-in-delay'
   12019      Fill delay slots of function calls with unconditional jump
   12020      instructions by modifying the return pointer for the function call
   12021      to be the target of the conditional jump.
   12022 
   12023 `-mdisable-fpregs'
   12024      Prevent floating point registers from being used in any manner.
   12025      This is necessary for compiling kernels which perform lazy context
   12026      switching of floating point registers.  If you use this option and
   12027      attempt to perform floating point operations, the compiler will
   12028      abort.
   12029 
   12030 `-mdisable-indexing'
   12031      Prevent the compiler from using indexing address modes.  This
   12032      avoids some rather obscure problems when compiling MIG generated
   12033      code under MACH.
   12034 
   12035 `-mno-space-regs'
   12036      Generate code that assumes the target has no space registers.
   12037      This allows GCC to generate faster indirect calls and use unscaled
   12038      index address modes.
   12039 
   12040      Such code is suitable for level 0 PA systems and kernels.
   12041 
   12042 `-mfast-indirect-calls'
   12043      Generate code that assumes calls never cross space boundaries.
   12044      This allows GCC to emit code which performs faster indirect calls.
   12045 
   12046      This option will not work in the presence of shared libraries or
   12047      nested functions.
   12048 
   12049 `-mfixed-range=REGISTER-RANGE'
   12050      Generate code treating the given register range as fixed registers.
   12051      A fixed register is one that the register allocator can not use.
   12052      This is useful when compiling kernel code.  A register range is
   12053      specified as two registers separated by a dash.  Multiple register
   12054      ranges can be specified separated by a comma.
   12055 
   12056 `-mlong-load-store'
   12057      Generate 3-instruction load and store sequences as sometimes
   12058      required by the HP-UX 10 linker.  This is equivalent to the `+k'
   12059      option to the HP compilers.
   12060 
   12061 `-mportable-runtime'
   12062      Use the portable calling conventions proposed by HP for ELF
   12063      systems.
   12064 
   12065 `-mgas'
   12066      Enable the use of assembler directives only GAS understands.
   12067 
   12068 `-mschedule=CPU-TYPE'
   12069      Schedule code according to the constraints for the machine type
   12070      CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
   12071      `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
   12072      HP-UX system to determine the proper scheduling option for your
   12073      machine.  The default scheduling is `8000'.
   12074 
   12075 `-mlinker-opt'
   12076      Enable the optimization pass in the HP-UX linker.  Note this makes
   12077      symbolic debugging impossible.  It also triggers a bug in the
   12078      HP-UX 8 and HP-UX 9 linkers in which they give bogus error
   12079      messages when linking some programs.
   12080 
   12081 `-msoft-float'
   12082      Generate output containing library calls for floating point.
   12083      *Warning:* the requisite libraries are not available for all HPPA
   12084      targets.  Normally the facilities of the machine's usual C
   12085      compiler are used, but this cannot be done directly in
   12086      cross-compilation.  You must make your own arrangements to provide
   12087      suitable library functions for cross-compilation.
   12088 
   12089      `-msoft-float' changes the calling convention in the output file;
   12090      therefore, it is only useful if you compile _all_ of a program with
   12091      this option.  In particular, you need to compile `libgcc.a', the
   12092      library that comes with GCC, with `-msoft-float' in order for this
   12093      to work.
   12094 
   12095 `-msio'
   12096      Generate the predefine, `_SIO', for server IO.  The default is
   12097      `-mwsio'.  This generates the predefines, `__hp9000s700',
   12098      `__hp9000s700__' and `_WSIO', for workstation IO.  These options
   12099      are available under HP-UX and HI-UX.
   12100 
   12101 `-mgnu-ld'
   12102      Use GNU ld specific options.  This passes `-shared' to ld when
   12103      building a shared library.  It is the default when GCC is
   12104      configured, explicitly or implicitly, with the GNU linker.  This
   12105      option does not have any affect on which ld is called, it only
   12106      changes what parameters are passed to that ld.  The ld that is
   12107      called is determined by the `--with-ld' configure option, GCC's
   12108      program search path, and finally by the user's `PATH'.  The linker
   12109      used by GCC can be printed using `which `gcc
   12110      -print-prog-name=ld`'.  This option is only available on the 64
   12111      bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
   12112 
   12113 `-mhp-ld'
   12114      Use HP ld specific options.  This passes `-b' to ld when building
   12115      a shared library and passes `+Accept TypeMismatch' to ld on all
   12116      links.  It is the default when GCC is configured, explicitly or
   12117      implicitly, with the HP linker.  This option does not have any
   12118      affect on which ld is called, it only changes what parameters are
   12119      passed to that ld.  The ld that is called is determined by the
   12120      `--with-ld' configure option, GCC's program search path, and
   12121      finally by the user's `PATH'.  The linker used by GCC can be
   12122      printed using `which `gcc -print-prog-name=ld`'.  This option is
   12123      only available on the 64 bit HP-UX GCC, i.e. configured with
   12124      `hppa*64*-*-hpux*'.
   12125 
   12126 `-mlong-calls'
   12127      Generate code that uses long call sequences.  This ensures that a
   12128      call is always able to reach linker generated stubs.  The default
   12129      is to generate long calls only when the distance from the call
   12130      site to the beginning of the function or translation unit, as the
   12131      case may be, exceeds a predefined limit set by the branch type
   12132      being used.  The limits for normal calls are 7,600,000 and 240,000
   12133      bytes, respectively for the PA 2.0 and PA 1.X architectures.
   12134      Sibcalls are always limited at 240,000 bytes.
   12135 
   12136      Distances are measured from the beginning of functions when using
   12137      the `-ffunction-sections' option, or when using the `-mgas' and
   12138      `-mno-portable-runtime' options together under HP-UX with the SOM
   12139      linker.
   12140 
   12141      It is normally not desirable to use this option as it will degrade
   12142      performance.  However, it may be useful in large applications,
   12143      particularly when partial linking is used to build the application.
   12144 
   12145      The types of long calls used depends on the capabilities of the
   12146      assembler and linker, and the type of code being generated.  The
   12147      impact on systems that support long absolute calls, and long pic
   12148      symbol-difference or pc-relative calls should be relatively small.
   12149      However, an indirect call is used on 32-bit ELF systems in pic code
   12150      and it is quite long.
   12151 
   12152 `-munix=UNIX-STD'
   12153      Generate compiler predefines and select a startfile for the
   12154      specified UNIX standard.  The choices for UNIX-STD are `93', `95'
   12155      and `98'.  `93' is supported on all HP-UX versions.  `95' is
   12156      available on HP-UX 10.10 and later.  `98' is available on HP-UX
   12157      11.11 and later.  The default values are `93' for HP-UX 10.00,
   12158      `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
   12159      later.
   12160 
   12161      `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
   12162      `-munix=95' provides additional predefines for `XOPEN_UNIX' and
   12163      `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
   12164      `-munix=98' provides additional predefines for `_XOPEN_UNIX',
   12165      `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
   12166      `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
   12167 
   12168      It is _important_ to note that this option changes the interfaces
   12169      for various library routines.  It also affects the operational
   12170      behavior of the C library.  Thus, _extreme_ care is needed in
   12171      using this option.
   12172 
   12173      Library code that is intended to operate with more than one UNIX
   12174      standard must test, set and restore the variable
   12175      __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
   12176      provide this capability.
   12177 
   12178 `-nolibdld'
   12179      Suppress the generation of link options to search libdld.sl when
   12180      the `-static' option is specified on HP-UX 10 and later.
   12181 
   12182 `-static'
   12183      The HP-UX implementation of setlocale in libc has a dependency on
   12184      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
   12185      when the `-static' option is specified, special link options are
   12186      needed to resolve this dependency.
   12187 
   12188      On HP-UX 10 and later, the GCC driver adds the necessary options to
   12189      link with libdld.sl when the `-static' option is specified.  This
   12190      causes the resulting binary to be dynamic.  On the 64-bit port,
   12191      the linkers generate dynamic binaries by default in any case.  The
   12192      `-nolibdld' option can be used to prevent the GCC driver from
   12193      adding these link options.
   12194 
   12195 `-threads'
   12196      Add support for multithreading with the "dce thread" library under
   12197      HP-UX.  This option sets flags for both the preprocessor and
   12198      linker.
   12199 
   12200 
   12201 File: gcc.info,  Node: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options
   12202 
   12203 3.17.15 Intel 386 and AMD x86-64 Options
   12204 ----------------------------------------
   12205 
   12206 These `-m' options are defined for the i386 and x86-64 family of
   12207 computers:
   12208 
   12209 `-mtune=CPU-TYPE'
   12210      Tune to CPU-TYPE everything applicable about the generated code,
   12211      except for the ABI and the set of available instructions.  The
   12212      choices for CPU-TYPE are:
   12213     _generic_
   12214           Produce code optimized for the most common IA32/AMD64/EM64T
   12215           processors.  If you know the CPU on which your code will run,
   12216           then you should use the corresponding `-mtune' option instead
   12217           of `-mtune=generic'.  But, if you do not know exactly what
   12218           CPU users of your application will have, then you should use
   12219           this option.
   12220 
   12221           As new processors are deployed in the marketplace, the
   12222           behavior of this option will change.  Therefore, if you
   12223           upgrade to a newer version of GCC, the code generated option
   12224           will change to reflect the processors that were most common
   12225           when that version of GCC was released.
   12226 
   12227           There is no `-march=generic' option because `-march'
   12228           indicates the instruction set the compiler can use, and there
   12229           is no generic instruction set applicable to all processors.
   12230           In contrast, `-mtune' indicates the processor (or, in this
   12231           case, collection of processors) for which the code is
   12232           optimized.
   12233 
   12234     _native_
   12235           This selects the CPU to tune for at compilation time by
   12236           determining the processor type of the compiling machine.
   12237           Using `-mtune=native' will produce code optimized for the
   12238           local machine under the constraints of the selected
   12239           instruction set.  Using `-march=native' will enable all
   12240           instruction subsets supported by the local machine (hence the
   12241           result might not run on different machines).
   12242 
   12243     _i386_
   12244           Original Intel's i386 CPU.
   12245 
   12246     _i486_
   12247           Intel's i486 CPU.  (No scheduling is implemented for this
   12248           chip.)
   12249 
   12250     _i586, pentium_
   12251           Intel Pentium CPU with no MMX support.
   12252 
   12253     _pentium-mmx_
   12254           Intel PentiumMMX CPU based on Pentium core with MMX
   12255           instruction set support.
   12256 
   12257     _pentiumpro_
   12258           Intel PentiumPro CPU.
   12259 
   12260     _i686_
   12261           Same as `generic', but when used as `march' option, PentiumPro
   12262           instruction set will be used, so the code will run on all
   12263           i686 family chips.
   12264 
   12265     _pentium2_
   12266           Intel Pentium2 CPU based on PentiumPro core with MMX
   12267           instruction set support.
   12268 
   12269     _pentium3, pentium3m_
   12270           Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
   12271           instruction set support.
   12272 
   12273     _pentium-m_
   12274           Low power version of Intel Pentium3 CPU with MMX, SSE and
   12275           SSE2 instruction set support.  Used by Centrino notebooks.
   12276 
   12277     _pentium4, pentium4m_
   12278           Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
   12279           support.
   12280 
   12281     _prescott_
   12282           Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
   12283           and SSE3 instruction set support.
   12284 
   12285     _nocona_
   12286           Improved version of Intel Pentium4 CPU with 64-bit
   12287           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
   12288 
   12289     _core2_
   12290           Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
   12291           and SSSE3 instruction set support.
   12292 
   12293     _corei7_
   12294           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
   12295           SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
   12296 
   12297     _corei7-avx_
   12298           Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
   12299           SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
   12300           set support.
   12301 
   12302     _core-avx-i_
   12303           Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
   12304           SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
   12305           F16C instruction set support.
   12306 
   12307     _atom_
   12308           Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
   12309           and SSSE3 instruction set support.
   12310 
   12311     _k6_
   12312           AMD K6 CPU with MMX instruction set support.
   12313 
   12314     _k6-2, k6-3_
   12315           Improved versions of AMD K6 CPU with MMX and 3DNow!
   12316           instruction set support.
   12317 
   12318     _athlon, athlon-tbird_
   12319           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
   12320           prefetch instructions support.
   12321 
   12322     _athlon-4, athlon-xp, athlon-mp_
   12323           Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
   12324           full SSE instruction set support.
   12325 
   12326     _k8, opteron, athlon64, athlon-fx_
   12327           AMD K8 core based CPUs with x86-64 instruction set support.
   12328           (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and
   12329           64-bit instruction set extensions.)
   12330 
   12331     _k8-sse3, opteron-sse3, athlon64-sse3_
   12332           Improved versions of k8, opteron and athlon64 with SSE3
   12333           instruction set support.
   12334 
   12335     _amdfam10, barcelona_
   12336           AMD Family 10h core based CPUs with x86-64 instruction set
   12337           support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
   12338           3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
   12339           extensions.)
   12340 
   12341     _winchip-c6_
   12342           IDT Winchip C6 CPU, dealt in same way as i486 with additional
   12343           MMX instruction set support.
   12344 
   12345     _winchip2_
   12346           IDT Winchip2 CPU, dealt in same way as i486 with additional
   12347           MMX and 3DNow!  instruction set support.
   12348 
   12349     _c3_
   12350           Via C3 CPU with MMX and 3DNow! instruction set support.  (No
   12351           scheduling is implemented for this chip.)
   12352 
   12353     _c3-2_
   12354           Via C3-2 CPU with MMX and SSE instruction set support.  (No
   12355           scheduling is implemented for this chip.)
   12356 
   12357     _geode_
   12358           Embedded AMD CPU with MMX and 3DNow! instruction set support.
   12359 
   12360      While picking a specific CPU-TYPE will schedule things
   12361      appropriately for that particular chip, the compiler will not
   12362      generate any code that does not run on the i386 without the
   12363      `-march=CPU-TYPE' option being used.
   12364 
   12365 `-march=CPU-TYPE'
   12366      Generate instructions for the machine type CPU-TYPE.  The choices
   12367      for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
   12368      `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
   12369 
   12370 `-mcpu=CPU-TYPE'
   12371      A deprecated synonym for `-mtune'.
   12372 
   12373 `-mfpmath=UNIT'
   12374      Generate floating point arithmetics for selected unit UNIT.  The
   12375      choices for UNIT are:
   12376 
   12377     `387'
   12378           Use the standard 387 floating point coprocessor present
   12379           majority of chips and emulated otherwise.  Code compiled with
   12380           this option will run almost everywhere.  The temporary
   12381           results are computed in 80bit precision instead of precision
   12382           specified by the type resulting in slightly different results
   12383           compared to most of other chips.  See `-ffloat-store' for
   12384           more detailed description.
   12385 
   12386           This is the default choice for i386 compiler.
   12387 
   12388     `sse'
   12389           Use scalar floating point instructions present in the SSE
   12390           instruction set.  This instruction set is supported by
   12391           Pentium3 and newer chips, in the AMD line by Athlon-4,
   12392           Athlon-xp and Athlon-mp chips.  The earlier version of SSE
   12393           instruction set supports only single precision arithmetics,
   12394           thus the double and extended precision arithmetics is still
   12395           done using 387.  Later version, present only in Pentium4 and
   12396           the future AMD x86-64 chips supports double precision
   12397           arithmetics too.
   12398 
   12399           For the i386 compiler, you need to use `-march=CPU-TYPE',
   12400           `-msse' or `-msse2' switches to enable SSE extensions and
   12401           make this option effective.  For the x86-64 compiler, these
   12402           extensions are enabled by default.
   12403 
   12404           The resulting code should be considerably faster in the
   12405           majority of cases and avoid the numerical instability
   12406           problems of 387 code, but may break some existing code that
   12407           expects temporaries to be 80bit.
   12408 
   12409           This is the default choice for the x86-64 compiler.
   12410 
   12411     `sse,387'
   12412     `sse+387'
   12413     `both'
   12414           Attempt to utilize both instruction sets at once.  This
   12415           effectively double the amount of available registers and on
   12416           chips with separate execution units for 387 and SSE the
   12417           execution resources too.  Use this option with care, as it is
   12418           still experimental, because the GCC register allocator does
   12419           not model separate functional units well resulting in
   12420           instable performance.
   12421 
   12422 `-masm=DIALECT'
   12423      Output asm instructions using selected DIALECT.  Supported choices
   12424      are `intel' or `att' (the default one).  Darwin does not support
   12425      `intel'.
   12426 
   12427 `-mieee-fp'
   12428 `-mno-ieee-fp'
   12429      Control whether or not the compiler uses IEEE floating point
   12430      comparisons.  These handle correctly the case where the result of a
   12431      comparison is unordered.
   12432 
   12433 `-msoft-float'
   12434      Generate output containing library calls for floating point.
   12435      *Warning:* the requisite libraries are not part of GCC.  Normally
   12436      the facilities of the machine's usual C compiler are used, but
   12437      this can't be done directly in cross-compilation.  You must make
   12438      your own arrangements to provide suitable library functions for
   12439      cross-compilation.
   12440 
   12441      On machines where a function returns floating point results in the
   12442      80387 register stack, some floating point opcodes may be emitted
   12443      even if `-msoft-float' is used.
   12444 
   12445 `-mno-fp-ret-in-387'
   12446      Do not use the FPU registers for return values of functions.
   12447 
   12448      The usual calling convention has functions return values of types
   12449      `float' and `double' in an FPU register, even if there is no FPU.
   12450      The idea is that the operating system should emulate an FPU.
   12451 
   12452      The option `-mno-fp-ret-in-387' causes such values to be returned
   12453      in ordinary CPU registers instead.
   12454 
   12455 `-mno-fancy-math-387'
   12456      Some 387 emulators do not support the `sin', `cos' and `sqrt'
   12457      instructions for the 387.  Specify this option to avoid generating
   12458      those instructions.  This option is the default on FreeBSD,
   12459      OpenBSD and NetBSD.  This option is overridden when `-march'
   12460      indicates that the target CPU will always have an FPU and so the
   12461      instruction will not need emulation.  As of revision 2.6.1, these
   12462      instructions are not generated unless you also use the
   12463      `-funsafe-math-optimizations' switch.
   12464 
   12465 `-malign-double'
   12466 `-mno-align-double'
   12467      Control whether GCC aligns `double', `long double', and `long
   12468      long' variables on a two word boundary or a one word boundary.
   12469      Aligning `double' variables on a two word boundary will produce
   12470      code that runs somewhat faster on a `Pentium' at the expense of
   12471      more memory.
   12472 
   12473      On x86-64, `-malign-double' is enabled by default.
   12474 
   12475      *Warning:* if you use the `-malign-double' switch, structures
   12476      containing the above types will be aligned differently than the
   12477      published application binary interface specifications for the 386
   12478      and will not be binary compatible with structures in code compiled
   12479      without that switch.
   12480 
   12481 `-m96bit-long-double'
   12482 `-m128bit-long-double'
   12483      These switches control the size of `long double' type.  The i386
   12484      application binary interface specifies the size to be 96 bits, so
   12485      `-m96bit-long-double' is the default in 32 bit mode.
   12486 
   12487      Modern architectures (Pentium and newer) would prefer `long double'
   12488      to be aligned to an 8 or 16 byte boundary.  In arrays or structures
   12489      conforming to the ABI, this would not be possible.  So specifying a
   12490      `-m128bit-long-double' will align `long double' to a 16 byte
   12491      boundary by padding the `long double' with an additional 32 bit
   12492      zero.
   12493 
   12494      In the x86-64 compiler, `-m128bit-long-double' is the default
   12495      choice as its ABI specifies that `long double' is to be aligned on
   12496      16 byte boundary.
   12497 
   12498      Notice that neither of these options enable any extra precision
   12499      over the x87 standard of 80 bits for a `long double'.
   12500 
   12501      *Warning:* if you override the default value for your target ABI,
   12502      the structures and arrays containing `long double' variables will
   12503      change their size as well as function calling convention for
   12504      function taking `long double' will be modified.  Hence they will
   12505      not be binary compatible with arrays or structures in code
   12506      compiled without that switch.
   12507 
   12508 `-mlarge-data-threshold=NUMBER'
   12509      When `-mcmodel=medium' is specified, the data greater than
   12510      THRESHOLD are placed in large data section.  This value must be the
   12511      same across all object linked into the binary and defaults to
   12512      65535.
   12513 
   12514 `-mrtd'
   12515      Use a different function-calling convention, in which functions
   12516      that take a fixed number of arguments return with the `ret' NUM
   12517      instruction, which pops their arguments while returning.  This
   12518      saves one instruction in the caller since there is no need to pop
   12519      the arguments there.
   12520 
   12521      You can specify that an individual function is called with this
   12522      calling sequence with the function attribute `stdcall'.  You can
   12523      also override the `-mrtd' option by using the function attribute
   12524      `cdecl'.  *Note Function Attributes::.
   12525 
   12526      *Warning:* this calling convention is incompatible with the one
   12527      normally used on Unix, so you cannot use it if you need to call
   12528      libraries compiled with the Unix compiler.
   12529 
   12530      Also, you must provide function prototypes for all functions that
   12531      take variable numbers of arguments (including `printf'); otherwise
   12532      incorrect code will be generated for calls to those functions.
   12533 
   12534      In addition, seriously incorrect code will result if you call a
   12535      function with too many arguments.  (Normally, extra arguments are
   12536      harmlessly ignored.)
   12537 
   12538 `-mregparm=NUM'
   12539      Control how many registers are used to pass integer arguments.  By
   12540      default, no registers are used to pass arguments, and at most 3
   12541      registers can be used.  You can control this behavior for a
   12542      specific function by using the function attribute `regparm'.
   12543      *Note Function Attributes::.
   12544 
   12545      *Warning:* if you use this switch, and NUM is nonzero, then you
   12546      must build all modules with the same value, including any
   12547      libraries.  This includes the system libraries and startup modules.
   12548 
   12549 `-msseregparm'
   12550      Use SSE register passing conventions for float and double arguments
   12551      and return values.  You can control this behavior for a specific
   12552      function by using the function attribute `sseregparm'.  *Note
   12553      Function Attributes::.
   12554 
   12555      *Warning:* if you use this switch then you must build all modules
   12556      with the same value, including any libraries.  This includes the
   12557      system libraries and startup modules.
   12558 
   12559 `-mvect8-ret-in-mem'
   12560      Return 8-byte vectors in memory instead of MMX registers.  This is
   12561      the default on Solaris 8 and 9 and VxWorks to match the ABI of the
   12562      Sun Studio compilers until version 12.  Later compiler versions
   12563      (starting with Studio 12 Update 1) follow the ABI used by other
   12564      x86 targets, which is the default on Solaris 10 and later.  _Only_
   12565      use this option if you need to remain compatible with existing
   12566      code produced by those previous compiler versions or older
   12567      versions of GCC.
   12568 
   12569 `-mpc32'
   12570 `-mpc64'
   12571 `-mpc80'
   12572      Set 80387 floating-point precision to 32, 64 or 80 bits.  When
   12573      `-mpc32' is specified, the significands of results of
   12574      floating-point operations are rounded to 24 bits (single
   12575      precision); `-mpc64' rounds the significands of results of
   12576      floating-point operations to 53 bits (double precision) and
   12577      `-mpc80' rounds the significands of results of floating-point
   12578      operations to 64 bits (extended double precision), which is the
   12579      default.  When this option is used, floating-point operations in
   12580      higher precisions are not available to the programmer without
   12581      setting the FPU control word explicitly.
   12582 
   12583      Setting the rounding of floating-point operations to less than the
   12584      default 80 bits can speed some programs by 2% or more.  Note that
   12585      some mathematical libraries assume that extended precision (80
   12586      bit) floating-point operations are enabled by default; routines in
   12587      such libraries could suffer significant loss of accuracy,
   12588      typically through so-called "catastrophic cancellation", when this
   12589      option is used to set the precision to less than extended
   12590      precision.
   12591 
   12592 `-mstackrealign'
   12593      Realign the stack at entry.  On the Intel x86, the `-mstackrealign'
   12594      option will generate an alternate prologue and epilogue that
   12595      realigns the runtime stack if necessary.  This supports mixing
   12596      legacy codes that keep a 4-byte aligned stack with modern codes
   12597      that keep a 16-byte stack for SSE compatibility.  See also the
   12598      attribute `force_align_arg_pointer', applicable to individual
   12599      functions.
   12600 
   12601 `-mpreferred-stack-boundary=NUM'
   12602      Attempt to keep the stack boundary aligned to a 2 raised to NUM
   12603      byte boundary.  If `-mpreferred-stack-boundary' is not specified,
   12604      the default is 4 (16 bytes or 128 bits).
   12605 
   12606 `-mincoming-stack-boundary=NUM'
   12607      Assume the incoming stack is aligned to a 2 raised to NUM byte
   12608      boundary.  If `-mincoming-stack-boundary' is not specified, the
   12609      one specified by `-mpreferred-stack-boundary' will be used.
   12610 
   12611      On Pentium and PentiumPro, `double' and `long double' values
   12612      should be aligned to an 8 byte boundary (see `-malign-double') or
   12613      suffer significant run time performance penalties.  On Pentium
   12614      III, the Streaming SIMD Extension (SSE) data type `__m128' may not
   12615      work properly if it is not 16 byte aligned.
   12616 
   12617      To ensure proper alignment of this values on the stack, the stack
   12618      boundary must be as aligned as that required by any value stored
   12619      on the stack.  Further, every function must be generated such that
   12620      it keeps the stack aligned.  Thus calling a function compiled with
   12621      a higher preferred stack boundary from a function compiled with a
   12622      lower preferred stack boundary will most likely misalign the
   12623      stack.  It is recommended that libraries that use callbacks always
   12624      use the default setting.
   12625 
   12626      This extra alignment does consume extra stack space, and generally
   12627      increases code size.  Code that is sensitive to stack space usage,
   12628      such as embedded systems and operating system kernels, may want to
   12629      reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
   12630 
   12631 `-mmmx'
   12632 `-mno-mmx'
   12633 `-msse'
   12634 `-mno-sse'
   12635 `-msse2'
   12636 `-mno-sse2'
   12637 `-msse3'
   12638 `-mno-sse3'
   12639 `-mssse3'
   12640 `-mno-ssse3'
   12641 `-msse4.1'
   12642 `-mno-sse4.1'
   12643 `-msse4.2'
   12644 `-mno-sse4.2'
   12645 `-msse4'
   12646 `-mno-sse4'
   12647 `-mavx'
   12648 `-mno-avx'
   12649 `-maes'
   12650 `-mno-aes'
   12651 `-mpclmul'
   12652 `-mno-pclmul'
   12653 `-mfsgsbase'
   12654 `-mno-fsgsbase'
   12655 `-mrdrnd'
   12656 `-mno-rdrnd'
   12657 `-mf16c'
   12658 `-mno-f16c'
   12659 `-msse4a'
   12660 `-mno-sse4a'
   12661 `-mfma4'
   12662 `-mno-fma4'
   12663 `-mxop'
   12664 `-mno-xop'
   12665 `-mlwp'
   12666 `-mno-lwp'
   12667 `-m3dnow'
   12668 `-mno-3dnow'
   12669 `-mpopcnt'
   12670 `-mno-popcnt'
   12671 `-mabm'
   12672 `-mno-abm'
   12673 `-mbmi'
   12674 `-mno-bmi'
   12675 `-mtbm'
   12676 `-mno-tbm'
   12677      These switches enable or disable the use of instructions in the
   12678      MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE,
   12679      RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended
   12680      instruction sets.  These extensions are also available as built-in
   12681      functions: see *note X86 Built-in Functions::, for details of the
   12682      functions enabled and disabled by these switches.
   12683 
   12684      To have SSE/SSE2 instructions generated automatically from
   12685      floating-point code (as opposed to 387 instructions), see
   12686      `-mfpmath=sse'.
   12687 
   12688      GCC depresses SSEx instructions when `-mavx' is used. Instead, it
   12689      generates new AVX instructions or AVX equivalence for all SSEx
   12690      instructions when needed.
   12691 
   12692      These options will enable GCC to use these extended instructions in
   12693      generated code, even without `-mfpmath=sse'.  Applications which
   12694      perform runtime CPU detection must compile separate files for each
   12695      supported architecture, using the appropriate flags.  In
   12696      particular, the file containing the CPU detection code should be
   12697      compiled without these options.
   12698 
   12699 `-mfused-madd'
   12700 `-mno-fused-madd'
   12701      Do (don't) generate code that uses the fused multiply/add or
   12702      multiply/subtract instructions.  The default is to use these
   12703      instructions.
   12704 
   12705 `-mcld'
   12706      This option instructs GCC to emit a `cld' instruction in the
   12707      prologue of functions that use string instructions.  String
   12708      instructions depend on the DF flag to select between autoincrement
   12709      or autodecrement mode.  While the ABI specifies the DF flag to be
   12710      cleared on function entry, some operating systems violate this
   12711      specification by not clearing the DF flag in their exception
   12712      dispatchers.  The exception handler can be invoked with the DF flag
   12713      set which leads to wrong direction mode, when string instructions
   12714      are used.  This option can be enabled by default on 32-bit x86
   12715      targets by configuring GCC with the `--enable-cld' configure
   12716      option.  Generation of `cld' instructions can be suppressed with
   12717      the `-mno-cld' compiler option in this case.
   12718 
   12719 `-mvzeroupper'
   12720      This option instructs GCC to emit a `vzeroupper' instruction
   12721      before a transfer of control flow out of the function to minimize
   12722      AVX to SSE transition penalty as well as remove unnecessary
   12723      zeroupper intrinsics.
   12724 
   12725 `-mcx16'
   12726      This option will enable GCC to use CMPXCHG16B instruction in
   12727      generated code.  CMPXCHG16B allows for atomic operations on
   12728      128-bit double quadword (or oword) data types.  This is useful for
   12729      high resolution counters that could be updated by multiple
   12730      processors (or cores).  This instruction is generated as part of
   12731      atomic built-in functions: see *note Atomic Builtins:: for details.
   12732 
   12733 `-msahf'
   12734      This option will enable GCC to use SAHF instruction in generated
   12735      64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
   12736      instructions supported by AMD64 until introduction of Pentium 4 G1
   12737      step in December 2005.  LAHF and SAHF are load and store
   12738      instructions, respectively, for certain status flags.  In 64-bit
   12739      mode, SAHF instruction is used to optimize `fmod', `drem' or
   12740      `remainder' built-in functions: see *note Other Builtins:: for
   12741      details.
   12742 
   12743 `-mmovbe'
   12744      This option will enable GCC to use movbe instruction to implement
   12745      `__builtin_bswap32' and `__builtin_bswap64'.
   12746 
   12747 `-mcrc32'
   12748      This option will enable built-in functions,
   12749      `__builtin_ia32_crc32qi', `__builtin_ia32_crc32hi'.
   12750      `__builtin_ia32_crc32si' and `__builtin_ia32_crc32di' to generate
   12751      the crc32 machine instruction.
   12752 
   12753 `-mrecip'
   12754      This option will enable GCC to use RCPSS and RSQRTSS instructions
   12755      (and their vectorized variants RCPPS and RSQRTPS) with an
   12756      additional Newton-Raphson step to increase precision instead of
   12757      DIVSS and SQRTSS (and their vectorized variants) for single
   12758      precision floating point arguments.  These instructions are
   12759      generated only when `-funsafe-math-optimizations' is enabled
   12760      together with `-finite-math-only' and `-fno-trapping-math'.  Note
   12761      that while the throughput of the sequence is higher than the
   12762      throughput of the non-reciprocal instruction, the precision of the
   12763      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
   12764      equals 0.99999994).
   12765 
   12766      Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or
   12767      RSQRTPS) already with `-ffast-math' (or the above option
   12768      combination), and doesn't need `-mrecip'.
   12769 
   12770 `-mveclibabi=TYPE'
   12771      Specifies the ABI type to use for vectorizing intrinsics using an
   12772      external library.  Supported types are `svml' for the Intel short
   12773      vector math library and `acml' for the AMD math core library style
   12774      of interfacing.  GCC will currently emit calls to `vmldExp2',
   12775      `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2',
   12776      `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2',
   12777      `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2',
   12778      `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104',
   12779      `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4',
   12780      `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4',
   12781      `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4'
   12782      for corresponding function type when `-mveclibabi=svml' is used
   12783      and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log',
   12784      `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf',
   12785      `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and
   12786      `__vrs4_powf' for corresponding function type when
   12787      `-mveclibabi=acml' is used. Both `-ftree-vectorize' and
   12788      `-funsafe-math-optimizations' have to be enabled. A SVML or ACML
   12789      ABI compatible library will have to be specified at link time.
   12790 
   12791 `-mabi=NAME'
   12792      Generate code for the specified calling convention.  Permissible
   12793      values are: `sysv' for the ABI used on GNU/Linux and other systems
   12794      and `ms' for the Microsoft ABI.  The default is to use the
   12795      Microsoft ABI when targeting Windows.  On all other systems, the
   12796      default is the SYSV ABI.  You can control this behavior for a
   12797      specific function by using the function attribute
   12798      `ms_abi'/`sysv_abi'.  *Note Function Attributes::.
   12799 
   12800 `-mpush-args'
   12801 `-mno-push-args'
   12802      Use PUSH operations to store outgoing parameters.  This method is
   12803      shorter and usually equally fast as method using SUB/MOV
   12804      operations and is enabled by default.  In some cases disabling it
   12805      may improve performance because of improved scheduling and reduced
   12806      dependencies.
   12807 
   12808 `-maccumulate-outgoing-args'
   12809      If enabled, the maximum amount of space required for outgoing
   12810      arguments will be computed in the function prologue.  This is
   12811      faster on most modern CPUs because of reduced dependencies,
   12812      improved scheduling and reduced stack usage when preferred stack
   12813      boundary is not equal to 2.  The drawback is a notable increase in
   12814      code size.  This switch implies `-mno-push-args'.
   12815 
   12816 `-mthreads'
   12817      Support thread-safe exception handling on `Mingw32'.  Code that
   12818      relies on thread-safe exception handling must compile and link all
   12819      code with the `-mthreads' option.  When compiling, `-mthreads'
   12820      defines `-D_MT'; when linking, it links in a special thread helper
   12821      library `-lmingwthrd' which cleans up per thread exception
   12822      handling data.
   12823 
   12824 `-mno-align-stringops'
   12825      Do not align destination of inlined string operations.  This
   12826      switch reduces code size and improves performance in case the
   12827      destination is already aligned, but GCC doesn't know about it.
   12828 
   12829 `-minline-all-stringops'
   12830      By default GCC inlines string operations only when destination is
   12831      known to be aligned at least to 4 byte boundary.  This enables
   12832      more inlining, increase code size, but may improve performance of
   12833      code that depends on fast memcpy, strlen and memset for short
   12834      lengths.
   12835 
   12836 `-minline-stringops-dynamically'
   12837      For string operation of unknown size, inline runtime checks so for
   12838      small blocks inline code is used, while for large blocks library
   12839      call is used.
   12840 
   12841 `-mstringop-strategy=ALG'
   12842      Overwrite internal decision heuristic about particular algorithm
   12843      to inline string operation with.  The allowed values are
   12844      `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386
   12845      `rep' prefix of specified size, `byte_loop', `loop',
   12846      `unrolled_loop' for expanding inline loop, `libcall' for always
   12847      expanding library call.
   12848 
   12849 `-momit-leaf-frame-pointer'
   12850      Don't keep the frame pointer in a register for leaf functions.
   12851      This avoids the instructions to save, set up and restore frame
   12852      pointers and makes an extra register available in leaf functions.
   12853      The option `-fomit-frame-pointer' removes the frame pointer for
   12854      all functions which might make debugging harder.
   12855 
   12856 `-mtls-direct-seg-refs'
   12857 `-mno-tls-direct-seg-refs'
   12858      Controls whether TLS variables may be accessed with offsets from
   12859      the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
   12860      whether the thread base pointer must be added.  Whether or not this
   12861      is legal depends on the operating system, and whether it maps the
   12862      segment to cover the entire TLS area.
   12863 
   12864      For systems that use GNU libc, the default is on.
   12865 
   12866 `-msse2avx'
   12867 `-mno-sse2avx'
   12868      Specify that the assembler should encode SSE instructions with VEX
   12869      prefix.  The option `-mavx' turns this on by default.
   12870 
   12871 `-mfentry'
   12872 `-mno-fentry'
   12873      If profiling is active `-pg' put the profiling counter call before
   12874      prologue.  Note: On x86 architectures the attribute
   12875      `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
   12876      `-pg'.
   12877 
   12878 `-m8bit-idiv'
   12879 `-mno-8bit-idiv'
   12880      On some processors, like Intel Atom, 8bit unsigned integer divide
   12881      is much faster than 32bit/64bit integer divide.  This option will
   12882      generate a runt-time check.  If both dividend and divisor are
   12883      within range of 0 to 255, 8bit unsigned integer divide will be
   12884      used instead of 32bit/64bit integer divide.
   12885 
   12886 `-mavx256-split-unaligned-load'
   12887 
   12888 `-mavx256-split-unaligned-store'
   12889      Split 32-byte AVX unaligned load and store.
   12890 
   12891 
   12892  These `-m' switches are supported in addition to the above on AMD
   12893 x86-64 processors in 64-bit environments.
   12894 
   12895 `-m32'
   12896 `-m64'
   12897      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   12898      environment sets int, long and pointer to 32 bits and generates
   12899      code that runs on any i386 system.  The 64-bit environment sets
   12900      int to 32 bits and long and pointer to 64 bits and generates code
   12901      for AMD's x86-64 architecture. For darwin only the -m64 option
   12902      turns off the `-fno-pic' and `-mdynamic-no-pic' options.
   12903 
   12904 `-mno-red-zone'
   12905      Do not use a so called red zone for x86-64 code.  The red zone is
   12906      mandated by the x86-64 ABI, it is a 128-byte area beyond the
   12907      location of the stack pointer that will not be modified by signal
   12908      or interrupt handlers and therefore can be used for temporary data
   12909      without adjusting the stack pointer.  The flag `-mno-red-zone'
   12910      disables this red zone.
   12911 
   12912 `-mcmodel=small'
   12913      Generate code for the small code model: the program and its
   12914      symbols must be linked in the lower 2 GB of the address space.
   12915      Pointers are 64 bits.  Programs can be statically or dynamically
   12916      linked.  This is the default code model.
   12917 
   12918 `-mcmodel=kernel'
   12919      Generate code for the kernel code model.  The kernel runs in the
   12920      negative 2 GB of the address space.  This model has to be used for
   12921      Linux kernel code.
   12922 
   12923 `-mcmodel=medium'
   12924      Generate code for the medium model: The program is linked in the
   12925      lower 2 GB of the address space.  Small symbols are also placed
   12926      there.  Symbols with sizes larger than `-mlarge-data-threshold'
   12927      are put into large data or bss sections and can be located above
   12928      2GB.  Programs can be statically or dynamically linked.
   12929 
   12930 `-mcmodel=large'
   12931      Generate code for the large model: This model makes no assumptions
   12932      about addresses and sizes of sections.
   12933 
   12934 
   12935 File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
   12936 
   12937 3.17.16 i386 and x86-64 Windows Options
   12938 ---------------------------------------
   12939 
   12940 These additional options are available for Windows targets:
   12941 
   12942 `-mconsole'
   12943      This option is available for Cygwin and MinGW targets.  It
   12944      specifies that a console application is to be generated, by
   12945      instructing the linker to set the PE header subsystem type
   12946      required for console applications.  This is the default behavior
   12947      for Cygwin and MinGW targets.
   12948 
   12949 `-mdll'
   12950      This option is available for Cygwin and MinGW targets.  It
   12951      specifies that a DLL - a dynamic link library - is to be
   12952      generated, enabling the selection of the required runtime startup
   12953      object and entry point.
   12954 
   12955 `-mnop-fun-dllimport'
   12956      This option is available for Cygwin and MinGW targets.  It
   12957      specifies that the dllimport attribute should be ignored.
   12958 
   12959 `-mthread'
   12960      This option is available for MinGW targets. It specifies that
   12961      MinGW-specific thread support is to be used.
   12962 
   12963 `-municode'
   12964      This option is available for mingw-w64 targets.  It specifies that
   12965      the UNICODE macro is getting pre-defined and that the unicode
   12966      capable runtime startup code is chosen.
   12967 
   12968 `-mwin32'
   12969      This option is available for Cygwin and MinGW targets.  It
   12970      specifies that the typical Windows pre-defined macros are to be
   12971      set in the pre-processor, but does not influence the choice of
   12972      runtime library/startup code.
   12973 
   12974 `-mwindows'
   12975      This option is available for Cygwin and MinGW targets.  It
   12976      specifies that a GUI application is to be generated by instructing
   12977      the linker to set the PE header subsystem type appropriately.
   12978 
   12979 `-fno-set-stack-executable'
   12980      This option is available for MinGW targets. It specifies that the
   12981      executable flag for stack used by nested functions isn't set. This
   12982      is necessary for binaries running in kernel mode of Windows, as
   12983      there the user32 API, which is used to set executable privileges,
   12984      isn't available.
   12985 
   12986 `-mpe-aligned-commons'
   12987      This option is available for Cygwin and MinGW targets.  It
   12988      specifies that the GNU extension to the PE file format that
   12989      permits the correct alignment of COMMON variables should be used
   12990      when generating code.  It will be enabled by default if GCC
   12991      detects that the target assembler found during configuration
   12992      supports the feature.
   12993 
   12994  See also under *note i386 and x86-64 Options:: for standard options.
   12995 
   12996 
   12997 File: gcc.info,  Node: IA-64 Options,  Next: IA-64/VMS Options,  Prev: i386 and x86-64 Windows Options,  Up: Submodel Options
   12998 
   12999 3.17.17 IA-64 Options
   13000 ---------------------
   13001 
   13002 These are the `-m' options defined for the Intel IA-64 architecture.
   13003 
   13004 `-mbig-endian'
   13005      Generate code for a big endian target.  This is the default for
   13006      HP-UX.
   13007 
   13008 `-mlittle-endian'
   13009      Generate code for a little endian target.  This is the default for
   13010      AIX5 and GNU/Linux.
   13011 
   13012 `-mgnu-as'
   13013 `-mno-gnu-as'
   13014      Generate (or don't) code for the GNU assembler.  This is the
   13015      default.
   13016 
   13017 `-mgnu-ld'
   13018 `-mno-gnu-ld'
   13019      Generate (or don't) code for the GNU linker.  This is the default.
   13020 
   13021 `-mno-pic'
   13022      Generate code that does not use a global pointer register.  The
   13023      result is not position independent code, and violates the IA-64
   13024      ABI.
   13025 
   13026 `-mvolatile-asm-stop'
   13027 `-mno-volatile-asm-stop'
   13028      Generate (or don't) a stop bit immediately before and after
   13029      volatile asm statements.
   13030 
   13031 `-mregister-names'
   13032 `-mno-register-names'
   13033      Generate (or don't) `in', `loc', and `out' register names for the
   13034      stacked registers.  This may make assembler output more readable.
   13035 
   13036 `-mno-sdata'
   13037 `-msdata'
   13038      Disable (or enable) optimizations that use the small data section.
   13039      This may be useful for working around optimizer bugs.
   13040 
   13041 `-mconstant-gp'
   13042      Generate code that uses a single constant global pointer value.
   13043      This is useful when compiling kernel code.
   13044 
   13045 `-mauto-pic'
   13046      Generate code that is self-relocatable.  This implies
   13047      `-mconstant-gp'.  This is useful when compiling firmware code.
   13048 
   13049 `-minline-float-divide-min-latency'
   13050      Generate code for inline divides of floating point values using
   13051      the minimum latency algorithm.
   13052 
   13053 `-minline-float-divide-max-throughput'
   13054      Generate code for inline divides of floating point values using
   13055      the maximum throughput algorithm.
   13056 
   13057 `-mno-inline-float-divide'
   13058      Do not generate inline code for divides of floating point values.
   13059 
   13060 `-minline-int-divide-min-latency'
   13061      Generate code for inline divides of integer values using the
   13062      minimum latency algorithm.
   13063 
   13064 `-minline-int-divide-max-throughput'
   13065      Generate code for inline divides of integer values using the
   13066      maximum throughput algorithm.
   13067 
   13068 `-mno-inline-int-divide'
   13069      Do not generate inline code for divides of integer values.
   13070 
   13071 `-minline-sqrt-min-latency'
   13072      Generate code for inline square roots using the minimum latency
   13073      algorithm.
   13074 
   13075 `-minline-sqrt-max-throughput'
   13076      Generate code for inline square roots using the maximum throughput
   13077      algorithm.
   13078 
   13079 `-mno-inline-sqrt'
   13080      Do not generate inline code for sqrt.
   13081 
   13082 `-mfused-madd'
   13083 `-mno-fused-madd'
   13084      Do (don't) generate code that uses the fused multiply/add or
   13085      multiply/subtract instructions.  The default is to use these
   13086      instructions.
   13087 
   13088 `-mno-dwarf2-asm'
   13089 `-mdwarf2-asm'
   13090      Don't (or do) generate assembler code for the DWARF2 line number
   13091      debugging info.  This may be useful when not using the GNU
   13092      assembler.
   13093 
   13094 `-mearly-stop-bits'
   13095 `-mno-early-stop-bits'
   13096      Allow stop bits to be placed earlier than immediately preceding the
   13097      instruction that triggered the stop bit.  This can improve
   13098      instruction scheduling, but does not always do so.
   13099 
   13100 `-mfixed-range=REGISTER-RANGE'
   13101      Generate code treating the given register range as fixed registers.
   13102      A fixed register is one that the register allocator can not use.
   13103      This is useful when compiling kernel code.  A register range is
   13104      specified as two registers separated by a dash.  Multiple register
   13105      ranges can be specified separated by a comma.
   13106 
   13107 `-mtls-size=TLS-SIZE'
   13108      Specify bit size of immediate TLS offsets.  Valid values are 14,
   13109      22, and 64.
   13110 
   13111 `-mtune=CPU-TYPE'
   13112      Tune the instruction scheduling for a particular CPU, Valid values
   13113      are itanium, itanium1, merced, itanium2, and mckinley.
   13114 
   13115 `-milp32'
   13116 `-mlp64'
   13117      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   13118      environment sets int, long and pointer to 32 bits.  The 64-bit
   13119      environment sets int to 32 bits and long and pointer to 64 bits.
   13120      These are HP-UX specific flags.
   13121 
   13122 `-mno-sched-br-data-spec'
   13123 `-msched-br-data-spec'
   13124      (Dis/En)able data speculative scheduling before reload.  This will
   13125      result in generation of the ld.a instructions and the
   13126      corresponding check instructions (ld.c / chk.a).  The default is
   13127      'disable'.
   13128 
   13129 `-msched-ar-data-spec'
   13130 `-mno-sched-ar-data-spec'
   13131      (En/Dis)able data speculative scheduling after reload.  This will
   13132      result in generation of the ld.a instructions and the
   13133      corresponding check instructions (ld.c / chk.a).  The default is
   13134      'enable'.
   13135 
   13136 `-mno-sched-control-spec'
   13137 `-msched-control-spec'
   13138      (Dis/En)able control speculative scheduling.  This feature is
   13139      available only during region scheduling (i.e. before reload).
   13140      This will result in generation of the ld.s instructions and the
   13141      corresponding check instructions chk.s .  The default is 'disable'.
   13142 
   13143 `-msched-br-in-data-spec'
   13144 `-mno-sched-br-in-data-spec'
   13145      (En/Dis)able speculative scheduling of the instructions that are
   13146      dependent on the data speculative loads before reload.  This is
   13147      effective only with `-msched-br-data-spec' enabled.  The default
   13148      is 'enable'.
   13149 
   13150 `-msched-ar-in-data-spec'
   13151 `-mno-sched-ar-in-data-spec'
   13152      (En/Dis)able speculative scheduling of the instructions that are
   13153      dependent on the data speculative loads after reload.  This is
   13154      effective only with `-msched-ar-data-spec' enabled.  The default
   13155      is 'enable'.
   13156 
   13157 `-msched-in-control-spec'
   13158 `-mno-sched-in-control-spec'
   13159      (En/Dis)able speculative scheduling of the instructions that are
   13160      dependent on the control speculative loads.  This is effective
   13161      only with `-msched-control-spec' enabled.  The default is 'enable'.
   13162 
   13163 `-mno-sched-prefer-non-data-spec-insns'
   13164 `-msched-prefer-non-data-spec-insns'
   13165      If enabled, data speculative instructions will be chosen for
   13166      schedule only if there are no other choices at the moment.  This
   13167      will make the use of the data speculation much more conservative.
   13168      The default is 'disable'.
   13169 
   13170 `-mno-sched-prefer-non-control-spec-insns'
   13171 `-msched-prefer-non-control-spec-insns'
   13172      If enabled, control speculative instructions will be chosen for
   13173      schedule only if there are no other choices at the moment.  This
   13174      will make the use of the control speculation much more
   13175      conservative.  The default is 'disable'.
   13176 
   13177 `-mno-sched-count-spec-in-critical-path'
   13178 `-msched-count-spec-in-critical-path'
   13179      If enabled, speculative dependencies will be considered during
   13180      computation of the instructions priorities.  This will make the
   13181      use of the speculation a bit more conservative.  The default is
   13182      'disable'.
   13183 
   13184 `-msched-spec-ldc'
   13185      Use a simple data speculation check.  This option is on by default.
   13186 
   13187 `-msched-control-spec-ldc'
   13188      Use a simple check for control speculation.  This option is on by
   13189      default.
   13190 
   13191 `-msched-stop-bits-after-every-cycle'
   13192      Place a stop bit after every cycle when scheduling.  This option
   13193      is on by default.
   13194 
   13195 `-msched-fp-mem-deps-zero-cost'
   13196      Assume that floating-point stores and loads are not likely to
   13197      cause a conflict when placed into the same instruction group.
   13198      This option is disabled by default.
   13199 
   13200 `-msel-sched-dont-check-control-spec'
   13201      Generate checks for control speculation in selective scheduling.
   13202      This flag is disabled by default.
   13203 
   13204 `-msched-max-memory-insns=MAX-INSNS'
   13205      Limit on the number of memory insns per instruction group, giving
   13206      lower priority to subsequent memory insns attempting to schedule
   13207      in the same instruction group. Frequently useful to prevent cache
   13208      bank conflicts.  The default value is 1.
   13209 
   13210 `-msched-max-memory-insns-hard-limit'
   13211      Disallow more than `msched-max-memory-insns' in instruction group.
   13212      Otherwise, limit is `soft' meaning that we would prefer non-memory
   13213      operations when limit is reached but may still schedule memory
   13214      operations.
   13215 
   13216 
   13217 
   13218 File: gcc.info,  Node: IA-64/VMS Options,  Next: LM32 Options,  Prev: IA-64 Options,  Up: Submodel Options
   13219 
   13220 3.17.18 IA-64/VMS Options
   13221 -------------------------
   13222 
   13223 These `-m' options are defined for the IA-64/VMS implementations:
   13224 
   13225 `-mvms-return-codes'
   13226      Return VMS condition codes from main. The default is to return
   13227      POSIX style condition (e.g. error) codes.
   13228 
   13229 `-mdebug-main=PREFIX'
   13230      Flag the first routine whose name starts with PREFIX as the main
   13231      routine for the debugger.
   13232 
   13233 `-mmalloc64'
   13234      Default to 64bit memory allocation routines.
   13235 
   13236 
   13237 File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64/VMS Options,  Up: Submodel Options
   13238 
   13239 3.17.19 LM32 Options
   13240 --------------------
   13241 
   13242 These `-m' options are defined for the Lattice Mico32 architecture:
   13243 
   13244 `-mbarrel-shift-enabled'
   13245      Enable barrel-shift instructions.
   13246 
   13247 `-mdivide-enabled'
   13248      Enable divide and modulus instructions.
   13249 
   13250 `-mmultiply-enabled'
   13251      Enable multiply instructions.
   13252 
   13253 `-msign-extend-enabled'
   13254      Enable sign extend instructions.
   13255 
   13256 `-muser-enabled'
   13257      Enable user-defined instructions.
   13258 
   13259 
   13260 
   13261 File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
   13262 
   13263 3.17.20 M32C Options
   13264 --------------------
   13265 
   13266 `-mcpu=NAME'
   13267      Select the CPU for which code is generated.  NAME may be one of
   13268      `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
   13269      series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
   13270      series.
   13271 
   13272 `-msim'
   13273      Specifies that the program will be run on the simulator.  This
   13274      causes an alternate runtime library to be linked in which
   13275      supports, for example, file I/O.  You must not use this option
   13276      when generating programs that will run on real hardware; you must
   13277      provide your own runtime library for whatever I/O functions are
   13278      needed.
   13279 
   13280 `-memregs=NUMBER'
   13281      Specifies the number of memory-based pseudo-registers GCC will use
   13282      during code generation.  These pseudo-registers will be used like
   13283      real registers, so there is a tradeoff between GCC's ability to
   13284      fit the code into available registers, and the performance penalty
   13285      of using memory instead of registers.  Note that all modules in a
   13286      program must be compiled with the same value for this option.
   13287      Because of that, you must not use this option with the default
   13288      runtime libraries gcc builds.
   13289 
   13290 
   13291 
   13292 File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
   13293 
   13294 3.17.21 M32R/D Options
   13295 ----------------------
   13296 
   13297 These `-m' options are defined for Renesas M32R/D architectures:
   13298 
   13299 `-m32r2'
   13300      Generate code for the M32R/2.
   13301 
   13302 `-m32rx'
   13303      Generate code for the M32R/X.
   13304 
   13305 `-m32r'
   13306      Generate code for the M32R.  This is the default.
   13307 
   13308 `-mmodel=small'
   13309      Assume all objects live in the lower 16MB of memory (so that their
   13310      addresses can be loaded with the `ld24' instruction), and assume
   13311      all subroutines are reachable with the `bl' instruction.  This is
   13312      the default.
   13313 
   13314      The addressability of a particular object can be set with the
   13315      `model' attribute.
   13316 
   13317 `-mmodel=medium'
   13318      Assume objects may be anywhere in the 32-bit address space (the
   13319      compiler will generate `seth/add3' instructions to load their
   13320      addresses), and assume all subroutines are reachable with the `bl'
   13321      instruction.
   13322 
   13323 `-mmodel=large'
   13324      Assume objects may be anywhere in the 32-bit address space (the
   13325      compiler will generate `seth/add3' instructions to load their
   13326      addresses), and assume subroutines may not be reachable with the
   13327      `bl' instruction (the compiler will generate the much slower
   13328      `seth/add3/jl' instruction sequence).
   13329 
   13330 `-msdata=none'
   13331      Disable use of the small data area.  Variables will be put into
   13332      one of `.data', `bss', or `.rodata' (unless the `section'
   13333      attribute has been specified).  This is the default.
   13334 
   13335      The small data area consists of sections `.sdata' and `.sbss'.
   13336      Objects may be explicitly put in the small data area with the
   13337      `section' attribute using one of these sections.
   13338 
   13339 `-msdata=sdata'
   13340      Put small global and static data in the small data area, but do not
   13341      generate special code to reference them.
   13342 
   13343 `-msdata=use'
   13344      Put small global and static data in the small data area, and
   13345      generate special instructions to reference them.
   13346 
   13347 `-G NUM'
   13348      Put global and static objects less than or equal to NUM bytes into
   13349      the small data or bss sections instead of the normal data or bss
   13350      sections.  The default value of NUM is 8.  The `-msdata' option
   13351      must be set to one of `sdata' or `use' for this option to have any
   13352      effect.
   13353 
   13354      All modules should be compiled with the same `-G NUM' value.
   13355      Compiling with different values of NUM may or may not work; if it
   13356      doesn't the linker will give an error message--incorrect code will
   13357      not be generated.
   13358 
   13359 `-mdebug'
   13360      Makes the M32R specific code in the compiler display some
   13361      statistics that might help in debugging programs.
   13362 
   13363 `-malign-loops'
   13364      Align all loops to a 32-byte boundary.
   13365 
   13366 `-mno-align-loops'
   13367      Do not enforce a 32-byte alignment for loops.  This is the default.
   13368 
   13369 `-missue-rate=NUMBER'
   13370      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
   13371 
   13372 `-mbranch-cost=NUMBER'
   13373      NUMBER can only be 1 or 2.  If it is 1 then branches will be
   13374      preferred over conditional code, if it is 2, then the opposite will
   13375      apply.
   13376 
   13377 `-mflush-trap=NUMBER'
   13378      Specifies the trap number to use to flush the cache.  The default
   13379      is 12.  Valid numbers are between 0 and 15 inclusive.
   13380 
   13381 `-mno-flush-trap'
   13382      Specifies that the cache cannot be flushed by using a trap.
   13383 
   13384 `-mflush-func=NAME'
   13385      Specifies the name of the operating system function to call to
   13386      flush the cache.  The default is __flush_cache_, but a function
   13387      call will only be used if a trap is not available.
   13388 
   13389 `-mno-flush-func'
   13390      Indicates that there is no OS function for flushing the cache.
   13391 
   13392 
   13393 
   13394 File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
   13395 
   13396 3.17.22 M680x0 Options
   13397 ----------------------
   13398 
   13399 These are the `-m' options defined for M680x0 and ColdFire processors.
   13400 The default settings depend on which architecture was selected when the
   13401 compiler was configured; the defaults for the most common choices are
   13402 given below.
   13403 
   13404 `-march=ARCH'
   13405      Generate code for a specific M680x0 or ColdFire instruction set
   13406      architecture.  Permissible values of ARCH for M680x0 architectures
   13407      are: `68000', `68010', `68020', `68030', `68040', `68060' and
   13408      `cpu32'.  ColdFire architectures are selected according to
   13409      Freescale's ISA classification and the permissible values are:
   13410      `isaa', `isaaplus', `isab' and `isac'.
   13411 
   13412      gcc defines a macro `__mcfARCH__' whenever it is generating code
   13413      for a ColdFire target.  The ARCH in this macro is one of the
   13414      `-march' arguments given above.
   13415 
   13416      When used together, `-march' and `-mtune' select code that runs on
   13417      a family of similar processors but that is optimized for a
   13418      particular microarchitecture.
   13419 
   13420 `-mcpu=CPU'
   13421      Generate code for a specific M680x0 or ColdFire processor.  The
   13422      M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
   13423      `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
   13424      given by the table below, which also classifies the CPUs into
   13425      families:
   13426 
   13427      *Family*      *`-mcpu' arguments*
   13428      `51'          `51' `51ac' `51cn' `51em' `51qe'
   13429      `5206'        `5202' `5204' `5206'
   13430      `5206e'       `5206e'
   13431      `5208'        `5207' `5208'
   13432      `5211a'       `5210a' `5211a'
   13433      `5213'        `5211' `5212' `5213'
   13434      `5216'        `5214' `5216'
   13435      `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
   13436      `5225'        `5224' `5225'
   13437      `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
   13438      `5235'        `5232' `5233' `5234' `5235' `523x'
   13439      `5249'        `5249'
   13440      `5250'        `5250'
   13441      `5271'        `5270' `5271'
   13442      `5272'        `5272'
   13443      `5275'        `5274' `5275'
   13444      `5282'        `5280' `5281' `5282' `528x'
   13445      `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
   13446                    `53017'
   13447      `5307'        `5307'
   13448      `5329'        `5327' `5328' `5329' `532x'
   13449      `5373'        `5372' `5373' `537x'
   13450      `5407'        `5407'
   13451      `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
   13452                    `5480' `5481' `5482' `5483' `5484' `5485'
   13453 
   13454      `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
   13455      CPU.  Other combinations of `-mcpu' and `-march' are rejected.
   13456 
   13457      gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
   13458      selected.  It also defines `__mcf_family_FAMILY', where the value
   13459      of FAMILY is given by the table above.
   13460 
   13461 `-mtune=TUNE'
   13462      Tune the code for a particular microarchitecture, within the
   13463      constraints set by `-march' and `-mcpu'.  The M680x0
   13464      microarchitectures are: `68000', `68010', `68020', `68030',
   13465      `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
   13466      are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
   13467 
   13468      You can also use `-mtune=68020-40' for code that needs to run
   13469      relatively well on 68020, 68030 and 68040 targets.
   13470      `-mtune=68020-60' is similar but includes 68060 targets as well.
   13471      These two options select the same tuning decisions as `-m68020-40'
   13472      and `-m68020-60' respectively.
   13473 
   13474      gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for
   13475      680x0 architecture ARCH.  It also defines `mcARCH' unless either
   13476      `-ansi' or a non-GNU `-std' option is used.  If gcc is tuning for
   13477      a range of architectures, as selected by `-mtune=68020-40' or
   13478      `-mtune=68020-60', it defines the macros for every architecture in
   13479      the range.
   13480 
   13481      gcc also defines the macro `__mUARCH__' when tuning for ColdFire
   13482      microarchitecture UARCH, where UARCH is one of the arguments given
   13483      above.
   13484 
   13485 `-m68000'
   13486 `-mc68000'
   13487      Generate output for a 68000.  This is the default when the
   13488      compiler is configured for 68000-based systems.  It is equivalent
   13489      to `-march=68000'.
   13490 
   13491      Use this option for microcontrollers with a 68000 or EC000 core,
   13492      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
   13493 
   13494 `-m68010'
   13495      Generate output for a 68010.  This is the default when the
   13496      compiler is configured for 68010-based systems.  It is equivalent
   13497      to `-march=68010'.
   13498 
   13499 `-m68020'
   13500 `-mc68020'
   13501      Generate output for a 68020.  This is the default when the
   13502      compiler is configured for 68020-based systems.  It is equivalent
   13503      to `-march=68020'.
   13504 
   13505 `-m68030'
   13506      Generate output for a 68030.  This is the default when the
   13507      compiler is configured for 68030-based systems.  It is equivalent
   13508      to `-march=68030'.
   13509 
   13510 `-m68040'
   13511      Generate output for a 68040.  This is the default when the
   13512      compiler is configured for 68040-based systems.  It is equivalent
   13513      to `-march=68040'.
   13514 
   13515      This option inhibits the use of 68881/68882 instructions that have
   13516      to be emulated by software on the 68040.  Use this option if your
   13517      68040 does not have code to emulate those instructions.
   13518 
   13519 `-m68060'
   13520      Generate output for a 68060.  This is the default when the
   13521      compiler is configured for 68060-based systems.  It is equivalent
   13522      to `-march=68060'.
   13523 
   13524      This option inhibits the use of 68020 and 68881/68882 instructions
   13525      that have to be emulated by software on the 68060.  Use this
   13526      option if your 68060 does not have code to emulate those
   13527      instructions.
   13528 
   13529 `-mcpu32'
   13530      Generate output for a CPU32.  This is the default when the
   13531      compiler is configured for CPU32-based systems.  It is equivalent
   13532      to `-march=cpu32'.
   13533 
   13534      Use this option for microcontrollers with a CPU32 or CPU32+ core,
   13535      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
   13536      68341, 68349 and 68360.
   13537 
   13538 `-m5200'
   13539      Generate output for a 520X ColdFire CPU.  This is the default when
   13540      the compiler is configured for 520X-based systems.  It is
   13541      equivalent to `-mcpu=5206', and is now deprecated in favor of that
   13542      option.
   13543 
   13544      Use this option for microcontroller with a 5200 core, including
   13545      the MCF5202, MCF5203, MCF5204 and MCF5206.
   13546 
   13547 `-m5206e'
   13548      Generate output for a 5206e ColdFire CPU.  The option is now
   13549      deprecated in favor of the equivalent `-mcpu=5206e'.
   13550 
   13551 `-m528x'
   13552      Generate output for a member of the ColdFire 528X family.  The
   13553      option is now deprecated in favor of the equivalent `-mcpu=528x'.
   13554 
   13555 `-m5307'
   13556      Generate output for a ColdFire 5307 CPU.  The option is now
   13557      deprecated in favor of the equivalent `-mcpu=5307'.
   13558 
   13559 `-m5407'
   13560      Generate output for a ColdFire 5407 CPU.  The option is now
   13561      deprecated in favor of the equivalent `-mcpu=5407'.
   13562 
   13563 `-mcfv4e'
   13564      Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
   13565      This includes use of hardware floating point instructions.  The
   13566      option is equivalent to `-mcpu=547x', and is now deprecated in
   13567      favor of that option.
   13568 
   13569 `-m68020-40'
   13570      Generate output for a 68040, without using any of the new
   13571      instructions.  This results in code which can run relatively
   13572      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   13573      generated code does use the 68881 instructions that are emulated
   13574      on the 68040.
   13575 
   13576      The option is equivalent to `-march=68020' `-mtune=68020-40'.
   13577 
   13578 `-m68020-60'
   13579      Generate output for a 68060, without using any of the new
   13580      instructions.  This results in code which can run relatively
   13581      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
   13582      generated code does use the 68881 instructions that are emulated
   13583      on the 68060.
   13584 
   13585      The option is equivalent to `-march=68020' `-mtune=68020-60'.
   13586 
   13587 `-mhard-float'
   13588 `-m68881'
   13589      Generate floating-point instructions.  This is the default for
   13590      68020 and above, and for ColdFire devices that have an FPU.  It
   13591      defines the macro `__HAVE_68881__' on M680x0 targets and
   13592      `__mcffpu__' on ColdFire targets.
   13593 
   13594 `-msoft-float'
   13595      Do not generate floating-point instructions; use library calls
   13596      instead.  This is the default for 68000, 68010, and 68832 targets.
   13597      It is also the default for ColdFire devices that have no FPU.
   13598 
   13599 `-mdiv'
   13600 `-mno-div'
   13601      Generate (do not generate) ColdFire hardware divide and remainder
   13602      instructions.  If `-march' is used without `-mcpu', the default is
   13603      "on" for ColdFire architectures and "off" for M680x0
   13604      architectures.  Otherwise, the default is taken from the target CPU
   13605      (either the default CPU, or the one specified by `-mcpu').  For
   13606      example, the default is "off" for `-mcpu=5206' and "on" for
   13607      `-mcpu=5206e'.
   13608 
   13609      gcc defines the macro `__mcfhwdiv__' when this option is enabled.
   13610 
   13611 `-mshort'
   13612      Consider type `int' to be 16 bits wide, like `short int'.
   13613      Additionally, parameters passed on the stack are also aligned to a
   13614      16-bit boundary even on targets whose API mandates promotion to
   13615      32-bit.
   13616 
   13617 `-mno-short'
   13618      Do not consider type `int' to be 16 bits wide.  This is the
   13619      default.
   13620 
   13621 `-mnobitfield'
   13622 `-mno-bitfield'
   13623      Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
   13624      and `-m5200' options imply `-mnobitfield'.
   13625 
   13626 `-mbitfield'
   13627      Do use the bit-field instructions.  The `-m68020' option implies
   13628      `-mbitfield'.  This is the default if you use a configuration
   13629      designed for a 68020.
   13630 
   13631 `-mrtd'
   13632      Use a different function-calling convention, in which functions
   13633      that take a fixed number of arguments return with the `rtd'
   13634      instruction, which pops their arguments while returning.  This
   13635      saves one instruction in the caller since there is no need to pop
   13636      the arguments there.
   13637 
   13638      This calling convention is incompatible with the one normally used
   13639      on Unix, so you cannot use it if you need to call libraries
   13640      compiled with the Unix compiler.
   13641 
   13642      Also, you must provide function prototypes for all functions that
   13643      take variable numbers of arguments (including `printf'); otherwise
   13644      incorrect code will be generated for calls to those functions.
   13645 
   13646      In addition, seriously incorrect code will result if you call a
   13647      function with too many arguments.  (Normally, extra arguments are
   13648      harmlessly ignored.)
   13649 
   13650      The `rtd' instruction is supported by the 68010, 68020, 68030,
   13651      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
   13652 
   13653 `-mno-rtd'
   13654      Do not use the calling conventions selected by `-mrtd'.  This is
   13655      the default.
   13656 
   13657 `-malign-int'
   13658 `-mno-align-int'
   13659      Control whether GCC aligns `int', `long', `long long', `float',
   13660      `double', and `long double' variables on a 32-bit boundary
   13661      (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
   13662      variables on 32-bit boundaries produces code that runs somewhat
   13663      faster on processors with 32-bit busses at the expense of more
   13664      memory.
   13665 
   13666      *Warning:* if you use the `-malign-int' switch, GCC will align
   13667      structures containing the above types  differently than most
   13668      published application binary interface specifications for the m68k.
   13669 
   13670 `-mpcrel'
   13671      Use the pc-relative addressing mode of the 68000 directly, instead
   13672      of using a global offset table.  At present, this option implies
   13673      `-fpic', allowing at most a 16-bit offset for pc-relative
   13674      addressing.  `-fPIC' is not presently supported with `-mpcrel',
   13675      though this could be supported for 68020 and higher processors.
   13676 
   13677 `-mno-strict-align'
   13678 `-mstrict-align'
   13679      Do not (do) assume that unaligned memory references will be
   13680      handled by the system.
   13681 
   13682 `-msep-data'
   13683      Generate code that allows the data segment to be located in a
   13684      different area of memory from the text segment.  This allows for
   13685      execute in place in an environment without virtual memory
   13686      management.  This option implies `-fPIC'.
   13687 
   13688 `-mno-sep-data'
   13689      Generate code that assumes that the data segment follows the text
   13690      segment.  This is the default.
   13691 
   13692 `-mid-shared-library'
   13693      Generate code that supports shared libraries via the library ID
   13694      method.  This allows for execute in place and shared libraries in
   13695      an environment without virtual memory management.  This option
   13696      implies `-fPIC'.
   13697 
   13698 `-mno-id-shared-library'
   13699      Generate code that doesn't assume ID based shared libraries are
   13700      being used.  This is the default.
   13701 
   13702 `-mshared-library-id=n'
   13703      Specified the identification number of the ID based shared library
   13704      being compiled.  Specifying a value of 0 will generate more
   13705      compact code, specifying other values will force the allocation of
   13706      that number to the current library but is no more space or time
   13707      efficient than omitting this option.
   13708 
   13709 `-mxgot'
   13710 `-mno-xgot'
   13711      When generating position-independent code for ColdFire, generate
   13712      code that works if the GOT has more than 8192 entries.  This code
   13713      is larger and slower than code generated without this option.  On
   13714      M680x0 processors, this option is not needed; `-fPIC' suffices.
   13715 
   13716      GCC normally uses a single instruction to load values from the GOT.
   13717      While this is relatively efficient, it only works if the GOT is
   13718      smaller than about 64k.  Anything larger causes the linker to
   13719      report an error such as:
   13720 
   13721           relocation truncated to fit: R_68K_GOT16O foobar
   13722 
   13723      If this happens, you should recompile your code with `-mxgot'.  It
   13724      should then work with very large GOTs.  However, code generated
   13725      with `-mxgot' is less efficient, since it takes 4 instructions to
   13726      fetch the value of a global symbol.
   13727 
   13728      Note that some linkers, including newer versions of the GNU linker,
   13729      can create multiple GOTs and sort GOT entries.  If you have such a
   13730      linker, you should only need to use `-mxgot' when compiling a
   13731      single object file that accesses more than 8192 GOT entries.  Very
   13732      few do.
   13733 
   13734      These options have no effect unless GCC is generating
   13735      position-independent code.
   13736 
   13737 
   13738 
   13739 File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
   13740 
   13741 3.17.23 M68hc1x Options
   13742 -----------------------
   13743 
   13744 These are the `-m' options defined for the 68hc11 and 68hc12
   13745 microcontrollers.  The default values for these options depends on
   13746 which style of microcontroller was selected when the compiler was
   13747 configured; the defaults for the most common choices are given below.
   13748 
   13749 `-m6811'
   13750 `-m68hc11'
   13751      Generate output for a 68HC11.  This is the default when the
   13752      compiler is configured for 68HC11-based systems.
   13753 
   13754 `-m6812'
   13755 `-m68hc12'
   13756      Generate output for a 68HC12.  This is the default when the
   13757      compiler is configured for 68HC12-based systems.
   13758 
   13759 `-m68S12'
   13760 `-m68hcs12'
   13761      Generate output for a 68HCS12.
   13762 
   13763 `-mauto-incdec'
   13764      Enable the use of 68HC12 pre and post auto-increment and
   13765      auto-decrement addressing modes.
   13766 
   13767 `-minmax'
   13768 `-mnominmax'
   13769      Enable the use of 68HC12 min and max instructions.
   13770 
   13771 `-mlong-calls'
   13772 `-mno-long-calls'
   13773      Treat all calls as being far away (near).  If calls are assumed to
   13774      be far away, the compiler will use the `call' instruction to call
   13775      a function and the `rtc' instruction for returning.
   13776 
   13777 `-mshort'
   13778      Consider type `int' to be 16 bits wide, like `short int'.
   13779 
   13780 `-msoft-reg-count=COUNT'
   13781      Specify the number of pseudo-soft registers which are used for the
   13782      code generation.  The maximum number is 32.  Using more pseudo-soft
   13783      register may or may not result in better code depending on the
   13784      program.  The default is 4 for 68HC11 and 2 for 68HC12.
   13785 
   13786 
   13787 
   13788 File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M68hc1x Options,  Up: Submodel Options
   13789 
   13790 3.17.24 MCore Options
   13791 ---------------------
   13792 
   13793 These are the `-m' options defined for the Motorola M*Core processors.
   13794 
   13795 `-mhardlit'
   13796 `-mno-hardlit'
   13797      Inline constants into the code stream if it can be done in two
   13798      instructions or less.
   13799 
   13800 `-mdiv'
   13801 `-mno-div'
   13802      Use the divide instruction.  (Enabled by default).
   13803 
   13804 `-mrelax-immediate'
   13805 `-mno-relax-immediate'
   13806      Allow arbitrary sized immediates in bit operations.
   13807 
   13808 `-mwide-bitfields'
   13809 `-mno-wide-bitfields'
   13810      Always treat bit-fields as int-sized.
   13811 
   13812 `-m4byte-functions'
   13813 `-mno-4byte-functions'
   13814      Force all functions to be aligned to a four byte boundary.
   13815 
   13816 `-mcallgraph-data'
   13817 `-mno-callgraph-data'
   13818      Emit callgraph information.
   13819 
   13820 `-mslow-bytes'
   13821 `-mno-slow-bytes'
   13822      Prefer word access when reading byte quantities.
   13823 
   13824 `-mlittle-endian'
   13825 `-mbig-endian'
   13826      Generate code for a little endian target.
   13827 
   13828 `-m210'
   13829 `-m340'
   13830      Generate code for the 210 processor.
   13831 
   13832 `-mno-lsim'
   13833      Assume that run-time support has been provided and so omit the
   13834      simulator library (`libsim.a)' from the linker command line.
   13835 
   13836 `-mstack-increment=SIZE'
   13837      Set the maximum amount for a single stack increment operation.
   13838      Large values can increase the speed of programs which contain
   13839      functions that need a large amount of stack space, but they can
   13840      also trigger a segmentation fault if the stack is extended too
   13841      much.  The default value is 0x1000.
   13842 
   13843 
   13844 
   13845 File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
   13846 
   13847 3.17.25 MeP Options
   13848 -------------------
   13849 
   13850 `-mabsdiff'
   13851      Enables the `abs' instruction, which is the absolute difference
   13852      between two registers.
   13853 
   13854 `-mall-opts'
   13855      Enables all the optional instructions - average, multiply, divide,
   13856      bit operations, leading zero, absolute difference, min/max, clip,
   13857      and saturation.
   13858 
   13859 `-maverage'
   13860      Enables the `ave' instruction, which computes the average of two
   13861      registers.
   13862 
   13863 `-mbased=N'
   13864      Variables of size N bytes or smaller will be placed in the
   13865      `.based' section by default.  Based variables use the `$tp'
   13866      register as a base register, and there is a 128 byte limit to the
   13867      `.based' section.
   13868 
   13869 `-mbitops'
   13870      Enables the bit operation instructions - bit test (`btstm'), set
   13871      (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
   13872      (`tas').
   13873 
   13874 `-mc=NAME'
   13875      Selects which section constant data will be placed in.  NAME may
   13876      be `tiny', `near', or `far'.
   13877 
   13878 `-mclip'
   13879      Enables the `clip' instruction.  Note that `-mclip' is not useful
   13880      unless you also provide `-mminmax'.
   13881 
   13882 `-mconfig=NAME'
   13883      Selects one of the build-in core configurations.  Each MeP chip has
   13884      one or more modules in it; each module has a core CPU and a
   13885      variety of coprocessors, optional instructions, and peripherals.
   13886      The `MeP-Integrator' tool, not part of GCC, provides these
   13887      configurations through this option; using this option is the same
   13888      as using all the corresponding command line options.  The default
   13889      configuration is `default'.
   13890 
   13891 `-mcop'
   13892      Enables the coprocessor instructions.  By default, this is a 32-bit
   13893      coprocessor.  Note that the coprocessor is normally enabled via the
   13894      `-mconfig=' option.
   13895 
   13896 `-mcop32'
   13897      Enables the 32-bit coprocessor's instructions.
   13898 
   13899 `-mcop64'
   13900      Enables the 64-bit coprocessor's instructions.
   13901 
   13902 `-mivc2'
   13903      Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
   13904 
   13905 `-mdc'
   13906      Causes constant variables to be placed in the `.near' section.
   13907 
   13908 `-mdiv'
   13909      Enables the `div' and `divu' instructions.
   13910 
   13911 `-meb'
   13912      Generate big-endian code.
   13913 
   13914 `-mel'
   13915      Generate little-endian code.
   13916 
   13917 `-mio-volatile'
   13918      Tells the compiler that any variable marked with the `io'
   13919      attribute is to be considered volatile.
   13920 
   13921 `-ml'
   13922      Causes variables to be assigned to the `.far' section by default.
   13923 
   13924 `-mleadz'
   13925      Enables the `leadz' (leading zero) instruction.
   13926 
   13927 `-mm'
   13928      Causes variables to be assigned to the `.near' section by default.
   13929 
   13930 `-mminmax'
   13931      Enables the `min' and `max' instructions.
   13932 
   13933 `-mmult'
   13934      Enables the multiplication and multiply-accumulate instructions.
   13935 
   13936 `-mno-opts'
   13937      Disables all the optional instructions enabled by `-mall-opts'.
   13938 
   13939 `-mrepeat'
   13940      Enables the `repeat' and `erepeat' instructions, used for
   13941      low-overhead looping.
   13942 
   13943 `-ms'
   13944      Causes all variables to default to the `.tiny' section.  Note that
   13945      there is a 65536 byte limit to this section.  Accesses to these
   13946      variables use the `%gp' base register.
   13947 
   13948 `-msatur'
   13949      Enables the saturation instructions.  Note that the compiler does
   13950      not currently generate these itself, but this option is included
   13951      for compatibility with other tools, like `as'.
   13952 
   13953 `-msdram'
   13954      Link the SDRAM-based runtime instead of the default ROM-based
   13955      runtime.
   13956 
   13957 `-msim'
   13958      Link the simulator runtime libraries.
   13959 
   13960 `-msimnovec'
   13961      Link the simulator runtime libraries, excluding built-in support
   13962      for reset and exception vectors and tables.
   13963 
   13964 `-mtf'
   13965      Causes all functions to default to the `.far' section.  Without
   13966      this option, functions default to the `.near' section.
   13967 
   13968 `-mtiny=N'
   13969      Variables that are N bytes or smaller will be allocated to the
   13970      `.tiny' section.  These variables use the `$gp' base register.
   13971      The default for this option is 4, but note that there's a 65536
   13972      byte limit to the `.tiny' section.
   13973 
   13974 
   13975 
   13976 File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
   13977 
   13978 3.17.26 MicroBlaze Options
   13979 --------------------------
   13980 
   13981 `-msoft-float'
   13982      Use software emulation for floating point (default).
   13983 
   13984 `-mhard-float'
   13985      Use hardware floating point instructions.
   13986 
   13987 `-mmemcpy'
   13988      Do not optimize block moves, use `memcpy'.
   13989 
   13990 `-mno-clearbss'
   13991      This option is deprecated.  Use `-fno-zero-initialized-in-bss'
   13992      instead.
   13993 
   13994 `-mcpu=CPU-TYPE'
   13995      Use features of and schedule code for given CPU.  Supported values
   13996      are in the format `vX.YY.Z', where X is a major version, YY is the
   13997      minor version, and Z is compatibility code.  Example values are
   13998      `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', `v6.00.a'.
   13999 
   14000 `-mxl-soft-mul'
   14001      Use software multiply emulation (default).
   14002 
   14003 `-mxl-soft-div'
   14004      Use software emulation for divides (default).
   14005 
   14006 `-mxl-barrel-shift'
   14007      Use the hardware barrel shifter.
   14008 
   14009 `-mxl-pattern-compare'
   14010      Use pattern compare instructions.
   14011 
   14012 `-msmall-divides'
   14013      Use table lookup optimization for small signed integer divisions.
   14014 
   14015 `-mxl-stack-check'
   14016      This option is deprecated.  Use -fstack-check instead.
   14017 
   14018 `-mxl-gp-opt'
   14019      Use GP relative sdata/sbss sections.
   14020 
   14021 `-mxl-multiply-high'
   14022      Use multiply high instructions for high part of 32x32 multiply.
   14023 
   14024 `-mxl-float-convert'
   14025      Use hardware floating point conversion instructions.
   14026 
   14027 `-mxl-float-sqrt'
   14028      Use hardware floating point square root instruction.
   14029 
   14030 `-mxl-mode-APP-MODEL'
   14031      Select application model APP-MODEL.  Valid models are
   14032     `executable'
   14033           normal executable (default), uses startup code `crt0.o'.
   14034 
   14035     `xmdstub'
   14036           for use with Xilinx Microprocessor Debugger (XMD) based
   14037           software intrusive debug agent called xmdstub. This uses
   14038           startup file `crt1.o' and sets the start address of the
   14039           program to be 0x800.
   14040 
   14041     `bootstrap'
   14042           for applications that are loaded using a bootloader.  This
   14043           model uses startup file `crt2.o' which does not contain a
   14044           processor reset vector handler. This is suitable for
   14045           transferring control on a processor reset to the bootloader
   14046           rather than the application.
   14047 
   14048     `novectors'
   14049           for applications that do not require any of the MicroBlaze
   14050           vectors. This option may be useful for applications running
   14051           within a monitoring application. This model uses `crt3.o' as
   14052           a startup file.
   14053 
   14054      Option `-xl-mode-APP-MODEL' is a deprecated alias for
   14055      `-mxl-mode-APP-MODEL'.
   14056 
   14057 
   14058 
   14059 File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
   14060 
   14061 3.17.27 MIPS Options
   14062 --------------------
   14063 
   14064 `-EB'
   14065      Generate big-endian code.
   14066 
   14067 `-EL'
   14068      Generate little-endian code.  This is the default for `mips*el-*-*'
   14069      configurations.
   14070 
   14071 `-march=ARCH'
   14072      Generate code that will run on ARCH, which can be the name of a
   14073      generic MIPS ISA, or the name of a particular processor.  The ISA
   14074      names are: `mips1', `mips2', `mips3', `mips4', `mips32',
   14075      `mips32r2', `mips64' and `mips64r2'.  The processor names are:
   14076      `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd',
   14077      `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec',
   14078      `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc',
   14079      `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1',
   14080      `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', `m4k',
   14081      `octeon', `orion', `r2000', `r3000', `r3900', `r4000', `r4400',
   14082      `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `r10000',
   14083      `r12000', `r14000', `r16000', `sb1', `sr71000', `vr4100',
   14084      `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', `vr5400',
   14085      `vr5500' and `xlr'.  The special value `from-abi' selects the most
   14086      compatible architecture for the selected ABI (that is, `mips1' for
   14087      32-bit ABIs and `mips3' for 64-bit ABIs).
   14088 
   14089      Native Linux/GNU toolchains also support the value `native', which
   14090      selects the best architecture option for the host processor.
   14091      `-march=native' has no effect if GCC does not recognize the
   14092      processor.
   14093 
   14094      In processor names, a final `000' can be abbreviated as `k' (for
   14095      example, `-march=r2k').  Prefixes are optional, and `vr' may be
   14096      written `r'.
   14097 
   14098      Names of the form `Nf2_1' refer to processors with FPUs clocked at
   14099      half the rate of the core, names of the form `Nf1_1' refer to
   14100      processors with FPUs clocked at the same rate as the core, and
   14101      names of the form `Nf3_2' refer to processors with FPUs clocked a
   14102      ratio of 3:2 with respect to the core.  For compatibility reasons,
   14103      `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
   14104      accepted as synonyms for `Nf1_1'.
   14105 
   14106      GCC defines two macros based on the value of this option.  The
   14107      first is `_MIPS_ARCH', which gives the name of target
   14108      architecture, as a string.  The second has the form
   14109      `_MIPS_ARCH_FOO', where FOO is the capitalized value of
   14110      `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
   14111      to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
   14112 
   14113      Note that the `_MIPS_ARCH' macro uses the processor names given
   14114      above.  In other words, it will have the full prefix and will not
   14115      abbreviate `000' as `k'.  In the case of `from-abi', the macro
   14116      names the resolved architecture (either `"mips1"' or `"mips3"').
   14117      It names the default architecture when no `-march' option is given.
   14118 
   14119 `-mtune=ARCH'
   14120      Optimize for ARCH.  Among other things, this option controls the
   14121      way instructions are scheduled, and the perceived cost of
   14122      arithmetic operations.  The list of ARCH values is the same as for
   14123      `-march'.
   14124 
   14125      When this option is not used, GCC will optimize for the processor
   14126      specified by `-march'.  By using `-march' and `-mtune' together,
   14127      it is possible to generate code that will run on a family of
   14128      processors, but optimize the code for one particular member of
   14129      that family.
   14130 
   14131      `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
   14132      which work in the same way as the `-march' ones described above.
   14133 
   14134 `-mips1'
   14135      Equivalent to `-march=mips1'.
   14136 
   14137 `-mips2'
   14138      Equivalent to `-march=mips2'.
   14139 
   14140 `-mips3'
   14141      Equivalent to `-march=mips3'.
   14142 
   14143 `-mips4'
   14144      Equivalent to `-march=mips4'.
   14145 
   14146 `-mips32'
   14147      Equivalent to `-march=mips32'.
   14148 
   14149 `-mips32r2'
   14150      Equivalent to `-march=mips32r2'.
   14151 
   14152 `-mips64'
   14153      Equivalent to `-march=mips64'.
   14154 
   14155 `-mips64r2'
   14156      Equivalent to `-march=mips64r2'.
   14157 
   14158 `-mips16'
   14159 `-mno-mips16'
   14160      Generate (do not generate) MIPS16 code.  If GCC is targetting a
   14161      MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
   14162 
   14163      MIPS16 code generation can also be controlled on a per-function
   14164      basis by means of `mips16' and `nomips16' attributes.  *Note
   14165      Function Attributes::, for more information.
   14166 
   14167 `-mflip-mips16'
   14168      Generate MIPS16 code on alternating functions.  This option is
   14169      provided for regression testing of mixed MIPS16/non-MIPS16 code
   14170      generation, and is not intended for ordinary use in compiling user
   14171      code.
   14172 
   14173 `-minterlink-mips16'
   14174 `-mno-interlink-mips16'
   14175      Require (do not require) that non-MIPS16 code be link-compatible
   14176      with MIPS16 code.
   14177 
   14178      For example, non-MIPS16 code cannot jump directly to MIPS16 code;
   14179      it must either use a call or an indirect jump.
   14180      `-minterlink-mips16' therefore disables direct jumps unless GCC
   14181      knows that the target of the jump is not MIPS16.
   14182 
   14183 `-mabi=32'
   14184 `-mabi=o64'
   14185 `-mabi=n32'
   14186 `-mabi=64'
   14187 `-mabi=eabi'
   14188      Generate code for the given ABI.
   14189 
   14190      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
   14191      generates 64-bit code when you select a 64-bit architecture, but
   14192      you can use `-mgp32' to get 32-bit code instead.
   14193 
   14194      For information about the O64 ABI, see
   14195      `http://gcc.gnu.org/projects/mipso64-abi.html'.
   14196 
   14197      GCC supports a variant of the o32 ABI in which floating-point
   14198      registers are 64 rather than 32 bits wide.  You can select this
   14199      combination with `-mabi=32' `-mfp64'.  This ABI relies on the
   14200      `mthc1' and `mfhc1' instructions and is therefore only supported
   14201      for MIPS32R2 processors.
   14202 
   14203      The register assignments for arguments and return values remain the
   14204      same, but each scalar value is passed in a single 64-bit register
   14205      rather than a pair of 32-bit registers.  For example, scalar
   14206      floating-point values are returned in `$f0' only, not a
   14207      `$f0'/`$f1' pair.  The set of call-saved registers also remains
   14208      the same, but all 64 bits are saved.
   14209 
   14210 `-mabicalls'
   14211 `-mno-abicalls'
   14212      Generate (do not generate) code that is suitable for SVR4-style
   14213      dynamic objects.  `-mabicalls' is the default for SVR4-based
   14214      systems.
   14215 
   14216 `-mshared'
   14217 `-mno-shared'
   14218      Generate (do not generate) code that is fully position-independent,
   14219      and that can therefore be linked into shared libraries.  This
   14220      option only affects `-mabicalls'.
   14221 
   14222      All `-mabicalls' code has traditionally been position-independent,
   14223      regardless of options like `-fPIC' and `-fpic'.  However, as an
   14224      extension, the GNU toolchain allows executables to use absolute
   14225      accesses for locally-binding symbols.  It can also use shorter GP
   14226      initialization sequences and generate direct calls to
   14227      locally-defined functions.  This mode is selected by `-mno-shared'.
   14228 
   14229      `-mno-shared' depends on binutils 2.16 or higher and generates
   14230      objects that can only be linked by the GNU linker.  However, the
   14231      option does not affect the ABI of the final executable; it only
   14232      affects the ABI of relocatable objects.  Using `-mno-shared' will
   14233      generally make executables both smaller and quicker.
   14234 
   14235      `-mshared' is the default.
   14236 
   14237 `-mplt'
   14238 `-mno-plt'
   14239      Assume (do not assume) that the static and dynamic linkers support
   14240      PLTs and copy relocations.  This option only affects `-mno-shared
   14241      -mabicalls'.  For the n64 ABI, this option has no effect without
   14242      `-msym32'.
   14243 
   14244      You can make `-mplt' the default by configuring GCC with
   14245      `--with-mips-plt'.  The default is `-mno-plt' otherwise.
   14246 
   14247 `-mxgot'
   14248 `-mno-xgot'
   14249      Lift (do not lift) the usual restrictions on the size of the global
   14250      offset table.
   14251 
   14252      GCC normally uses a single instruction to load values from the GOT.
   14253      While this is relatively efficient, it will only work if the GOT
   14254      is smaller than about 64k.  Anything larger will cause the linker
   14255      to report an error such as:
   14256 
   14257           relocation truncated to fit: R_MIPS_GOT16 foobar
   14258 
   14259      If this happens, you should recompile your code with `-mxgot'.  It
   14260      should then work with very large GOTs, although it will also be
   14261      less efficient, since it will take three instructions to fetch the
   14262      value of a global symbol.
   14263 
   14264      Note that some linkers can create multiple GOTs.  If you have such
   14265      a linker, you should only need to use `-mxgot' when a single object
   14266      file accesses more than 64k's worth of GOT entries.  Very few do.
   14267 
   14268      These options have no effect unless GCC is generating position
   14269      independent code.
   14270 
   14271 `-mgp32'
   14272      Assume that general-purpose registers are 32 bits wide.
   14273 
   14274 `-mgp64'
   14275      Assume that general-purpose registers are 64 bits wide.
   14276 
   14277 `-mfp32'
   14278      Assume that floating-point registers are 32 bits wide.
   14279 
   14280 `-mfp64'
   14281      Assume that floating-point registers are 64 bits wide.
   14282 
   14283 `-mhard-float'
   14284      Use floating-point coprocessor instructions.
   14285 
   14286 `-msoft-float'
   14287      Do not use floating-point coprocessor instructions.  Implement
   14288      floating-point calculations using library calls instead.
   14289 
   14290 `-msingle-float'
   14291      Assume that the floating-point coprocessor only supports
   14292      single-precision operations.
   14293 
   14294 `-mdouble-float'
   14295      Assume that the floating-point coprocessor supports
   14296      double-precision operations.  This is the default.
   14297 
   14298 `-mllsc'
   14299 `-mno-llsc'
   14300      Use (do not use) `ll', `sc', and `sync' instructions to implement
   14301      atomic memory built-in functions.  When neither option is
   14302      specified, GCC will use the instructions if the target architecture
   14303      supports them.
   14304 
   14305      `-mllsc' is useful if the runtime environment can emulate the
   14306      instructions and `-mno-llsc' can be useful when compiling for
   14307      nonstandard ISAs.  You can make either option the default by
   14308      configuring GCC with `--with-llsc' and `--without-llsc'
   14309      respectively.  `--with-llsc' is the default for some
   14310      configurations; see the installation documentation for details.
   14311 
   14312 `-mdsp'
   14313 `-mno-dsp'
   14314      Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
   14315      Built-in Functions::.  This option defines the preprocessor macro
   14316      `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
   14317 
   14318 `-mdspr2'
   14319 `-mno-dspr2'
   14320      Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
   14321      Built-in Functions::.  This option defines the preprocessor macros
   14322      `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
   14323      to 2.
   14324 
   14325 `-msmartmips'
   14326 `-mno-smartmips'
   14327      Use (do not use) the MIPS SmartMIPS ASE.
   14328 
   14329 `-mpaired-single'
   14330 `-mno-paired-single'
   14331      Use (do not use) paired-single floating-point instructions.  *Note
   14332      MIPS Paired-Single Support::.  This option requires hardware
   14333      floating-point support to be enabled.
   14334 
   14335 `-mdmx'
   14336 `-mno-mdmx'
   14337      Use (do not use) MIPS Digital Media Extension instructions.  This
   14338      option can only be used when generating 64-bit code and requires
   14339      hardware floating-point support to be enabled.
   14340 
   14341 `-mips3d'
   14342 `-mno-mips3d'
   14343      Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
   14344      Functions::.  The option `-mips3d' implies `-mpaired-single'.
   14345 
   14346 `-mmt'
   14347 `-mno-mt'
   14348      Use (do not use) MT Multithreading instructions.
   14349 
   14350 `-mlong64'
   14351      Force `long' types to be 64 bits wide.  See `-mlong32' for an
   14352      explanation of the default and the way that the pointer size is
   14353      determined.
   14354 
   14355 `-mlong32'
   14356      Force `long', `int', and pointer types to be 32 bits wide.
   14357 
   14358      The default size of `int's, `long's and pointers depends on the
   14359      ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
   14360      64-bit `long's, as does the 64-bit EABI; the others use 32-bit
   14361      `long's.  Pointers are the same size as `long's, or the same size
   14362      as integer registers, whichever is smaller.
   14363 
   14364 `-msym32'
   14365 `-mno-sym32'
   14366      Assume (do not assume) that all symbols have 32-bit values,
   14367      regardless of the selected ABI.  This option is useful in
   14368      combination with `-mabi=64' and `-mno-abicalls' because it allows
   14369      GCC to generate shorter and faster references to symbolic
   14370      addresses.
   14371 
   14372 `-G NUM'
   14373      Put definitions of externally-visible data in a small data section
   14374      if that data is no bigger than NUM bytes.  GCC can then access the
   14375      data more efficiently; see `-mgpopt' for details.
   14376 
   14377      The default `-G' option depends on the configuration.
   14378 
   14379 `-mlocal-sdata'
   14380 `-mno-local-sdata'
   14381      Extend (do not extend) the `-G' behavior to local data too, such
   14382      as to static variables in C.  `-mlocal-sdata' is the default for
   14383      all configurations.
   14384 
   14385      If the linker complains that an application is using too much
   14386      small data, you might want to try rebuilding the less
   14387      performance-critical parts with `-mno-local-sdata'.  You might
   14388      also want to build large libraries with `-mno-local-sdata', so
   14389      that the libraries leave more room for the main program.
   14390 
   14391 `-mextern-sdata'
   14392 `-mno-extern-sdata'
   14393      Assume (do not assume) that externally-defined data will be in a
   14394      small data section if that data is within the `-G' limit.
   14395      `-mextern-sdata' is the default for all configurations.
   14396 
   14397      If you compile a module MOD with `-mextern-sdata' `-G NUM'
   14398      `-mgpopt', and MOD references a variable VAR that is no bigger
   14399      than NUM bytes, you must make sure that VAR is placed in a small
   14400      data section.  If VAR is defined by another module, you must
   14401      either compile that module with a high-enough `-G' setting or
   14402      attach a `section' attribute to VAR's definition.  If VAR is
   14403      common, you must link the application with a high-enough `-G'
   14404      setting.
   14405 
   14406      The easiest way of satisfying these restrictions is to compile and
   14407      link every module with the same `-G' option.  However, you may
   14408      wish to build a library that supports several different small data
   14409      limits.  You can do this by compiling the library with the highest
   14410      supported `-G' setting and additionally using `-mno-extern-sdata'
   14411      to stop the library from making assumptions about
   14412      externally-defined data.
   14413 
   14414 `-mgpopt'
   14415 `-mno-gpopt'
   14416      Use (do not use) GP-relative accesses for symbols that are known
   14417      to be in a small data section; see `-G', `-mlocal-sdata' and
   14418      `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
   14419 
   14420      `-mno-gpopt' is useful for cases where the `$gp' register might
   14421      not hold the value of `_gp'.  For example, if the code is part of
   14422      a library that might be used in a boot monitor, programs that call
   14423      boot monitor routines will pass an unknown value in `$gp'.  (In
   14424      such situations, the boot monitor itself would usually be compiled
   14425      with `-G0'.)
   14426 
   14427      `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
   14428 
   14429 `-membedded-data'
   14430 `-mno-embedded-data'
   14431      Allocate variables to the read-only data section first if
   14432      possible, then next in the small data section if possible,
   14433      otherwise in data.  This gives slightly slower code than the
   14434      default, but reduces the amount of RAM required when executing,
   14435      and thus may be preferred for some embedded systems.
   14436 
   14437 `-muninit-const-in-rodata'
   14438 `-mno-uninit-const-in-rodata'
   14439      Put uninitialized `const' variables in the read-only data section.
   14440      This option is only meaningful in conjunction with
   14441      `-membedded-data'.
   14442 
   14443 `-mcode-readable=SETTING'
   14444      Specify whether GCC may generate code that reads from executable
   14445      sections.  There are three possible settings:
   14446 
   14447     `-mcode-readable=yes'
   14448           Instructions may freely access executable sections.  This is
   14449           the default setting.
   14450 
   14451     `-mcode-readable=pcrel'
   14452           MIPS16 PC-relative load instructions can access executable
   14453           sections, but other instructions must not do so.  This option
   14454           is useful on 4KSc and 4KSd processors when the code TLBs have
   14455           the Read Inhibit bit set.  It is also useful on processors
   14456           that can be configured to have a dual instruction/data SRAM
   14457           interface and that, like the M4K, automatically redirect
   14458           PC-relative loads to the instruction RAM.
   14459 
   14460     `-mcode-readable=no'
   14461           Instructions must not access executable sections.  This
   14462           option can be useful on targets that are configured to have a
   14463           dual instruction/data SRAM interface but that (unlike the
   14464           M4K) do not automatically redirect PC-relative loads to the
   14465           instruction RAM.
   14466 
   14467 `-msplit-addresses'
   14468 `-mno-split-addresses'
   14469      Enable (disable) use of the `%hi()' and `%lo()' assembler
   14470      relocation operators.  This option has been superseded by
   14471      `-mexplicit-relocs' but is retained for backwards compatibility.
   14472 
   14473 `-mexplicit-relocs'
   14474 `-mno-explicit-relocs'
   14475      Use (do not use) assembler relocation operators when dealing with
   14476      symbolic addresses.  The alternative, selected by
   14477      `-mno-explicit-relocs', is to use assembler macros instead.
   14478 
   14479      `-mexplicit-relocs' is the default if GCC was configured to use an
   14480      assembler that supports relocation operators.
   14481 
   14482 `-mcheck-zero-division'
   14483 `-mno-check-zero-division'
   14484      Trap (do not trap) on integer division by zero.
   14485 
   14486      The default is `-mcheck-zero-division'.
   14487 
   14488 `-mdivide-traps'
   14489 `-mdivide-breaks'
   14490      MIPS systems check for division by zero by generating either a
   14491      conditional trap or a break instruction.  Using traps results in
   14492      smaller code, but is only supported on MIPS II and later.  Also,
   14493      some versions of the Linux kernel have a bug that prevents trap
   14494      from generating the proper signal (`SIGFPE').  Use
   14495      `-mdivide-traps' to allow conditional traps on architectures that
   14496      support them and `-mdivide-breaks' to force the use of breaks.
   14497 
   14498      The default is usually `-mdivide-traps', but this can be
   14499      overridden at configure time using `--with-divide=breaks'.
   14500      Divide-by-zero checks can be completely disabled using
   14501      `-mno-check-zero-division'.
   14502 
   14503 `-mmemcpy'
   14504 `-mno-memcpy'
   14505      Force (do not force) the use of `memcpy()' for non-trivial block
   14506      moves.  The default is `-mno-memcpy', which allows GCC to inline
   14507      most constant-sized copies.
   14508 
   14509 `-mlong-calls'
   14510 `-mno-long-calls'
   14511      Disable (do not disable) use of the `jal' instruction.  Calling
   14512      functions using `jal' is more efficient but requires the caller
   14513      and callee to be in the same 256 megabyte segment.
   14514 
   14515      This option has no effect on abicalls code.  The default is
   14516      `-mno-long-calls'.
   14517 
   14518 `-mmad'
   14519 `-mno-mad'
   14520      Enable (disable) use of the `mad', `madu' and `mul' instructions,
   14521      as provided by the R4650 ISA.
   14522 
   14523 `-mfused-madd'
   14524 `-mno-fused-madd'
   14525      Enable (disable) use of the floating point multiply-accumulate
   14526      instructions, when they are available.  The default is
   14527      `-mfused-madd'.
   14528 
   14529      When multiply-accumulate instructions are used, the intermediate
   14530      product is calculated to infinite precision and is not subject to
   14531      the FCSR Flush to Zero bit.  This may be undesirable in some
   14532      circumstances.
   14533 
   14534 `-nocpp'
   14535      Tell the MIPS assembler to not run its preprocessor over user
   14536      assembler files (with a `.s' suffix) when assembling them.
   14537 
   14538 `-mfix-r4000'
   14539 `-mno-fix-r4000'
   14540      Work around certain R4000 CPU errata:
   14541         - A double-word or a variable shift may give an incorrect
   14542           result if executed immediately after starting an integer
   14543           division.
   14544 
   14545         - A double-word or a variable shift may give an incorrect
   14546           result if executed while an integer multiplication is in
   14547           progress.
   14548 
   14549         - An integer division may give an incorrect result if started
   14550           in a delay slot of a taken branch or a jump.
   14551 
   14552 `-mfix-r4400'
   14553 `-mno-fix-r4400'
   14554      Work around certain R4400 CPU errata:
   14555         - A double-word or a variable shift may give an incorrect
   14556           result if executed immediately after starting an integer
   14557           division.
   14558 
   14559 `-mfix-r10000'
   14560 `-mno-fix-r10000'
   14561      Work around certain R10000 errata:
   14562         - `ll'/`sc' sequences may not behave atomically on revisions
   14563           prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
   14564 
   14565      This option can only be used if the target architecture supports
   14566      branch-likely instructions.  `-mfix-r10000' is the default when
   14567      `-march=r10000' is used; `-mno-fix-r10000' is the default
   14568      otherwise.
   14569 
   14570 `-mfix-vr4120'
   14571 `-mno-fix-vr4120'
   14572      Work around certain VR4120 errata:
   14573         - `dmultu' does not always produce the correct result.
   14574 
   14575         - `div' and `ddiv' do not always produce the correct result if
   14576           one of the operands is negative.
   14577      The workarounds for the division errata rely on special functions
   14578      in `libgcc.a'.  At present, these functions are only provided by
   14579      the `mips64vr*-elf' configurations.
   14580 
   14581      Other VR4120 errata require a nop to be inserted between certain
   14582      pairs of instructions.  These errata are handled by the assembler,
   14583      not by GCC itself.
   14584 
   14585 `-mfix-vr4130'
   14586      Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
   14587      implemented by the assembler rather than by GCC, although GCC will
   14588      avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
   14589      `dmacc' and `dmacchi' instructions are available instead.
   14590 
   14591 `-mfix-sb1'
   14592 `-mno-fix-sb1'
   14593      Work around certain SB-1 CPU core errata.  (This flag currently
   14594      works around the SB-1 revision 2 "F1" and "F2" floating point
   14595      errata.)
   14596 
   14597 `-mr10k-cache-barrier=SETTING'
   14598      Specify whether GCC should insert cache barriers to avoid the
   14599      side-effects of speculation on R10K processors.
   14600 
   14601      In common with many processors, the R10K tries to predict the
   14602      outcome of a conditional branch and speculatively executes
   14603      instructions from the "taken" branch.  It later aborts these
   14604      instructions if the predicted outcome was wrong.  However, on the
   14605      R10K, even aborted instructions can have side effects.
   14606 
   14607      This problem only affects kernel stores and, depending on the
   14608      system, kernel loads.  As an example, a speculatively-executed
   14609      store may load the target memory into cache and mark the cache
   14610      line as dirty, even if the store itself is later aborted.  If a
   14611      DMA operation writes to the same area of memory before the "dirty"
   14612      line is flushed, the cached data will overwrite the DMA-ed data.
   14613      See the R10K processor manual for a full description, including
   14614      other potential problems.
   14615 
   14616      One workaround is to insert cache barrier instructions before
   14617      every memory access that might be speculatively executed and that
   14618      might have side effects even if aborted.
   14619      `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
   14620      this workaround.  It assumes that aborted accesses to any byte in
   14621      the following regions will not have side effects:
   14622 
   14623        1. the memory occupied by the current function's stack frame;
   14624 
   14625        2. the memory occupied by an incoming stack argument;
   14626 
   14627        3. the memory occupied by an object with a link-time-constant
   14628           address.
   14629 
   14630      It is the kernel's responsibility to ensure that speculative
   14631      accesses to these regions are indeed safe.
   14632 
   14633      If the input program contains a function declaration such as:
   14634 
   14635           void foo (void);
   14636 
   14637      then the implementation of `foo' must allow `j foo' and `jal foo'
   14638      to be executed speculatively.  GCC honors this restriction for
   14639      functions it compiles itself.  It expects non-GCC functions (such
   14640      as hand-written assembly code) to do the same.
   14641 
   14642      The option has three forms:
   14643 
   14644     `-mr10k-cache-barrier=load-store'
   14645           Insert a cache barrier before a load or store that might be
   14646           speculatively executed and that might have side effects even
   14647           if aborted.
   14648 
   14649     `-mr10k-cache-barrier=store'
   14650           Insert a cache barrier before a store that might be
   14651           speculatively executed and that might have side effects even
   14652           if aborted.
   14653 
   14654     `-mr10k-cache-barrier=none'
   14655           Disable the insertion of cache barriers.  This is the default
   14656           setting.
   14657 
   14658 `-mflush-func=FUNC'
   14659 `-mno-flush-func'
   14660      Specifies the function to call to flush the I and D caches, or to
   14661      not call any such function.  If called, the function must take the
   14662      same arguments as the common `_flush_func()', that is, the address
   14663      of the memory range for which the cache is being flushed, the size
   14664      of the memory range, and the number 3 (to flush both caches).  The
   14665      default depends on the target GCC was configured for, but commonly
   14666      is either `_flush_func' or `__cpu_flush'.
   14667 
   14668 `mbranch-cost=NUM'
   14669      Set the cost of branches to roughly NUM "simple" instructions.
   14670      This cost is only a heuristic and is not guaranteed to produce
   14671      consistent results across releases.  A zero cost redundantly
   14672      selects the default, which is based on the `-mtune' setting.
   14673 
   14674 `-mbranch-likely'
   14675 `-mno-branch-likely'
   14676      Enable or disable use of Branch Likely instructions, regardless of
   14677      the default for the selected architecture.  By default, Branch
   14678      Likely instructions may be generated if they are supported by the
   14679      selected architecture.  An exception is for the MIPS32 and MIPS64
   14680      architectures and processors which implement those architectures;
   14681      for those, Branch Likely instructions will not be generated by
   14682      default because the MIPS32 and MIPS64 architectures specifically
   14683      deprecate their use.
   14684 
   14685 `-mfp-exceptions'
   14686 `-mno-fp-exceptions'
   14687      Specifies whether FP exceptions are enabled.  This affects how we
   14688      schedule FP instructions for some processors.  The default is that
   14689      FP exceptions are enabled.
   14690 
   14691      For instance, on the SB-1, if FP exceptions are disabled, and we
   14692      are emitting 64-bit code, then we can use both FP pipes.
   14693      Otherwise, we can only use one FP pipe.
   14694 
   14695 `-mvr4130-align'
   14696 `-mno-vr4130-align'
   14697      The VR4130 pipeline is two-way superscalar, but can only issue two
   14698      instructions together if the first one is 8-byte aligned.  When
   14699      this option is enabled, GCC will align pairs of instructions that
   14700      it thinks should execute in parallel.
   14701 
   14702      This option only has an effect when optimizing for the VR4130.  It
   14703      normally makes code faster, but at the expense of making it bigger.
   14704      It is enabled by default at optimization level `-O3'.
   14705 
   14706 `-msynci'
   14707 `-mno-synci'
   14708      Enable (disable) generation of `synci' instructions on
   14709      architectures that support it.  The `synci' instructions (if
   14710      enabled) will be generated when `__builtin___clear_cache()' is
   14711      compiled.
   14712 
   14713      This option defaults to `-mno-synci', but the default can be
   14714      overridden by configuring with `--with-synci'.
   14715 
   14716      When compiling code for single processor systems, it is generally
   14717      safe to use `synci'.  However, on many multi-core (SMP) systems, it
   14718      will not invalidate the instruction caches on all cores and may
   14719      lead to undefined behavior.
   14720 
   14721 `-mrelax-pic-calls'
   14722 `-mno-relax-pic-calls'
   14723      Try to turn PIC calls that are normally dispatched via register
   14724      `$25' into direct calls.  This is only possible if the linker can
   14725      resolve the destination at link-time and if the destination is
   14726      within range for a direct call.
   14727 
   14728      `-mrelax-pic-calls' is the default if GCC was configured to use an
   14729      assembler and a linker that supports the `.reloc' assembly
   14730      directive and `-mexplicit-relocs' is in effect.  With
   14731      `-mno-explicit-relocs', this optimization can be performed by the
   14732      assembler and the linker alone without help from the compiler.
   14733 
   14734 `-mmcount-ra-address'
   14735 `-mno-mcount-ra-address'
   14736      Emit (do not emit) code that allows `_mcount' to modify the
   14737      calling function's return address.  When enabled, this option
   14738      extends the usual `_mcount' interface with a new RA-ADDRESS
   14739      parameter, which has type `intptr_t *' and is passed in register
   14740      `$12'.  `_mcount' can then modify the return address by doing both
   14741      of the following:
   14742         * Returning the new address in register `$31'.
   14743 
   14744         * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
   14745           nonnull.
   14746 
   14747      The default is `-mno-mcount-ra-address'.
   14748 
   14749 
   14750 
   14751 File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
   14752 
   14753 3.17.28 MMIX Options
   14754 --------------------
   14755 
   14756 These options are defined for the MMIX:
   14757 
   14758 `-mlibfuncs'
   14759 `-mno-libfuncs'
   14760      Specify that intrinsic library functions are being compiled,
   14761      passing all values in registers, no matter the size.
   14762 
   14763 `-mepsilon'
   14764 `-mno-epsilon'
   14765      Generate floating-point comparison instructions that compare with
   14766      respect to the `rE' epsilon register.
   14767 
   14768 `-mabi=mmixware'
   14769 `-mabi=gnu'
   14770      Generate code that passes function parameters and return values
   14771      that (in the called function) are seen as registers `$0' and up,
   14772      as opposed to the GNU ABI which uses global registers `$231' and
   14773      up.
   14774 
   14775 `-mzero-extend'
   14776 `-mno-zero-extend'
   14777      When reading data from memory in sizes shorter than 64 bits, use
   14778      (do not use) zero-extending load instructions by default, rather
   14779      than sign-extending ones.
   14780 
   14781 `-mknuthdiv'
   14782 `-mno-knuthdiv'
   14783      Make the result of a division yielding a remainder have the same
   14784      sign as the divisor.  With the default, `-mno-knuthdiv', the sign
   14785      of the remainder follows the sign of the dividend.  Both methods
   14786      are arithmetically valid, the latter being almost exclusively used.
   14787 
   14788 `-mtoplevel-symbols'
   14789 `-mno-toplevel-symbols'
   14790      Prepend (do not prepend) a `:' to all global symbols, so the
   14791      assembly code can be used with the `PREFIX' assembly directive.
   14792 
   14793 `-melf'
   14794      Generate an executable in the ELF format, rather than the default
   14795      `mmo' format used by the `mmix' simulator.
   14796 
   14797 `-mbranch-predict'
   14798 `-mno-branch-predict'
   14799      Use (do not use) the probable-branch instructions, when static
   14800      branch prediction indicates a probable branch.
   14801 
   14802 `-mbase-addresses'
   14803 `-mno-base-addresses'
   14804      Generate (do not generate) code that uses _base addresses_.  Using
   14805      a base address automatically generates a request (handled by the
   14806      assembler and the linker) for a constant to be set up in a global
   14807      register.  The register is used for one or more base address
   14808      requests within the range 0 to 255 from the value held in the
   14809      register.  The generally leads to short and fast code, but the
   14810      number of different data items that can be addressed is limited.
   14811      This means that a program that uses lots of static data may
   14812      require `-mno-base-addresses'.
   14813 
   14814 `-msingle-exit'
   14815 `-mno-single-exit'
   14816      Force (do not force) generated code to have a single exit point in
   14817      each function.
   14818 
   14819 
   14820 File: gcc.info,  Node: MN10300 Options,  Next: PDP-11 Options,  Prev: MMIX Options,  Up: Submodel Options
   14821 
   14822 3.17.29 MN10300 Options
   14823 -----------------------
   14824 
   14825 These `-m' options are defined for Matsushita MN10300 architectures:
   14826 
   14827 `-mmult-bug'
   14828      Generate code to avoid bugs in the multiply instructions for the
   14829      MN10300 processors.  This is the default.
   14830 
   14831 `-mno-mult-bug'
   14832      Do not generate code to avoid bugs in the multiply instructions
   14833      for the MN10300 processors.
   14834 
   14835 `-mam33'
   14836      Generate code which uses features specific to the AM33 processor.
   14837 
   14838 `-mno-am33'
   14839      Do not generate code which uses features specific to the AM33
   14840      processor.  This is the default.
   14841 
   14842 `-mam33-2'
   14843      Generate code which uses features specific to the AM33/2.0
   14844      processor.
   14845 
   14846 `-mam34'
   14847      Generate code which uses features specific to the AM34 processor.
   14848 
   14849 `-mtune=CPU-TYPE'
   14850      Use the timing characteristics of the indicated CPU type when
   14851      scheduling instructions.  This does not change the targeted
   14852      processor type.  The CPU type must be one of `mn10300', `am33',
   14853      `am33-2' or `am34'.
   14854 
   14855 `-mreturn-pointer-on-d0'
   14856      When generating a function which returns a pointer, return the
   14857      pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
   14858      only in a0, and attempts to call such functions without a prototype
   14859      would result in errors.  Note that this option is on by default;
   14860      use `-mno-return-pointer-on-d0' to disable it.
   14861 
   14862 `-mno-crt0'
   14863      Do not link in the C run-time initialization object file.
   14864 
   14865 `-mrelax'
   14866      Indicate to the linker that it should perform a relaxation
   14867      optimization pass to shorten branches, calls and absolute memory
   14868      addresses.  This option only has an effect when used on the
   14869      command line for the final link step.
   14870 
   14871      This option makes symbolic debugging impossible.
   14872 
   14873 `-mliw'
   14874      Allow the compiler to generate _Long Instruction Word_
   14875      instructions if the target is the `AM33' or later.  This is the
   14876      default.  This option defines the preprocessor macro `__LIW__'.
   14877 
   14878 `-mnoliw'
   14879      Do not allow the compiler to generate _Long Instruction Word_
   14880      instructions.  This option defines the preprocessor macro
   14881      `__NO_LIW__'.
   14882 
   14883 
   14884 
   14885 File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: MN10300 Options,  Up: Submodel Options
   14886 
   14887 3.17.30 PDP-11 Options
   14888 ----------------------
   14889 
   14890 These options are defined for the PDP-11:
   14891 
   14892 `-mfpu'
   14893      Use hardware FPP floating point.  This is the default.  (FIS
   14894      floating point on the PDP-11/40 is not supported.)
   14895 
   14896 `-msoft-float'
   14897      Do not use hardware floating point.
   14898 
   14899 `-mac0'
   14900      Return floating-point results in ac0 (fr0 in Unix assembler
   14901      syntax).
   14902 
   14903 `-mno-ac0'
   14904      Return floating-point results in memory.  This is the default.
   14905 
   14906 `-m40'
   14907      Generate code for a PDP-11/40.
   14908 
   14909 `-m45'
   14910      Generate code for a PDP-11/45.  This is the default.
   14911 
   14912 `-m10'
   14913      Generate code for a PDP-11/10.
   14914 
   14915 `-mbcopy-builtin'
   14916      Use inline `movmemhi' patterns for copying memory.  This is the
   14917      default.
   14918 
   14919 `-mbcopy'
   14920      Do not use inline `movmemhi' patterns for copying memory.
   14921 
   14922 `-mint16'
   14923 `-mno-int32'
   14924      Use 16-bit `int'.  This is the default.
   14925 
   14926 `-mint32'
   14927 `-mno-int16'
   14928      Use 32-bit `int'.
   14929 
   14930 `-mfloat64'
   14931 `-mno-float32'
   14932      Use 64-bit `float'.  This is the default.
   14933 
   14934 `-mfloat32'
   14935 `-mno-float64'
   14936      Use 32-bit `float'.
   14937 
   14938 `-mabshi'
   14939      Use `abshi2' pattern.  This is the default.
   14940 
   14941 `-mno-abshi'
   14942      Do not use `abshi2' pattern.
   14943 
   14944 `-mbranch-expensive'
   14945      Pretend that branches are expensive.  This is for experimenting
   14946      with code generation only.
   14947 
   14948 `-mbranch-cheap'
   14949      Do not pretend that branches are expensive.  This is the default.
   14950 
   14951 `-munix-asm'
   14952      Use Unix assembler syntax.  This is the default when configured for
   14953      `pdp11-*-bsd'.
   14954 
   14955 `-mdec-asm'
   14956      Use DEC assembler syntax.  This is the default when configured for
   14957      any PDP-11 target other than `pdp11-*-bsd'.
   14958 
   14959 
   14960 File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
   14961 
   14962 3.17.31 picoChip Options
   14963 ------------------------
   14964 
   14965 These `-m' options are defined for picoChip implementations:
   14966 
   14967 `-mae=AE_TYPE'
   14968      Set the instruction set, register set, and instruction scheduling
   14969      parameters for array element type AE_TYPE.  Supported values for
   14970      AE_TYPE are `ANY', `MUL', and `MAC'.
   14971 
   14972      `-mae=ANY' selects a completely generic AE type.  Code generated
   14973      with this option will run on any of the other AE types.  The code
   14974      will not be as efficient as it would be if compiled for a specific
   14975      AE type, and some types of operation (e.g., multiplication) will
   14976      not work properly on all types of AE.
   14977 
   14978      `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
   14979      for compiled code, and is the default.
   14980 
   14981      `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
   14982      option may suffer from poor performance of byte (char)
   14983      manipulation, since the DSP AE does not provide hardware support
   14984      for byte load/stores.
   14985 
   14986 `-msymbol-as-address'
   14987      Enable the compiler to directly use a symbol name as an address in
   14988      a load/store instruction, without first loading it into a
   14989      register.  Typically, the use of this option will generate larger
   14990      programs, which run faster than when the option isn't used.
   14991      However, the results vary from program to program, so it is left
   14992      as a user option, rather than being permanently enabled.
   14993 
   14994 `-mno-inefficient-warnings'
   14995      Disables warnings about the generation of inefficient code.  These
   14996      warnings can be generated, for example, when compiling code which
   14997      performs byte-level memory operations on the MAC AE type.  The MAC
   14998      AE has no hardware support for byte-level memory operations, so
   14999      all byte load/stores must be synthesized from word load/store
   15000      operations.  This is inefficient and a warning will be generated
   15001      indicating to the programmer that they should rewrite the code to
   15002      avoid byte operations, or to target an AE type which has the
   15003      necessary hardware support.  This option enables the warning to be
   15004      turned off.
   15005 
   15006 
   15007 
   15008 File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: picoChip Options,  Up: Submodel Options
   15009 
   15010 3.17.32 PowerPC Options
   15011 -----------------------
   15012 
   15013 These are listed under *Note RS/6000 and PowerPC Options::.
   15014 
   15015 
   15016 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: PowerPC Options,  Up: Submodel Options
   15017 
   15018 3.17.33 IBM RS/6000 and PowerPC Options
   15019 ---------------------------------------
   15020 
   15021 These `-m' options are defined for the IBM RS/6000 and PowerPC:
   15022 `-mpower'
   15023 `-mno-power'
   15024 `-mpower2'
   15025 `-mno-power2'
   15026 `-mpowerpc'
   15027 `-mno-powerpc'
   15028 `-mpowerpc-gpopt'
   15029 `-mno-powerpc-gpopt'
   15030 `-mpowerpc-gfxopt'
   15031 `-mno-powerpc-gfxopt'
   15032 `-mpowerpc64'
   15033 `-mno-powerpc64'
   15034 `-mmfcrf'
   15035 `-mno-mfcrf'
   15036 `-mpopcntb'
   15037 `-mno-popcntb'
   15038 `-mpopcntd'
   15039 `-mno-popcntd'
   15040 `-mfprnd'
   15041 `-mno-fprnd'
   15042 `-mcmpb'
   15043 `-mno-cmpb'
   15044 `-mmfpgpr'
   15045 `-mno-mfpgpr'
   15046 `-mhard-dfp'
   15047 `-mno-hard-dfp'
   15048      GCC supports two related instruction set architectures for the
   15049      RS/6000 and PowerPC.  The "POWER" instruction set are those
   15050      instructions supported by the `rios' chip set used in the original
   15051      RS/6000 systems and the "PowerPC" instruction set is the
   15052      architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
   15053      microprocessors, and the IBM 4xx, 6xx, and follow-on
   15054      microprocessors.
   15055 
   15056      Neither architecture is a subset of the other.  However there is a
   15057      large common subset of instructions supported by both.  An MQ
   15058      register is included in processors supporting the POWER
   15059      architecture.
   15060 
   15061      You use these options to specify which instructions are available
   15062      on the processor you are using.  The default value of these
   15063      options is determined when configuring GCC.  Specifying the
   15064      `-mcpu=CPU_TYPE' overrides the specification of these options.  We
   15065      recommend you use the `-mcpu=CPU_TYPE' option rather than the
   15066      options listed above.
   15067 
   15068      The `-mpower' option allows GCC to generate instructions that are
   15069      found only in the POWER architecture and to use the MQ register.
   15070      Specifying `-mpower2' implies `-power' and also allows GCC to
   15071      generate instructions that are present in the POWER2 architecture
   15072      but not the original POWER architecture.
   15073 
   15074      The `-mpowerpc' option allows GCC to generate instructions that
   15075      are found only in the 32-bit subset of the PowerPC architecture.
   15076      Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
   15077      GCC to use the optional PowerPC architecture instructions in the
   15078      General Purpose group, including floating-point square root.
   15079      Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
   15080      GCC to use the optional PowerPC architecture instructions in the
   15081      Graphics group, including floating-point select.
   15082 
   15083      The `-mmfcrf' option allows GCC to generate the move from
   15084      condition register field instruction implemented on the POWER4
   15085      processor and other processors that support the PowerPC V2.01
   15086      architecture.  The `-mpopcntb' option allows GCC to generate the
   15087      popcount and double precision FP reciprocal estimate instruction
   15088      implemented on the POWER5 processor and other processors that
   15089      support the PowerPC V2.02 architecture.  The `-mpopcntd' option
   15090      allows GCC to generate the popcount instruction implemented on the
   15091      POWER7 processor and other processors that support the PowerPC
   15092      V2.06 architecture.  The `-mfprnd' option allows GCC to generate
   15093      the FP round to integer instructions implemented on the POWER5+
   15094      processor and other processors that support the PowerPC V2.03
   15095      architecture.  The `-mcmpb' option allows GCC to generate the
   15096      compare bytes instruction implemented on the POWER6 processor and
   15097      other processors that support the PowerPC V2.05 architecture.  The
   15098      `-mmfpgpr' option allows GCC to generate the FP move to/from
   15099      general purpose register instructions implemented on the POWER6X
   15100      processor and other processors that support the extended PowerPC
   15101      V2.05 architecture.  The `-mhard-dfp' option allows GCC to
   15102      generate the decimal floating point instructions implemented on
   15103      some POWER processors.
   15104 
   15105      The `-mpowerpc64' option allows GCC to generate the additional
   15106      64-bit instructions that are found in the full PowerPC64
   15107      architecture and to treat GPRs as 64-bit, doubleword quantities.
   15108      GCC defaults to `-mno-powerpc64'.
   15109 
   15110      If you specify both `-mno-power' and `-mno-powerpc', GCC will use
   15111      only the instructions in the common subset of both architectures
   15112      plus some special AIX common-mode calls, and will not use the MQ
   15113      register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
   15114      to use any instruction from either architecture and to allow use
   15115      of the MQ register; specify this for the Motorola MPC601.
   15116 
   15117 `-mnew-mnemonics'
   15118 `-mold-mnemonics'
   15119      Select which mnemonics to use in the generated assembler code.
   15120      With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
   15121      for the PowerPC architecture.  With `-mold-mnemonics' it uses the
   15122      assembler mnemonics defined for the POWER architecture.
   15123      Instructions defined in only one architecture have only one
   15124      mnemonic; GCC uses that mnemonic irrespective of which of these
   15125      options is specified.
   15126 
   15127      GCC defaults to the mnemonics appropriate for the architecture in
   15128      use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
   15129      these option.  Unless you are building a cross-compiler, you
   15130      should normally not specify either `-mnew-mnemonics' or
   15131      `-mold-mnemonics', but should instead accept the default.
   15132 
   15133 `-mcpu=CPU_TYPE'
   15134      Set architecture type, register usage, choice of mnemonics, and
   15135      instruction scheduling parameters for machine type CPU_TYPE.
   15136      Supported values for CPU_TYPE are `401', `403', `405', `405fp',
   15137      `440', `440fp', `464', `464fp', `476', `476fp', `505', `601',
   15138      `602', `603', `603e', `604', `604e', `620', `630', `740', `7400',
   15139      `7450', `750', `801', `821', `823', `860', `970', `8540', `a2',
   15140      `e300c2', `e300c3', `e500mc', `e500mc64', `ec603e', `G3', `G4',
   15141      `G5', `titan', `power', `power2', `power3', `power4', `power5',
   15142      `power5+', `power6', `power6x', `power7', `common', `powerpc',
   15143      `powerpc64', `rios', `rios1', `rios2', `rsc', and `rs64'.
   15144 
   15145      `-mcpu=common' selects a completely generic processor.  Code
   15146      generated under this option will run on any POWER or PowerPC
   15147      processor.  GCC will use only the instructions in the common
   15148      subset of both architectures, and will not use the MQ register.
   15149      GCC assumes a generic processor model for scheduling purposes.
   15150 
   15151      `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
   15152      `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
   15153      PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
   15154      types, with an appropriate, generic processor model assumed for
   15155      scheduling purposes.
   15156 
   15157      The other options specify a specific processor.  Code generated
   15158      under those options will run best on that processor, and may not
   15159      run at all on others.
   15160 
   15161      The `-mcpu' options automatically enable or disable the following
   15162      options:
   15163 
   15164           -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
   15165           -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64
   15166           -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
   15167           -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
   15168 
   15169      The particular options set for any particular CPU will vary between
   15170      compiler versions, depending on what setting seems to produce
   15171      optimal code for that CPU; it doesn't necessarily reflect the
   15172      actual hardware's capabilities.  If you wish to set an individual
   15173      option to a particular value, you may specify it after the `-mcpu'
   15174      option, like `-mcpu=970 -mno-altivec'.
   15175 
   15176      On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
   15177      or disabled by the `-mcpu' option at present because AIX does not
   15178      have full support for these options.  You may still enable or
   15179      disable them individually if you're sure it'll work in your
   15180      environment.
   15181 
   15182 `-mtune=CPU_TYPE'
   15183      Set the instruction scheduling parameters for machine type
   15184      CPU_TYPE, but do not set the architecture type, register usage, or
   15185      choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
   15186      for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
   15187      specified, the code generated will use the architecture,
   15188      registers, and mnemonics set by `-mcpu', but the scheduling
   15189      parameters set by `-mtune'.
   15190 
   15191 `-mcmodel=small'
   15192      Generate PowerPC64 code for the small model: The TOC is limited to
   15193      64k.
   15194 
   15195 `-mcmodel=medium'
   15196      Generate PowerPC64 code for the medium model: The TOC and other
   15197      static data may be up to a total of 4G in size.
   15198 
   15199 `-mcmodel=large'
   15200      Generate PowerPC64 code for the large model: The TOC may be up to
   15201      4G in size.  Other data and code is only limited by the 64-bit
   15202      address space.
   15203 
   15204 `-maltivec'
   15205 `-mno-altivec'
   15206      Generate code that uses (does not use) AltiVec instructions, and
   15207      also enable the use of built-in functions that allow more direct
   15208      access to the AltiVec instruction set.  You may also need to set
   15209      `-mabi=altivec' to adjust the current ABI with AltiVec ABI
   15210      enhancements.
   15211 
   15212 `-mvrsave'
   15213 `-mno-vrsave'
   15214      Generate VRSAVE instructions when generating AltiVec code.
   15215 
   15216 `-mgen-cell-microcode'
   15217      Generate Cell microcode instructions
   15218 
   15219 `-mwarn-cell-microcode'
   15220      Warning when a Cell microcode instruction is going to emitted.  An
   15221      example of a Cell microcode instruction is a variable shift.
   15222 
   15223 `-msecure-plt'
   15224      Generate code that allows ld and ld.so to build executables and
   15225      shared libraries with non-exec .plt and .got sections.  This is a
   15226      PowerPC 32-bit SYSV ABI option.
   15227 
   15228 `-mbss-plt'
   15229      Generate code that uses a BSS .plt section that ld.so fills in, and
   15230      requires .plt and .got sections that are both writable and
   15231      executable.  This is a PowerPC 32-bit SYSV ABI option.
   15232 
   15233 `-misel'
   15234 `-mno-isel'
   15235      This switch enables or disables the generation of ISEL
   15236      instructions.
   15237 
   15238 `-misel=YES/NO'
   15239      This switch has been deprecated.  Use `-misel' and `-mno-isel'
   15240      instead.
   15241 
   15242 `-mspe'
   15243 `-mno-spe'
   15244      This switch enables or disables the generation of SPE simd
   15245      instructions.
   15246 
   15247 `-mpaired'
   15248 `-mno-paired'
   15249      This switch enables or disables the generation of PAIRED simd
   15250      instructions.
   15251 
   15252 `-mspe=YES/NO'
   15253      This option has been deprecated.  Use `-mspe' and `-mno-spe'
   15254      instead.
   15255 
   15256 `-mvsx'
   15257 `-mno-vsx'
   15258      Generate code that uses (does not use) vector/scalar (VSX)
   15259      instructions, and also enable the use of built-in functions that
   15260      allow more direct access to the VSX instruction set.
   15261 
   15262 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
   15263 `-mfloat-gprs'
   15264      This switch enables or disables the generation of floating point
   15265      operations on the general purpose registers for architectures that
   15266      support it.
   15267 
   15268      The argument YES or SINGLE enables the use of single-precision
   15269      floating point operations.
   15270 
   15271      The argument DOUBLE enables the use of single and double-precision
   15272      floating point operations.
   15273 
   15274      The argument NO disables floating point operations on the general
   15275      purpose registers.
   15276 
   15277      This option is currently only available on the MPC854x.
   15278 
   15279 `-m32'
   15280 `-m64'
   15281      Generate code for 32-bit or 64-bit environments of Darwin and SVR4
   15282      targets (including GNU/Linux).  The 32-bit environment sets int,
   15283      long and pointer to 32 bits and generates code that runs on any
   15284      PowerPC variant.  The 64-bit environment sets int to 32 bits and
   15285      long and pointer to 64 bits, and generates code for PowerPC64, as
   15286      for `-mpowerpc64'.
   15287 
   15288 `-mfull-toc'
   15289 `-mno-fp-in-toc'
   15290 `-mno-sum-in-toc'
   15291 `-mminimal-toc'
   15292      Modify generation of the TOC (Table Of Contents), which is created
   15293      for every executable file.  The `-mfull-toc' option is selected by
   15294      default.  In that case, GCC will allocate at least one TOC entry
   15295      for each unique non-automatic variable reference in your program.
   15296      GCC will also place floating-point constants in the TOC.  However,
   15297      only 16,384 entries are available in the TOC.
   15298 
   15299      If you receive a linker error message that saying you have
   15300      overflowed the available TOC space, you can reduce the amount of
   15301      TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
   15302      options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
   15303      constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
   15304      code to calculate the sum of an address and a constant at run-time
   15305      instead of putting that sum into the TOC.  You may specify one or
   15306      both of these options.  Each causes GCC to produce very slightly
   15307      slower and larger code at the expense of conserving TOC space.
   15308 
   15309      If you still run out of space in the TOC even when you specify
   15310      both of these options, specify `-mminimal-toc' instead.  This
   15311      option causes GCC to make only one TOC entry for every file.  When
   15312      you specify this option, GCC will produce code that is slower and
   15313      larger but which uses extremely little TOC space.  You may wish to
   15314      use this option only on files that contain less frequently
   15315      executed code.
   15316 
   15317 `-maix64'
   15318 `-maix32'
   15319      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
   15320      64-bit `long' type, and the infrastructure needed to support them.
   15321      Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
   15322      `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
   15323      GCC defaults to `-maix32'.
   15324 
   15325 `-mxl-compat'
   15326 `-mno-xl-compat'
   15327      Produce code that conforms more closely to IBM XL compiler
   15328      semantics when using AIX-compatible ABI.  Pass floating-point
   15329      arguments to prototyped functions beyond the register save area
   15330      (RSA) on the stack in addition to argument FPRs.  Do not assume
   15331      that most significant double in 128-bit long double value is
   15332      properly rounded when comparing values and converting to double.
   15333      Use XL symbol names for long double support routines.
   15334 
   15335      The AIX calling convention was extended but not initially
   15336      documented to handle an obscure K&R C case of calling a function
   15337      that takes the address of its arguments with fewer arguments than
   15338      declared.  IBM XL compilers access floating point arguments which
   15339      do not fit in the RSA from the stack when a subroutine is compiled
   15340      without optimization.  Because always storing floating-point
   15341      arguments on the stack is inefficient and rarely needed, this
   15342      option is not enabled by default and only is necessary when
   15343      calling subroutines compiled by IBM XL compilers without
   15344      optimization.
   15345 
   15346 `-mpe'
   15347      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
   15348      application written to use message passing with special startup
   15349      code to enable the application to run.  The system must have PE
   15350      installed in the standard location (`/usr/lpp/ppe.poe/'), or the
   15351      `specs' file must be overridden with the `-specs=' option to
   15352      specify the appropriate directory location.  The Parallel
   15353      Environment does not support threads, so the `-mpe' option and the
   15354      `-pthread' option are incompatible.
   15355 
   15356 `-malign-natural'
   15357 `-malign-power'
   15358      On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
   15359      `-malign-natural' overrides the ABI-defined alignment of larger
   15360      types, such as floating-point doubles, on their natural size-based
   15361      boundary.  The option `-malign-power' instructs GCC to follow the
   15362      ABI-specified alignment rules.  GCC defaults to the standard
   15363      alignment defined in the ABI.
   15364 
   15365      On 64-bit Darwin, natural alignment is the default, and
   15366      `-malign-power' is not supported.
   15367 
   15368 `-msoft-float'
   15369 `-mhard-float'
   15370      Generate code that does not use (uses) the floating-point register
   15371      set.  Software floating point emulation is provided if you use the
   15372      `-msoft-float' option, and pass the option to GCC when linking.
   15373 
   15374 `-msingle-float'
   15375 `-mdouble-float'
   15376      Generate code for single or double-precision floating point
   15377      operations.  `-mdouble-float' implies `-msingle-float'.
   15378 
   15379 `-msimple-fpu'
   15380      Do not generate sqrt and div instructions for hardware floating
   15381      point unit.
   15382 
   15383 `-mfpu'
   15384      Specify type of floating point unit.  Valid values are SP_LITE
   15385      (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent
   15386      to -mdouble-float -msimple-fpu), SP_FULL (equivalent to
   15387      -msingle-float), and DP_FULL (equivalent to -mdouble-float).
   15388 
   15389 `-mxilinx-fpu'
   15390      Perform optimizations for floating point unit on Xilinx PPC
   15391      405/440.
   15392 
   15393 `-mmultiple'
   15394 `-mno-multiple'
   15395      Generate code that uses (does not use) the load multiple word
   15396      instructions and the store multiple word instructions.  These
   15397      instructions are generated by default on POWER systems, and not
   15398      generated on PowerPC systems.  Do not use `-mmultiple' on little
   15399      endian PowerPC systems, since those instructions do not work when
   15400      the processor is in little endian mode.  The exceptions are PPC740
   15401      and PPC750 which permit the instructions usage in little endian
   15402      mode.
   15403 
   15404 `-mstring'
   15405 `-mno-string'
   15406      Generate code that uses (does not use) the load string instructions
   15407      and the store string word instructions to save multiple registers
   15408      and do small block moves.  These instructions are generated by
   15409      default on POWER systems, and not generated on PowerPC systems.
   15410      Do not use `-mstring' on little endian PowerPC systems, since those
   15411      instructions do not work when the processor is in little endian
   15412      mode.  The exceptions are PPC740 and PPC750 which permit the
   15413      instructions usage in little endian mode.
   15414 
   15415 `-mupdate'
   15416 `-mno-update'
   15417      Generate code that uses (does not use) the load or store
   15418      instructions that update the base register to the address of the
   15419      calculated memory location.  These instructions are generated by
   15420      default.  If you use `-mno-update', there is a small window
   15421      between the time that the stack pointer is updated and the address
   15422      of the previous frame is stored, which means code that walks the
   15423      stack frame across interrupts or signals may get corrupted data.
   15424 
   15425 `-mavoid-indexed-addresses'
   15426 `-mno-avoid-indexed-addresses'
   15427      Generate code that tries to avoid (not avoid) the use of indexed
   15428      load or store instructions. These instructions can incur a
   15429      performance penalty on Power6 processors in certain situations,
   15430      such as when stepping through large arrays that cross a 16M
   15431      boundary.  This option is enabled by default when targetting
   15432      Power6 and disabled otherwise.
   15433 
   15434 `-mfused-madd'
   15435 `-mno-fused-madd'
   15436      Generate code that uses (does not use) the floating point multiply
   15437      and accumulate instructions.  These instructions are generated by
   15438      default if hardware floating point is used.  The machine dependent
   15439      `-mfused-madd' option is now mapped to the machine independent
   15440      `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
   15441      `-ffp-contract=off'.
   15442 
   15443 `-mmulhw'
   15444 `-mno-mulhw'
   15445      Generate code that uses (does not use) the half-word multiply and
   15446      multiply-accumulate instructions on the IBM 405, 440, 464 and 476
   15447      processors.  These instructions are generated by default when
   15448      targetting those processors.
   15449 
   15450 `-mdlmzb'
   15451 `-mno-dlmzb'
   15452      Generate code that uses (does not use) the string-search `dlmzb'
   15453      instruction on the IBM 405, 440, 464 and 476 processors.  This
   15454      instruction is generated by default when targetting those
   15455      processors.
   15456 
   15457 `-mno-bit-align'
   15458 `-mbit-align'
   15459      On System V.4 and embedded PowerPC systems do not (do) force
   15460      structures and unions that contain bit-fields to be aligned to the
   15461      base type of the bit-field.
   15462 
   15463      For example, by default a structure containing nothing but 8
   15464      `unsigned' bit-fields of length 1 would be aligned to a 4 byte
   15465      boundary and have a size of 4 bytes.  By using `-mno-bit-align',
   15466      the structure would be aligned to a 1 byte boundary and be one
   15467      byte in size.
   15468 
   15469 `-mno-strict-align'
   15470 `-mstrict-align'
   15471      On System V.4 and embedded PowerPC systems do not (do) assume that
   15472      unaligned memory references will be handled by the system.
   15473 
   15474 `-mrelocatable'
   15475 `-mno-relocatable'
   15476      Generate code that allows (does not allow) a static executable to
   15477      be relocated to a different address at runtime.  A simple embedded
   15478      PowerPC system loader should relocate the entire contents of
   15479      `.got2' and 4-byte locations listed in the `.fixup' section, a
   15480      table of 32-bit addresses generated by this option.  For this to
   15481      work, all objects linked together must be compiled with
   15482      `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
   15483      aligns the stack to an 8 byte boundary.
   15484 
   15485 `-mrelocatable-lib'
   15486 `-mno-relocatable-lib'
   15487      Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
   15488      section to allow static executables to be relocated at runtime,
   15489      but `-mrelocatable-lib' does not use the smaller stack alignment
   15490      of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
   15491      be linked with objects compiled with any combination of the
   15492      `-mrelocatable' options.
   15493 
   15494 `-mno-toc'
   15495 `-mtoc'
   15496      On System V.4 and embedded PowerPC systems do not (do) assume that
   15497      register 2 contains a pointer to a global area pointing to the
   15498      addresses used in the program.
   15499 
   15500 `-mlittle'
   15501 `-mlittle-endian'
   15502      On System V.4 and embedded PowerPC systems compile code for the
   15503      processor in little endian mode.  The `-mlittle-endian' option is
   15504      the same as `-mlittle'.
   15505 
   15506 `-mbig'
   15507 `-mbig-endian'
   15508      On System V.4 and embedded PowerPC systems compile code for the
   15509      processor in big endian mode.  The `-mbig-endian' option is the
   15510      same as `-mbig'.
   15511 
   15512 `-mdynamic-no-pic'
   15513      On Darwin and Mac OS X systems, compile code so that it is not
   15514      relocatable, but that its external references are relocatable.  The
   15515      resulting code is suitable for applications, but not shared
   15516      libraries.
   15517 
   15518 `-msingle-pic-base'
   15519      Treat the register used for PIC addressing as read-only, rather
   15520      than loading it in the prologue for each function.  The run-time
   15521      system is responsible for initializing this register with an
   15522      appropriate value before execution begins.
   15523 
   15524 `-mprioritize-restricted-insns=PRIORITY'
   15525      This option controls the priority that is assigned to
   15526      dispatch-slot restricted instructions during the second scheduling
   15527      pass.  The argument PRIORITY takes the value 0/1/2 to assign
   15528      NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
   15529      instructions.
   15530 
   15531 `-msched-costly-dep=DEPENDENCE_TYPE'
   15532      This option controls which dependences are considered costly by
   15533      the target during instruction scheduling.  The argument
   15534      DEPENDENCE_TYPE takes one of the following values: NO: no
   15535      dependence is costly, ALL: all dependences are costly,
   15536      TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
   15537      STORE_TO_LOAD: any dependence from store to load is costly,
   15538      NUMBER: any dependence which latency >= NUMBER is costly.
   15539 
   15540 `-minsert-sched-nops=SCHEME'
   15541      This option controls which nop insertion scheme will be used during
   15542      the second scheduling pass.  The argument SCHEME takes one of the
   15543      following values: NO: Don't insert nops.  PAD: Pad with nops any
   15544      dispatch group which has vacant issue slots, according to the
   15545      scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
   15546      dependent insns into separate groups.  Insert exactly as many nops
   15547      as needed to force an insn to a new group, according to the
   15548      estimated processor grouping.  NUMBER: Insert nops to force costly
   15549      dependent insns into separate groups.  Insert NUMBER nops to force
   15550      an insn to a new group.
   15551 
   15552 `-mcall-sysv'
   15553      On System V.4 and embedded PowerPC systems compile code using
   15554      calling conventions that adheres to the March 1995 draft of the
   15555      System V Application Binary Interface, PowerPC processor
   15556      supplement.  This is the default unless you configured GCC using
   15557      `powerpc-*-eabiaix'.
   15558 
   15559 `-mcall-sysv-eabi'
   15560 `-mcall-eabi'
   15561      Specify both `-mcall-sysv' and `-meabi' options.
   15562 
   15563 `-mcall-sysv-noeabi'
   15564      Specify both `-mcall-sysv' and `-mno-eabi' options.
   15565 
   15566 `-mcall-aixdesc'
   15567      On System V.4 and embedded PowerPC systems compile code for the AIX
   15568      operating system.
   15569 
   15570 `-mcall-linux'
   15571      On System V.4 and embedded PowerPC systems compile code for the
   15572      Linux-based GNU system.
   15573 
   15574 `-mcall-gnu'
   15575      On System V.4 and embedded PowerPC systems compile code for the
   15576      Hurd-based GNU system.
   15577 
   15578 `-mcall-freebsd'
   15579      On System V.4 and embedded PowerPC systems compile code for the
   15580      FreeBSD operating system.
   15581 
   15582 `-mcall-netbsd'
   15583      On System V.4 and embedded PowerPC systems compile code for the
   15584      NetBSD operating system.
   15585 
   15586 `-mcall-openbsd'
   15587      On System V.4 and embedded PowerPC systems compile code for the
   15588      OpenBSD operating system.
   15589 
   15590 `-maix-struct-return'
   15591      Return all structures in memory (as specified by the AIX ABI).
   15592 
   15593 `-msvr4-struct-return'
   15594      Return structures smaller than 8 bytes in registers (as specified
   15595      by the SVR4 ABI).
   15596 
   15597 `-mabi=ABI-TYPE'
   15598      Extend the current ABI with a particular extension, or remove such
   15599      extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
   15600      IBMLONGDOUBLE, IEEELONGDOUBLE.
   15601 
   15602 `-mabi=spe'
   15603      Extend the current ABI with SPE ABI extensions.  This does not
   15604      change the default ABI, instead it adds the SPE ABI extensions to
   15605      the current ABI.
   15606 
   15607 `-mabi=no-spe'
   15608      Disable Booke SPE ABI extensions for the current ABI.
   15609 
   15610 `-mabi=ibmlongdouble'
   15611      Change the current ABI to use IBM extended precision long double.
   15612      This is a PowerPC 32-bit SYSV ABI option.
   15613 
   15614 `-mabi=ieeelongdouble'
   15615      Change the current ABI to use IEEE extended precision long double.
   15616      This is a PowerPC 32-bit Linux ABI option.
   15617 
   15618 `-mprototype'
   15619 `-mno-prototype'
   15620      On System V.4 and embedded PowerPC systems assume that all calls to
   15621      variable argument functions are properly prototyped.  Otherwise,
   15622      the compiler must insert an instruction before every non
   15623      prototyped call to set or clear bit 6 of the condition code
   15624      register (CR) to indicate whether floating point values were
   15625      passed in the floating point registers in case the function takes
   15626      a variable arguments.  With `-mprototype', only calls to
   15627      prototyped variable argument functions will set or clear the bit.
   15628 
   15629 `-msim'
   15630      On embedded PowerPC systems, assume that the startup module is
   15631      called `sim-crt0.o' and that the standard C libraries are
   15632      `libsim.a' and `libc.a'.  This is the default for
   15633      `powerpc-*-eabisim' configurations.
   15634 
   15635 `-mmvme'
   15636      On embedded PowerPC systems, assume that the startup module is
   15637      called `crt0.o' and the standard C libraries are `libmvme.a' and
   15638      `libc.a'.
   15639 
   15640 `-mads'
   15641      On embedded PowerPC systems, assume that the startup module is
   15642      called `crt0.o' and the standard C libraries are `libads.a' and
   15643      `libc.a'.
   15644 
   15645 `-myellowknife'
   15646      On embedded PowerPC systems, assume that the startup module is
   15647      called `crt0.o' and the standard C libraries are `libyk.a' and
   15648      `libc.a'.
   15649 
   15650 `-mvxworks'
   15651      On System V.4 and embedded PowerPC systems, specify that you are
   15652      compiling for a VxWorks system.
   15653 
   15654 `-memb'
   15655      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
   15656      header to indicate that `eabi' extended relocations are used.
   15657 
   15658 `-meabi'
   15659 `-mno-eabi'
   15660      On System V.4 and embedded PowerPC systems do (do not) adhere to
   15661      the Embedded Applications Binary Interface (eabi) which is a set of
   15662      modifications to the System V.4 specifications.  Selecting `-meabi'
   15663      means that the stack is aligned to an 8 byte boundary, a function
   15664      `__eabi' is called to from `main' to set up the eabi environment,
   15665      and the `-msdata' option can use both `r2' and `r13' to point to
   15666      two separate small data areas.  Selecting `-mno-eabi' means that
   15667      the stack is aligned to a 16 byte boundary, do not call an
   15668      initialization function from `main', and the `-msdata' option will
   15669      only use `r13' to point to a single small data area.  The `-meabi'
   15670      option is on by default if you configured GCC using one of the
   15671      `powerpc*-*-eabi*' options.
   15672 
   15673 `-msdata=eabi'
   15674      On System V.4 and embedded PowerPC systems, put small initialized
   15675      `const' global and static data in the `.sdata2' section, which is
   15676      pointed to by register `r2'.  Put small initialized non-`const'
   15677      global and static data in the `.sdata' section, which is pointed
   15678      to by register `r13'.  Put small uninitialized global and static
   15679      data in the `.sbss' section, which is adjacent to the `.sdata'
   15680      section.  The `-msdata=eabi' option is incompatible with the
   15681      `-mrelocatable' option.  The `-msdata=eabi' option also sets the
   15682      `-memb' option.
   15683 
   15684 `-msdata=sysv'
   15685      On System V.4 and embedded PowerPC systems, put small global and
   15686      static data in the `.sdata' section, which is pointed to by
   15687      register `r13'.  Put small uninitialized global and static data in
   15688      the `.sbss' section, which is adjacent to the `.sdata' section.
   15689      The `-msdata=sysv' option is incompatible with the `-mrelocatable'
   15690      option.
   15691 
   15692 `-msdata=default'
   15693 `-msdata'
   15694      On System V.4 and embedded PowerPC systems, if `-meabi' is used,
   15695      compile code the same as `-msdata=eabi', otherwise compile code the
   15696      same as `-msdata=sysv'.
   15697 
   15698 `-msdata=data'
   15699      On System V.4 and embedded PowerPC systems, put small global data
   15700      in the `.sdata' section.  Put small uninitialized global data in
   15701      the `.sbss' section.  Do not use register `r13' to address small
   15702      data however.  This is the default behavior unless other `-msdata'
   15703      options are used.
   15704 
   15705 `-msdata=none'
   15706 `-mno-sdata'
   15707      On embedded PowerPC systems, put all initialized global and static
   15708      data in the `.data' section, and all uninitialized data in the
   15709      `.bss' section.
   15710 
   15711 `-mblock-move-inline-limit=NUM'
   15712      Inline all block moves (such as calls to `memcpy' or structure
   15713      copies) less than or equal to NUM bytes.  The minimum value for
   15714      NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
   15715      The default value is target-specific.
   15716 
   15717 `-G NUM'
   15718      On embedded PowerPC systems, put global and static items less than
   15719      or equal to NUM bytes into the small data or bss sections instead
   15720      of the normal data or bss section.  By default, NUM is 8.  The `-G
   15721      NUM' switch is also passed to the linker.  All modules should be
   15722      compiled with the same `-G NUM' value.
   15723 
   15724 `-mregnames'
   15725 `-mno-regnames'
   15726      On System V.4 and embedded PowerPC systems do (do not) emit
   15727      register names in the assembly language output using symbolic
   15728      forms.
   15729 
   15730 `-mlongcall'
   15731 `-mno-longcall'
   15732      By default assume that all calls are far away so that a longer more
   15733      expensive calling sequence is required.  This is required for calls
   15734      further than 32 megabytes (33,554,432 bytes) from the current
   15735      location.  A short call will be generated if the compiler knows
   15736      the call cannot be that far away.  This setting can be overridden
   15737      by the `shortcall' function attribute, or by `#pragma longcall(0)'.
   15738 
   15739      Some linkers are capable of detecting out-of-range calls and
   15740      generating glue code on the fly.  On these systems, long calls are
   15741      unnecessary and generate slower code.  As of this writing, the AIX
   15742      linker can do this, as can the GNU linker for PowerPC/64.  It is
   15743      planned to add this feature to the GNU linker for 32-bit PowerPC
   15744      systems as well.
   15745 
   15746      On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
   15747      callee, L42", plus a "branch island" (glue code).  The two target
   15748      addresses represent the callee and the "branch island".  The
   15749      Darwin/PPC linker will prefer the first address and generate a "bl
   15750      callee" if the PPC "bl" instruction will reach the callee directly;
   15751      otherwise, the linker will generate "bl L42" to call the "branch
   15752      island".  The "branch island" is appended to the body of the
   15753      calling function; it computes the full 32-bit address of the callee
   15754      and jumps to it.
   15755 
   15756      On Mach-O (Darwin) systems, this option directs the compiler emit
   15757      to the glue for every direct call, and the Darwin linker decides
   15758      whether to use or discard it.
   15759 
   15760      In the future, we may cause GCC to ignore all longcall
   15761      specifications when the linker is known to generate glue.
   15762 
   15763 `-mtls-markers'
   15764 `-mno-tls-markers'
   15765      Mark (do not mark) calls to `__tls_get_addr' with a relocation
   15766      specifying the function argument.  The relocation allows ld to
   15767      reliably associate function call with argument setup instructions
   15768      for TLS optimization, which in turn allows gcc to better schedule
   15769      the sequence.
   15770 
   15771 `-pthread'
   15772      Adds support for multithreading with the "pthreads" library.  This
   15773      option sets flags for both the preprocessor and linker.
   15774 
   15775 `-mrecip'
   15776 `-mno-recip'
   15777      This option will enable GCC to use the reciprocal estimate and
   15778      reciprocal square root estimate instructions with additional
   15779      Newton-Raphson steps to increase precision instead of doing a
   15780      divide or square root and divide for floating point arguments.
   15781      You should use the `-ffast-math' option when using `-mrecip' (or at
   15782      least `-funsafe-math-optimizations', `-finite-math-only',
   15783      `-freciprocal-math' and `-fno-trapping-math').  Note that while
   15784      the throughput of the sequence is generally higher than the
   15785      throughput of the non-reciprocal instruction, the precision of the
   15786      sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
   15787      equals 0.99999994) for reciprocal square roots.
   15788 
   15789 `-mrecip=OPT'
   15790      This option allows to control which reciprocal estimate
   15791      instructions may be used.  OPT is a comma separated list of
   15792      options, that may be preceded by a `!' to invert the option:
   15793      `all': enable all estimate instructions, `default': enable the
   15794      default instructions, equivalent to `-mrecip', `none': disable all
   15795      estimate instructions, equivalent to `-mno-recip'; `div': enable
   15796      the reciprocal approximation instructions for both single and
   15797      double precision; `divf': enable the single precision reciprocal
   15798      approximation instructions; `divd': enable the double precision
   15799      reciprocal approximation instructions; `rsqrt': enable the
   15800      reciprocal square root approximation instructions for both single
   15801      and double precision; `rsqrtf': enable the single precision
   15802      reciprocal square root approximation instructions; `rsqrtd':
   15803      enable the double precision reciprocal square root approximation
   15804      instructions;
   15805 
   15806      So for example, `-mrecip=all,!rsqrtd' would enable the all of the
   15807      reciprocal estimate instructions, except for the `FRSQRTE',
   15808      `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
   15809      double precision reciprocal square root calculations.
   15810 
   15811 `-mrecip-precision'
   15812 `-mno-recip-precision'
   15813      Assume (do not assume) that the reciprocal estimate instructions
   15814      provide higher precision estimates than is mandated by the powerpc
   15815      ABI.  Selecting `-mcpu=power6' or `-mcpu=power7' automatically
   15816      selects `-mrecip-precision'.  The double precision square root
   15817      estimate instructions are not generated by default on low
   15818      precision machines, since they do not provide an estimate that
   15819      converges after three steps.
   15820 
   15821 `-mveclibabi=TYPE'
   15822      Specifies the ABI type to use for vectorizing intrinsics using an
   15823      external library.  The only type supported at present is `mass',
   15824      which specifies to use IBM's Mathematical Acceleration Subsystem
   15825      (MASS) libraries for vectorizing intrinsics using external
   15826      libraries.  GCC will currently emit calls to `acosd2', `acosf4',
   15827      `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
   15828      `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
   15829      `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
   15830      `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
   15831      `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
   15832      `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
   15833      `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
   15834      `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
   15835      `tanhd2', and `tanhf4' when generating code for power7.  Both
   15836      `-ftree-vectorize' and `-funsafe-math-optimizations' have to be
   15837      enabled.  The MASS libraries will have to be specified at link
   15838      time.
   15839 
   15840 `-mfriz'
   15841 `-mno-friz'
   15842      Generate (do not generate) the `friz' instruction when the
   15843      `-funsafe-math-optimizations' option is used to optimize rounding
   15844      a floating point value to 64-bit integer and back to floating
   15845      point.  The `friz' instruction does not return the same value if
   15846      the floating point number is too large to fit in an integer.
   15847 
   15848 
   15849 File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
   15850 
   15851 3.17.34 RX Options
   15852 ------------------
   15853 
   15854 These command line options are defined for RX targets:
   15855 
   15856 `-m64bit-doubles'
   15857 `-m32bit-doubles'
   15858      Make the `double' data type be 64-bits (`-m64bit-doubles') or
   15859      32-bits (`-m32bit-doubles') in size.  The default is
   15860      `-m32bit-doubles'.  _Note_ RX floating point hardware only works
   15861      on 32-bit values, which is why the default is `-m32bit-doubles'.
   15862 
   15863 `-fpu'
   15864 `-nofpu'
   15865      Enables (`-fpu') or disables (`-nofpu') the use of RX floating
   15866      point hardware.  The default is enabled for the RX600 series and
   15867      disabled for the RX200 series.
   15868 
   15869      Floating point instructions will only be generated for 32-bit
   15870      floating point values however, so if the `-m64bit-doubles' option
   15871      is in use then the FPU hardware will not be used for doubles.
   15872 
   15873      _Note_ If the `-fpu' option is enabled then
   15874      `-funsafe-math-optimizations' is also enabled automatically.  This
   15875      is because the RX FPU instructions are themselves unsafe.
   15876 
   15877 `-mcpu=NAME'
   15878      Selects the type of RX CPU to be targeted.  Currently three types
   15879      are supported, the generic RX600 and RX200 series hardware and the
   15880      specific RX610 CPU.  The default is RX600.
   15881 
   15882      The only difference between RX600 and RX610 is that the RX610 does
   15883      not support the `MVTIPL' instruction.
   15884 
   15885      The RX200 series does not have a hardware floating point unit and
   15886      so `-nofpu' is enabled by default when this type is selected.
   15887 
   15888 `-mbig-endian-data'
   15889 `-mlittle-endian-data'
   15890      Store data (but not code) in the big-endian format.  The default is
   15891      `-mlittle-endian-data', i.e. to store data in the little endian
   15892      format.
   15893 
   15894 `-msmall-data-limit=N'
   15895      Specifies the maximum size in bytes of global and static variables
   15896      which can be placed into the small data area.  Using the small data
   15897      area can lead to smaller and faster code, but the size of area is
   15898      limited and it is up to the programmer to ensure that the area does
   15899      not overflow.  Also when the small data area is used one of the
   15900      RX's registers (`r13') is reserved for use pointing to this area,
   15901      so it is no longer available for use by the compiler.  This could
   15902      result in slower and/or larger code if variables which once could
   15903      have been held in `r13' are now pushed onto the stack.
   15904 
   15905      Note, common variables (variables which have not been initialised)
   15906      and constants are not placed into the small data area as they are
   15907      assigned to other sections in the output executable.
   15908 
   15909      The default value is zero, which disables this feature.  Note, this
   15910      feature is not enabled by default with higher optimization levels
   15911      (`-O2' etc) because of the potentially detrimental effects of
   15912      reserving register `r13'.  It is up to the programmer to
   15913      experiment and discover whether this feature is of benefit to their
   15914      program.
   15915 
   15916 `-msim'
   15917 `-mno-sim'
   15918      Use the simulator runtime.  The default is to use the libgloss
   15919      board specific runtime.
   15920 
   15921 `-mas100-syntax'
   15922 `-mno-as100-syntax'
   15923      When generating assembler output use a syntax that is compatible
   15924      with Renesas's AS100 assembler.  This syntax can also be handled
   15925      by the GAS assembler but it has some restrictions so generating it
   15926      is not the default option.
   15927 
   15928 `-mmax-constant-size=N'
   15929      Specifies the maximum size, in bytes, of a constant that can be
   15930      used as an operand in a RX instruction.  Although the RX
   15931      instruction set does allow constants of up to 4 bytes in length to
   15932      be used in instructions, a longer value equates to a longer
   15933      instruction.  Thus in some circumstances it can be beneficial to
   15934      restrict the size of constants that are used in instructions.
   15935      Constants that are too big are instead placed into a constant pool
   15936      and referenced via register indirection.
   15937 
   15938      The value N can be between 0 and 4.  A value of 0 (the default) or
   15939      4 means that constants of any size are allowed.
   15940 
   15941 `-mrelax'
   15942      Enable linker relaxation.  Linker relaxation is a process whereby
   15943      the linker will attempt to reduce the size of a program by finding
   15944      shorter versions of various instructions.  Disabled by default.
   15945 
   15946 `-mint-register=N'
   15947      Specify the number of registers to reserve for fast interrupt
   15948      handler functions.  The value N can be between 0 and 4.  A value
   15949      of 1 means that register `r13' will be reserved for the exclusive
   15950      use of fast interrupt handlers.  A value of 2 reserves `r13' and
   15951      `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
   15952      of 4 reserves `r13' through `r10'.  A value of 0, the default,
   15953      does not reserve any registers.
   15954 
   15955 `-msave-acc-in-interrupts'
   15956      Specifies that interrupt handler functions should preserve the
   15957      accumulator register.  This is only necessary if normal code might
   15958      use the accumulator register, for example because it performs
   15959      64-bit multiplications.  The default is to ignore the accumulator
   15960      as this makes the interrupt handlers faster.
   15961 
   15962 
   15963  _Note:_ The generic GCC command line `-ffixed-REG' has special
   15964 significance to the RX port when used with the `interrupt' function
   15965 attribute.  This attribute indicates a function intended to process
   15966 fast interrupts.  GCC will will ensure that it only uses the registers
   15967 `r10', `r11', `r12' and/or `r13' and only provided that the normal use
   15968 of the corresponding registers have been restricted via the
   15969 `-ffixed-REG' or `-mint-register' command line options.
   15970 
   15971 
   15972 File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
   15973 
   15974 3.17.35 S/390 and zSeries Options
   15975 ---------------------------------
   15976 
   15977 These are the `-m' options defined for the S/390 and zSeries
   15978 architecture.
   15979 
   15980 `-mhard-float'
   15981 `-msoft-float'
   15982      Use (do not use) the hardware floating-point instructions and
   15983      registers for floating-point operations.  When `-msoft-float' is
   15984      specified, functions in `libgcc.a' will be used to perform
   15985      floating-point operations.  When `-mhard-float' is specified, the
   15986      compiler generates IEEE floating-point instructions.  This is the
   15987      default.
   15988 
   15989 `-mhard-dfp'
   15990 `-mno-hard-dfp'
   15991      Use (do not use) the hardware decimal-floating-point instructions
   15992      for decimal-floating-point operations.  When `-mno-hard-dfp' is
   15993      specified, functions in `libgcc.a' will be used to perform
   15994      decimal-floating-point operations.  When `-mhard-dfp' is
   15995      specified, the compiler generates decimal-floating-point hardware
   15996      instructions.  This is the default for `-march=z9-ec' or higher.
   15997 
   15998 `-mlong-double-64'
   15999 `-mlong-double-128'
   16000      These switches control the size of `long double' type. A size of
   16001      64bit makes the `long double' type equivalent to the `double'
   16002      type. This is the default.
   16003 
   16004 `-mbackchain'
   16005 `-mno-backchain'
   16006      Store (do not store) the address of the caller's frame as
   16007      backchain pointer into the callee's stack frame.  A backchain may
   16008      be needed to allow debugging using tools that do not understand
   16009      DWARF-2 call frame information.  When `-mno-packed-stack' is in
   16010      effect, the backchain pointer is stored at the bottom of the stack
   16011      frame; when `-mpacked-stack' is in effect, the backchain is placed
   16012      into the topmost word of the 96/160 byte register save area.
   16013 
   16014      In general, code compiled with `-mbackchain' is call-compatible
   16015      with code compiled with `-mmo-backchain'; however, use of the
   16016      backchain for debugging purposes usually requires that the whole
   16017      binary is built with `-mbackchain'.  Note that the combination of
   16018      `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
   16019      supported.  In order to build a linux kernel use `-msoft-float'.
   16020 
   16021      The default is to not maintain the backchain.
   16022 
   16023 `-mpacked-stack'
   16024 `-mno-packed-stack'
   16025      Use (do not use) the packed stack layout.  When
   16026      `-mno-packed-stack' is specified, the compiler uses the all fields
   16027      of the 96/160 byte register save area only for their default
   16028      purpose; unused fields still take up stack space.  When
   16029      `-mpacked-stack' is specified, register save slots are densely
   16030      packed at the top of the register save area; unused space is
   16031      reused for other purposes, allowing for more efficient use of the
   16032      available stack space.  However, when `-mbackchain' is also in
   16033      effect, the topmost word of the save area is always used to store
   16034      the backchain, and the return address register is always saved two
   16035      words below the backchain.
   16036 
   16037      As long as the stack frame backchain is not used, code generated
   16038      with `-mpacked-stack' is call-compatible with code generated with
   16039      `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
   16040      for S/390 or zSeries generated code that uses the stack frame
   16041      backchain at run time, not just for debugging purposes.  Such code
   16042      is not call-compatible with code compiled with `-mpacked-stack'.
   16043      Also, note that the combination of `-mbackchain', `-mpacked-stack'
   16044      and `-mhard-float' is not supported.  In order to build a linux
   16045      kernel use `-msoft-float'.
   16046 
   16047      The default is to not use the packed stack layout.
   16048 
   16049 `-msmall-exec'
   16050 `-mno-small-exec'
   16051      Generate (or do not generate) code using the `bras' instruction to
   16052      do subroutine calls.  This only works reliably if the total
   16053      executable size does not exceed 64k.  The default is to use the
   16054      `basr' instruction instead, which does not have this limitation.
   16055 
   16056 `-m64'
   16057 `-m31'
   16058      When `-m31' is specified, generate code compliant to the GNU/Linux
   16059      for S/390 ABI.  When `-m64' is specified, generate code compliant
   16060      to the GNU/Linux for zSeries ABI.  This allows GCC in particular
   16061      to generate 64-bit instructions.  For the `s390' targets, the
   16062      default is `-m31', while the `s390x' targets default to `-m64'.
   16063 
   16064 `-mzarch'
   16065 `-mesa'
   16066      When `-mzarch' is specified, generate code using the instructions
   16067      available on z/Architecture.  When `-mesa' is specified, generate
   16068      code using the instructions available on ESA/390.  Note that
   16069      `-mesa' is not possible with `-m64'.  When generating code
   16070      compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
   16071      When generating code compliant to the GNU/Linux for zSeries ABI,
   16072      the default is `-mzarch'.
   16073 
   16074 `-mmvcle'
   16075 `-mno-mvcle'
   16076      Generate (or do not generate) code using the `mvcle' instruction
   16077      to perform block moves.  When `-mno-mvcle' is specified, use a
   16078      `mvc' loop instead.  This is the default unless optimizing for
   16079      size.
   16080 
   16081 `-mdebug'
   16082 `-mno-debug'
   16083      Print (or do not print) additional debug information when
   16084      compiling.  The default is to not print debug information.
   16085 
   16086 `-march=CPU-TYPE'
   16087      Generate code that will run on CPU-TYPE, which is the name of a
   16088      system representing a certain processor type.  Possible values for
   16089      CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and
   16090      `z10'.  When generating code using the instructions available on
   16091      z/Architecture, the default is `-march=z900'.  Otherwise, the
   16092      default is `-march=g5'.
   16093 
   16094 `-mtune=CPU-TYPE'
   16095      Tune to CPU-TYPE everything applicable about the generated code,
   16096      except for the ABI and the set of available instructions.  The
   16097      list of CPU-TYPE values is the same as for `-march'.  The default
   16098      is the value used for `-march'.
   16099 
   16100 `-mtpf-trace'
   16101 `-mno-tpf-trace'
   16102      Generate code that adds (does not add) in TPF OS specific branches
   16103      to trace routines in the operating system.  This option is off by
   16104      default, even when compiling for the TPF OS.
   16105 
   16106 `-mfused-madd'
   16107 `-mno-fused-madd'
   16108      Generate code that uses (does not use) the floating point multiply
   16109      and accumulate instructions.  These instructions are generated by
   16110      default if hardware floating point is used.
   16111 
   16112 `-mwarn-framesize=FRAMESIZE'
   16113      Emit a warning if the current function exceeds the given frame
   16114      size.  Because this is a compile time check it doesn't need to be
   16115      a real problem when the program runs.  It is intended to identify
   16116      functions which most probably cause a stack overflow.  It is
   16117      useful to be used in an environment with limited stack size e.g.
   16118      the linux kernel.
   16119 
   16120 `-mwarn-dynamicstack'
   16121      Emit a warning if the function calls alloca or uses dynamically
   16122      sized arrays.  This is generally a bad idea with a limited stack
   16123      size.
   16124 
   16125 `-mstack-guard=STACK-GUARD'
   16126 `-mstack-size=STACK-SIZE'
   16127      If these options are provided the s390 back end emits additional
   16128      instructions in the function prologue which trigger a trap if the
   16129      stack size is STACK-GUARD bytes above the STACK-SIZE (remember
   16130      that the stack on s390 grows downward).  If the STACK-GUARD option
   16131      is omitted the smallest power of 2 larger than the frame size of
   16132      the compiled function is chosen.  These options are intended to be
   16133      used to help debugging stack overflow problems.  The additionally
   16134      emitted code causes only little overhead and hence can also be
   16135      used in production like systems without greater performance
   16136      degradation.  The given values have to be exact powers of 2 and
   16137      STACK-SIZE has to be greater than STACK-GUARD without exceeding
   16138      64k.  In order to be efficient the extra code makes the assumption
   16139      that the stack starts at an address aligned to the value given by
   16140      STACK-SIZE.  The STACK-GUARD option can only be used in
   16141      conjunction with STACK-SIZE.
   16142 
   16143 
   16144 File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
   16145 
   16146 3.17.36 Score Options
   16147 ---------------------
   16148 
   16149 These options are defined for Score implementations:
   16150 
   16151 `-meb'
   16152      Compile code for big endian mode.  This is the default.
   16153 
   16154 `-mel'
   16155      Compile code for little endian mode.
   16156 
   16157 `-mnhwloop'
   16158      Disable generate bcnz instruction.
   16159 
   16160 `-muls'
   16161      Enable generate unaligned load and store instruction.
   16162 
   16163 `-mmac'
   16164      Enable the use of multiply-accumulate instructions. Disabled by
   16165      default.
   16166 
   16167 `-mscore5'
   16168      Specify the SCORE5 as the target architecture.
   16169 
   16170 `-mscore5u'
   16171      Specify the SCORE5U of the target architecture.
   16172 
   16173 `-mscore7'
   16174      Specify the SCORE7 as the target architecture. This is the default.
   16175 
   16176 `-mscore7d'
   16177      Specify the SCORE7D as the target architecture.
   16178 
   16179 
   16180 File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
   16181 
   16182 3.17.37 SH Options
   16183 ------------------
   16184 
   16185 These `-m' options are defined for the SH implementations:
   16186 
   16187 `-m1'
   16188      Generate code for the SH1.
   16189 
   16190 `-m2'
   16191      Generate code for the SH2.
   16192 
   16193 `-m2e'
   16194      Generate code for the SH2e.
   16195 
   16196 `-m2a-nofpu'
   16197      Generate code for the SH2a without FPU, or for a SH2a-FPU in such
   16198      a way that the floating-point unit is not used.
   16199 
   16200 `-m2a-single-only'
   16201      Generate code for the SH2a-FPU, in such a way that no
   16202      double-precision floating point operations are used.
   16203 
   16204 `-m2a-single'
   16205      Generate code for the SH2a-FPU assuming the floating-point unit is
   16206      in single-precision mode by default.
   16207 
   16208 `-m2a'
   16209      Generate code for the SH2a-FPU assuming the floating-point unit is
   16210      in double-precision mode by default.
   16211 
   16212 `-m3'
   16213      Generate code for the SH3.
   16214 
   16215 `-m3e'
   16216      Generate code for the SH3e.
   16217 
   16218 `-m4-nofpu'
   16219      Generate code for the SH4 without a floating-point unit.
   16220 
   16221 `-m4-single-only'
   16222      Generate code for the SH4 with a floating-point unit that only
   16223      supports single-precision arithmetic.
   16224 
   16225 `-m4-single'
   16226      Generate code for the SH4 assuming the floating-point unit is in
   16227      single-precision mode by default.
   16228 
   16229 `-m4'
   16230      Generate code for the SH4.
   16231 
   16232 `-m4a-nofpu'
   16233      Generate code for the SH4al-dsp, or for a SH4a in such a way that
   16234      the floating-point unit is not used.
   16235 
   16236 `-m4a-single-only'
   16237      Generate code for the SH4a, in such a way that no double-precision
   16238      floating point operations are used.
   16239 
   16240 `-m4a-single'
   16241      Generate code for the SH4a assuming the floating-point unit is in
   16242      single-precision mode by default.
   16243 
   16244 `-m4a'
   16245      Generate code for the SH4a.
   16246 
   16247 `-m4al'
   16248      Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
   16249      the assembler.  GCC doesn't generate any DSP instructions at the
   16250      moment.
   16251 
   16252 `-mb'
   16253      Compile code for the processor in big endian mode.
   16254 
   16255 `-ml'
   16256      Compile code for the processor in little endian mode.
   16257 
   16258 `-mdalign'
   16259      Align doubles at 64-bit boundaries.  Note that this changes the
   16260      calling conventions, and thus some functions from the standard C
   16261      library will not work unless you recompile it first with
   16262      `-mdalign'.
   16263 
   16264 `-mrelax'
   16265      Shorten some address references at link time, when possible; uses
   16266      the linker option `-relax'.
   16267 
   16268 `-mbigtable'
   16269      Use 32-bit offsets in `switch' tables.  The default is to use
   16270      16-bit offsets.
   16271 
   16272 `-mbitops'
   16273      Enable the use of bit manipulation instructions on SH2A.
   16274 
   16275 `-mfmovd'
   16276      Enable the use of the instruction `fmovd'.  Check `-mdalign' for
   16277      alignment constraints.
   16278 
   16279 `-mhitachi'
   16280      Comply with the calling conventions defined by Renesas.
   16281 
   16282 `-mrenesas'
   16283      Comply with the calling conventions defined by Renesas.
   16284 
   16285 `-mno-renesas'
   16286      Comply with the calling conventions defined for GCC before the
   16287      Renesas conventions were available.  This option is the default
   16288      for all targets of the SH toolchain except for `sh-symbianelf'.
   16289 
   16290 `-mnomacsave'
   16291      Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
   16292      given.
   16293 
   16294 `-mieee'
   16295      Increase IEEE-compliance of floating-point code.  At the moment,
   16296      this is equivalent to `-fno-finite-math-only'.  When generating 16
   16297      bit SH opcodes, getting IEEE-conforming results for comparisons of
   16298      NANs / infinities incurs extra overhead in every floating point
   16299      comparison, therefore the default is set to `-ffinite-math-only'.
   16300 
   16301 `-minline-ic_invalidate'
   16302      Inline code to invalidate instruction cache entries after setting
   16303      up nested function trampolines.  This option has no effect if
   16304      -musermode is in effect and the selected code generation option
   16305      (e.g. -m4) does not allow the use of the icbi instruction.  If the
   16306      selected code generation option does not allow the use of the icbi
   16307      instruction, and -musermode is not in effect, the inlined code will
   16308      manipulate the instruction cache address array directly with an
   16309      associative write.  This not only requires privileged mode, but it
   16310      will also fail if the cache line had been mapped via the TLB and
   16311      has become unmapped.
   16312 
   16313 `-misize'
   16314      Dump instruction size and location in the assembly code.
   16315 
   16316 `-mpadstruct'
   16317      This option is deprecated.  It pads structures to multiple of 4
   16318      bytes, which is incompatible with the SH ABI.
   16319 
   16320 `-mspace'
   16321      Optimize for space instead of speed.  Implied by `-Os'.
   16322 
   16323 `-mprefergot'
   16324      When generating position-independent code, emit function calls
   16325      using the Global Offset Table instead of the Procedure Linkage
   16326      Table.
   16327 
   16328 `-musermode'
   16329      Don't generate privileged mode only code; implies
   16330      -mno-inline-ic_invalidate if the inlined code would not work in
   16331      user mode.  This is the default when the target is `sh-*-linux*'.
   16332 
   16333 `-multcost=NUMBER'
   16334      Set the cost to assume for a multiply insn.
   16335 
   16336 `-mdiv=STRATEGY'
   16337      Set the division strategy to use for SHmedia code.  STRATEGY must
   16338      be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
   16339      inv:call, inv:call2, inv:fp .  "fp" performs the operation in
   16340      floating point.  This has a very high latency, but needs only a
   16341      few instructions, so it might be a good choice if your code has
   16342      enough easily exploitable ILP to allow the compiler to schedule
   16343      the floating point instructions together with other instructions.
   16344      Division by zero causes a floating point exception.  "inv" uses
   16345      integer operations to calculate the inverse of the divisor, and
   16346      then multiplies the dividend with the inverse.  This strategy
   16347      allows cse and hoisting of the inverse calculation.  Division by
   16348      zero calculates an unspecified result, but does not trap.
   16349      "inv:minlat" is a variant of "inv" where if no cse / hoisting
   16350      opportunities have been found, or if the entire operation has been
   16351      hoisted to the same place, the last stages of the inverse
   16352      calculation are intertwined with the final multiply to reduce the
   16353      overall latency, at the expense of using a few more instructions,
   16354      and thus offering fewer scheduling opportunities with other code.
   16355      "call" calls a library function that usually implements the
   16356      inv:minlat strategy.  This gives high code density for
   16357      m5-*media-nofpu compilations.  "call2" uses a different entry
   16358      point of the same library function, where it assumes that a
   16359      pointer to a lookup table has already been set up, which exposes
   16360      the pointer load to cse / code hoisting optimizations.
   16361      "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
   16362      for initial code generation, but if the code stays unoptimized,
   16363      revert to the "call", "call2", or "fp" strategies, respectively.
   16364      Note that the potentially-trapping side effect of division by zero
   16365      is carried by a separate instruction, so it is possible that all
   16366      the integer instructions are hoisted out, but the marker for the
   16367      side effect stays where it is.  A recombination to fp operations
   16368      or a call is not possible in that case.  "inv20u" and "inv20l" are
   16369      variants of the "inv:minlat" strategy.  In the case that the
   16370      inverse calculation was nor separated from the multiply, they speed
   16371      up division where the dividend fits into 20 bits (plus sign where
   16372      applicable), by inserting a test to skip a number of operations in
   16373      this case; this test slows down the case of larger dividends.
   16374      inv20u assumes the case of a such a small dividend to be unlikely,
   16375      and inv20l assumes it to be likely.
   16376 
   16377 `-maccumulate-outgoing-args'
   16378      Reserve space once for outgoing arguments in the function prologue
   16379      rather than around each call.  Generally beneficial for
   16380      performance and size.  Also needed for unwinding to avoid changing
   16381      the stack frame around conditional code.
   16382 
   16383 `-mdivsi3_libfunc=NAME'
   16384      Set the name of the library function used for 32 bit signed
   16385      division to NAME.  This only affect the name used in the call and
   16386      inv:call division strategies, and the compiler will still expect
   16387      the same sets of input/output/clobbered registers as if this
   16388      option was not present.
   16389 
   16390 `-mfixed-range=REGISTER-RANGE'
   16391      Generate code treating the given register range as fixed registers.
   16392      A fixed register is one that the register allocator can not use.
   16393      This is useful when compiling kernel code.  A register range is
   16394      specified as two registers separated by a dash.  Multiple register
   16395      ranges can be specified separated by a comma.
   16396 
   16397 `-madjust-unroll'
   16398      Throttle unrolling to avoid thrashing target registers.  This
   16399      option only has an effect if the gcc code base supports the
   16400      TARGET_ADJUST_UNROLL_MAX target hook.
   16401 
   16402 `-mindexed-addressing'
   16403      Enable the use of the indexed addressing mode for
   16404      SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
   16405      implement 32 bit wrap-around semantics for the indexed addressing
   16406      mode.  The architecture allows the implementation of processors
   16407      with 64 bit MMU, which the OS could use to get 32 bit addressing,
   16408      but since no current hardware implementation supports this or any
   16409      other way to make the indexed addressing mode safe to use in the
   16410      32 bit ABI, the default is -mno-indexed-addressing.
   16411 
   16412 `-mgettrcost=NUMBER'
   16413      Set the cost assumed for the gettr instruction to NUMBER.  The
   16414      default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
   16415 
   16416 `-mpt-fixed'
   16417      Assume pt* instructions won't trap.  This will generally generate
   16418      better scheduled code, but is unsafe on current hardware.  The
   16419      current architecture definition says that ptabs and ptrel trap
   16420      when the target anded with 3 is 3.  This has the unintentional
   16421      effect of making it unsafe to schedule ptabs / ptrel before a
   16422      branch, or hoist it out of a loop.  For example,
   16423      __do_global_ctors, a part of libgcc that runs constructors at
   16424      program startup, calls functions in a list which is delimited by
   16425      -1.  With the -mpt-fixed option, the ptabs will be done before
   16426      testing against -1.  That means that all the constructors will be
   16427      run a bit quicker, but when the loop comes to the end of the list,
   16428      the program crashes because ptabs loads -1 into a target register.
   16429      Since this option is unsafe for any hardware implementing the
   16430      current architecture specification, the default is -mno-pt-fixed.
   16431      Unless the user specifies a specific cost with `-mgettrcost',
   16432      -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
   16433      allocation using target registers for storing ordinary integers.
   16434 
   16435 `-minvalid-symbols'
   16436      Assume symbols might be invalid.  Ordinary function symbols
   16437      generated by the compiler will always be valid to load with
   16438      movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
   16439      linker tricks it is possible to generate symbols that will cause
   16440      ptabs / ptrel to trap.  This option is only meaningful when
   16441      `-mno-pt-fixed' is in effect.  It will then prevent
   16442      cross-basic-block cse, hoisting and most scheduling of symbol
   16443      loads.  The default is `-mno-invalid-symbols'.
   16444 
   16445 
   16446 File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
   16447 
   16448 3.17.38 Solaris 2 Options
   16449 -------------------------
   16450 
   16451 These `-m' options are supported on Solaris 2:
   16452 
   16453 `-mimpure-text'
   16454      `-mimpure-text', used in addition to `-shared', tells the compiler
   16455      to not pass `-z text' to the linker when linking a shared object.
   16456      Using this option, you can link position-dependent code into a
   16457      shared object.
   16458 
   16459      `-mimpure-text' suppresses the "relocations remain against
   16460      allocatable but non-writable sections" linker error message.
   16461      However, the necessary relocations will trigger copy-on-write, and
   16462      the shared object is not actually shared across processes.
   16463      Instead of using `-mimpure-text', you should compile all source
   16464      code with `-fpic' or `-fPIC'.
   16465 
   16466 
   16467  These switches are supported in addition to the above on Solaris 2:
   16468 
   16469 `-threads'
   16470      Add support for multithreading using the Solaris threads library.
   16471      This option sets flags for both the preprocessor and linker.  This
   16472      option does not affect the thread safety of object code produced
   16473      by the compiler or that of libraries supplied with it.
   16474 
   16475 `-pthreads'
   16476      Add support for multithreading using the POSIX threads library.
   16477      This option sets flags for both the preprocessor and linker.  This
   16478      option does not affect the thread safety of object code produced
   16479      by the compiler or that of libraries supplied with it.
   16480 
   16481 `-pthread'
   16482      This is a synonym for `-pthreads'.
   16483 
   16484 
   16485 File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
   16486 
   16487 3.17.39 SPARC Options
   16488 ---------------------
   16489 
   16490 These `-m' options are supported on the SPARC:
   16491 
   16492 `-mno-app-regs'
   16493 `-mapp-regs'
   16494      Specify `-mapp-regs' to generate output using the global registers
   16495      2 through 4, which the SPARC SVR4 ABI reserves for applications.
   16496      This is the default.
   16497 
   16498      To be fully SVR4 ABI compliant at the cost of some performance
   16499      loss, specify `-mno-app-regs'.  You should compile libraries and
   16500      system software with this option.
   16501 
   16502 `-mfpu'
   16503 `-mhard-float'
   16504      Generate output containing floating point instructions.  This is
   16505      the default.
   16506 
   16507 `-mno-fpu'
   16508 `-msoft-float'
   16509      Generate output containing library calls for floating point.
   16510      *Warning:* the requisite libraries are not available for all SPARC
   16511      targets.  Normally the facilities of the machine's usual C
   16512      compiler are used, but this cannot be done directly in
   16513      cross-compilation.  You must make your own arrangements to provide
   16514      suitable library functions for cross-compilation.  The embedded
   16515      targets `sparc-*-aout' and `sparclite-*-*' do provide software
   16516      floating point support.
   16517 
   16518      `-msoft-float' changes the calling convention in the output file;
   16519      therefore, it is only useful if you compile _all_ of a program with
   16520      this option.  In particular, you need to compile `libgcc.a', the
   16521      library that comes with GCC, with `-msoft-float' in order for this
   16522      to work.
   16523 
   16524 `-mhard-quad-float'
   16525      Generate output containing quad-word (long double) floating point
   16526      instructions.
   16527 
   16528 `-msoft-quad-float'
   16529      Generate output containing library calls for quad-word (long
   16530      double) floating point instructions.  The functions called are
   16531      those specified in the SPARC ABI.  This is the default.
   16532 
   16533      As of this writing, there are no SPARC implementations that have
   16534      hardware support for the quad-word floating point instructions.
   16535      They all invoke a trap handler for one of these instructions, and
   16536      then the trap handler emulates the effect of the instruction.
   16537      Because of the trap handler overhead, this is much slower than
   16538      calling the ABI library routines.  Thus the `-msoft-quad-float'
   16539      option is the default.
   16540 
   16541 `-mno-unaligned-doubles'
   16542 `-munaligned-doubles'
   16543      Assume that doubles have 8 byte alignment.  This is the default.
   16544 
   16545      With `-munaligned-doubles', GCC assumes that doubles have 8 byte
   16546      alignment only if they are contained in another type, or if they
   16547      have an absolute address.  Otherwise, it assumes they have 4 byte
   16548      alignment.  Specifying this option avoids some rare compatibility
   16549      problems with code generated by other compilers.  It is not the
   16550      default because it results in a performance loss, especially for
   16551      floating point code.
   16552 
   16553 `-mno-faster-structs'
   16554 `-mfaster-structs'
   16555      With `-mfaster-structs', the compiler assumes that structures
   16556      should have 8 byte alignment.  This enables the use of pairs of
   16557      `ldd' and `std' instructions for copies in structure assignment,
   16558      in place of twice as many `ld' and `st' pairs.  However, the use
   16559      of this changed alignment directly violates the SPARC ABI.  Thus,
   16560      it's intended only for use on targets where the developer
   16561      acknowledges that their resulting code will not be directly in
   16562      line with the rules of the ABI.
   16563 
   16564 `-mcpu=CPU_TYPE'
   16565      Set the instruction set, register set, and instruction scheduling
   16566      parameters for machine type CPU_TYPE.  Supported values for
   16567      CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
   16568      `leon', `sparclite', `f930', `f934', `sparclite86x', `sparclet',
   16569      `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and
   16570      `niagara2'.
   16571 
   16572      Default instruction scheduling parameters are used for values that
   16573      select an architecture and not an implementation.  These are `v7',
   16574      `v8', `sparclite', `sparclet', `v9'.
   16575 
   16576      Here is a list of each supported architecture and their supported
   16577      implementations.
   16578 
   16579               v7:             cypress
   16580               v8:             supersparc, hypersparc, leon
   16581               sparclite:      f930, f934, sparclite86x
   16582               sparclet:       tsc701
   16583               v9:             ultrasparc, ultrasparc3, niagara, niagara2
   16584 
   16585      By default (unless configured otherwise), GCC generates code for
   16586      the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
   16587      the compiler additionally optimizes it for the Cypress CY7C602
   16588      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
   16589      also appropriate for the older SPARCStation 1, 2, IPX etc.
   16590 
   16591      With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
   16592      architecture.  The only difference from V7 code is that the
   16593      compiler emits the integer multiply and integer divide
   16594      instructions which exist in SPARC-V8 but not in SPARC-V7.  With
   16595      `-mcpu=supersparc', the compiler additionally optimizes it for the
   16596      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
   16597      series.
   16598 
   16599      With `-mcpu=sparclite', GCC generates code for the SPARClite
   16600      variant of the SPARC architecture.  This adds the integer
   16601      multiply, integer divide step and scan (`ffs') instructions which
   16602      exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
   16603      compiler additionally optimizes it for the Fujitsu MB86930 chip,
   16604      which is the original SPARClite, with no FPU.  With `-mcpu=f934',
   16605      the compiler additionally optimizes it for the Fujitsu MB86934
   16606      chip, which is the more recent SPARClite with FPU.
   16607 
   16608      With `-mcpu=sparclet', GCC generates code for the SPARClet variant
   16609      of the SPARC architecture.  This adds the integer multiply,
   16610      multiply/accumulate, integer divide step and scan (`ffs')
   16611      instructions which exist in SPARClet but not in SPARC-V7.  With
   16612      `-mcpu=tsc701', the compiler additionally optimizes it for the
   16613      TEMIC SPARClet chip.
   16614 
   16615      With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
   16616      architecture.  This adds 64-bit integer and floating-point move
   16617      instructions, 3 additional floating-point condition code registers
   16618      and conditional move instructions.  With `-mcpu=ultrasparc', the
   16619      compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
   16620      chips.  With `-mcpu=ultrasparc3', the compiler additionally
   16621      optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
   16622      chips.  With `-mcpu=niagara', the compiler additionally optimizes
   16623      it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
   16624      compiler additionally optimizes it for Sun UltraSPARC T2 chips.
   16625 
   16626 `-mtune=CPU_TYPE'
   16627      Set the instruction scheduling parameters for machine type
   16628      CPU_TYPE, but do not set the instruction set or register set that
   16629      the option `-mcpu=CPU_TYPE' would.
   16630 
   16631      The same values for `-mcpu=CPU_TYPE' can be used for
   16632      `-mtune=CPU_TYPE', but the only useful values are those that
   16633      select a particular CPU implementation.  Those are `cypress',
   16634      `supersparc', `hypersparc', `leon', `f930', `f934',
   16635      `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', `niagara',
   16636      and `niagara2'.
   16637 
   16638 `-mv8plus'
   16639 `-mno-v8plus'
   16640      With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
   16641      difference from the V8 ABI is that the global and out registers are
   16642      considered 64-bit wide.  This is enabled by default on Solaris in
   16643      32-bit mode for all SPARC-V9 processors.
   16644 
   16645 `-mvis'
   16646 `-mno-vis'
   16647      With `-mvis', GCC generates code that takes advantage of the
   16648      UltraSPARC Visual Instruction Set extensions.  The default is
   16649      `-mno-vis'.
   16650 
   16651 `-mfix-at697f'
   16652      Enable the documented workaround for the single erratum of the
   16653      Atmel AT697F processor (which corresponds to erratum #13 of the
   16654      AT697E processor).
   16655 
   16656  These `-m' options are supported in addition to the above on SPARC-V9
   16657 processors in 64-bit environments:
   16658 
   16659 `-mlittle-endian'
   16660      Generate code for a processor running in little-endian mode.  It
   16661      is only available for a few configurations and most notably not on
   16662      Solaris and Linux.
   16663 
   16664 `-m32'
   16665 `-m64'
   16666      Generate code for a 32-bit or 64-bit environment.  The 32-bit
   16667      environment sets int, long and pointer to 32 bits.  The 64-bit
   16668      environment sets int to 32 bits and long and pointer to 64 bits.
   16669 
   16670 `-mcmodel=medlow'
   16671      Generate code for the Medium/Low code model: 64-bit addresses,
   16672      programs must be linked in the low 32 bits of memory.  Programs
   16673      can be statically or dynamically linked.
   16674 
   16675 `-mcmodel=medmid'
   16676      Generate code for the Medium/Middle code model: 64-bit addresses,
   16677      programs must be linked in the low 44 bits of memory, the text and
   16678      data segments must be less than 2GB in size and the data segment
   16679      must be located within 2GB of the text segment.
   16680 
   16681 `-mcmodel=medany'
   16682      Generate code for the Medium/Anywhere code model: 64-bit
   16683      addresses, programs may be linked anywhere in memory, the text and
   16684      data segments must be less than 2GB in size and the data segment
   16685      must be located within 2GB of the text segment.
   16686 
   16687 `-mcmodel=embmedany'
   16688      Generate code for the Medium/Anywhere code model for embedded
   16689      systems: 64-bit addresses, the text and data segments must be less
   16690      than 2GB in size, both starting anywhere in memory (determined at
   16691      link time).  The global register %g4 points to the base of the
   16692      data segment.  Programs are statically linked and PIC is not
   16693      supported.
   16694 
   16695 `-mstack-bias'
   16696 `-mno-stack-bias'
   16697      With `-mstack-bias', GCC assumes that the stack pointer, and frame
   16698      pointer if present, are offset by -2047 which must be added back
   16699      when making stack frame references.  This is the default in 64-bit
   16700      mode.  Otherwise, assume no such offset is present.
   16701 
   16702 
   16703 File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
   16704 
   16705 3.17.40 SPU Options
   16706 -------------------
   16707 
   16708 These `-m' options are supported on the SPU:
   16709 
   16710 `-mwarn-reloc'
   16711 `-merror-reloc'
   16712      The loader for SPU does not handle dynamic relocations.  By
   16713      default, GCC will give an error when it generates code that
   16714      requires a dynamic relocation.  `-mno-error-reloc' disables the
   16715      error, `-mwarn-reloc' will generate a warning instead.
   16716 
   16717 `-msafe-dma'
   16718 `-munsafe-dma'
   16719      Instructions which initiate or test completion of DMA must not be
   16720      reordered with respect to loads and stores of the memory which is
   16721      being accessed.  Users typically address this problem using the
   16722      volatile keyword, but that can lead to inefficient code in places
   16723      where the memory is known to not change.  Rather than mark the
   16724      memory as volatile we treat the DMA instructions as potentially
   16725      effecting all memory.  With `-munsafe-dma' users must use the
   16726      volatile keyword to protect memory accesses.
   16727 
   16728 `-mbranch-hints'
   16729      By default, GCC will generate a branch hint instruction to avoid
   16730      pipeline stalls for always taken or probably taken branches.  A
   16731      hint will not be generated closer than 8 instructions away from
   16732      its branch.  There is little reason to disable them, except for
   16733      debugging purposes, or to make an object a little bit smaller.
   16734 
   16735 `-msmall-mem'
   16736 `-mlarge-mem'
   16737      By default, GCC generates code assuming that addresses are never
   16738      larger than 18 bits.  With `-mlarge-mem' code is generated that
   16739      assumes a full 32 bit address.
   16740 
   16741 `-mstdmain'
   16742      By default, GCC links against startup code that assumes the
   16743      SPU-style main function interface (which has an unconventional
   16744      parameter list).  With `-mstdmain', GCC will link your program
   16745      against startup code that assumes a C99-style interface to `main',
   16746      including a local copy of `argv' strings.
   16747 
   16748 `-mfixed-range=REGISTER-RANGE'
   16749      Generate code treating the given register range as fixed registers.
   16750      A fixed register is one that the register allocator can not use.
   16751      This is useful when compiling kernel code.  A register range is
   16752      specified as two registers separated by a dash.  Multiple register
   16753      ranges can be specified separated by a comma.
   16754 
   16755 `-mea32'
   16756 `-mea64'
   16757      Compile code assuming that pointers to the PPU address space
   16758      accessed via the `__ea' named address space qualifier are either
   16759      32 or 64 bits wide.  The default is 32 bits.  As this is an ABI
   16760      changing option, all object code in an executable must be compiled
   16761      with the same setting.
   16762 
   16763 `-maddress-space-conversion'
   16764 `-mno-address-space-conversion'
   16765      Allow/disallow treating the `__ea' address space as superset of
   16766      the generic address space.  This enables explicit type casts
   16767      between `__ea' and generic pointer as well as implicit conversions
   16768      of generic pointers to `__ea' pointers.  The default is to allow
   16769      address space pointer conversions.
   16770 
   16771 `-mcache-size=CACHE-SIZE'
   16772      This option controls the version of libgcc that the compiler links
   16773      to an executable and selects a software-managed cache for
   16774      accessing variables in the `__ea' address space with a particular
   16775      cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
   16776      `64' and `128'.  The default cache size is 64KB.
   16777 
   16778 `-matomic-updates'
   16779 `-mno-atomic-updates'
   16780      This option controls the version of libgcc that the compiler links
   16781      to an executable and selects whether atomic updates to the
   16782      software-managed cache of PPU-side variables are used.  If you use
   16783      atomic updates, changes to a PPU variable from SPU code using the
   16784      `__ea' named address space qualifier will not interfere with
   16785      changes to other PPU variables residing in the same cache line
   16786      from PPU code.  If you do not use atomic updates, such
   16787      interference may occur; however, writing back cache lines will be
   16788      more efficient.  The default behavior is to use atomic updates.
   16789 
   16790 `-mdual-nops'
   16791 `-mdual-nops=N'
   16792      By default, GCC will insert nops to increase dual issue when it
   16793      expects it to increase performance.  N can be a value from 0 to
   16794      10.  A smaller N will insert fewer nops.  10 is the default, 0 is
   16795      the same as `-mno-dual-nops'.  Disabled with `-Os'.
   16796 
   16797 `-mhint-max-nops=N'
   16798      Maximum number of nops to insert for a branch hint.  A branch hint
   16799      must be at least 8 instructions away from the branch it is
   16800      effecting.  GCC will insert up to N nops to enforce this,
   16801      otherwise it will not generate the branch hint.
   16802 
   16803 `-mhint-max-distance=N'
   16804      The encoding of the branch hint instruction limits the hint to be
   16805      within 256 instructions of the branch it is effecting.  By
   16806      default, GCC makes sure it is within 125.
   16807 
   16808 `-msafe-hints'
   16809      Work around a hardware bug which causes the SPU to stall
   16810      indefinitely.  By default, GCC will insert the `hbrp' instruction
   16811      to make sure this stall won't happen.
   16812 
   16813 
   16814 
   16815 File: gcc.info,  Node: System V Options,  Next: V850 Options,  Prev: SPU Options,  Up: Submodel Options
   16816 
   16817 3.17.41 Options for System V
   16818 ----------------------------
   16819 
   16820 These additional options are available on System V Release 4 for
   16821 compatibility with other compilers on those systems:
   16822 
   16823 `-G'
   16824      Create a shared object.  It is recommended that `-symbolic' or
   16825      `-shared' be used instead.
   16826 
   16827 `-Qy'
   16828      Identify the versions of each tool used by the compiler, in a
   16829      `.ident' assembler directive in the output.
   16830 
   16831 `-Qn'
   16832      Refrain from adding `.ident' directives to the output file (this is
   16833      the default).
   16834 
   16835 `-YP,DIRS'
   16836      Search the directories DIRS, and no others, for libraries
   16837      specified with `-l'.
   16838 
   16839 `-Ym,DIR'
   16840      Look in the directory DIR to find the M4 preprocessor.  The
   16841      assembler uses this option.
   16842 
   16843 
   16844 File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: System V Options,  Up: Submodel Options
   16845 
   16846 3.17.42 V850 Options
   16847 --------------------
   16848 
   16849 These `-m' options are defined for V850 implementations:
   16850 
   16851 `-mlong-calls'
   16852 `-mno-long-calls'
   16853      Treat all calls as being far away (near).  If calls are assumed to
   16854      be far away, the compiler will always load the functions address
   16855      up into a register, and call indirect through the pointer.
   16856 
   16857 `-mno-ep'
   16858 `-mep'
   16859      Do not optimize (do optimize) basic blocks that use the same index
   16860      pointer 4 or more times to copy pointer into the `ep' register, and
   16861      use the shorter `sld' and `sst' instructions.  The `-mep' option
   16862      is on by default if you optimize.
   16863 
   16864 `-mno-prolog-function'
   16865 `-mprolog-function'
   16866      Do not use (do use) external functions to save and restore
   16867      registers at the prologue and epilogue of a function.  The
   16868      external functions are slower, but use less code space if more
   16869      than one function saves the same number of registers.  The
   16870      `-mprolog-function' option is on by default if you optimize.
   16871 
   16872 `-mspace'
   16873      Try to make the code as small as possible.  At present, this just
   16874      turns on the `-mep' and `-mprolog-function' options.
   16875 
   16876 `-mtda=N'
   16877      Put static or global variables whose size is N bytes or less into
   16878      the tiny data area that register `ep' points to.  The tiny data
   16879      area can hold up to 256 bytes in total (128 bytes for byte
   16880      references).
   16881 
   16882 `-msda=N'
   16883      Put static or global variables whose size is N bytes or less into
   16884      the small data area that register `gp' points to.  The small data
   16885      area can hold up to 64 kilobytes.
   16886 
   16887 `-mzda=N'
   16888      Put static or global variables whose size is N bytes or less into
   16889      the first 32 kilobytes of memory.
   16890 
   16891 `-mv850'
   16892      Specify that the target processor is the V850.
   16893 
   16894 `-mbig-switch'
   16895      Generate code suitable for big switch tables.  Use this option
   16896      only if the assembler/linker complain about out of range branches
   16897      within a switch table.
   16898 
   16899 `-mapp-regs'
   16900      This option will cause r2 and r5 to be used in the code generated
   16901      by the compiler.  This setting is the default.
   16902 
   16903 `-mno-app-regs'
   16904      This option will cause r2 and r5 to be treated as fixed registers.
   16905 
   16906 `-mv850e2v3'
   16907      Specify that the target processor is the V850E2V3.  The
   16908      preprocessor constants `__v850e2v3__' will be defined if this
   16909      option is used.
   16910 
   16911 `-mv850e2'
   16912      Specify that the target processor is the V850E2.  The preprocessor
   16913      constants `__v850e2__' will be defined if
   16914 
   16915 `-mv850e1'
   16916      Specify that the target processor is the V850E1.  The preprocessor
   16917      constants `__v850e1__' and `__v850e__' will be defined if
   16918 
   16919 `-mv850es'
   16920      Specify that the target processor is the V850ES.  This is an alias
   16921      for the `-mv850e1' option.
   16922 
   16923 `-mv850e'
   16924      Specify that the target processor is the V850E.  The preprocessor
   16925      constant `__v850e__' will be defined if this option is used.
   16926 
   16927      If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
   16928      nor `-mv850e2v3' are defined then a default target processor will
   16929      be chosen and the relevant `__v850*__' preprocessor constant will
   16930      be defined.
   16931 
   16932      The preprocessor constants `__v850' and `__v851__' are always
   16933      defined, regardless of which processor variant is the target.
   16934 
   16935 `-mdisable-callt'
   16936      This option will suppress generation of the CALLT instruction for
   16937      the v850e, v850e1, v850e2 and v850e2v3 flavors of the v850
   16938      architecture.  The default is `-mno-disable-callt' which allows
   16939      the CALLT instruction to be used.
   16940 
   16941 
   16942 
   16943 File: gcc.info,  Node: VAX Options,  Next: VxWorks Options,  Prev: V850 Options,  Up: Submodel Options
   16944 
   16945 3.17.43 VAX Options
   16946 -------------------
   16947 
   16948 These `-m' options are defined for the VAX:
   16949 
   16950 `-munix'
   16951      Do not output certain jump instructions (`aobleq' and so on) that
   16952      the Unix assembler for the VAX cannot handle across long ranges.
   16953 
   16954 `-mgnu'
   16955      Do output those jump instructions, on the assumption that you will
   16956      assemble with the GNU assembler.
   16957 
   16958 `-mg'
   16959      Output code for g-format floating point numbers instead of
   16960      d-format.
   16961 
   16962 
   16963 File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VAX Options,  Up: Submodel Options
   16964 
   16965 3.17.44 VxWorks Options
   16966 -----------------------
   16967 
   16968 The options in this section are defined for all VxWorks targets.
   16969 Options specific to the target hardware are listed with the other
   16970 options for that target.
   16971 
   16972 `-mrtp'
   16973      GCC can generate code for both VxWorks kernels and real time
   16974      processes (RTPs).  This option switches from the former to the
   16975      latter.  It also defines the preprocessor macro `__RTP__'.
   16976 
   16977 `-non-static'
   16978      Link an RTP executable against shared libraries rather than static
   16979      libraries.  The options `-static' and `-shared' can also be used
   16980      for RTPs (*note Link Options::); `-static' is the default.
   16981 
   16982 `-Bstatic'
   16983 `-Bdynamic'
   16984      These options are passed down to the linker.  They are defined for
   16985      compatibility with Diab.
   16986 
   16987 `-Xbind-lazy'
   16988      Enable lazy binding of function calls.  This option is equivalent
   16989      to `-Wl,-z,now' and is defined for compatibility with Diab.
   16990 
   16991 `-Xbind-now'
   16992      Disable lazy binding of function calls.  This option is the
   16993      default and is defined for compatibility with Diab.
   16994 
   16995 
   16996 File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options
   16997 
   16998 3.17.45 x86-64 Options
   16999 ----------------------
   17000 
   17001 These are listed under *Note i386 and x86-64 Options::.
   17002 
   17003 
   17004 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
   17005 
   17006 3.17.46 Xstormy16 Options
   17007 -------------------------
   17008 
   17009 These options are defined for Xstormy16:
   17010 
   17011 `-msim'
   17012      Choose startup files and linker script suitable for the simulator.
   17013 
   17014 
   17015 File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
   17016 
   17017 3.17.47 Xtensa Options
   17018 ----------------------
   17019 
   17020 These options are supported for Xtensa targets:
   17021 
   17022 `-mconst16'
   17023 `-mno-const16'
   17024      Enable or disable use of `CONST16' instructions for loading
   17025      constant values.  The `CONST16' instruction is currently not a
   17026      standard option from Tensilica.  When enabled, `CONST16'
   17027      instructions are always used in place of the standard `L32R'
   17028      instructions.  The use of `CONST16' is enabled by default only if
   17029      the `L32R' instruction is not available.
   17030 
   17031 `-mfused-madd'
   17032 `-mno-fused-madd'
   17033      Enable or disable use of fused multiply/add and multiply/subtract
   17034      instructions in the floating-point option.  This has no effect if
   17035      the floating-point option is not also enabled.  Disabling fused
   17036      multiply/add and multiply/subtract instructions forces the
   17037      compiler to use separate instructions for the multiply and
   17038      add/subtract operations.  This may be desirable in some cases
   17039      where strict IEEE 754-compliant results are required: the fused
   17040      multiply add/subtract instructions do not round the intermediate
   17041      result, thereby producing results with _more_ bits of precision
   17042      than specified by the IEEE standard.  Disabling fused multiply
   17043      add/subtract instructions also ensures that the program output is
   17044      not sensitive to the compiler's ability to combine multiply and
   17045      add/subtract operations.
   17046 
   17047 `-mserialize-volatile'
   17048 `-mno-serialize-volatile'
   17049      When this option is enabled, GCC inserts `MEMW' instructions before
   17050      `volatile' memory references to guarantee sequential consistency.
   17051      The default is `-mserialize-volatile'.  Use
   17052      `-mno-serialize-volatile' to omit the `MEMW' instructions.
   17053 
   17054 `-mforce-no-pic'
   17055      For targets, like GNU/Linux, where all user-mode Xtensa code must
   17056      be position-independent code (PIC), this option disables PIC for
   17057      compiling kernel code.
   17058 
   17059 `-mtext-section-literals'
   17060 `-mno-text-section-literals'
   17061      Control the treatment of literal pools.  The default is
   17062      `-mno-text-section-literals', which places literals in a separate
   17063      section in the output file.  This allows the literal pool to be
   17064      placed in a data RAM/ROM, and it also allows the linker to combine
   17065      literal pools from separate object files to remove redundant
   17066      literals and improve code size.  With `-mtext-section-literals',
   17067      the literals are interspersed in the text section in order to keep
   17068      them as close as possible to their references.  This may be
   17069      necessary for large assembly files.
   17070 
   17071 `-mtarget-align'
   17072 `-mno-target-align'
   17073      When this option is enabled, GCC instructs the assembler to
   17074      automatically align instructions to reduce branch penalties at the
   17075      expense of some code density.  The assembler attempts to widen
   17076      density instructions to align branch targets and the instructions
   17077      following call instructions.  If there are not enough preceding
   17078      safe density instructions to align a target, no widening will be
   17079      performed.  The default is `-mtarget-align'.  These options do not
   17080      affect the treatment of auto-aligned instructions like `LOOP',
   17081      which the assembler will always align, either by widening density
   17082      instructions or by inserting no-op instructions.
   17083 
   17084 `-mlongcalls'
   17085 `-mno-longcalls'
   17086      When this option is enabled, GCC instructs the assembler to
   17087      translate direct calls to indirect calls unless it can determine
   17088      that the target of a direct call is in the range allowed by the
   17089      call instruction.  This translation typically occurs for calls to
   17090      functions in other source files.  Specifically, the assembler
   17091      translates a direct `CALL' instruction into an `L32R' followed by
   17092      a `CALLX' instruction.  The default is `-mno-longcalls'.  This
   17093      option should be used in programs where the call target can
   17094      potentially be out of range.  This option is implemented in the
   17095      assembler, not the compiler, so the assembly code generated by GCC
   17096      will still show direct call instructions--look at the disassembled
   17097      object code to see the actual instructions.  Note that the
   17098      assembler will use an indirect call for every cross-file call, not
   17099      just those that really will be out of range.
   17100 
   17101 
   17102 File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
   17103 
   17104 3.17.48 zSeries Options
   17105 -----------------------
   17106 
   17107 These are listed under *Note S/390 and zSeries Options::.
   17108 
   17109 
   17110 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
   17111 
   17112 3.18 Options for Code Generation Conventions
   17113 ============================================
   17114 
   17115 These machine-independent options control the interface conventions
   17116 used in code generation.
   17117 
   17118  Most of them have both positive and negative forms; the negative form
   17119 of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
   17120 forms is listed--the one which is not the default.  You can figure out
   17121 the other form by either removing `no-' or adding it.
   17122 
   17123 `-fbounds-check'
   17124      For front-ends that support it, generate additional code to check
   17125      that indices used to access arrays are within the declared range.
   17126      This is currently only supported by the Java and Fortran
   17127      front-ends, where this option defaults to true and false
   17128      respectively.
   17129 
   17130 `-ftrapv'
   17131      This option generates traps for signed overflow on addition,
   17132      subtraction, multiplication operations.
   17133 
   17134 `-fwrapv'
   17135      This option instructs the compiler to assume that signed arithmetic
   17136      overflow of addition, subtraction and multiplication wraps around
   17137      using twos-complement representation.  This flag enables some
   17138      optimizations and disables others.  This option is enabled by
   17139      default for the Java front-end, as required by the Java language
   17140      specification.
   17141 
   17142 `-fexceptions'
   17143      Enable exception handling.  Generates extra code needed to
   17144      propagate exceptions.  For some targets, this implies GCC will
   17145      generate frame unwind information for all functions, which can
   17146      produce significant data size overhead, although it does not
   17147      affect execution.  If you do not specify this option, GCC will
   17148      enable it by default for languages like C++ which normally require
   17149      exception handling, and disable it for languages like C that do
   17150      not normally require it.  However, you may need to enable this
   17151      option when compiling C code that needs to interoperate properly
   17152      with exception handlers written in C++.  You may also wish to
   17153      disable this option if you are compiling older C++ programs that
   17154      don't use exception handling.
   17155 
   17156 `-fnon-call-exceptions'
   17157      Generate code that allows trapping instructions to throw
   17158      exceptions.  Note that this requires platform-specific runtime
   17159      support that does not exist everywhere.  Moreover, it only allows
   17160      _trapping_ instructions to throw exceptions, i.e. memory
   17161      references or floating point instructions.  It does not allow
   17162      exceptions to be thrown from arbitrary signal handlers such as
   17163      `SIGALRM'.
   17164 
   17165 `-funwind-tables'
   17166      Similar to `-fexceptions', except that it will just generate any
   17167      needed static data, but will not affect the generated code in any
   17168      other way.  You will normally not enable this option; instead, a
   17169      language processor that needs this handling would enable it on
   17170      your behalf.
   17171 
   17172 `-fasynchronous-unwind-tables'
   17173      Generate unwind table in dwarf2 format, if supported by target
   17174      machine.  The table is exact at each instruction boundary, so it
   17175      can be used for stack unwinding from asynchronous events (such as
   17176      debugger or garbage collector).
   17177 
   17178 `-fpcc-struct-return'
   17179      Return "short" `struct' and `union' values in memory like longer
   17180      ones, rather than in registers.  This convention is less
   17181      efficient, but it has the advantage of allowing intercallability
   17182      between GCC-compiled files and files compiled with other
   17183      compilers, particularly the Portable C Compiler (pcc).
   17184 
   17185      The precise convention for returning structures in memory depends
   17186      on the target configuration macros.
   17187 
   17188      Short structures and unions are those whose size and alignment
   17189      match that of some integer type.
   17190 
   17191      *Warning:* code compiled with the `-fpcc-struct-return' switch is
   17192      not binary compatible with code compiled with the
   17193      `-freg-struct-return' switch.  Use it to conform to a non-default
   17194      application binary interface.
   17195 
   17196 `-freg-struct-return'
   17197      Return `struct' and `union' values in registers when possible.
   17198      This is more efficient for small structures than
   17199      `-fpcc-struct-return'.
   17200 
   17201      If you specify neither `-fpcc-struct-return' nor
   17202      `-freg-struct-return', GCC defaults to whichever convention is
   17203      standard for the target.  If there is no standard convention, GCC
   17204      defaults to `-fpcc-struct-return', except on targets where GCC is
   17205      the principal compiler.  In those cases, we can choose the
   17206      standard, and we chose the more efficient register return
   17207      alternative.
   17208 
   17209      *Warning:* code compiled with the `-freg-struct-return' switch is
   17210      not binary compatible with code compiled with the
   17211      `-fpcc-struct-return' switch.  Use it to conform to a non-default
   17212      application binary interface.
   17213 
   17214 `-fshort-enums'
   17215      Allocate to an `enum' type only as many bytes as it needs for the
   17216      declared range of possible values.  Specifically, the `enum' type
   17217      will be equivalent to the smallest integer type which has enough
   17218      room.
   17219 
   17220      *Warning:* the `-fshort-enums' switch causes GCC to generate code
   17221      that is not binary compatible with code generated without that
   17222      switch.  Use it to conform to a non-default application binary
   17223      interface.
   17224 
   17225 `-fshort-double'
   17226      Use the same size for `double' as for `float'.
   17227 
   17228      *Warning:* the `-fshort-double' switch causes GCC to generate code
   17229      that is not binary compatible with code generated without that
   17230      switch.  Use it to conform to a non-default application binary
   17231      interface.
   17232 
   17233 `-fshort-wchar'
   17234      Override the underlying type for `wchar_t' to be `short unsigned
   17235      int' instead of the default for the target.  This option is useful
   17236      for building programs to run under WINE.
   17237 
   17238      *Warning:* the `-fshort-wchar' switch causes GCC to generate code
   17239      that is not binary compatible with code generated without that
   17240      switch.  Use it to conform to a non-default application binary
   17241      interface.
   17242 
   17243 `-fno-common'
   17244      In C code, controls the placement of uninitialized global
   17245      variables.  Unix C compilers have traditionally permitted multiple
   17246      definitions of such variables in different compilation units by
   17247      placing the variables in a common block.  This is the behavior
   17248      specified by `-fcommon', and is the default for GCC on most
   17249      targets.  On the other hand, this behavior is not required by ISO
   17250      C, and on some targets may carry a speed or code size penalty on
   17251      variable references.  The `-fno-common' option specifies that the
   17252      compiler should place uninitialized global variables in the data
   17253      section of the object file, rather than generating them as common
   17254      blocks.  This has the effect that if the same variable is declared
   17255      (without `extern') in two different compilations, you will get a
   17256      multiple-definition error when you link them.  In this case, you
   17257      must compile with `-fcommon' instead.  Compiling with
   17258      `-fno-common' is useful on targets for which it provides better
   17259      performance, or if you wish to verify that the program will work
   17260      on other systems which always treat uninitialized variable
   17261      declarations this way.
   17262 
   17263 `-fno-ident'
   17264      Ignore the `#ident' directive.
   17265 
   17266 `-finhibit-size-directive'
   17267      Don't output a `.size' assembler directive, or anything else that
   17268      would cause trouble if the function is split in the middle, and the
   17269      two halves are placed at locations far apart in memory.  This
   17270      option is used when compiling `crtstuff.c'; you should not need to
   17271      use it for anything else.
   17272 
   17273 `-fverbose-asm'
   17274      Put extra commentary information in the generated assembly code to
   17275      make it more readable.  This option is generally only of use to
   17276      those who actually need to read the generated assembly code
   17277      (perhaps while debugging the compiler itself).
   17278 
   17279      `-fno-verbose-asm', the default, causes the extra information to
   17280      be omitted and is useful when comparing two assembler files.
   17281 
   17282 `-frecord-gcc-switches'
   17283      This switch causes the command line that was used to invoke the
   17284      compiler to be recorded into the object file that is being created.
   17285      This switch is only implemented on some targets and the exact
   17286      format of the recording is target and binary file format
   17287      dependent, but it usually takes the form of a section containing
   17288      ASCII text.  This switch is related to the `-fverbose-asm' switch,
   17289      but that switch only records information in the assembler output
   17290      file as comments, so it never reaches the object file.
   17291 
   17292 `-fpic'
   17293      Generate position-independent code (PIC) suitable for use in a
   17294      shared library, if supported for the target machine.  Such code
   17295      accesses all constant addresses through a global offset table
   17296      (GOT).  The dynamic loader resolves the GOT entries when the
   17297      program starts (the dynamic loader is not part of GCC; it is part
   17298      of the operating system).  If the GOT size for the linked
   17299      executable exceeds a machine-specific maximum size, you get an
   17300      error message from the linker indicating that `-fpic' does not
   17301      work; in that case, recompile with `-fPIC' instead.  (These
   17302      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
   17303      386 has no such limit.)
   17304 
   17305      Position-independent code requires special support, and therefore
   17306      works only on certain machines.  For the 386, GCC supports PIC for
   17307      System V but not for the Sun 386i.  Code generated for the IBM
   17308      RS/6000 is always position-independent.
   17309 
   17310      When this flag is set, the macros `__pic__' and `__PIC__' are
   17311      defined to 1.
   17312 
   17313 `-fPIC'
   17314      If supported for the target machine, emit position-independent
   17315      code, suitable for dynamic linking and avoiding any limit on the
   17316      size of the global offset table.  This option makes a difference
   17317      on the m68k, PowerPC and SPARC.
   17318 
   17319      Position-independent code requires special support, and therefore
   17320      works only on certain machines.
   17321 
   17322      When this flag is set, the macros `__pic__' and `__PIC__' are
   17323      defined to 2.
   17324 
   17325 `-fpie'
   17326 `-fPIE'
   17327      These options are similar to `-fpic' and `-fPIC', but generated
   17328      position independent code can be only linked into executables.
   17329      Usually these options are used when `-pie' GCC option will be used
   17330      during linking.
   17331 
   17332      `-fpie' and `-fPIE' both define the macros `__pie__' and
   17333      `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
   17334      `-fPIE'.
   17335 
   17336 `-fno-jump-tables'
   17337      Do not use jump tables for switch statements even where it would be
   17338      more efficient than other code generation strategies.  This option
   17339      is of use in conjunction with `-fpic' or `-fPIC' for building code
   17340      which forms part of a dynamic linker and cannot reference the
   17341      address of a jump table.  On some targets, jump tables do not
   17342      require a GOT and this option is not needed.
   17343 
   17344 `-ffixed-REG'
   17345      Treat the register named REG as a fixed register; generated code
   17346      should never refer to it (except perhaps as a stack pointer, frame
   17347      pointer or in some other fixed role).
   17348 
   17349      REG must be the name of a register.  The register names accepted
   17350      are machine-specific and are defined in the `REGISTER_NAMES' macro
   17351      in the machine description macro file.
   17352 
   17353      This flag does not have a negative form, because it specifies a
   17354      three-way choice.
   17355 
   17356 `-fcall-used-REG'
   17357      Treat the register named REG as an allocable register that is
   17358      clobbered by function calls.  It may be allocated for temporaries
   17359      or variables that do not live across a call.  Functions compiled
   17360      this way will not save and restore the register REG.
   17361 
   17362      It is an error to used this flag with the frame pointer or stack
   17363      pointer.  Use of this flag for other registers that have fixed
   17364      pervasive roles in the machine's execution model will produce
   17365      disastrous results.
   17366 
   17367      This flag does not have a negative form, because it specifies a
   17368      three-way choice.
   17369 
   17370 `-fcall-saved-REG'
   17371      Treat the register named REG as an allocable register saved by
   17372      functions.  It may be allocated even for temporaries or variables
   17373      that live across a call.  Functions compiled this way will save
   17374      and restore the register REG if they use it.
   17375 
   17376      It is an error to used this flag with the frame pointer or stack
   17377      pointer.  Use of this flag for other registers that have fixed
   17378      pervasive roles in the machine's execution model will produce
   17379      disastrous results.
   17380 
   17381      A different sort of disaster will result from the use of this flag
   17382      for a register in which function values may be returned.
   17383 
   17384      This flag does not have a negative form, because it specifies a
   17385      three-way choice.
   17386 
   17387 `-fpack-struct[=N]'
   17388      Without a value specified, pack all structure members together
   17389      without holes.  When a value is specified (which must be a small
   17390      power of two), pack structure members according to this value,
   17391      representing the maximum alignment (that is, objects with default
   17392      alignment requirements larger than this will be output potentially
   17393      unaligned at the next fitting location.
   17394 
   17395      *Warning:* the `-fpack-struct' switch causes GCC to generate code
   17396      that is not binary compatible with code generated without that
   17397      switch.  Additionally, it makes the code suboptimal.  Use it to
   17398      conform to a non-default application binary interface.
   17399 
   17400 `-finstrument-functions'
   17401      Generate instrumentation calls for entry and exit to functions.
   17402      Just after function entry and just before function exit, the
   17403      following profiling functions will be called with the address of
   17404      the current function and its call site.  (On some platforms,
   17405      `__builtin_return_address' does not work beyond the current
   17406      function, so the call site information may not be available to the
   17407      profiling functions otherwise.)
   17408 
   17409           void __cyg_profile_func_enter (void *this_fn,
   17410                                          void *call_site);
   17411           void __cyg_profile_func_exit  (void *this_fn,
   17412                                          void *call_site);
   17413 
   17414      The first argument is the address of the start of the current
   17415      function, which may be looked up exactly in the symbol table.
   17416 
   17417      This instrumentation is also done for functions expanded inline in
   17418      other functions.  The profiling calls will indicate where,
   17419      conceptually, the inline function is entered and exited.  This
   17420      means that addressable versions of such functions must be
   17421      available.  If all your uses of a function are expanded inline,
   17422      this may mean an additional expansion of code size.  If you use
   17423      `extern inline' in your C code, an addressable version of such
   17424      functions must be provided.  (This is normally the case anyways,
   17425      but if you get lucky and the optimizer always expands the
   17426      functions inline, you might have gotten away without providing
   17427      static copies.)
   17428 
   17429      A function may be given the attribute `no_instrument_function', in
   17430      which case this instrumentation will not be done.  This can be
   17431      used, for example, for the profiling functions listed above,
   17432      high-priority interrupt routines, and any functions from which the
   17433      profiling functions cannot safely be called (perhaps signal
   17434      handlers, if the profiling routines generate output or allocate
   17435      memory).
   17436 
   17437 `-finstrument-functions-exclude-file-list=FILE,FILE,...'
   17438      Set the list of functions that are excluded from instrumentation
   17439      (see the description of `-finstrument-functions').  If the file
   17440      that contains a function definition matches with one of FILE, then
   17441      that function is not instrumented.  The match is done on
   17442      substrings: if the FILE parameter is a substring of the file name,
   17443      it is considered to be a match.
   17444 
   17445      For example:
   17446 
   17447           -finstrument-functions-exclude-file-list=/bits/stl,include/sys
   17448 
   17449      will exclude any inline function defined in files whose pathnames
   17450      contain `/bits/stl' or `include/sys'.
   17451 
   17452      If, for some reason, you want to include letter `','' in one of
   17453      SYM, write `'\,''. For example,
   17454      `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
   17455      single quote surrounding the option).
   17456 
   17457 `-finstrument-functions-exclude-function-list=SYM,SYM,...'
   17458      This is similar to `-finstrument-functions-exclude-file-list', but
   17459      this option sets the list of function names to be excluded from
   17460      instrumentation.  The function name to be matched is its
   17461      user-visible name, such as `vector<int> blah(const vector<int>
   17462      &)', not the internal mangled name (e.g.,
   17463      `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
   17464      the SYM parameter is a substring of the function name, it is
   17465      considered to be a match.  For C99 and C++ extended identifiers,
   17466      the function name must be given in UTF-8, not using universal
   17467      character names.
   17468 
   17469 `-fstack-check'
   17470      Generate code to verify that you do not go beyond the boundary of
   17471      the stack.  You should specify this flag if you are running in an
   17472      environment with multiple threads, but only rarely need to specify
   17473      it in a single-threaded environment since stack overflow is
   17474      automatically detected on nearly all systems if there is only one
   17475      stack.
   17476 
   17477      Note that this switch does not actually cause checking to be done;
   17478      the operating system or the language runtime must do that.  The
   17479      switch causes generation of code to ensure that they see the stack
   17480      being extended.
   17481 
   17482      You can additionally specify a string parameter: `no' means no
   17483      checking, `generic' means force the use of old-style checking,
   17484      `specific' means use the best checking method and is equivalent to
   17485      bare `-fstack-check'.
   17486 
   17487      Old-style checking is a generic mechanism that requires no specific
   17488      target support in the compiler but comes with the following
   17489      drawbacks:
   17490 
   17491        1. Modified allocation strategy for large objects: they will
   17492           always be allocated dynamically if their size exceeds a fixed
   17493           threshold.
   17494 
   17495        2. Fixed limit on the size of the static frame of functions:
   17496           when it is topped by a particular function, stack checking is
   17497           not reliable and a warning is issued by the compiler.
   17498 
   17499        3. Inefficiency: because of both the modified allocation
   17500           strategy and the generic implementation, the performances of
   17501           the code are hampered.
   17502 
   17503      Note that old-style stack checking is also the fallback method for
   17504      `specific' if no target support has been added in the compiler.
   17505 
   17506 `-fstack-limit-register=REG'
   17507 `-fstack-limit-symbol=SYM'
   17508 `-fno-stack-limit'
   17509      Generate code to ensure that the stack does not grow beyond a
   17510      certain value, either the value of a register or the address of a
   17511      symbol.  If the stack would grow beyond the value, a signal is
   17512      raised.  For most targets, the signal is raised before the stack
   17513      overruns the boundary, so it is possible to catch the signal
   17514      without taking special precautions.
   17515 
   17516      For instance, if the stack starts at absolute address `0x80000000'
   17517      and grows downwards, you can use the flags
   17518      `-fstack-limit-symbol=__stack_limit' and
   17519      `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
   17520      of 128KB.  Note that this may only work with the GNU linker.
   17521 
   17522 `-fsplit-stack'
   17523      Generate code to automatically split the stack before it overflows.
   17524      The resulting program has a discontiguous stack which can only
   17525      overflow if the program is unable to allocate any more memory.
   17526      This is most useful when running threaded programs, as it is no
   17527      longer necessary to calculate a good stack size to use for each
   17528      thread.  This is currently only implemented for the i386 and
   17529      x86_64 backends running GNU/Linux.
   17530 
   17531      When code compiled with `-fsplit-stack' calls code compiled
   17532      without `-fsplit-stack', there may not be much stack space
   17533      available for the latter code to run.  If compiling all code,
   17534      including library code, with `-fsplit-stack' is not an option,
   17535      then the linker can fix up these calls so that the code compiled
   17536      without `-fsplit-stack' always has a large stack.  Support for
   17537      this is implemented in the gold linker in GNU binutils release 2.21
   17538      and later.
   17539 
   17540 `-fleading-underscore'
   17541      This option and its counterpart, `-fno-leading-underscore',
   17542      forcibly change the way C symbols are represented in the object
   17543      file.  One use is to help link with legacy assembly code.
   17544 
   17545      *Warning:* the `-fleading-underscore' switch causes GCC to
   17546      generate code that is not binary compatible with code generated
   17547      without that switch.  Use it to conform to a non-default
   17548      application binary interface.  Not all targets provide complete
   17549      support for this switch.
   17550 
   17551 `-ftls-model=MODEL'
   17552      Alter the thread-local storage model to be used (*note
   17553      Thread-Local::).  The MODEL argument should be one of
   17554      `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
   17555 
   17556      The default without `-fpic' is `initial-exec'; with `-fpic' the
   17557      default is `global-dynamic'.
   17558 
   17559 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
   17560      Set the default ELF image symbol visibility to the specified
   17561      option--all symbols will be marked with this unless overridden
   17562      within the code.  Using this feature can very substantially
   17563      improve linking and load times of shared object libraries, produce
   17564      more optimized code, provide near-perfect API export and prevent
   17565      symbol clashes.  It is *strongly* recommended that you use this in
   17566      any shared objects you distribute.
   17567 
   17568      Despite the nomenclature, `default' always means public; i.e.,
   17569      available to be linked against from outside the shared object.
   17570      `protected' and `internal' are pretty useless in real-world usage
   17571      so the only other commonly used option will be `hidden'.  The
   17572      default if `-fvisibility' isn't specified is `default', i.e., make
   17573      every symbol public--this causes the same behavior as previous
   17574      versions of GCC.
   17575 
   17576      A good explanation of the benefits offered by ensuring ELF symbols
   17577      have the correct visibility is given by "How To Write Shared
   17578      Libraries" by Ulrich Drepper (which can be found at
   17579      `http://people.redhat.com/~drepper/')--however a superior solution
   17580      made possible by this option to marking things hidden when the
   17581      default is public is to make the default hidden and mark things
   17582      public.  This is the norm with DLL's on Windows and with
   17583      `-fvisibility=hidden' and `__attribute__
   17584      ((visibility("default")))' instead of `__declspec(dllexport)' you
   17585      get almost identical semantics with identical syntax.  This is a
   17586      great boon to those working with cross-platform projects.
   17587 
   17588      For those adding visibility support to existing code, you may find
   17589      `#pragma GCC visibility' of use.  This works by you enclosing the
   17590      declarations you wish to set visibility for with (for example)
   17591      `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
   17592      pop'.  Bear in mind that symbol visibility should be viewed *as
   17593      part of the API interface contract* and thus all new code should
   17594      always specify visibility when it is not the default; i.e.,
   17595      declarations only for use within the local DSO should *always* be
   17596      marked explicitly as hidden as so to avoid PLT indirection
   17597      overheads--making this abundantly clear also aids readability and
   17598      self-documentation of the code.  Note that due to ISO C++
   17599      specification requirements, operator new and operator delete must
   17600      always be of default visibility.
   17601 
   17602      Be aware that headers from outside your project, in particular
   17603      system headers and headers from any other library you use, may not
   17604      be expecting to be compiled with visibility other than the
   17605      default.  You may need to explicitly say `#pragma GCC visibility
   17606      push(default)' before including any such headers.
   17607 
   17608      `extern' declarations are not affected by `-fvisibility', so a lot
   17609      of code can be recompiled with `-fvisibility=hidden' with no
   17610      modifications.  However, this means that calls to `extern'
   17611      functions with no explicit visibility will use the PLT, so it is
   17612      more effective to use `__attribute ((visibility))' and/or `#pragma
   17613      GCC visibility' to tell the compiler which `extern' declarations
   17614      should be treated as hidden.
   17615 
   17616      Note that `-fvisibility' does affect C++ vague linkage entities.
   17617      This means that, for instance, an exception class that will be
   17618      thrown between DSOs must be explicitly marked with default
   17619      visibility so that the `type_info' nodes will be unified between
   17620      the DSOs.
   17621 
   17622      An overview of these techniques, their benefits and how to use them
   17623      is at `http://gcc.gnu.org/wiki/Visibility'.
   17624 
   17625 `-fstrict-volatile-bitfields'
   17626      This option should be used if accesses to volatile bitfields (or
   17627      other structure fields, although the compiler usually honors those
   17628      types anyway) should use a single access of the width of the
   17629      field's type, aligned to a natural alignment if possible.  For
   17630      example, targets with memory-mapped peripheral registers might
   17631      require all such accesses to be 16 bits wide; with this flag the
   17632      user could declare all peripheral bitfields as "unsigned short"
   17633      (assuming short is 16 bits on these targets) to force GCC to use
   17634      16 bit accesses instead of, perhaps, a more efficient 32 bit
   17635      access.
   17636 
   17637      If this option is disabled, the compiler will use the most
   17638      efficient instruction.  In the previous example, that might be a
   17639      32-bit load instruction, even though that will access bytes that
   17640      do not contain any portion of the bitfield, or memory-mapped
   17641      registers unrelated to the one being updated.
   17642 
   17643      If the target requires strict alignment, and honoring the field
   17644      type would require violating this alignment, a warning is issued.
   17645      If the field has `packed' attribute, the access is done without
   17646      honoring the field type.  If the field doesn't have `packed'
   17647      attribute, the access is done honoring the field type.  In both
   17648      cases, GCC assumes that the user knows something about the target
   17649      hardware that it is unaware of.
   17650 
   17651      The default value of this option is determined by the application
   17652      binary interface for the target processor.
   17653 
   17654 
   17655 
   17656 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
   17657 
   17658 3.19 Environment Variables Affecting GCC
   17659 ========================================
   17660 
   17661 This section describes several environment variables that affect how GCC
   17662 operates.  Some of them work by specifying directories or prefixes to
   17663 use when searching for various kinds of files.  Some are used to
   17664 specify other aspects of the compilation environment.
   17665 
   17666  Note that you can also specify places to search using options such as
   17667 `-B', `-I' and `-L' (*note Directory Options::).  These take precedence
   17668 over places specified using environment variables, which in turn take
   17669 precedence over those specified by the configuration of GCC.  *Note
   17670 Controlling the Compilation Driver `gcc': (gccint)Driver.
   17671 
   17672 `LANG'
   17673 `LC_CTYPE'
   17674 `LC_MESSAGES'
   17675 `LC_ALL'
   17676      These environment variables control the way that GCC uses
   17677      localization information that allow GCC to work with different
   17678      national conventions.  GCC inspects the locale categories
   17679      `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
   17680      These locale categories can be set to any value supported by your
   17681      installation.  A typical value is `en_GB.UTF-8' for English in the
   17682      United Kingdom encoded in UTF-8.
   17683 
   17684      The `LC_CTYPE' environment variable specifies character
   17685      classification.  GCC uses it to determine the character boundaries
   17686      in a string; this is needed for some multibyte encodings that
   17687      contain quote and escape characters that would otherwise be
   17688      interpreted as a string end or escape.
   17689 
   17690      The `LC_MESSAGES' environment variable specifies the language to
   17691      use in diagnostic messages.
   17692 
   17693      If the `LC_ALL' environment variable is set, it overrides the value
   17694      of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
   17695      `LC_MESSAGES' default to the value of the `LANG' environment
   17696      variable.  If none of these variables are set, GCC defaults to
   17697      traditional C English behavior.
   17698 
   17699 `TMPDIR'
   17700      If `TMPDIR' is set, it specifies the directory to use for temporary
   17701      files.  GCC uses temporary files to hold the output of one stage of
   17702      compilation which is to be used as input to the next stage: for
   17703      example, the output of the preprocessor, which is the input to the
   17704      compiler proper.
   17705 
   17706 `GCC_EXEC_PREFIX'
   17707      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
   17708      names of the subprograms executed by the compiler.  No slash is
   17709      added when this prefix is combined with the name of a subprogram,
   17710      but you can specify a prefix that ends with a slash if you wish.
   17711 
   17712      If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
   17713      appropriate prefix to use based on the pathname it was invoked
   17714      with.
   17715 
   17716      If GCC cannot find the subprogram using the specified prefix, it
   17717      tries looking in the usual places for the subprogram.
   17718 
   17719      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
   17720      PREFIX is the prefix to the installed compiler. In many cases
   17721      PREFIX is the value of `prefix' when you ran the `configure'
   17722      script.
   17723 
   17724      Other prefixes specified with `-B' take precedence over this
   17725      prefix.
   17726 
   17727      This prefix is also used for finding files such as `crt0.o' that
   17728      are used for linking.
   17729 
   17730      In addition, the prefix is used in an unusual way in finding the
   17731      directories to search for header files.  For each of the standard
   17732      directories whose name normally begins with `/usr/local/lib/gcc'
   17733      (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
   17734      replacing that beginning with the specified prefix to produce an
   17735      alternate directory name.  Thus, with `-Bfoo/', GCC will search
   17736      `foo/bar' where it would normally search `/usr/local/lib/bar'.
   17737      These alternate directories are searched first; the standard
   17738      directories come next. If a standard directory begins with the
   17739      configured PREFIX then the value of PREFIX is replaced by
   17740      `GCC_EXEC_PREFIX' when looking for header files.
   17741 
   17742 `COMPILER_PATH'
   17743      The value of `COMPILER_PATH' is a colon-separated list of
   17744      directories, much like `PATH'.  GCC tries the directories thus
   17745      specified when searching for subprograms, if it can't find the
   17746      subprograms using `GCC_EXEC_PREFIX'.
   17747 
   17748 `LIBRARY_PATH'
   17749      The value of `LIBRARY_PATH' is a colon-separated list of
   17750      directories, much like `PATH'.  When configured as a native
   17751      compiler, GCC tries the directories thus specified when searching
   17752      for special linker files, if it can't find them using
   17753      `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
   17754      when searching for ordinary libraries for the `-l' option (but
   17755      directories specified with `-L' come first).
   17756 
   17757 `LANG'
   17758      This variable is used to pass locale information to the compiler.
   17759      One way in which this information is used is to determine the
   17760      character set to be used when character literals, string literals
   17761      and comments are parsed in C and C++.  When the compiler is
   17762      configured to allow multibyte characters, the following values for
   17763      `LANG' are recognized:
   17764 
   17765     `C-JIS'
   17766           Recognize JIS characters.
   17767 
   17768     `C-SJIS'
   17769           Recognize SJIS characters.
   17770 
   17771     `C-EUCJP'
   17772           Recognize EUCJP characters.
   17773 
   17774      If `LANG' is not defined, or if it has some other value, then the
   17775      compiler will use mblen and mbtowc as defined by the default
   17776      locale to recognize and translate multibyte characters.
   17777 
   17778 Some additional environments variables affect the behavior of the
   17779 preprocessor.
   17780 
   17781 `CPATH'
   17782 `C_INCLUDE_PATH'
   17783 `CPLUS_INCLUDE_PATH'
   17784 `OBJC_INCLUDE_PATH'
   17785      Each variable's value is a list of directories separated by a
   17786      special character, much like `PATH', in which to look for header
   17787      files.  The special character, `PATH_SEPARATOR', is
   17788      target-dependent and determined at GCC build time.  For Microsoft
   17789      Windows-based targets it is a semicolon, and for almost all other
   17790      targets it is a colon.
   17791 
   17792      `CPATH' specifies a list of directories to be searched as if
   17793      specified with `-I', but after any paths given with `-I' options
   17794      on the command line.  This environment variable is used regardless
   17795      of which language is being preprocessed.
   17796 
   17797      The remaining environment variables apply only when preprocessing
   17798      the particular language indicated.  Each specifies a list of
   17799      directories to be searched as if specified with `-isystem', but
   17800      after any paths given with `-isystem' options on the command line.
   17801 
   17802      In all these variables, an empty element instructs the compiler to
   17803      search its current working directory.  Empty elements can appear
   17804      at the beginning or end of a path.  For instance, if the value of
   17805      `CPATH' is `:/special/include', that has the same effect as
   17806      `-I. -I/special/include'.
   17807 
   17808 `DEPENDENCIES_OUTPUT'
   17809      If this variable is set, its value specifies how to output
   17810      dependencies for Make based on the non-system header files
   17811      processed by the compiler.  System header files are ignored in the
   17812      dependency output.
   17813 
   17814      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
   17815      which case the Make rules are written to that file, guessing the
   17816      target name from the source file name.  Or the value can have the
   17817      form `FILE TARGET', in which case the rules are written to file
   17818      FILE using TARGET as the target name.
   17819 
   17820      In other words, this environment variable is equivalent to
   17821      combining the options `-MM' and `-MF' (*note Preprocessor
   17822      Options::), with an optional `-MT' switch too.
   17823 
   17824 `SUNPRO_DEPENDENCIES'
   17825      This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
   17826      except that system header files are not ignored, so it implies
   17827      `-M' rather than `-MM'.  However, the dependence on the main input
   17828      file is omitted.  *Note Preprocessor Options::.
   17829 
   17830 
   17831 File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
   17832 
   17833 3.20 Using Precompiled Headers
   17834 ==============================
   17835 
   17836 Often large projects have many header files that are included in every
   17837 source file.  The time the compiler takes to process these header files
   17838 over and over again can account for nearly all of the time required to
   17839 build the project.  To make builds faster, GCC allows users to
   17840 `precompile' a header file; then, if builds can use the precompiled
   17841 header file they will be much faster.
   17842 
   17843  To create a precompiled header file, simply compile it as you would any
   17844 other file, if necessary using the `-x' option to make the driver treat
   17845 it as a C or C++ header file.  You will probably want to use a tool
   17846 like `make' to keep the precompiled header up-to-date when the headers
   17847 it contains change.
   17848 
   17849  A precompiled header file will be searched for when `#include' is seen
   17850 in the compilation.  As it searches for the included file (*note Search
   17851 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
   17852 each directory just before it looks for the include file in that
   17853 directory.  The name searched for is the name specified in the
   17854 `#include' with `.gch' appended.  If the precompiled header file can't
   17855 be used, it is ignored.
   17856 
   17857  For instance, if you have `#include "all.h"', and you have `all.h.gch'
   17858 in the same directory as `all.h', then the precompiled header file will
   17859 be used if possible, and the original header will be used otherwise.
   17860 
   17861  Alternatively, you might decide to put the precompiled header file in a
   17862 directory and use `-I' to ensure that directory is searched before (or
   17863 instead of) the directory containing the original header.  Then, if you
   17864 want to check that the precompiled header file is always used, you can
   17865 put a file of the same name as the original header in this directory
   17866 containing an `#error' command.
   17867 
   17868  This also works with `-include'.  So yet another way to use
   17869 precompiled headers, good for projects not designed with precompiled
   17870 header files in mind, is to simply take most of the header files used by
   17871 a project, include them from another header file, precompile that header
   17872 file, and `-include' the precompiled header.  If the header files have
   17873 guards against multiple inclusion, they will be skipped because they've
   17874 already been included (in the precompiled header).
   17875 
   17876  If you need to precompile the same header file for different
   17877 languages, targets, or compiler options, you can instead make a
   17878 _directory_ named like `all.h.gch', and put each precompiled header in
   17879 the directory, perhaps using `-o'.  It doesn't matter what you call the
   17880 files in the directory, every precompiled header in the directory will
   17881 be considered.  The first precompiled header encountered in the
   17882 directory that is valid for this compilation will be used; they're
   17883 searched in no particular order.
   17884 
   17885  There are many other possibilities, limited only by your imagination,
   17886 good sense, and the constraints of your build system.
   17887 
   17888  A precompiled header file can be used only when these conditions apply:
   17889 
   17890    * Only one precompiled header can be used in a particular
   17891      compilation.
   17892 
   17893    * A precompiled header can't be used once the first C token is seen.
   17894      You can have preprocessor directives before a precompiled header;
   17895      you can even include a precompiled header from inside another
   17896      header, so long as there are no C tokens before the `#include'.
   17897 
   17898    * The precompiled header file must be produced for the same language
   17899      as the current compilation.  You can't use a C precompiled header
   17900      for a C++ compilation.
   17901 
   17902    * The precompiled header file must have been produced by the same
   17903      compiler binary as the current compilation is using.
   17904 
   17905    * Any macros defined before the precompiled header is included must
   17906      either be defined in the same way as when the precompiled header
   17907      was generated, or must not affect the precompiled header, which
   17908      usually means that they don't appear in the precompiled header at
   17909      all.
   17910 
   17911      The `-D' option is one way to define a macro before a precompiled
   17912      header is included; using a `#define' can also do it.  There are
   17913      also some options that define macros implicitly, like `-O' and
   17914      `-Wdeprecated'; the same rule applies to macros defined this way.
   17915 
   17916    * If debugging information is output when using the precompiled
   17917      header, using `-g' or similar, the same kind of debugging
   17918      information must have been output when building the precompiled
   17919      header.  However, a precompiled header built using `-g' can be
   17920      used in a compilation when no debugging information is being
   17921      output.
   17922 
   17923    * The same `-m' options must generally be used when building and
   17924      using the precompiled header.  *Note Submodel Options::, for any
   17925      cases where this rule is relaxed.
   17926 
   17927    * Each of the following options must be the same when building and
   17928      using the precompiled header:
   17929 
   17930           -fexceptions
   17931 
   17932    * Some other command-line options starting with `-f', `-p', or `-O'
   17933      must be defined in the same way as when the precompiled header was
   17934      generated.  At present, it's not clear which options are safe to
   17935      change and which are not; the safest choice is to use exactly the
   17936      same options when generating and using the precompiled header.
   17937      The following are known to be safe:
   17938 
   17939           -fmessage-length=  -fpreprocessed  -fsched-interblock
   17940           -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
   17941           -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
   17942           -pedantic-errors
   17943 
   17944 
   17945  For all of these except the last, the compiler will automatically
   17946 ignore the precompiled header if the conditions aren't met.  If you
   17947 find an option combination that doesn't work and doesn't cause the
   17948 precompiled header to be ignored, please consider filing a bug report,
   17949 see *note Bugs::.
   17950 
   17951  If you do use differing options when generating and using the
   17952 precompiled header, the actual behavior will be a mixture of the
   17953 behavior for the options.  For instance, if you use `-g' to generate
   17954 the precompiled header but not when using it, you may or may not get
   17955 debugging information for routines in the precompiled header.
   17956 
   17957 
   17958 File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
   17959 
   17960 4 C Implementation-defined behavior
   17961 ***********************************
   17962 
   17963 A conforming implementation of ISO C is required to document its choice
   17964 of behavior in each of the areas that are designated "implementation
   17965 defined".  The following lists all such areas, along with the section
   17966 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
   17967 Some areas are only implementation-defined in one version of the
   17968 standard.
   17969 
   17970  Some choices depend on the externally determined ABI for the platform
   17971 (including standard character encodings) which GCC follows; these are
   17972 listed as "determined by ABI" below.  *Note Binary Compatibility:
   17973 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
   17974 are documented in the preprocessor manual.  *Note
   17975 Implementation-defined behavior: (cpp)Implementation-defined behavior.
   17976 Some choices are made by the library and operating system (or other
   17977 environment when compiling for a freestanding environment); refer to
   17978 their documentation for details.
   17979 
   17980 * Menu:
   17981 
   17982 * Translation implementation::
   17983 * Environment implementation::
   17984 * Identifiers implementation::
   17985 * Characters implementation::
   17986 * Integers implementation::
   17987 * Floating point implementation::
   17988 * Arrays and pointers implementation::
   17989 * Hints implementation::
   17990 * Structures unions enumerations and bit-fields implementation::
   17991 * Qualifiers implementation::
   17992 * Declarators implementation::
   17993 * Statements implementation::
   17994 * Preprocessing directives implementation::
   17995 * Library functions implementation::
   17996 * Architecture implementation::
   17997 * Locale-specific behavior implementation::
   17998 
   17999 
   18000 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
   18001 
   18002 4.1 Translation
   18003 ===============
   18004 
   18005    * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
   18006      5.1.1.3).'
   18007 
   18008      Diagnostics consist of all the output sent to stderr by GCC.
   18009 
   18010    * `Whether each nonempty sequence of white-space characters other
   18011      than new-line is retained or replaced by one space character in
   18012      translation phase 3 (C90 and C99 5.1.1.2).'
   18013 
   18014      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18015      behavior.
   18016 
   18017 
   18018 
   18019 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
   18020 
   18021 4.2 Environment
   18022 ===============
   18023 
   18024 The behavior of most of these points are dependent on the implementation
   18025 of the C library, and are not defined by GCC itself.
   18026 
   18027    * `The mapping between physical source file multibyte characters and
   18028      the source character set in translation phase 1 (C90 and C99
   18029      5.1.1.2).'
   18030 
   18031      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18032      behavior.
   18033 
   18034 
   18035 
   18036 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
   18037 
   18038 4.3 Identifiers
   18039 ===============
   18040 
   18041    * `Which additional multibyte characters may appear in identifiers
   18042      and their correspondence to universal character names (C99 6.4.2).'
   18043 
   18044      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18045      behavior.
   18046 
   18047    * `The number of significant initial characters in an identifier
   18048      (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
   18049 
   18050      For internal names, all characters are significant.  For external
   18051      names, the number of significant characters are defined by the
   18052      linker; for almost all targets, all characters are significant.
   18053 
   18054    * `Whether case distinctions are significant in an identifier with
   18055      external linkage (C90 6.1.2).'
   18056 
   18057      This is a property of the linker.  C99 requires that case
   18058      distinctions are always significant in identifiers with external
   18059      linkage and systems without this property are not supported by GCC.
   18060 
   18061 
   18062 
   18063 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
   18064 
   18065 4.4 Characters
   18066 ==============
   18067 
   18068    * `The number of bits in a byte (C90 3.4, C99 3.6).'
   18069 
   18070      Determined by ABI.
   18071 
   18072    * `The values of the members of the execution character set (C90 and
   18073      C99 5.2.1).'
   18074 
   18075      Determined by ABI.
   18076 
   18077    * `The unique value of the member of the execution character set
   18078      produced for each of the standard alphabetic escape sequences (C90
   18079      and C99 5.2.2).'
   18080 
   18081      Determined by ABI.
   18082 
   18083    * `The value of a `char' object into which has been stored any
   18084      character other than a member of the basic execution character set
   18085      (C90 6.1.2.5, C99 6.2.5).'
   18086 
   18087      Determined by ABI.
   18088 
   18089    * `Which of `signed char' or `unsigned char' has the same range,
   18090      representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
   18091      6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
   18092 
   18093      Determined by ABI.  The options `-funsigned-char' and
   18094      `-fsigned-char' change the default.  *Note Options Controlling C
   18095      Dialect: C Dialect Options.
   18096 
   18097    * `The mapping of members of the source character set (in character
   18098      constants and string literals) to members of the execution
   18099      character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
   18100 
   18101      Determined by ABI.
   18102 
   18103    * `The value of an integer character constant containing more than
   18104      one character or containing a character or escape sequence that
   18105      does not map to a single-byte execution character (C90 6.1.3.4,
   18106      C99 6.4.4.4).'
   18107 
   18108      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18109      behavior.
   18110 
   18111    * `The value of a wide character constant containing more than one
   18112      multibyte character, or containing a multibyte character or escape
   18113      sequence not represented in the extended execution character set
   18114      (C90 6.1.3.4, C99 6.4.4.4).'
   18115 
   18116      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18117      behavior.
   18118 
   18119    * `The current locale used to convert a wide character constant
   18120      consisting of a single multibyte character that maps to a member
   18121      of the extended execution character set into a corresponding wide
   18122      character code (C90 6.1.3.4, C99 6.4.4.4).'
   18123 
   18124      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18125      behavior.
   18126 
   18127    * `The current locale used to convert a wide string literal into
   18128      corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
   18129 
   18130      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18131      behavior.
   18132 
   18133    * `The value of a string literal containing a multibyte character or
   18134      escape sequence not represented in the execution character set
   18135      (C90 6.1.4, C99 6.4.5).'
   18136 
   18137      *Note Implementation-defined behavior: (cpp)Implementation-defined
   18138      behavior.
   18139 
   18140 
   18141 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
   18142 
   18143 4.5 Integers
   18144 ============
   18145 
   18146    * `Any extended integer types that exist in the implementation (C99
   18147      6.2.5).'
   18148 
   18149      GCC does not support any extended integer types.
   18150 
   18151    * `Whether signed integer types are represented using sign and
   18152      magnitude, two's complement, or one's complement, and whether the
   18153      extraordinary value is a trap representation or an ordinary value
   18154      (C99 6.2.6.2).'
   18155 
   18156      GCC supports only two's complement integer types, and all bit
   18157      patterns are ordinary values.
   18158 
   18159    * `The rank of any extended integer type relative to another extended
   18160      integer type with the same precision (C99 6.3.1.1).'
   18161 
   18162      GCC does not support any extended integer types.
   18163 
   18164    * `The result of, or the signal raised by, converting an integer to a
   18165      signed integer type when the value cannot be represented in an
   18166      object of that type (C90 6.2.1.2, C99 6.3.1.3).'
   18167 
   18168      For conversion to a type of width N, the value is reduced modulo
   18169      2^N to be within range of the type; no signal is raised.
   18170 
   18171    * `The results of some bitwise operations on signed integers (C90
   18172      6.3, C99 6.5).'
   18173 
   18174      Bitwise operators act on the representation of the value including
   18175      both the sign and value bits, where the sign bit is considered
   18176      immediately above the highest-value value bit.  Signed `>>' acts
   18177      on negative numbers by sign extension.
   18178 
   18179      GCC does not use the latitude given in C99 only to treat certain
   18180      aspects of signed `<<' as undefined, but this is subject to change.
   18181 
   18182    * `The sign of the remainder on integer division (C90 6.3.5).'
   18183 
   18184      GCC always follows the C99 requirement that the result of division
   18185      is truncated towards zero.
   18186 
   18187 
   18188 
   18189 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
   18190 
   18191 4.6 Floating point
   18192 ==================
   18193 
   18194    * `The accuracy of the floating-point operations and of the library
   18195      functions in `<math.h>' and `<complex.h>' that return
   18196      floating-point results (C90 and C99 5.2.4.2.2).'
   18197 
   18198      The accuracy is unknown.
   18199 
   18200    * `The rounding behaviors characterized by non-standard values of
   18201      `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
   18202 
   18203      GCC does not use such values.
   18204 
   18205    * `The evaluation methods characterized by non-standard negative
   18206      values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
   18207 
   18208      GCC does not use such values.
   18209 
   18210    * `The direction of rounding when an integer is converted to a
   18211      floating-point number that cannot exactly represent the original
   18212      value (C90 6.2.1.3, C99 6.3.1.4).'
   18213 
   18214      C99 Annex F is followed.
   18215 
   18216    * `The direction of rounding when a floating-point number is
   18217      converted to a narrower floating-point number (C90 6.2.1.4, C99
   18218      6.3.1.5).'
   18219 
   18220      C99 Annex F is followed.
   18221 
   18222    * `How the nearest representable value or the larger or smaller
   18223      representable value immediately adjacent to the nearest
   18224      representable value is chosen for certain floating constants (C90
   18225      6.1.3.1, C99 6.4.4.2).'
   18226 
   18227      C99 Annex F is followed.
   18228 
   18229    * `Whether and how floating expressions are contracted when not
   18230      disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
   18231 
   18232      Expressions are currently only contracted if
   18233      `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
   18234      subject to change.
   18235 
   18236    * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
   18237 
   18238      This pragma is not implemented, but the default is to "off" unless
   18239      `-frounding-math' is used in which case it is "on".
   18240 
   18241    * `Additional floating-point exceptions, rounding modes,
   18242      environments, and classifications, and their macro names (C99 7.6,
   18243      C99 7.12).'
   18244 
   18245      This is dependent on the implementation of the C library, and is
   18246      not defined by GCC itself.
   18247 
   18248    * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
   18249 
   18250      This pragma is not implemented.  Expressions are currently only
   18251      contracted if `-funsafe-math-optimizations' or `-ffast-math' are
   18252      used.  This is subject to change.
   18253 
   18254    * `Whether the "inexact" floating-point exception can be raised when
   18255      the rounded result actually does equal the mathematical result in
   18256      an IEC 60559 conformant implementation (C99 F.9).'
   18257 
   18258      This is dependent on the implementation of the C library, and is
   18259      not defined by GCC itself.
   18260 
   18261    * `Whether the "underflow" (and "inexact") floating-point exception
   18262      can be raised when a result is tiny but not inexact in an IEC
   18263      60559 conformant implementation (C99 F.9).'
   18264 
   18265      This is dependent on the implementation of the C library, and is
   18266      not defined by GCC itself.
   18267 
   18268 
   18269 
   18270 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
   18271 
   18272 4.7 Arrays and pointers
   18273 =======================
   18274 
   18275    * `The result of converting a pointer to an integer or vice versa
   18276      (C90 6.3.4, C99 6.3.2.3).'
   18277 
   18278      A cast from pointer to integer discards most-significant bits if
   18279      the pointer representation is larger than the integer type,
   18280      sign-extends(1) if the pointer representation is smaller than the
   18281      integer type, otherwise the bits are unchanged.
   18282 
   18283      A cast from integer to pointer discards most-significant bits if
   18284      the pointer representation is smaller than the integer type,
   18285      extends according to the signedness of the integer type if the
   18286      pointer representation is larger than the integer type, otherwise
   18287      the bits are unchanged.
   18288 
   18289      When casting from pointer to integer and back again, the resulting
   18290      pointer must reference the same object as the original pointer,
   18291      otherwise the behavior is undefined.  That is, one may not use
   18292      integer arithmetic to avoid the undefined behavior of pointer
   18293      arithmetic as proscribed in C99 6.5.6/8.
   18294 
   18295    * `The size of the result of subtracting two pointers to elements of
   18296      the same array (C90 6.3.6, C99 6.5.6).'
   18297 
   18298      The value is as specified in the standard and the type is
   18299      determined by the ABI.
   18300 
   18301 
   18302  ---------- Footnotes ----------
   18303 
   18304  (1) Future versions of GCC may zero-extend, or use a target-defined
   18305 `ptr_extend' pattern.  Do not rely on sign extension.
   18306 
   18307 
   18308 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
   18309 
   18310 4.8 Hints
   18311 =========
   18312 
   18313    * `The extent to which suggestions made by using the `register'
   18314      storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
   18315 
   18316      The `register' specifier affects code generation only in these
   18317      ways:
   18318 
   18319         * When used as part of the register variable extension, see
   18320           *note Explicit Reg Vars::.
   18321 
   18322         * When `-O0' is in use, the compiler allocates distinct stack
   18323           memory for all variables that do not have the `register'
   18324           storage-class specifier; if `register' is specified, the
   18325           variable may have a shorter lifespan than the code would
   18326           indicate and may never be placed in memory.
   18327 
   18328         * On some rare x86 targets, `setjmp' doesn't save the registers
   18329           in all circumstances.  In those cases, GCC doesn't allocate
   18330           any variables in registers unless they are marked `register'.
   18331 
   18332 
   18333    * `The extent to which suggestions made by using the inline function
   18334      specifier are effective (C99 6.7.4).'
   18335 
   18336      GCC will not inline any functions if the `-fno-inline' option is
   18337      used or if `-O0' is used.  Otherwise, GCC may still be unable to
   18338      inline a function for many reasons; the `-Winline' option may be
   18339      used to determine if a function has not been inlined and why not.
   18340 
   18341 
   18342 
   18343 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
   18344 
   18345 4.9 Structures, unions, enumerations, and bit-fields
   18346 ====================================================
   18347 
   18348    * `A member of a union object is accessed using a member of a
   18349      different type (C90 6.3.2.3).'
   18350 
   18351      The relevant bytes of the representation of the object are treated
   18352      as an object of the type used for the access.  *Note
   18353      Type-punning::.  This may be a trap representation.
   18354 
   18355    * `Whether a "plain" `int' bit-field is treated as a `signed int'
   18356      bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
   18357      6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
   18358 
   18359      By default it is treated as `signed int' but this may be changed
   18360      by the `-funsigned-bitfields' option.
   18361 
   18362    * `Allowable bit-field types other than `_Bool', `signed int', and
   18363      `unsigned int' (C99 6.7.2.1).'
   18364 
   18365      No other types are permitted in strictly conforming mode.
   18366 
   18367    * `Whether a bit-field can straddle a storage-unit boundary (C90
   18368      6.5.2.1, C99 6.7.2.1).'
   18369 
   18370      Determined by ABI.
   18371 
   18372    * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
   18373      C99 6.7.2.1).'
   18374 
   18375      Determined by ABI.
   18376 
   18377    * `The alignment of non-bit-field members of structures (C90
   18378      6.5.2.1, C99 6.7.2.1).'
   18379 
   18380      Determined by ABI.
   18381 
   18382    * `The integer type compatible with each enumerated type (C90
   18383      6.5.2.2, C99 6.7.2.2).'
   18384 
   18385      Normally, the type is `unsigned int' if there are no negative
   18386      values in the enumeration, otherwise `int'.  If `-fshort-enums' is
   18387      specified, then if there are negative values it is the first of
   18388      `signed char', `short' and `int' that can represent all the
   18389      values, otherwise it is the first of `unsigned char', `unsigned
   18390      short' and `unsigned int' that can represent all the values.
   18391 
   18392      On some targets, `-fshort-enums' is the default; this is
   18393      determined by the ABI.
   18394 
   18395 
   18396 
   18397 File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
   18398 
   18399 4.10 Qualifiers
   18400 ===============
   18401 
   18402    * `What constitutes an access to an object that has
   18403      volatile-qualified type (C90 6.5.3, C99 6.7.3).'
   18404 
   18405      Such an object is normally accessed by pointers and used for
   18406      accessing hardware.  In most expressions, it is intuitively
   18407      obvious what is a read and what is a write.  For example
   18408 
   18409           volatile int *dst = SOMEVALUE;
   18410           volatile int *src = SOMEOTHERVALUE;
   18411           *dst = *src;
   18412 
   18413      will cause a read of the volatile object pointed to by SRC and
   18414      store the value into the volatile object pointed to by DST.  There
   18415      is no guarantee that these reads and writes are atomic, especially
   18416      for objects larger than `int'.
   18417 
   18418      However, if the volatile storage is not being modified, and the
   18419      value of the volatile storage is not used, then the situation is
   18420      less obvious.  For example
   18421 
   18422           volatile int *src = SOMEVALUE;
   18423           *src;
   18424 
   18425      According to the C standard, such an expression is an rvalue whose
   18426      type is the unqualified version of its original type, i.e. `int'.
   18427      Whether GCC interprets this as a read of the volatile object being
   18428      pointed to or only as a request to evaluate the expression for its
   18429      side-effects depends on this type.
   18430 
   18431      If it is a scalar type, or on most targets an aggregate type whose
   18432      only member object is of a scalar type, or a union type whose
   18433      member objects are of scalar types, the expression is interpreted
   18434      by GCC as a read of the volatile object; in the other cases, the
   18435      expression is only evaluated for its side-effects.
   18436 
   18437 
   18438 
   18439 File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
   18440 
   18441 4.11 Declarators
   18442 ================
   18443 
   18444    * `The maximum number of declarators that may modify an arithmetic,
   18445      structure or union type (C90 6.5.4).'
   18446 
   18447      GCC is only limited by available memory.
   18448 
   18449 
   18450 
   18451 File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
   18452 
   18453 4.12 Statements
   18454 ===============
   18455 
   18456    * `The maximum number of `case' values in a `switch' statement (C90
   18457      6.6.4.2).'
   18458 
   18459      GCC is only limited by available memory.
   18460 
   18461 
   18462 
   18463 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
   18464 
   18465 4.13 Preprocessing directives
   18466 =============================
   18467 
   18468 *Note Implementation-defined behavior: (cpp)Implementation-defined
   18469 behavior, for details of these aspects of implementation-defined
   18470 behavior.
   18471 
   18472    * `How sequences in both forms of header names are mapped to headers
   18473      or external source file names (C90 6.1.7, C99 6.4.7).'
   18474 
   18475    * `Whether the value of a character constant in a constant expression
   18476      that controls conditional inclusion matches the value of the same
   18477      character constant in the execution character set (C90 6.8.1, C99
   18478      6.10.1).'
   18479 
   18480    * `Whether the value of a single-character character constant in a
   18481      constant expression that controls conditional inclusion may have a
   18482      negative value (C90 6.8.1, C99 6.10.1).'
   18483 
   18484    * `The places that are searched for an included `<>' delimited
   18485      header, and how the places are specified or the header is
   18486      identified (C90 6.8.2, C99 6.10.2).'
   18487 
   18488    * `How the named source file is searched for in an included `""'
   18489      delimited header (C90 6.8.2, C99 6.10.2).'
   18490 
   18491    * `The method by which preprocessing tokens (possibly resulting from
   18492      macro expansion) in a `#include' directive are combined into a
   18493      header name (C90 6.8.2, C99 6.10.2).'
   18494 
   18495    * `The nesting limit for `#include' processing (C90 6.8.2, C99
   18496      6.10.2).'
   18497 
   18498    * `Whether the `#' operator inserts a `\' character before the `\'
   18499      character that begins a universal character name in a character
   18500      constant or string literal (C99 6.10.3.2).'
   18501 
   18502    * `The behavior on each recognized non-`STDC #pragma' directive (C90
   18503      6.8.6, C99 6.10.6).'
   18504 
   18505      *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
   18506      GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
   18507      details of target-specific pragmas.
   18508 
   18509    * `The definitions for `__DATE__' and `__TIME__' when respectively,
   18510      the date and time of translation are not available (C90 6.8.8, C99
   18511      6.10.8).'
   18512 
   18513 
   18514 
   18515 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
   18516 
   18517 4.14 Library functions
   18518 ======================
   18519 
   18520 The behavior of most of these points are dependent on the implementation
   18521 of the C library, and are not defined by GCC itself.
   18522 
   18523    * `The null pointer constant to which the macro `NULL' expands (C90
   18524      7.1.6, C99 7.17).'
   18525 
   18526      In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
   18527      provide the other headers which define `NULL' and some library
   18528      implementations may use other definitions in those headers.
   18529 
   18530 
   18531 
   18532 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
   18533 
   18534 4.15 Architecture
   18535 =================
   18536 
   18537    * `The values or expressions assigned to the macros specified in the
   18538      headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
   18539      5.2.4.2, C99 7.18.2, C99 7.18.3).'
   18540 
   18541      Determined by ABI.
   18542 
   18543    * `The number, order, and encoding of bytes in any object (when not
   18544      explicitly specified in this International Standard) (C99
   18545      6.2.6.1).'
   18546 
   18547      Determined by ABI.
   18548 
   18549    * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
   18550      C99 6.5.3.4).'
   18551 
   18552      Determined by ABI.
   18553 
   18554 
   18555 
   18556 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
   18557 
   18558 4.16 Locale-specific behavior
   18559 =============================
   18560 
   18561 The behavior of these points are dependent on the implementation of the
   18562 C library, and are not defined by GCC itself.
   18563 
   18564 
   18565 File: gcc.info,  Node: C++ Implementation,  Next: C++ Extensions,  Prev: C Extensions,  Up: Top
   18566 
   18567 5 C++ Implementation-defined behavior
   18568 *************************************
   18569 
   18570 A conforming implementation of ISO C++ is required to document its
   18571 choice of behavior in each of the areas that are designated
   18572 "implementation defined".  The following lists all such areas, along
   18573 with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC
   18574 14822:2003 standards.  Some areas are only implementation-defined in
   18575 one version of the standard.
   18576 
   18577  Some choices depend on the externally determined ABI for the platform
   18578 (including standard character encodings) which GCC follows; these are
   18579 listed as "determined by ABI" below.  *Note Binary Compatibility:
   18580 Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
   18581 are documented in the preprocessor manual.  *Note
   18582 Implementation-defined behavior: (cpp)Implementation-defined behavior.
   18583 Some choices are documented in the corresponding document for the C
   18584 language.  *Note C Implementation::.  Some choices are made by the
   18585 library and operating system (or other environment when compiling for a
   18586 freestanding environment); refer to their documentation for details.
   18587 
   18588 * Menu:
   18589 
   18590 * Conditionally-supported behavior::
   18591 * Exception handling::
   18592 
   18593 
   18594 File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
   18595 
   18596 5.1 Conditionally-supported behavior
   18597 ====================================
   18598 
   18599 `Each implementation shall include documentation that identifies all
   18600 conditionally-supported constructs that it does not support (C++0x
   18601 1.4).'
   18602 
   18603    * `Whether an argument of class type with a non-trivial copy
   18604      constructor or destructor can be passed to ... (C++0x 5.2.2).'
   18605 
   18606      Such argument passing is not supported.
   18607 
   18608 
   18609 
   18610 File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
   18611 
   18612 5.2 Exception handling
   18613 ======================
   18614 
   18615    * `In the situation where no matching handler is found, it is
   18616      implementation-defined whether or not the stack is unwound before
   18617      std::terminate() is called (C++98 15.5.1).'
   18618 
   18619      The stack is not unwound before std::terminate is called.
   18620 
   18621 
   18622 
   18623 File: gcc.info,  Node: C Extensions,  Next: C++ Implementation,  Prev: C Implementation,  Up: Top
   18624 
   18625 6 Extensions to the C Language Family
   18626 *************************************
   18627 
   18628 GNU C provides several language features not found in ISO standard C.
   18629 (The `-pedantic' option directs GCC to print a warning message if any
   18630 of these features is used.)  To test for the availability of these
   18631 features in conditional compilation, check for a predefined macro
   18632 `__GNUC__', which is always defined under GCC.
   18633 
   18634  These extensions are available in C and Objective-C.  Most of them are
   18635 also available in C++.  *Note Extensions to the C++ Language: C++
   18636 Extensions, for extensions that apply _only_ to C++.
   18637 
   18638  Some features that are in ISO C99 but not C90 or C++ are also, as
   18639 extensions, accepted by GCC in C90 mode and in C++.
   18640 
   18641 * Menu:
   18642 
   18643 * Statement Exprs::     Putting statements and declarations inside expressions.
   18644 * Local Labels::        Labels local to a block.
   18645 * Labels as Values::    Getting pointers to labels, and computed gotos.
   18646 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
   18647 * Constructing Calls::  Dispatching a call to another function.
   18648 * Typeof::              `typeof': referring to the type of an expression.
   18649 * Conditionals::        Omitting the middle operand of a `?:' expression.
   18650 * Long Long::           Double-word integers---`long long int'.
   18651 * __int128::			128-bit integers---`__int128'.
   18652 * Complex::             Data types for complex numbers.
   18653 * Floating Types::      Additional Floating Types.
   18654 * Half-Precision::      Half-Precision Floating Point.
   18655 * Decimal Float::       Decimal Floating Types.
   18656 * Hex Floats::          Hexadecimal floating-point constants.
   18657 * Fixed-Point::         Fixed-Point Types.
   18658 * Named Address Spaces::Named address spaces.
   18659 * Zero Length::         Zero-length arrays.
   18660 * Variable Length::     Arrays whose length is computed at run time.
   18661 * Empty Structures::    Structures with no members.
   18662 * Variadic Macros::     Macros with a variable number of arguments.
   18663 * Escaped Newlines::    Slightly looser rules for escaped newlines.
   18664 * Subscripting::        Any array can be subscripted, even if not an lvalue.
   18665 * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
   18666 * Initializers::        Non-constant initializers.
   18667 * Compound Literals::   Compound literals give structures, unions
   18668                         or arrays as values.
   18669 * Designated Inits::    Labeling elements of initializers.
   18670 * Cast to Union::       Casting to union type from any member of the union.
   18671 * Case Ranges::         `case 1 ... 9' and such.
   18672 * Mixed Declarations::  Mixing declarations and code.
   18673 * Function Attributes:: Declaring that functions have no side effects,
   18674                         or that they can never return.
   18675 * Attribute Syntax::    Formal syntax for attributes.
   18676 * Function Prototypes:: Prototype declarations and old-style definitions.
   18677 * C++ Comments::        C++ comments are recognized.
   18678 * Dollar Signs::        Dollar sign is allowed in identifiers.
   18679 * Character Escapes::   `\e' stands for the character <ESC>.
   18680 * Variable Attributes:: Specifying attributes of variables.
   18681 * Type Attributes::     Specifying attributes of types.
   18682 * Alignment::           Inquiring about the alignment of a type or variable.
   18683 * Inline::              Defining inline functions (as fast as macros).
   18684 * Volatiles::           What constitutes an access to a volatile object.
   18685 * Extended Asm::        Assembler instructions with C expressions as operands.
   18686                         (With them you can define ``built-in'' functions.)
   18687 * Constraints::         Constraints for asm operands
   18688 * Asm Labels::          Specifying the assembler name to use for a C symbol.
   18689 * Explicit Reg Vars::   Defining variables residing in specified registers.
   18690 * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
   18691 * Incomplete Enums::    `enum foo;', with details to follow.
   18692 * Function Names::      Printable strings which are the name of the current
   18693                         function.
   18694 * Return Address::      Getting the return or frame address of a function.
   18695 * Vector Extensions::   Using vector instructions through built-in functions.
   18696 * Offsetof::            Special syntax for implementing `offsetof'.
   18697 * Atomic Builtins::     Built-in functions for atomic memory access.
   18698 * Object Size Checking:: Built-in functions for limited buffer overflow
   18699                         checking.
   18700 * Other Builtins::      Other built-in functions.
   18701 * Target Builtins::     Built-in functions specific to particular targets.
   18702 * Target Format Checks:: Format checks specific to particular targets.
   18703 * Pragmas::             Pragmas accepted by GCC.
   18704 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
   18705 * Thread-Local::        Per-thread variables.
   18706 * Binary constants::    Binary constants using the `0b' prefix.
   18707 
   18708 
   18709 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
   18710 
   18711 6.1 Statements and Declarations in Expressions
   18712 ==============================================
   18713 
   18714 A compound statement enclosed in parentheses may appear as an expression
   18715 in GNU C.  This allows you to use loops, switches, and local variables
   18716 within an expression.
   18717 
   18718  Recall that a compound statement is a sequence of statements surrounded
   18719 by braces; in this construct, parentheses go around the braces.  For
   18720 example:
   18721 
   18722      ({ int y = foo (); int z;
   18723         if (y > 0) z = y;
   18724         else z = - y;
   18725         z; })
   18726 
   18727 is a valid (though slightly more complex than necessary) expression for
   18728 the absolute value of `foo ()'.
   18729 
   18730  The last thing in the compound statement should be an expression
   18731 followed by a semicolon; the value of this subexpression serves as the
   18732 value of the entire construct.  (If you use some other kind of statement
   18733 last within the braces, the construct has type `void', and thus
   18734 effectively no value.)
   18735 
   18736  This feature is especially useful in making macro definitions "safe"
   18737 (so that they evaluate each operand exactly once).  For example, the
   18738 "maximum" function is commonly defined as a macro in standard C as
   18739 follows:
   18740 
   18741      #define max(a,b) ((a) > (b) ? (a) : (b))
   18742 
   18743 But this definition computes either A or B twice, with bad results if
   18744 the operand has side effects.  In GNU C, if you know the type of the
   18745 operands (here taken as `int'), you can define the macro safely as
   18746 follows:
   18747 
   18748      #define maxint(a,b) \
   18749        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
   18750 
   18751  Embedded statements are not allowed in constant expressions, such as
   18752 the value of an enumeration constant, the width of a bit-field, or the
   18753 initial value of a static variable.
   18754 
   18755  If you don't know the type of the operand, you can still do this, but
   18756 you must use `typeof' (*note Typeof::).
   18757 
   18758  In G++, the result value of a statement expression undergoes array and
   18759 function pointer decay, and is returned by value to the enclosing
   18760 expression.  For instance, if `A' is a class, then
   18761 
   18762              A a;
   18763 
   18764              ({a;}).Foo ()
   18765 
   18766 will construct a temporary `A' object to hold the result of the
   18767 statement expression, and that will be used to invoke `Foo'.  Therefore
   18768 the `this' pointer observed by `Foo' will not be the address of `a'.
   18769 
   18770  Any temporaries created within a statement within a statement
   18771 expression will be destroyed at the statement's end.  This makes
   18772 statement expressions inside macros slightly different from function
   18773 calls.  In the latter case temporaries introduced during argument
   18774 evaluation will be destroyed at the end of the statement that includes
   18775 the function call.  In the statement expression case they will be
   18776 destroyed during the statement expression.  For instance,
   18777 
   18778      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
   18779      template<typename T> T function(T a) { T b = a; return b + 3; }
   18780 
   18781      void foo ()
   18782      {
   18783        macro (X ());
   18784        function (X ());
   18785      }
   18786 
   18787 will have different places where temporaries are destroyed.  For the
   18788 `macro' case, the temporary `X' will be destroyed just after the
   18789 initialization of `b'.  In the `function' case that temporary will be
   18790 destroyed when the function returns.
   18791 
   18792  These considerations mean that it is probably a bad idea to use
   18793 statement-expressions of this form in header files that are designed to
   18794 work with C++.  (Note that some versions of the GNU C Library contained
   18795 header files using statement-expression that lead to precisely this
   18796 bug.)
   18797 
   18798  Jumping into a statement expression with `goto' or using a `switch'
   18799 statement outside the statement expression with a `case' or `default'
   18800 label inside the statement expression is not permitted.  Jumping into a
   18801 statement expression with a computed `goto' (*note Labels as Values::)
   18802 yields undefined behavior.  Jumping out of a statement expression is
   18803 permitted, but if the statement expression is part of a larger
   18804 expression then it is unspecified which other subexpressions of that
   18805 expression have been evaluated except where the language definition
   18806 requires certain subexpressions to be evaluated before or after the
   18807 statement expression.  In any case, as with a function call the
   18808 evaluation of a statement expression is not interleaved with the
   18809 evaluation of other parts of the containing expression.  For example,
   18810 
   18811        foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
   18812 
   18813 will call `foo' and `bar1' and will not call `baz' but may or may not
   18814 call `bar2'.  If `bar2' is called, it will be called after `foo' and
   18815 before `bar1'
   18816 
   18817 
   18818 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
   18819 
   18820 6.2 Locally Declared Labels
   18821 ===========================
   18822 
   18823 GCC allows you to declare "local labels" in any nested block scope.  A
   18824 local label is just like an ordinary label, but you can only reference
   18825 it (with a `goto' statement, or by taking its address) within the block
   18826 in which it was declared.
   18827 
   18828  A local label declaration looks like this:
   18829 
   18830      __label__ LABEL;
   18831 
   18832 or
   18833 
   18834      __label__ LABEL1, LABEL2, /* ... */;
   18835 
   18836  Local label declarations must come at the beginning of the block,
   18837 before any ordinary declarations or statements.
   18838 
   18839  The label declaration defines the label _name_, but does not define
   18840 the label itself.  You must do this in the usual way, with `LABEL:',
   18841 within the statements of the statement expression.
   18842 
   18843  The local label feature is useful for complex macros.  If a macro
   18844 contains nested loops, a `goto' can be useful for breaking out of them.
   18845 However, an ordinary label whose scope is the whole function cannot be
   18846 used: if the macro can be expanded several times in one function, the
   18847 label will be multiply defined in that function.  A local label avoids
   18848 this problem.  For example:
   18849 
   18850      #define SEARCH(value, array, target)              \
   18851      do {                                              \
   18852        __label__ found;                                \
   18853        typeof (target) _SEARCH_target = (target);      \
   18854        typeof (*(array)) *_SEARCH_array = (array);     \
   18855        int i, j;                                       \
   18856        int value;                                      \
   18857        for (i = 0; i < max; i++)                       \
   18858          for (j = 0; j < max; j++)                     \
   18859            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   18860              { (value) = i; goto found; }              \
   18861        (value) = -1;                                   \
   18862       found:;                                          \
   18863      } while (0)
   18864 
   18865  This could also be written using a statement-expression:
   18866 
   18867      #define SEARCH(array, target)                     \
   18868      ({                                                \
   18869        __label__ found;                                \
   18870        typeof (target) _SEARCH_target = (target);      \
   18871        typeof (*(array)) *_SEARCH_array = (array);     \
   18872        int i, j;                                       \
   18873        int value;                                      \
   18874        for (i = 0; i < max; i++)                       \
   18875          for (j = 0; j < max; j++)                     \
   18876            if (_SEARCH_array[i][j] == _SEARCH_target)  \
   18877              { value = i; goto found; }                \
   18878        value = -1;                                     \
   18879       found:                                           \
   18880        value;                                          \
   18881      })
   18882 
   18883  Local label declarations also make the labels they declare visible to
   18884 nested functions, if there are any.  *Note Nested Functions::, for
   18885 details.
   18886 
   18887 
   18888 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
   18889 
   18890 6.3 Labels as Values
   18891 ====================
   18892 
   18893 You can get the address of a label defined in the current function (or
   18894 a containing function) with the unary operator `&&'.  The value has
   18895 type `void *'.  This value is a constant and can be used wherever a
   18896 constant of that type is valid.  For example:
   18897 
   18898      void *ptr;
   18899      /* ... */
   18900      ptr = &&foo;
   18901 
   18902  To use these values, you need to be able to jump to one.  This is done
   18903 with the computed goto statement(1), `goto *EXP;'.  For example,
   18904 
   18905      goto *ptr;
   18906 
   18907 Any expression of type `void *' is allowed.
   18908 
   18909  One way of using these constants is in initializing a static array that
   18910 will serve as a jump table:
   18911 
   18912      static void *array[] = { &&foo, &&bar, &&hack };
   18913 
   18914  Then you can select a label with indexing, like this:
   18915 
   18916      goto *array[i];
   18917 
   18918 Note that this does not check whether the subscript is in bounds--array
   18919 indexing in C never does that.
   18920 
   18921  Such an array of label values serves a purpose much like that of the
   18922 `switch' statement.  The `switch' statement is cleaner, so use that
   18923 rather than an array unless the problem does not fit a `switch'
   18924 statement very well.
   18925 
   18926  Another use of label values is in an interpreter for threaded code.
   18927 The labels within the interpreter function can be stored in the
   18928 threaded code for super-fast dispatching.
   18929 
   18930  You may not use this mechanism to jump to code in a different function.
   18931 If you do that, totally unpredictable things will happen.  The best way
   18932 to avoid this is to store the label address only in automatic variables
   18933 and never pass it as an argument.
   18934 
   18935  An alternate way to write the above example is
   18936 
   18937      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
   18938                                   &&hack - &&foo };
   18939      goto *(&&foo + array[i]);
   18940 
   18941 This is more friendly to code living in shared libraries, as it reduces
   18942 the number of dynamic relocations that are needed, and by consequence,
   18943 allows the data to be read-only.
   18944 
   18945  The `&&foo' expressions for the same label might have different values
   18946 if the containing function is inlined or cloned.  If a program relies
   18947 on them being always the same,
   18948 `__attribute__((__noinline__,__noclone__))' should be used to prevent
   18949 inlining and cloning.  If `&&foo' is used in a static variable
   18950 initializer, inlining and cloning is forbidden.
   18951 
   18952  ---------- Footnotes ----------
   18953 
   18954  (1) The analogous feature in Fortran is called an assigned goto, but
   18955 that name seems inappropriate in C, where one can do more than simply
   18956 store label addresses in label variables.
   18957 
   18958 
   18959 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
   18960 
   18961 6.4 Nested Functions
   18962 ====================
   18963 
   18964 A "nested function" is a function defined inside another function.
   18965 (Nested functions are not supported for GNU C++.)  The nested function's
   18966 name is local to the block where it is defined.  For example, here we
   18967 define a nested function named `square', and call it twice:
   18968 
   18969      foo (double a, double b)
   18970      {
   18971        double square (double z) { return z * z; }
   18972 
   18973        return square (a) + square (b);
   18974      }
   18975 
   18976  The nested function can access all the variables of the containing
   18977 function that are visible at the point of its definition.  This is
   18978 called "lexical scoping".  For example, here we show a nested function
   18979 which uses an inherited variable named `offset':
   18980 
   18981      bar (int *array, int offset, int size)
   18982      {
   18983        int access (int *array, int index)
   18984          { return array[index + offset]; }
   18985        int i;
   18986        /* ... */
   18987        for (i = 0; i < size; i++)
   18988          /* ... */ access (array, i) /* ... */
   18989      }
   18990 
   18991  Nested function definitions are permitted within functions in the
   18992 places where variable definitions are allowed; that is, in any block,
   18993 mixed with the other declarations and statements in the block.
   18994 
   18995  It is possible to call the nested function from outside the scope of
   18996 its name by storing its address or passing the address to another
   18997 function:
   18998 
   18999      hack (int *array, int size)
   19000      {
   19001        void store (int index, int value)
   19002          { array[index] = value; }
   19003 
   19004        intermediate (store, size);
   19005      }
   19006 
   19007  Here, the function `intermediate' receives the address of `store' as
   19008 an argument.  If `intermediate' calls `store', the arguments given to
   19009 `store' are used to store into `array'.  But this technique works only
   19010 so long as the containing function (`hack', in this example) does not
   19011 exit.
   19012 
   19013  If you try to call the nested function through its address after the
   19014 containing function has exited, all hell will break loose.  If you try
   19015 to call it after a containing scope level has exited, and if it refers
   19016 to some of the variables that are no longer in scope, you may be lucky,
   19017 but it's not wise to take the risk.  If, however, the nested function
   19018 does not refer to anything that has gone out of scope, you should be
   19019 safe.
   19020 
   19021  GCC implements taking the address of a nested function using a
   19022 technique called "trampolines".  This technique was described in
   19023 `Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
   19024 Proceedings, October 17-21, 1988).
   19025 
   19026  A nested function can jump to a label inherited from a containing
   19027 function, provided the label was explicitly declared in the containing
   19028 function (*note Local Labels::).  Such a jump returns instantly to the
   19029 containing function, exiting the nested function which did the `goto'
   19030 and any intermediate functions as well.  Here is an example:
   19031 
   19032      bar (int *array, int offset, int size)
   19033      {
   19034        __label__ failure;
   19035        int access (int *array, int index)
   19036          {
   19037            if (index > size)
   19038              goto failure;
   19039            return array[index + offset];
   19040          }
   19041        int i;
   19042        /* ... */
   19043        for (i = 0; i < size; i++)
   19044          /* ... */ access (array, i) /* ... */
   19045        /* ... */
   19046        return 0;
   19047 
   19048       /* Control comes here from `access'
   19049          if it detects an error.  */
   19050       failure:
   19051        return -1;
   19052      }
   19053 
   19054  A nested function always has no linkage.  Declaring one with `extern'
   19055 or `static' is erroneous.  If you need to declare the nested function
   19056 before its definition, use `auto' (which is otherwise meaningless for
   19057 function declarations).
   19058 
   19059      bar (int *array, int offset, int size)
   19060      {
   19061        __label__ failure;
   19062        auto int access (int *, int);
   19063        /* ... */
   19064        int access (int *array, int index)
   19065          {
   19066            if (index > size)
   19067              goto failure;
   19068            return array[index + offset];
   19069          }
   19070        /* ... */
   19071      }
   19072 
   19073 
   19074 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
   19075 
   19076 6.5 Constructing Function Calls
   19077 ===============================
   19078 
   19079 Using the built-in functions described below, you can record the
   19080 arguments a function received, and call another function with the same
   19081 arguments, without knowing the number or types of the arguments.
   19082 
   19083  You can also record the return value of that function call, and later
   19084 return that value, without knowing what data type the function tried to
   19085 return (as long as your caller expects that data type).
   19086 
   19087  However, these built-in functions may interact badly with some
   19088 sophisticated features or other extensions of the language.  It is,
   19089 therefore, not recommended to use them outside very simple functions
   19090 acting as mere forwarders for their arguments.
   19091 
   19092  -- Built-in Function: void * __builtin_apply_args ()
   19093      This built-in function returns a pointer to data describing how to
   19094      perform a call with the same arguments as were passed to the
   19095      current function.
   19096 
   19097      The function saves the arg pointer register, structure value
   19098      address, and all registers that might be used to pass arguments to
   19099      a function into a block of memory allocated on the stack.  Then it
   19100      returns the address of that block.
   19101 
   19102  -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
   19103           *ARGUMENTS, size_t SIZE)
   19104      This built-in function invokes FUNCTION with a copy of the
   19105      parameters described by ARGUMENTS and SIZE.
   19106 
   19107      The value of ARGUMENTS should be the value returned by
   19108      `__builtin_apply_args'.  The argument SIZE specifies the size of
   19109      the stack argument data, in bytes.
   19110 
   19111      This function returns a pointer to data describing how to return
   19112      whatever value was returned by FUNCTION.  The data is saved in a
   19113      block of memory allocated on the stack.
   19114 
   19115      It is not always simple to compute the proper value for SIZE.  The
   19116      value is used by `__builtin_apply' to compute the amount of data
   19117      that should be pushed on the stack and copied from the incoming
   19118      argument area.
   19119 
   19120  -- Built-in Function: void __builtin_return (void *RESULT)
   19121      This built-in function returns the value described by RESULT from
   19122      the containing function.  You should specify, for RESULT, a value
   19123      returned by `__builtin_apply'.
   19124 
   19125  -- Built-in Function:  __builtin_va_arg_pack ()
   19126      This built-in function represents all anonymous arguments of an
   19127      inline function.  It can be used only in inline functions which
   19128      will be always inlined, never compiled as a separate function,
   19129      such as those using `__attribute__ ((__always_inline__))' or
   19130      `__attribute__ ((__gnu_inline__))' extern inline functions.  It
   19131      must be only passed as last argument to some other function with
   19132      variable arguments.  This is useful for writing small wrapper
   19133      inlines for variable argument functions, when using preprocessor
   19134      macros is undesirable.  For example:
   19135           extern int myprintf (FILE *f, const char *format, ...);
   19136           extern inline __attribute__ ((__gnu_inline__)) int
   19137           myprintf (FILE *f, const char *format, ...)
   19138           {
   19139             int r = fprintf (f, "myprintf: ");
   19140             if (r < 0)
   19141               return r;
   19142             int s = fprintf (f, format, __builtin_va_arg_pack ());
   19143             if (s < 0)
   19144               return s;
   19145             return r + s;
   19146           }
   19147 
   19148  -- Built-in Function: size_t __builtin_va_arg_pack_len ()
   19149      This built-in function returns the number of anonymous arguments of
   19150      an inline function.  It can be used only in inline functions which
   19151      will be always inlined, never compiled as a separate function, such
   19152      as those using `__attribute__ ((__always_inline__))' or
   19153      `__attribute__ ((__gnu_inline__))' extern inline functions.  For
   19154      example following will do link or runtime checking of open
   19155      arguments for optimized code:
   19156           #ifdef __OPTIMIZE__
   19157           extern inline __attribute__((__gnu_inline__)) int
   19158           myopen (const char *path, int oflag, ...)
   19159           {
   19160             if (__builtin_va_arg_pack_len () > 1)
   19161               warn_open_too_many_arguments ();
   19162 
   19163             if (__builtin_constant_p (oflag))
   19164               {
   19165                 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
   19166                   {
   19167                     warn_open_missing_mode ();
   19168                     return __open_2 (path, oflag);
   19169                   }
   19170                 return open (path, oflag, __builtin_va_arg_pack ());
   19171               }
   19172 
   19173             if (__builtin_va_arg_pack_len () < 1)
   19174               return __open_2 (path, oflag);
   19175 
   19176             return open (path, oflag, __builtin_va_arg_pack ());
   19177           }
   19178           #endif
   19179 
   19180 
   19181 File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
   19182 
   19183 6.6 Referring to a Type with `typeof'
   19184 =====================================
   19185 
   19186 Another way to refer to the type of an expression is with `typeof'.
   19187 The syntax of using of this keyword looks like `sizeof', but the
   19188 construct acts semantically like a type name defined with `typedef'.
   19189 
   19190  There are two ways of writing the argument to `typeof': with an
   19191 expression or with a type.  Here is an example with an expression:
   19192 
   19193      typeof (x[0](1))
   19194 
   19195 This assumes that `x' is an array of pointers to functions; the type
   19196 described is that of the values of the functions.
   19197 
   19198  Here is an example with a typename as the argument:
   19199 
   19200      typeof (int *)
   19201 
   19202 Here the type described is that of pointers to `int'.
   19203 
   19204  If you are writing a header file that must work when included in ISO C
   19205 programs, write `__typeof__' instead of `typeof'.  *Note Alternate
   19206 Keywords::.
   19207 
   19208  A `typeof'-construct can be used anywhere a typedef name could be
   19209 used.  For example, you can use it in a declaration, in a cast, or
   19210 inside of `sizeof' or `typeof'.
   19211 
   19212  The operand of `typeof' is evaluated for its side effects if and only
   19213 if it is an expression of variably modified type or the name of such a
   19214 type.
   19215 
   19216  `typeof' is often useful in conjunction with the
   19217 statements-within-expressions feature.  Here is how the two together can
   19218 be used to define a safe "maximum" macro that operates on any
   19219 arithmetic type and evaluates each of its arguments exactly once:
   19220 
   19221      #define max(a,b) \
   19222        ({ typeof (a) _a = (a); \
   19223            typeof (b) _b = (b); \
   19224          _a > _b ? _a : _b; })
   19225 
   19226  The reason for using names that start with underscores for the local
   19227 variables is to avoid conflicts with variable names that occur within
   19228 the expressions that are substituted for `a' and `b'.  Eventually we
   19229 hope to design a new form of declaration syntax that allows you to
   19230 declare variables whose scopes start only after their initializers;
   19231 this will be a more reliable way to prevent such conflicts.
   19232 
   19233 Some more examples of the use of `typeof':
   19234 
   19235    * This declares `y' with the type of what `x' points to.
   19236 
   19237           typeof (*x) y;
   19238 
   19239    * This declares `y' as an array of such values.
   19240 
   19241           typeof (*x) y[4];
   19242 
   19243    * This declares `y' as an array of pointers to characters:
   19244 
   19245           typeof (typeof (char *)[4]) y;
   19246 
   19247      It is equivalent to the following traditional C declaration:
   19248 
   19249           char *y[4];
   19250 
   19251      To see the meaning of the declaration using `typeof', and why it
   19252      might be a useful way to write, rewrite it with these macros:
   19253 
   19254           #define pointer(T)  typeof(T *)
   19255           #define array(T, N) typeof(T [N])
   19256 
   19257      Now the declaration can be rewritten this way:
   19258 
   19259           array (pointer (char), 4) y;
   19260 
   19261      Thus, `array (pointer (char), 4)' is the type of arrays of 4
   19262      pointers to `char'.
   19263 
   19264  _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
   19265 limited extension which permitted one to write
   19266 
   19267      typedef T = EXPR;
   19268 
   19269 with the effect of declaring T to have the type of the expression EXPR.
   19270 This extension does not work with GCC 3 (versions between 3.0 and 3.2
   19271 will crash; 3.2.1 and later give an error).  Code which relies on it
   19272 should be rewritten to use `typeof':
   19273 
   19274      typedef typeof(EXPR) T;
   19275 
   19276 This will work with all versions of GCC.
   19277 
   19278 
   19279 File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
   19280 
   19281 6.7 Conditionals with Omitted Operands
   19282 ======================================
   19283 
   19284 The middle operand in a conditional expression may be omitted.  Then if
   19285 the first operand is nonzero, its value is the value of the conditional
   19286 expression.
   19287 
   19288  Therefore, the expression
   19289 
   19290      x ? : y
   19291 
   19292 has the value of `x' if that is nonzero; otherwise, the value of `y'.
   19293 
   19294  This example is perfectly equivalent to
   19295 
   19296      x ? x : y
   19297 
   19298 In this simple case, the ability to omit the middle operand is not
   19299 especially useful.  When it becomes useful is when the first operand
   19300 does, or may (if it is a macro argument), contain a side effect.  Then
   19301 repeating the operand in the middle would perform the side effect
   19302 twice.  Omitting the middle operand uses the value already computed
   19303 without the undesirable effects of recomputing it.
   19304 
   19305 
   19306 File: gcc.info,  Node: __int128,  Next: Complex,  Prev: Long Long,  Up: C Extensions
   19307 
   19308 6.8 128-bits integers
   19309 =====================
   19310 
   19311 As an extension the integer scalar type `__int128' is supported for
   19312 targets having an integer mode wide enough to hold 128-bit.  Simply
   19313 write `__int128' for a signed 128-bit integer, or `unsigned __int128'
   19314 for an unsigned 128-bit integer.  There is no support in GCC to express
   19315 an integer constant of type `__int128' for targets having `long long'
   19316 integer with less then 128 bit width.
   19317 
   19318 
   19319 File: gcc.info,  Node: Long Long,  Next: __int128,  Prev: Conditionals,  Up: C Extensions
   19320 
   19321 6.9 Double-Word Integers
   19322 ========================
   19323 
   19324 ISO C99 supports data types for integers that are at least 64 bits wide,
   19325 and as an extension GCC supports them in C90 mode and in C++.  Simply
   19326 write `long long int' for a signed integer, or `unsigned long long int'
   19327 for an unsigned integer.  To make an integer constant of type `long
   19328 long int', add the suffix `LL' to the integer.  To make an integer
   19329 constant of type `unsigned long long int', add the suffix `ULL' to the
   19330 integer.
   19331 
   19332  You can use these types in arithmetic like any other integer types.
   19333 Addition, subtraction, and bitwise boolean operations on these types
   19334 are open-coded on all types of machines.  Multiplication is open-coded
   19335 if the machine supports fullword-to-doubleword a widening multiply
   19336 instruction.  Division and shifts are open-coded only on machines that
   19337 provide special support.  The operations that are not open-coded use
   19338 special library routines that come with GCC.
   19339 
   19340  There may be pitfalls when you use `long long' types for function
   19341 arguments, unless you declare function prototypes.  If a function
   19342 expects type `int' for its argument, and you pass a value of type `long
   19343 long int', confusion will result because the caller and the subroutine
   19344 will disagree about the number of bytes for the argument.  Likewise, if
   19345 the function expects `long long int' and you pass `int'.  The best way
   19346 to avoid such problems is to use prototypes.
   19347 
   19348 
   19349 File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: __int128,  Up: C Extensions
   19350 
   19351 6.10 Complex Numbers
   19352 ====================
   19353 
   19354 ISO C99 supports complex floating data types, and as an extension GCC
   19355 supports them in C90 mode and in C++, and supports complex integer data
   19356 types which are not part of ISO C99.  You can declare complex types
   19357 using the keyword `_Complex'.  As an extension, the older GNU keyword
   19358 `__complex__' is also supported.
   19359 
   19360  For example, `_Complex double x;' declares `x' as a variable whose
   19361 real part and imaginary part are both of type `double'.  `_Complex
   19362 short int y;' declares `y' to have real and imaginary parts of type
   19363 `short int'; this is not likely to be useful, but it shows that the set
   19364 of complex types is complete.
   19365 
   19366  To write a constant with a complex data type, use the suffix `i' or
   19367 `j' (either one; they are equivalent).  For example, `2.5fi' has type
   19368 `_Complex float' and `3i' has type `_Complex int'.  Such a constant
   19369 always has a pure imaginary value, but you can form any complex value
   19370 you like by adding one to a real constant.  This is a GNU extension; if
   19371 you have an ISO C99 conforming C library (such as GNU libc), and want
   19372 to construct complex constants of floating type, you should include
   19373 `<complex.h>' and use the macros `I' or `_Complex_I' instead.
   19374 
   19375  To extract the real part of a complex-valued expression EXP, write
   19376 `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
   19377 part.  This is a GNU extension; for values of floating type, you should
   19378 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
   19379 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
   19380 built-in functions by GCC.
   19381 
   19382  The operator `~' performs complex conjugation when used on a value
   19383 with a complex type.  This is a GNU extension; for values of floating
   19384 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
   19385 declared in `<complex.h>' and also provided as built-in functions by
   19386 GCC.
   19387 
   19388  GCC can allocate complex automatic variables in a noncontiguous
   19389 fashion; it's even possible for the real part to be in a register while
   19390 the imaginary part is on the stack (or vice-versa).  Only the DWARF2
   19391 debug info format can represent this, so use of DWARF2 is recommended.
   19392 If you are using the stabs debug info format, GCC describes a
   19393 noncontiguous complex variable as if it were two separate variables of
   19394 noncomplex type.  If the variable's actual name is `foo', the two
   19395 fictitious variables are named `foo$real' and `foo$imag'.  You can
   19396 examine and set these two fictitious variables with your debugger.
   19397 
   19398 
   19399 File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
   19400 
   19401 6.11 Additional Floating Types
   19402 ==============================
   19403 
   19404 As an extension, the GNU C compiler supports additional floating types,
   19405 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit
   19406 (`TFmode') floating types.  Support for additional types includes the
   19407 arithmetic operators: add, subtract, multiply, divide; unary arithmetic
   19408 operators; relational operators; equality operators; and conversions to
   19409 and from integer and other floating types.  Use a suffix `w' or `W' in
   19410 a literal constant of type `__float80' and `q' or `Q' for `_float128'.
   19411 You can declare complex types using the corresponding internal complex
   19412 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type:
   19413 
   19414      typedef _Complex float __attribute__((mode(TC))) _Complex128;
   19415      typedef _Complex float __attribute__((mode(XC))) _Complex80;
   19416 
   19417  Not all targets support additional floating point types.  `__float80'
   19418 and `__float128' types are supported on i386, x86_64 and ia64 targets.
   19419 The `__float128' type is supported on hppa HP-UX targets.
   19420 
   19421 
   19422 File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
   19423 
   19424 6.12 Half-Precision Floating Point
   19425 ==================================
   19426 
   19427 On ARM targets, GCC supports half-precision (16-bit) floating point via
   19428 the `__fp16' type.  You must enable this type explicitly with the
   19429 `-mfp16-format' command-line option in order to use it.
   19430 
   19431  ARM supports two incompatible representations for half-precision
   19432 floating-point values.  You must choose one of the representations and
   19433 use it consistently in your program.
   19434 
   19435  Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
   19436 This format can represent normalized values in the range of 2^-14 to
   19437 65504.  There are 11 bits of significand precision, approximately 3
   19438 decimal digits.
   19439 
   19440  Specifying `-mfp16-format=alternative' selects the ARM alternative
   19441 format.  This representation is similar to the IEEE format, but does
   19442 not support infinities or NaNs.  Instead, the range of exponents is
   19443 extended, so that this format can represent normalized values in the
   19444 range of 2^-14 to 131008.
   19445 
   19446  The `__fp16' type is a storage format only.  For purposes of
   19447 arithmetic and other operations, `__fp16' values in C or C++
   19448 expressions are automatically promoted to `float'.  In addition, you
   19449 cannot declare a function with a return value or parameters of type
   19450 `__fp16'.
   19451 
   19452  Note that conversions from `double' to `__fp16' involve an
   19453 intermediate conversion to `float'.  Because of rounding, this can
   19454 sometimes produce a different result than a direct conversion.
   19455 
   19456  ARM provides hardware support for conversions between `__fp16' and
   19457 `float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
   19458 generates code using these hardware instructions if you compile with
   19459 options to select an FPU that provides them; for example,
   19460 `-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
   19461 `-mfp16-format' option to select a half-precision format.
   19462 
   19463  Language-level support for the `__fp16' data type is independent of
   19464 whether GCC generates code using hardware floating-point instructions.
   19465 In cases where hardware support is not specified, GCC implements
   19466 conversions between `__fp16' and `float' values as library calls.
   19467 
   19468 
   19469 File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
   19470 
   19471 6.13 Decimal Floating Types
   19472 ===========================
   19473 
   19474 As an extension, the GNU C compiler supports decimal floating types as
   19475 defined in the N1312 draft of ISO/IEC WDTR24732.  Support for decimal
   19476 floating types in GCC will evolve as the draft technical report changes.
   19477 Calling conventions for any target might also change.  Not all targets
   19478 support decimal floating types.
   19479 
   19480  The decimal floating types are `_Decimal32', `_Decimal64', and
   19481 `_Decimal128'.  They use a radix of ten, unlike the floating types
   19482 `float', `double', and `long double' whose radix is not specified by
   19483 the C standard but is usually two.
   19484 
   19485  Support for decimal floating types includes the arithmetic operators
   19486 add, subtract, multiply, divide; unary arithmetic operators; relational
   19487 operators; equality operators; and conversions to and from integer and
   19488 other floating types.  Use a suffix `df' or `DF' in a literal constant
   19489 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
   19490 for `_Decimal128'.
   19491 
   19492  GCC support of decimal float as specified by the draft technical report
   19493 is incomplete:
   19494 
   19495    * When the value of a decimal floating type cannot be represented in
   19496      the integer type to which it is being converted, the result is
   19497      undefined rather than the result value specified by the draft
   19498      technical report.
   19499 
   19500    * GCC does not provide the C library functionality associated with
   19501      `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
   19502      must come from a separate C library implementation.  Because of
   19503      this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
   19504      indicate that the implementation conforms to the technical report.
   19505 
   19506  Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
   19507 the DWARF2 debug information format.
   19508 
   19509 
   19510 File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
   19511 
   19512 6.14 Hex Floats
   19513 ===============
   19514 
   19515 ISO C99 supports floating-point numbers written not only in the usual
   19516 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
   19517 written in hexadecimal format.  As a GNU extension, GCC supports this
   19518 in C90 mode (except in some cases when strictly conforming) and in C++.
   19519 In that format the `0x' hex introducer and the `p' or `P' exponent
   19520 field are mandatory.  The exponent is a decimal number that indicates
   19521 the power of 2 by which the significant part will be multiplied.  Thus
   19522 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
   19523 is the same as `1.55e1'.
   19524 
   19525  Unlike for floating-point numbers in the decimal notation the exponent
   19526 is always required in the hexadecimal notation.  Otherwise the compiler
   19527 would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
   19528 could mean `1.0f' or `1.9375' since `f' is also the extension for
   19529 floating-point constants of type `float'.
   19530 
   19531 
   19532 File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
   19533 
   19534 6.15 Fixed-Point Types
   19535 ======================
   19536 
   19537 As an extension, the GNU C compiler supports fixed-point types as
   19538 defined in the N1169 draft of ISO/IEC DTR 18037.  Support for
   19539 fixed-point types in GCC will evolve as the draft technical report
   19540 changes.  Calling conventions for any target might also change.  Not
   19541 all targets support fixed-point types.
   19542 
   19543  The fixed-point types are `short _Fract', `_Fract', `long _Fract',
   19544 `long long _Fract', `unsigned short _Fract', `unsigned _Fract',
   19545 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short
   19546 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
   19547 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
   19548 long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
   19549 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
   19550 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
   19551 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
   19552 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
   19553 unsigned long _Accum', `_Sat unsigned long long _Accum'.
   19554 
   19555  Fixed-point data values contain fractional and optional integral parts.
   19556 The format of fixed-point data varies and depends on the target machine.
   19557 
   19558  Support for fixed-point types includes:
   19559    * prefix and postfix increment and decrement operators (`++', `--')
   19560 
   19561    * unary arithmetic operators (`+', `-', `!')
   19562 
   19563    * binary arithmetic operators (`+', `-', `*', `/')
   19564 
   19565    * binary shift operators (`<<', `>>')
   19566 
   19567    * relational operators (`<', `<=', `>=', `>')
   19568 
   19569    * equality operators (`==', `!=')
   19570 
   19571    * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
   19572 
   19573    * conversions to and from integer, floating-point, or fixed-point
   19574      types
   19575 
   19576  Use a suffix in a fixed-point literal constant:
   19577    * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
   19578 
   19579    * `r' or `R' for `_Fract' and `_Sat _Fract'
   19580 
   19581    * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
   19582 
   19583    * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
   19584 
   19585    * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
   19586      short _Fract'
   19587 
   19588    * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
   19589 
   19590    * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
   19591      _Fract'
   19592 
   19593    * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
   19594      unsigned long long _Fract'
   19595 
   19596    * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
   19597 
   19598    * `k' or `K' for `_Accum' and `_Sat _Accum'
   19599 
   19600    * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
   19601 
   19602    * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
   19603 
   19604    * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
   19605      short _Accum'
   19606 
   19607    * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
   19608 
   19609    * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
   19610      _Accum'
   19611 
   19612    * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
   19613      unsigned long long _Accum'
   19614 
   19615  GCC support of fixed-point types as specified by the draft technical
   19616 report is incomplete:
   19617 
   19618    * Pragmas to control overflow and rounding behaviors are not
   19619      implemented.
   19620 
   19621  Fixed-point types are supported by the DWARF2 debug information format.
   19622 
   19623 
   19624 File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
   19625 
   19626 6.16 Named address spaces
   19627 =========================
   19628 
   19629 As an extension, the GNU C compiler supports named address spaces as
   19630 defined in the N1275 draft of ISO/IEC DTR 18037.  Support for named
   19631 address spaces in GCC will evolve as the draft technical report changes.
   19632 Calling conventions for any target might also change.  At present, only
   19633 the SPU and M32C targets support other address spaces.  On the SPU
   19634 target, for example, variables may be declared as belonging to another
   19635 address space by qualifying the type with the `__ea' address space
   19636 identifier:
   19637 
   19638      extern int __ea i;
   19639 
   19640  When the variable `i' is accessed, the compiler will generate special
   19641 code to access this variable.  It may use runtime library support, or
   19642 generate special machine instructions to access that address space.
   19643 
   19644  The `__ea' identifier may be used exactly like any other C type
   19645 qualifier (e.g., `const' or `volatile').  See the N1275 document for
   19646 more details.
   19647 
   19648  On the M32C target, with the R8C and M16C cpu variants, variables
   19649 qualified with `__far' are accessed using 32-bit addresses in order to
   19650 access memory beyond the first 64k bytes.  If `__far' is used with the
   19651 M32CM or M32C cpu variants, it has no effect.
   19652 
   19653 
   19654 File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Named Address Spaces,  Up: C Extensions
   19655 
   19656 6.17 Arrays of Length Zero
   19657 ==========================
   19658 
   19659 Zero-length arrays are allowed in GNU C.  They are very useful as the
   19660 last element of a structure which is really a header for a
   19661 variable-length object:
   19662 
   19663      struct line {
   19664        int length;
   19665        char contents[0];
   19666      };
   19667 
   19668      struct line *thisline = (struct line *)
   19669        malloc (sizeof (struct line) + this_length);
   19670      thisline->length = this_length;
   19671 
   19672  In ISO C90, you would have to give `contents' a length of 1, which
   19673 means either you waste space or complicate the argument to `malloc'.
   19674 
   19675  In ISO C99, you would use a "flexible array member", which is slightly
   19676 different in syntax and semantics:
   19677 
   19678    * Flexible array members are written as `contents[]' without the `0'.
   19679 
   19680    * Flexible array members have incomplete type, and so the `sizeof'
   19681      operator may not be applied.  As a quirk of the original
   19682      implementation of zero-length arrays, `sizeof' evaluates to zero.
   19683 
   19684    * Flexible array members may only appear as the last member of a
   19685      `struct' that is otherwise non-empty.
   19686 
   19687    * A structure containing a flexible array member, or a union
   19688      containing such a structure (possibly recursively), may not be a
   19689      member of a structure or an element of an array.  (However, these
   19690      uses are permitted by GCC as extensions.)
   19691 
   19692  GCC versions before 3.0 allowed zero-length arrays to be statically
   19693 initialized, as if they were flexible arrays.  In addition to those
   19694 cases that were useful, it also allowed initializations in situations
   19695 that would corrupt later data.  Non-empty initialization of zero-length
   19696 arrays is now treated like any case where there are more initializer
   19697 elements than the array holds, in that a suitable warning about "excess
   19698 elements in array" is given, and the excess elements (all of them, in
   19699 this case) are ignored.
   19700 
   19701  Instead GCC allows static initialization of flexible array members.
   19702 This is equivalent to defining a new structure containing the original
   19703 structure followed by an array of sufficient size to contain the data.
   19704 I.e. in the following, `f1' is constructed as if it were declared like
   19705 `f2'.
   19706 
   19707      struct f1 {
   19708        int x; int y[];
   19709      } f1 = { 1, { 2, 3, 4 } };
   19710 
   19711      struct f2 {
   19712        struct f1 f1; int data[3];
   19713      } f2 = { { 1 }, { 2, 3, 4 } };
   19714 
   19715 The convenience of this extension is that `f1' has the desired type,
   19716 eliminating the need to consistently refer to `f2.f1'.
   19717 
   19718  This has symmetry with normal static arrays, in that an array of
   19719 unknown size is also written with `[]'.
   19720 
   19721  Of course, this extension only makes sense if the extra data comes at
   19722 the end of a top-level object, as otherwise we would be overwriting
   19723 data at subsequent offsets.  To avoid undue complication and confusion
   19724 with initialization of deeply nested arrays, we simply disallow any
   19725 non-empty initialization except when the structure is the top-level
   19726 object.  For example:
   19727 
   19728      struct foo { int x; int y[]; };
   19729      struct bar { struct foo z; };
   19730 
   19731      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
   19732      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
   19733      struct bar c = { { 1, { } } };            // Valid.
   19734      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
   19735 
   19736 
   19737 File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
   19738 
   19739 6.18 Structures With No Members
   19740 ===============================
   19741 
   19742 GCC permits a C structure to have no members:
   19743 
   19744      struct empty {
   19745      };
   19746 
   19747  The structure will have size zero.  In C++, empty structures are part
   19748 of the language.  G++ treats empty structures as if they had a single
   19749 member of type `char'.
   19750 
   19751 
   19752 File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
   19753 
   19754 6.19 Arrays of Variable Length
   19755 ==============================
   19756 
   19757 Variable-length automatic arrays are allowed in ISO C99, and as an
   19758 extension GCC accepts them in C90 mode and in C++.  These arrays are
   19759 declared like any other automatic arrays, but with a length that is not
   19760 a constant expression.  The storage is allocated at the point of
   19761 declaration and deallocated when the brace-level is exited.  For
   19762 example:
   19763 
   19764      FILE *
   19765      concat_fopen (char *s1, char *s2, char *mode)
   19766      {
   19767        char str[strlen (s1) + strlen (s2) + 1];
   19768        strcpy (str, s1);
   19769        strcat (str, s2);
   19770        return fopen (str, mode);
   19771      }
   19772 
   19773  Jumping or breaking out of the scope of the array name deallocates the
   19774 storage.  Jumping into the scope is not allowed; you get an error
   19775 message for it.
   19776 
   19777  You can use the function `alloca' to get an effect much like
   19778 variable-length arrays.  The function `alloca' is available in many
   19779 other C implementations (but not in all).  On the other hand,
   19780 variable-length arrays are more elegant.
   19781 
   19782  There are other differences between these two methods.  Space allocated
   19783 with `alloca' exists until the containing _function_ returns.  The
   19784 space for a variable-length array is deallocated as soon as the array
   19785 name's scope ends.  (If you use both variable-length arrays and
   19786 `alloca' in the same function, deallocation of a variable-length array
   19787 will also deallocate anything more recently allocated with `alloca'.)
   19788 
   19789  You can also use variable-length arrays as arguments to functions:
   19790 
   19791      struct entry
   19792      tester (int len, char data[len][len])
   19793      {
   19794        /* ... */
   19795      }
   19796 
   19797  The length of an array is computed once when the storage is allocated
   19798 and is remembered for the scope of the array in case you access it with
   19799 `sizeof'.
   19800 
   19801  If you want to pass the array first and the length afterward, you can
   19802 use a forward declaration in the parameter list--another GNU extension.
   19803 
   19804      struct entry
   19805      tester (int len; char data[len][len], int len)
   19806      {
   19807        /* ... */
   19808      }
   19809 
   19810  The `int len' before the semicolon is a "parameter forward
   19811 declaration", and it serves the purpose of making the name `len' known
   19812 when the declaration of `data' is parsed.
   19813 
   19814  You can write any number of such parameter forward declarations in the
   19815 parameter list.  They can be separated by commas or semicolons, but the
   19816 last one must end with a semicolon, which is followed by the "real"
   19817 parameter declarations.  Each forward declaration must match a "real"
   19818 declaration in parameter name and data type.  ISO C99 does not support
   19819 parameter forward declarations.
   19820 
   19821 
   19822 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
   19823 
   19824 6.20 Macros with a Variable Number of Arguments.
   19825 ================================================
   19826 
   19827 In the ISO C standard of 1999, a macro can be declared to accept a
   19828 variable number of arguments much as a function can.  The syntax for
   19829 defining the macro is similar to that of a function.  Here is an
   19830 example:
   19831 
   19832      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
   19833 
   19834  Here `...' is a "variable argument".  In the invocation of such a
   19835 macro, it represents the zero or more tokens until the closing
   19836 parenthesis that ends the invocation, including any commas.  This set of
   19837 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
   19838 it appears.  See the CPP manual for more information.
   19839 
   19840  GCC has long supported variadic macros, and used a different syntax
   19841 that allowed you to give a name to the variable arguments just like any
   19842 other argument.  Here is an example:
   19843 
   19844      #define debug(format, args...) fprintf (stderr, format, args)
   19845 
   19846  This is in all ways equivalent to the ISO C example above, but arguably
   19847 more readable and descriptive.
   19848 
   19849  GNU CPP has two further variadic macro extensions, and permits them to
   19850 be used with either of the above forms of macro definition.
   19851 
   19852  In standard C, you are not allowed to leave the variable argument out
   19853 entirely; but you are allowed to pass an empty argument.  For example,
   19854 this invocation is invalid in ISO C, because there is no comma after
   19855 the string:
   19856 
   19857      debug ("A message")
   19858 
   19859  GNU CPP permits you to completely omit the variable arguments in this
   19860 way.  In the above examples, the compiler would complain, though since
   19861 the expansion of the macro still has the extra comma after the format
   19862 string.
   19863 
   19864  To help solve this problem, CPP behaves specially for variable
   19865 arguments used with the token paste operator, `##'.  If instead you
   19866 write
   19867 
   19868      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
   19869 
   19870  and if the variable arguments are omitted or empty, the `##' operator
   19871 causes the preprocessor to remove the comma before it.  If you do
   19872 provide some variable arguments in your macro invocation, GNU CPP does
   19873 not complain about the paste operation and instead places the variable
   19874 arguments after the comma.  Just like any other pasted macro argument,
   19875 these arguments are not macro expanded.
   19876 
   19877 
   19878 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
   19879 
   19880 6.21 Slightly Looser Rules for Escaped Newlines
   19881 ===============================================
   19882 
   19883 Recently, the preprocessor has relaxed its treatment of escaped
   19884 newlines.  Previously, the newline had to immediately follow a
   19885 backslash.  The current implementation allows whitespace in the form of
   19886 spaces, horizontal and vertical tabs, and form feeds between the
   19887 backslash and the subsequent newline.  The preprocessor issues a
   19888 warning, but treats it as a valid escaped newline and combines the two
   19889 lines to form a single logical line.  This works within comments and
   19890 tokens, as well as between tokens.  Comments are _not_ treated as
   19891 whitespace for the purposes of this relaxation, since they have not yet
   19892 been replaced with spaces.
   19893 
   19894 
   19895 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
   19896 
   19897 6.22 Non-Lvalue Arrays May Have Subscripts
   19898 ==========================================
   19899 
   19900 In ISO C99, arrays that are not lvalues still decay to pointers, and
   19901 may be subscripted, although they may not be modified or used after the
   19902 next sequence point and the unary `&' operator may not be applied to
   19903 them.  As an extension, GCC allows such arrays to be subscripted in C90
   19904 mode, though otherwise they do not decay to pointers outside C99 mode.
   19905 For example, this is valid in GNU C though not valid in C90:
   19906 
   19907      struct foo {int a[4];};
   19908 
   19909      struct foo f();
   19910 
   19911      bar (int index)
   19912      {
   19913        return f().a[index];
   19914      }
   19915 
   19916 
   19917 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
   19918 
   19919 6.23 Arithmetic on `void'- and Function-Pointers
   19920 ================================================
   19921 
   19922 In GNU C, addition and subtraction operations are supported on pointers
   19923 to `void' and on pointers to functions.  This is done by treating the
   19924 size of a `void' or of a function as 1.
   19925 
   19926  A consequence of this is that `sizeof' is also allowed on `void' and
   19927 on function types, and returns 1.
   19928 
   19929  The option `-Wpointer-arith' requests a warning if these extensions
   19930 are used.
   19931 
   19932 
   19933 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
   19934 
   19935 6.24 Non-Constant Initializers
   19936 ==============================
   19937 
   19938 As in standard C++ and ISO C99, the elements of an aggregate
   19939 initializer for an automatic variable are not required to be constant
   19940 expressions in GNU C.  Here is an example of an initializer with
   19941 run-time varying elements:
   19942 
   19943      foo (float f, float g)
   19944      {
   19945        float beat_freqs[2] = { f-g, f+g };
   19946        /* ... */
   19947      }
   19948 
   19949 
   19950 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
   19951 
   19952 6.25 Compound Literals
   19953 ======================
   19954 
   19955 ISO C99 supports compound literals.  A compound literal looks like a
   19956 cast containing an initializer.  Its value is an object of the type
   19957 specified in the cast, containing the elements specified in the
   19958 initializer; it is an lvalue.  As an extension, GCC supports compound
   19959 literals in C90 mode and in C++.
   19960 
   19961  Usually, the specified type is a structure.  Assume that `struct foo'
   19962 and `structure' are declared as shown:
   19963 
   19964      struct foo {int a; char b[2];} structure;
   19965 
   19966 Here is an example of constructing a `struct foo' with a compound
   19967 literal:
   19968 
   19969      structure = ((struct foo) {x + y, 'a', 0});
   19970 
   19971 This is equivalent to writing the following:
   19972 
   19973      {
   19974        struct foo temp = {x + y, 'a', 0};
   19975        structure = temp;
   19976      }
   19977 
   19978  You can also construct an array.  If all the elements of the compound
   19979 literal are (made up of) simple constant expressions, suitable for use
   19980 in initializers of objects of static storage duration, then the compound
   19981 literal can be coerced to a pointer to its first element and used in
   19982 such an initializer, as shown here:
   19983 
   19984      char **foo = (char *[]) { "x", "y", "z" };
   19985 
   19986  Compound literals for scalar types and union types are is also
   19987 allowed, but then the compound literal is equivalent to a cast.
   19988 
   19989  As a GNU extension, GCC allows initialization of objects with static
   19990 storage duration by compound literals (which is not possible in ISO
   19991 C99, because the initializer is not a constant).  It is handled as if
   19992 the object was initialized only with the bracket enclosed list if the
   19993 types of the compound literal and the object match.  The initializer
   19994 list of the compound literal must be constant.  If the object being
   19995 initialized has array type of unknown size, the size is determined by
   19996 compound literal size.
   19997 
   19998      static struct foo x = (struct foo) {1, 'a', 'b'};
   19999      static int y[] = (int []) {1, 2, 3};
   20000      static int z[] = (int [3]) {1};
   20001 
   20002 The above lines are equivalent to the following:
   20003      static struct foo x = {1, 'a', 'b'};
   20004      static int y[] = {1, 2, 3};
   20005      static int z[] = {1, 0, 0};
   20006 
   20007 
   20008 File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
   20009 
   20010 6.26 Designated Initializers
   20011 ============================
   20012 
   20013 Standard C90 requires the elements of an initializer to appear in a
   20014 fixed order, the same as the order of the elements in the array or
   20015 structure being initialized.
   20016 
   20017  In ISO C99 you can give the elements in any order, specifying the array
   20018 indices or structure field names they apply to, and GNU C allows this as
   20019 an extension in C90 mode as well.  This extension is not implemented in
   20020 GNU C++.
   20021 
   20022  To specify an array index, write `[INDEX] =' before the element value.
   20023 For example,
   20024 
   20025      int a[6] = { [4] = 29, [2] = 15 };
   20026 
   20027 is equivalent to
   20028 
   20029      int a[6] = { 0, 0, 15, 0, 29, 0 };
   20030 
   20031 The index values must be constant expressions, even if the array being
   20032 initialized is automatic.
   20033 
   20034  An alternative syntax for this which has been obsolete since GCC 2.5
   20035 but GCC still accepts is to write `[INDEX]' before the element value,
   20036 with no `='.
   20037 
   20038  To initialize a range of elements to the same value, write `[FIRST ...
   20039 LAST] = VALUE'.  This is a GNU extension.  For example,
   20040 
   20041      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
   20042 
   20043 If the value in it has side-effects, the side-effects will happen only
   20044 once, not for each initialized field by the range initializer.
   20045 
   20046 Note that the length of the array is the highest value specified plus
   20047 one.
   20048 
   20049  In a structure initializer, specify the name of a field to initialize
   20050 with `.FIELDNAME =' before the element value.  For example, given the
   20051 following structure,
   20052 
   20053      struct point { int x, y; };
   20054 
   20055 the following initialization
   20056 
   20057      struct point p = { .y = yvalue, .x = xvalue };
   20058 
   20059 is equivalent to
   20060 
   20061      struct point p = { xvalue, yvalue };
   20062 
   20063  Another syntax which has the same meaning, obsolete since GCC 2.5, is
   20064 `FIELDNAME:', as shown here:
   20065 
   20066      struct point p = { y: yvalue, x: xvalue };
   20067 
   20068  The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
   20069 also use a designator (or the obsolete colon syntax) when initializing
   20070 a union, to specify which element of the union should be used.  For
   20071 example,
   20072 
   20073      union foo { int i; double d; };
   20074 
   20075      union foo f = { .d = 4 };
   20076 
   20077 will convert 4 to a `double' to store it in the union using the second
   20078 element.  By contrast, casting 4 to type `union foo' would store it
   20079 into the union as the integer `i', since it is an integer.  (*Note Cast
   20080 to Union::.)
   20081 
   20082  You can combine this technique of naming elements with ordinary C
   20083 initialization of successive elements.  Each initializer element that
   20084 does not have a designator applies to the next consecutive element of
   20085 the array or structure.  For example,
   20086 
   20087      int a[6] = { [1] = v1, v2, [4] = v4 };
   20088 
   20089 is equivalent to
   20090 
   20091      int a[6] = { 0, v1, v2, 0, v4, 0 };
   20092 
   20093  Labeling the elements of an array initializer is especially useful
   20094 when the indices are characters or belong to an `enum' type.  For
   20095 example:
   20096 
   20097      int whitespace[256]
   20098        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
   20099            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
   20100 
   20101  You can also write a series of `.FIELDNAME' and `[INDEX]' designators
   20102 before an `=' to specify a nested subobject to initialize; the list is
   20103 taken relative to the subobject corresponding to the closest
   20104 surrounding brace pair.  For example, with the `struct point'
   20105 declaration above:
   20106 
   20107      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
   20108 
   20109 If the same field is initialized multiple times, it will have value from
   20110 the last initialization.  If any such overridden initialization has
   20111 side-effect, it is unspecified whether the side-effect happens or not.
   20112 Currently, GCC will discard them and issue a warning.
   20113 
   20114 
   20115 File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
   20116 
   20117 6.27 Case Ranges
   20118 ================
   20119 
   20120 You can specify a range of consecutive values in a single `case' label,
   20121 like this:
   20122 
   20123      case LOW ... HIGH:
   20124 
   20125 This has the same effect as the proper number of individual `case'
   20126 labels, one for each integer value from LOW to HIGH, inclusive.
   20127 
   20128  This feature is especially useful for ranges of ASCII character codes:
   20129 
   20130      case 'A' ... 'Z':
   20131 
   20132  *Be careful:* Write spaces around the `...', for otherwise it may be
   20133 parsed wrong when you use it with integer values.  For example, write
   20134 this:
   20135 
   20136      case 1 ... 5:
   20137 
   20138 rather than this:
   20139 
   20140      case 1...5:
   20141 
   20142 
   20143 File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
   20144 
   20145 6.28 Cast to a Union Type
   20146 =========================
   20147 
   20148 A cast to union type is similar to other casts, except that the type
   20149 specified is a union type.  You can specify the type either with `union
   20150 TAG' or with a typedef name.  A cast to union is actually a constructor
   20151 though, not a cast, and hence does not yield an lvalue like normal
   20152 casts.  (*Note Compound Literals::.)
   20153 
   20154  The types that may be cast to the union type are those of the members
   20155 of the union.  Thus, given the following union and variables:
   20156 
   20157      union foo { int i; double d; };
   20158      int x;
   20159      double y;
   20160 
   20161 both `x' and `y' can be cast to type `union foo'.
   20162 
   20163  Using the cast as the right-hand side of an assignment to a variable of
   20164 union type is equivalent to storing in a member of the union:
   20165 
   20166      union foo u;
   20167      /* ... */
   20168      u = (union foo) x  ==  u.i = x
   20169      u = (union foo) y  ==  u.d = y
   20170 
   20171  You can also use the union cast as a function argument:
   20172 
   20173      void hack (union foo);
   20174      /* ... */
   20175      hack ((union foo) x);
   20176 
   20177 
   20178 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
   20179 
   20180 6.29 Mixed Declarations and Code
   20181 ================================
   20182 
   20183 ISO C99 and ISO C++ allow declarations and code to be freely mixed
   20184 within compound statements.  As an extension, GCC also allows this in
   20185 C90 mode.  For example, you could do:
   20186 
   20187      int i;
   20188      /* ... */
   20189      i++;
   20190      int j = i + 2;
   20191 
   20192  Each identifier is visible from where it is declared until the end of
   20193 the enclosing block.
   20194 
   20195 
   20196 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
   20197 
   20198 6.30 Declaring Attributes of Functions
   20199 ======================================
   20200 
   20201 In GNU C, you declare certain things about functions called in your
   20202 program which help the compiler optimize function calls and check your
   20203 code more carefully.
   20204 
   20205  The keyword `__attribute__' allows you to specify special attributes
   20206 when making a declaration.  This keyword is followed by an attribute
   20207 specification inside double parentheses.  The following attributes are
   20208 currently defined for functions on all targets: `aligned',
   20209 `alloc_size', `noreturn', `returns_twice', `noinline', `noclone',
   20210 `always_inline', `flatten', `pure', `const', `nothrow', `sentinel',
   20211 `format', `format_arg', `no_instrument_function', `no_split_stack',
   20212 `section', `constructor', `destructor', `used', `unused', `deprecated',
   20213 `weak', `malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
   20214 `gnu_inline', `externally_visible', `hot', `cold', `artificial',
   20215 `error' and `warning'.  Several other attributes are defined for
   20216 functions on particular target systems.  Other attributes, including
   20217 `section' are supported for variables declarations (*note Variable
   20218 Attributes::) and for types (*note Type Attributes::).
   20219 
   20220  GCC plugins may provide their own attributes.
   20221 
   20222  You may also specify attributes with `__' preceding and following each
   20223 keyword.  This allows you to use them in header files without being
   20224 concerned about a possible macro of the same name.  For example, you
   20225 may use `__noreturn__' instead of `noreturn'.
   20226 
   20227  *Note Attribute Syntax::, for details of the exact syntax for using
   20228 attributes.
   20229 
   20230 `alias ("TARGET")'
   20231      The `alias' attribute causes the declaration to be emitted as an
   20232      alias for another symbol, which must be specified.  For instance,
   20233 
   20234           void __f () { /* Do something. */; }
   20235           void f () __attribute__ ((weak, alias ("__f")));
   20236 
   20237      defines `f' to be a weak alias for `__f'.  In C++, the mangled
   20238      name for the target must be used.  It is an error if `__f' is not
   20239      defined in the same translation unit.
   20240 
   20241      Not all target machines support this attribute.
   20242 
   20243 `aligned (ALIGNMENT)'
   20244      This attribute specifies a minimum alignment for the function,
   20245      measured in bytes.
   20246 
   20247      You cannot use this attribute to decrease the alignment of a
   20248      function, only to increase it.  However, when you explicitly
   20249      specify a function alignment this will override the effect of the
   20250      `-falign-functions' (*note Optimize Options::) option for this
   20251      function.
   20252 
   20253      Note that the effectiveness of `aligned' attributes may be limited
   20254      by inherent limitations in your linker.  On many systems, the
   20255      linker is only able to arrange for functions to be aligned up to a
   20256      certain maximum alignment.  (For some linkers, the maximum
   20257      supported alignment may be very very small.)  See your linker
   20258      documentation for further information.
   20259 
   20260      The `aligned' attribute can also be used for variables and fields
   20261      (*note Variable Attributes::.)
   20262 
   20263 `alloc_size'
   20264      The `alloc_size' attribute is used to tell the compiler that the
   20265      function return value points to memory, where the size is given by
   20266      one or two of the functions parameters.  GCC uses this information
   20267      to improve the correctness of `__builtin_object_size'.
   20268 
   20269      The function parameter(s) denoting the allocated size are
   20270      specified by one or two integer arguments supplied to the
   20271      attribute.  The allocated size is either the value of the single
   20272      function argument specified or the product of the two function
   20273      arguments specified.  Argument numbering starts at one.
   20274 
   20275      For instance,
   20276 
   20277           void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
   20278           void my_realloc(void*, size_t) __attribute__((alloc_size(2)))
   20279 
   20280      declares that my_calloc will return memory of the size given by
   20281      the product of parameter 1 and 2 and that my_realloc will return
   20282      memory of the size given by parameter 2.
   20283 
   20284 `always_inline'
   20285      Generally, functions are not inlined unless optimization is
   20286      specified.  For functions declared inline, this attribute inlines
   20287      the function even if no optimization level was specified.
   20288 
   20289 `gnu_inline'
   20290      This attribute should be used with a function which is also
   20291      declared with the `inline' keyword.  It directs GCC to treat the
   20292      function as if it were defined in gnu90 mode even when compiling
   20293      in C99 or gnu99 mode.
   20294 
   20295      If the function is declared `extern', then this definition of the
   20296      function is used only for inlining.  In no case is the function
   20297      compiled as a standalone function, not even if you take its address
   20298      explicitly.  Such an address becomes an external reference, as if
   20299      you had only declared the function, and had not defined it.  This
   20300      has almost the effect of a macro.  The way to use this is to put a
   20301      function definition in a header file with this attribute, and put
   20302      another copy of the function, without `extern', in a library file.
   20303      The definition in the header file will cause most calls to the
   20304      function to be inlined.  If any uses of the function remain, they
   20305      will refer to the single copy in the library.  Note that the two
   20306      definitions of the functions need not be precisely the same,
   20307      although if they do not have the same effect your program may
   20308      behave oddly.
   20309 
   20310      In C, if the function is neither `extern' nor `static', then the
   20311      function is compiled as a standalone function, as well as being
   20312      inlined where possible.
   20313 
   20314      This is how GCC traditionally handled functions declared `inline'.
   20315      Since ISO C99 specifies a different semantics for `inline', this
   20316      function attribute is provided as a transition measure and as a
   20317      useful feature in its own right.  This attribute is available in
   20318      GCC 4.1.3 and later.  It is available if either of the
   20319      preprocessor macros `__GNUC_GNU_INLINE__' or
   20320      `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
   20321      As Fast As a Macro: Inline.
   20322 
   20323      In C++, this attribute does not depend on `extern' in any way, but
   20324      it still requires the `inline' keyword to enable its special
   20325      behavior.
   20326 
   20327 `artificial'
   20328      This attribute is useful for small inline wrappers which if
   20329      possible should appear during debugging as a unit, depending on
   20330      the debug info format it will either mean marking the function as
   20331      artificial or using the caller location for all instructions
   20332      within the inlined body.
   20333 
   20334 `bank_switch'
   20335      When added to an interrupt handler with the M32C port, causes the
   20336      prologue and epilogue to use bank switching to preserve the
   20337      registers rather than saving them on the stack.
   20338 
   20339 `flatten'
   20340      Generally, inlining into a function is limited.  For a function
   20341      marked with this attribute, every call inside this function will
   20342      be inlined, if possible.  Whether the function itself is
   20343      considered for inlining depends on its size and the current
   20344      inlining parameters.
   20345 
   20346 `error ("MESSAGE")'
   20347      If this attribute is used on a function declaration and a call to
   20348      such a function is not eliminated through dead code elimination or
   20349      other optimizations, an error which will include MESSAGE will be
   20350      diagnosed.  This is useful for compile time checking, especially
   20351      together with `__builtin_constant_p' and inline functions where
   20352      checking the inline function arguments is not possible through
   20353      `extern char [(condition) ? 1 : -1];' tricks.  While it is
   20354      possible to leave the function undefined and thus invoke a link
   20355      failure, when using this attribute the problem will be diagnosed
   20356      earlier and with exact location of the call even in presence of
   20357      inline functions or when not emitting debugging information.
   20358 
   20359 `warning ("MESSAGE")'
   20360      If this attribute is used on a function declaration and a call to
   20361      such a function is not eliminated through dead code elimination or
   20362      other optimizations, a warning which will include MESSAGE will be
   20363      diagnosed.  This is useful for compile time checking, especially
   20364      together with `__builtin_constant_p' and inline functions.  While
   20365      it is possible to define the function with a message in
   20366      `.gnu.warning*' section, when using this attribute the problem
   20367      will be diagnosed earlier and with exact location of the call even
   20368      in presence of inline functions or when not emitting debugging
   20369      information.
   20370 
   20371 `cdecl'
   20372      On the Intel 386, the `cdecl' attribute causes the compiler to
   20373      assume that the calling function will pop off the stack space used
   20374      to pass arguments.  This is useful to override the effects of the
   20375      `-mrtd' switch.
   20376 
   20377 `const'
   20378      Many functions do not examine any values except their arguments,
   20379      and have no effects except the return value.  Basically this is
   20380      just slightly more strict class than the `pure' attribute below,
   20381      since function is not allowed to read global memory.
   20382 
   20383      Note that a function that has pointer arguments and examines the
   20384      data pointed to must _not_ be declared `const'.  Likewise, a
   20385      function that calls a non-`const' function usually must not be
   20386      `const'.  It does not make sense for a `const' function to return
   20387      `void'.
   20388 
   20389      The attribute `const' is not implemented in GCC versions earlier
   20390      than 2.5.  An alternative way to declare that a function has no
   20391      side effects, which works in the current version and in some older
   20392      versions, is as follows:
   20393 
   20394           typedef int intfn ();
   20395 
   20396           extern const intfn square;
   20397 
   20398      This approach does not work in GNU C++ from 2.6.0 on, since the
   20399      language specifies that the `const' must be attached to the return
   20400      value.
   20401 
   20402 `constructor'
   20403 `destructor'
   20404 `constructor (PRIORITY)'
   20405 `destructor (PRIORITY)'
   20406      The `constructor' attribute causes the function to be called
   20407      automatically before execution enters `main ()'.  Similarly, the
   20408      `destructor' attribute causes the function to be called
   20409      automatically after `main ()' has completed or `exit ()' has been
   20410      called.  Functions with these attributes are useful for
   20411      initializing data that will be used implicitly during the
   20412      execution of the program.
   20413 
   20414      You may provide an optional integer priority to control the order
   20415      in which constructor and destructor functions are run.  A
   20416      constructor with a smaller priority number runs before a
   20417      constructor with a larger priority number; the opposite
   20418      relationship holds for destructors.  So, if you have a constructor
   20419      that allocates a resource and a destructor that deallocates the
   20420      same resource, both functions typically have the same priority.
   20421      The priorities for constructor and destructor functions are the
   20422      same as those specified for namespace-scope C++ objects (*note C++
   20423      Attributes::).
   20424 
   20425      These attributes are not currently implemented for Objective-C.
   20426 
   20427 `deprecated'
   20428 `deprecated (MSG)'
   20429      The `deprecated' attribute results in a warning if the function is
   20430      used anywhere in the source file.  This is useful when identifying
   20431      functions that are expected to be removed in a future version of a
   20432      program.  The warning also includes the location of the declaration
   20433      of the deprecated function, to enable users to easily find further
   20434      information about why the function is deprecated, or what they
   20435      should do instead.  Note that the warnings only occurs for uses:
   20436 
   20437           int old_fn () __attribute__ ((deprecated));
   20438           int old_fn ();
   20439           int (*fn_ptr)() = old_fn;
   20440 
   20441      results in a warning on line 3 but not line 2.  The optional msg
   20442      argument, which must be a string, will be printed in the warning if
   20443      present.
   20444 
   20445      The `deprecated' attribute can also be used for variables and
   20446      types (*note Variable Attributes::, *note Type Attributes::.)
   20447 
   20448 `disinterrupt'
   20449      On MeP targets, this attribute causes the compiler to emit
   20450      instructions to disable interrupts for the duration of the given
   20451      function.
   20452 
   20453 `dllexport'
   20454      On Microsoft Windows targets and Symbian OS targets the
   20455      `dllexport' attribute causes the compiler to provide a global
   20456      pointer to a pointer in a DLL, so that it can be referenced with
   20457      the `dllimport' attribute.  On Microsoft Windows targets, the
   20458      pointer name is formed by combining `_imp__' and the function or
   20459      variable name.
   20460 
   20461      You can use `__declspec(dllexport)' as a synonym for
   20462      `__attribute__ ((dllexport))' for compatibility with other
   20463      compilers.
   20464 
   20465      On systems that support the `visibility' attribute, this attribute
   20466      also implies "default" visibility.  It is an error to explicitly
   20467      specify any other visibility.
   20468 
   20469      In previous versions of GCC, the `dllexport' attribute was ignored
   20470      for inlined functions, unless the `-fkeep-inline-functions' flag
   20471      had been used.  The default behaviour now is to emit all
   20472      dllexported inline functions; however, this can cause object
   20473      file-size bloat, in which case the old behaviour can be restored
   20474      by using `-fno-keep-inline-dllexport'.
   20475 
   20476      The attribute is also ignored for undefined symbols.
   20477 
   20478      When applied to C++ classes, the attribute marks defined
   20479      non-inlined member functions and static data members as exports.
   20480      Static consts initialized in-class are not marked unless they are
   20481      also defined out-of-class.
   20482 
   20483      For Microsoft Windows targets there are alternative methods for
   20484      including the symbol in the DLL's export table such as using a
   20485      `.def' file with an `EXPORTS' section or, with GNU ld, using the
   20486      `--export-all' linker flag.
   20487 
   20488 `dllimport'
   20489      On Microsoft Windows and Symbian OS targets, the `dllimport'
   20490      attribute causes the compiler to reference a function or variable
   20491      via a global pointer to a pointer that is set up by the DLL
   20492      exporting the symbol.  The attribute implies `extern'.  On
   20493      Microsoft Windows targets, the pointer name is formed by combining
   20494      `_imp__' and the function or variable name.
   20495 
   20496      You can use `__declspec(dllimport)' as a synonym for
   20497      `__attribute__ ((dllimport))' for compatibility with other
   20498      compilers.
   20499 
   20500      On systems that support the `visibility' attribute, this attribute
   20501      also implies "default" visibility.  It is an error to explicitly
   20502      specify any other visibility.
   20503 
   20504      Currently, the attribute is ignored for inlined functions.  If the
   20505      attribute is applied to a symbol _definition_, an error is
   20506      reported.  If a symbol previously declared `dllimport' is later
   20507      defined, the attribute is ignored in subsequent references, and a
   20508      warning is emitted.  The attribute is also overridden by a
   20509      subsequent declaration as `dllexport'.
   20510 
   20511      When applied to C++ classes, the attribute marks non-inlined
   20512      member functions and static data members as imports.  However, the
   20513      attribute is ignored for virtual methods to allow creation of
   20514      vtables using thunks.
   20515 
   20516      On the SH Symbian OS target the `dllimport' attribute also has
   20517      another affect--it can cause the vtable and run-time type
   20518      information for a class to be exported.  This happens when the
   20519      class has a dllimport'ed constructor or a non-inline, non-pure
   20520      virtual function and, for either of those two conditions, the
   20521      class also has an inline constructor or destructor and has a key
   20522      function that is defined in the current translation unit.
   20523 
   20524      For Microsoft Windows based targets the use of the `dllimport'
   20525      attribute on functions is not necessary, but provides a small
   20526      performance benefit by eliminating a thunk in the DLL.  The use of
   20527      the `dllimport' attribute on imported variables was required on
   20528      older versions of the GNU linker, but can now be avoided by
   20529      passing the `--enable-auto-import' switch to the GNU linker.  As
   20530      with functions, using the attribute for a variable eliminates a
   20531      thunk in the DLL.
   20532 
   20533      One drawback to using this attribute is that a pointer to a
   20534      _variable_ marked as `dllimport' cannot be used as a constant
   20535      address. However, a pointer to a _function_ with the `dllimport'
   20536      attribute can be used as a constant initializer; in this case, the
   20537      address of a stub function in the import lib is referenced.  On
   20538      Microsoft Windows targets, the attribute can be disabled for
   20539      functions by setting the `-mnop-fun-dllimport' flag.
   20540 
   20541 `eightbit_data'
   20542      Use this attribute on the H8/300, H8/300H, and H8S to indicate
   20543      that the specified variable should be placed into the eight bit
   20544      data section.  The compiler will generate more efficient code for
   20545      certain operations on data in the eight bit data area.  Note the
   20546      eight bit data area is limited to 256 bytes of data.
   20547 
   20548      You must use GAS and GLD from GNU binutils version 2.7 or later for
   20549      this attribute to work correctly.
   20550 
   20551 `exception_handler'
   20552      Use this attribute on the Blackfin to indicate that the specified
   20553      function is an exception handler.  The compiler will generate
   20554      function entry and exit sequences suitable for use in an exception
   20555      handler when this attribute is present.
   20556 
   20557 `externally_visible'
   20558      This attribute, attached to a global variable or function,
   20559      nullifies the effect of the `-fwhole-program' command-line option,
   20560      so the object remains visible outside the current compilation
   20561      unit. If `-fwhole-program' is used together with `-flto' and
   20562      `gold' is used as the linker plugin, `externally_visible'
   20563      attributes are automatically added to functions (not variable yet
   20564      due to a current `gold' issue) that are accessed outside of LTO
   20565      objects according to resolution file produced by `gold'.  For
   20566      other linkers that cannot generate resolution file, explicit
   20567      `externally_visible' attributes are still necessary.
   20568 
   20569 `far'
   20570      On 68HC11 and 68HC12 the `far' attribute causes the compiler to
   20571      use a calling convention that takes care of switching memory banks
   20572      when entering and leaving a function.  This calling convention is
   20573      also the default when using the `-mlong-calls' option.
   20574 
   20575      On 68HC12 the compiler will use the `call' and `rtc' instructions
   20576      to call and return from a function.
   20577 
   20578      On 68HC11 the compiler will generate a sequence of instructions to
   20579      invoke a board-specific routine to switch the memory bank and call
   20580      the real function.  The board-specific routine simulates a `call'.
   20581      At the end of a function, it will jump to a board-specific routine
   20582      instead of using `rts'.  The board-specific return routine
   20583      simulates the `rtc'.
   20584 
   20585      On MeP targets this causes the compiler to use a calling convention
   20586      which assumes the called function is too far away for the built-in
   20587      addressing modes.
   20588 
   20589 `fast_interrupt'
   20590      Use this attribute on the M32C and RX ports to indicate that the
   20591      specified function is a fast interrupt handler.  This is just like
   20592      the `interrupt' attribute, except that `freit' is used to return
   20593      instead of `reit'.
   20594 
   20595 `fastcall'
   20596      On the Intel 386, the `fastcall' attribute causes the compiler to
   20597      pass the first argument (if of integral type) in the register ECX
   20598      and the second argument (if of integral type) in the register EDX.
   20599      Subsequent and other typed arguments are passed on the stack.  The
   20600      called function will pop the arguments off the stack.  If the
   20601      number of arguments is variable all arguments are pushed on the
   20602      stack.
   20603 
   20604 `thiscall'
   20605      On the Intel 386, the `thiscall' attribute causes the compiler to
   20606      pass the first argument (if of integral type) in the register ECX.
   20607      Subsequent and other typed arguments are passed on the stack. The
   20608      called function will pop the arguments off the stack.  If the
   20609      number of arguments is variable all arguments are pushed on the
   20610      stack.  The `thiscall' attribute is intended for C++ non-static
   20611      member functions.  As gcc extension this calling convention can be
   20612      used for C-functions and for static member methods.
   20613 
   20614 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
   20615      The `format' attribute specifies that a function takes `printf',
   20616      `scanf', `strftime' or `strfmon' style arguments which should be
   20617      type-checked against a format string.  For example, the
   20618      declaration:
   20619 
   20620           extern int
   20621           my_printf (void *my_object, const char *my_format, ...)
   20622                 __attribute__ ((format (printf, 2, 3)));
   20623 
   20624      causes the compiler to check the arguments in calls to `my_printf'
   20625      for consistency with the `printf' style format string argument
   20626      `my_format'.
   20627 
   20628      The parameter ARCHETYPE determines how the format string is
   20629      interpreted, and should be `printf', `scanf', `strftime',
   20630      `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
   20631      also use `__printf__', `__scanf__', `__strftime__' or
   20632      `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
   20633      `ms_strftime' are also present.  ARCHTYPE values such as `printf'
   20634      refer to the formats accepted by the system's C run-time library,
   20635      while `gnu_' values always refer to the formats accepted by the
   20636      GNU C Library.  On Microsoft Windows targets, `ms_' values refer
   20637      to the formats accepted by the `msvcrt.dll' library.  The
   20638      parameter STRING-INDEX specifies which argument is the format
   20639      string argument (starting from 1), while FIRST-TO-CHECK is the
   20640      number of the first argument to check against the format string.
   20641      For functions where the arguments are not available to be checked
   20642      (such as `vprintf'), specify the third parameter as zero.  In this
   20643      case the compiler only checks the format string for consistency.
   20644      For `strftime' formats, the third parameter is required to be zero.
   20645      Since non-static C++ methods have an implicit `this' argument, the
   20646      arguments of such methods should be counted from two, not one, when
   20647      giving values for STRING-INDEX and FIRST-TO-CHECK.
   20648 
   20649      In the example above, the format string (`my_format') is the second
   20650      argument of the function `my_print', and the arguments to check
   20651      start with the third argument, so the correct parameters for the
   20652      format attribute are 2 and 3.
   20653 
   20654      The `format' attribute allows you to identify your own functions
   20655      which take format strings as arguments, so that GCC can check the
   20656      calls to these functions for errors.  The compiler always (unless
   20657      `-ffreestanding' or `-fno-builtin' is used) checks formats for the
   20658      standard library functions `printf', `fprintf', `sprintf',
   20659      `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
   20660      `vsprintf' whenever such warnings are requested (using
   20661      `-Wformat'), so there is no need to modify the header file
   20662      `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
   20663      `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
   20664      strictly conforming C standard modes, the X/Open function
   20665      `strfmon' is also checked as are `printf_unlocked' and
   20666      `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
   20667      Dialect Options.
   20668 
   20669      For Objective-C dialects, `NSString' (or `__NSString__') is
   20670      recognized in the same context.  Declarations including these
   20671      format attributes will be parsed for correct syntax, however the
   20672      result of checking of such format strings is not yet defined, and
   20673      will not be carried out by this version of the compiler.
   20674 
   20675      The target may also provide additional types of format checks.
   20676      *Note Format Checks Specific to Particular Target Machines: Target
   20677      Format Checks.
   20678 
   20679 `format_arg (STRING-INDEX)'
   20680      The `format_arg' attribute specifies that a function takes a format
   20681      string for a `printf', `scanf', `strftime' or `strfmon' style
   20682      function and modifies it (for example, to translate it into
   20683      another language), so the result can be passed to a `printf',
   20684      `scanf', `strftime' or `strfmon' style function (with the
   20685      remaining arguments to the format function the same as they would
   20686      have been for the unmodified string).  For example, the
   20687      declaration:
   20688 
   20689           extern char *
   20690           my_dgettext (char *my_domain, const char *my_format)
   20691                 __attribute__ ((format_arg (2)));
   20692 
   20693      causes the compiler to check the arguments in calls to a `printf',
   20694      `scanf', `strftime' or `strfmon' type function, whose format
   20695      string argument is a call to the `my_dgettext' function, for
   20696      consistency with the format string argument `my_format'.  If the
   20697      `format_arg' attribute had not been specified, all the compiler
   20698      could tell in such calls to format functions would be that the
   20699      format string argument is not constant; this would generate a
   20700      warning when `-Wformat-nonliteral' is used, but the calls could
   20701      not be checked without the attribute.
   20702 
   20703      The parameter STRING-INDEX specifies which argument is the format
   20704      string argument (starting from one).  Since non-static C++ methods
   20705      have an implicit `this' argument, the arguments of such methods
   20706      should be counted from two.
   20707 
   20708      The `format-arg' attribute allows you to identify your own
   20709      functions which modify format strings, so that GCC can check the
   20710      calls to `printf', `scanf', `strftime' or `strfmon' type function
   20711      whose operands are a call to one of your own function.  The
   20712      compiler always treats `gettext', `dgettext', and `dcgettext' in
   20713      this manner except when strict ISO C support is requested by
   20714      `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
   20715      `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
   20716      Dialect Options.
   20717 
   20718      For Objective-C dialects, the `format-arg' attribute may refer to
   20719      an `NSString' reference for compatibility with the `format'
   20720      attribute above.
   20721 
   20722      The target may also allow additional types in `format-arg'
   20723      attributes.  *Note Format Checks Specific to Particular Target
   20724      Machines: Target Format Checks.
   20725 
   20726 `function_vector'
   20727      Use this attribute on the H8/300, H8/300H, and H8S to indicate
   20728      that the specified function should be called through the function
   20729      vector.  Calling a function through the function vector will
   20730      reduce code size, however; the function vector has a limited size
   20731      (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
   20732      and H8S) and shares space with the interrupt vector.
   20733 
   20734      In SH2A target, this attribute declares a function to be called
   20735      using the TBR relative addressing mode.  The argument to this
   20736      attribute is the entry number of the same function in a vector
   20737      table containing all the TBR relative addressable functions.  For
   20738      the successful jump, register TBR should contain the start address
   20739      of this TBR relative vector table.  In the startup routine of the
   20740      user application, user needs to care of this TBR register
   20741      initialization.  The TBR relative vector table can have at max 256
   20742      function entries.  The jumps to these functions will be generated
   20743      using a SH2A specific, non delayed branch instruction JSR/N
   20744      @(disp8,TBR).  You must use GAS and GLD from GNU binutils version
   20745      2.7 or later for this attribute to work correctly.
   20746 
   20747      Please refer the example of M16C target, to see the use of this
   20748      attribute while declaring a function,
   20749 
   20750      In an application, for a function being called once, this
   20751      attribute will save at least 8 bytes of code; and if other
   20752      successive calls are being made to the same function, it will save
   20753      2 bytes of code per each of these calls.
   20754 
   20755      On M16C/M32C targets, the `function_vector' attribute declares a
   20756      special page subroutine call function. Use of this attribute
   20757      reduces the code size by 2 bytes for each call generated to the
   20758      subroutine. The argument to the attribute is the vector number
   20759      entry from the special page vector table which contains the 16
   20760      low-order bits of the subroutine's entry address. Each vector
   20761      table has special page number (18 to 255) which are used in `jsrs'
   20762      instruction.  Jump addresses of the routines are generated by
   20763      adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
   20764      M32C targets), to the 2 byte addresses set in the vector table.
   20765      Therefore you need to ensure that all the special page vector
   20766      routines should get mapped within the address range 0x0F0000 to
   20767      0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
   20768 
   20769      In the following example 2 bytes will be saved for each call to
   20770      function `foo'.
   20771 
   20772           void foo (void) __attribute__((function_vector(0x18)));
   20773           void foo (void)
   20774           {
   20775           }
   20776 
   20777           void bar (void)
   20778           {
   20779               foo();
   20780           }
   20781 
   20782      If functions are defined in one file and are called in another
   20783      file, then be sure to write this declaration in both files.
   20784 
   20785      This attribute is ignored for R8C target.
   20786 
   20787 `interrupt'
   20788      Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP,
   20789      MIPS, RX and Xstormy16 ports to indicate that the specified
   20790      function is an interrupt handler.  The compiler will generate
   20791      function entry and exit sequences suitable for use in an interrupt
   20792      handler when this attribute is present.
   20793 
   20794      Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
   20795      MicroBlaze, and SH processors can be specified via the
   20796      `interrupt_handler' attribute.
   20797 
   20798      Note, on the AVR, interrupts will be enabled inside the function.
   20799 
   20800      Note, for the ARM, you can specify the kind of interrupt to be
   20801      handled by adding an optional parameter to the interrupt attribute
   20802      like this:
   20803 
   20804           void f () __attribute__ ((interrupt ("IRQ")));
   20805 
   20806      Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
   20807      and UNDEF.
   20808 
   20809      On ARMv7-M the interrupt type is ignored, and the attribute means
   20810      the function may be called with a word aligned stack pointer.
   20811 
   20812      On MIPS targets, you can use the following attributes to modify
   20813      the behavior of an interrupt handler:
   20814     `use_shadow_register_set'
   20815           Assume that the handler uses a shadow register set, instead of
   20816           the main general-purpose registers.
   20817 
   20818     `keep_interrupts_masked'
   20819           Keep interrupts masked for the whole function.  Without this
   20820           attribute, GCC tries to reenable interrupts for as much of
   20821           the function as it can.
   20822 
   20823     `use_debug_exception_return'
   20824           Return using the `deret' instruction.  Interrupt handlers
   20825           that don't have this attribute return using `eret' instead.
   20826 
   20827      You can use any combination of these attributes, as shown below:
   20828           void __attribute__ ((interrupt)) v0 ();
   20829           void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
   20830           void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
   20831           void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
   20832           void __attribute__ ((interrupt, use_shadow_register_set,
   20833                                keep_interrupts_masked)) v4 ();
   20834           void __attribute__ ((interrupt, use_shadow_register_set,
   20835                                use_debug_exception_return)) v5 ();
   20836           void __attribute__ ((interrupt, keep_interrupts_masked,
   20837                                use_debug_exception_return)) v6 ();
   20838           void __attribute__ ((interrupt, use_shadow_register_set,
   20839                                keep_interrupts_masked,
   20840                                use_debug_exception_return)) v7 ();
   20841 
   20842 `ifunc ("RESOLVER")'
   20843      The `ifunc' attribute is used to mark a function as an indirect
   20844      function using the STT_GNU_IFUNC symbol type extension to the ELF
   20845      standard.  This allows the resolution of the symbol value to be
   20846      determined dynamically at load time, and an optimized version of
   20847      the routine can be selected for the particular processor or other
   20848      system characteristics determined then.  To use this attribute,
   20849      first define the implementation functions available, and a
   20850      resolver function that returns a pointer to the selected
   20851      implementation function.  The implementation functions'
   20852      declarations must match the API of the function being implemented,
   20853      the resolver's declaration is be a function returning pointer to
   20854      void function returning void:
   20855 
   20856           void *my_memcpy (void *dst, const void *src, size_t len)
   20857           {
   20858             ...
   20859           }
   20860 
   20861           static void (*resolve_memcpy (void)) (void)
   20862           {
   20863             return my_memcpy; // we'll just always select this routine
   20864           }
   20865 
   20866      The exported header file declaring the function the user calls
   20867      would contain:
   20868 
   20869           extern void *memcpy (void *, const void *, size_t);
   20870 
   20871      allowing the user to call this as a regular function, unaware of
   20872      the implementation.  Finally, the indirect function needs to be
   20873      defined in the same translation unit as the resolver function:
   20874 
   20875           void *memcpy (void *, const void *, size_t)
   20876                __attribute__ ((ifunc ("resolve_memcpy")));
   20877 
   20878      Indirect functions cannot be weak, and require a recent binutils
   20879      (at least version 2.20.1), and GNU C library (at least version
   20880      2.11.1).
   20881 
   20882 `interrupt_handler'
   20883      Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
   20884      and SH to indicate that the specified function is an interrupt
   20885      handler.  The compiler will generate function entry and exit
   20886      sequences suitable for use in an interrupt handler when this
   20887      attribute is present.
   20888 
   20889 `interrupt_thread'
   20890      Use this attribute on fido, a subarchitecture of the m68k, to
   20891      indicate that the specified function is an interrupt handler that
   20892      is designed to run as a thread.  The compiler omits generate
   20893      prologue/epilogue sequences and replaces the return instruction
   20894      with a `sleep' instruction.  This attribute is available only on
   20895      fido.
   20896 
   20897 `isr'
   20898      Use this attribute on ARM to write Interrupt Service Routines.
   20899      This is an alias to the `interrupt' attribute above.
   20900 
   20901 `kspisusp'
   20902      When used together with `interrupt_handler', `exception_handler'
   20903      or `nmi_handler', code will be generated to load the stack pointer
   20904      from the USP register in the function prologue.
   20905 
   20906 `l1_text'
   20907      This attribute specifies a function to be placed into L1
   20908      Instruction SRAM. The function will be put into a specific section
   20909      named `.l1.text'.  With `-mfdpic', function calls with a such
   20910      function as the callee or caller will use inlined PLT.
   20911 
   20912 `l2'
   20913      On the Blackfin, this attribute specifies a function to be placed
   20914      into L2 SRAM. The function will be put into a specific section
   20915      named `.l1.text'. With `-mfdpic', callers of such functions will
   20916      use an inlined PLT.
   20917 
   20918 `leaf'
   20919      Calls to external functions with this attribute must return to the
   20920      current compilation unit only by return or by exception handling.
   20921      In particular, leaf functions are not allowed to call callback
   20922      function passed to it from the current compilation unit or
   20923      directly call functions exported by the unit or longjmp into the
   20924      unit.  Leaf function might still call functions from other
   20925      compilation units and thus they are not necessarily leaf in the
   20926      sense that they contain no function calls at all.
   20927 
   20928      The attribute is intended for library functions to improve
   20929      dataflow analysis.  The compiler takes the hint that any data not
   20930      escaping the current compilation unit can not be used or modified
   20931      by the leaf function.  For example, the `sin' function is a leaf
   20932      function, but `qsort' is not.
   20933 
   20934      Note that leaf functions might invoke signals and signal handlers
   20935      might be defined in the current compilation unit and use static
   20936      variables.  The only compliant way to write such a signal handler
   20937      is to declare such variables `volatile'.
   20938 
   20939      The attribute has no effect on functions defined within the
   20940      current compilation unit.  This is to allow easy merging of
   20941      multiple compilation units into one, for example, by using the
   20942      link time optimization.  For this reason the attribute is not
   20943      allowed on types to annotate indirect calls.
   20944 
   20945 `long_call/short_call'
   20946      This attribute specifies how a particular function is called on
   20947      ARM.  Both attributes override the `-mlong-calls' (*note ARM
   20948      Options::) command-line switch and `#pragma long_calls' settings.
   20949      The `long_call' attribute indicates that the function might be far
   20950      away from the call site and require a different (more expensive)
   20951      calling sequence.   The `short_call' attribute always places the
   20952      offset to the function from the call site into the `BL'
   20953      instruction directly.
   20954 
   20955 `longcall/shortcall'
   20956      On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
   20957      indicates that the function might be far away from the call site
   20958      and require a different (more expensive) calling sequence.  The
   20959      `shortcall' attribute indicates that the function is always close
   20960      enough for the shorter calling sequence to be used.  These
   20961      attributes override both the `-mlongcall' switch and, on the
   20962      RS/6000 and PowerPC, the `#pragma longcall' setting.
   20963 
   20964      *Note RS/6000 and PowerPC Options::, for more information on
   20965      whether long calls are necessary.
   20966 
   20967 `long_call/near/far'
   20968      These attributes specify how a particular function is called on
   20969      MIPS.  The attributes override the `-mlong-calls' (*note MIPS
   20970      Options::) command-line switch.  The `long_call' and `far'
   20971      attributes are synonyms, and cause the compiler to always call the
   20972      function by first loading its address into a register, and then
   20973      using the contents of that register.  The `near' attribute has the
   20974      opposite effect; it specifies that non-PIC calls should be made
   20975      using the more efficient `jal' instruction.
   20976 
   20977 `malloc'
   20978      The `malloc' attribute is used to tell the compiler that a function
   20979      may be treated as if any non-`NULL' pointer it returns cannot
   20980      alias any other pointer valid when the function returns.  This
   20981      will often improve optimization.  Standard functions with this
   20982      property include `malloc' and `calloc'.  `realloc'-like functions
   20983      have this property as long as the old pointer is never referred to
   20984      (including comparing it to the new pointer) after the function
   20985      returns a non-`NULL' value.
   20986 
   20987 `mips16/nomips16'
   20988      On MIPS targets, you can use the `mips16' and `nomips16' function
   20989      attributes to locally select or turn off MIPS16 code generation.
   20990      A function with the `mips16' attribute is emitted as MIPS16 code,
   20991      while MIPS16 code generation is disabled for functions with the
   20992      `nomips16' attribute.  These attributes override the `-mips16' and
   20993      `-mno-mips16' options on the command line (*note MIPS Options::).
   20994 
   20995      When compiling files containing mixed MIPS16 and non-MIPS16 code,
   20996      the preprocessor symbol `__mips16' reflects the setting on the
   20997      command line, not that within individual functions.  Mixed MIPS16
   20998      and non-MIPS16 code may interact badly with some GCC extensions
   20999      such as `__builtin_apply' (*note Constructing Calls::).
   21000 
   21001 `model (MODEL-NAME)'
   21002      On the M32R/D, use this attribute to set the addressability of an
   21003      object, and of the code generated for a function.  The identifier
   21004      MODEL-NAME is one of `small', `medium', or `large', representing
   21005      each of the code models.
   21006 
   21007      Small model objects live in the lower 16MB of memory (so that their
   21008      addresses can be loaded with the `ld24' instruction), and are
   21009      callable with the `bl' instruction.
   21010 
   21011      Medium model objects may live anywhere in the 32-bit address space
   21012      (the compiler will generate `seth/add3' instructions to load their
   21013      addresses), and are callable with the `bl' instruction.
   21014 
   21015      Large model objects may live anywhere in the 32-bit address space
   21016      (the compiler will generate `seth/add3' instructions to load their
   21017      addresses), and may not be reachable with the `bl' instruction
   21018      (the compiler will generate the much slower `seth/add3/jl'
   21019      instruction sequence).
   21020 
   21021      On IA-64, use this attribute to set the addressability of an
   21022      object.  At present, the only supported identifier for MODEL-NAME
   21023      is `small', indicating addressability via "small" (22-bit)
   21024      addresses (so that their addresses can be loaded with the `addl'
   21025      instruction).  Caveat: such addressing is by definition not
   21026      position independent and hence this attribute must not be used for
   21027      objects defined by shared libraries.
   21028 
   21029 `ms_abi/sysv_abi'
   21030      On 64-bit x86_64-*-* targets, you can use an ABI attribute to
   21031      indicate which calling convention should be used for a function.
   21032      The `ms_abi' attribute tells the compiler to use the Microsoft
   21033      ABI, while the `sysv_abi' attribute tells the compiler to use the
   21034      ABI used on GNU/Linux and other systems.  The default is to use
   21035      the Microsoft ABI when targeting Windows.  On all other systems,
   21036      the default is the AMD ABI.
   21037 
   21038      Note, the `ms_abi' attribute for Windows targets currently requires
   21039      the `-maccumulate-outgoing-args' option.
   21040 
   21041 `callee_pop_aggregate_return (NUMBER)'
   21042      On 32-bit i?86-*-* targets, you can control by those attribute for
   21043      aggregate return in memory, if the caller is responsible to pop
   21044      the hidden pointer together with the rest of the arguments -
   21045      NUMBER equal to zero -, or if the callee is responsible to pop
   21046      hidden pointer - NUMBER equal to one.
   21047 
   21048      For i?86-netware, the caller pops the stack for the hidden
   21049      arguments pointing to aggregate return value.  This differs from
   21050      the default i386 ABI which assumes that the callee pops the stack
   21051      for hidden pointer.
   21052 
   21053 `ms_hook_prologue'
   21054      On 32 bit i[34567]86-*-* targets and 64 bit x86_64-*-* targets,
   21055      you can use this function attribute to make gcc generate the
   21056      "hot-patching" function prologue used in Win32 API functions in
   21057      Microsoft Windows XP Service Pack 2 and newer.
   21058 
   21059 `naked'
   21060      Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
   21061      indicate that the specified function does not need
   21062      prologue/epilogue sequences generated by the compiler.  It is up
   21063      to the programmer to provide these sequences. The only statements
   21064      that can be safely included in naked functions are `asm'
   21065      statements that do not have operands.  All other statements,
   21066      including declarations of local variables, `if' statements, and so
   21067      forth, should be avoided.  Naked functions should be used to
   21068      implement the body of an assembly function, while allowing the
   21069      compiler to construct the requisite function declaration for the
   21070      assembler.
   21071 
   21072 `near'
   21073      On 68HC11 and 68HC12 the `near' attribute causes the compiler to
   21074      use the normal calling convention based on `jsr' and `rts'.  This
   21075      attribute can be used to cancel the effect of the `-mlong-calls'
   21076      option.
   21077 
   21078      On MeP targets this attribute causes the compiler to assume the
   21079      called function is close enough to use the normal calling
   21080      convention, overriding the `-mtf' command line option.
   21081 
   21082 `nesting'
   21083      Use this attribute together with `interrupt_handler',
   21084      `exception_handler' or `nmi_handler' to indicate that the function
   21085      entry code should enable nested interrupts or exceptions.
   21086 
   21087 `nmi_handler'
   21088      Use this attribute on the Blackfin to indicate that the specified
   21089      function is an NMI handler.  The compiler will generate function
   21090      entry and exit sequences suitable for use in an NMI handler when
   21091      this attribute is present.
   21092 
   21093 `no_instrument_function'
   21094      If `-finstrument-functions' is given, profiling function calls will
   21095      be generated at entry and exit of most user-compiled functions.
   21096      Functions with this attribute will not be so instrumented.
   21097 
   21098 `no_split_stack'
   21099      If `-fsplit-stack' is given, functions will have a small prologue
   21100      which decides whether to split the stack.  Functions with the
   21101      `no_split_stack' attribute will not have that prologue, and thus
   21102      may run with only a small amount of stack space available.
   21103 
   21104 `noinline'
   21105      This function attribute prevents a function from being considered
   21106      for inlining.  If the function does not have side-effects, there
   21107      are optimizations other than inlining that causes function calls
   21108      to be optimized away, although the function call is live.  To keep
   21109      such calls from being optimized away, put
   21110           asm ("");
   21111      (*note Extended Asm::) in the called function, to serve as a
   21112      special side-effect.
   21113 
   21114 `noclone'
   21115      This function attribute prevents a function from being considered
   21116      for cloning - a mechanism which produces specialized copies of
   21117      functions and which is (currently) performed by interprocedural
   21118      constant propagation.
   21119 
   21120 `nonnull (ARG-INDEX, ...)'
   21121      The `nonnull' attribute specifies that some function parameters
   21122      should be non-null pointers.  For instance, the declaration:
   21123 
   21124           extern void *
   21125           my_memcpy (void *dest, const void *src, size_t len)
   21126                   __attribute__((nonnull (1, 2)));
   21127 
   21128      causes the compiler to check that, in calls to `my_memcpy',
   21129      arguments DEST and SRC are non-null.  If the compiler determines
   21130      that a null pointer is passed in an argument slot marked as
   21131      non-null, and the `-Wnonnull' option is enabled, a warning is
   21132      issued.  The compiler may also choose to make optimizations based
   21133      on the knowledge that certain function arguments will not be null.
   21134 
   21135      Since non-static C++ methods have an implicit `this' argument, the
   21136      arguments of such methods should be counted from two, not one, when
   21137      giving values for ARG-INDEX.
   21138 
   21139      If no argument index list is given to the `nonnull' attribute, all
   21140      pointer arguments are marked as non-null.  To illustrate, the
   21141      following declaration is equivalent to the previous example:
   21142 
   21143           extern void *
   21144           my_memcpy (void *dest, const void *src, size_t len)
   21145                   __attribute__((nonnull));
   21146 
   21147 `noreturn'
   21148      A few standard library functions, such as `abort' and `exit',
   21149      cannot return.  GCC knows this automatically.  Some programs define
   21150      their own functions that never return.  You can declare them
   21151      `noreturn' to tell the compiler this fact.  For example,
   21152 
   21153           void fatal () __attribute__ ((noreturn));
   21154 
   21155           void
   21156           fatal (/* ... */)
   21157           {
   21158             /* ... */ /* Print error message. */ /* ... */
   21159             exit (1);
   21160           }
   21161 
   21162      The `noreturn' keyword tells the compiler to assume that `fatal'
   21163      cannot return.  It can then optimize without regard to what would
   21164      happen if `fatal' ever did return.  This makes slightly better
   21165      code.  More importantly, it helps avoid spurious warnings of
   21166      uninitialized variables.
   21167 
   21168      The `noreturn' keyword does not affect the exceptional path when
   21169      that applies: a `noreturn'-marked function may still return to the
   21170      caller by throwing an exception or calling `longjmp'.
   21171 
   21172      Do not assume that registers saved by the calling function are
   21173      restored before calling the `noreturn' function.
   21174 
   21175      It does not make sense for a `noreturn' function to have a return
   21176      type other than `void'.
   21177 
   21178      The attribute `noreturn' is not implemented in GCC versions
   21179      earlier than 2.5.  An alternative way to declare that a function
   21180      does not return, which works in the current version and in some
   21181      older versions, is as follows:
   21182 
   21183           typedef void voidfn ();
   21184 
   21185           volatile voidfn fatal;
   21186 
   21187      This approach does not work in GNU C++.
   21188 
   21189 `nothrow'
   21190      The `nothrow' attribute is used to inform the compiler that a
   21191      function cannot throw an exception.  For example, most functions in
   21192      the standard C library can be guaranteed not to throw an exception
   21193      with the notable exceptions of `qsort' and `bsearch' that take
   21194      function pointer arguments.  The `nothrow' attribute is not
   21195      implemented in GCC versions earlier than 3.3.
   21196 
   21197 `optimize'
   21198      The `optimize' attribute is used to specify that a function is to
   21199      be compiled with different optimization options than specified on
   21200      the command line.  Arguments can either be numbers or strings.
   21201      Numbers are assumed to be an optimization level.  Strings that
   21202      begin with `O' are assumed to be an optimization option, while
   21203      other options are assumed to be used with a `-f' prefix.  You can
   21204      also use the `#pragma GCC optimize' pragma to set the optimization
   21205      options that affect more than one function.  *Note Function
   21206      Specific Option Pragmas::, for details about the `#pragma GCC
   21207      optimize' pragma.
   21208 
   21209      This can be used for instance to have frequently executed functions
   21210      compiled with more aggressive optimization options that produce
   21211      faster and larger code, while other functions can be called with
   21212      less aggressive options.
   21213 
   21214 `OS_main/OS_task'
   21215      On AVR, functions with the `OS_main' or `OS_task' attribute do not
   21216      save/restore any call-saved register in their prologue/epilogue.
   21217 
   21218      The `OS_main' attribute can be used when there _is guarantee_ that
   21219      interrupts are disabled at the time when the function is entered.
   21220      This will save resources when the stack pointer has to be changed
   21221      to set up a frame for local variables.
   21222 
   21223      The `OS_task' attribute can be used when there is _no guarantee_
   21224      that interrupts are disabled at that time when the function is
   21225      entered like for, e.g. task functions in a multi-threading
   21226      operating system. In that case, changing the stack pointer
   21227      register will be guarded by save/clear/restore of the global
   21228      interrupt enable flag.
   21229 
   21230      The differences to the `naked' function attrubute are:
   21231         * `naked' functions do not have a return instruction whereas
   21232           `OS_main' and `OS_task' functions will have a `RET' or `RETI'
   21233           return instruction.
   21234 
   21235         * `naked' functions do not set up a frame for local variables
   21236           or a frame pointer whereas `OS_main' and `OS_task' do this as
   21237           needed.
   21238 
   21239 `pcs'
   21240      The `pcs' attribute can be used to control the calling convention
   21241      used for a function on ARM.  The attribute takes an argument that
   21242      specifies the calling convention to use.
   21243 
   21244      When compiling using the AAPCS ABI (or a variant of that) then
   21245      valid values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In
   21246      order to use a variant other than `"aapcs"' then the compiler must
   21247      be permitted to use the appropriate co-processor registers (i.e.,
   21248      the VFP registers must be available in order to use `"aapcs-vfp"').
   21249      For example,
   21250 
   21251           /* Argument passed in r0, and result returned in r0+r1.  */
   21252           double f2d (float) __attribute__((pcs("aapcs")));
   21253 
   21254      Variadic functions always use the `"aapcs"' calling convention and
   21255      the compiler will reject attempts to specify an alternative.
   21256 
   21257 `pure'
   21258      Many functions have no effects except the return value and their
   21259      return value depends only on the parameters and/or global
   21260      variables.  Such a function can be subject to common subexpression
   21261      elimination and loop optimization just as an arithmetic operator
   21262      would be.  These functions should be declared with the attribute
   21263      `pure'.  For example,
   21264 
   21265           int square (int) __attribute__ ((pure));
   21266 
   21267      says that the hypothetical function `square' is safe to call fewer
   21268      times than the program says.
   21269 
   21270      Some of common examples of pure functions are `strlen' or `memcmp'.
   21271      Interesting non-pure functions are functions with infinite loops
   21272      or those depending on volatile memory or other system resource,
   21273      that may change between two consecutive calls (such as `feof' in a
   21274      multithreading environment).
   21275 
   21276      The attribute `pure' is not implemented in GCC versions earlier
   21277      than 2.96.
   21278 
   21279 `hot'
   21280      The `hot' attribute is used to inform the compiler that a function
   21281      is a hot spot of the compiled program.  The function is optimized
   21282      more aggressively and on many target it is placed into special
   21283      subsection of the text section so all hot functions appears close
   21284      together improving locality.
   21285 
   21286      When profile feedback is available, via `-fprofile-use', hot
   21287      functions are automatically detected and this attribute is ignored.
   21288 
   21289      The `hot' attribute is not implemented in GCC versions earlier
   21290      than 4.3.
   21291 
   21292 `cold'
   21293      The `cold' attribute is used to inform the compiler that a
   21294      function is unlikely executed.  The function is optimized for size
   21295      rather than speed and on many targets it is placed into special
   21296      subsection of the text section so all cold functions appears close
   21297      together improving code locality of non-cold parts of program.
   21298      The paths leading to call of cold functions within code are marked
   21299      as unlikely by the branch prediction mechanism. It is thus useful
   21300      to mark functions used to handle unlikely conditions, such as
   21301      `perror', as cold to improve optimization of hot functions that do
   21302      call marked functions in rare occasions.
   21303 
   21304      When profile feedback is available, via `-fprofile-use', hot
   21305      functions are automatically detected and this attribute is ignored.
   21306 
   21307      The `cold' attribute is not implemented in GCC versions earlier
   21308      than 4.3.
   21309 
   21310 `regparm (NUMBER)'
   21311      On the Intel 386, the `regparm' attribute causes the compiler to
   21312      pass arguments number one to NUMBER if they are of integral type
   21313      in registers EAX, EDX, and ECX instead of on the stack.  Functions
   21314      that take a variable number of arguments will continue to be
   21315      passed all of their arguments on the stack.
   21316 
   21317      Beware that on some ELF systems this attribute is unsuitable for
   21318      global functions in shared libraries with lazy binding (which is
   21319      the default).  Lazy binding will send the first call via resolving
   21320      code in the loader, which might assume EAX, EDX and ECX can be
   21321      clobbered, as per the standard calling conventions.  Solaris 8 is
   21322      affected by this.  GNU systems with GLIBC 2.1 or higher, and
   21323      FreeBSD, are believed to be safe since the loaders there save EAX,
   21324      EDX and ECX.  (Lazy binding can be disabled with the linker or the
   21325      loader if desired, to avoid the problem.)
   21326 
   21327 `sseregparm'
   21328      On the Intel 386 with SSE support, the `sseregparm' attribute
   21329      causes the compiler to pass up to 3 floating point arguments in
   21330      SSE registers instead of on the stack.  Functions that take a
   21331      variable number of arguments will continue to pass all of their
   21332      floating point arguments on the stack.
   21333 
   21334 `force_align_arg_pointer'
   21335      On the Intel x86, the `force_align_arg_pointer' attribute may be
   21336      applied to individual function definitions, generating an alternate
   21337      prologue and epilogue that realigns the runtime stack if necessary.
   21338      This supports mixing legacy codes that run with a 4-byte aligned
   21339      stack with modern codes that keep a 16-byte stack for SSE
   21340      compatibility.
   21341 
   21342 `resbank'
   21343      On the SH2A target, this attribute enables the high-speed register
   21344      saving and restoration using a register bank for
   21345      `interrupt_handler' routines.  Saving to the bank is performed
   21346      automatically after the CPU accepts an interrupt that uses a
   21347      register bank.
   21348 
   21349      The nineteen 32-bit registers comprising general register R0 to
   21350      R14, control register GBR, and system registers MACH, MACL, and PR
   21351      and the vector table address offset are saved into a register
   21352      bank.  Register banks are stacked in first-in last-out (FILO)
   21353      sequence.  Restoration from the bank is executed by issuing a
   21354      RESBANK instruction.
   21355 
   21356 `returns_twice'
   21357      The `returns_twice' attribute tells the compiler that a function
   21358      may return more than one time.  The compiler will ensure that all
   21359      registers are dead before calling such a function and will emit a
   21360      warning about the variables that may be clobbered after the second
   21361      return from the function.  Examples of such functions are `setjmp'
   21362      and `vfork'.  The `longjmp'-like counterpart of such function, if
   21363      any, might need to be marked with the `noreturn' attribute.
   21364 
   21365 `saveall'
   21366      Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
   21367      indicate that all registers except the stack pointer should be
   21368      saved in the prologue regardless of whether they are used or not.
   21369 
   21370 `save_volatiles'
   21371      Use this attribute on the MicroBlaze to indicate that the function
   21372      is an interrupt handler.  All volatile registers (in addition to
   21373      non-volatile registers) will be saved in the function prologue.
   21374      If the function is a leaf function, only volatiles used by the
   21375      function are saved.  A normal function return is generated instead
   21376      of a return from interrupt.
   21377 
   21378 `section ("SECTION-NAME")'
   21379      Normally, the compiler places the code it generates in the `text'
   21380      section.  Sometimes, however, you need additional sections, or you
   21381      need certain particular functions to appear in special sections.
   21382      The `section' attribute specifies that a function lives in a
   21383      particular section.  For example, the declaration:
   21384 
   21385           extern void foobar (void) __attribute__ ((section ("bar")));
   21386 
   21387      puts the function `foobar' in the `bar' section.
   21388 
   21389      Some file formats do not support arbitrary sections so the
   21390      `section' attribute is not available on all platforms.  If you
   21391      need to map the entire contents of a module to a particular
   21392      section, consider using the facilities of the linker instead.
   21393 
   21394 `sentinel'
   21395      This function attribute ensures that a parameter in a function
   21396      call is an explicit `NULL'.  The attribute is only valid on
   21397      variadic functions.  By default, the sentinel is located at
   21398      position zero, the last parameter of the function call.  If an
   21399      optional integer position argument P is supplied to the attribute,
   21400      the sentinel must be located at position P counting backwards from
   21401      the end of the argument list.
   21402 
   21403           __attribute__ ((sentinel))
   21404           is equivalent to
   21405           __attribute__ ((sentinel(0)))
   21406 
   21407      The attribute is automatically set with a position of 0 for the
   21408      built-in functions `execl' and `execlp'.  The built-in function
   21409      `execle' has the attribute set with a position of 1.
   21410 
   21411      A valid `NULL' in this context is defined as zero with any pointer
   21412      type.  If your system defines the `NULL' macro with an integer type
   21413      then you need to add an explicit cast.  GCC replaces `stddef.h'
   21414      with a copy that redefines NULL appropriately.
   21415 
   21416      The warnings for missing or incorrect sentinels are enabled with
   21417      `-Wformat'.
   21418 
   21419 `short_call'
   21420      See long_call/short_call.
   21421 
   21422 `shortcall'
   21423      See longcall/shortcall.
   21424 
   21425 `signal'
   21426      Use this attribute on the AVR to indicate that the specified
   21427      function is a signal handler.  The compiler will generate function
   21428      entry and exit sequences suitable for use in a signal handler when
   21429      this attribute is present.  Interrupts will be disabled inside the
   21430      function.
   21431 
   21432 `sp_switch'
   21433      Use this attribute on the SH to indicate an `interrupt_handler'
   21434      function should switch to an alternate stack.  It expects a string
   21435      argument that names a global variable holding the address of the
   21436      alternate stack.
   21437 
   21438           void *alt_stack;
   21439           void f () __attribute__ ((interrupt_handler,
   21440                                     sp_switch ("alt_stack")));
   21441 
   21442 `stdcall'
   21443      On the Intel 386, the `stdcall' attribute causes the compiler to
   21444      assume that the called function will pop off the stack space used
   21445      to pass arguments, unless it takes a variable number of arguments.
   21446 
   21447 `syscall_linkage'
   21448      This attribute is used to modify the IA64 calling convention by
   21449      marking all input registers as live at all function exits.  This
   21450      makes it possible to restart a system call after an interrupt
   21451      without having to save/restore the input registers.  This also
   21452      prevents kernel data from leaking into application code.
   21453 
   21454 `target'
   21455      The `target' attribute is used to specify that a function is to be
   21456      compiled with different target options than specified on the
   21457      command line.  This can be used for instance to have functions
   21458      compiled with a different ISA (instruction set architecture) than
   21459      the default.  You can also use the `#pragma GCC target' pragma to
   21460      set more than one function to be compiled with specific target
   21461      options.  *Note Function Specific Option Pragmas::, for details
   21462      about the `#pragma GCC target' pragma.
   21463 
   21464      For instance on a 386, you could compile one function with
   21465      `target("sse4.1,arch=core2")' and another with
   21466      `target("sse4a,arch=amdfam10")' that would be equivalent to
   21467      compiling the first function with `-msse4.1' and `-march=core2'
   21468      options, and the second function with `-msse4a' and
   21469      `-march=amdfam10' options.  It is up to the user to make sure that
   21470      a function is only invoked on a machine that supports the
   21471      particular ISA it was compiled for (for example by using `cpuid'
   21472      on 386 to determine what feature bits and architecture family are
   21473      used).
   21474 
   21475           int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
   21476           int sse3_func (void) __attribute__ ((__target__ ("sse3")));
   21477 
   21478      On the 386, the following options are allowed:
   21479 
   21480     `abm'
   21481     `no-abm'
   21482           Enable/disable the generation of the advanced bit
   21483           instructions.
   21484 
   21485     `aes'
   21486     `no-aes'
   21487           Enable/disable the generation of the AES instructions.
   21488 
   21489     `mmx'
   21490     `no-mmx'
   21491           Enable/disable the generation of the MMX instructions.
   21492 
   21493     `pclmul'
   21494     `no-pclmul'
   21495           Enable/disable the generation of the PCLMUL instructions.
   21496 
   21497     `popcnt'
   21498     `no-popcnt'
   21499           Enable/disable the generation of the POPCNT instruction.
   21500 
   21501     `sse'
   21502     `no-sse'
   21503           Enable/disable the generation of the SSE instructions.
   21504 
   21505     `sse2'
   21506     `no-sse2'
   21507           Enable/disable the generation of the SSE2 instructions.
   21508 
   21509     `sse3'
   21510     `no-sse3'
   21511           Enable/disable the generation of the SSE3 instructions.
   21512 
   21513     `sse4'
   21514     `no-sse4'
   21515           Enable/disable the generation of the SSE4 instructions (both
   21516           SSE4.1 and SSE4.2).
   21517 
   21518     `sse4.1'
   21519     `no-sse4.1'
   21520           Enable/disable the generation of the sse4.1 instructions.
   21521 
   21522     `sse4.2'
   21523     `no-sse4.2'
   21524           Enable/disable the generation of the sse4.2 instructions.
   21525 
   21526     `sse4a'
   21527     `no-sse4a'
   21528           Enable/disable the generation of the SSE4A instructions.
   21529 
   21530     `fma4'
   21531     `no-fma4'
   21532           Enable/disable the generation of the FMA4 instructions.
   21533 
   21534     `xop'
   21535     `no-xop'
   21536           Enable/disable the generation of the XOP instructions.
   21537 
   21538     `lwp'
   21539     `no-lwp'
   21540           Enable/disable the generation of the LWP instructions.
   21541 
   21542     `ssse3'
   21543     `no-ssse3'
   21544           Enable/disable the generation of the SSSE3 instructions.
   21545 
   21546     `cld'
   21547     `no-cld'
   21548           Enable/disable the generation of the CLD before string moves.
   21549 
   21550     `fancy-math-387'
   21551     `no-fancy-math-387'
   21552           Enable/disable the generation of the `sin', `cos', and `sqrt'
   21553           instructions on the 387 floating point unit.
   21554 
   21555     `fused-madd'
   21556     `no-fused-madd'
   21557           Enable/disable the generation of the fused multiply/add
   21558           instructions.
   21559 
   21560     `ieee-fp'
   21561     `no-ieee-fp'
   21562           Enable/disable the generation of floating point that depends
   21563           on IEEE arithmetic.
   21564 
   21565     `inline-all-stringops'
   21566     `no-inline-all-stringops'
   21567           Enable/disable inlining of string operations.
   21568 
   21569     `inline-stringops-dynamically'
   21570     `no-inline-stringops-dynamically'
   21571           Enable/disable the generation of the inline code to do small
   21572           string operations and calling the library routines for large
   21573           operations.
   21574 
   21575     `align-stringops'
   21576     `no-align-stringops'
   21577           Do/do not align destination of inlined string operations.
   21578 
   21579     `recip'
   21580     `no-recip'
   21581           Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
   21582           RSQRTPS instructions followed an additional Newton-Raphson
   21583           step instead of doing a floating point division.
   21584 
   21585     `arch=ARCH'
   21586           Specify the architecture to generate code for in compiling
   21587           the function.
   21588 
   21589     `tune=TUNE'
   21590           Specify the architecture to tune for in compiling the
   21591           function.
   21592 
   21593     `fpmath=FPMATH'
   21594           Specify which floating point unit to use.  The
   21595           `target("fpmath=sse,387")' option must be specified as
   21596           `target("fpmath=sse+387")' because the comma would separate
   21597           different options.
   21598 
   21599      On the PowerPC, the following options are allowed:
   21600 
   21601     `altivec'
   21602     `no-altivec'
   21603           Generate code that uses (does not use) AltiVec instructions.
   21604           In 32-bit code, you cannot enable Altivec instructions unless
   21605           `-mabi=altivec' was used on the command line.
   21606 
   21607     `cmpb'
   21608     `no-cmpb'
   21609           Generate code that uses (does not use) the compare bytes
   21610           instruction implemented on the POWER6 processor and other
   21611           processors that support the PowerPC V2.05 architecture.
   21612 
   21613     `dlmzb'
   21614     `no-dlmzb'
   21615           Generate code that uses (does not use) the string-search
   21616           `dlmzb' instruction on the IBM 405, 440, 464 and 476
   21617           processors.  This instruction is generated by default when
   21618           targetting those processors.
   21619 
   21620     `fprnd'
   21621     `no-fprnd'
   21622           Generate code that uses (does not use) the FP round to integer
   21623           instructions implemented on the POWER5+ processor and other
   21624           processors that support the PowerPC V2.03 architecture.
   21625 
   21626     `hard-dfp'
   21627     `no-hard-dfp'
   21628           Generate code that uses (does not use) the decimal floating
   21629           point instructions implemented on some POWER processors.
   21630 
   21631     `isel'
   21632     `no-isel'
   21633           Generate code that uses (does not use) ISEL instruction.
   21634 
   21635     `mfcrf'
   21636     `no-mfcrf'
   21637           Generate code that uses (does not use) the move from condition
   21638           register field instruction implemented on the POWER4
   21639           processor and other processors that support the PowerPC V2.01
   21640           architecture.
   21641 
   21642     `mfpgpr'
   21643     `no-mfpgpr'
   21644           Generate code that uses (does not use) the FP move to/from
   21645           general purpose register instructions implemented on the
   21646           POWER6X processor and other processors that support the
   21647           extended PowerPC V2.05 architecture.
   21648 
   21649     `mulhw'
   21650     `no-mulhw'
   21651           Generate code that uses (does not use) the half-word multiply
   21652           and multiply-accumulate instructions on the IBM 405, 440, 464
   21653           and 476 processors.  These instructions are generated by
   21654           default when targetting those processors.
   21655 
   21656     `multiple'
   21657     `no-multiple'
   21658           Generate code that uses (does not use) the load multiple word
   21659           instructions and the store multiple word instructions.
   21660 
   21661     `update'
   21662     `no-update'
   21663           Generate code that uses (does not use) the load or store
   21664           instructions that update the base register to the address of
   21665           the calculated memory location.
   21666 
   21667     `popcntb'
   21668     `no-popcntb'
   21669           Generate code that uses (does not use) the popcount and double
   21670           precision FP reciprocal estimate instruction implemented on
   21671           the POWER5 processor and other processors that support the
   21672           PowerPC V2.02 architecture.
   21673 
   21674     `popcntd'
   21675     `no-popcntd'
   21676           Generate code that uses (does not use) the popcount
   21677           instruction implemented on the POWER7 processor and other
   21678           processors that support the PowerPC V2.06 architecture.
   21679 
   21680     `powerpc-gfxopt'
   21681     `no-powerpc-gfxopt'
   21682           Generate code that uses (does not use) the optional PowerPC
   21683           architecture instructions in the Graphics group, including
   21684           floating-point select.
   21685 
   21686     `powerpc-gpopt'
   21687     `no-powerpc-gpopt'
   21688           Generate code that uses (does not use) the optional PowerPC
   21689           architecture instructions in the General Purpose group,
   21690           including floating-point square root.
   21691 
   21692     `recip-precision'
   21693     `no-recip-precision'
   21694           Assume (do not assume) that the reciprocal estimate
   21695           instructions provide higher precision estimates than is
   21696           mandated by the powerpc ABI.
   21697 
   21698     `string'
   21699     `no-string'
   21700           Generate code that uses (does not use) the load string
   21701           instructions and the store string word instructions to save
   21702           multiple registers and do small block moves.
   21703 
   21704     `vsx'
   21705     `no-vsx'
   21706           Generate code that uses (does not use) vector/scalar (VSX)
   21707           instructions, and also enable the use of built-in functions
   21708           that allow more direct access to the VSX instruction set.  In
   21709           32-bit code, you cannot enable VSX or Altivec instructions
   21710           unless `-mabi=altivec' was used on the command line.
   21711 
   21712     `friz'
   21713     `no-friz'
   21714           Generate (do not generate) the `friz' instruction when the
   21715           `-funsafe-math-optimizations' option is used to optimize
   21716           rounding a floating point value to 64-bit integer and back to
   21717           floating point.  The `friz' instruction does not return the
   21718           same value if the floating point number is too large to fit
   21719           in an integer.
   21720 
   21721     `avoid-indexed-addresses'
   21722     `no-avoid-indexed-addresses'
   21723           Generate code that tries to avoid (not avoid) the use of
   21724           indexed load or store instructions.
   21725 
   21726     `paired'
   21727     `no-paired'
   21728           Generate code that uses (does not use) the generation of
   21729           PAIRED simd instructions.
   21730 
   21731     `longcall'
   21732     `no-longcall'
   21733           Generate code that assumes (does not assume) that all calls
   21734           are far away so that a longer more expensive calling sequence
   21735           is required.
   21736 
   21737     `cpu=CPU'
   21738           Specify the architecture to generate code for when compiling
   21739           the function.  If you select the `"target("cpu=power7)"'
   21740           attribute when generating 32-bit code, VSX and Altivec
   21741           instructions are not generated unless you use the
   21742           `-mabi=altivec' option on the command line.
   21743 
   21744     `tune=TUNE'
   21745           Specify the architecture to tune for when compiling the
   21746           function.  If you do not specify the `target("tune=TUNE")'
   21747           attribute and you do specify the `target("cpu=CPU")'
   21748           attribute, compilation will tune for the CPU architecture,
   21749           and not the default tuning specified on the command line.
   21750 
   21751      On the 386/x86_64 and PowerPC backends, you can use either multiple
   21752      strings to specify multiple options, or you can separate the option
   21753      with a comma (`,').
   21754 
   21755      On the 386/x86_64 and PowerPC backends, the inliner will not
   21756      inline a function that has different target options than the
   21757      caller, unless the callee has a subset of the target options of
   21758      the caller.  For example a function declared with `target("sse3")'
   21759      can inline a function with `target("sse2")', since `-msse3'
   21760      implies `-msse2'.
   21761 
   21762      The `target' attribute is not implemented in GCC versions earlier
   21763      than 4.4 for the i386/x86_64 and 4.6 for the PowerPC backends.  It
   21764      is not currently implemented for other backends.
   21765 
   21766 `tiny_data'
   21767      Use this attribute on the H8/300H and H8S to indicate that the
   21768      specified variable should be placed into the tiny data section.
   21769      The compiler will generate more efficient code for loads and stores
   21770      on data in the tiny data section.  Note the tiny data area is
   21771      limited to slightly under 32kbytes of data.
   21772 
   21773 `trap_exit'
   21774      Use this attribute on the SH for an `interrupt_handler' to return
   21775      using `trapa' instead of `rte'.  This attribute expects an integer
   21776      argument specifying the trap number to be used.
   21777 
   21778 `unused'
   21779      This attribute, attached to a function, means that the function is
   21780      meant to be possibly unused.  GCC will not produce a warning for
   21781      this function.
   21782 
   21783 `used'
   21784      This attribute, attached to a function, means that code must be
   21785      emitted for the function even if it appears that the function is
   21786      not referenced.  This is useful, for example, when the function is
   21787      referenced only in inline assembly.
   21788 
   21789 `version_id'
   21790      This IA64 HP-UX attribute, attached to a global variable or
   21791      function, renames a symbol to contain a version string, thus
   21792      allowing for function level versioning.  HP-UX system header files
   21793      may use version level functioning for some system calls.
   21794 
   21795           extern int foo () __attribute__((version_id ("20040821")));
   21796 
   21797      Calls to FOO will be mapped to calls to FOO{20040821}.
   21798 
   21799 `visibility ("VISIBILITY_TYPE")'
   21800      This attribute affects the linkage of the declaration to which it
   21801      is attached.  There are four supported VISIBILITY_TYPE values:
   21802      default, hidden, protected or internal visibility.
   21803 
   21804           void __attribute__ ((visibility ("protected")))
   21805           f () { /* Do something. */; }
   21806           int i __attribute__ ((visibility ("hidden")));
   21807 
   21808      The possible values of VISIBILITY_TYPE correspond to the
   21809      visibility settings in the ELF gABI.
   21810 
   21811     "default"
   21812           Default visibility is the normal case for the object file
   21813           format.  This value is available for the visibility attribute
   21814           to override other options that may change the assumed
   21815           visibility of entities.
   21816 
   21817           On ELF, default visibility means that the declaration is
   21818           visible to other modules and, in shared libraries, means that
   21819           the declared entity may be overridden.
   21820 
   21821           On Darwin, default visibility means that the declaration is
   21822           visible to other modules.
   21823 
   21824           Default visibility corresponds to "external linkage" in the
   21825           language.
   21826 
   21827     "hidden"
   21828           Hidden visibility indicates that the entity declared will
   21829           have a new form of linkage, which we'll call "hidden
   21830           linkage".  Two declarations of an object with hidden linkage
   21831           refer to the same object if they are in the same shared
   21832           object.
   21833 
   21834     "internal"
   21835           Internal visibility is like hidden visibility, but with
   21836           additional processor specific semantics.  Unless otherwise
   21837           specified by the psABI, GCC defines internal visibility to
   21838           mean that a function is _never_ called from another module.
   21839           Compare this with hidden functions which, while they cannot
   21840           be referenced directly by other modules, can be referenced
   21841           indirectly via function pointers.  By indicating that a
   21842           function cannot be called from outside the module, GCC may
   21843           for instance omit the load of a PIC register since it is known
   21844           that the calling function loaded the correct value.
   21845 
   21846     "protected"
   21847           Protected visibility is like default visibility except that it
   21848           indicates that references within the defining module will
   21849           bind to the definition in that module.  That is, the declared
   21850           entity cannot be overridden by another module.
   21851 
   21852 
   21853      All visibilities are supported on many, but not all, ELF targets
   21854      (supported when the assembler supports the `.visibility'
   21855      pseudo-op).  Default visibility is supported everywhere.  Hidden
   21856      visibility is supported on Darwin targets.
   21857 
   21858      The visibility attribute should be applied only to declarations
   21859      which would otherwise have external linkage.  The attribute should
   21860      be applied consistently, so that the same entity should not be
   21861      declared with different settings of the attribute.
   21862 
   21863      In C++, the visibility attribute applies to types as well as
   21864      functions and objects, because in C++ types have linkage.  A class
   21865      must not have greater visibility than its non-static data member
   21866      types and bases, and class members default to the visibility of
   21867      their class.  Also, a declaration without explicit visibility is
   21868      limited to the visibility of its type.
   21869 
   21870      In C++, you can mark member functions and static member variables
   21871      of a class with the visibility attribute.  This is useful if you
   21872      know a particular method or static member variable should only be
   21873      used from one shared object; then you can mark it hidden while the
   21874      rest of the class has default visibility.  Care must be taken to
   21875      avoid breaking the One Definition Rule; for example, it is usually
   21876      not useful to mark an inline method as hidden without marking the
   21877      whole class as hidden.
   21878 
   21879      A C++ namespace declaration can also have the visibility attribute.
   21880      This attribute applies only to the particular namespace body, not
   21881      to other definitions of the same namespace; it is equivalent to
   21882      using `#pragma GCC visibility' before and after the namespace
   21883      definition (*note Visibility Pragmas::).
   21884 
   21885      In C++, if a template argument has limited visibility, this
   21886      restriction is implicitly propagated to the template instantiation.
   21887      Otherwise, template instantiations and specializations default to
   21888      the visibility of their template.
   21889 
   21890      If both the template and enclosing class have explicit visibility,
   21891      the visibility from the template is used.
   21892 
   21893 `vliw'
   21894      On MeP, the `vliw' attribute tells the compiler to emit
   21895      instructions in VLIW mode instead of core mode.  Note that this
   21896      attribute is not allowed unless a VLIW coprocessor has been
   21897      configured and enabled through command line options.
   21898 
   21899 `warn_unused_result'
   21900      The `warn_unused_result' attribute causes a warning to be emitted
   21901      if a caller of the function with this attribute does not use its
   21902      return value.  This is useful for functions where not checking the
   21903      result is either a security problem or always a bug, such as
   21904      `realloc'.
   21905 
   21906           int fn () __attribute__ ((warn_unused_result));
   21907           int foo ()
   21908           {
   21909             if (fn () < 0) return -1;
   21910             fn ();
   21911             return 0;
   21912           }
   21913 
   21914      results in warning on line 5.
   21915 
   21916 `weak'
   21917      The `weak' attribute causes the declaration to be emitted as a weak
   21918      symbol rather than a global.  This is primarily useful in defining
   21919      library functions which can be overridden in user code, though it
   21920      can also be used with non-function declarations.  Weak symbols are
   21921      supported for ELF targets, and also for a.out targets when using
   21922      the GNU assembler and linker.
   21923 
   21924 `weakref'
   21925 `weakref ("TARGET")'
   21926      The `weakref' attribute marks a declaration as a weak reference.
   21927      Without arguments, it should be accompanied by an `alias' attribute
   21928      naming the target symbol.  Optionally, the TARGET may be given as
   21929      an argument to `weakref' itself.  In either case, `weakref'
   21930      implicitly marks the declaration as `weak'.  Without a TARGET,
   21931      given as an argument to `weakref' or to `alias', `weakref' is
   21932      equivalent to `weak'.
   21933 
   21934           static int x() __attribute__ ((weakref ("y")));
   21935           /* is equivalent to... */
   21936           static int x() __attribute__ ((weak, weakref, alias ("y")));
   21937           /* and to... */
   21938           static int x() __attribute__ ((weakref));
   21939           static int x() __attribute__ ((alias ("y")));
   21940 
   21941      A weak reference is an alias that does not by itself require a
   21942      definition to be given for the target symbol.  If the target
   21943      symbol is only referenced through weak references, then it becomes
   21944      a `weak' undefined symbol.  If it is directly referenced, however,
   21945      then such strong references prevail, and a definition will be
   21946      required for the symbol, not necessarily in the same translation
   21947      unit.
   21948 
   21949      The effect is equivalent to moving all references to the alias to a
   21950      separate translation unit, renaming the alias to the aliased
   21951      symbol, declaring it as weak, compiling the two separate
   21952      translation units and performing a reloadable link on them.
   21953 
   21954      At present, a declaration to which `weakref' is attached can only
   21955      be `static'.
   21956 
   21957 
   21958  You can specify multiple attributes in a declaration by separating them
   21959 by commas within the double parentheses or by immediately following an
   21960 attribute declaration with another attribute declaration.
   21961 
   21962  Some people object to the `__attribute__' feature, suggesting that ISO
   21963 C's `#pragma' should be used instead.  At the time `__attribute__' was
   21964 designed, there were two reasons for not doing this.
   21965 
   21966   1. It is impossible to generate `#pragma' commands from a macro.
   21967 
   21968   2. There is no telling what the same `#pragma' might mean in another
   21969      compiler.
   21970 
   21971  These two reasons applied to almost any application that might have
   21972 been proposed for `#pragma'.  It was basically a mistake to use
   21973 `#pragma' for _anything_.
   21974 
   21975  The ISO C99 standard includes `_Pragma', which now allows pragmas to
   21976 be generated from macros.  In addition, a `#pragma GCC' namespace is
   21977 now in use for GCC-specific pragmas.  However, it has been found
   21978 convenient to use `__attribute__' to achieve a natural attachment of
   21979 attributes to their corresponding declarations, whereas `#pragma GCC'
   21980 is of use for constructs that do not naturally form part of the
   21981 grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
   21982 Directives.
   21983 
   21984 
   21985 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
   21986 
   21987 6.31 Attribute Syntax
   21988 =====================
   21989 
   21990 This section describes the syntax with which `__attribute__' may be
   21991 used, and the constructs to which attribute specifiers bind, for the C
   21992 language.  Some details may vary for C++ and Objective-C.  Because of
   21993 infelicities in the grammar for attributes, some forms described here
   21994 may not be successfully parsed in all cases.
   21995 
   21996  There are some problems with the semantics of attributes in C++.  For
   21997 example, there are no manglings for attributes, although they may affect
   21998 code generation, so problems may arise when attributed types are used in
   21999 conjunction with templates or overloading.  Similarly, `typeid' does
   22000 not distinguish between types with different attributes.  Support for
   22001 attributes in C++ may be restricted in future to attributes on
   22002 declarations only, but not on nested declarators.
   22003 
   22004  *Note Function Attributes::, for details of the semantics of attributes
   22005 applying to functions.  *Note Variable Attributes::, for details of the
   22006 semantics of attributes applying to variables.  *Note Type Attributes::,
   22007 for details of the semantics of attributes applying to structure, union
   22008 and enumerated types.
   22009 
   22010  An "attribute specifier" is of the form `__attribute__
   22011 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
   22012 comma-separated sequence of "attributes", where each attribute is one
   22013 of the following:
   22014 
   22015    * Empty.  Empty attributes are ignored.
   22016 
   22017    * A word (which may be an identifier such as `unused', or a reserved
   22018      word such as `const').
   22019 
   22020    * A word, followed by, in parentheses, parameters for the attribute.
   22021      These parameters take one of the following forms:
   22022 
   22023         * An identifier.  For example, `mode' attributes use this form.
   22024 
   22025         * An identifier followed by a comma and a non-empty
   22026           comma-separated list of expressions.  For example, `format'
   22027           attributes use this form.
   22028 
   22029         * A possibly empty comma-separated list of expressions.  For
   22030           example, `format_arg' attributes use this form with the list
   22031           being a single integer constant expression, and `alias'
   22032           attributes use this form with the list being a single string
   22033           constant.
   22034 
   22035  An "attribute specifier list" is a sequence of one or more attribute
   22036 specifiers, not separated by any other tokens.
   22037 
   22038  In GNU C, an attribute specifier list may appear after the colon
   22039 following a label, other than a `case' or `default' label.  The only
   22040 attribute it makes sense to use after a label is `unused'.  This
   22041 feature is intended for code generated by programs which contains labels
   22042 that may be unused but which is compiled with `-Wall'.  It would not
   22043 normally be appropriate to use in it human-written code, though it
   22044 could be useful in cases where the code that jumps to the label is
   22045 contained within an `#ifdef' conditional.  GNU C++ only permits
   22046 attributes on labels if the attribute specifier is immediately followed
   22047 by a semicolon (i.e., the label applies to an empty statement).  If the
   22048 semicolon is missing, C++ label attributes are ambiguous, as it is
   22049 permissible for a declaration, which could begin with an attribute
   22050 list, to be labelled in C++.  Declarations cannot be labelled in C90 or
   22051 C99, so the ambiguity does not arise there.
   22052 
   22053  An attribute specifier list may appear as part of a `struct', `union'
   22054 or `enum' specifier.  It may go either immediately after the `struct',
   22055 `union' or `enum' keyword, or after the closing brace.  The former
   22056 syntax is preferred.  Where attribute specifiers follow the closing
   22057 brace, they are considered to relate to the structure, union or
   22058 enumerated type defined, not to any enclosing declaration the type
   22059 specifier appears in, and the type defined is not complete until after
   22060 the attribute specifiers.
   22061 
   22062  Otherwise, an attribute specifier appears as part of a declaration,
   22063 counting declarations of unnamed parameters and type names, and relates
   22064 to that declaration (which may be nested in another declaration, for
   22065 example in the case of a parameter declaration), or to a particular
   22066 declarator within a declaration.  Where an attribute specifier is
   22067 applied to a parameter declared as a function or an array, it should
   22068 apply to the function or array rather than the pointer to which the
   22069 parameter is implicitly converted, but this is not yet correctly
   22070 implemented.
   22071 
   22072  Any list of specifiers and qualifiers at the start of a declaration may
   22073 contain attribute specifiers, whether or not such a list may in that
   22074 context contain storage class specifiers.  (Some attributes, however,
   22075 are essentially in the nature of storage class specifiers, and only make
   22076 sense where storage class specifiers may be used; for example,
   22077 `section'.)  There is one necessary limitation to this syntax: the
   22078 first old-style parameter declaration in a function definition cannot
   22079 begin with an attribute specifier, because such an attribute applies to
   22080 the function instead by syntax described below (which, however, is not
   22081 yet implemented in this case).  In some other cases, attribute
   22082 specifiers are permitted by this grammar but not yet supported by the
   22083 compiler.  All attribute specifiers in this place relate to the
   22084 declaration as a whole.  In the obsolescent usage where a type of `int'
   22085 is implied by the absence of type specifiers, such a list of specifiers
   22086 and qualifiers may be an attribute specifier list with no other
   22087 specifiers or qualifiers.
   22088 
   22089  At present, the first parameter in a function prototype must have some
   22090 type specifier which is not an attribute specifier; this resolves an
   22091 ambiguity in the interpretation of `void f(int (__attribute__((foo))
   22092 x))', but is subject to change.  At present, if the parentheses of a
   22093 function declarator contain only attributes then those attributes are
   22094 ignored, rather than yielding an error or warning or implying a single
   22095 parameter of type int, but this is subject to change.
   22096 
   22097  An attribute specifier list may appear immediately before a declarator
   22098 (other than the first) in a comma-separated list of declarators in a
   22099 declaration of more than one identifier using a single list of
   22100 specifiers and qualifiers.  Such attribute specifiers apply only to the
   22101 identifier before whose declarator they appear.  For example, in
   22102 
   22103      __attribute__((noreturn)) void d0 (void),
   22104          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
   22105           d2 (void)
   22106 
   22107 the `noreturn' attribute applies to all the functions declared; the
   22108 `format' attribute only applies to `d1'.
   22109 
   22110  An attribute specifier list may appear immediately before the comma,
   22111 `=' or semicolon terminating the declaration of an identifier other
   22112 than a function definition.  Such attribute specifiers apply to the
   22113 declared object or function.  Where an assembler name for an object or
   22114 function is specified (*note Asm Labels::), the attribute must follow
   22115 the `asm' specification.
   22116 
   22117  An attribute specifier list may, in future, be permitted to appear
   22118 after the declarator in a function definition (before any old-style
   22119 parameter declarations or the function body).
   22120 
   22121  Attribute specifiers may be mixed with type qualifiers appearing inside
   22122 the `[]' of a parameter array declarator, in the C99 construct by which
   22123 such qualifiers are applied to the pointer to which the array is
   22124 implicitly converted.  Such attribute specifiers apply to the pointer,
   22125 not to the array, but at present this is not implemented and they are
   22126 ignored.
   22127 
   22128  An attribute specifier list may appear at the start of a nested
   22129 declarator.  At present, there are some limitations in this usage: the
   22130 attributes correctly apply to the declarator, but for most individual
   22131 attributes the semantics this implies are not implemented.  When
   22132 attribute specifiers follow the `*' of a pointer declarator, they may
   22133 be mixed with any type qualifiers present.  The following describes the
   22134 formal semantics of this syntax.  It will make the most sense if you
   22135 are familiar with the formal specification of declarators in the ISO C
   22136 standard.
   22137 
   22138  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
   22139 where `T' contains declaration specifiers that specify a type TYPE
   22140 (such as `int') and `D1' is a declarator that contains an identifier
   22141 IDENT.  The type specified for IDENT for derived declarators whose type
   22142 does not include an attribute specifier is as in the ISO C standard.
   22143 
   22144  If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
   22145 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
   22146 TYPE" for IDENT, then `T D1' specifies the type
   22147 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
   22148 
   22149  If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
   22150 D', and the declaration `T D' specifies the type
   22151 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
   22152 the type "DERIVED-DECLARATOR-TYPE-LIST
   22153 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
   22154 
   22155  For example,
   22156 
   22157      void (__attribute__((noreturn)) ****f) (void);
   22158 
   22159 specifies the type "pointer to pointer to pointer to pointer to
   22160 non-returning function returning `void'".  As another example,
   22161 
   22162      char *__attribute__((aligned(8))) *f;
   22163 
   22164 specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
   22165 again that this does not work with most attributes; for example, the
   22166 usage of `aligned' and `noreturn' attributes given above is not yet
   22167 supported.
   22168 
   22169  For compatibility with existing code written for compiler versions that
   22170 did not implement attributes on nested declarators, some laxity is
   22171 allowed in the placing of attributes.  If an attribute that only applies
   22172 to types is applied to a declaration, it will be treated as applying to
   22173 the type of that declaration.  If an attribute that only applies to
   22174 declarations is applied to the type of a declaration, it will be treated
   22175 as applying to that declaration; and, for compatibility with code
   22176 placing the attributes immediately before the identifier declared, such
   22177 an attribute applied to a function return type will be treated as
   22178 applying to the function type, and such an attribute applied to an array
   22179 element type will be treated as applying to the array type.  If an
   22180 attribute that only applies to function types is applied to a
   22181 pointer-to-function type, it will be treated as applying to the pointer
   22182 target type; if such an attribute is applied to a function return type
   22183 that is not a pointer-to-function type, it will be treated as applying
   22184 to the function type.
   22185 
   22186 
   22187 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
   22188 
   22189 6.32 Prototypes and Old-Style Function Definitions
   22190 ==================================================
   22191 
   22192 GNU C extends ISO C to allow a function prototype to override a later
   22193 old-style non-prototype definition.  Consider the following example:
   22194 
   22195      /* Use prototypes unless the compiler is old-fashioned.  */
   22196      #ifdef __STDC__
   22197      #define P(x) x
   22198      #else
   22199      #define P(x) ()
   22200      #endif
   22201 
   22202      /* Prototype function declaration.  */
   22203      int isroot P((uid_t));
   22204 
   22205      /* Old-style function definition.  */
   22206      int
   22207      isroot (x)   /* ??? lossage here ??? */
   22208           uid_t x;
   22209      {
   22210        return x == 0;
   22211      }
   22212 
   22213  Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
   22214 this example, because subword arguments in old-style non-prototype
   22215 definitions are promoted.  Therefore in this example the function
   22216 definition's argument is really an `int', which does not match the
   22217 prototype argument type of `short'.
   22218 
   22219  This restriction of ISO C makes it hard to write code that is portable
   22220 to traditional C compilers, because the programmer does not know
   22221 whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
   22222 cases like these GNU C allows a prototype to override a later old-style
   22223 definition.  More precisely, in GNU C, a function prototype argument
   22224 type overrides the argument type specified by a later old-style
   22225 definition if the former type is the same as the latter type before
   22226 promotion.  Thus in GNU C the above example is equivalent to the
   22227 following:
   22228 
   22229      int isroot (uid_t);
   22230 
   22231      int
   22232      isroot (uid_t x)
   22233      {
   22234        return x == 0;
   22235      }
   22236 
   22237 GNU C++ does not support old-style function definitions, so this
   22238 extension is irrelevant.
   22239 
   22240 
   22241 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
   22242 
   22243 6.33 C++ Style Comments
   22244 =======================
   22245 
   22246 In GNU C, you may use C++ style comments, which start with `//' and
   22247 continue until the end of the line.  Many other C implementations allow
   22248 such comments, and they are included in the 1999 C standard.  However,
   22249 C++ style comments are not recognized if you specify an `-std' option
   22250 specifying a version of ISO C before C99, or `-ansi' (equivalent to
   22251 `-std=c90').
   22252 
   22253 
   22254 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
   22255 
   22256 6.34 Dollar Signs in Identifier Names
   22257 =====================================
   22258 
   22259 In GNU C, you may normally use dollar signs in identifier names.  This
   22260 is because many traditional C implementations allow such identifiers.
   22261 However, dollar signs in identifiers are not supported on a few target
   22262 machines, typically because the target assembler does not allow them.
   22263 
   22264 
   22265 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
   22266 
   22267 6.35 The Character <ESC> in Constants
   22268 =====================================
   22269 
   22270 You can use the sequence `\e' in a string or character constant to
   22271 stand for the ASCII character <ESC>.
   22272 
   22273 
   22274 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
   22275 
   22276 6.36 Specifying Attributes of Variables
   22277 =======================================
   22278 
   22279 The keyword `__attribute__' allows you to specify special attributes of
   22280 variables or structure fields.  This keyword is followed by an
   22281 attribute specification inside double parentheses.  Some attributes are
   22282 currently defined generically for variables.  Other attributes are
   22283 defined for variables on particular target systems.  Other attributes
   22284 are available for functions (*note Function Attributes::) and for types
   22285 (*note Type Attributes::).  Other front ends might define more
   22286 attributes (*note Extensions to the C++ Language: C++ Extensions.).
   22287 
   22288  You may also specify attributes with `__' preceding and following each
   22289 keyword.  This allows you to use them in header files without being
   22290 concerned about a possible macro of the same name.  For example, you
   22291 may use `__aligned__' instead of `aligned'.
   22292 
   22293  *Note Attribute Syntax::, for details of the exact syntax for using
   22294 attributes.
   22295 
   22296 `aligned (ALIGNMENT)'
   22297      This attribute specifies a minimum alignment for the variable or
   22298      structure field, measured in bytes.  For example, the declaration:
   22299 
   22300           int x __attribute__ ((aligned (16))) = 0;
   22301 
   22302      causes the compiler to allocate the global variable `x' on a
   22303      16-byte boundary.  On a 68040, this could be used in conjunction
   22304      with an `asm' expression to access the `move16' instruction which
   22305      requires 16-byte aligned operands.
   22306 
   22307      You can also specify the alignment of structure fields.  For
   22308      example, to create a double-word aligned `int' pair, you could
   22309      write:
   22310 
   22311           struct foo { int x[2] __attribute__ ((aligned (8))); };
   22312 
   22313      This is an alternative to creating a union with a `double' member
   22314      that forces the union to be double-word aligned.
   22315 
   22316      As in the preceding examples, you can explicitly specify the
   22317      alignment (in bytes) that you wish the compiler to use for a given
   22318      variable or structure field.  Alternatively, you can leave out the
   22319      alignment factor and just ask the compiler to align a variable or
   22320      field to the default alignment for the target architecture you are
   22321      compiling for.  The default alignment is sufficient for all scalar
   22322      types, but may not be enough for all vector types on a target
   22323      which supports vector operations.  The default alignment is fixed
   22324      for a particular target ABI.
   22325 
   22326      Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__',
   22327      which is the largest alignment ever used for any data type on the
   22328      target machine you are compiling for.  For example, you could
   22329      write:
   22330 
   22331           short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
   22332 
   22333      The compiler automatically sets the alignment for the declared
   22334      variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
   22335      often make copy operations more efficient, because the compiler can
   22336      use whatever instructions copy the biggest chunks of memory when
   22337      performing copies to or from the variables or fields that you have
   22338      aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
   22339      may change depending on command line options.
   22340 
   22341      When used on a struct, or struct member, the `aligned' attribute
   22342      can only increase the alignment; in order to decrease it, the
   22343      `packed' attribute must be specified as well.  When used as part
   22344      of a typedef, the `aligned' attribute can both increase and
   22345      decrease alignment, and specifying the `packed' attribute will
   22346      generate a warning.
   22347 
   22348      Note that the effectiveness of `aligned' attributes may be limited
   22349      by inherent limitations in your linker.  On many systems, the
   22350      linker is only able to arrange for variables to be aligned up to a
   22351      certain maximum alignment.  (For some linkers, the maximum
   22352      supported alignment may be very very small.)  If your linker is
   22353      only able to align variables up to a maximum of 8 byte alignment,
   22354      then specifying `aligned(16)' in an `__attribute__' will still
   22355      only provide you with 8 byte alignment.  See your linker
   22356      documentation for further information.
   22357 
   22358      The `aligned' attribute can also be used for functions (*note
   22359      Function Attributes::.)
   22360 
   22361 `cleanup (CLEANUP_FUNCTION)'
   22362      The `cleanup' attribute runs a function when the variable goes out
   22363      of scope.  This attribute can only be applied to auto function
   22364      scope variables; it may not be applied to parameters or variables
   22365      with static storage duration.  The function must take one
   22366      parameter, a pointer to a type compatible with the variable.  The
   22367      return value of the function (if any) is ignored.
   22368 
   22369      If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
   22370      during the stack unwinding that happens during the processing of
   22371      the exception.  Note that the `cleanup' attribute does not allow
   22372      the exception to be caught, only to perform an action.  It is
   22373      undefined what happens if CLEANUP_FUNCTION does not return
   22374      normally.
   22375 
   22376 `common'
   22377 `nocommon'
   22378      The `common' attribute requests GCC to place a variable in
   22379      "common" storage.  The `nocommon' attribute requests the
   22380      opposite--to allocate space for it directly.
   22381 
   22382      These attributes override the default chosen by the `-fno-common'
   22383      and `-fcommon' flags respectively.
   22384 
   22385 `deprecated'
   22386 `deprecated (MSG)'
   22387      The `deprecated' attribute results in a warning if the variable is
   22388      used anywhere in the source file.  This is useful when identifying
   22389      variables that are expected to be removed in a future version of a
   22390      program.  The warning also includes the location of the declaration
   22391      of the deprecated variable, to enable users to easily find further
   22392      information about why the variable is deprecated, or what they
   22393      should do instead.  Note that the warning only occurs for uses:
   22394 
   22395           extern int old_var __attribute__ ((deprecated));
   22396           extern int old_var;
   22397           int new_fn () { return old_var; }
   22398 
   22399      results in a warning on line 3 but not line 2.  The optional msg
   22400      argument, which must be a string, will be printed in the warning if
   22401      present.
   22402 
   22403      The `deprecated' attribute can also be used for functions and
   22404      types (*note Function Attributes::, *note Type Attributes::.)
   22405 
   22406 `mode (MODE)'
   22407      This attribute specifies the data type for the
   22408      declaration--whichever type corresponds to the mode MODE.  This in
   22409      effect lets you request an integer or floating point type
   22410      according to its width.
   22411 
   22412      You may also specify a mode of `byte' or `__byte__' to indicate
   22413      the mode corresponding to a one-byte integer, `word' or `__word__'
   22414      for the mode of a one-word integer, and `pointer' or `__pointer__'
   22415      for the mode used to represent pointers.
   22416 
   22417 `packed'
   22418      The `packed' attribute specifies that a variable or structure field
   22419      should have the smallest possible alignment--one byte for a
   22420      variable, and one bit for a field, unless you specify a larger
   22421      value with the `aligned' attribute.
   22422 
   22423      Here is a structure in which the field `x' is packed, so that it
   22424      immediately follows `a':
   22425 
   22426           struct foo
   22427           {
   22428             char a;
   22429             int x[2] __attribute__ ((packed));
   22430           };
   22431 
   22432      _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
   22433      attribute on bit-fields of type `char'.  This has been fixed in
   22434      GCC 4.4 but the change can lead to differences in the structure
   22435      layout.  See the documentation of `-Wpacked-bitfield-compat' for
   22436      more information.
   22437 
   22438 `section ("SECTION-NAME")'
   22439      Normally, the compiler places the objects it generates in sections
   22440      like `data' and `bss'.  Sometimes, however, you need additional
   22441      sections, or you need certain particular variables to appear in
   22442      special sections, for example to map to special hardware.  The
   22443      `section' attribute specifies that a variable (or function) lives
   22444      in a particular section.  For example, this small program uses
   22445      several specific section names:
   22446 
   22447           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
   22448           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
   22449           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
   22450           int init_data __attribute__ ((section ("INITDATA")));
   22451 
   22452           main()
   22453           {
   22454             /* Initialize stack pointer */
   22455             init_sp (stack + sizeof (stack));
   22456 
   22457             /* Initialize initialized data */
   22458             memcpy (&init_data, &data, &edata - &data);
   22459 
   22460             /* Turn on the serial ports */
   22461             init_duart (&a);
   22462             init_duart (&b);
   22463           }
   22464 
   22465      Use the `section' attribute with _global_ variables and not
   22466      _local_ variables, as shown in the example.
   22467 
   22468      You may use the `section' attribute with initialized or
   22469      uninitialized global variables but the linker requires each object
   22470      be defined once, with the exception that uninitialized variables
   22471      tentatively go in the `common' (or `bss') section and can be
   22472      multiply "defined".  Using the `section' attribute will change
   22473      what section the variable goes into and may cause the linker to
   22474      issue an error if an uninitialized variable has multiple
   22475      definitions.  You can force a variable to be initialized with the
   22476      `-fno-common' flag or the `nocommon' attribute.
   22477 
   22478      Some file formats do not support arbitrary sections so the
   22479      `section' attribute is not available on all platforms.  If you
   22480      need to map the entire contents of a module to a particular
   22481      section, consider using the facilities of the linker instead.
   22482 
   22483 `shared'
   22484      On Microsoft Windows, in addition to putting variable definitions
   22485      in a named section, the section can also be shared among all
   22486      running copies of an executable or DLL.  For example, this small
   22487      program defines shared data by putting it in a named section
   22488      `shared' and marking the section shareable:
   22489 
   22490           int foo __attribute__((section ("shared"), shared)) = 0;
   22491 
   22492           int
   22493           main()
   22494           {
   22495             /* Read and write foo.  All running
   22496                copies see the same value.  */
   22497             return 0;
   22498           }
   22499 
   22500      You may only use the `shared' attribute along with `section'
   22501      attribute with a fully initialized global definition because of
   22502      the way linkers work.  See `section' attribute for more
   22503      information.
   22504 
   22505      The `shared' attribute is only available on Microsoft Windows.
   22506 
   22507 `tls_model ("TLS_MODEL")'
   22508      The `tls_model' attribute sets thread-local storage model (*note
   22509      Thread-Local::) of a particular `__thread' variable, overriding
   22510      `-ftls-model=' command-line switch on a per-variable basis.  The
   22511      TLS_MODEL argument should be one of `global-dynamic',
   22512      `local-dynamic', `initial-exec' or `local-exec'.
   22513 
   22514      Not all targets support this attribute.
   22515 
   22516 `unused'
   22517      This attribute, attached to a variable, means that the variable is
   22518      meant to be possibly unused.  GCC will not produce a warning for
   22519      this variable.
   22520 
   22521 `used'
   22522      This attribute, attached to a variable, means that the variable
   22523      must be emitted even if it appears that the variable is not
   22524      referenced.
   22525 
   22526 `vector_size (BYTES)'
   22527      This attribute specifies the vector size for the variable,
   22528      measured in bytes.  For example, the declaration:
   22529 
   22530           int foo __attribute__ ((vector_size (16)));
   22531 
   22532      causes the compiler to set the mode for `foo', to be 16 bytes,
   22533      divided into `int' sized units.  Assuming a 32-bit int (a vector of
   22534      4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
   22535 
   22536      This attribute is only applicable to integral and float scalars,
   22537      although arrays, pointers, and function return values are allowed
   22538      in conjunction with this construct.
   22539 
   22540      Aggregates with this attribute are invalid, even if they are of
   22541      the same size as a corresponding scalar.  For example, the
   22542      declaration:
   22543 
   22544           struct S { int a; };
   22545           struct S  __attribute__ ((vector_size (16))) foo;
   22546 
   22547      is invalid even if the size of the structure is the same as the
   22548      size of the `int'.
   22549 
   22550 `selectany'
   22551      The `selectany' attribute causes an initialized global variable to
   22552      have link-once semantics.  When multiple definitions of the
   22553      variable are encountered by the linker, the first is selected and
   22554      the remainder are discarded.  Following usage by the Microsoft
   22555      compiler, the linker is told _not_ to warn about size or content
   22556      differences of the multiple definitions.
   22557 
   22558      Although the primary usage of this attribute is for POD types, the
   22559      attribute can also be applied to global C++ objects that are
   22560      initialized by a constructor.  In this case, the static
   22561      initialization and destruction code for the object is emitted in
   22562      each translation defining the object, but the calls to the
   22563      constructor and destructor are protected by a link-once guard
   22564      variable.
   22565 
   22566      The `selectany' attribute is only available on Microsoft Windows
   22567      targets.  You can use `__declspec (selectany)' as a synonym for
   22568      `__attribute__ ((selectany))' for compatibility with other
   22569      compilers.
   22570 
   22571 `weak'
   22572      The `weak' attribute is described in *note Function Attributes::.
   22573 
   22574 `dllimport'
   22575      The `dllimport' attribute is described in *note Function
   22576      Attributes::.
   22577 
   22578 `dllexport'
   22579      The `dllexport' attribute is described in *note Function
   22580      Attributes::.
   22581 
   22582 
   22583 6.36.1 AVR Variable Attributes
   22584 ------------------------------
   22585 
   22586 `progmem'
   22587      The `progmem' attribute is used on the AVR to place data in the
   22588      program memory address space (flash). This is accomplished by
   22589      putting respective variables into a section whose name starts with
   22590      `.progmem'.
   22591 
   22592      AVR is a Harvard architecture processor and data and reas only data
   22593      normally resides in the data memory address space (RAM).
   22594 
   22595 6.36.2 Blackfin Variable Attributes
   22596 -----------------------------------
   22597 
   22598 Three attributes are currently defined for the Blackfin.
   22599 
   22600 `l1_data'
   22601 `l1_data_A'
   22602 `l1_data_B'
   22603      Use these attributes on the Blackfin to place the variable into L1
   22604      Data SRAM.  Variables with `l1_data' attribute will be put into
   22605      the specific section named `.l1.data'. Those with `l1_data_A'
   22606      attribute will be put into the specific section named
   22607      `.l1.data.A'. Those with `l1_data_B' attribute will be put into
   22608      the specific section named `.l1.data.B'.
   22609 
   22610 `l2'
   22611      Use this attribute on the Blackfin to place the variable into L2
   22612      SRAM.  Variables with `l2' attribute will be put into the specific
   22613      section named `.l2.data'.
   22614 
   22615 6.36.3 M32R/D Variable Attributes
   22616 ---------------------------------
   22617 
   22618 One attribute is currently defined for the M32R/D.
   22619 
   22620 `model (MODEL-NAME)'
   22621      Use this attribute on the M32R/D to set the addressability of an
   22622      object.  The identifier MODEL-NAME is one of `small', `medium', or
   22623      `large', representing each of the code models.
   22624 
   22625      Small model objects live in the lower 16MB of memory (so that their
   22626      addresses can be loaded with the `ld24' instruction).
   22627 
   22628      Medium and large model objects may live anywhere in the 32-bit
   22629      address space (the compiler will generate `seth/add3' instructions
   22630      to load their addresses).
   22631 
   22632 6.36.4 MeP Variable Attributes
   22633 ------------------------------
   22634 
   22635 The MeP target has a number of addressing modes and busses.  The `near'
   22636 space spans the standard memory space's first 16 megabytes (24 bits).
   22637 The `far' space spans the entire 32-bit memory space.  The `based'
   22638 space is a 128 byte region in the memory space which is addressed
   22639 relative to the `$tp' register.  The `tiny' space is a 65536 byte
   22640 region relative to the `$gp' register.  In addition to these memory
   22641 regions, the MeP target has a separate 16-bit control bus which is
   22642 specified with `cb' attributes.
   22643 
   22644 `based'
   22645      Any variable with the `based' attribute will be assigned to the
   22646      `.based' section, and will be accessed with relative to the `$tp'
   22647      register.
   22648 
   22649 `tiny'
   22650      Likewise, the `tiny' attribute assigned variables to the `.tiny'
   22651      section, relative to the `$gp' register.
   22652 
   22653 `near'
   22654      Variables with the `near' attribute are assumed to have addresses
   22655      that fit in a 24-bit addressing mode.  This is the default for
   22656      large variables (`-mtiny=4' is the default) but this attribute can
   22657      override `-mtiny=' for small variables, or override `-ml'.
   22658 
   22659 `far'
   22660      Variables with the `far' attribute are addressed using a full
   22661      32-bit address.  Since this covers the entire memory space, this
   22662      allows modules to make no assumptions about where variables might
   22663      be stored.
   22664 
   22665 `io'
   22666 `io (ADDR)'
   22667      Variables with the `io' attribute are used to address
   22668      memory-mapped peripherals.  If an address is specified, the
   22669      variable is assigned that address, else it is not assigned an
   22670      address (it is assumed some other module will assign an address).
   22671      Example:
   22672 
   22673           int timer_count __attribute__((io(0x123)));
   22674 
   22675 `cb'
   22676 `cb (ADDR)'
   22677      Variables with the `cb' attribute are used to access the control
   22678      bus, using special instructions.  `addr' indicates the control bus
   22679      address.  Example:
   22680 
   22681           int cpu_clock __attribute__((cb(0x123)));
   22682 
   22683 
   22684 6.36.5 i386 Variable Attributes
   22685 -------------------------------
   22686 
   22687 Two attributes are currently defined for i386 configurations:
   22688 `ms_struct' and `gcc_struct'
   22689 
   22690 `ms_struct'
   22691 `gcc_struct'
   22692      If `packed' is used on a structure, or if bit-fields are used it
   22693      may be that the Microsoft ABI packs them differently than GCC
   22694      would normally pack them.  Particularly when moving packed data
   22695      between functions compiled with GCC and the native Microsoft
   22696      compiler (either via function call or as data in a file), it may
   22697      be necessary to access either format.
   22698 
   22699      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
   22700      Windows X86 compilers to match the native Microsoft compiler.
   22701 
   22702      The Microsoft structure layout algorithm is fairly simple with the
   22703      exception of the bitfield packing:
   22704 
   22705      The padding and alignment of members of structures and whether a
   22706      bit field can straddle a storage-unit boundary
   22707 
   22708        1. Structure members are stored sequentially in the order in
   22709           which they are declared: the first member has the lowest
   22710           memory address and the last member the highest.
   22711 
   22712        2. Every data object has an alignment-requirement. The
   22713           alignment-requirement for all data except structures, unions,
   22714           and arrays is either the size of the object or the current
   22715           packing size (specified with either the aligned attribute or
   22716           the pack pragma), whichever is less. For structures,  unions,
   22717           and arrays, the alignment-requirement is the largest
   22718           alignment-requirement of its members.  Every object is
   22719           allocated an offset so that:
   22720 
   22721           offset %  alignment-requirement == 0
   22722 
   22723        3. Adjacent bit fields are packed into the same 1-, 2-, or
   22724           4-byte allocation unit if the integral types are the same
   22725           size and if the next bit field fits into the current
   22726           allocation unit without crossing the boundary imposed by the
   22727           common alignment requirements of the bit fields.
   22728 
   22729      Handling of zero-length bitfields:
   22730 
   22731      MSVC interprets zero-length bitfields in the following ways:
   22732 
   22733        1. If a zero-length bitfield is inserted between two bitfields
   22734           that would normally be coalesced, the bitfields will not be
   22735           coalesced.
   22736 
   22737           For example:
   22738 
   22739                struct
   22740                 {
   22741                   unsigned long bf_1 : 12;
   22742                   unsigned long : 0;
   22743                   unsigned long bf_2 : 12;
   22744                 } t1;
   22745 
   22746           The size of `t1' would be 8 bytes with the zero-length
   22747           bitfield.  If the zero-length bitfield were removed, `t1''s
   22748           size would be 4 bytes.
   22749 
   22750        2. If a zero-length bitfield is inserted after a bitfield,
   22751           `foo', and the alignment of the zero-length bitfield is
   22752           greater than the member that follows it, `bar', `bar' will be
   22753           aligned as the type of the zero-length bitfield.
   22754 
   22755           For example:
   22756 
   22757                struct
   22758                 {
   22759                   char foo : 4;
   22760                   short : 0;
   22761                   char bar;
   22762                 } t2;
   22763 
   22764                struct
   22765                 {
   22766                   char foo : 4;
   22767                   short : 0;
   22768                   double bar;
   22769                 } t3;
   22770 
   22771           For `t2', `bar' will be placed at offset 2, rather than
   22772           offset 1.  Accordingly, the size of `t2' will be 4.  For
   22773           `t3', the zero-length bitfield will not affect the alignment
   22774           of `bar' or, as a result, the size of the structure.
   22775 
   22776           Taking this into account, it is important to note the
   22777           following:
   22778 
   22779             1. If a zero-length bitfield follows a normal bitfield, the
   22780                type of the zero-length bitfield may affect the
   22781                alignment of the structure as whole. For example, `t2'
   22782                has a size of 4 bytes, since the zero-length bitfield
   22783                follows a normal bitfield, and is of type short.
   22784 
   22785             2. Even if a zero-length bitfield is not followed by a
   22786                normal bitfield, it may still affect the alignment of
   22787                the structure:
   22788 
   22789                     struct
   22790                      {
   22791                        char foo : 6;
   22792                        long : 0;
   22793                      } t4;
   22794 
   22795                Here, `t4' will take up 4 bytes.
   22796 
   22797        3. Zero-length bitfields following non-bitfield members are
   22798           ignored:
   22799 
   22800                struct
   22801                 {
   22802                   char foo;
   22803                   long : 0;
   22804                   char bar;
   22805                 } t5;
   22806 
   22807           Here, `t5' will take up 2 bytes.
   22808 
   22809 6.36.6 PowerPC Variable Attributes
   22810 ----------------------------------
   22811 
   22812 Three attributes currently are defined for PowerPC configurations:
   22813 `altivec', `ms_struct' and `gcc_struct'.
   22814 
   22815  For full documentation of the struct attributes please see the
   22816 documentation in *note i386 Variable Attributes::.
   22817 
   22818  For documentation of `altivec' attribute please see the documentation
   22819 in *note PowerPC Type Attributes::.
   22820 
   22821 6.36.7 SPU Variable Attributes
   22822 ------------------------------
   22823 
   22824 The SPU supports the `spu_vector' attribute for variables.  For
   22825 documentation of this attribute please see the documentation in *note
   22826 SPU Type Attributes::.
   22827 
   22828 6.36.8 Xstormy16 Variable Attributes
   22829 ------------------------------------
   22830 
   22831 One attribute is currently defined for xstormy16 configurations:
   22832 `below100'.
   22833 
   22834 `below100'
   22835      If a variable has the `below100' attribute (`BELOW100' is allowed
   22836      also), GCC will place the variable in the first 0x100 bytes of
   22837      memory and use special opcodes to access it.  Such variables will
   22838      be placed in either the `.bss_below100' section or the
   22839      `.data_below100' section.
   22840 
   22841 
   22842 
   22843 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
   22844 
   22845 6.37 Specifying Attributes of Types
   22846 ===================================
   22847 
   22848 The keyword `__attribute__' allows you to specify special attributes of
   22849 `struct' and `union' types when you define such types.  This keyword is
   22850 followed by an attribute specification inside double parentheses.
   22851 Seven attributes are currently defined for types: `aligned', `packed',
   22852 `transparent_union', `unused', `deprecated', `visibility', and
   22853 `may_alias'.  Other attributes are defined for functions (*note
   22854 Function Attributes::) and for variables (*note Variable Attributes::).
   22855 
   22856  You may also specify any one of these attributes with `__' preceding
   22857 and following its keyword.  This allows you to use these attributes in
   22858 header files without being concerned about a possible macro of the same
   22859 name.  For example, you may use `__aligned__' instead of `aligned'.
   22860 
   22861  You may specify type attributes in an enum, struct or union type
   22862 declaration or definition, or for other types in a `typedef'
   22863 declaration.
   22864 
   22865  For an enum, struct or union type, you may specify attributes either
   22866 between the enum, struct or union tag and the name of the type, or just
   22867 past the closing curly brace of the _definition_.  The former syntax is
   22868 preferred.
   22869 
   22870  *Note Attribute Syntax::, for details of the exact syntax for using
   22871 attributes.
   22872 
   22873 `aligned (ALIGNMENT)'
   22874      This attribute specifies a minimum alignment (in bytes) for
   22875      variables of the specified type.  For example, the declarations:
   22876 
   22877           struct S { short f[3]; } __attribute__ ((aligned (8)));
   22878           typedef int more_aligned_int __attribute__ ((aligned (8)));
   22879 
   22880      force the compiler to insure (as far as it can) that each variable
   22881      whose type is `struct S' or `more_aligned_int' will be allocated
   22882      and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
   22883      all variables of type `struct S' aligned to 8-byte boundaries
   22884      allows the compiler to use the `ldd' and `std' (doubleword load and
   22885      store) instructions when copying one variable of type `struct S' to
   22886      another, thus improving run-time efficiency.
   22887 
   22888      Note that the alignment of any given `struct' or `union' type is
   22889      required by the ISO C standard to be at least a perfect multiple of
   22890      the lowest common multiple of the alignments of all of the members
   22891      of the `struct' or `union' in question.  This means that you _can_
   22892      effectively adjust the alignment of a `struct' or `union' type by
   22893      attaching an `aligned' attribute to any one of the members of such
   22894      a type, but the notation illustrated in the example above is a
   22895      more obvious, intuitive, and readable way to request the compiler
   22896      to adjust the alignment of an entire `struct' or `union' type.
   22897 
   22898      As in the preceding example, you can explicitly specify the
   22899      alignment (in bytes) that you wish the compiler to use for a given
   22900      `struct' or `union' type.  Alternatively, you can leave out the
   22901      alignment factor and just ask the compiler to align a type to the
   22902      maximum useful alignment for the target machine you are compiling
   22903      for.  For example, you could write:
   22904 
   22905           struct S { short f[3]; } __attribute__ ((aligned));
   22906 
   22907      Whenever you leave out the alignment factor in an `aligned'
   22908      attribute specification, the compiler automatically sets the
   22909      alignment for the type to the largest alignment which is ever used
   22910      for any data type on the target machine you are compiling for.
   22911      Doing this can often make copy operations more efficient, because
   22912      the compiler can use whatever instructions copy the biggest chunks
   22913      of memory when performing copies to or from the variables which
   22914      have types that you have aligned this way.
   22915 
   22916      In the example above, if the size of each `short' is 2 bytes, then
   22917      the size of the entire `struct S' type is 6 bytes.  The smallest
   22918      power of two which is greater than or equal to that is 8, so the
   22919      compiler sets the alignment for the entire `struct S' type to 8
   22920      bytes.
   22921 
   22922      Note that although you can ask the compiler to select a
   22923      time-efficient alignment for a given type and then declare only
   22924      individual stand-alone objects of that type, the compiler's
   22925      ability to select a time-efficient alignment is primarily useful
   22926      only when you plan to create arrays of variables having the
   22927      relevant (efficiently aligned) type.  If you declare or use arrays
   22928      of variables of an efficiently-aligned type, then it is likely
   22929      that your program will also be doing pointer arithmetic (or
   22930      subscripting, which amounts to the same thing) on pointers to the
   22931      relevant type, and the code that the compiler generates for these
   22932      pointer arithmetic operations will often be more efficient for
   22933      efficiently-aligned types than for other types.
   22934 
   22935      The `aligned' attribute can only increase the alignment; but you
   22936      can decrease it by specifying `packed' as well.  See below.
   22937 
   22938      Note that the effectiveness of `aligned' attributes may be limited
   22939      by inherent limitations in your linker.  On many systems, the
   22940      linker is only able to arrange for variables to be aligned up to a
   22941      certain maximum alignment.  (For some linkers, the maximum
   22942      supported alignment may be very very small.)  If your linker is
   22943      only able to align variables up to a maximum of 8 byte alignment,
   22944      then specifying `aligned(16)' in an `__attribute__' will still
   22945      only provide you with 8 byte alignment.  See your linker
   22946      documentation for further information.
   22947 
   22948 `packed'
   22949      This attribute, attached to `struct' or `union' type definition,
   22950      specifies that each member (other than zero-width bitfields) of
   22951      the structure or union is placed to minimize the memory required.
   22952      When attached to an `enum' definition, it indicates that the
   22953      smallest integral type should be used.
   22954 
   22955      Specifying this attribute for `struct' and `union' types is
   22956      equivalent to specifying the `packed' attribute on each of the
   22957      structure or union members.  Specifying the `-fshort-enums' flag
   22958      on the line is equivalent to specifying the `packed' attribute on
   22959      all `enum' definitions.
   22960 
   22961      In the following example `struct my_packed_struct''s members are
   22962      packed closely together, but the internal layout of its `s' member
   22963      is not packed--to do that, `struct my_unpacked_struct' would need
   22964      to be packed too.
   22965 
   22966           struct my_unpacked_struct
   22967            {
   22968               char c;
   22969               int i;
   22970            };
   22971 
   22972           struct __attribute__ ((__packed__)) my_packed_struct
   22973             {
   22974                char c;
   22975                int  i;
   22976                struct my_unpacked_struct s;
   22977             };
   22978 
   22979      You may only specify this attribute on the definition of an `enum',
   22980      `struct' or `union', not on a `typedef' which does not also define
   22981      the enumerated type, structure or union.
   22982 
   22983 `transparent_union'
   22984      This attribute, attached to a `union' type definition, indicates
   22985      that any function parameter having that union type causes calls to
   22986      that function to be treated in a special way.
   22987 
   22988      First, the argument corresponding to a transparent union type can
   22989      be of any type in the union; no cast is required.  Also, if the
   22990      union contains a pointer type, the corresponding argument can be a
   22991      null pointer constant or a void pointer expression; and if the
   22992      union contains a void pointer type, the corresponding argument can
   22993      be any pointer expression.  If the union member type is a pointer,
   22994      qualifiers like `const' on the referenced type must be respected,
   22995      just as with normal pointer conversions.
   22996 
   22997      Second, the argument is passed to the function using the calling
   22998      conventions of the first member of the transparent union, not the
   22999      calling conventions of the union itself.  All members of the union
   23000      must have the same machine representation; this is necessary for
   23001      this argument passing to work properly.
   23002 
   23003      Transparent unions are designed for library functions that have
   23004      multiple interfaces for compatibility reasons.  For example,
   23005      suppose the `wait' function must accept either a value of type
   23006      `int *' to comply with Posix, or a value of type `union wait *' to
   23007      comply with the 4.1BSD interface.  If `wait''s parameter were
   23008      `void *', `wait' would accept both kinds of arguments, but it
   23009      would also accept any other pointer type and this would make
   23010      argument type checking less useful.  Instead, `<sys/wait.h>' might
   23011      define the interface as follows:
   23012 
   23013           typedef union __attribute__ ((__transparent_union__))
   23014             {
   23015               int *__ip;
   23016               union wait *__up;
   23017             } wait_status_ptr_t;
   23018 
   23019           pid_t wait (wait_status_ptr_t);
   23020 
   23021      This interface allows either `int *' or `union wait *' arguments
   23022      to be passed, using the `int *' calling convention.  The program
   23023      can call `wait' with arguments of either type:
   23024 
   23025           int w1 () { int w; return wait (&w); }
   23026           int w2 () { union wait w; return wait (&w); }
   23027 
   23028      With this interface, `wait''s implementation might look like this:
   23029 
   23030           pid_t wait (wait_status_ptr_t p)
   23031           {
   23032             return waitpid (-1, p.__ip, 0);
   23033           }
   23034 
   23035 `unused'
   23036      When attached to a type (including a `union' or a `struct'), this
   23037      attribute means that variables of that type are meant to appear
   23038      possibly unused.  GCC will not produce a warning for any variables
   23039      of that type, even if the variable appears to do nothing.  This is
   23040      often the case with lock or thread classes, which are usually
   23041      defined and then not referenced, but contain constructors and
   23042      destructors that have nontrivial bookkeeping functions.
   23043 
   23044 `deprecated'
   23045 `deprecated (MSG)'
   23046      The `deprecated' attribute results in a warning if the type is
   23047      used anywhere in the source file.  This is useful when identifying
   23048      types that are expected to be removed in a future version of a
   23049      program.  If possible, the warning also includes the location of
   23050      the declaration of the deprecated type, to enable users to easily
   23051      find further information about why the type is deprecated, or what
   23052      they should do instead.  Note that the warnings only occur for
   23053      uses and then only if the type is being applied to an identifier
   23054      that itself is not being declared as deprecated.
   23055 
   23056           typedef int T1 __attribute__ ((deprecated));
   23057           T1 x;
   23058           typedef T1 T2;
   23059           T2 y;
   23060           typedef T1 T3 __attribute__ ((deprecated));
   23061           T3 z __attribute__ ((deprecated));
   23062 
   23063      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
   23064      warning is issued for line 4 because T2 is not explicitly
   23065      deprecated.  Line 5 has no warning because T3 is explicitly
   23066      deprecated.  Similarly for line 6.  The optional msg argument,
   23067      which must be a string, will be printed in the warning if present.
   23068 
   23069      The `deprecated' attribute can also be used for functions and
   23070      variables (*note Function Attributes::, *note Variable
   23071      Attributes::.)
   23072 
   23073 `may_alias'
   23074      Accesses through pointers to types with this attribute are not
   23075      subject to type-based alias analysis, but are instead assumed to
   23076      be able to alias any other type of objects.  In the context of
   23077      6.5/7 an lvalue expression dereferencing such a pointer is treated
   23078      like having a character type.  See `-fstrict-aliasing' for more
   23079      information on aliasing issues.  This extension exists to support
   23080      some vector APIs, in which pointers to one vector type are
   23081      permitted to alias pointers to a different vector type.
   23082 
   23083      Note that an object of a type with this attribute does not have any
   23084      special semantics.
   23085 
   23086      Example of use:
   23087 
   23088           typedef short __attribute__((__may_alias__)) short_a;
   23089 
   23090           int
   23091           main (void)
   23092           {
   23093             int a = 0x12345678;
   23094             short_a *b = (short_a *) &a;
   23095 
   23096             b[1] = 0;
   23097 
   23098             if (a == 0x12345678)
   23099               abort();
   23100 
   23101             exit(0);
   23102           }
   23103 
   23104      If you replaced `short_a' with `short' in the variable
   23105      declaration, the above program would abort when compiled with
   23106      `-fstrict-aliasing', which is on by default at `-O2' or above in
   23107      recent GCC versions.
   23108 
   23109 `visibility'
   23110      In C++, attribute visibility (*note Function Attributes::) can
   23111      also be applied to class, struct, union and enum types.  Unlike
   23112      other type attributes, the attribute must appear between the
   23113      initial keyword and the name of the type; it cannot appear after
   23114      the body of the type.
   23115 
   23116      Note that the type visibility is applied to vague linkage entities
   23117      associated with the class (vtable, typeinfo node, etc.).  In
   23118      particular, if a class is thrown as an exception in one shared
   23119      object and caught in another, the class must have default
   23120      visibility.  Otherwise the two shared objects will be unable to
   23121      use the same typeinfo node and exception handling will break.
   23122 
   23123 
   23124 6.37.1 ARM Type Attributes
   23125 --------------------------
   23126 
   23127 On those ARM targets that support `dllimport' (such as Symbian OS), you
   23128 can use the `notshared' attribute to indicate that the virtual table
   23129 and other similar data for a class should not be exported from a DLL.
   23130 For example:
   23131 
   23132      class __declspec(notshared) C {
   23133      public:
   23134        __declspec(dllimport) C();
   23135        virtual void f();
   23136      }
   23137 
   23138      __declspec(dllexport)
   23139      C::C() {}
   23140 
   23141  In this code, `C::C' is exported from the current DLL, but the virtual
   23142 table for `C' is not exported.  (You can use `__attribute__' instead of
   23143 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
   23144 
   23145 6.37.2 MeP Type Attributes
   23146 --------------------------
   23147 
   23148 Many of the MeP variable attributes may be applied to types as well.
   23149 Specifically, the `based', `tiny', `near', and `far' attributes may be
   23150 applied to either.  The `io' and `cb' attributes may not be applied to
   23151 types.
   23152 
   23153 6.37.3 i386 Type Attributes
   23154 ---------------------------
   23155 
   23156 Two attributes are currently defined for i386 configurations:
   23157 `ms_struct' and `gcc_struct'.
   23158 
   23159 `ms_struct'
   23160 `gcc_struct'
   23161      If `packed' is used on a structure, or if bit-fields are used it
   23162      may be that the Microsoft ABI packs them differently than GCC
   23163      would normally pack them.  Particularly when moving packed data
   23164      between functions compiled with GCC and the native Microsoft
   23165      compiler (either via function call or as data in a file), it may
   23166      be necessary to access either format.
   23167 
   23168      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
   23169      Windows X86 compilers to match the native Microsoft compiler.
   23170 
   23171  To specify multiple attributes, separate them by commas within the
   23172 double parentheses: for example, `__attribute__ ((aligned (16),
   23173 packed))'.
   23174 
   23175 6.37.4 PowerPC Type Attributes
   23176 ------------------------------
   23177 
   23178 Three attributes currently are defined for PowerPC configurations:
   23179 `altivec', `ms_struct' and `gcc_struct'.
   23180 
   23181  For full documentation of the `ms_struct' and `gcc_struct' attributes
   23182 please see the documentation in *note i386 Type Attributes::.
   23183 
   23184  The `altivec' attribute allows one to declare AltiVec vector data
   23185 types supported by the AltiVec Programming Interface Manual.  The
   23186 attribute requires an argument to specify one of three vector types:
   23187 `vector__', `pixel__' (always followed by unsigned short), and `bool__'
   23188 (always followed by unsigned).
   23189 
   23190      __attribute__((altivec(vector__)))
   23191      __attribute__((altivec(pixel__))) unsigned short
   23192      __attribute__((altivec(bool__))) unsigned
   23193 
   23194  These attributes mainly are intended to support the `__vector',
   23195 `__pixel', and `__bool' AltiVec keywords.
   23196 
   23197 6.37.5 SPU Type Attributes
   23198 --------------------------
   23199 
   23200 The SPU supports the `spu_vector' attribute for types.  This attribute
   23201 allows one to declare vector data types supported by the
   23202 Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
   23203 to support the `__vector' keyword.
   23204 
   23205 
   23206 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
   23207 
   23208 6.38 Inquiring on Alignment of Types or Variables
   23209 =================================================
   23210 
   23211 The keyword `__alignof__' allows you to inquire about how an object is
   23212 aligned, or the minimum alignment usually required by a type.  Its
   23213 syntax is just like `sizeof'.
   23214 
   23215  For example, if the target machine requires a `double' value to be
   23216 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
   23217 is true on many RISC machines.  On more traditional machine designs,
   23218 `__alignof__ (double)' is 4 or even 2.
   23219 
   23220  Some machines never actually require alignment; they allow reference
   23221 to any data type even at an odd address.  For these machines,
   23222 `__alignof__' reports the smallest alignment that GCC will give the
   23223 data type, usually as mandated by the target ABI.
   23224 
   23225  If the operand of `__alignof__' is an lvalue rather than a type, its
   23226 value is the required alignment for its type, taking into account any
   23227 minimum alignment specified with GCC's `__attribute__' extension (*note
   23228 Variable Attributes::).  For example, after this declaration:
   23229 
   23230      struct foo { int x; char y; } foo1;
   23231 
   23232 the value of `__alignof__ (foo1.y)' is 1, even though its actual
   23233 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
   23234 
   23235  It is an error to ask for the alignment of an incomplete type.
   23236 
   23237 
   23238 File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
   23239 
   23240 6.39 An Inline Function is As Fast As a Macro
   23241 =============================================
   23242 
   23243 By declaring a function inline, you can direct GCC to make calls to
   23244 that function faster.  One way GCC can achieve this is to integrate
   23245 that function's code into the code for its callers.  This makes
   23246 execution faster by eliminating the function-call overhead; in
   23247 addition, if any of the actual argument values are constant, their
   23248 known values may permit simplifications at compile time so that not all
   23249 of the inline function's code needs to be included.  The effect on code
   23250 size is less predictable; object code may be larger or smaller with
   23251 function inlining, depending on the particular case.  You can also
   23252 direct GCC to try to integrate all "simple enough" functions into their
   23253 callers with the option `-finline-functions'.
   23254 
   23255  GCC implements three different semantics of declaring a function
   23256 inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
   23257 `gnu_inline' attribute is present on all inline declarations, another
   23258 when `-std=c99', `-std=c1x', `-std=gnu99' or `-std=gnu1x' (without
   23259 `-fgnu89-inline'), and the third is used when compiling C++.
   23260 
   23261  To declare a function inline, use the `inline' keyword in its
   23262 declaration, like this:
   23263 
   23264      static inline int
   23265      inc (int *a)
   23266      {
   23267        return (*a)++;
   23268      }
   23269 
   23270  If you are writing a header file to be included in ISO C90 programs,
   23271 write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
   23272 
   23273  The three types of inlining behave similarly in two important cases:
   23274 when the `inline' keyword is used on a `static' function, like the
   23275 example above, and when a function is first declared without using the
   23276 `inline' keyword and then is defined with `inline', like this:
   23277 
   23278      extern int inc (int *a);
   23279      inline int
   23280      inc (int *a)
   23281      {
   23282        return (*a)++;
   23283      }
   23284 
   23285  In both of these common cases, the program behaves the same as if you
   23286 had not used the `inline' keyword, except for its speed.
   23287 
   23288  When a function is both inline and `static', if all calls to the
   23289 function are integrated into the caller, and the function's address is
   23290 never used, then the function's own assembler code is never referenced.
   23291 In this case, GCC does not actually output assembler code for the
   23292 function, unless you specify the option `-fkeep-inline-functions'.
   23293 Some calls cannot be integrated for various reasons (in particular,
   23294 calls that precede the function's definition cannot be integrated, and
   23295 neither can recursive calls within the definition).  If there is a
   23296 nonintegrated call, then the function is compiled to assembler code as
   23297 usual.  The function must also be compiled as usual if the program
   23298 refers to its address, because that can't be inlined.
   23299 
   23300  Note that certain usages in a function definition can make it
   23301 unsuitable for inline substitution.  Among these usages are: use of
   23302 varargs, use of alloca, use of variable sized data types (*note
   23303 Variable Length::), use of computed goto (*note Labels as Values::),
   23304 use of nonlocal goto, and nested functions (*note Nested Functions::).
   23305 Using `-Winline' will warn when a function marked `inline' could not be
   23306 substituted, and will give the reason for the failure.
   23307 
   23308  As required by ISO C++, GCC considers member functions defined within
   23309 the body of a class to be marked inline even if they are not explicitly
   23310 declared with the `inline' keyword.  You can override this with
   23311 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++
   23312 Dialect Options.
   23313 
   23314  GCC does not inline any functions when not optimizing unless you
   23315 specify the `always_inline' attribute for the function, like this:
   23316 
   23317      /* Prototype.  */
   23318      inline void foo (const char) __attribute__((always_inline));
   23319 
   23320  The remainder of this section is specific to GNU C90 inlining.
   23321 
   23322  When an inline function is not `static', then the compiler must assume
   23323 that there may be calls from other source files; since a global symbol
   23324 can be defined only once in any program, the function must not be
   23325 defined in the other source files, so the calls therein cannot be
   23326 integrated.  Therefore, a non-`static' inline function is always
   23327 compiled on its own in the usual fashion.
   23328 
   23329  If you specify both `inline' and `extern' in the function definition,
   23330 then the definition is used only for inlining.  In no case is the
   23331 function compiled on its own, not even if you refer to its address
   23332 explicitly.  Such an address becomes an external reference, as if you
   23333 had only declared the function, and had not defined it.
   23334 
   23335  This combination of `inline' and `extern' has almost the effect of a
   23336 macro.  The way to use it is to put a function definition in a header
   23337 file with these keywords, and put another copy of the definition
   23338 (lacking `inline' and `extern') in a library file.  The definition in
   23339 the header file will cause most calls to the function to be inlined.
   23340 If any uses of the function remain, they will refer to the single copy
   23341 in the library.
   23342 
   23343 
   23344 File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions
   23345 
   23346 6.40 When is a Volatile Object Accessed?
   23347 ========================================
   23348 
   23349 C has the concept of volatile objects.  These are normally accessed by
   23350 pointers and used for accessing hardware or inter-thread communication.
   23351 The standard encourages compilers to refrain from optimizations
   23352 concerning accesses to volatile objects, but leaves it implementation
   23353 defined as to what constitutes a volatile access.  The minimum
   23354 requirement is that at a sequence point all previous accesses to
   23355 volatile objects have stabilized and no subsequent accesses have
   23356 occurred.  Thus an implementation is free to reorder and combine
   23357 volatile accesses which occur between sequence points, but cannot do so
   23358 for accesses across a sequence point.  The use of volatile does not
   23359 allow you to violate the restriction on updating objects multiple times
   23360 between two sequence points.
   23361 
   23362  Accesses to non-volatile objects are not ordered with respect to
   23363 volatile accesses.  You cannot use a volatile object as a memory
   23364 barrier to order a sequence of writes to non-volatile memory.  For
   23365 instance:
   23366 
   23367      int *ptr = SOMETHING;
   23368      volatile int vobj;
   23369      *ptr = SOMETHING;
   23370      vobj = 1;
   23371 
   23372  Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
   23373 write to *PTR will have occurred by the time the update of VOBJ has
   23374 happened.  If you need this guarantee, you must use a stronger memory
   23375 barrier such as:
   23376 
   23377      int *ptr = SOMETHING;
   23378      volatile int vobj;
   23379      *ptr = SOMETHING;
   23380      asm volatile ("" : : : "memory");
   23381      vobj = 1;
   23382 
   23383  A scalar volatile object is read when it is accessed in a void context:
   23384 
   23385      volatile int *src = SOMEVALUE;
   23386      *src;
   23387 
   23388  Such expressions are rvalues, and GCC implements this as a read of the
   23389 volatile object being pointed to.
   23390 
   23391  Assignments are also expressions and have an rvalue.  However when
   23392 assigning to a scalar volatile, the volatile object is not reread,
   23393 regardless of whether the assignment expression's rvalue is used or
   23394 not.  If the assignment's rvalue is used, the value is that assigned to
   23395 the volatile object.  For instance, there is no read of VOBJ in all the
   23396 following cases:
   23397 
   23398      int obj;
   23399      volatile int vobj;
   23400      vobj = SOMETHING;
   23401      obj = vobj = SOMETHING;
   23402      obj ? vobj = ONETHING : vobj = ANOTHERTHING;
   23403      obj = (SOMETHING, vobj = ANOTHERTHING);
   23404 
   23405  If you need to read the volatile object after an assignment has
   23406 occurred, you must use a separate expression with an intervening
   23407 sequence point.
   23408 
   23409  As bitfields are not individually addressable, volatile bitfields may
   23410 be implicitly read when written to, or when adjacent bitfields are
   23411 accessed.  Bitfield operations may be optimized such that adjacent
   23412 bitfields are only partially accessed, if they straddle a storage unit
   23413 boundary.  For these reasons it is unwise to use volatile bitfields to
   23414 access hardware.
   23415 
   23416 
   23417 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions
   23418 
   23419 6.41 Assembler Instructions with C Expression Operands
   23420 ======================================================
   23421 
   23422 In an assembler instruction using `asm', you can specify the operands
   23423 of the instruction using C expressions.  This means you need not guess
   23424 which registers or memory locations will contain the data you want to
   23425 use.
   23426 
   23427  You must specify an assembler instruction template much like what
   23428 appears in a machine description, plus an operand constraint string for
   23429 each operand.
   23430 
   23431  For example, here is how to use the 68881's `fsinx' instruction:
   23432 
   23433      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
   23434 
   23435 Here `angle' is the C expression for the input operand while `result'
   23436 is that of the output operand.  Each has `"f"' as its operand
   23437 constraint, saying that a floating point register is required.  The `='
   23438 in `=f' indicates that the operand is an output; all output operands'
   23439 constraints must use `='.  The constraints use the same language used
   23440 in the machine description (*note Constraints::).
   23441 
   23442  Each operand is described by an operand-constraint string followed by
   23443 the C expression in parentheses.  A colon separates the assembler
   23444 template from the first output operand and another separates the last
   23445 output operand from the first input, if any.  Commas separate the
   23446 operands within each group.  The total number of operands is currently
   23447 limited to 30; this limitation may be lifted in some future version of
   23448 GCC.
   23449 
   23450  If there are no output operands but there are input operands, you must
   23451 place two consecutive colons surrounding the place where the output
   23452 operands would go.
   23453 
   23454  As of GCC version 3.1, it is also possible to specify input and output
   23455 operands using symbolic names which can be referenced within the
   23456 assembler code.  These names are specified inside square brackets
   23457 preceding the constraint string, and can be referenced inside the
   23458 assembler code using `%[NAME]' instead of a percentage sign followed by
   23459 the operand number.  Using named operands the above example could look
   23460 like:
   23461 
   23462      asm ("fsinx %[angle],%[output]"
   23463           : [output] "=f" (result)
   23464           : [angle] "f" (angle));
   23465 
   23466 Note that the symbolic operand names have no relation whatsoever to
   23467 other C identifiers.  You may use any name you like, even those of
   23468 existing C symbols, but you must ensure that no two operands within the
   23469 same assembler construct use the same symbolic name.
   23470 
   23471  Output operand expressions must be lvalues; the compiler can check
   23472 this.  The input operands need not be lvalues.  The compiler cannot
   23473 check whether the operands have data types that are reasonable for the
   23474 instruction being executed.  It does not parse the assembler instruction
   23475 template and does not know what it means or even whether it is valid
   23476 assembler input.  The extended `asm' feature is most often used for
   23477 machine instructions the compiler itself does not know exist.  If the
   23478 output expression cannot be directly addressed (for example, it is a
   23479 bit-field), your constraint must allow a register.  In that case, GCC
   23480 will use the register as the output of the `asm', and then store that
   23481 register into the output.
   23482 
   23483  The ordinary output operands must be write-only; GCC will assume that
   23484 the values in these operands before the instruction are dead and need
   23485 not be generated.  Extended asm supports input-output or read-write
   23486 operands.  Use the constraint character `+' to indicate such an operand
   23487 and list it with the output operands.  You should only use read-write
   23488 operands when the constraints for the operand (or the operand in which
   23489 only some of the bits are to be changed) allow a register.
   23490 
   23491  You may, as an alternative, logically split its function into two
   23492 separate operands, one input operand and one write-only output operand.
   23493 The connection between them is expressed by constraints which say they
   23494 need to be in the same location when the instruction executes.  You can
   23495 use the same C expression for both operands, or different expressions.
   23496 For example, here we write the (fictitious) `combine' instruction with
   23497 `bar' as its read-only source operand and `foo' as its read-write
   23498 destination:
   23499 
   23500      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
   23501 
   23502 The constraint `"0"' for operand 1 says that it must occupy the same
   23503 location as operand 0.  A number in constraint is allowed only in an
   23504 input operand and it must refer to an output operand.
   23505 
   23506  Only a number in the constraint can guarantee that one operand will be
   23507 in the same place as another.  The mere fact that `foo' is the value of
   23508 both operands is not enough to guarantee that they will be in the same
   23509 place in the generated assembler code.  The following would not work
   23510 reliably:
   23511 
   23512      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
   23513 
   23514  Various optimizations or reloading could cause operands 0 and 1 to be
   23515 in different registers; GCC knows no reason not to do so.  For example,
   23516 the compiler might find a copy of the value of `foo' in one register and
   23517 use it for operand 1, but generate the output operand 0 in a different
   23518 register (copying it afterward to `foo''s own address).  Of course,
   23519 since the register for operand 1 is not even mentioned in the assembler
   23520 code, the result will not work, but GCC can't tell that.
   23521 
   23522  As of GCC version 3.1, one may write `[NAME]' instead of the operand
   23523 number for a matching constraint.  For example:
   23524 
   23525      asm ("cmoveq %1,%2,%[result]"
   23526           : [result] "=r"(result)
   23527           : "r" (test), "r"(new), "[result]"(old));
   23528 
   23529  Sometimes you need to make an `asm' operand be a specific register,
   23530 but there's no matching constraint letter for that register _by
   23531 itself_.  To force the operand into that register, use a local variable
   23532 for the operand and specify the register in the variable declaration.
   23533 *Note Explicit Reg Vars::.  Then for the `asm' operand, use any
   23534 register constraint letter that matches the register:
   23535 
   23536      register int *p1 asm ("r0") = ...;
   23537      register int *p2 asm ("r1") = ...;
   23538      register int *result asm ("r0");
   23539      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   23540 
   23541  In the above example, beware that a register that is call-clobbered by
   23542 the target ABI will be overwritten by any function call in the
   23543 assignment, including library calls for arithmetic operators.  Also a
   23544 register may be clobbered when generating some operations, like
   23545 variable shift, memory copy or memory move on x86.  Assuming it is a
   23546 call-clobbered register, this may happen to `r0' above by the
   23547 assignment to `p2'.  If you have to use such a register, use temporary
   23548 variables for expressions between the register assignment and use:
   23549 
   23550      int t1 = ...;
   23551      register int *p1 asm ("r0") = ...;
   23552      register int *p2 asm ("r1") = t1;
   23553      register int *result asm ("r0");
   23554      asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
   23555 
   23556  Some instructions clobber specific hard registers.  To describe this,
   23557 write a third colon after the input operands, followed by the names of
   23558 the clobbered hard registers (given as strings).  Here is a realistic
   23559 example for the VAX:
   23560 
   23561      asm volatile ("movc3 %0,%1,%2"
   23562                    : /* no outputs */
   23563                    : "g" (from), "g" (to), "g" (count)
   23564                    : "r0", "r1", "r2", "r3", "r4", "r5");
   23565 
   23566  You may not write a clobber description in a way that overlaps with an
   23567 input or output operand.  For example, you may not have an operand
   23568 describing a register class with one member if you mention that register
   23569 in the clobber list.  Variables declared to live in specific registers
   23570 (*note Explicit Reg Vars::), and used as asm input or output operands
   23571 must have no part mentioned in the clobber description.  There is no
   23572 way for you to specify that an input operand is modified without also
   23573 specifying it as an output operand.  Note that if all the output
   23574 operands you specify are for this purpose (and hence unused), you will
   23575 then also need to specify `volatile' for the `asm' construct, as
   23576 described below, to prevent GCC from deleting the `asm' statement as
   23577 unused.
   23578 
   23579  If you refer to a particular hardware register from the assembler code,
   23580 you will probably have to list the register after the third colon to
   23581 tell the compiler the register's value is modified.  In some assemblers,
   23582 the register names begin with `%'; to produce one `%' in the assembler
   23583 code, you must write `%%' in the input.
   23584 
   23585  If your assembler instruction can alter the condition code register,
   23586 add `cc' to the list of clobbered registers.  GCC on some machines
   23587 represents the condition codes as a specific hardware register; `cc'
   23588 serves to name this register.  On other machines, the condition code is
   23589 handled differently, and specifying `cc' has no effect.  But it is
   23590 valid no matter what the machine.
   23591 
   23592  If your assembler instructions access memory in an unpredictable
   23593 fashion, add `memory' to the list of clobbered registers.  This will
   23594 cause GCC to not keep memory values cached in registers across the
   23595 assembler instruction and not optimize stores or loads to that memory.
   23596 You will also want to add the `volatile' keyword if the memory affected
   23597 is not listed in the inputs or outputs of the `asm', as the `memory'
   23598 clobber does not count as a side-effect of the `asm'.  If you know how
   23599 large the accessed memory is, you can add it as input or output but if
   23600 this is not known, you should add `memory'.  As an example, if you
   23601 access ten bytes of a string, you can use a memory input like:
   23602 
   23603      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
   23604 
   23605  Note that in the following example the memory input is necessary,
   23606 otherwise GCC might optimize the store to `x' away:
   23607      int foo ()
   23608      {
   23609        int x = 42;
   23610        int *y = &x;
   23611        int result;
   23612        asm ("magic stuff accessing an 'int' pointed to by '%1'"
   23613              "=&d" (r) : "a" (y), "m" (*y));
   23614        return result;
   23615      }
   23616 
   23617  You can put multiple assembler instructions together in a single `asm'
   23618 template, separated by the characters normally used in assembly code
   23619 for the system.  A combination that works in most places is a newline
   23620 to break the line, plus a tab character to move to the instruction field
   23621 (written as `\n\t').  Sometimes semicolons can be used, if the
   23622 assembler allows semicolons as a line-breaking character.  Note that
   23623 some assembler dialects use semicolons to start a comment.  The input
   23624 operands are guaranteed not to use any of the clobbered registers, and
   23625 neither will the output operands' addresses, so you can read and write
   23626 the clobbered registers as many times as you like.  Here is an example
   23627 of multiple instructions in a template; it assumes the subroutine
   23628 `_foo' accepts arguments in registers 9 and 10:
   23629 
   23630      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
   23631           : /* no outputs */
   23632           : "g" (from), "g" (to)
   23633           : "r9", "r10");
   23634 
   23635  Unless an output operand has the `&' constraint modifier, GCC may
   23636 allocate it in the same register as an unrelated input operand, on the
   23637 assumption the inputs are consumed before the outputs are produced.
   23638 This assumption may be false if the assembler code actually consists of
   23639 more than one instruction.  In such a case, use `&' for each output
   23640 operand that may not overlap an input.  *Note Modifiers::.
   23641 
   23642  If you want to test the condition code produced by an assembler
   23643 instruction, you must include a branch and a label in the `asm'
   23644 construct, as follows:
   23645 
   23646      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
   23647           : "g" (result)
   23648           : "g" (input));
   23649 
   23650 This assumes your assembler supports local labels, as the GNU assembler
   23651 and most Unix assemblers do.
   23652 
   23653  Speaking of labels, jumps from one `asm' to another are not supported.
   23654 The compiler's optimizers do not know about these jumps, and therefore
   23655 they cannot take account of them when deciding how to optimize.  *Note
   23656 Extended asm with goto::.
   23657 
   23658  Usually the most convenient way to use these `asm' instructions is to
   23659 encapsulate them in macros that look like functions.  For example,
   23660 
   23661      #define sin(x)       \
   23662      ({ double __value, __arg = (x);   \
   23663         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
   23664         __value; })
   23665 
   23666 Here the variable `__arg' is used to make sure that the instruction
   23667 operates on a proper `double' value, and to accept only those arguments
   23668 `x' which can convert automatically to a `double'.
   23669 
   23670  Another way to make sure the instruction operates on the correct data
   23671 type is to use a cast in the `asm'.  This is different from using a
   23672 variable `__arg' in that it converts more different types.  For
   23673 example, if the desired type were `int', casting the argument to `int'
   23674 would accept a pointer with no complaint, while assigning the argument
   23675 to an `int' variable named `__arg' would warn about using a pointer
   23676 unless the caller explicitly casts it.
   23677 
   23678  If an `asm' has output operands, GCC assumes for optimization purposes
   23679 the instruction has no side effects except to change the output
   23680 operands.  This does not mean instructions with a side effect cannot be
   23681 used, but you must be careful, because the compiler may eliminate them
   23682 if the output operands aren't used, or move them out of loops, or
   23683 replace two with one if they constitute a common subexpression.  Also,
   23684 if your instruction does have a side effect on a variable that otherwise
   23685 appears not to change, the old value of the variable may be reused later
   23686 if it happens to be found in a register.
   23687 
   23688  You can prevent an `asm' instruction from being deleted by writing the
   23689 keyword `volatile' after the `asm'.  For example:
   23690 
   23691      #define get_and_set_priority(new)              \
   23692      ({ int __old;                                  \
   23693         asm volatile ("get_and_set_priority %0, %1" \
   23694                       : "=g" (__old) : "g" (new));  \
   23695         __old; })
   23696 
   23697 The `volatile' keyword indicates that the instruction has important
   23698 side-effects.  GCC will not delete a volatile `asm' if it is reachable.
   23699 (The instruction can still be deleted if GCC can prove that
   23700 control-flow will never reach the location of the instruction.)  Note
   23701 that even a volatile `asm' instruction can be moved relative to other
   23702 code, including across jump instructions.  For example, on many targets
   23703 there is a system register which can be set to control the rounding
   23704 mode of floating point operations.  You might try setting it with a
   23705 volatile `asm', like this PowerPC example:
   23706 
   23707             asm volatile("mtfsf 255,%0" : : "f" (fpenv));
   23708             sum = x + y;
   23709 
   23710 This will not work reliably, as the compiler may move the addition back
   23711 before the volatile `asm'.  To make it work you need to add an
   23712 artificial dependency to the `asm' referencing a variable in the code
   23713 you don't want moved, for example:
   23714 
   23715          asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
   23716          sum = x + y;
   23717 
   23718  Similarly, you can't expect a sequence of volatile `asm' instructions
   23719 to remain perfectly consecutive.  If you want consecutive output, use a
   23720 single `asm'.  Also, GCC will perform some optimizations across a
   23721 volatile `asm' instruction; GCC does not "forget everything" when it
   23722 encounters a volatile `asm' instruction the way some other compilers do.
   23723 
   23724  An `asm' instruction without any output operands will be treated
   23725 identically to a volatile `asm' instruction.
   23726 
   23727  It is a natural idea to look for a way to give access to the condition
   23728 code left by the assembler instruction.  However, when we attempted to
   23729 implement this, we found no way to make it work reliably.  The problem
   23730 is that output operands might need reloading, which would result in
   23731 additional following "store" instructions.  On most machines, these
   23732 instructions would alter the condition code before there was time to
   23733 test it.  This problem doesn't arise for ordinary "test" and "compare"
   23734 instructions because they don't have any output operands.
   23735 
   23736  For reasons similar to those described above, it is not possible to
   23737 give an assembler instruction access to the condition code left by
   23738 previous instructions.
   23739 
   23740  As of GCC version 4.5, `asm goto' may be used to have the assembly
   23741 jump to one or more C labels.  In this form, a fifth section after the
   23742 clobber list contains a list of all C labels to which the assembly may
   23743 jump.  Each label operand is implicitly self-named.  The `asm' is also
   23744 assumed to fall through to the next statement.
   23745 
   23746  This form of `asm' is restricted to not have outputs.  This is due to
   23747 a internal restriction in the compiler that control transfer
   23748 instructions cannot have outputs.  This restriction on `asm goto' may
   23749 be lifted in some future version of the compiler.  In the mean time,
   23750 `asm goto' may include a memory clobber, and so leave outputs in memory.
   23751 
   23752      int frob(int x)
   23753      {
   23754        int y;
   23755        asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
   23756                  : : "r"(x), "r"(&y) : "r5", "memory" : error);
   23757        return y;
   23758       error:
   23759        return -1;
   23760      }
   23761 
   23762  In this (inefficient) example, the `frob' instruction sets the carry
   23763 bit to indicate an error.  The `jc' instruction detects this and
   23764 branches to the `error' label.  Finally, the output of the `frob'
   23765 instruction (`%r5') is stored into the memory for variable `y', which
   23766 is later read by the `return' statement.
   23767 
   23768      void doit(void)
   23769      {
   23770        int i = 0;
   23771        asm goto ("mfsr %%r1, 123; jmp %%r1;"
   23772                  ".pushsection doit_table;"
   23773                  ".long %l0, %l1, %l2, %l3;"
   23774                  ".popsection"
   23775                  : : : "r1" : label1, label2, label3, label4);
   23776        __builtin_unreachable ();
   23777 
   23778       label1:
   23779        f1();
   23780        return;
   23781       label2:
   23782        f2();
   23783        return;
   23784       label3:
   23785        i = 1;
   23786       label4:
   23787        f3(i);
   23788      }
   23789 
   23790  In this (also inefficient) example, the `mfsr' instruction reads an
   23791 address from some out-of-band machine register, and the following `jmp'
   23792 instruction branches to that address.  The address read by the `mfsr'
   23793 instruction is assumed to have been previously set via some
   23794 application-specific mechanism to be one of the four values stored in
   23795 the `doit_table' section.  Finally, the `asm' is followed by a call to
   23796 `__builtin_unreachable' to indicate that the `asm' does not in fact
   23797 fall through.
   23798 
   23799      #define TRACE1(NUM)                         \
   23800        do {                                      \
   23801          asm goto ("0: nop;"                     \
   23802                    ".pushsection trace_table;"   \
   23803                    ".long 0b, %l0;"              \
   23804                    ".popsection"                 \
   23805                    : : : : trace#NUM);           \
   23806          if (0) { trace#NUM: trace(); }          \
   23807        } while (0)
   23808      #define TRACE  TRACE1(__COUNTER__)
   23809 
   23810  In this example (which in fact inspired the `asm goto' feature) we
   23811 want on rare occasions to call the `trace' function; on other occasions
   23812 we'd like to keep the overhead to the absolute minimum.  The normal
   23813 code path consists of a single `nop' instruction.  However, we record
   23814 the address of this `nop' together with the address of a label that
   23815 calls the `trace' function.  This allows the `nop' instruction to be
   23816 patched at runtime to be an unconditional branch to the stored label.
   23817 It is assumed that an optimizing compiler will move the labeled block
   23818 out of line, to optimize the fall through path from the `asm'.
   23819 
   23820  If you are writing a header file that should be includable in ISO C
   23821 programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
   23822 
   23823 6.41.1 Size of an `asm'
   23824 -----------------------
   23825 
   23826 Some targets require that GCC track the size of each instruction used in
   23827 order to generate correct code.  Because the final length of an `asm'
   23828 is only known by the assembler, GCC must make an estimate as to how big
   23829 it will be.  The estimate is formed by counting the number of
   23830 statements in the pattern of the `asm' and multiplying that by the
   23831 length of the longest instruction on that processor.  Statements in the
   23832 `asm' are identified by newline characters and whatever statement
   23833 separator characters are supported by the assembler; on most processors
   23834 this is the ``;'' character.
   23835 
   23836  Normally, GCC's estimate is perfectly adequate to ensure that correct
   23837 code is generated, but it is possible to confuse the compiler if you use
   23838 pseudo instructions or assembler macros that expand into multiple real
   23839 instructions or if you use assembler directives that expand to more
   23840 space in the object file than would be needed for a single instruction.
   23841 If this happens then the assembler will produce a diagnostic saying that
   23842 a label is unreachable.
   23843 
   23844 6.41.2 i386 floating point asm operands
   23845 ---------------------------------------
   23846 
   23847 There are several rules on the usage of stack-like regs in asm_operands
   23848 insns.  These rules apply only to the operands that are stack-like regs:
   23849 
   23850   1. Given a set of input regs that die in an asm_operands, it is
   23851      necessary to know which are implicitly popped by the asm, and
   23852      which must be explicitly popped by gcc.
   23853 
   23854      An input reg that is implicitly popped by the asm must be
   23855      explicitly clobbered, unless it is constrained to match an output
   23856      operand.
   23857 
   23858   2. For any input reg that is implicitly popped by an asm, it is
   23859      necessary to know how to adjust the stack to compensate for the
   23860      pop.  If any non-popped input is closer to the top of the
   23861      reg-stack than the implicitly popped reg, it would not be possible
   23862      to know what the stack looked like--it's not clear how the rest of
   23863      the stack "slides up".
   23864 
   23865      All implicitly popped input regs must be closer to the top of the
   23866      reg-stack than any input that is not implicitly popped.
   23867 
   23868      It is possible that if an input dies in an insn, reload might use
   23869      the input reg for an output reload.  Consider this example:
   23870 
   23871           asm ("foo" : "=t" (a) : "f" (b));
   23872 
   23873      This asm says that input B is not popped by the asm, and that the
   23874      asm pushes a result onto the reg-stack, i.e., the stack is one
   23875      deeper after the asm than it was before.  But, it is possible that
   23876      reload will think that it can use the same reg for both the input
   23877      and the output, if input B dies in this insn.
   23878 
   23879      If any input operand uses the `f' constraint, all output reg
   23880      constraints must use the `&' earlyclobber.
   23881 
   23882      The asm above would be written as
   23883 
   23884           asm ("foo" : "=&t" (a) : "f" (b));
   23885 
   23886   3. Some operands need to be in particular places on the stack.  All
   23887      output operands fall in this category--there is no other way to
   23888      know which regs the outputs appear in unless the user indicates
   23889      this in the constraints.
   23890 
   23891      Output operands must specifically indicate which reg an output
   23892      appears in after an asm.  `=f' is not allowed: the operand
   23893      constraints must select a class with a single reg.
   23894 
   23895   4. Output operands may not be "inserted" between existing stack regs.
   23896      Since no 387 opcode uses a read/write operand, all output operands
   23897      are dead before the asm_operands, and are pushed by the
   23898      asm_operands.  It makes no sense to push anywhere but the top of
   23899      the reg-stack.
   23900 
   23901      Output operands must start at the top of the reg-stack: output
   23902      operands may not "skip" a reg.
   23903 
   23904   5. Some asm statements may need extra stack space for internal
   23905      calculations.  This can be guaranteed by clobbering stack registers
   23906      unrelated to the inputs and outputs.
   23907 
   23908 
   23909  Here are a couple of reasonable asms to want to write.  This asm takes
   23910 one input, which is internally popped, and produces two outputs.
   23911 
   23912      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
   23913 
   23914  This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
   23915 and replaces them with one output.  The user must code the `st(1)'
   23916 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
   23917 
   23918      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
   23919 
   23920 
   23921 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
   23922 
   23923 6.42 Constraints for `asm' Operands
   23924 ===================================
   23925 
   23926 Here are specific details on what constraint letters you can use with
   23927 `asm' operands.  Constraints can say whether an operand may be in a
   23928 register, and which kinds of register; whether the operand can be a
   23929 memory reference, and which kinds of address; whether the operand may
   23930 be an immediate constant, and which possible values it may have.
   23931 Constraints can also require two operands to match.  Side-effects
   23932 aren't allowed in operands of inline `asm', unless `<' or `>'
   23933 constraints are used, because there is no guarantee that the
   23934 side-effects will happen exactly once in an instruction that can update
   23935 the addressing register.
   23936 
   23937 * Menu:
   23938 
   23939 * Simple Constraints::  Basic use of constraints.
   23940 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
   23941 * Modifiers::           More precise control over effects of constraints.
   23942 * Machine Constraints:: Special constraints for some particular machines.
   23943 
   23944 
   23945 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
   23946 
   23947 6.42.1 Simple Constraints
   23948 -------------------------
   23949 
   23950 The simplest kind of constraint is a string full of letters, each of
   23951 which describes one kind of operand that is permitted.  Here are the
   23952 letters that are allowed:
   23953 
   23954 whitespace
   23955      Whitespace characters are ignored and can be inserted at any
   23956      position except the first.  This enables each alternative for
   23957      different operands to be visually aligned in the machine
   23958      description even if they have different number of constraints and
   23959      modifiers.
   23960 
   23961 `m'
   23962      A memory operand is allowed, with any kind of address that the
   23963      machine supports in general.  Note that the letter used for the
   23964      general memory constraint can be re-defined by a back end using
   23965      the `TARGET_MEM_CONSTRAINT' macro.
   23966 
   23967 `o'
   23968      A memory operand is allowed, but only if the address is
   23969      "offsettable".  This means that adding a small integer (actually,
   23970      the width in bytes of the operand, as determined by its machine
   23971      mode) may be added to the address and the result is also a valid
   23972      memory address.
   23973 
   23974      For example, an address which is constant is offsettable; so is an
   23975      address that is the sum of a register and a constant (as long as a
   23976      slightly larger constant is also within the range of
   23977      address-offsets supported by the machine); but an autoincrement or
   23978      autodecrement address is not offsettable.  More complicated
   23979      indirect/indexed addresses may or may not be offsettable depending
   23980      on the other addressing modes that the machine supports.
   23981 
   23982      Note that in an output operand which can be matched by another
   23983      operand, the constraint letter `o' is valid only when accompanied
   23984      by both `<' (if the target machine has predecrement addressing)
   23985      and `>' (if the target machine has preincrement addressing).
   23986 
   23987 `V'
   23988      A memory operand that is not offsettable.  In other words,
   23989      anything that would fit the `m' constraint but not the `o'
   23990      constraint.
   23991 
   23992 `<'
   23993      A memory operand with autodecrement addressing (either
   23994      predecrement or postdecrement) is allowed.  In inline `asm' this
   23995      constraint is only allowed if the operand is used exactly once in
   23996      an instruction that can handle the side-effects.  Not using an
   23997      operand with `<' in constraint string in the inline `asm' pattern
   23998      at all or using it in multiple instructions isn't valid, because
   23999      the side-effects wouldn't be performed or would be performed more
   24000      than once.  Furthermore, on some targets the operand with `<' in
   24001      constraint string must be accompanied by special instruction
   24002      suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
   24003      IA-64.
   24004 
   24005 `>'
   24006      A memory operand with autoincrement addressing (either
   24007      preincrement or postincrement) is allowed.  In inline `asm' the
   24008      same restrictions as for `<' apply.
   24009 
   24010 `r'
   24011      A register operand is allowed provided that it is in a general
   24012      register.
   24013 
   24014 `i'
   24015      An immediate integer operand (one with constant value) is allowed.
   24016      This includes symbolic constants whose values will be known only at
   24017      assembly time or later.
   24018 
   24019 `n'
   24020      An immediate integer operand with a known numeric value is allowed.
   24021      Many systems cannot support assembly-time constants for operands
   24022      less than a word wide.  Constraints for these operands should use
   24023      `n' rather than `i'.
   24024 
   24025 `I', `J', `K', ... `P'
   24026      Other letters in the range `I' through `P' may be defined in a
   24027      machine-dependent fashion to permit immediate integer operands with
   24028      explicit integer values in specified ranges.  For example, on the
   24029      68000, `I' is defined to stand for the range of values 1 to 8.
   24030      This is the range permitted as a shift count in the shift
   24031      instructions.
   24032 
   24033 `E'
   24034      An immediate floating operand (expression code `const_double') is
   24035      allowed, but only if the target floating point format is the same
   24036      as that of the host machine (on which the compiler is running).
   24037 
   24038 `F'
   24039      An immediate floating operand (expression code `const_double' or
   24040      `const_vector') is allowed.
   24041 
   24042 `G', `H'
   24043      `G' and `H' may be defined in a machine-dependent fashion to
   24044      permit immediate floating operands in particular ranges of values.
   24045 
   24046 `s'
   24047      An immediate integer operand whose value is not an explicit
   24048      integer is allowed.
   24049 
   24050      This might appear strange; if an insn allows a constant operand
   24051      with a value not known at compile time, it certainly must allow
   24052      any known value.  So why use `s' instead of `i'?  Sometimes it
   24053      allows better code to be generated.
   24054 
   24055      For example, on the 68000 in a fullword instruction it is possible
   24056      to use an immediate operand; but if the immediate value is between
   24057      -128 and 127, better code results from loading the value into a
   24058      register and using the register.  This is because the load into
   24059      the register can be done with a `moveq' instruction.  We arrange
   24060      for this to happen by defining the letter `K' to mean "any integer
   24061      outside the range -128 to 127", and then specifying `Ks' in the
   24062      operand constraints.
   24063 
   24064 `g'
   24065      Any register, memory or immediate integer operand is allowed,
   24066      except for registers that are not general registers.
   24067 
   24068 `X'
   24069      Any operand whatsoever is allowed.
   24070 
   24071 `0', `1', `2', ... `9'
   24072      An operand that matches the specified operand number is allowed.
   24073      If a digit is used together with letters within the same
   24074      alternative, the digit should come last.
   24075 
   24076      This number is allowed to be more than a single digit.  If multiple
   24077      digits are encountered consecutively, they are interpreted as a
   24078      single decimal integer.  There is scant chance for ambiguity,
   24079      since to-date it has never been desirable that `10' be interpreted
   24080      as matching either operand 1 _or_ operand 0.  Should this be
   24081      desired, one can use multiple alternatives instead.
   24082 
   24083      This is called a "matching constraint" and what it really means is
   24084      that the assembler has only a single operand that fills two roles
   24085      which `asm' distinguishes.  For example, an add instruction uses
   24086      two input operands and an output operand, but on most CISC
   24087      machines an add instruction really has only two operands, one of
   24088      them an input-output operand:
   24089 
   24090           addl #35,r12
   24091 
   24092      Matching constraints are used in these circumstances.  More
   24093      precisely, the two operands that match must include one input-only
   24094      operand and one output-only operand.  Moreover, the digit must be a
   24095      smaller number than the number of the operand that uses it in the
   24096      constraint.
   24097 
   24098 `p'
   24099      An operand that is a valid memory address is allowed.  This is for
   24100      "load address" and "push address" instructions.
   24101 
   24102      `p' in the constraint must be accompanied by `address_operand' as
   24103      the predicate in the `match_operand'.  This predicate interprets
   24104      the mode specified in the `match_operand' as the mode of the memory
   24105      reference for which the address would be valid.
   24106 
   24107 OTHER-LETTERS
   24108      Other letters can be defined in machine-dependent fashion to stand
   24109      for particular classes of registers or other arbitrary operand
   24110      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
   24111      for data, address and floating point registers.
   24112 
   24113 
   24114 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
   24115 
   24116 6.42.2 Multiple Alternative Constraints
   24117 ---------------------------------------
   24118 
   24119 Sometimes a single instruction has multiple alternative sets of possible
   24120 operands.  For example, on the 68000, a logical-or instruction can
   24121 combine register or an immediate value into memory, or it can combine
   24122 any kind of operand into a register; but it cannot combine one memory
   24123 location into another.
   24124 
   24125  These constraints are represented as multiple alternatives.  An
   24126 alternative can be described by a series of letters for each operand.
   24127 The overall constraint for an operand is made from the letters for this
   24128 operand from the first alternative, a comma, the letters for this
   24129 operand from the second alternative, a comma, and so on until the last
   24130 alternative.
   24131 
   24132  If all the operands fit any one alternative, the instruction is valid.
   24133 Otherwise, for each alternative, the compiler counts how many
   24134 instructions must be added to copy the operands so that that
   24135 alternative applies.  The alternative requiring the least copying is
   24136 chosen.  If two alternatives need the same amount of copying, the one
   24137 that comes first is chosen.  These choices can be altered with the `?'
   24138 and `!' characters:
   24139 
   24140 `?'
   24141      Disparage slightly the alternative that the `?' appears in, as a
   24142      choice when no alternative applies exactly.  The compiler regards
   24143      this alternative as one unit more costly for each `?' that appears
   24144      in it.
   24145 
   24146 `!'
   24147      Disparage severely the alternative that the `!' appears in.  This
   24148      alternative can still be used if it fits without reloading, but if
   24149      reloading is needed, some other alternative will be used.
   24150 
   24151 
   24152 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
   24153 
   24154 6.42.3 Constraint Modifier Characters
   24155 -------------------------------------
   24156 
   24157 Here are constraint modifier characters.
   24158 
   24159 `='
   24160      Means that this operand is write-only for this instruction: the
   24161      previous value is discarded and replaced by output data.
   24162 
   24163 `+'
   24164      Means that this operand is both read and written by the
   24165      instruction.
   24166 
   24167      When the compiler fixes up the operands to satisfy the constraints,
   24168      it needs to know which operands are inputs to the instruction and
   24169      which are outputs from it.  `=' identifies an output; `+'
   24170      identifies an operand that is both input and output; all other
   24171      operands are assumed to be input only.
   24172 
   24173      If you specify `=' or `+' in a constraint, you put it in the first
   24174      character of the constraint string.
   24175 
   24176 `&'
   24177      Means (in a particular alternative) that this operand is an
   24178      "earlyclobber" operand, which is modified before the instruction is
   24179      finished using the input operands.  Therefore, this operand may
   24180      not lie in a register that is used as an input operand or as part
   24181      of any memory address.
   24182 
   24183      `&' applies only to the alternative in which it is written.  In
   24184      constraints with multiple alternatives, sometimes one alternative
   24185      requires `&' while others do not.  See, for example, the `movdf'
   24186      insn of the 68000.
   24187 
   24188      An input operand can be tied to an earlyclobber operand if its only
   24189      use as an input occurs before the early result is written.  Adding
   24190      alternatives of this form often allows GCC to produce better code
   24191      when only some of the inputs can be affected by the earlyclobber.
   24192      See, for example, the `mulsi3' insn of the ARM.
   24193 
   24194      `&' does not obviate the need to write `='.
   24195 
   24196 `%'
   24197      Declares the instruction to be commutative for this operand and the
   24198      following operand.  This means that the compiler may interchange
   24199      the two operands if that is the cheapest way to make all operands
   24200      fit the constraints.  GCC can only handle one commutative pair in
   24201      an asm; if you use more, the compiler may fail.  Note that you
   24202      need not use the modifier if the two alternatives are strictly
   24203      identical; this would only waste time in the reload pass.  The
   24204      modifier is not operational after register allocation, so the
   24205      result of `define_peephole2' and `define_split's performed after
   24206      reload cannot rely on `%' to make the intended insn match.
   24207 
   24208 `#'
   24209      Says that all following characters, up to the next comma, are to be
   24210      ignored as a constraint.  They are significant only for choosing
   24211      register preferences.
   24212 
   24213 `*'
   24214      Says that the following character should be ignored when choosing
   24215      register preferences.  `*' has no effect on the meaning of the
   24216      constraint as a constraint, and no effect on reloading.
   24217 
   24218 
   24219 
   24220 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
   24221 
   24222 6.42.4 Constraints for Particular Machines
   24223 ------------------------------------------
   24224 
   24225 Whenever possible, you should use the general-purpose constraint letters
   24226 in `asm' arguments, since they will convey meaning more readily to
   24227 people reading your code.  Failing that, use the constraint letters
   24228 that usually have very similar meanings across architectures.  The most
   24229 commonly used constraints are `m' and `r' (for memory and
   24230 general-purpose registers respectively; *note Simple Constraints::), and
   24231 `I', usually the letter indicating the most common immediate-constant
   24232 format.
   24233 
   24234  Each architecture defines additional constraints.  These constraints
   24235 are used by the compiler itself for instruction generation, as well as
   24236 for `asm' statements; therefore, some of the constraints are not
   24237 particularly useful for `asm'.  Here is a summary of some of the
   24238 machine-dependent constraints available on some particular machines; it
   24239 includes both constraints that are useful for `asm' and constraints
   24240 that aren't.  The compiler source file mentioned in the table heading
   24241 for each architecture is the definitive reference for the meanings of
   24242 that architecture's constraints.
   24243 
   24244 _ARM family--`config/arm/arm.h'_
   24245 
   24246     `f'
   24247           Floating-point register
   24248 
   24249     `w'
   24250           VFP floating-point register
   24251 
   24252     `F'
   24253           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
   24254           4.0, 5.0 or 10.0
   24255 
   24256     `G'
   24257           Floating-point constant that would satisfy the constraint `F'
   24258           if it were negated
   24259 
   24260     `I'
   24261           Integer that is valid as an immediate operand in a data
   24262           processing instruction.  That is, an integer in the range 0
   24263           to 255 rotated by a multiple of 2
   24264 
   24265     `J'
   24266           Integer in the range -4095 to 4095
   24267 
   24268     `K'
   24269           Integer that satisfies constraint `I' when inverted (ones
   24270           complement)
   24271 
   24272     `L'
   24273           Integer that satisfies constraint `I' when negated (twos
   24274           complement)
   24275 
   24276     `M'
   24277           Integer in the range 0 to 32
   24278 
   24279     `Q'
   24280           A memory reference where the exact address is in a single
   24281           register (``m'' is preferable for `asm' statements)
   24282 
   24283     `R'
   24284           An item in the constant pool
   24285 
   24286     `S'
   24287           A symbol in the text segment of the current file
   24288 
   24289     `Uv'
   24290           A memory reference suitable for VFP load/store insns
   24291           (reg+constant offset)
   24292 
   24293     `Uy'
   24294           A memory reference suitable for iWMMXt load/store
   24295           instructions.
   24296 
   24297     `Uq'
   24298           A memory reference suitable for the ARMv4 ldrsb instruction.
   24299 
   24300 _AVR family--`config/avr/constraints.md'_
   24301 
   24302     `l'
   24303           Registers from r0 to r15
   24304 
   24305     `a'
   24306           Registers from r16 to r23
   24307 
   24308     `d'
   24309           Registers from r16 to r31
   24310 
   24311     `w'
   24312           Registers from r24 to r31.  These registers can be used in
   24313           `adiw' command
   24314 
   24315     `e'
   24316           Pointer register (r26-r31)
   24317 
   24318     `b'
   24319           Base pointer register (r28-r31)
   24320 
   24321     `q'
   24322           Stack pointer register (SPH:SPL)
   24323 
   24324     `t'
   24325           Temporary register r0
   24326 
   24327     `x'
   24328           Register pair X (r27:r26)
   24329 
   24330     `y'
   24331           Register pair Y (r29:r28)
   24332 
   24333     `z'
   24334           Register pair Z (r31:r30)
   24335 
   24336     `I'
   24337           Constant greater than -1, less than 64
   24338 
   24339     `J'
   24340           Constant greater than -64, less than 1
   24341 
   24342     `K'
   24343           Constant integer 2
   24344 
   24345     `L'
   24346           Constant integer 0
   24347 
   24348     `M'
   24349           Constant that fits in 8 bits
   24350 
   24351     `N'
   24352           Constant integer -1
   24353 
   24354     `O'
   24355           Constant integer 8, 16, or 24
   24356 
   24357     `P'
   24358           Constant integer 1
   24359 
   24360     `G'
   24361           A floating point constant 0.0
   24362 
   24363     `R'
   24364           Integer constant in the range -6 ... 5.
   24365 
   24366     `Q'
   24367           A memory address based on Y or Z pointer with displacement.
   24368 
   24369 _CRX Architecture--`config/crx/crx.h'_
   24370 
   24371     `b'
   24372           Registers from r0 to r14 (registers without stack pointer)
   24373 
   24374     `l'
   24375           Register r16 (64-bit accumulator lo register)
   24376 
   24377     `h'
   24378           Register r17 (64-bit accumulator hi register)
   24379 
   24380     `k'
   24381           Register pair r16-r17. (64-bit accumulator lo-hi pair)
   24382 
   24383     `I'
   24384           Constant that fits in 3 bits
   24385 
   24386     `J'
   24387           Constant that fits in 4 bits
   24388 
   24389     `K'
   24390           Constant that fits in 5 bits
   24391 
   24392     `L'
   24393           Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
   24394 
   24395     `G'
   24396           Floating point constant that is legal for store immediate
   24397 
   24398 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_
   24399 
   24400     `a'
   24401           General register 1
   24402 
   24403     `f'
   24404           Floating point register
   24405 
   24406     `q'
   24407           Shift amount register
   24408 
   24409     `x'
   24410           Floating point register (deprecated)
   24411 
   24412     `y'
   24413           Upper floating point register (32-bit), floating point
   24414           register (64-bit)
   24415 
   24416     `Z'
   24417           Any register
   24418 
   24419     `I'
   24420           Signed 11-bit integer constant
   24421 
   24422     `J'
   24423           Signed 14-bit integer constant
   24424 
   24425     `K'
   24426           Integer constant that can be deposited with a `zdepi'
   24427           instruction
   24428 
   24429     `L'
   24430           Signed 5-bit integer constant
   24431 
   24432     `M'
   24433           Integer constant 0
   24434 
   24435     `N'
   24436           Integer constant that can be loaded with a `ldil' instruction
   24437 
   24438     `O'
   24439           Integer constant whose value plus one is a power of 2
   24440 
   24441     `P'
   24442           Integer constant that can be used for `and' operations in
   24443           `depi' and `extru' instructions
   24444 
   24445     `S'
   24446           Integer constant 31
   24447 
   24448     `U'
   24449           Integer constant 63
   24450 
   24451     `G'
   24452           Floating-point constant 0.0
   24453 
   24454     `A'
   24455           A `lo_sum' data-linkage-table memory operand
   24456 
   24457     `Q'
   24458           A memory operand that can be used as the destination operand
   24459           of an integer store instruction
   24460 
   24461     `R'
   24462           A scaled or unscaled indexed memory operand
   24463 
   24464     `T'
   24465           A memory operand for floating-point loads and stores
   24466 
   24467     `W'
   24468           A register indirect memory operand
   24469 
   24470 _picoChip family--`picochip.h'_
   24471 
   24472     `k'
   24473           Stack register.
   24474 
   24475     `f'
   24476           Pointer register.  A register which can be used to access
   24477           memory without supplying an offset.  Any other register can
   24478           be used to access memory, but will need a constant offset.
   24479           In the case of the offset being zero, it is more efficient to
   24480           use a pointer register, since this reduces code size.
   24481 
   24482     `t'
   24483           A twin register.  A register which may be paired with an
   24484           adjacent register to create a 32-bit register.
   24485 
   24486     `a'
   24487           Any absolute memory address (e.g., symbolic constant, symbolic
   24488           constant + offset).
   24489 
   24490     `I'
   24491           4-bit signed integer.
   24492 
   24493     `J'
   24494           4-bit unsigned integer.
   24495 
   24496     `K'
   24497           8-bit signed integer.
   24498 
   24499     `M'
   24500           Any constant whose absolute value is no greater than 4-bits.
   24501 
   24502     `N'
   24503           10-bit signed integer
   24504 
   24505     `O'
   24506           16-bit signed integer.
   24507 
   24508 
   24509 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
   24510 
   24511     `b'
   24512           Address base register
   24513 
   24514     `d'
   24515           Floating point register (containing 64-bit value)
   24516 
   24517     `f'
   24518           Floating point register (containing 32-bit value)
   24519 
   24520     `v'
   24521           Altivec vector register
   24522 
   24523     `wd'
   24524           VSX vector register to hold vector double data
   24525 
   24526     `wf'
   24527           VSX vector register to hold vector float data
   24528 
   24529     `ws'
   24530           VSX vector register to hold scalar float data
   24531 
   24532     `wa'
   24533           Any VSX register
   24534 
   24535     `h'
   24536           `MQ', `CTR', or `LINK' register
   24537 
   24538     `q'
   24539           `MQ' register
   24540 
   24541     `c'
   24542           `CTR' register
   24543 
   24544     `l'
   24545           `LINK' register
   24546 
   24547     `x'
   24548           `CR' register (condition register) number 0
   24549 
   24550     `y'
   24551           `CR' register (condition register)
   24552 
   24553     `z'
   24554           `XER[CA]' carry bit (part of the XER register)
   24555 
   24556     `I'
   24557           Signed 16-bit constant
   24558 
   24559     `J'
   24560           Unsigned 16-bit constant shifted left 16 bits (use `L'
   24561           instead for `SImode' constants)
   24562 
   24563     `K'
   24564           Unsigned 16-bit constant
   24565 
   24566     `L'
   24567           Signed 16-bit constant shifted left 16 bits
   24568 
   24569     `M'
   24570           Constant larger than 31
   24571 
   24572     `N'
   24573           Exact power of 2
   24574 
   24575     `O'
   24576           Zero
   24577 
   24578     `P'
   24579           Constant whose negation is a signed 16-bit constant
   24580 
   24581     `G'
   24582           Floating point constant that can be loaded into a register
   24583           with one instruction per word
   24584 
   24585     `H'
   24586           Integer/Floating point constant that can be loaded into a
   24587           register using three instructions
   24588 
   24589     `m'
   24590           Memory operand.  Normally, `m' does not allow addresses that
   24591           update the base register.  If `<' or `>' constraint is also
   24592           used, they are allowed and therefore on PowerPC targets in
   24593           that case it is only safe to use `m<>' in an `asm' statement
   24594           if that `asm' statement accesses the operand exactly once.
   24595           The `asm' statement must also use `%U<OPNO>' as a placeholder
   24596           for the "update" flag in the corresponding load or store
   24597           instruction.  For example:
   24598 
   24599                asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
   24600 
   24601           is correct but:
   24602 
   24603                asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
   24604 
   24605           is not.
   24606 
   24607     `es'
   24608           A "stable" memory operand; that is, one which does not
   24609           include any automodification of the base register.  This used
   24610           to be useful when `m' allowed automodification of the base
   24611           register, but as those are now only allowed when `<' or `>'
   24612           is used, `es' is basically the same as `m' without `<' and
   24613           `>'.
   24614 
   24615     `Q'
   24616           Memory operand that is an offset from a register (it is
   24617           usually better to use `m' or `es' in `asm' statements)
   24618 
   24619     `Z'
   24620           Memory operand that is an indexed or indirect from a register
   24621           (it is usually better to use `m' or `es' in `asm' statements)
   24622 
   24623     `R'
   24624           AIX TOC entry
   24625 
   24626     `a'
   24627           Address operand that is an indexed or indirect from a
   24628           register (`p' is preferable for `asm' statements)
   24629 
   24630     `S'
   24631           Constant suitable as a 64-bit mask operand
   24632 
   24633     `T'
   24634           Constant suitable as a 32-bit mask operand
   24635 
   24636     `U'
   24637           System V Release 4 small data area reference
   24638 
   24639     `t'
   24640           AND masks that can be performed by two rldic{l, r}
   24641           instructions
   24642 
   24643     `W'
   24644           Vector constant that does not require memory
   24645 
   24646     `j'
   24647           Vector constant that is all zeros.
   24648 
   24649 
   24650 _Intel 386--`config/i386/constraints.md'_
   24651 
   24652     `R'
   24653           Legacy register--the eight integer registers available on all
   24654           i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
   24655 
   24656     `q'
   24657           Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
   24658           `c', and `d'; in 64-bit mode, any integer register.
   24659 
   24660     `Q'
   24661           Any register accessible as `Rh': `a', `b', `c', and `d'.
   24662 
   24663     `a'
   24664           The `a' register.
   24665 
   24666     `b'
   24667           The `b' register.
   24668 
   24669     `c'
   24670           The `c' register.
   24671 
   24672     `d'
   24673           The `d' register.
   24674 
   24675     `S'
   24676           The `si' register.
   24677 
   24678     `D'
   24679           The `di' register.
   24680 
   24681     `A'
   24682           The `a' and `d' registers.  This class is used for
   24683           instructions that return double word results in the `ax:dx'
   24684           register pair.  Single word values will be allocated either
   24685           in `ax' or `dx'.  For example on i386 the following
   24686           implements `rdtsc':
   24687 
   24688                unsigned long long rdtsc (void)
   24689                {
   24690                  unsigned long long tick;
   24691                  __asm__ __volatile__("rdtsc":"=A"(tick));
   24692                  return tick;
   24693                }
   24694 
   24695           This is not correct on x86_64 as it would allocate tick in
   24696           either `ax' or `dx'.  You have to use the following variant
   24697           instead:
   24698 
   24699                unsigned long long rdtsc (void)
   24700                {
   24701                  unsigned int tickl, tickh;
   24702                  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
   24703                  return ((unsigned long long)tickh << 32)|tickl;
   24704                }
   24705 
   24706     `f'
   24707           Any 80387 floating-point (stack) register.
   24708 
   24709     `t'
   24710           Top of 80387 floating-point stack (`%st(0)').
   24711 
   24712     `u'
   24713           Second from top of 80387 floating-point stack (`%st(1)').
   24714 
   24715     `y'
   24716           Any MMX register.
   24717 
   24718     `x'
   24719           Any SSE register.
   24720 
   24721     `Yz'
   24722           First SSE register (`%xmm0').
   24723 
   24724     `I'
   24725           Integer constant in the range 0 ... 31, for 32-bit shifts.
   24726 
   24727     `J'
   24728           Integer constant in the range 0 ... 63, for 64-bit shifts.
   24729 
   24730     `K'
   24731           Signed 8-bit integer constant.
   24732 
   24733     `L'
   24734           `0xFF' or `0xFFFF', for andsi as a zero-extending move.
   24735 
   24736     `M'
   24737           0, 1, 2, or 3 (shifts for the `lea' instruction).
   24738 
   24739     `N'
   24740           Unsigned 8-bit integer constant (for `in' and `out'
   24741           instructions).
   24742 
   24743     `G'
   24744           Standard 80387 floating point constant.
   24745 
   24746     `C'
   24747           Standard SSE floating point constant.
   24748 
   24749     `e'
   24750           32-bit signed integer constant, or a symbolic reference known
   24751           to fit that range (for immediate operands in sign-extending
   24752           x86-64 instructions).
   24753 
   24754     `Z'
   24755           32-bit unsigned integer constant, or a symbolic reference
   24756           known to fit that range (for immediate operands in
   24757           zero-extending x86-64 instructions).
   24758 
   24759 
   24760 _Intel IA-64--`config/ia64/ia64.h'_
   24761 
   24762     `a'
   24763           General register `r0' to `r3' for `addl' instruction
   24764 
   24765     `b'
   24766           Branch register
   24767 
   24768     `c'
   24769           Predicate register (`c' as in "conditional")
   24770 
   24771     `d'
   24772           Application register residing in M-unit
   24773 
   24774     `e'
   24775           Application register residing in I-unit
   24776 
   24777     `f'
   24778           Floating-point register
   24779 
   24780     `m'
   24781           Memory operand.  If used together with `<' or `>', the
   24782           operand can have postincrement and postdecrement which
   24783           require printing with `%Pn' on IA-64.
   24784 
   24785     `G'
   24786           Floating-point constant 0.0 or 1.0
   24787 
   24788     `I'
   24789           14-bit signed integer constant
   24790 
   24791     `J'
   24792           22-bit signed integer constant
   24793 
   24794     `K'
   24795           8-bit signed integer constant for logical instructions
   24796 
   24797     `L'
   24798           8-bit adjusted signed integer constant for compare pseudo-ops
   24799 
   24800     `M'
   24801           6-bit unsigned integer constant for shift counts
   24802 
   24803     `N'
   24804           9-bit signed integer constant for load and store
   24805           postincrements
   24806 
   24807     `O'
   24808           The constant zero
   24809 
   24810     `P'
   24811           0 or -1 for `dep' instruction
   24812 
   24813     `Q'
   24814           Non-volatile memory for floating-point loads and stores
   24815 
   24816     `R'
   24817           Integer constant in the range 1 to 4 for `shladd' instruction
   24818 
   24819     `S'
   24820           Memory operand except postincrement and postdecrement.  This
   24821           is now roughly the same as `m' when not used together with `<'
   24822           or `>'.
   24823 
   24824 _FRV--`config/frv/frv.h'_
   24825 
   24826     `a'
   24827           Register in the class `ACC_REGS' (`acc0' to `acc7').
   24828 
   24829     `b'
   24830           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
   24831 
   24832     `c'
   24833           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
   24834           to `icc3').
   24835 
   24836     `d'
   24837           Register in the class `GPR_REGS' (`gr0' to `gr63').
   24838 
   24839     `e'
   24840           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
   24841           registers are excluded not in the class but through the use
   24842           of a machine mode larger than 4 bytes.
   24843 
   24844     `f'
   24845           Register in the class `FPR_REGS' (`fr0' to `fr63').
   24846 
   24847     `h'
   24848           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
   24849           registers are excluded not in the class but through the use
   24850           of a machine mode larger than 4 bytes.
   24851 
   24852     `l'
   24853           Register in the class `LR_REG' (the `lr' register).
   24854 
   24855     `q'
   24856           Register in the class `QUAD_REGS' (`gr2' to `gr63').
   24857           Register numbers not divisible by 4 are excluded not in the
   24858           class but through the use of a machine mode larger than 8
   24859           bytes.
   24860 
   24861     `t'
   24862           Register in the class `ICC_REGS' (`icc0' to `icc3').
   24863 
   24864     `u'
   24865           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
   24866 
   24867     `v'
   24868           Register in the class `ICR_REGS' (`cc4' to `cc7').
   24869 
   24870     `w'
   24871           Register in the class `FCR_REGS' (`cc0' to `cc3').
   24872 
   24873     `x'
   24874           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
   24875           Register numbers not divisible by 4 are excluded not in the
   24876           class but through the use of a machine mode larger than 8
   24877           bytes.
   24878 
   24879     `z'
   24880           Register in the class `SPR_REGS' (`lcr' and `lr').
   24881 
   24882     `A'
   24883           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
   24884 
   24885     `B'
   24886           Register in the class `ACCG_REGS' (`accg0' to `accg7').
   24887 
   24888     `C'
   24889           Register in the class `CR_REGS' (`cc0' to `cc7').
   24890 
   24891     `G'
   24892           Floating point constant zero
   24893 
   24894     `I'
   24895           6-bit signed integer constant
   24896 
   24897     `J'
   24898           10-bit signed integer constant
   24899 
   24900     `L'
   24901           16-bit signed integer constant
   24902 
   24903     `M'
   24904           16-bit unsigned integer constant
   24905 
   24906     `N'
   24907           12-bit signed integer constant that is negative--i.e. in the
   24908           range of -2048 to -1
   24909 
   24910     `O'
   24911           Constant zero
   24912 
   24913     `P'
   24914           12-bit signed integer constant that is greater than
   24915           zero--i.e. in the range of 1 to 2047.
   24916 
   24917 
   24918 _Blackfin family--`config/bfin/constraints.md'_
   24919 
   24920     `a'
   24921           P register
   24922 
   24923     `d'
   24924           D register
   24925 
   24926     `z'
   24927           A call clobbered P register.
   24928 
   24929     `qN'
   24930           A single register.  If N is in the range 0 to 7, the
   24931           corresponding D register.  If it is `A', then the register P0.
   24932 
   24933     `D'
   24934           Even-numbered D register
   24935 
   24936     `W'
   24937           Odd-numbered D register
   24938 
   24939     `e'
   24940           Accumulator register.
   24941 
   24942     `A'
   24943           Even-numbered accumulator register.
   24944 
   24945     `B'
   24946           Odd-numbered accumulator register.
   24947 
   24948     `b'
   24949           I register
   24950 
   24951     `v'
   24952           B register
   24953 
   24954     `f'
   24955           M register
   24956 
   24957     `c'
   24958           Registers used for circular buffering, i.e. I, B, or L
   24959           registers.
   24960 
   24961     `C'
   24962           The CC register.
   24963 
   24964     `t'
   24965           LT0 or LT1.
   24966 
   24967     `k'
   24968           LC0 or LC1.
   24969 
   24970     `u'
   24971           LB0 or LB1.
   24972 
   24973     `x'
   24974           Any D, P, B, M, I or L register.
   24975 
   24976     `y'
   24977           Additional registers typically used only in prologues and
   24978           epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
   24979           USP.
   24980 
   24981     `w'
   24982           Any register except accumulators or CC.
   24983 
   24984     `Ksh'
   24985           Signed 16 bit integer (in the range -32768 to 32767)
   24986 
   24987     `Kuh'
   24988           Unsigned 16 bit integer (in the range 0 to 65535)
   24989 
   24990     `Ks7'
   24991           Signed 7 bit integer (in the range -64 to 63)
   24992 
   24993     `Ku7'
   24994           Unsigned 7 bit integer (in the range 0 to 127)
   24995 
   24996     `Ku5'
   24997           Unsigned 5 bit integer (in the range 0 to 31)
   24998 
   24999     `Ks4'
   25000           Signed 4 bit integer (in the range -8 to 7)
   25001 
   25002     `Ks3'
   25003           Signed 3 bit integer (in the range -3 to 4)
   25004 
   25005     `Ku3'
   25006           Unsigned 3 bit integer (in the range 0 to 7)
   25007 
   25008     `PN'
   25009           Constant N, where N is a single-digit constant in the range 0
   25010           to 4.
   25011 
   25012     `PA'
   25013           An integer equal to one of the MACFLAG_XXX constants that is
   25014           suitable for use with either accumulator.
   25015 
   25016     `PB'
   25017           An integer equal to one of the MACFLAG_XXX constants that is
   25018           suitable for use only with accumulator A1.
   25019 
   25020     `M1'
   25021           Constant 255.
   25022 
   25023     `M2'
   25024           Constant 65535.
   25025 
   25026     `J'
   25027           An integer constant with exactly a single bit set.
   25028 
   25029     `L'
   25030           An integer constant with all bits set except exactly one.
   25031 
   25032     `H'
   25033 
   25034     `Q'
   25035           Any SYMBOL_REF.
   25036 
   25037 _M32C--`config/m32c/m32c.c'_
   25038 
   25039     `Rsp'
   25040     `Rfb'
   25041     `Rsb'
   25042           `$sp', `$fb', `$sb'.
   25043 
   25044     `Rcr'
   25045           Any control register, when they're 16 bits wide (nothing if
   25046           control registers are 24 bits wide)
   25047 
   25048     `Rcl'
   25049           Any control register, when they're 24 bits wide.
   25050 
   25051     `R0w'
   25052     `R1w'
   25053     `R2w'
   25054     `R3w'
   25055           $r0, $r1, $r2, $r3.
   25056 
   25057     `R02'
   25058           $r0 or $r2, or $r2r0 for 32 bit values.
   25059 
   25060     `R13'
   25061           $r1 or $r3, or $r3r1 for 32 bit values.
   25062 
   25063     `Rdi'
   25064           A register that can hold a 64 bit value.
   25065 
   25066     `Rhl'
   25067           $r0 or $r1 (registers with addressable high/low bytes)
   25068 
   25069     `R23'
   25070           $r2 or $r3
   25071 
   25072     `Raa'
   25073           Address registers
   25074 
   25075     `Raw'
   25076           Address registers when they're 16 bits wide.
   25077 
   25078     `Ral'
   25079           Address registers when they're 24 bits wide.
   25080 
   25081     `Rqi'
   25082           Registers that can hold QI values.
   25083 
   25084     `Rad'
   25085           Registers that can be used with displacements ($a0, $a1, $sb).
   25086 
   25087     `Rsi'
   25088           Registers that can hold 32 bit values.
   25089 
   25090     `Rhi'
   25091           Registers that can hold 16 bit values.
   25092 
   25093     `Rhc'
   25094           Registers chat can hold 16 bit values, including all control
   25095           registers.
   25096 
   25097     `Rra'
   25098           $r0 through R1, plus $a0 and $a1.
   25099 
   25100     `Rfl'
   25101           The flags register.
   25102 
   25103     `Rmm'
   25104           The memory-based pseudo-registers $mem0 through $mem15.
   25105 
   25106     `Rpi'
   25107           Registers that can hold pointers (16 bit registers for r8c,
   25108           m16c; 24 bit registers for m32cm, m32c).
   25109 
   25110     `Rpa'
   25111           Matches multiple registers in a PARALLEL to form a larger
   25112           register.  Used to match function return values.
   25113 
   25114     `Is3'
   25115           -8 ... 7
   25116 
   25117     `IS1'
   25118           -128 ... 127
   25119 
   25120     `IS2'
   25121           -32768 ... 32767
   25122 
   25123     `IU2'
   25124           0 ... 65535
   25125 
   25126     `In4'
   25127           -8 ... -1 or 1 ... 8
   25128 
   25129     `In5'
   25130           -16 ... -1 or 1 ... 16
   25131 
   25132     `In6'
   25133           -32 ... -1 or 1 ... 32
   25134 
   25135     `IM2'
   25136           -65536 ... -1
   25137 
   25138     `Ilb'
   25139           An 8 bit value with exactly one bit set.
   25140 
   25141     `Ilw'
   25142           A 16 bit value with exactly one bit set.
   25143 
   25144     `Sd'
   25145           The common src/dest memory addressing modes.
   25146 
   25147     `Sa'
   25148           Memory addressed using $a0 or $a1.
   25149 
   25150     `Si'
   25151           Memory addressed with immediate addresses.
   25152 
   25153     `Ss'
   25154           Memory addressed using the stack pointer ($sp).
   25155 
   25156     `Sf'
   25157           Memory addressed using the frame base register ($fb).
   25158 
   25159     `Ss'
   25160           Memory addressed using the small base register ($sb).
   25161 
   25162     `S1'
   25163           $r1h
   25164 
   25165 _MeP--`config/mep/constraints.md'_
   25166 
   25167     `a'
   25168           The $sp register.
   25169 
   25170     `b'
   25171           The $tp register.
   25172 
   25173     `c'
   25174           Any control register.
   25175 
   25176     `d'
   25177           Either the $hi or the $lo register.
   25178 
   25179     `em'
   25180           Coprocessor registers that can be directly loaded ($c0-$c15).
   25181 
   25182     `ex'
   25183           Coprocessor registers that can be moved to each other.
   25184 
   25185     `er'
   25186           Coprocessor registers that can be moved to core registers.
   25187 
   25188     `h'
   25189           The $hi register.
   25190 
   25191     `j'
   25192           The $rpc register.
   25193 
   25194     `l'
   25195           The $lo register.
   25196 
   25197     `t'
   25198           Registers which can be used in $tp-relative addressing.
   25199 
   25200     `v'
   25201           The $gp register.
   25202 
   25203     `x'
   25204           The coprocessor registers.
   25205 
   25206     `y'
   25207           The coprocessor control registers.
   25208 
   25209     `z'
   25210           The $0 register.
   25211 
   25212     `A'
   25213           User-defined register set A.
   25214 
   25215     `B'
   25216           User-defined register set B.
   25217 
   25218     `C'
   25219           User-defined register set C.
   25220 
   25221     `D'
   25222           User-defined register set D.
   25223 
   25224     `I'
   25225           Offsets for $gp-rel addressing.
   25226 
   25227     `J'
   25228           Constants that can be used directly with boolean insns.
   25229 
   25230     `K'
   25231           Constants that can be moved directly to registers.
   25232 
   25233     `L'
   25234           Small constants that can be added to registers.
   25235 
   25236     `M'
   25237           Long shift counts.
   25238 
   25239     `N'
   25240           Small constants that can be compared to registers.
   25241 
   25242     `O'
   25243           Constants that can be loaded into the top half of registers.
   25244 
   25245     `S'
   25246           Signed 8-bit immediates.
   25247 
   25248     `T'
   25249           Symbols encoded for $tp-rel or $gp-rel addressing.
   25250 
   25251     `U'
   25252           Non-constant addresses for loading/saving coprocessor
   25253           registers.
   25254 
   25255     `W'
   25256           The top half of a symbol's value.
   25257 
   25258     `Y'
   25259           A register indirect address without offset.
   25260 
   25261     `Z'
   25262           Symbolic references to the control bus.
   25263 
   25264 
   25265 _MicroBlaze--`config/microblaze/constraints.md'_
   25266 
   25267     `d'
   25268           A general register (`r0' to `r31').
   25269 
   25270     `z'
   25271           A status register (`rmsr', `$fcc1' to `$fcc7').
   25272 
   25273 
   25274 _MIPS--`config/mips/constraints.md'_
   25275 
   25276     `d'
   25277           An address register.  This is equivalent to `r' unless
   25278           generating MIPS16 code.
   25279 
   25280     `f'
   25281           A floating-point register (if available).
   25282 
   25283     `h'
   25284           Formerly the `hi' register.  This constraint is no longer
   25285           supported.
   25286 
   25287     `l'
   25288           The `lo' register.  Use this register to store values that are
   25289           no bigger than a word.
   25290 
   25291     `x'
   25292           The concatenated `hi' and `lo' registers.  Use this register
   25293           to store doubleword values.
   25294 
   25295     `c'
   25296           A register suitable for use in an indirect jump.  This will
   25297           always be `$25' for `-mabicalls'.
   25298 
   25299     `v'
   25300           Register `$3'.  Do not use this constraint in new code; it is
   25301           retained only for compatibility with glibc.
   25302 
   25303     `y'
   25304           Equivalent to `r'; retained for backwards compatibility.
   25305 
   25306     `z'
   25307           A floating-point condition code register.
   25308 
   25309     `I'
   25310           A signed 16-bit constant (for arithmetic instructions).
   25311 
   25312     `J'
   25313           Integer zero.
   25314 
   25315     `K'
   25316           An unsigned 16-bit constant (for logic instructions).
   25317 
   25318     `L'
   25319           A signed 32-bit constant in which the lower 16 bits are zero.
   25320           Such constants can be loaded using `lui'.
   25321 
   25322     `M'
   25323           A constant that cannot be loaded using `lui', `addiu' or
   25324           `ori'.
   25325 
   25326     `N'
   25327           A constant in the range -65535 to -1 (inclusive).
   25328 
   25329     `O'
   25330           A signed 15-bit constant.
   25331 
   25332     `P'
   25333           A constant in the range 1 to 65535 (inclusive).
   25334 
   25335     `G'
   25336           Floating-point zero.
   25337 
   25338     `R'
   25339           An address that can be used in a non-macro load or store.
   25340 
   25341 _Motorola 680x0--`config/m68k/constraints.md'_
   25342 
   25343     `a'
   25344           Address register
   25345 
   25346     `d'
   25347           Data register
   25348 
   25349     `f'
   25350           68881 floating-point register, if available
   25351 
   25352     `I'
   25353           Integer in the range 1 to 8
   25354 
   25355     `J'
   25356           16-bit signed number
   25357 
   25358     `K'
   25359           Signed number whose magnitude is greater than 0x80
   25360 
   25361     `L'
   25362           Integer in the range -8 to -1
   25363 
   25364     `M'
   25365           Signed number whose magnitude is greater than 0x100
   25366 
   25367     `N'
   25368           Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
   25369 
   25370     `O'
   25371           16 (for rotate using swap)
   25372 
   25373     `P'
   25374           Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
   25375 
   25376     `R'
   25377           Numbers that mov3q can handle
   25378 
   25379     `G'
   25380           Floating point constant that is not a 68881 constant
   25381 
   25382     `S'
   25383           Operands that satisfy 'm' when -mpcrel is in effect
   25384 
   25385     `T'
   25386           Operands that satisfy 's' when -mpcrel is not in effect
   25387 
   25388     `Q'
   25389           Address register indirect addressing mode
   25390 
   25391     `U'
   25392           Register offset addressing
   25393 
   25394     `W'
   25395           const_call_operand
   25396 
   25397     `Cs'
   25398           symbol_ref or const
   25399 
   25400     `Ci'
   25401           const_int
   25402 
   25403     `C0'
   25404           const_int 0
   25405 
   25406     `Cj'
   25407           Range of signed numbers that don't fit in 16 bits
   25408 
   25409     `Cmvq'
   25410           Integers valid for mvq
   25411 
   25412     `Capsw'
   25413           Integers valid for a moveq followed by a swap
   25414 
   25415     `Cmvz'
   25416           Integers valid for mvz
   25417 
   25418     `Cmvs'
   25419           Integers valid for mvs
   25420 
   25421     `Ap'
   25422           push_operand
   25423 
   25424     `Ac'
   25425           Non-register operands allowed in clr
   25426 
   25427 
   25428 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
   25429 
   25430     `a'
   25431           Register `a'
   25432 
   25433     `b'
   25434           Register `b'
   25435 
   25436     `d'
   25437           Register `d'
   25438 
   25439     `q'
   25440           An 8-bit register
   25441 
   25442     `t'
   25443           Temporary soft register _.tmp
   25444 
   25445     `u'
   25446           A soft register _.d1 to _.d31
   25447 
   25448     `w'
   25449           Stack pointer register
   25450 
   25451     `x'
   25452           Register `x'
   25453 
   25454     `y'
   25455           Register `y'
   25456 
   25457     `z'
   25458           Pseudo register `z' (replaced by `x' or `y' at the end)
   25459 
   25460     `A'
   25461           An address register: x, y or z
   25462 
   25463     `B'
   25464           An address register: x or y
   25465 
   25466     `D'
   25467           Register pair (x:d) to form a 32-bit value
   25468 
   25469     `L'
   25470           Constants in the range -65536 to 65535
   25471 
   25472     `M'
   25473           Constants whose 16-bit low part is zero
   25474 
   25475     `N'
   25476           Constant integer 1 or -1
   25477 
   25478     `O'
   25479           Constant integer 16
   25480 
   25481     `P'
   25482           Constants in the range -8 to 2
   25483 
   25484 
   25485 _Moxie--`config/moxie/constraints.md'_
   25486 
   25487     `A'
   25488           An absolute address
   25489 
   25490     `B'
   25491           An offset address
   25492 
   25493     `W'
   25494           A register indirect memory operand
   25495 
   25496     `I'
   25497           A constant in the range of 0 to 255.
   25498 
   25499     `N'
   25500           A constant in the range of 0 to -255.
   25501 
   25502 
   25503 _PDP-11--`config/pdp11/constraints.md'_
   25504 
   25505     `a'
   25506           Floating point registers AC0 through AC3.  These can be
   25507           loaded from/to memory with a single instruction.
   25508 
   25509     `d'
   25510           Odd numbered general registers (R1, R3, R5).  These are used
   25511           for 16-bit multiply operations.
   25512 
   25513     `f'
   25514           Any of the floating point registers (AC0 through AC5).
   25515 
   25516     `G'
   25517           Floating point constant 0.
   25518 
   25519     `I'
   25520           An integer constant that fits in 16 bits.
   25521 
   25522     `J'
   25523           An integer constant whose low order 16 bits are zero.
   25524 
   25525     `K'
   25526           An integer constant that does not meet the constraints for
   25527           codes `I' or `J'.
   25528 
   25529     `L'
   25530           The integer constant 1.
   25531 
   25532     `M'
   25533           The integer constant -1.
   25534 
   25535     `N'
   25536           The integer constant 0.
   25537 
   25538     `O'
   25539           Integer constants -4 through -1 and 1 through 4; shifts by
   25540           these amounts are handled as multiple single-bit shifts
   25541           rather than a single variable-length shift.
   25542 
   25543     `Q'
   25544           A memory reference which requires an additional word (address
   25545           or offset) after the opcode.
   25546 
   25547     `R'
   25548           A memory reference that is encoded within the opcode.
   25549 
   25550 
   25551 _RX--`config/rx/constraints.md'_
   25552 
   25553     `Q'
   25554           An address which does not involve register indirect
   25555           addressing or pre/post increment/decrement addressing.
   25556 
   25557     `Symbol'
   25558           A symbol reference.
   25559 
   25560     `Int08'
   25561           A constant in the range -256 to 255, inclusive.
   25562 
   25563     `Sint08'
   25564           A constant in the range -128 to 127, inclusive.
   25565 
   25566     `Sint16'
   25567           A constant in the range -32768 to 32767, inclusive.
   25568 
   25569     `Sint24'
   25570           A constant in the range -8388608 to 8388607, inclusive.
   25571 
   25572     `Uint04'
   25573           A constant in the range 0 to 15, inclusive.
   25574 
   25575 
   25576 _SPARC--`config/sparc/sparc.h'_
   25577 
   25578     `f'
   25579           Floating-point register on the SPARC-V8 architecture and
   25580           lower floating-point register on the SPARC-V9 architecture.
   25581 
   25582     `e'
   25583           Floating-point register.  It is equivalent to `f' on the
   25584           SPARC-V8 architecture and contains both lower and upper
   25585           floating-point registers on the SPARC-V9 architecture.
   25586 
   25587     `c'
   25588           Floating-point condition code register.
   25589 
   25590     `d'
   25591           Lower floating-point register.  It is only valid on the
   25592           SPARC-V9 architecture when the Visual Instruction Set is
   25593           available.
   25594 
   25595     `b'
   25596           Floating-point register.  It is only valid on the SPARC-V9
   25597           architecture when the Visual Instruction Set is available.
   25598 
   25599     `h'
   25600           64-bit global or out register for the SPARC-V8+ architecture.
   25601 
   25602     `D'
   25603           A vector constant
   25604 
   25605     `I'
   25606           Signed 13-bit constant
   25607 
   25608     `J'
   25609           Zero
   25610 
   25611     `K'
   25612           32-bit constant with the low 12 bits clear (a constant that
   25613           can be loaded with the `sethi' instruction)
   25614 
   25615     `L'
   25616           A constant in the range supported by `movcc' instructions
   25617 
   25618     `M'
   25619           A constant in the range supported by `movrcc' instructions
   25620 
   25621     `N'
   25622           Same as `K', except that it verifies that bits that are not
   25623           in the lower 32-bit range are all zero.  Must be used instead
   25624           of `K' for modes wider than `SImode'
   25625 
   25626     `O'
   25627           The constant 4096
   25628 
   25629     `G'
   25630           Floating-point zero
   25631 
   25632     `H'
   25633           Signed 13-bit constant, sign-extended to 32 or 64 bits
   25634 
   25635     `Q'
   25636           Floating-point constant whose integral representation can be
   25637           moved into an integer register using a single sethi
   25638           instruction
   25639 
   25640     `R'
   25641           Floating-point constant whose integral representation can be
   25642           moved into an integer register using a single mov instruction
   25643 
   25644     `S'
   25645           Floating-point constant whose integral representation can be
   25646           moved into an integer register using a high/lo_sum
   25647           instruction sequence
   25648 
   25649     `T'
   25650           Memory address aligned to an 8-byte boundary
   25651 
   25652     `U'
   25653           Even register
   25654 
   25655     `W'
   25656           Memory address for `e' constraint registers
   25657 
   25658     `Y'
   25659           Vector zero
   25660 
   25661 
   25662 _SPU--`config/spu/spu.h'_
   25663 
   25664     `a'
   25665           An immediate which can be loaded with the il/ila/ilh/ilhu
   25666           instructions.  const_int is treated as a 64 bit value.
   25667 
   25668     `c'
   25669           An immediate for and/xor/or instructions.  const_int is
   25670           treated as a 64 bit value.
   25671 
   25672     `d'
   25673           An immediate for the `iohl' instruction.  const_int is
   25674           treated as a 64 bit value.
   25675 
   25676     `f'
   25677           An immediate which can be loaded with `fsmbi'.
   25678 
   25679     `A'
   25680           An immediate which can be loaded with the il/ila/ilh/ilhu
   25681           instructions.  const_int is treated as a 32 bit value.
   25682 
   25683     `B'
   25684           An immediate for most arithmetic instructions.  const_int is
   25685           treated as a 32 bit value.
   25686 
   25687     `C'
   25688           An immediate for and/xor/or instructions.  const_int is
   25689           treated as a 32 bit value.
   25690 
   25691     `D'
   25692           An immediate for the `iohl' instruction.  const_int is
   25693           treated as a 32 bit value.
   25694 
   25695     `I'
   25696           A constant in the range [-64, 63] for shift/rotate
   25697           instructions.
   25698 
   25699     `J'
   25700           An unsigned 7-bit constant for conversion/nop/channel
   25701           instructions.
   25702 
   25703     `K'
   25704           A signed 10-bit constant for most arithmetic instructions.
   25705 
   25706     `M'
   25707           A signed 16 bit immediate for `stop'.
   25708 
   25709     `N'
   25710           An unsigned 16-bit constant for `iohl' and `fsmbi'.
   25711 
   25712     `O'
   25713           An unsigned 7-bit constant whose 3 least significant bits are
   25714           0.
   25715 
   25716     `P'
   25717           An unsigned 3-bit constant for 16-byte rotates and shifts
   25718 
   25719     `R'
   25720           Call operand, reg, for indirect calls
   25721 
   25722     `S'
   25723           Call operand, symbol, for relative calls.
   25724 
   25725     `T'
   25726           Call operand, const_int, for absolute calls.
   25727 
   25728     `U'
   25729           An immediate which can be loaded with the il/ila/ilh/ilhu
   25730           instructions.  const_int is sign extended to 128 bit.
   25731 
   25732     `W'
   25733           An immediate for shift and rotate instructions.  const_int is
   25734           treated as a 32 bit value.
   25735 
   25736     `Y'
   25737           An immediate for and/xor/or instructions.  const_int is sign
   25738           extended as a 128 bit.
   25739 
   25740     `Z'
   25741           An immediate for the `iohl' instruction.  const_int is sign
   25742           extended to 128 bit.
   25743 
   25744 
   25745 _S/390 and zSeries--`config/s390/s390.h'_
   25746 
   25747     `a'
   25748           Address register (general purpose register except r0)
   25749 
   25750     `c'
   25751           Condition code register
   25752 
   25753     `d'
   25754           Data register (arbitrary general purpose register)
   25755 
   25756     `f'
   25757           Floating-point register
   25758 
   25759     `I'
   25760           Unsigned 8-bit constant (0-255)
   25761 
   25762     `J'
   25763           Unsigned 12-bit constant (0-4095)
   25764 
   25765     `K'
   25766           Signed 16-bit constant (-32768-32767)
   25767 
   25768     `L'
   25769           Value appropriate as displacement.
   25770          `(0..4095)'
   25771                for short displacement
   25772 
   25773          `(-524288..524287)'
   25774                for long displacement
   25775 
   25776     `M'
   25777           Constant integer with a value of 0x7fffffff.
   25778 
   25779     `N'
   25780           Multiple letter constraint followed by 4 parameter letters.
   25781          `0..9:'
   25782                number of the part counting from most to least
   25783                significant
   25784 
   25785          `H,Q:'
   25786                mode of the part
   25787 
   25788          `D,S,H:'
   25789                mode of the containing operand
   25790 
   25791          `0,F:'
   25792                value of the other parts (F--all bits set)
   25793           The constraint matches if the specified part of a constant
   25794           has a value different from its other parts.
   25795 
   25796     `Q'
   25797           Memory reference without index register and with short
   25798           displacement.
   25799 
   25800     `R'
   25801           Memory reference with index register and short displacement.
   25802 
   25803     `S'
   25804           Memory reference without index register but with long
   25805           displacement.
   25806 
   25807     `T'
   25808           Memory reference with index register and long displacement.
   25809 
   25810     `U'
   25811           Pointer with short displacement.
   25812 
   25813     `W'
   25814           Pointer with long displacement.
   25815 
   25816     `Y'
   25817           Shift count operand.
   25818 
   25819 
   25820 _Score family--`config/score/score.h'_
   25821 
   25822     `d'
   25823           Registers from r0 to r32.
   25824 
   25825     `e'
   25826           Registers from r0 to r16.
   25827 
   25828     `t'
   25829           r8--r11 or r22--r27 registers.
   25830 
   25831     `h'
   25832           hi register.
   25833 
   25834     `l'
   25835           lo register.
   25836 
   25837     `x'
   25838           hi + lo register.
   25839 
   25840     `q'
   25841           cnt register.
   25842 
   25843     `y'
   25844           lcb register.
   25845 
   25846     `z'
   25847           scb register.
   25848 
   25849     `a'
   25850           cnt + lcb + scb register.
   25851 
   25852     `c'
   25853           cr0--cr15 register.
   25854 
   25855     `b'
   25856           cp1 registers.
   25857 
   25858     `f'
   25859           cp2 registers.
   25860 
   25861     `i'
   25862           cp3 registers.
   25863 
   25864     `j'
   25865           cp1 + cp2 + cp3 registers.
   25866 
   25867     `I'
   25868           High 16-bit constant (32-bit constant with 16 LSBs zero).
   25869 
   25870     `J'
   25871           Unsigned 5 bit integer (in the range 0 to 31).
   25872 
   25873     `K'
   25874           Unsigned 16 bit integer (in the range 0 to 65535).
   25875 
   25876     `L'
   25877           Signed 16 bit integer (in the range -32768 to 32767).
   25878 
   25879     `M'
   25880           Unsigned 14 bit integer (in the range 0 to 16383).
   25881 
   25882     `N'
   25883           Signed 14 bit integer (in the range -8192 to 8191).
   25884 
   25885     `Z'
   25886           Any SYMBOL_REF.
   25887 
   25888 _Xstormy16--`config/stormy16/stormy16.h'_
   25889 
   25890     `a'
   25891           Register r0.
   25892 
   25893     `b'
   25894           Register r1.
   25895 
   25896     `c'
   25897           Register r2.
   25898 
   25899     `d'
   25900           Register r8.
   25901 
   25902     `e'
   25903           Registers r0 through r7.
   25904 
   25905     `t'
   25906           Registers r0 and r1.
   25907 
   25908     `y'
   25909           The carry register.
   25910 
   25911     `z'
   25912           Registers r8 and r9.
   25913 
   25914     `I'
   25915           A constant between 0 and 3 inclusive.
   25916 
   25917     `J'
   25918           A constant that has exactly one bit set.
   25919 
   25920     `K'
   25921           A constant that has exactly one bit clear.
   25922 
   25923     `L'
   25924           A constant between 0 and 255 inclusive.
   25925 
   25926     `M'
   25927           A constant between -255 and 0 inclusive.
   25928 
   25929     `N'
   25930           A constant between -3 and 0 inclusive.
   25931 
   25932     `O'
   25933           A constant between 1 and 4 inclusive.
   25934 
   25935     `P'
   25936           A constant between -4 and -1 inclusive.
   25937 
   25938     `Q'
   25939           A memory reference that is a stack push.
   25940 
   25941     `R'
   25942           A memory reference that is a stack pop.
   25943 
   25944     `S'
   25945           A memory reference that refers to a constant address of known
   25946           value.
   25947 
   25948     `T'
   25949           The register indicated by Rx (not implemented yet).
   25950 
   25951     `U'
   25952           A constant that is not between 2 and 15 inclusive.
   25953 
   25954     `Z'
   25955           The constant 0.
   25956 
   25957 
   25958 _Xtensa--`config/xtensa/constraints.md'_
   25959 
   25960     `a'
   25961           General-purpose 32-bit register
   25962 
   25963     `b'
   25964           One-bit boolean register
   25965 
   25966     `A'
   25967           MAC16 40-bit accumulator register
   25968 
   25969     `I'
   25970           Signed 12-bit integer constant, for use in MOVI instructions
   25971 
   25972     `J'
   25973           Signed 8-bit integer constant, for use in ADDI instructions
   25974 
   25975     `K'
   25976           Integer constant valid for BccI instructions
   25977 
   25978     `L'
   25979           Unsigned constant valid for BccUI instructions
   25980 
   25981 
   25982 
   25983 
   25984 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
   25985 
   25986 6.43 Controlling Names Used in Assembler Code
   25987 =============================================
   25988 
   25989 You can specify the name to be used in the assembler code for a C
   25990 function or variable by writing the `asm' (or `__asm__') keyword after
   25991 the declarator as follows:
   25992 
   25993      int foo asm ("myfoo") = 2;
   25994 
   25995 This specifies that the name to be used for the variable `foo' in the
   25996 assembler code should be `myfoo' rather than the usual `_foo'.
   25997 
   25998  On systems where an underscore is normally prepended to the name of a C
   25999 function or variable, this feature allows you to define names for the
   26000 linker that do not start with an underscore.
   26001 
   26002  It does not make sense to use this feature with a non-static local
   26003 variable since such variables do not have assembler names.  If you are
   26004 trying to put the variable in a particular register, see *note Explicit
   26005 Reg Vars::.  GCC presently accepts such code with a warning, but will
   26006 probably be changed to issue an error, rather than a warning, in the
   26007 future.
   26008 
   26009  You cannot use `asm' in this way in a function _definition_; but you
   26010 can get the same effect by writing a declaration for the function
   26011 before its definition and putting `asm' there, like this:
   26012 
   26013      extern func () asm ("FUNC");
   26014 
   26015      func (x, y)
   26016           int x, y;
   26017      /* ... */
   26018 
   26019  It is up to you to make sure that the assembler names you choose do not
   26020 conflict with any other assembler symbols.  Also, you must not use a
   26021 register name; that would produce completely invalid assembler code.
   26022 GCC does not as yet have the ability to store static variables in
   26023 registers.  Perhaps that will be added.
   26024 
   26025 
   26026 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
   26027 
   26028 6.44 Variables in Specified Registers
   26029 =====================================
   26030 
   26031 GNU C allows you to put a few global variables into specified hardware
   26032 registers.  You can also specify the register in which an ordinary
   26033 register variable should be allocated.
   26034 
   26035    * Global register variables reserve registers throughout the program.
   26036      This may be useful in programs such as programming language
   26037      interpreters which have a couple of global variables that are
   26038      accessed very often.
   26039 
   26040    * Local register variables in specific registers do not reserve the
   26041      registers, except at the point where they are used as input or
   26042      output operands in an `asm' statement and the `asm' statement
   26043      itself is not deleted.  The compiler's data flow analysis is
   26044      capable of determining where the specified registers contain live
   26045      values, and where they are available for other uses.  Stores into
   26046      local register variables may be deleted when they appear to be
   26047      dead according to dataflow analysis.  References to local register
   26048      variables may be deleted or moved or simplified.
   26049 
   26050      These local variables are sometimes convenient for use with the
   26051      extended `asm' feature (*note Extended Asm::), if you want to
   26052      write one output of the assembler instruction directly into a
   26053      particular register.  (This will work provided the register you
   26054      specify fits the constraints specified for that operand in the
   26055      `asm'.)
   26056 
   26057 * Menu:
   26058 
   26059 * Global Reg Vars::
   26060 * Local Reg Vars::
   26061 
   26062 
   26063 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
   26064 
   26065 6.44.1 Defining Global Register Variables
   26066 -----------------------------------------
   26067 
   26068 You can define a global register variable in GNU C like this:
   26069 
   26070      register int *foo asm ("a5");
   26071 
   26072 Here `a5' is the name of the register which should be used.  Choose a
   26073 register which is normally saved and restored by function calls on your
   26074 machine, so that library routines will not clobber it.
   26075 
   26076  Naturally the register name is cpu-dependent, so you would need to
   26077 conditionalize your program according to cpu type.  The register `a5'
   26078 would be a good choice on a 68000 for a variable of pointer type.  On
   26079 machines with register windows, be sure to choose a "global" register
   26080 that is not affected magically by the function call mechanism.
   26081 
   26082  In addition, operating systems on one type of cpu may differ in how
   26083 they name the registers; then you would need additional conditionals.
   26084 For example, some 68000 operating systems call this register `%a5'.
   26085 
   26086  Eventually there may be a way of asking the compiler to choose a
   26087 register automatically, but first we need to figure out how it should
   26088 choose and how to enable you to guide the choice.  No solution is
   26089 evident.
   26090 
   26091  Defining a global register variable in a certain register reserves that
   26092 register entirely for this use, at least within the current compilation.
   26093 The register will not be allocated for any other purpose in the
   26094 functions in the current compilation.  The register will not be saved
   26095 and restored by these functions.  Stores into this register are never
   26096 deleted even if they would appear to be dead, but references may be
   26097 deleted or moved or simplified.
   26098 
   26099  It is not safe to access the global register variables from signal
   26100 handlers, or from more than one thread of control, because the system
   26101 library routines may temporarily use the register for other things
   26102 (unless you recompile them specially for the task at hand).
   26103 
   26104  It is not safe for one function that uses a global register variable to
   26105 call another such function `foo' by way of a third function `lose' that
   26106 was compiled without knowledge of this variable (i.e. in a different
   26107 source file in which the variable wasn't declared).  This is because
   26108 `lose' might save the register and put some other value there.  For
   26109 example, you can't expect a global register variable to be available in
   26110 the comparison-function that you pass to `qsort', since `qsort' might
   26111 have put something else in that register.  (If you are prepared to
   26112 recompile `qsort' with the same global register variable, you can solve
   26113 this problem.)
   26114 
   26115  If you want to recompile `qsort' or other source files which do not
   26116 actually use your global register variable, so that they will not use
   26117 that register for any other purpose, then it suffices to specify the
   26118 compiler option `-ffixed-REG'.  You need not actually add a global
   26119 register declaration to their source code.
   26120 
   26121  A function which can alter the value of a global register variable
   26122 cannot safely be called from a function compiled without this variable,
   26123 because it could clobber the value the caller expects to find there on
   26124 return.  Therefore, the function which is the entry point into the part
   26125 of the program that uses the global register variable must explicitly
   26126 save and restore the value which belongs to its caller.
   26127 
   26128  On most machines, `longjmp' will restore to each global register
   26129 variable the value it had at the time of the `setjmp'.  On some
   26130 machines, however, `longjmp' will not change the value of global
   26131 register variables.  To be portable, the function that called `setjmp'
   26132 should make other arrangements to save the values of the global register
   26133 variables, and to restore them in a `longjmp'.  This way, the same
   26134 thing will happen regardless of what `longjmp' does.
   26135 
   26136  All global register variable declarations must precede all function
   26137 definitions.  If such a declaration could appear after function
   26138 definitions, the declaration would be too late to prevent the register
   26139 from being used for other purposes in the preceding functions.
   26140 
   26141  Global register variables may not have initial values, because an
   26142 executable file has no means to supply initial contents for a register.
   26143 
   26144  On the SPARC, there are reports that g3 ... g7 are suitable registers,
   26145 but certain library functions, such as `getwd', as well as the
   26146 subroutines for division and remainder, modify g3 and g4.  g1 and g2
   26147 are local temporaries.
   26148 
   26149  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
   26150 course, it will not do to use more than a few of those.
   26151 
   26152 
   26153 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
   26154 
   26155 6.44.2 Specifying Registers for Local Variables
   26156 -----------------------------------------------
   26157 
   26158 You can define a local register variable with a specified register like
   26159 this:
   26160 
   26161      register int *foo asm ("a5");
   26162 
   26163 Here `a5' is the name of the register which should be used.  Note that
   26164 this is the same syntax used for defining global register variables,
   26165 but for a local variable it would appear within a function.
   26166 
   26167  Naturally the register name is cpu-dependent, but this is not a
   26168 problem, since specific registers are most often useful with explicit
   26169 assembler instructions (*note Extended Asm::).  Both of these things
   26170 generally require that you conditionalize your program according to cpu
   26171 type.
   26172 
   26173  In addition, operating systems on one type of cpu may differ in how
   26174 they name the registers; then you would need additional conditionals.
   26175 For example, some 68000 operating systems call this register `%a5'.
   26176 
   26177  Defining such a register variable does not reserve the register; it
   26178 remains available for other uses in places where flow control determines
   26179 the variable's value is not live.
   26180 
   26181  This option does not guarantee that GCC will generate code that has
   26182 this variable in the register you specify at all times.  You may not
   26183 code an explicit reference to this register in the _assembler
   26184 instruction template_ part of an `asm' statement and assume it will
   26185 always refer to this variable.  However, using the variable as an `asm'
   26186 _operand_ guarantees that the specified register is used for the
   26187 operand.
   26188 
   26189  Stores into local register variables may be deleted when they appear
   26190 to be dead according to dataflow analysis.  References to local
   26191 register variables may be deleted or moved or simplified.
   26192 
   26193  As for global register variables, it's recommended that you choose a
   26194 register which is normally saved and restored by function calls on your
   26195 machine, so that library routines will not clobber it.  A common
   26196 pitfall is to initialize multiple call-clobbered registers with
   26197 arbitrary expressions, where a function call or library call for an
   26198 arithmetic operator will overwrite a register value from a previous
   26199 assignment, for example `r0' below:
   26200      register int *p1 asm ("r0") = ...;
   26201      register int *p2 asm ("r1") = ...;
   26202  In those cases, a solution is to use a temporary variable for each
   26203 arbitrary expression.   *Note Example of asm with clobbered asm reg::.
   26204 
   26205 
   26206 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
   26207 
   26208 6.45 Alternate Keywords
   26209 =======================
   26210 
   26211 `-ansi' and the various `-std' options disable certain keywords.  This
   26212 causes trouble when you want to use GNU C extensions, or a
   26213 general-purpose header file that should be usable by all programs,
   26214 including ISO C programs.  The keywords `asm', `typeof' and `inline'
   26215 are not available in programs compiled with `-ansi' or `-std' (although
   26216 `inline' can be used in a program compiled with `-std=c99' or
   26217 `-std=c1x').  The ISO C99 keyword `restrict' is only available when
   26218 `-std=gnu99' (which will eventually be the default) or `-std=c99' (or
   26219 the equivalent `-std=iso9899:1999'), or an option for a later standard
   26220 version, is used.
   26221 
   26222  The way to solve these problems is to put `__' at the beginning and
   26223 end of each problematical keyword.  For example, use `__asm__' instead
   26224 of `asm', and `__inline__' instead of `inline'.
   26225 
   26226  Other C compilers won't accept these alternative keywords; if you want
   26227 to compile with another compiler, you can define the alternate keywords
   26228 as macros to replace them with the customary keywords.  It looks like
   26229 this:
   26230 
   26231      #ifndef __GNUC__
   26232      #define __asm__ asm
   26233      #endif
   26234 
   26235  `-pedantic' and other options cause warnings for many GNU C extensions.
   26236 You can prevent such warnings within one expression by writing
   26237 `__extension__' before the expression.  `__extension__' has no effect
   26238 aside from this.
   26239 
   26240 
   26241 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
   26242 
   26243 6.46 Incomplete `enum' Types
   26244 ============================
   26245 
   26246 You can define an `enum' tag without specifying its possible values.
   26247 This results in an incomplete type, much like what you get if you write
   26248 `struct foo' without describing the elements.  A later declaration
   26249 which does specify the possible values completes the type.
   26250 
   26251  You can't allocate variables or storage using the type while it is
   26252 incomplete.  However, you can work with pointers to that type.
   26253 
   26254  This extension may not be very useful, but it makes the handling of
   26255 `enum' more consistent with the way `struct' and `union' are handled.
   26256 
   26257  This extension is not supported by GNU C++.
   26258 
   26259 
   26260 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
   26261 
   26262 6.47 Function Names as Strings
   26263 ==============================
   26264 
   26265 GCC provides three magic variables which hold the name of the current
   26266 function, as a string.  The first of these is `__func__', which is part
   26267 of the C99 standard:
   26268 
   26269  The identifier `__func__' is implicitly declared by the translator as
   26270 if, immediately following the opening brace of each function
   26271 definition, the declaration
   26272 
   26273      static const char __func__[] = "function-name";
   26274 
   26275 appeared, where function-name is the name of the lexically-enclosing
   26276 function.  This name is the unadorned name of the function.
   26277 
   26278  `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
   26279 recognize only this name.  However, it is not standardized.  For
   26280 maximum portability, we recommend you use `__func__', but provide a
   26281 fallback definition with the preprocessor:
   26282 
   26283      #if __STDC_VERSION__ < 199901L
   26284      # if __GNUC__ >= 2
   26285      #  define __func__ __FUNCTION__
   26286      # else
   26287      #  define __func__ "<unknown>"
   26288      # endif
   26289      #endif
   26290 
   26291  In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
   26292 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
   26293 the function as well as its bare name.  For example, this program:
   26294 
   26295      extern "C" {
   26296      extern int printf (char *, ...);
   26297      }
   26298 
   26299      class a {
   26300       public:
   26301        void sub (int i)
   26302          {
   26303            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
   26304            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
   26305          }
   26306      };
   26307 
   26308      int
   26309      main (void)
   26310      {
   26311        a ax;
   26312        ax.sub (0);
   26313        return 0;
   26314      }
   26315 
   26316 gives this output:
   26317 
   26318      __FUNCTION__ = sub
   26319      __PRETTY_FUNCTION__ = void a::sub(int)
   26320 
   26321  These identifiers are not preprocessor macros.  In GCC 3.3 and
   26322 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
   26323 treated as string literals; they could be used to initialize `char'
   26324 arrays, and they could be concatenated with other string literals.  GCC
   26325 3.4 and later treat them as variables, like `__func__'.  In C++,
   26326 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
   26327 
   26328 
   26329 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
   26330 
   26331 6.48 Getting the Return or Frame Address of a Function
   26332 ======================================================
   26333 
   26334 These functions may be used to get information about the callers of a
   26335 function.
   26336 
   26337  -- Built-in Function: void * __builtin_return_address (unsigned int
   26338           LEVEL)
   26339      This function returns the return address of the current function,
   26340      or of one of its callers.  The LEVEL argument is number of frames
   26341      to scan up the call stack.  A value of `0' yields the return
   26342      address of the current function, a value of `1' yields the return
   26343      address of the caller of the current function, and so forth.  When
   26344      inlining the expected behavior is that the function will return
   26345      the address of the function that will be returned to.  To work
   26346      around this behavior use the `noinline' function attribute.
   26347 
   26348      The LEVEL argument must be a constant integer.
   26349 
   26350      On some machines it may be impossible to determine the return
   26351      address of any function other than the current one; in such cases,
   26352      or when the top of the stack has been reached, this function will
   26353      return `0' or a random value.  In addition,
   26354      `__builtin_frame_address' may be used to determine if the top of
   26355      the stack has been reached.
   26356 
   26357      Additional post-processing of the returned value may be needed, see
   26358      `__builtin_extract_return_address'.
   26359 
   26360      This function should only be used with a nonzero argument for
   26361      debugging purposes.
   26362 
   26363  -- Built-in Function: void * __builtin_extract_return_address (void
   26364           *ADDR)
   26365      The address as returned by `__builtin_return_address' may have to
   26366      be fed through this function to get the actual encoded address.
   26367      For example, on the 31-bit S/390 platform the highest bit has to
   26368      be masked out, or on SPARC platforms an offset has to be added for
   26369      the true next instruction to be executed.
   26370 
   26371      If no fixup is needed, this function simply passes through ADDR.
   26372 
   26373  -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
   26374      This function does the reverse of
   26375      `__builtin_extract_return_address'.
   26376 
   26377  -- Built-in Function: void * __builtin_frame_address (unsigned int
   26378           LEVEL)
   26379      This function is similar to `__builtin_return_address', but it
   26380      returns the address of the function frame rather than the return
   26381      address of the function.  Calling `__builtin_frame_address' with a
   26382      value of `0' yields the frame address of the current function, a
   26383      value of `1' yields the frame address of the caller of the current
   26384      function, and so forth.
   26385 
   26386      The frame is the area on the stack which holds local variables and
   26387      saved registers.  The frame address is normally the address of the
   26388      first word pushed on to the stack by the function.  However, the
   26389      exact definition depends upon the processor and the calling
   26390      convention.  If the processor has a dedicated frame pointer
   26391      register, and the function has a frame, then
   26392      `__builtin_frame_address' will return the value of the frame
   26393      pointer register.
   26394 
   26395      On some machines it may be impossible to determine the frame
   26396      address of any function other than the current one; in such cases,
   26397      or when the top of the stack has been reached, this function will
   26398      return `0' if the first frame pointer is properly initialized by
   26399      the startup code.
   26400 
   26401      This function should only be used with a nonzero argument for
   26402      debugging purposes.
   26403 
   26404 
   26405 File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
   26406 
   26407 6.49 Using vector instructions through built-in functions
   26408 =========================================================
   26409 
   26410 On some targets, the instruction set contains SIMD vector instructions
   26411 that operate on multiple values contained in one large register at the
   26412 same time.  For example, on the i386 the MMX, 3DNow! and SSE extensions
   26413 can be used this way.
   26414 
   26415  The first step in using these extensions is to provide the necessary
   26416 data types.  This should be done using an appropriate `typedef':
   26417 
   26418      typedef int v4si __attribute__ ((vector_size (16)));
   26419 
   26420  The `int' type specifies the base type, while the attribute specifies
   26421 the vector size for the variable, measured in bytes.  For example, the
   26422 declaration above causes the compiler to set the mode for the `v4si'
   26423 type to be 16 bytes wide and divided into `int' sized units.  For a
   26424 32-bit `int' this means a vector of 4 units of 4 bytes, and the
   26425 corresponding mode of `foo' will be V4SI.
   26426 
   26427  The `vector_size' attribute is only applicable to integral and float
   26428 scalars, although arrays, pointers, and function return values are
   26429 allowed in conjunction with this construct.
   26430 
   26431  All the basic integer types can be used as base types, both as signed
   26432 and as unsigned: `char', `short', `int', `long', `long long'.  In
   26433 addition, `float' and `double' can be used to build floating-point
   26434 vector types.
   26435 
   26436  Specifying a combination that is not valid for the current architecture
   26437 will cause GCC to synthesize the instructions using a narrower mode.
   26438 For example, if you specify a variable of type `V4SI' and your
   26439 architecture does not allow for this specific SIMD type, GCC will
   26440 produce code that uses 4 `SIs'.
   26441 
   26442  The types defined in this manner can be used with a subset of normal C
   26443 operations.  Currently, GCC will allow using the following operators on
   26444 these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
   26445 
   26446  The operations behave like C++ `valarrays'.  Addition is defined as
   26447 the addition of the corresponding elements of the operands.  For
   26448 example, in the code below, each of the 4 elements in A will be added
   26449 to the corresponding 4 elements in B and the resulting vector will be
   26450 stored in C.
   26451 
   26452      typedef int v4si __attribute__ ((vector_size (16)));
   26453 
   26454      v4si a, b, c;
   26455 
   26456      c = a + b;
   26457 
   26458  Subtraction, multiplication, division, and the logical operations
   26459 operate in a similar manner.  Likewise, the result of using the unary
   26460 minus or complement operators on a vector type is a vector whose
   26461 elements are the negative or complemented values of the corresponding
   26462 elements in the operand.
   26463 
   26464  In C it is possible to use shifting operators `<<', `>>' on
   26465 integer-type vectors. The operation is defined as following: `{a0, a1,
   26466 ..., an} >> {b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.
   26467 Vector operands must have the same number of elements.  Additionally
   26468 second operands can be a scalar integer in which case the scalar is
   26469 converted to the type used by the vector operand (with possible
   26470 truncation) and each element of this new vector is the scalar's value.
   26471 Consider the following code.
   26472 
   26473      typedef int v4si __attribute__ ((vector_size (16)));
   26474 
   26475      v4si a, b;
   26476 
   26477      b = a >> 1;     /* b = a >> {1,1,1,1}; */
   26478 
   26479  In C vectors can be subscripted as if the vector were an array with
   26480 the same number of elements and base type.  Out of bound accesses
   26481 invoke undefined behavior at runtime.  Warnings for out of bound
   26482 accesses for vector subscription can be enabled with `-Warray-bounds'.
   26483 
   26484  You can declare variables and use them in function calls and returns,
   26485 as well as in assignments and some casts.  You can specify a vector
   26486 type as a return type for a function.  Vector types can also be used as
   26487 function arguments.  It is possible to cast from one vector type to
   26488 another, provided they are of the same size (in fact, you can also cast
   26489 vectors to and from other datatypes of the same size).
   26490 
   26491  You cannot operate between vectors of different lengths or different
   26492 signedness without a cast.
   26493 
   26494  A port that supports hardware vector operations, usually provides a set
   26495 of built-in functions that can be used to operate on vectors.  For
   26496 example, a function to add two vectors and multiply the result by a
   26497 third could look like this:
   26498 
   26499      v4si f (v4si a, v4si b, v4si c)
   26500      {
   26501        v4si tmp = __builtin_addv4si (a, b);
   26502        return __builtin_mulv4si (tmp, c);
   26503      }
   26504 
   26505 
   26506 File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
   26507 
   26508 6.50 Offsetof
   26509 =============
   26510 
   26511 GCC implements for both C and C++ a syntactic extension to implement
   26512 the `offsetof' macro.
   26513 
   26514      primary:
   26515              "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
   26516 
   26517      offsetof_member_designator:
   26518                `identifier'
   26519              | offsetof_member_designator "." `identifier'
   26520              | offsetof_member_designator "[" `expr' "]"
   26521 
   26522  This extension is sufficient such that
   26523 
   26524      #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
   26525 
   26526  is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
   26527 dependent.  In either case, MEMBER may consist of a single identifier,
   26528 or a sequence of member accesses and array references.
   26529 
   26530 
   26531 File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
   26532 
   26533 6.51 Built-in functions for atomic memory access
   26534 ================================================
   26535 
   26536 The following builtins are intended to be compatible with those
   26537 described in the `Intel Itanium Processor-specific Application Binary
   26538 Interface', section 7.4.  As such, they depart from the normal GCC
   26539 practice of using the "__builtin_" prefix, and further that they are
   26540 overloaded such that they work on multiple types.
   26541 
   26542  The definition given in the Intel documentation allows only for the
   26543 use of the types `int', `long', `long long' as well as their unsigned
   26544 counterparts.  GCC will allow any integral scalar or pointer type that
   26545 is 1, 2, 4 or 8 bytes in length.
   26546 
   26547  Not all operations are supported by all target processors.  If a
   26548 particular operation cannot be implemented on the target processor, a
   26549 warning will be generated and a call an external function will be
   26550 generated.  The external function will carry the same name as the
   26551 builtin, with an additional suffix `_N' where N is the size of the data
   26552 type.
   26553 
   26554  In most cases, these builtins are considered a "full barrier".  That
   26555 is, no memory operand will be moved across the operation, either
   26556 forward or backward.  Further, instructions will be issued as necessary
   26557 to prevent the processor from speculating loads across the operation
   26558 and from queuing stores after the operation.
   26559 
   26560  All of the routines are described in the Intel documentation to take
   26561 "an optional list of variables protected by the memory barrier".  It's
   26562 not clear what is meant by that; it could mean that _only_ the
   26563 following variables are protected, or it could mean that these variables
   26564 should in addition be protected.  At present GCC ignores this list and
   26565 protects all variables which are globally accessible.  If in the future
   26566 we make some use of this list, an empty list will continue to mean all
   26567 globally accessible variables.
   26568 
   26569 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
   26570 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
   26571 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
   26572 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
   26573 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
   26574 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
   26575      These builtins perform the operation suggested by the name, and
   26576      returns the value that had previously been in memory.  That is,
   26577 
   26578           { tmp = *ptr; *ptr OP= value; return tmp; }
   26579           { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
   26580 
   26581      _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand'
   26582      builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp &
   26583      value'.
   26584 
   26585 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
   26586 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
   26587 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
   26588 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
   26589 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
   26590 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
   26591      These builtins perform the operation suggested by the name, and
   26592      return the new value.  That is,
   26593 
   26594           { *ptr OP= value; return *ptr; }
   26595           { *ptr = ~(*ptr & value); return *ptr; }   // nand
   26596 
   26597      _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch'
   26598      builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr &
   26599      value'.
   26600 
   26601 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
   26602 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
   26603      These builtins perform an atomic compare and swap.  That is, if
   26604      the current value of `*PTR' is OLDVAL, then write NEWVAL into
   26605      `*PTR'.
   26606 
   26607      The "bool" version returns true if the comparison is successful and
   26608      NEWVAL was written.  The "val" version returns the contents of
   26609      `*PTR' before the operation.
   26610 
   26611 `__sync_synchronize (...)'
   26612      This builtin issues a full memory barrier.
   26613 
   26614 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
   26615      This builtin, as described by Intel, is not a traditional
   26616      test-and-set operation, but rather an atomic exchange operation.
   26617      It writes VALUE into `*PTR', and returns the previous contents of
   26618      `*PTR'.
   26619 
   26620      Many targets have only minimal support for such locks, and do not
   26621      support a full exchange operation.  In this case, a target may
   26622      support reduced functionality here by which the _only_ valid value
   26623      to store is the immediate constant 1.  The exact value actually
   26624      stored in `*PTR' is implementation defined.
   26625 
   26626      This builtin is not a full barrier, but rather an "acquire
   26627      barrier".  This means that references after the builtin cannot
   26628      move to (or be speculated to) before the builtin, but previous
   26629      memory stores may not be globally visible yet, and previous memory
   26630      loads may not yet be satisfied.
   26631 
   26632 `void __sync_lock_release (TYPE *ptr, ...)'
   26633      This builtin releases the lock acquired by
   26634      `__sync_lock_test_and_set'.  Normally this means writing the
   26635      constant 0 to `*PTR'.
   26636 
   26637      This builtin is not a full barrier, but rather a "release barrier".
   26638      This means that all previous memory stores are globally visible,
   26639      and all previous memory loads have been satisfied, but following
   26640      memory reads are not prevented from being speculated to before the
   26641      barrier.
   26642 
   26643 
   26644 File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
   26645 
   26646 6.52 Object Size Checking Builtins
   26647 ==================================
   26648 
   26649 GCC implements a limited buffer overflow protection mechanism that can
   26650 prevent some buffer overflow attacks.
   26651 
   26652  -- Built-in Function: size_t __builtin_object_size (void * PTR, int
   26653           TYPE)
   26654      is a built-in construct that returns a constant number of bytes
   26655      from PTR to the end of the object PTR pointer points to (if known
   26656      at compile time).  `__builtin_object_size' never evaluates its
   26657      arguments for side-effects.  If there are any side-effects in
   26658      them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
   26659      for TYPE 2 or 3.  If there are multiple objects PTR can point to
   26660      and all of them are known at compile time, the returned number is
   26661      the maximum of remaining byte counts in those objects if TYPE & 2
   26662      is 0 and minimum if nonzero.  If it is not possible to determine
   26663      which objects PTR points to at compile time,
   26664      `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
   26665      1 and `(size_t) 0' for TYPE 2 or 3.
   26666 
   26667      TYPE is an integer constant from 0 to 3.  If the least significant
   26668      bit is clear, objects are whole variables, if it is set, a closest
   26669      surrounding subobject is considered the object a pointer points to.
   26670      The second bit determines if maximum or minimum of remaining bytes
   26671      is computed.
   26672 
   26673           struct V { char buf1[10]; int b; char buf2[10]; } var;
   26674           char *p = &var.buf1[1], *q = &var.b;
   26675 
   26676           /* Here the object p points to is var.  */
   26677           assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
   26678           /* The subobject p points to is var.buf1.  */
   26679           assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
   26680           /* The object q points to is var.  */
   26681           assert (__builtin_object_size (q, 0)
   26682                   == (char *) (&var + 1) - (char *) &var.b);
   26683           /* The subobject q points to is var.b.  */
   26684           assert (__builtin_object_size (q, 1) == sizeof (var.b));
   26685 
   26686  There are built-in functions added for many common string operation
   26687 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
   26688 provided.  This built-in has an additional last argument, which is the
   26689 number of bytes remaining in object the DEST argument points to or
   26690 `(size_t) -1' if the size is not known.
   26691 
   26692  The built-in functions are optimized into the normal string functions
   26693 like `memcpy' if the last argument is `(size_t) -1' or if it is known
   26694 at compile time that the destination object will not be overflown.  If
   26695 the compiler can determine at compile time the object will be always
   26696 overflown, it issues a warning.
   26697 
   26698  The intended use can be e.g.
   26699 
   26700      #undef memcpy
   26701      #define bos0(dest) __builtin_object_size (dest, 0)
   26702      #define memcpy(dest, src, n) \
   26703        __builtin___memcpy_chk (dest, src, n, bos0 (dest))
   26704 
   26705      char *volatile p;
   26706      char buf[10];
   26707      /* It is unknown what object p points to, so this is optimized
   26708         into plain memcpy - no checking is possible.  */
   26709      memcpy (p, "abcde", n);
   26710      /* Destination is known and length too.  It is known at compile
   26711         time there will be no overflow.  */
   26712      memcpy (&buf[5], "abcde", 5);
   26713      /* Destination is known, but the length is not known at compile time.
   26714         This will result in __memcpy_chk call that can check for overflow
   26715         at runtime.  */
   26716      memcpy (&buf[5], "abcde", n);
   26717      /* Destination is known and it is known at compile time there will
   26718         be overflow.  There will be a warning and __memcpy_chk call that
   26719         will abort the program at runtime.  */
   26720      memcpy (&buf[6], "abcde", 5);
   26721 
   26722  Such built-in functions are provided for `memcpy', `mempcpy',
   26723 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
   26724 `strncat'.
   26725 
   26726  There are also checking built-in functions for formatted output
   26727 functions.
   26728      int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
   26729      int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   26730                                    const char *fmt, ...);
   26731      int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
   26732                                    va_list ap);
   26733      int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
   26734                                     const char *fmt, va_list ap);
   26735 
   26736  The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
   26737 functions and can contain implementation specific flags on what
   26738 additional security measures the checking function might take, such as
   26739 handling `%n' differently.
   26740 
   26741  The OS argument is the object size S points to, like in the other
   26742 built-in functions.  There is a small difference in the behavior
   26743 though, if OS is `(size_t) -1', the built-in functions are optimized
   26744 into the non-checking functions only if FLAG is 0, otherwise the
   26745 checking function is called with OS argument set to `(size_t) -1'.
   26746 
   26747  In addition to this, there are checking built-in functions
   26748 `__builtin___printf_chk', `__builtin___vprintf_chk',
   26749 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
   26750 just one additional argument, FLAG, right before format string FMT.  If
   26751 the compiler is able to optimize them to `fputc' etc. functions, it
   26752 will, otherwise the checking function should be called and the FLAG
   26753 argument passed to it.
   26754 
   26755 
   26756 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
   26757 
   26758 6.53 Other built-in functions provided by GCC
   26759 =============================================
   26760 
   26761 GCC provides a large number of built-in functions other than the ones
   26762 mentioned above.  Some of these are for internal use in the processing
   26763 of exceptions or variable-length argument lists and will not be
   26764 documented here because they may change from time to time; we do not
   26765 recommend general use of these functions.
   26766 
   26767  The remaining functions are provided for optimization purposes.
   26768 
   26769  GCC includes built-in versions of many of the functions in the standard
   26770 C library.  The versions prefixed with `__builtin_' will always be
   26771 treated as having the same meaning as the C library function even if you
   26772 specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
   26773 these functions are only optimized in certain cases; if they are not
   26774 optimized in a particular case, a call to the library function will be
   26775 emitted.
   26776 
   26777  Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
   26778 `-std=c1x'), the functions `_exit', `alloca', `bcmp', `bzero',
   26779 `dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
   26780 `exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
   26781 `gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
   26782 `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
   26783 `jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
   26784 `pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
   26785 `scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
   26786 `signbitd64', `signbitd128', `significandf', `significandl',
   26787 `significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
   26788 `strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
   26789 `y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
   26790 handled as built-in functions.  All these functions have corresponding
   26791 versions prefixed with `__builtin_', which may be used even in strict
   26792 C90 mode.
   26793 
   26794  The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
   26795 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
   26796 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
   26797 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
   26798 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
   26799 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
   26800 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
   26801 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
   26802 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
   26803 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
   26804 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
   26805 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
   26806 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
   26807 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
   26808 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
   26809 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
   26810 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
   26811 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
   26812 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
   26813 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
   26814 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
   26815 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
   26816 `remainderf', `remainderl', `remainder', `remquof', `remquol',
   26817 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
   26818 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
   26819 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
   26820 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
   26821 functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
   26822 
   26823  There are also built-in versions of the ISO C99 functions `acosf',
   26824 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
   26825 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
   26826 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
   26827 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
   26828 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
   26829 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
   26830 recognized in any mode since ISO C90 reserves these names for the
   26831 purpose to which ISO C99 puts them.  All these functions have
   26832 corresponding versions prefixed with `__builtin_'.
   26833 
   26834  The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
   26835 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
   26836 `iswxdigit', `towlower' and `towupper' are handled as built-in functions
   26837 except in strict ISO C90 mode (`-ansi' or `-std=c90').
   26838 
   26839  The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
   26840 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
   26841 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
   26842 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
   26843 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
   26844 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
   26845 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
   26846 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
   26847 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
   26848 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
   26849 `vsprintf' are all recognized as built-in functions unless
   26850 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
   26851 for an individual function).  All of these functions have corresponding
   26852 versions prefixed with `__builtin_'.
   26853 
   26854  GCC provides built-in versions of the ISO C99 floating point comparison
   26855 macros that avoid raising exceptions for unordered operands.  They have
   26856 the same names as the standard macros ( `isgreater', `isgreaterequal',
   26857 `isless', `islessequal', `islessgreater', and `isunordered') , with
   26858 `__builtin_' prefixed.  We intend for a library implementor to be able
   26859 to simply `#define' each standard macro to its built-in equivalent.  In
   26860 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
   26861 and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
   26862 and `isnan' builtins appear both with and without the `__builtin_'
   26863 prefix.
   26864 
   26865  -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
   26866      You can use the built-in function `__builtin_types_compatible_p' to
   26867      determine whether two types are the same.
   26868 
   26869      This built-in function returns 1 if the unqualified versions of the
   26870      types TYPE1 and TYPE2 (which are types, not expressions) are
   26871      compatible, 0 otherwise.  The result of this built-in function can
   26872      be used in integer constant expressions.
   26873 
   26874      This built-in function ignores top level qualifiers (e.g., `const',
   26875      `volatile').  For example, `int' is equivalent to `const int'.
   26876 
   26877      The type `int[]' and `int[5]' are compatible.  On the other hand,
   26878      `int' and `char *' are not compatible, even if the size of their
   26879      types, on the particular architecture are the same.  Also, the
   26880      amount of pointer indirection is taken into account when
   26881      determining similarity.  Consequently, `short *' is not similar to
   26882      `short **'.  Furthermore, two types that are typedefed are
   26883      considered compatible if their underlying types are compatible.
   26884 
   26885      An `enum' type is not considered to be compatible with another
   26886      `enum' type even if both are compatible with the same integer
   26887      type; this is what the C standard specifies.  For example, `enum
   26888      {foo, bar}' is not similar to `enum {hot, dog}'.
   26889 
   26890      You would typically use this function in code whose execution
   26891      varies depending on the arguments' types.  For example:
   26892 
   26893           #define foo(x)                                                  \
   26894             ({                                                           \
   26895               typeof (x) tmp = (x);                                       \
   26896               if (__builtin_types_compatible_p (typeof (x), long double)) \
   26897                 tmp = foo_long_double (tmp);                              \
   26898               else if (__builtin_types_compatible_p (typeof (x), double)) \
   26899                 tmp = foo_double (tmp);                                   \
   26900               else if (__builtin_types_compatible_p (typeof (x), float))  \
   26901                 tmp = foo_float (tmp);                                    \
   26902               else                                                        \
   26903                 abort ();                                                 \
   26904               tmp;                                                        \
   26905             })
   26906 
   26907      _Note:_ This construct is only available for C.
   26908 
   26909 
   26910  -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
   26911           EXP2)
   26912      You can use the built-in function `__builtin_choose_expr' to
   26913      evaluate code depending on the value of a constant expression.
   26914      This built-in function returns EXP1 if CONST_EXP, which is an
   26915      integer constant expression, is nonzero.  Otherwise it returns
   26916      EXP2.
   26917 
   26918      This built-in function is analogous to the `? :' operator in C,
   26919      except that the expression returned has its type unaltered by
   26920      promotion rules.  Also, the built-in function does not evaluate
   26921      the expression that was not chosen.  For example, if CONST_EXP
   26922      evaluates to true, EXP2 is not evaluated even if it has
   26923      side-effects.
   26924 
   26925      This built-in function can return an lvalue if the chosen argument
   26926      is an lvalue.
   26927 
   26928      If EXP1 is returned, the return type is the same as EXP1's type.
   26929      Similarly, if EXP2 is returned, its return type is the same as
   26930      EXP2.
   26931 
   26932      Example:
   26933 
   26934           #define foo(x)                                                    \
   26935             __builtin_choose_expr (                                         \
   26936               __builtin_types_compatible_p (typeof (x), double),            \
   26937               foo_double (x),                                               \
   26938               __builtin_choose_expr (                                       \
   26939                 __builtin_types_compatible_p (typeof (x), float),           \
   26940                 foo_float (x),                                              \
   26941                 /* The void expression results in a compile-time error  \
   26942                    when assigning the result to something.  */          \
   26943                 (void)0))
   26944 
   26945      _Note:_ This construct is only available for C.  Furthermore, the
   26946      unused expression (EXP1 or EXP2 depending on the value of
   26947      CONST_EXP) may still generate syntax errors.  This may change in
   26948      future revisions.
   26949 
   26950 
   26951  -- Built-in Function: int __builtin_constant_p (EXP)
   26952      You can use the built-in function `__builtin_constant_p' to
   26953      determine if a value is known to be constant at compile-time and
   26954      hence that GCC can perform constant-folding on expressions
   26955      involving that value.  The argument of the function is the value
   26956      to test.  The function returns the integer 1 if the argument is
   26957      known to be a compile-time constant and 0 if it is not known to be
   26958      a compile-time constant.  A return of 0 does not indicate that the
   26959      value is _not_ a constant, but merely that GCC cannot prove it is
   26960      a constant with the specified value of the `-O' option.
   26961 
   26962      You would typically use this function in an embedded application
   26963      where memory was a critical resource.  If you have some complex
   26964      calculation, you may want it to be folded if it involves
   26965      constants, but need to call a function if it does not.  For
   26966      example:
   26967 
   26968           #define Scale_Value(X)      \
   26969             (__builtin_constant_p (X) \
   26970             ? ((X) * SCALE + OFFSET) : Scale (X))
   26971 
   26972      You may use this built-in function in either a macro or an inline
   26973      function.  However, if you use it in an inlined function and pass
   26974      an argument of the function as the argument to the built-in, GCC
   26975      will never return 1 when you call the inline function with a
   26976      string constant or compound literal (*note Compound Literals::)
   26977      and will not return 1 when you pass a constant numeric value to
   26978      the inline function unless you specify the `-O' option.
   26979 
   26980      You may also use `__builtin_constant_p' in initializers for static
   26981      data.  For instance, you can write
   26982 
   26983           static const int table[] = {
   26984              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
   26985              /* ... */
   26986           };
   26987 
   26988      This is an acceptable initializer even if EXPRESSION is not a
   26989      constant expression, including the case where
   26990      `__builtin_constant_p' returns 1 because EXPRESSION can be folded
   26991      to a constant but EXPRESSION contains operands that would not
   26992      otherwise be permitted in a static initializer (for example, `0 &&
   26993      foo ()').  GCC must be more conservative about evaluating the
   26994      built-in in this case, because it has no opportunity to perform
   26995      optimization.
   26996 
   26997      Previous versions of GCC did not accept this built-in in data
   26998      initializers.  The earliest version where it is completely safe is
   26999      3.0.1.
   27000 
   27001  -- Built-in Function: long __builtin_expect (long EXP, long C)
   27002      You may use `__builtin_expect' to provide the compiler with branch
   27003      prediction information.  In general, you should prefer to use
   27004      actual profile feedback for this (`-fprofile-arcs'), as
   27005      programmers are notoriously bad at predicting how their programs
   27006      actually perform.  However, there are applications in which this
   27007      data is hard to collect.
   27008 
   27009      The return value is the value of EXP, which should be an integral
   27010      expression.  The semantics of the built-in are that it is expected
   27011      that EXP == C.  For example:
   27012 
   27013           if (__builtin_expect (x, 0))
   27014             foo ();
   27015 
   27016      would indicate that we do not expect to call `foo', since we
   27017      expect `x' to be zero.  Since you are limited to integral
   27018      expressions for EXP, you should use constructions such as
   27019 
   27020           if (__builtin_expect (ptr != NULL, 1))
   27021             error ();
   27022 
   27023      when testing pointer or floating-point values.
   27024 
   27025  -- Built-in Function: void __builtin_trap (void)
   27026      This function causes the program to exit abnormally.  GCC
   27027      implements this function by using a target-dependent mechanism
   27028      (such as intentionally executing an illegal instruction) or by
   27029      calling `abort'.  The mechanism used may vary from release to
   27030      release so you should not rely on any particular implementation.
   27031 
   27032  -- Built-in Function: void __builtin_unreachable (void)
   27033      If control flow reaches the point of the `__builtin_unreachable',
   27034      the program is undefined.  It is useful in situations where the
   27035      compiler cannot deduce the unreachability of the code.
   27036 
   27037      One such case is immediately following an `asm' statement that
   27038      will either never terminate, or one that transfers control
   27039      elsewhere and never returns.  In this example, without the
   27040      `__builtin_unreachable', GCC would issue a warning that control
   27041      reaches the end of a non-void function.  It would also generate
   27042      code to return after the `asm'.
   27043 
   27044           int f (int c, int v)
   27045           {
   27046             if (c)
   27047               {
   27048                 return v;
   27049               }
   27050             else
   27051               {
   27052                 asm("jmp error_handler");
   27053                 __builtin_unreachable ();
   27054               }
   27055           }
   27056 
   27057      Because the `asm' statement unconditionally transfers control out
   27058      of the function, control will never reach the end of the function
   27059      body.  The `__builtin_unreachable' is in fact unreachable and
   27060      communicates this fact to the compiler.
   27061 
   27062      Another use for `__builtin_unreachable' is following a call a
   27063      function that never returns but that is not declared
   27064      `__attribute__((noreturn))', as in this example:
   27065 
   27066           void function_that_never_returns (void);
   27067 
   27068           int g (int c)
   27069           {
   27070             if (c)
   27071               {
   27072                 return 1;
   27073               }
   27074             else
   27075               {
   27076                 function_that_never_returns ();
   27077                 __builtin_unreachable ();
   27078               }
   27079           }
   27080 
   27081 
   27082  -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
   27083           *END)
   27084      This function is used to flush the processor's instruction cache
   27085      for the region of memory between BEGIN inclusive and END
   27086      exclusive.  Some targets require that the instruction cache be
   27087      flushed, after modifying memory containing code, in order to obtain
   27088      deterministic behavior.
   27089 
   27090      If the target does not require instruction cache flushes,
   27091      `__builtin___clear_cache' has no effect.  Otherwise either
   27092      instructions are emitted in-line to clear the instruction cache or
   27093      a call to the `__clear_cache' function in libgcc is made.
   27094 
   27095  -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
   27096      This function is used to minimize cache-miss latency by moving
   27097      data into a cache before it is accessed.  You can insert calls to
   27098      `__builtin_prefetch' into code for which you know addresses of
   27099      data in memory that is likely to be accessed soon.  If the target
   27100      supports them, data prefetch instructions will be generated.  If
   27101      the prefetch is done early enough before the access then the data
   27102      will be in the cache by the time it is accessed.
   27103 
   27104      The value of ADDR is the address of the memory to prefetch.  There
   27105      are two optional arguments, RW and LOCALITY.  The value of RW is a
   27106      compile-time constant one or zero; one means that the prefetch is
   27107      preparing for a write to the memory address and zero, the default,
   27108      means that the prefetch is preparing for a read.  The value
   27109      LOCALITY must be a compile-time constant integer between zero and
   27110      three.  A value of zero means that the data has no temporal
   27111      locality, so it need not be left in the cache after the access.  A
   27112      value of three means that the data has a high degree of temporal
   27113      locality and should be left in all levels of cache possible.
   27114      Values of one and two mean, respectively, a low or moderate degree
   27115      of temporal locality.  The default is three.
   27116 
   27117           for (i = 0; i < n; i++)
   27118             {
   27119               a[i] = a[i] + b[i];
   27120               __builtin_prefetch (&a[i+j], 1, 1);
   27121               __builtin_prefetch (&b[i+j], 0, 1);
   27122               /* ... */
   27123             }
   27124 
   27125      Data prefetch does not generate faults if ADDR is invalid, but the
   27126      address expression itself must be valid.  For example, a prefetch
   27127      of `p->next' will not fault if `p->next' is not a valid address,
   27128      but evaluation will fault if `p' is not a valid address.
   27129 
   27130      If the target does not support data prefetch, the address
   27131      expression is evaluated if it includes side effects but no other
   27132      code is generated and GCC does not issue a warning.
   27133 
   27134  -- Built-in Function: double __builtin_huge_val (void)
   27135      Returns a positive infinity, if supported by the floating-point
   27136      format, else `DBL_MAX'.  This function is suitable for
   27137      implementing the ISO C macro `HUGE_VAL'.
   27138 
   27139  -- Built-in Function: float __builtin_huge_valf (void)
   27140      Similar to `__builtin_huge_val', except the return type is `float'.
   27141 
   27142  -- Built-in Function: long double __builtin_huge_vall (void)
   27143      Similar to `__builtin_huge_val', except the return type is `long
   27144      double'.
   27145 
   27146  -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
   27147           int, ...)
   27148      This built-in implements the C99 fpclassify functionality.  The
   27149      first five int arguments should be the target library's notion of
   27150      the possible FP classes and are used for return values.  They must
   27151      be constant values and they must appear in this order: `FP_NAN',
   27152      `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
   27153      ellipsis is for exactly one floating point value to classify.  GCC
   27154      treats the last argument as type-generic, which means it does not
   27155      do default promotion from float to double.
   27156 
   27157  -- Built-in Function: double __builtin_inf (void)
   27158      Similar to `__builtin_huge_val', except a warning is generated if
   27159      the target floating-point format does not support infinities.
   27160 
   27161  -- Built-in Function: _Decimal32 __builtin_infd32 (void)
   27162      Similar to `__builtin_inf', except the return type is `_Decimal32'.
   27163 
   27164  -- Built-in Function: _Decimal64 __builtin_infd64 (void)
   27165      Similar to `__builtin_inf', except the return type is `_Decimal64'.
   27166 
   27167  -- Built-in Function: _Decimal128 __builtin_infd128 (void)
   27168      Similar to `__builtin_inf', except the return type is
   27169      `_Decimal128'.
   27170 
   27171  -- Built-in Function: float __builtin_inff (void)
   27172      Similar to `__builtin_inf', except the return type is `float'.
   27173      This function is suitable for implementing the ISO C99 macro
   27174      `INFINITY'.
   27175 
   27176  -- Built-in Function: long double __builtin_infl (void)
   27177      Similar to `__builtin_inf', except the return type is `long
   27178      double'.
   27179 
   27180  -- Built-in Function: int __builtin_isinf_sign (...)
   27181      Similar to `isinf', except the return value will be negative for
   27182      an argument of `-Inf'.  Note while the parameter list is an
   27183      ellipsis, this function only accepts exactly one floating point
   27184      argument.  GCC treats this parameter as type-generic, which means
   27185      it does not do default promotion from float to double.
   27186 
   27187  -- Built-in Function: double __builtin_nan (const char *str)
   27188      This is an implementation of the ISO C99 function `nan'.
   27189 
   27190      Since ISO C99 defines this function in terms of `strtod', which we
   27191      do not implement, a description of the parsing is in order.  The
   27192      string is parsed as by `strtol'; that is, the base is recognized by
   27193      leading `0' or `0x' prefixes.  The number parsed is placed in the
   27194      significand such that the least significant bit of the number is
   27195      at the least significant bit of the significand.  The number is
   27196      truncated to fit the significand field provided.  The significand
   27197      is forced to be a quiet NaN.
   27198 
   27199      This function, if given a string literal all of which would have
   27200      been consumed by strtol, is evaluated early enough that it is
   27201      considered a compile-time constant.
   27202 
   27203  -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
   27204      Similar to `__builtin_nan', except the return type is `_Decimal32'.
   27205 
   27206  -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
   27207      Similar to `__builtin_nan', except the return type is `_Decimal64'.
   27208 
   27209  -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
   27210      Similar to `__builtin_nan', except the return type is
   27211      `_Decimal128'.
   27212 
   27213  -- Built-in Function: float __builtin_nanf (const char *str)
   27214      Similar to `__builtin_nan', except the return type is `float'.
   27215 
   27216  -- Built-in Function: long double __builtin_nanl (const char *str)
   27217      Similar to `__builtin_nan', except the return type is `long
   27218      double'.
   27219 
   27220  -- Built-in Function: double __builtin_nans (const char *str)
   27221      Similar to `__builtin_nan', except the significand is forced to be
   27222      a signaling NaN.  The `nans' function is proposed by WG14 N965.
   27223 
   27224  -- Built-in Function: float __builtin_nansf (const char *str)
   27225      Similar to `__builtin_nans', except the return type is `float'.
   27226 
   27227  -- Built-in Function: long double __builtin_nansl (const char *str)
   27228      Similar to `__builtin_nans', except the return type is `long
   27229      double'.
   27230 
   27231  -- Built-in Function: int __builtin_ffs (unsigned int x)
   27232      Returns one plus the index of the least significant 1-bit of X, or
   27233      if X is zero, returns zero.
   27234 
   27235  -- Built-in Function: int __builtin_clz (unsigned int x)
   27236      Returns the number of leading 0-bits in X, starting at the most
   27237      significant bit position.  If X is 0, the result is undefined.
   27238 
   27239  -- Built-in Function: int __builtin_ctz (unsigned int x)
   27240      Returns the number of trailing 0-bits in X, starting at the least
   27241      significant bit position.  If X is 0, the result is undefined.
   27242 
   27243  -- Built-in Function: int __builtin_popcount (unsigned int x)
   27244      Returns the number of 1-bits in X.
   27245 
   27246  -- Built-in Function: int __builtin_parity (unsigned int x)
   27247      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
   27248 
   27249  -- Built-in Function: int __builtin_ffsl (unsigned long)
   27250      Similar to `__builtin_ffs', except the argument type is `unsigned
   27251      long'.
   27252 
   27253  -- Built-in Function: int __builtin_clzl (unsigned long)
   27254      Similar to `__builtin_clz', except the argument type is `unsigned
   27255      long'.
   27256 
   27257  -- Built-in Function: int __builtin_ctzl (unsigned long)
   27258      Similar to `__builtin_ctz', except the argument type is `unsigned
   27259      long'.
   27260 
   27261  -- Built-in Function: int __builtin_popcountl (unsigned long)
   27262      Similar to `__builtin_popcount', except the argument type is
   27263      `unsigned long'.
   27264 
   27265  -- Built-in Function: int __builtin_parityl (unsigned long)
   27266      Similar to `__builtin_parity', except the argument type is
   27267      `unsigned long'.
   27268 
   27269  -- Built-in Function: int __builtin_ffsll (unsigned long long)
   27270      Similar to `__builtin_ffs', except the argument type is `unsigned
   27271      long long'.
   27272 
   27273  -- Built-in Function: int __builtin_clzll (unsigned long long)
   27274      Similar to `__builtin_clz', except the argument type is `unsigned
   27275      long long'.
   27276 
   27277  -- Built-in Function: int __builtin_ctzll (unsigned long long)
   27278      Similar to `__builtin_ctz', except the argument type is `unsigned
   27279      long long'.
   27280 
   27281  -- Built-in Function: int __builtin_popcountll (unsigned long long)
   27282      Similar to `__builtin_popcount', except the argument type is
   27283      `unsigned long long'.
   27284 
   27285  -- Built-in Function: int __builtin_parityll (unsigned long long)
   27286      Similar to `__builtin_parity', except the argument type is
   27287      `unsigned long long'.
   27288 
   27289  -- Built-in Function: double __builtin_powi (double, int)
   27290      Returns the first argument raised to the power of the second.
   27291      Unlike the `pow' function no guarantees about precision and
   27292      rounding are made.
   27293 
   27294  -- Built-in Function: float __builtin_powif (float, int)
   27295      Similar to `__builtin_powi', except the argument and return types
   27296      are `float'.
   27297 
   27298  -- Built-in Function: long double __builtin_powil (long double, int)
   27299      Similar to `__builtin_powi', except the argument and return types
   27300      are `long double'.
   27301 
   27302  -- Built-in Function: int32_t __builtin_bswap32 (int32_t x)
   27303      Returns X with the order of the bytes reversed; for example,
   27304      `0xaabbccdd' becomes `0xddccbbaa'.  Byte here always means exactly
   27305      8 bits.
   27306 
   27307  -- Built-in Function: int64_t __builtin_bswap64 (int64_t x)
   27308      Similar to `__builtin_bswap32', except the argument and return
   27309      types are 64-bit.
   27310 
   27311 
   27312 File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
   27313 
   27314 6.54 Built-in Functions Specific to Particular Target Machines
   27315 ==============================================================
   27316 
   27317 On some target machines, GCC supports many built-in functions specific
   27318 to those machines.  Generally these generate calls to specific machine
   27319 instructions, but allow the compiler to schedule those calls.
   27320 
   27321 * Menu:
   27322 
   27323 * Alpha Built-in Functions::
   27324 * ARM iWMMXt Built-in Functions::
   27325 * ARM NEON Intrinsics::
   27326 * Blackfin Built-in Functions::
   27327 * FR-V Built-in Functions::
   27328 * X86 Built-in Functions::
   27329 * MIPS DSP Built-in Functions::
   27330 * MIPS Paired-Single Support::
   27331 * MIPS Loongson Built-in Functions::
   27332 * Other MIPS Built-in Functions::
   27333 * picoChip Built-in Functions::
   27334 * PowerPC AltiVec/VSX Built-in Functions::
   27335 * RX Built-in Functions::
   27336 * SPARC VIS Built-in Functions::
   27337 * SPU Built-in Functions::
   27338 
   27339 
   27340 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   27341 
   27342 6.54.1 Alpha Built-in Functions
   27343 -------------------------------
   27344 
   27345 These built-in functions are available for the Alpha family of
   27346 processors, depending on the command-line switches used.
   27347 
   27348  The following built-in functions are always available.  They all
   27349 generate the machine instruction that is part of the name.
   27350 
   27351      long __builtin_alpha_implver (void)
   27352      long __builtin_alpha_rpcc (void)
   27353      long __builtin_alpha_amask (long)
   27354      long __builtin_alpha_cmpbge (long, long)
   27355      long __builtin_alpha_extbl (long, long)
   27356      long __builtin_alpha_extwl (long, long)
   27357      long __builtin_alpha_extll (long, long)
   27358      long __builtin_alpha_extql (long, long)
   27359      long __builtin_alpha_extwh (long, long)
   27360      long __builtin_alpha_extlh (long, long)
   27361      long __builtin_alpha_extqh (long, long)
   27362      long __builtin_alpha_insbl (long, long)
   27363      long __builtin_alpha_inswl (long, long)
   27364      long __builtin_alpha_insll (long, long)
   27365      long __builtin_alpha_insql (long, long)
   27366      long __builtin_alpha_inswh (long, long)
   27367      long __builtin_alpha_inslh (long, long)
   27368      long __builtin_alpha_insqh (long, long)
   27369      long __builtin_alpha_mskbl (long, long)
   27370      long __builtin_alpha_mskwl (long, long)
   27371      long __builtin_alpha_mskll (long, long)
   27372      long __builtin_alpha_mskql (long, long)
   27373      long __builtin_alpha_mskwh (long, long)
   27374      long __builtin_alpha_msklh (long, long)
   27375      long __builtin_alpha_mskqh (long, long)
   27376      long __builtin_alpha_umulh (long, long)
   27377      long __builtin_alpha_zap (long, long)
   27378      long __builtin_alpha_zapnot (long, long)
   27379 
   27380  The following built-in functions are always with `-mmax' or
   27381 `-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
   27382 machine instruction that is part of the name.
   27383 
   27384      long __builtin_alpha_pklb (long)
   27385      long __builtin_alpha_pkwb (long)
   27386      long __builtin_alpha_unpkbl (long)
   27387      long __builtin_alpha_unpkbw (long)
   27388      long __builtin_alpha_minub8 (long, long)
   27389      long __builtin_alpha_minsb8 (long, long)
   27390      long __builtin_alpha_minuw4 (long, long)
   27391      long __builtin_alpha_minsw4 (long, long)
   27392      long __builtin_alpha_maxub8 (long, long)
   27393      long __builtin_alpha_maxsb8 (long, long)
   27394      long __builtin_alpha_maxuw4 (long, long)
   27395      long __builtin_alpha_maxsw4 (long, long)
   27396      long __builtin_alpha_perr (long, long)
   27397 
   27398  The following built-in functions are always with `-mcix' or
   27399 `-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
   27400 machine instruction that is part of the name.
   27401 
   27402      long __builtin_alpha_cttz (long)
   27403      long __builtin_alpha_ctlz (long)
   27404      long __builtin_alpha_ctpop (long)
   27405 
   27406  The following builtins are available on systems that use the OSF/1
   27407 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
   27408 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
   27409 
   27410      void *__builtin_thread_pointer (void)
   27411      void __builtin_set_thread_pointer (void *)
   27412 
   27413 
   27414 File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins
   27415 
   27416 6.54.2 ARM iWMMXt Built-in Functions
   27417 ------------------------------------
   27418 
   27419 These built-in functions are available for the ARM family of processors
   27420 when the `-mcpu=iwmmxt' switch is used:
   27421 
   27422      typedef int v2si __attribute__ ((vector_size (8)));
   27423      typedef short v4hi __attribute__ ((vector_size (8)));
   27424      typedef char v8qi __attribute__ ((vector_size (8)));
   27425 
   27426      int __builtin_arm_getwcx (int)
   27427      void __builtin_arm_setwcx (int, int)
   27428      int __builtin_arm_textrmsb (v8qi, int)
   27429      int __builtin_arm_textrmsh (v4hi, int)
   27430      int __builtin_arm_textrmsw (v2si, int)
   27431      int __builtin_arm_textrmub (v8qi, int)
   27432      int __builtin_arm_textrmuh (v4hi, int)
   27433      int __builtin_arm_textrmuw (v2si, int)
   27434      v8qi __builtin_arm_tinsrb (v8qi, int)
   27435      v4hi __builtin_arm_tinsrh (v4hi, int)
   27436      v2si __builtin_arm_tinsrw (v2si, int)
   27437      long long __builtin_arm_tmia (long long, int, int)
   27438      long long __builtin_arm_tmiabb (long long, int, int)
   27439      long long __builtin_arm_tmiabt (long long, int, int)
   27440      long long __builtin_arm_tmiaph (long long, int, int)
   27441      long long __builtin_arm_tmiatb (long long, int, int)
   27442      long long __builtin_arm_tmiatt (long long, int, int)
   27443      int __builtin_arm_tmovmskb (v8qi)
   27444      int __builtin_arm_tmovmskh (v4hi)
   27445      int __builtin_arm_tmovmskw (v2si)
   27446      long long __builtin_arm_waccb (v8qi)
   27447      long long __builtin_arm_wacch (v4hi)
   27448      long long __builtin_arm_waccw (v2si)
   27449      v8qi __builtin_arm_waddb (v8qi, v8qi)
   27450      v8qi __builtin_arm_waddbss (v8qi, v8qi)
   27451      v8qi __builtin_arm_waddbus (v8qi, v8qi)
   27452      v4hi __builtin_arm_waddh (v4hi, v4hi)
   27453      v4hi __builtin_arm_waddhss (v4hi, v4hi)
   27454      v4hi __builtin_arm_waddhus (v4hi, v4hi)
   27455      v2si __builtin_arm_waddw (v2si, v2si)
   27456      v2si __builtin_arm_waddwss (v2si, v2si)
   27457      v2si __builtin_arm_waddwus (v2si, v2si)
   27458      v8qi __builtin_arm_walign (v8qi, v8qi, int)
   27459      long long __builtin_arm_wand(long long, long long)
   27460      long long __builtin_arm_wandn (long long, long long)
   27461      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
   27462      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
   27463      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
   27464      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
   27465      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
   27466      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
   27467      v2si __builtin_arm_wcmpeqw (v2si, v2si)
   27468      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
   27469      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
   27470      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
   27471      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
   27472      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
   27473      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
   27474      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
   27475      long long __builtin_arm_wmacsz (v4hi, v4hi)
   27476      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
   27477      long long __builtin_arm_wmacuz (v4hi, v4hi)
   27478      v4hi __builtin_arm_wmadds (v4hi, v4hi)
   27479      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
   27480      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
   27481      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
   27482      v2si __builtin_arm_wmaxsw (v2si, v2si)
   27483      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
   27484      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
   27485      v2si __builtin_arm_wmaxuw (v2si, v2si)
   27486      v8qi __builtin_arm_wminsb (v8qi, v8qi)
   27487      v4hi __builtin_arm_wminsh (v4hi, v4hi)
   27488      v2si __builtin_arm_wminsw (v2si, v2si)
   27489      v8qi __builtin_arm_wminub (v8qi, v8qi)
   27490      v4hi __builtin_arm_wminuh (v4hi, v4hi)
   27491      v2si __builtin_arm_wminuw (v2si, v2si)
   27492      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
   27493      v4hi __builtin_arm_wmulul (v4hi, v4hi)
   27494      v4hi __builtin_arm_wmulum (v4hi, v4hi)
   27495      long long __builtin_arm_wor (long long, long long)
   27496      v2si __builtin_arm_wpackdss (long long, long long)
   27497      v2si __builtin_arm_wpackdus (long long, long long)
   27498      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
   27499      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
   27500      v4hi __builtin_arm_wpackwss (v2si, v2si)
   27501      v4hi __builtin_arm_wpackwus (v2si, v2si)
   27502      long long __builtin_arm_wrord (long long, long long)
   27503      long long __builtin_arm_wrordi (long long, int)
   27504      v4hi __builtin_arm_wrorh (v4hi, long long)
   27505      v4hi __builtin_arm_wrorhi (v4hi, int)
   27506      v2si __builtin_arm_wrorw (v2si, long long)
   27507      v2si __builtin_arm_wrorwi (v2si, int)
   27508      v2si __builtin_arm_wsadb (v8qi, v8qi)
   27509      v2si __builtin_arm_wsadbz (v8qi, v8qi)
   27510      v2si __builtin_arm_wsadh (v4hi, v4hi)
   27511      v2si __builtin_arm_wsadhz (v4hi, v4hi)
   27512      v4hi __builtin_arm_wshufh (v4hi, int)
   27513      long long __builtin_arm_wslld (long long, long long)
   27514      long long __builtin_arm_wslldi (long long, int)
   27515      v4hi __builtin_arm_wsllh (v4hi, long long)
   27516      v4hi __builtin_arm_wsllhi (v4hi, int)
   27517      v2si __builtin_arm_wsllw (v2si, long long)
   27518      v2si __builtin_arm_wsllwi (v2si, int)
   27519      long long __builtin_arm_wsrad (long long, long long)
   27520      long long __builtin_arm_wsradi (long long, int)
   27521      v4hi __builtin_arm_wsrah (v4hi, long long)
   27522      v4hi __builtin_arm_wsrahi (v4hi, int)
   27523      v2si __builtin_arm_wsraw (v2si, long long)
   27524      v2si __builtin_arm_wsrawi (v2si, int)
   27525      long long __builtin_arm_wsrld (long long, long long)
   27526      long long __builtin_arm_wsrldi (long long, int)
   27527      v4hi __builtin_arm_wsrlh (v4hi, long long)
   27528      v4hi __builtin_arm_wsrlhi (v4hi, int)
   27529      v2si __builtin_arm_wsrlw (v2si, long long)
   27530      v2si __builtin_arm_wsrlwi (v2si, int)
   27531      v8qi __builtin_arm_wsubb (v8qi, v8qi)
   27532      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
   27533      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
   27534      v4hi __builtin_arm_wsubh (v4hi, v4hi)
   27535      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
   27536      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
   27537      v2si __builtin_arm_wsubw (v2si, v2si)
   27538      v2si __builtin_arm_wsubwss (v2si, v2si)
   27539      v2si __builtin_arm_wsubwus (v2si, v2si)
   27540      v4hi __builtin_arm_wunpckehsb (v8qi)
   27541      v2si __builtin_arm_wunpckehsh (v4hi)
   27542      long long __builtin_arm_wunpckehsw (v2si)
   27543      v4hi __builtin_arm_wunpckehub (v8qi)
   27544      v2si __builtin_arm_wunpckehuh (v4hi)
   27545      long long __builtin_arm_wunpckehuw (v2si)
   27546      v4hi __builtin_arm_wunpckelsb (v8qi)
   27547      v2si __builtin_arm_wunpckelsh (v4hi)
   27548      long long __builtin_arm_wunpckelsw (v2si)
   27549      v4hi __builtin_arm_wunpckelub (v8qi)
   27550      v2si __builtin_arm_wunpckeluh (v4hi)
   27551      long long __builtin_arm_wunpckeluw (v2si)
   27552      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
   27553      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
   27554      v2si __builtin_arm_wunpckihw (v2si, v2si)
   27555      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
   27556      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
   27557      v2si __builtin_arm_wunpckilw (v2si, v2si)
   27558      long long __builtin_arm_wxor (long long, long long)
   27559      long long __builtin_arm_wzero ()
   27560 
   27561 
   27562 File: gcc.info,  Node: ARM NEON Intrinsics,  Next: Blackfin Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
   27563 
   27564 6.54.3 ARM NEON Intrinsics
   27565 --------------------------
   27566 
   27567 These built-in intrinsics for the ARM Advanced SIMD extension are
   27568 available when the `-mfpu=neon' switch is used:
   27569 
   27570 6.54.3.1 Addition
   27571 .................
   27572 
   27573    * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
   27574      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
   27575 
   27576    * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
   27577      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
   27578 
   27579    * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
   27580      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
   27581 
   27582    * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
   27583      _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0'
   27584 
   27585    * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
   27586      _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0'
   27587 
   27588    * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
   27589      _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0'
   27590 
   27591    * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
   27592      _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0'
   27593 
   27594    * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)
   27595 
   27596    * int64x1_t vadd_s64 (int64x1_t, int64x1_t)
   27597 
   27598    * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
   27599      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
   27600 
   27601    * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
   27602      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
   27603 
   27604    * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
   27605      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
   27606 
   27607    * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
   27608      _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0'
   27609 
   27610    * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
   27611      _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0'
   27612 
   27613    * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
   27614      _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0'
   27615 
   27616    * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
   27617      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
   27618 
   27619    * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
   27620      _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0'
   27621 
   27622    * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
   27623      _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0'
   27624 
   27625    * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
   27626      _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0'
   27627 
   27628    * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
   27629      _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0'
   27630 
   27631    * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
   27632      _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0'
   27633 
   27634    * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
   27635      _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0'
   27636 
   27637    * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
   27638      _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0'
   27639 
   27640    * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
   27641      _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0'
   27642 
   27643    * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
   27644      _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0'
   27645 
   27646    * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
   27647      _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0'
   27648 
   27649    * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
   27650      _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0'
   27651 
   27652    * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
   27653      _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0'
   27654 
   27655    * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
   27656      _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0'
   27657 
   27658    * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
   27659      _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0'
   27660 
   27661    * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
   27662      _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0'
   27663 
   27664    * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
   27665      _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0'
   27666 
   27667    * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
   27668      _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0'
   27669 
   27670    * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
   27671      _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0'
   27672 
   27673    * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
   27674      _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0'
   27675 
   27676    * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
   27677      _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0'
   27678 
   27679    * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
   27680      _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0'
   27681 
   27682    * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
   27683      _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0'
   27684 
   27685    * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
   27686      _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0'
   27687 
   27688    * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
   27689      _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0'
   27690 
   27691    * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
   27692      _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0'
   27693 
   27694    * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
   27695      _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0'
   27696 
   27697    * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
   27698      _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0'
   27699 
   27700    * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
   27701      _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0'
   27702 
   27703    * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
   27704      _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0'
   27705 
   27706    * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
   27707      _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0'
   27708 
   27709    * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
   27710      _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0'
   27711 
   27712    * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
   27713      _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0'
   27714 
   27715    * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
   27716      _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0'
   27717 
   27718    * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
   27719      _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0'
   27720 
   27721    * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
   27722      _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0'
   27723 
   27724    * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
   27725      _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0'
   27726 
   27727    * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
   27728      _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0'
   27729 
   27730    * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
   27731      _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0'
   27732 
   27733    * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
   27734      _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0'
   27735 
   27736    * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
   27737      _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0'
   27738 
   27739    * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
   27740      _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0'
   27741 
   27742    * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
   27743      _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0'
   27744 
   27745    * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
   27746      _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0'
   27747 
   27748    * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
   27749      _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0'
   27750 
   27751    * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
   27752      _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0'
   27753 
   27754    * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
   27755      _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0'
   27756 
   27757    * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
   27758      _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0'
   27759 
   27760    * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
   27761      _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0'
   27762 
   27763    * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
   27764      _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0'
   27765 
   27766    * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
   27767      _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0'
   27768 
   27769    * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
   27770      _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0'
   27771 
   27772    * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
   27773      _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0'
   27774 
   27775    * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
   27776      _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0'
   27777 
   27778    * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
   27779      _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0'
   27780 
   27781    * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
   27782      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
   27783 
   27784    * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
   27785      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
   27786 
   27787    * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
   27788      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
   27789 
   27790    * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
   27791      _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0'
   27792 
   27793    * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
   27794      _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0'
   27795 
   27796    * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
   27797      _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0'
   27798 
   27799    * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
   27800      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
   27801 
   27802    * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
   27803      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
   27804 
   27805    * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
   27806      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
   27807 
   27808    * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
   27809      _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0'
   27810 
   27811    * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
   27812      _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0'
   27813 
   27814    * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
   27815      _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0'
   27816 
   27817 6.54.3.2 Multiplication
   27818 .......................
   27819 
   27820    * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
   27821      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
   27822 
   27823    * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
   27824      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
   27825 
   27826    * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
   27827      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
   27828 
   27829    * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
   27830      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0'
   27831 
   27832    * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
   27833      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0'
   27834 
   27835    * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
   27836      _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0'
   27837 
   27838    * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
   27839      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0'
   27840 
   27841    * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
   27842      _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0'
   27843 
   27844    * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
   27845      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
   27846 
   27847    * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
   27848      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
   27849 
   27850    * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
   27851      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
   27852 
   27853    * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
   27854      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0'
   27855 
   27856    * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
   27857      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0'
   27858 
   27859    * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
   27860      _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0'
   27861 
   27862    * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
   27863      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0'
   27864 
   27865    * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
   27866      _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0'
   27867 
   27868    * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
   27869      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0'
   27870 
   27871    * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
   27872      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0'
   27873 
   27874    * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
   27875      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0'
   27876 
   27877    * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
   27878      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0'
   27879 
   27880    * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
   27881      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0'
   27882 
   27883    * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
   27884      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0'
   27885 
   27886    * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
   27887      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0'
   27888 
   27889    * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
   27890      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0'
   27891 
   27892    * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
   27893      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0'
   27894 
   27895    * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
   27896      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0'
   27897 
   27898    * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
   27899      _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0'
   27900 
   27901    * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
   27902      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0'
   27903 
   27904    * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
   27905      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0'
   27906 
   27907    * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
   27908      _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0'
   27909 
   27910    * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
   27911      _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0'
   27912 
   27913    * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
   27914      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0'
   27915 
   27916    * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
   27917      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0'
   27918 
   27919 6.54.3.3 Multiply-accumulate
   27920 ............................
   27921 
   27922    * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   27923      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
   27924 
   27925    * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   27926      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
   27927 
   27928    * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   27929      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
   27930 
   27931    * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
   27932      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0'
   27933 
   27934    * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
   27935      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0'
   27936 
   27937    * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
   27938      _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0'
   27939 
   27940    * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
   27941      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0'
   27942 
   27943    * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   27944      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
   27945 
   27946    * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   27947      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
   27948 
   27949    * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   27950      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
   27951 
   27952    * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   27953      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0'
   27954 
   27955    * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   27956      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0'
   27957 
   27958    * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   27959      _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0'
   27960 
   27961    * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
   27962      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0'
   27963 
   27964    * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   27965      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0'
   27966 
   27967    * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   27968      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0'
   27969 
   27970    * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   27971      _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0'
   27972 
   27973    * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   27974      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0'
   27975 
   27976    * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   27977      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0'
   27978 
   27979    * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
   27980      _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0'
   27981 
   27982    * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
   27983      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0'
   27984 
   27985    * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
   27986      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0'
   27987 
   27988 6.54.3.4 Multiply-subtract
   27989 ..........................
   27990 
   27991    * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   27992      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
   27993 
   27994    * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   27995      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
   27996 
   27997    * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   27998      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
   27999 
   28000    * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
   28001      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0'
   28002 
   28003    * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
   28004      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0'
   28005 
   28006    * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
   28007      _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0'
   28008 
   28009    * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
   28010      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0'
   28011 
   28012    * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   28013      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
   28014 
   28015    * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   28016      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
   28017 
   28018    * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   28019      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
   28020 
   28021    * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
   28022      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0'
   28023 
   28024    * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
   28025      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0'
   28026 
   28027    * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
   28028      _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0'
   28029 
   28030    * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
   28031      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0'
   28032 
   28033    * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   28034      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0'
   28035 
   28036    * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   28037      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0'
   28038 
   28039    * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   28040      _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0'
   28041 
   28042    * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   28043      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0'
   28044 
   28045    * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   28046      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0'
   28047 
   28048    * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
   28049      _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0'
   28050 
   28051    * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
   28052      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0'
   28053 
   28054    * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
   28055      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0'
   28056 
   28057 6.54.3.5 Subtraction
   28058 ....................
   28059 
   28060    * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
   28061      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
   28062 
   28063    * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
   28064      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
   28065 
   28066    * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
   28067      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
   28068 
   28069    * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
   28070      _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0'
   28071 
   28072    * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
   28073      _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0'
   28074 
   28075    * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
   28076      _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0'
   28077 
   28078    * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
   28079      _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0'
   28080 
   28081    * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)
   28082 
   28083    * int64x1_t vsub_s64 (int64x1_t, int64x1_t)
   28084 
   28085    * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
   28086      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
   28087 
   28088    * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
   28089      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
   28090 
   28091    * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
   28092      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
   28093 
   28094    * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
   28095      _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0'
   28096 
   28097    * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
   28098      _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0'
   28099 
   28100    * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
   28101      _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0'
   28102 
   28103    * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
   28104      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
   28105 
   28106    * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
   28107      _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0'
   28108 
   28109    * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
   28110      _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0'
   28111 
   28112    * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
   28113      _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0'
   28114 
   28115    * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
   28116      _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0'
   28117 
   28118    * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
   28119      _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0'
   28120 
   28121    * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
   28122      _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0'
   28123 
   28124    * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
   28125      _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0'
   28126 
   28127    * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
   28128      _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0'
   28129 
   28130    * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
   28131      _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0'
   28132 
   28133    * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
   28134      _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0'
   28135 
   28136    * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
   28137      _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0'
   28138 
   28139    * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
   28140      _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0'
   28141 
   28142    * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
   28143      _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0'
   28144 
   28145    * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
   28146      _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0'
   28147 
   28148    * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
   28149      _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0'
   28150 
   28151    * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
   28152      _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0'
   28153 
   28154    * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
   28155      _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0'
   28156 
   28157    * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
   28158      _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0'
   28159 
   28160    * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
   28161      _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0'
   28162 
   28163    * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
   28164      _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0'
   28165 
   28166    * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
   28167      _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0'
   28168 
   28169    * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
   28170      _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0'
   28171 
   28172    * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
   28173      _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0'
   28174 
   28175    * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
   28176      _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0'
   28177 
   28178    * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
   28179      _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0'
   28180 
   28181    * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
   28182      _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0'
   28183 
   28184    * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
   28185      _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0'
   28186 
   28187    * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
   28188      _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0'
   28189 
   28190    * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
   28191      _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0'
   28192 
   28193    * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
   28194      _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0'
   28195 
   28196    * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
   28197      _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0'
   28198 
   28199    * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
   28200      _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0'
   28201 
   28202    * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
   28203      _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0'
   28204 
   28205    * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
   28206      _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0'
   28207 
   28208    * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
   28209      _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0'
   28210 
   28211    * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
   28212      _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0'
   28213 
   28214    * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
   28215      _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0'
   28216 
   28217    * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
   28218      _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0'
   28219 
   28220    * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
   28221      _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0'
   28222 
   28223    * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
   28224      _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0'
   28225 
   28226    * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
   28227      _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0'
   28228 
   28229    * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
   28230      _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0'
   28231 
   28232    * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
   28233      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
   28234 
   28235    * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
   28236      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
   28237 
   28238    * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
   28239      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
   28240 
   28241    * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
   28242      _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0'
   28243 
   28244    * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
   28245      _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0'
   28246 
   28247    * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
   28248      _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0'
   28249 
   28250    * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
   28251      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
   28252 
   28253    * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
   28254      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
   28255 
   28256    * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
   28257      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
   28258 
   28259    * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
   28260      _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0'
   28261 
   28262    * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
   28263      _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0'
   28264 
   28265    * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
   28266      _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0'
   28267 
   28268 6.54.3.6 Comparison (equal-to)
   28269 ..............................
   28270 
   28271    * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
   28272      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
   28273 
   28274    * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
   28275      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
   28276 
   28277    * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
   28278      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   28279 
   28280    * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
   28281      _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0'
   28282 
   28283    * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
   28284      _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0'
   28285 
   28286    * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
   28287      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   28288 
   28289    * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
   28290      _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0'
   28291 
   28292    * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
   28293      _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0'
   28294 
   28295    * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
   28296      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
   28297 
   28298    * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
   28299      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
   28300 
   28301    * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
   28302      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   28303 
   28304    * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
   28305      _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0'
   28306 
   28307    * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
   28308      _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0'
   28309 
   28310    * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
   28311      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   28312 
   28313    * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
   28314      _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0'
   28315 
   28316    * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
   28317      _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0'
   28318 
   28319 6.54.3.7 Comparison (greater-than-or-equal-to)
   28320 ..............................................
   28321 
   28322    * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
   28323      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
   28324 
   28325    * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
   28326      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
   28327 
   28328    * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
   28329      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
   28330 
   28331    * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
   28332      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
   28333 
   28334    * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
   28335      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
   28336 
   28337    * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
   28338      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
   28339 
   28340    * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
   28341      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
   28342 
   28343    * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
   28344      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
   28345 
   28346    * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
   28347      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
   28348 
   28349    * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
   28350      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
   28351 
   28352    * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
   28353      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
   28354 
   28355    * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
   28356      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
   28357 
   28358    * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
   28359      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
   28360 
   28361    * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
   28362      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
   28363 
   28364 6.54.3.8 Comparison (less-than-or-equal-to)
   28365 ...........................................
   28366 
   28367    * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
   28368      _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0'
   28369 
   28370    * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
   28371      _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0'
   28372 
   28373    * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
   28374      _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0'
   28375 
   28376    * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
   28377      _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0'
   28378 
   28379    * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
   28380      _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0'
   28381 
   28382    * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
   28383      _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0'
   28384 
   28385    * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
   28386      _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0'
   28387 
   28388    * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
   28389      _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0'
   28390 
   28391    * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
   28392      _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0'
   28393 
   28394    * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
   28395      _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0'
   28396 
   28397    * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
   28398      _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0'
   28399 
   28400    * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
   28401      _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0'
   28402 
   28403    * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
   28404      _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0'
   28405 
   28406    * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
   28407      _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0'
   28408 
   28409 6.54.3.9 Comparison (greater-than)
   28410 ..................................
   28411 
   28412    * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
   28413      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
   28414 
   28415    * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
   28416      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
   28417 
   28418    * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
   28419      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
   28420 
   28421    * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
   28422      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
   28423 
   28424    * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
   28425      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
   28426 
   28427    * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
   28428      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
   28429 
   28430    * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
   28431      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
   28432 
   28433    * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
   28434      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
   28435 
   28436    * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
   28437      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
   28438 
   28439    * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
   28440      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
   28441 
   28442    * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
   28443      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
   28444 
   28445    * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
   28446      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
   28447 
   28448    * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
   28449      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
   28450 
   28451    * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
   28452      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
   28453 
   28454 6.54.3.10 Comparison (less-than)
   28455 ................................
   28456 
   28457    * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
   28458      _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0'
   28459 
   28460    * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
   28461      _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0'
   28462 
   28463    * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
   28464      _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0'
   28465 
   28466    * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
   28467      _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0'
   28468 
   28469    * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
   28470      _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0'
   28471 
   28472    * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
   28473      _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0'
   28474 
   28475    * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
   28476      _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0'
   28477 
   28478    * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
   28479      _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0'
   28480 
   28481    * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
   28482      _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0'
   28483 
   28484    * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
   28485      _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0'
   28486 
   28487    * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
   28488      _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0'
   28489 
   28490    * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
   28491      _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0'
   28492 
   28493    * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
   28494      _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0'
   28495 
   28496    * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
   28497      _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0'
   28498 
   28499 6.54.3.11 Comparison (absolute greater-than-or-equal-to)
   28500 ........................................................
   28501 
   28502    * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
   28503      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
   28504 
   28505    * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
   28506      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
   28507 
   28508 6.54.3.12 Comparison (absolute less-than-or-equal-to)
   28509 .....................................................
   28510 
   28511    * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
   28512      _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0'
   28513 
   28514    * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
   28515      _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0'
   28516 
   28517 6.54.3.13 Comparison (absolute greater-than)
   28518 ............................................
   28519 
   28520    * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
   28521      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
   28522 
   28523    * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
   28524      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
   28525 
   28526 6.54.3.14 Comparison (absolute less-than)
   28527 .........................................
   28528 
   28529    * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
   28530      _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0'
   28531 
   28532    * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
   28533      _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0'
   28534 
   28535 6.54.3.15 Test bits
   28536 ...................
   28537 
   28538    * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
   28539      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
   28540 
   28541    * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
   28542      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
   28543 
   28544    * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
   28545      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   28546 
   28547    * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
   28548      _Form of expected instruction(s):_ `vtst.32 D0, D0, D0'
   28549 
   28550    * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
   28551      _Form of expected instruction(s):_ `vtst.16 D0, D0, D0'
   28552 
   28553    * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
   28554      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   28555 
   28556    * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
   28557      _Form of expected instruction(s):_ `vtst.8 D0, D0, D0'
   28558 
   28559    * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
   28560      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
   28561 
   28562    * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
   28563      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
   28564 
   28565    * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
   28566      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   28567 
   28568    * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
   28569      _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0'
   28570 
   28571    * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
   28572      _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0'
   28573 
   28574    * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
   28575      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   28576 
   28577    * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
   28578      _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0'
   28579 
   28580 6.54.3.16 Absolute difference
   28581 .............................
   28582 
   28583    * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
   28584      _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0'
   28585 
   28586    * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
   28587      _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0'
   28588 
   28589    * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
   28590      _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0'
   28591 
   28592    * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
   28593      _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0'
   28594 
   28595    * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
   28596      _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0'
   28597 
   28598    * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
   28599      _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0'
   28600 
   28601    * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
   28602      _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0'
   28603 
   28604    * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
   28605      _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0'
   28606 
   28607    * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
   28608      _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0'
   28609 
   28610    * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
   28611      _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0'
   28612 
   28613    * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
   28614      _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0'
   28615 
   28616    * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
   28617      _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0'
   28618 
   28619    * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
   28620      _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0'
   28621 
   28622    * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
   28623      _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0'
   28624 
   28625    * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
   28626      _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0'
   28627 
   28628    * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
   28629      _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0'
   28630 
   28631    * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
   28632      _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0'
   28633 
   28634    * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
   28635      _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0'
   28636 
   28637    * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
   28638      _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0'
   28639 
   28640    * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
   28641      _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0'
   28642 
   28643 6.54.3.17 Absolute difference and accumulate
   28644 ............................................
   28645 
   28646    * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   28647      _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0'
   28648 
   28649    * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   28650      _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0'
   28651 
   28652    * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   28653      _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0'
   28654 
   28655    * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
   28656      _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0'
   28657 
   28658    * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
   28659      _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0'
   28660 
   28661    * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
   28662      _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0'
   28663 
   28664    * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   28665      _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0'
   28666 
   28667    * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   28668      _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0'
   28669 
   28670    * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   28671      _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0'
   28672 
   28673    * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
   28674      _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0'
   28675 
   28676    * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
   28677      _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0'
   28678 
   28679    * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
   28680      _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0'
   28681 
   28682    * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
   28683      _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0'
   28684 
   28685    * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
   28686      _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0'
   28687 
   28688    * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
   28689      _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0'
   28690 
   28691    * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
   28692      _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0'
   28693 
   28694    * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
   28695      _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0'
   28696 
   28697    * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
   28698      _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0'
   28699 
   28700 6.54.3.18 Maximum
   28701 .................
   28702 
   28703    * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
   28704      _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0'
   28705 
   28706    * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
   28707      _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0'
   28708 
   28709    * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
   28710      _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0'
   28711 
   28712    * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
   28713      _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0'
   28714 
   28715    * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
   28716      _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0'
   28717 
   28718    * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
   28719      _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0'
   28720 
   28721    * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
   28722      _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0'
   28723 
   28724    * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
   28725      _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0'
   28726 
   28727    * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
   28728      _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0'
   28729 
   28730    * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
   28731      _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0'
   28732 
   28733    * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
   28734      _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0'
   28735 
   28736    * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
   28737      _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0'
   28738 
   28739    * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
   28740      _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0'
   28741 
   28742    * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
   28743      _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0'
   28744 
   28745 6.54.3.19 Minimum
   28746 .................
   28747 
   28748    * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
   28749      _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0'
   28750 
   28751    * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
   28752      _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0'
   28753 
   28754    * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
   28755      _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0'
   28756 
   28757    * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
   28758      _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0'
   28759 
   28760    * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
   28761      _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0'
   28762 
   28763    * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
   28764      _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0'
   28765 
   28766    * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
   28767      _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0'
   28768 
   28769    * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
   28770      _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0'
   28771 
   28772    * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
   28773      _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0'
   28774 
   28775    * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
   28776      _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0'
   28777 
   28778    * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
   28779      _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0'
   28780 
   28781    * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
   28782      _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0'
   28783 
   28784    * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
   28785      _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0'
   28786 
   28787    * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
   28788      _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0'
   28789 
   28790 6.54.3.20 Pairwise add
   28791 ......................
   28792 
   28793    * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
   28794      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
   28795 
   28796    * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
   28797      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
   28798 
   28799    * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
   28800      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
   28801 
   28802    * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
   28803      _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0'
   28804 
   28805    * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
   28806      _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0'
   28807 
   28808    * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
   28809      _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0'
   28810 
   28811    * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
   28812      _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0'
   28813 
   28814    * uint64x1_t vpaddl_u32 (uint32x2_t)
   28815      _Form of expected instruction(s):_ `vpaddl.u32 D0, D0'
   28816 
   28817    * uint32x2_t vpaddl_u16 (uint16x4_t)
   28818      _Form of expected instruction(s):_ `vpaddl.u16 D0, D0'
   28819 
   28820    * uint16x4_t vpaddl_u8 (uint8x8_t)
   28821      _Form of expected instruction(s):_ `vpaddl.u8 D0, D0'
   28822 
   28823    * int64x1_t vpaddl_s32 (int32x2_t)
   28824      _Form of expected instruction(s):_ `vpaddl.s32 D0, D0'
   28825 
   28826    * int32x2_t vpaddl_s16 (int16x4_t)
   28827      _Form of expected instruction(s):_ `vpaddl.s16 D0, D0'
   28828 
   28829    * int16x4_t vpaddl_s8 (int8x8_t)
   28830      _Form of expected instruction(s):_ `vpaddl.s8 D0, D0'
   28831 
   28832    * uint64x2_t vpaddlq_u32 (uint32x4_t)
   28833      _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0'
   28834 
   28835    * uint32x4_t vpaddlq_u16 (uint16x8_t)
   28836      _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0'
   28837 
   28838    * uint16x8_t vpaddlq_u8 (uint8x16_t)
   28839      _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0'
   28840 
   28841    * int64x2_t vpaddlq_s32 (int32x4_t)
   28842      _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0'
   28843 
   28844    * int32x4_t vpaddlq_s16 (int16x8_t)
   28845      _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0'
   28846 
   28847    * int16x8_t vpaddlq_s8 (int8x16_t)
   28848      _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0'
   28849 
   28850 6.54.3.21 Pairwise add, single_opcode widen and accumulate
   28851 ..........................................................
   28852 
   28853    * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
   28854      _Form of expected instruction(s):_ `vpadal.u32 D0, D0'
   28855 
   28856    * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
   28857      _Form of expected instruction(s):_ `vpadal.u16 D0, D0'
   28858 
   28859    * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
   28860      _Form of expected instruction(s):_ `vpadal.u8 D0, D0'
   28861 
   28862    * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
   28863      _Form of expected instruction(s):_ `vpadal.s32 D0, D0'
   28864 
   28865    * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
   28866      _Form of expected instruction(s):_ `vpadal.s16 D0, D0'
   28867 
   28868    * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
   28869      _Form of expected instruction(s):_ `vpadal.s8 D0, D0'
   28870 
   28871    * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
   28872      _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0'
   28873 
   28874    * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
   28875      _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0'
   28876 
   28877    * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
   28878      _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0'
   28879 
   28880    * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
   28881      _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0'
   28882 
   28883    * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
   28884      _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0'
   28885 
   28886    * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
   28887      _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0'
   28888 
   28889 6.54.3.22 Folding maximum
   28890 .........................
   28891 
   28892    * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
   28893      _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0'
   28894 
   28895    * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
   28896      _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0'
   28897 
   28898    * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
   28899      _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0'
   28900 
   28901    * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
   28902      _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0'
   28903 
   28904    * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
   28905      _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0'
   28906 
   28907    * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
   28908      _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0'
   28909 
   28910    * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
   28911      _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0'
   28912 
   28913 6.54.3.23 Folding minimum
   28914 .........................
   28915 
   28916    * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
   28917      _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0'
   28918 
   28919    * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
   28920      _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0'
   28921 
   28922    * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
   28923      _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0'
   28924 
   28925    * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
   28926      _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0'
   28927 
   28928    * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
   28929      _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0'
   28930 
   28931    * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
   28932      _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0'
   28933 
   28934    * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
   28935      _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0'
   28936 
   28937 6.54.3.24 Reciprocal step
   28938 .........................
   28939 
   28940    * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
   28941      _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0'
   28942 
   28943    * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
   28944      _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0'
   28945 
   28946    * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
   28947      _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0'
   28948 
   28949    * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
   28950      _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0'
   28951 
   28952 6.54.3.25 Vector shift left
   28953 ...........................
   28954 
   28955    * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
   28956      _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0'
   28957 
   28958    * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
   28959      _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0'
   28960 
   28961    * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
   28962      _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0'
   28963 
   28964    * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
   28965      _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0'
   28966 
   28967    * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
   28968      _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0'
   28969 
   28970    * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
   28971      _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0'
   28972 
   28973    * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
   28974      _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0'
   28975 
   28976    * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
   28977      _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0'
   28978 
   28979    * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
   28980      _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0'
   28981 
   28982    * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
   28983      _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0'
   28984 
   28985    * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
   28986      _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0'
   28987 
   28988    * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
   28989      _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0'
   28990 
   28991    * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
   28992      _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0'
   28993 
   28994    * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
   28995      _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0'
   28996 
   28997    * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
   28998      _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0'
   28999 
   29000    * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
   29001      _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0'
   29002 
   29003    * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
   29004      _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0'
   29005 
   29006    * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
   29007      _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0'
   29008 
   29009    * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
   29010      _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0'
   29011 
   29012    * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
   29013      _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0'
   29014 
   29015    * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
   29016      _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0'
   29017 
   29018    * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
   29019      _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0'
   29020 
   29021    * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
   29022      _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0'
   29023 
   29024    * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
   29025      _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0'
   29026 
   29027    * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
   29028      _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0'
   29029 
   29030    * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
   29031      _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0'
   29032 
   29033    * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
   29034      _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0'
   29035 
   29036    * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
   29037      _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0'
   29038 
   29039    * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
   29040      _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0'
   29041 
   29042    * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
   29043      _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0'
   29044 
   29045    * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
   29046      _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0'
   29047 
   29048    * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
   29049      _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0'
   29050 
   29051    * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
   29052      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0'
   29053 
   29054    * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
   29055      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0'
   29056 
   29057    * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
   29058      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0'
   29059 
   29060    * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
   29061      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0'
   29062 
   29063    * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
   29064      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0'
   29065 
   29066    * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
   29067      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0'
   29068 
   29069    * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
   29070      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0'
   29071 
   29072    * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
   29073      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0'
   29074 
   29075    * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
   29076      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0'
   29077 
   29078    * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
   29079      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0'
   29080 
   29081    * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
   29082      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0'
   29083 
   29084    * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
   29085      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0'
   29086 
   29087    * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
   29088      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0'
   29089 
   29090    * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
   29091      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0'
   29092 
   29093    * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
   29094      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0'
   29095 
   29096    * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
   29097      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0'
   29098 
   29099    * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
   29100      _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0'
   29101 
   29102    * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
   29103      _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0'
   29104 
   29105    * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
   29106      _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0'
   29107 
   29108    * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
   29109      _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0'
   29110 
   29111    * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
   29112      _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0'
   29113 
   29114    * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
   29115      _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0'
   29116 
   29117    * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
   29118      _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0'
   29119 
   29120    * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
   29121      _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0'
   29122 
   29123    * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
   29124      _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0'
   29125 
   29126    * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
   29127      _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0'
   29128 
   29129    * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
   29130      _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0'
   29131 
   29132    * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
   29133      _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0'
   29134 
   29135    * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
   29136      _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0'
   29137 
   29138    * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
   29139      _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0'
   29140 
   29141    * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
   29142      _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0'
   29143 
   29144    * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
   29145      _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0'
   29146 
   29147 6.54.3.26 Vector shift left by constant
   29148 .......................................
   29149 
   29150    * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
   29151      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
   29152 
   29153    * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
   29154      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
   29155 
   29156    * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
   29157      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
   29158 
   29159    * int32x2_t vshl_n_s32 (int32x2_t, const int)
   29160      _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0'
   29161 
   29162    * int16x4_t vshl_n_s16 (int16x4_t, const int)
   29163      _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0'
   29164 
   29165    * int8x8_t vshl_n_s8 (int8x8_t, const int)
   29166      _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0'
   29167 
   29168    * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
   29169      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
   29170 
   29171    * int64x1_t vshl_n_s64 (int64x1_t, const int)
   29172      _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0'
   29173 
   29174    * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
   29175      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
   29176 
   29177    * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
   29178      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
   29179 
   29180    * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
   29181      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
   29182 
   29183    * int32x4_t vshlq_n_s32 (int32x4_t, const int)
   29184      _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0'
   29185 
   29186    * int16x8_t vshlq_n_s16 (int16x8_t, const int)
   29187      _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0'
   29188 
   29189    * int8x16_t vshlq_n_s8 (int8x16_t, const int)
   29190      _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0'
   29191 
   29192    * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
   29193      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
   29194 
   29195    * int64x2_t vshlq_n_s64 (int64x2_t, const int)
   29196      _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0'
   29197 
   29198    * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
   29199      _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0'
   29200 
   29201    * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
   29202      _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0'
   29203 
   29204    * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
   29205      _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0'
   29206 
   29207    * int32x2_t vqshl_n_s32 (int32x2_t, const int)
   29208      _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0'
   29209 
   29210    * int16x4_t vqshl_n_s16 (int16x4_t, const int)
   29211      _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0'
   29212 
   29213    * int8x8_t vqshl_n_s8 (int8x8_t, const int)
   29214      _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0'
   29215 
   29216    * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
   29217      _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0'
   29218 
   29219    * int64x1_t vqshl_n_s64 (int64x1_t, const int)
   29220      _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0'
   29221 
   29222    * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
   29223      _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0'
   29224 
   29225    * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
   29226      _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0'
   29227 
   29228    * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
   29229      _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0'
   29230 
   29231    * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
   29232      _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0'
   29233 
   29234    * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
   29235      _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0'
   29236 
   29237    * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
   29238      _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0'
   29239 
   29240    * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
   29241      _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0'
   29242 
   29243    * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
   29244      _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0'
   29245 
   29246    * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
   29247      _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0'
   29248 
   29249    * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
   29250      _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0'
   29251 
   29252    * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
   29253      _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0'
   29254 
   29255    * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
   29256      _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0'
   29257 
   29258    * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
   29259      _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0'
   29260 
   29261    * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
   29262      _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0'
   29263 
   29264    * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
   29265      _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0'
   29266 
   29267    * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
   29268      _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0'
   29269 
   29270    * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
   29271      _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0'
   29272 
   29273    * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
   29274      _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0'
   29275 
   29276    * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
   29277      _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0'
   29278 
   29279    * int64x2_t vshll_n_s32 (int32x2_t, const int)
   29280      _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0'
   29281 
   29282    * int32x4_t vshll_n_s16 (int16x4_t, const int)
   29283      _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0'
   29284 
   29285    * int16x8_t vshll_n_s8 (int8x8_t, const int)
   29286      _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0'
   29287 
   29288 6.54.3.27 Vector shift right by constant
   29289 ........................................
   29290 
   29291    * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
   29292      _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0'
   29293 
   29294    * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
   29295      _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0'
   29296 
   29297    * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
   29298      _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0'
   29299 
   29300    * int32x2_t vshr_n_s32 (int32x2_t, const int)
   29301      _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0'
   29302 
   29303    * int16x4_t vshr_n_s16 (int16x4_t, const int)
   29304      _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0'
   29305 
   29306    * int8x8_t vshr_n_s8 (int8x8_t, const int)
   29307      _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0'
   29308 
   29309    * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
   29310      _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0'
   29311 
   29312    * int64x1_t vshr_n_s64 (int64x1_t, const int)
   29313      _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0'
   29314 
   29315    * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
   29316      _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0'
   29317 
   29318    * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
   29319      _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0'
   29320 
   29321    * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
   29322      _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0'
   29323 
   29324    * int32x4_t vshrq_n_s32 (int32x4_t, const int)
   29325      _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0'
   29326 
   29327    * int16x8_t vshrq_n_s16 (int16x8_t, const int)
   29328      _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0'
   29329 
   29330    * int8x16_t vshrq_n_s8 (int8x16_t, const int)
   29331      _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0'
   29332 
   29333    * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
   29334      _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0'
   29335 
   29336    * int64x2_t vshrq_n_s64 (int64x2_t, const int)
   29337      _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0'
   29338 
   29339    * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
   29340      _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0'
   29341 
   29342    * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
   29343      _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0'
   29344 
   29345    * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
   29346      _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0'
   29347 
   29348    * int32x2_t vrshr_n_s32 (int32x2_t, const int)
   29349      _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0'
   29350 
   29351    * int16x4_t vrshr_n_s16 (int16x4_t, const int)
   29352      _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0'
   29353 
   29354    * int8x8_t vrshr_n_s8 (int8x8_t, const int)
   29355      _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0'
   29356 
   29357    * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
   29358      _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0'
   29359 
   29360    * int64x1_t vrshr_n_s64 (int64x1_t, const int)
   29361      _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0'
   29362 
   29363    * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
   29364      _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0'
   29365 
   29366    * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
   29367      _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0'
   29368 
   29369    * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
   29370      _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0'
   29371 
   29372    * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
   29373      _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0'
   29374 
   29375    * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
   29376      _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0'
   29377 
   29378    * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
   29379      _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0'
   29380 
   29381    * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
   29382      _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0'
   29383 
   29384    * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
   29385      _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0'
   29386 
   29387    * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
   29388      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
   29389 
   29390    * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
   29391      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
   29392 
   29393    * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
   29394      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
   29395 
   29396    * int32x2_t vshrn_n_s64 (int64x2_t, const int)
   29397      _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0'
   29398 
   29399    * int16x4_t vshrn_n_s32 (int32x4_t, const int)
   29400      _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0'
   29401 
   29402    * int8x8_t vshrn_n_s16 (int16x8_t, const int)
   29403      _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0'
   29404 
   29405    * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
   29406      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
   29407 
   29408    * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
   29409      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
   29410 
   29411    * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
   29412      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
   29413 
   29414    * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
   29415      _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0'
   29416 
   29417    * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
   29418      _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0'
   29419 
   29420    * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
   29421      _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0'
   29422 
   29423    * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
   29424      _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0'
   29425 
   29426    * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
   29427      _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0'
   29428 
   29429    * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
   29430      _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0'
   29431 
   29432    * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
   29433      _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0'
   29434 
   29435    * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
   29436      _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0'
   29437 
   29438    * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
   29439      _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0'
   29440 
   29441    * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
   29442      _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0'
   29443 
   29444    * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
   29445      _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0'
   29446 
   29447    * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
   29448      _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0'
   29449 
   29450    * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
   29451      _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0'
   29452 
   29453    * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
   29454      _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0'
   29455 
   29456    * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
   29457      _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0'
   29458 
   29459    * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
   29460      _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0'
   29461 
   29462    * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
   29463      _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0'
   29464 
   29465    * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
   29466      _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0'
   29467 
   29468    * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
   29469      _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0'
   29470 
   29471    * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
   29472      _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0'
   29473 
   29474    * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
   29475      _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0'
   29476 
   29477 6.54.3.28 Vector shift right by constant and accumulate
   29478 .......................................................
   29479 
   29480    * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   29481      _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0'
   29482 
   29483    * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   29484      _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0'
   29485 
   29486    * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   29487      _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0'
   29488 
   29489    * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
   29490      _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0'
   29491 
   29492    * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
   29493      _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0'
   29494 
   29495    * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
   29496      _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0'
   29497 
   29498    * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   29499      _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0'
   29500 
   29501    * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
   29502      _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0'
   29503 
   29504    * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   29505      _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0'
   29506 
   29507    * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   29508      _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0'
   29509 
   29510    * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   29511      _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0'
   29512 
   29513    * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
   29514      _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0'
   29515 
   29516    * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
   29517      _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0'
   29518 
   29519    * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
   29520      _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0'
   29521 
   29522    * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   29523      _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0'
   29524 
   29525    * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
   29526      _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0'
   29527 
   29528    * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
   29529      _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0'
   29530 
   29531    * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
   29532      _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0'
   29533 
   29534    * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
   29535      _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0'
   29536 
   29537    * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
   29538      _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0'
   29539 
   29540    * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
   29541      _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0'
   29542 
   29543    * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
   29544      _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0'
   29545 
   29546    * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
   29547      _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0'
   29548 
   29549    * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
   29550      _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0'
   29551 
   29552    * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
   29553      _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0'
   29554 
   29555    * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
   29556      _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0'
   29557 
   29558    * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
   29559      _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0'
   29560 
   29561    * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
   29562      _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0'
   29563 
   29564    * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
   29565      _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0'
   29566 
   29567    * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
   29568      _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0'
   29569 
   29570    * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
   29571      _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0'
   29572 
   29573    * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
   29574      _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0'
   29575 
   29576 6.54.3.29 Vector shift right and insert
   29577 .......................................
   29578 
   29579    * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
   29580      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
   29581 
   29582    * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
   29583      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   29584 
   29585    * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
   29586      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   29587 
   29588    * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
   29589      _Form of expected instruction(s):_ `vsri.32 D0, D0, #0'
   29590 
   29591    * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
   29592      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   29593 
   29594    * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
   29595      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   29596 
   29597    * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
   29598      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
   29599 
   29600    * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
   29601      _Form of expected instruction(s):_ `vsri.64 D0, D0, #0'
   29602 
   29603    * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
   29604      _Form of expected instruction(s):_ `vsri.16 D0, D0, #0'
   29605 
   29606    * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
   29607      _Form of expected instruction(s):_ `vsri.8 D0, D0, #0'
   29608 
   29609    * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
   29610      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
   29611 
   29612    * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
   29613      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   29614 
   29615    * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
   29616      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   29617 
   29618    * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
   29619      _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0'
   29620 
   29621    * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
   29622      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   29623 
   29624    * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
   29625      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   29626 
   29627    * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
   29628      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
   29629 
   29630    * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
   29631      _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0'
   29632 
   29633    * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
   29634      _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0'
   29635 
   29636    * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
   29637      _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0'
   29638 
   29639 6.54.3.30 Vector shift left and insert
   29640 ......................................
   29641 
   29642    * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
   29643      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
   29644 
   29645    * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
   29646      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   29647 
   29648    * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
   29649      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   29650 
   29651    * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
   29652      _Form of expected instruction(s):_ `vsli.32 D0, D0, #0'
   29653 
   29654    * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
   29655      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   29656 
   29657    * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
   29658      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   29659 
   29660    * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
   29661      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
   29662 
   29663    * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
   29664      _Form of expected instruction(s):_ `vsli.64 D0, D0, #0'
   29665 
   29666    * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
   29667      _Form of expected instruction(s):_ `vsli.16 D0, D0, #0'
   29668 
   29669    * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
   29670      _Form of expected instruction(s):_ `vsli.8 D0, D0, #0'
   29671 
   29672    * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
   29673      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
   29674 
   29675    * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
   29676      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   29677 
   29678    * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
   29679      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   29680 
   29681    * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
   29682      _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0'
   29683 
   29684    * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
   29685      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   29686 
   29687    * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
   29688      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   29689 
   29690    * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
   29691      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
   29692 
   29693    * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
   29694      _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0'
   29695 
   29696    * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
   29697      _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0'
   29698 
   29699    * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
   29700      _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0'
   29701 
   29702 6.54.3.31 Absolute value
   29703 ........................
   29704 
   29705    * float32x2_t vabs_f32 (float32x2_t)
   29706      _Form of expected instruction(s):_ `vabs.f32 D0, D0'
   29707 
   29708    * int32x2_t vabs_s32 (int32x2_t)
   29709      _Form of expected instruction(s):_ `vabs.s32 D0, D0'
   29710 
   29711    * int16x4_t vabs_s16 (int16x4_t)
   29712      _Form of expected instruction(s):_ `vabs.s16 D0, D0'
   29713 
   29714    * int8x8_t vabs_s8 (int8x8_t)
   29715      _Form of expected instruction(s):_ `vabs.s8 D0, D0'
   29716 
   29717    * float32x4_t vabsq_f32 (float32x4_t)
   29718      _Form of expected instruction(s):_ `vabs.f32 Q0, Q0'
   29719 
   29720    * int32x4_t vabsq_s32 (int32x4_t)
   29721      _Form of expected instruction(s):_ `vabs.s32 Q0, Q0'
   29722 
   29723    * int16x8_t vabsq_s16 (int16x8_t)
   29724      _Form of expected instruction(s):_ `vabs.s16 Q0, Q0'
   29725 
   29726    * int8x16_t vabsq_s8 (int8x16_t)
   29727      _Form of expected instruction(s):_ `vabs.s8 Q0, Q0'
   29728 
   29729    * int32x2_t vqabs_s32 (int32x2_t)
   29730      _Form of expected instruction(s):_ `vqabs.s32 D0, D0'
   29731 
   29732    * int16x4_t vqabs_s16 (int16x4_t)
   29733      _Form of expected instruction(s):_ `vqabs.s16 D0, D0'
   29734 
   29735    * int8x8_t vqabs_s8 (int8x8_t)
   29736      _Form of expected instruction(s):_ `vqabs.s8 D0, D0'
   29737 
   29738    * int32x4_t vqabsq_s32 (int32x4_t)
   29739      _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0'
   29740 
   29741    * int16x8_t vqabsq_s16 (int16x8_t)
   29742      _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0'
   29743 
   29744    * int8x16_t vqabsq_s8 (int8x16_t)
   29745      _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0'
   29746 
   29747 6.54.3.32 Negation
   29748 ..................
   29749 
   29750    * float32x2_t vneg_f32 (float32x2_t)
   29751      _Form of expected instruction(s):_ `vneg.f32 D0, D0'
   29752 
   29753    * int32x2_t vneg_s32 (int32x2_t)
   29754      _Form of expected instruction(s):_ `vneg.s32 D0, D0'
   29755 
   29756    * int16x4_t vneg_s16 (int16x4_t)
   29757      _Form of expected instruction(s):_ `vneg.s16 D0, D0'
   29758 
   29759    * int8x8_t vneg_s8 (int8x8_t)
   29760      _Form of expected instruction(s):_ `vneg.s8 D0, D0'
   29761 
   29762    * float32x4_t vnegq_f32 (float32x4_t)
   29763      _Form of expected instruction(s):_ `vneg.f32 Q0, Q0'
   29764 
   29765    * int32x4_t vnegq_s32 (int32x4_t)
   29766      _Form of expected instruction(s):_ `vneg.s32 Q0, Q0'
   29767 
   29768    * int16x8_t vnegq_s16 (int16x8_t)
   29769      _Form of expected instruction(s):_ `vneg.s16 Q0, Q0'
   29770 
   29771    * int8x16_t vnegq_s8 (int8x16_t)
   29772      _Form of expected instruction(s):_ `vneg.s8 Q0, Q0'
   29773 
   29774    * int32x2_t vqneg_s32 (int32x2_t)
   29775      _Form of expected instruction(s):_ `vqneg.s32 D0, D0'
   29776 
   29777    * int16x4_t vqneg_s16 (int16x4_t)
   29778      _Form of expected instruction(s):_ `vqneg.s16 D0, D0'
   29779 
   29780    * int8x8_t vqneg_s8 (int8x8_t)
   29781      _Form of expected instruction(s):_ `vqneg.s8 D0, D0'
   29782 
   29783    * int32x4_t vqnegq_s32 (int32x4_t)
   29784      _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0'
   29785 
   29786    * int16x8_t vqnegq_s16 (int16x8_t)
   29787      _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0'
   29788 
   29789    * int8x16_t vqnegq_s8 (int8x16_t)
   29790      _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0'
   29791 
   29792 6.54.3.33 Bitwise not
   29793 .....................
   29794 
   29795    * uint32x2_t vmvn_u32 (uint32x2_t)
   29796      _Form of expected instruction(s):_ `vmvn D0, D0'
   29797 
   29798    * uint16x4_t vmvn_u16 (uint16x4_t)
   29799      _Form of expected instruction(s):_ `vmvn D0, D0'
   29800 
   29801    * uint8x8_t vmvn_u8 (uint8x8_t)
   29802      _Form of expected instruction(s):_ `vmvn D0, D0'
   29803 
   29804    * int32x2_t vmvn_s32 (int32x2_t)
   29805      _Form of expected instruction(s):_ `vmvn D0, D0'
   29806 
   29807    * int16x4_t vmvn_s16 (int16x4_t)
   29808      _Form of expected instruction(s):_ `vmvn D0, D0'
   29809 
   29810    * int8x8_t vmvn_s8 (int8x8_t)
   29811      _Form of expected instruction(s):_ `vmvn D0, D0'
   29812 
   29813    * poly8x8_t vmvn_p8 (poly8x8_t)
   29814      _Form of expected instruction(s):_ `vmvn D0, D0'
   29815 
   29816    * uint32x4_t vmvnq_u32 (uint32x4_t)
   29817      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29818 
   29819    * uint16x8_t vmvnq_u16 (uint16x8_t)
   29820      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29821 
   29822    * uint8x16_t vmvnq_u8 (uint8x16_t)
   29823      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29824 
   29825    * int32x4_t vmvnq_s32 (int32x4_t)
   29826      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29827 
   29828    * int16x8_t vmvnq_s16 (int16x8_t)
   29829      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29830 
   29831    * int8x16_t vmvnq_s8 (int8x16_t)
   29832      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29833 
   29834    * poly8x16_t vmvnq_p8 (poly8x16_t)
   29835      _Form of expected instruction(s):_ `vmvn Q0, Q0'
   29836 
   29837 6.54.3.34 Count leading sign bits
   29838 .................................
   29839 
   29840    * int32x2_t vcls_s32 (int32x2_t)
   29841      _Form of expected instruction(s):_ `vcls.s32 D0, D0'
   29842 
   29843    * int16x4_t vcls_s16 (int16x4_t)
   29844      _Form of expected instruction(s):_ `vcls.s16 D0, D0'
   29845 
   29846    * int8x8_t vcls_s8 (int8x8_t)
   29847      _Form of expected instruction(s):_ `vcls.s8 D0, D0'
   29848 
   29849    * int32x4_t vclsq_s32 (int32x4_t)
   29850      _Form of expected instruction(s):_ `vcls.s32 Q0, Q0'
   29851 
   29852    * int16x8_t vclsq_s16 (int16x8_t)
   29853      _Form of expected instruction(s):_ `vcls.s16 Q0, Q0'
   29854 
   29855    * int8x16_t vclsq_s8 (int8x16_t)
   29856      _Form of expected instruction(s):_ `vcls.s8 Q0, Q0'
   29857 
   29858 6.54.3.35 Count leading zeros
   29859 .............................
   29860 
   29861    * uint32x2_t vclz_u32 (uint32x2_t)
   29862      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
   29863 
   29864    * uint16x4_t vclz_u16 (uint16x4_t)
   29865      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
   29866 
   29867    * uint8x8_t vclz_u8 (uint8x8_t)
   29868      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
   29869 
   29870    * int32x2_t vclz_s32 (int32x2_t)
   29871      _Form of expected instruction(s):_ `vclz.i32 D0, D0'
   29872 
   29873    * int16x4_t vclz_s16 (int16x4_t)
   29874      _Form of expected instruction(s):_ `vclz.i16 D0, D0'
   29875 
   29876    * int8x8_t vclz_s8 (int8x8_t)
   29877      _Form of expected instruction(s):_ `vclz.i8 D0, D0'
   29878 
   29879    * uint32x4_t vclzq_u32 (uint32x4_t)
   29880      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
   29881 
   29882    * uint16x8_t vclzq_u16 (uint16x8_t)
   29883      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
   29884 
   29885    * uint8x16_t vclzq_u8 (uint8x16_t)
   29886      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
   29887 
   29888    * int32x4_t vclzq_s32 (int32x4_t)
   29889      _Form of expected instruction(s):_ `vclz.i32 Q0, Q0'
   29890 
   29891    * int16x8_t vclzq_s16 (int16x8_t)
   29892      _Form of expected instruction(s):_ `vclz.i16 Q0, Q0'
   29893 
   29894    * int8x16_t vclzq_s8 (int8x16_t)
   29895      _Form of expected instruction(s):_ `vclz.i8 Q0, Q0'
   29896 
   29897 6.54.3.36 Count number of set bits
   29898 ..................................
   29899 
   29900    * uint8x8_t vcnt_u8 (uint8x8_t)
   29901      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   29902 
   29903    * int8x8_t vcnt_s8 (int8x8_t)
   29904      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   29905 
   29906    * poly8x8_t vcnt_p8 (poly8x8_t)
   29907      _Form of expected instruction(s):_ `vcnt.8 D0, D0'
   29908 
   29909    * uint8x16_t vcntq_u8 (uint8x16_t)
   29910      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   29911 
   29912    * int8x16_t vcntq_s8 (int8x16_t)
   29913      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   29914 
   29915    * poly8x16_t vcntq_p8 (poly8x16_t)
   29916      _Form of expected instruction(s):_ `vcnt.8 Q0, Q0'
   29917 
   29918 6.54.3.37 Reciprocal estimate
   29919 .............................
   29920 
   29921    * float32x2_t vrecpe_f32 (float32x2_t)
   29922      _Form of expected instruction(s):_ `vrecpe.f32 D0, D0'
   29923 
   29924    * uint32x2_t vrecpe_u32 (uint32x2_t)
   29925      _Form of expected instruction(s):_ `vrecpe.u32 D0, D0'
   29926 
   29927    * float32x4_t vrecpeq_f32 (float32x4_t)
   29928      _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0'
   29929 
   29930    * uint32x4_t vrecpeq_u32 (uint32x4_t)
   29931      _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0'
   29932 
   29933 6.54.3.38 Reciprocal square-root estimate
   29934 .........................................
   29935 
   29936    * float32x2_t vrsqrte_f32 (float32x2_t)
   29937      _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0'
   29938 
   29939    * uint32x2_t vrsqrte_u32 (uint32x2_t)
   29940      _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0'
   29941 
   29942    * float32x4_t vrsqrteq_f32 (float32x4_t)
   29943      _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0'
   29944 
   29945    * uint32x4_t vrsqrteq_u32 (uint32x4_t)
   29946      _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0'
   29947 
   29948 6.54.3.39 Get lanes from a vector
   29949 .................................
   29950 
   29951    * uint32_t vget_lane_u32 (uint32x2_t, const int)
   29952      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   29953 
   29954    * uint16_t vget_lane_u16 (uint16x4_t, const int)
   29955      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   29956 
   29957    * uint8_t vget_lane_u8 (uint8x8_t, const int)
   29958      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   29959 
   29960    * int32_t vget_lane_s32 (int32x2_t, const int)
   29961      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   29962 
   29963    * int16_t vget_lane_s16 (int16x4_t, const int)
   29964      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
   29965 
   29966    * int8_t vget_lane_s8 (int8x8_t, const int)
   29967      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
   29968 
   29969    * float32_t vget_lane_f32 (float32x2_t, const int)
   29970      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   29971 
   29972    * poly16_t vget_lane_p16 (poly16x4_t, const int)
   29973      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   29974 
   29975    * poly8_t vget_lane_p8 (poly8x8_t, const int)
   29976      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   29977 
   29978    * uint64_t vget_lane_u64 (uint64x1_t, const int)
   29979 
   29980    * int64_t vget_lane_s64 (int64x1_t, const int)
   29981 
   29982    * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
   29983      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   29984 
   29985    * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
   29986      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   29987 
   29988    * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
   29989      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   29990 
   29991    * int32_t vgetq_lane_s32 (int32x4_t, const int)
   29992      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   29993 
   29994    * int16_t vgetq_lane_s16 (int16x8_t, const int)
   29995      _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]'
   29996 
   29997    * int8_t vgetq_lane_s8 (int8x16_t, const int)
   29998      _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]'
   29999 
   30000    * float32_t vgetq_lane_f32 (float32x4_t, const int)
   30001      _Form of expected instruction(s):_ `vmov.32 R0, D0[0]'
   30002 
   30003    * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
   30004      _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]'
   30005 
   30006    * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
   30007      _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]'
   30008 
   30009    * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
   30010      _Form of expected instruction(s):_ `vmov R0, R0, D0'
   30011 
   30012    * int64_t vgetq_lane_s64 (int64x2_t, const int)
   30013      _Form of expected instruction(s):_ `vmov R0, R0, D0'
   30014 
   30015 6.54.3.40 Set lanes in a vector
   30016 ...............................
   30017 
   30018    * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
   30019      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   30020 
   30021    * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
   30022      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   30023 
   30024    * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
   30025      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   30026 
   30027    * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
   30028      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   30029 
   30030    * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
   30031      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   30032 
   30033    * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
   30034      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   30035 
   30036    * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
   30037      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   30038 
   30039    * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
   30040      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   30041 
   30042    * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
   30043      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   30044 
   30045    * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)
   30046 
   30047    * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)
   30048 
   30049    * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
   30050      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   30051 
   30052    * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
   30053      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   30054 
   30055    * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
   30056      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   30057 
   30058    * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
   30059      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   30060 
   30061    * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
   30062      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   30063 
   30064    * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
   30065      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   30066 
   30067    * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
   30068      _Form of expected instruction(s):_ `vmov.32 D0[0], R0'
   30069 
   30070    * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
   30071      _Form of expected instruction(s):_ `vmov.16 D0[0], R0'
   30072 
   30073    * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
   30074      _Form of expected instruction(s):_ `vmov.8 D0[0], R0'
   30075 
   30076    * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
   30077      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   30078 
   30079    * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
   30080      _Form of expected instruction(s):_ `vmov D0, R0, R0'
   30081 
   30082 6.54.3.41 Create vector from literal bit pattern
   30083 ................................................
   30084 
   30085    * uint32x2_t vcreate_u32 (uint64_t)
   30086 
   30087    * uint16x4_t vcreate_u16 (uint64_t)
   30088 
   30089    * uint8x8_t vcreate_u8 (uint64_t)
   30090 
   30091    * int32x2_t vcreate_s32 (uint64_t)
   30092 
   30093    * int16x4_t vcreate_s16 (uint64_t)
   30094 
   30095    * int8x8_t vcreate_s8 (uint64_t)
   30096 
   30097    * uint64x1_t vcreate_u64 (uint64_t)
   30098 
   30099    * int64x1_t vcreate_s64 (uint64_t)
   30100 
   30101    * float32x2_t vcreate_f32 (uint64_t)
   30102 
   30103    * poly16x4_t vcreate_p16 (uint64_t)
   30104 
   30105    * poly8x8_t vcreate_p8 (uint64_t)
   30106 
   30107 6.54.3.42 Set all lanes to the same value
   30108 .........................................
   30109 
   30110    * uint32x2_t vdup_n_u32 (uint32_t)
   30111      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   30112 
   30113    * uint16x4_t vdup_n_u16 (uint16_t)
   30114      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   30115 
   30116    * uint8x8_t vdup_n_u8 (uint8_t)
   30117      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   30118 
   30119    * int32x2_t vdup_n_s32 (int32_t)
   30120      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   30121 
   30122    * int16x4_t vdup_n_s16 (int16_t)
   30123      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   30124 
   30125    * int8x8_t vdup_n_s8 (int8_t)
   30126      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   30127 
   30128    * float32x2_t vdup_n_f32 (float32_t)
   30129      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   30130 
   30131    * poly16x4_t vdup_n_p16 (poly16_t)
   30132      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   30133 
   30134    * poly8x8_t vdup_n_p8 (poly8_t)
   30135      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   30136 
   30137    * uint64x1_t vdup_n_u64 (uint64_t)
   30138 
   30139    * int64x1_t vdup_n_s64 (int64_t)
   30140 
   30141    * uint32x4_t vdupq_n_u32 (uint32_t)
   30142      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   30143 
   30144    * uint16x8_t vdupq_n_u16 (uint16_t)
   30145      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   30146 
   30147    * uint8x16_t vdupq_n_u8 (uint8_t)
   30148      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   30149 
   30150    * int32x4_t vdupq_n_s32 (int32_t)
   30151      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   30152 
   30153    * int16x8_t vdupq_n_s16 (int16_t)
   30154      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   30155 
   30156    * int8x16_t vdupq_n_s8 (int8_t)
   30157      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   30158 
   30159    * float32x4_t vdupq_n_f32 (float32_t)
   30160      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   30161 
   30162    * poly16x8_t vdupq_n_p16 (poly16_t)
   30163      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   30164 
   30165    * poly8x16_t vdupq_n_p8 (poly8_t)
   30166      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   30167 
   30168    * uint64x2_t vdupq_n_u64 (uint64_t)
   30169 
   30170    * int64x2_t vdupq_n_s64 (int64_t)
   30171 
   30172    * uint32x2_t vmov_n_u32 (uint32_t)
   30173      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   30174 
   30175    * uint16x4_t vmov_n_u16 (uint16_t)
   30176      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   30177 
   30178    * uint8x8_t vmov_n_u8 (uint8_t)
   30179      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   30180 
   30181    * int32x2_t vmov_n_s32 (int32_t)
   30182      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   30183 
   30184    * int16x4_t vmov_n_s16 (int16_t)
   30185      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   30186 
   30187    * int8x8_t vmov_n_s8 (int8_t)
   30188      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   30189 
   30190    * float32x2_t vmov_n_f32 (float32_t)
   30191      _Form of expected instruction(s):_ `vdup.32 D0, R0'
   30192 
   30193    * poly16x4_t vmov_n_p16 (poly16_t)
   30194      _Form of expected instruction(s):_ `vdup.16 D0, R0'
   30195 
   30196    * poly8x8_t vmov_n_p8 (poly8_t)
   30197      _Form of expected instruction(s):_ `vdup.8 D0, R0'
   30198 
   30199    * uint64x1_t vmov_n_u64 (uint64_t)
   30200 
   30201    * int64x1_t vmov_n_s64 (int64_t)
   30202 
   30203    * uint32x4_t vmovq_n_u32 (uint32_t)
   30204      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   30205 
   30206    * uint16x8_t vmovq_n_u16 (uint16_t)
   30207      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   30208 
   30209    * uint8x16_t vmovq_n_u8 (uint8_t)
   30210      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   30211 
   30212    * int32x4_t vmovq_n_s32 (int32_t)
   30213      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   30214 
   30215    * int16x8_t vmovq_n_s16 (int16_t)
   30216      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   30217 
   30218    * int8x16_t vmovq_n_s8 (int8_t)
   30219      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   30220 
   30221    * float32x4_t vmovq_n_f32 (float32_t)
   30222      _Form of expected instruction(s):_ `vdup.32 Q0, R0'
   30223 
   30224    * poly16x8_t vmovq_n_p16 (poly16_t)
   30225      _Form of expected instruction(s):_ `vdup.16 Q0, R0'
   30226 
   30227    * poly8x16_t vmovq_n_p8 (poly8_t)
   30228      _Form of expected instruction(s):_ `vdup.8 Q0, R0'
   30229 
   30230    * uint64x2_t vmovq_n_u64 (uint64_t)
   30231 
   30232    * int64x2_t vmovq_n_s64 (int64_t)
   30233 
   30234    * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
   30235      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   30236 
   30237    * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
   30238      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   30239 
   30240    * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
   30241      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   30242 
   30243    * int32x2_t vdup_lane_s32 (int32x2_t, const int)
   30244      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   30245 
   30246    * int16x4_t vdup_lane_s16 (int16x4_t, const int)
   30247      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   30248 
   30249    * int8x8_t vdup_lane_s8 (int8x8_t, const int)
   30250      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   30251 
   30252    * float32x2_t vdup_lane_f32 (float32x2_t, const int)
   30253      _Form of expected instruction(s):_ `vdup.32 D0, D0[0]'
   30254 
   30255    * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
   30256      _Form of expected instruction(s):_ `vdup.16 D0, D0[0]'
   30257 
   30258    * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
   30259      _Form of expected instruction(s):_ `vdup.8 D0, D0[0]'
   30260 
   30261    * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)
   30262 
   30263    * int64x1_t vdup_lane_s64 (int64x1_t, const int)
   30264 
   30265    * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
   30266      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   30267 
   30268    * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
   30269      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   30270 
   30271    * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
   30272      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   30273 
   30274    * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
   30275      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   30276 
   30277    * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
   30278      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   30279 
   30280    * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
   30281      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   30282 
   30283    * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
   30284      _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]'
   30285 
   30286    * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
   30287      _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]'
   30288 
   30289    * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
   30290      _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]'
   30291 
   30292    * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)
   30293 
   30294    * int64x2_t vdupq_lane_s64 (int64x1_t, const int)
   30295 
   30296 6.54.3.43 Combining vectors
   30297 ...........................
   30298 
   30299    * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)
   30300 
   30301    * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)
   30302 
   30303    * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)
   30304 
   30305    * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)
   30306 
   30307    * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)
   30308 
   30309    * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)
   30310 
   30311    * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)
   30312 
   30313    * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)
   30314 
   30315    * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)
   30316 
   30317    * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)
   30318 
   30319    * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)
   30320 
   30321 6.54.3.44 Splitting vectors
   30322 ...........................
   30323 
   30324    * uint32x2_t vget_high_u32 (uint32x4_t)
   30325 
   30326    * uint16x4_t vget_high_u16 (uint16x8_t)
   30327 
   30328    * uint8x8_t vget_high_u8 (uint8x16_t)
   30329 
   30330    * int32x2_t vget_high_s32 (int32x4_t)
   30331 
   30332    * int16x4_t vget_high_s16 (int16x8_t)
   30333 
   30334    * int8x8_t vget_high_s8 (int8x16_t)
   30335 
   30336    * uint64x1_t vget_high_u64 (uint64x2_t)
   30337 
   30338    * int64x1_t vget_high_s64 (int64x2_t)
   30339 
   30340    * float32x2_t vget_high_f32 (float32x4_t)
   30341 
   30342    * poly16x4_t vget_high_p16 (poly16x8_t)
   30343 
   30344    * poly8x8_t vget_high_p8 (poly8x16_t)
   30345 
   30346    * uint32x2_t vget_low_u32 (uint32x4_t)
   30347      _Form of expected instruction(s):_ `vmov D0, D0'
   30348 
   30349    * uint16x4_t vget_low_u16 (uint16x8_t)
   30350      _Form of expected instruction(s):_ `vmov D0, D0'
   30351 
   30352    * uint8x8_t vget_low_u8 (uint8x16_t)
   30353      _Form of expected instruction(s):_ `vmov D0, D0'
   30354 
   30355    * int32x2_t vget_low_s32 (int32x4_t)
   30356      _Form of expected instruction(s):_ `vmov D0, D0'
   30357 
   30358    * int16x4_t vget_low_s16 (int16x8_t)
   30359      _Form of expected instruction(s):_ `vmov D0, D0'
   30360 
   30361    * int8x8_t vget_low_s8 (int8x16_t)
   30362      _Form of expected instruction(s):_ `vmov D0, D0'
   30363 
   30364    * float32x2_t vget_low_f32 (float32x4_t)
   30365      _Form of expected instruction(s):_ `vmov D0, D0'
   30366 
   30367    * poly16x4_t vget_low_p16 (poly16x8_t)
   30368      _Form of expected instruction(s):_ `vmov D0, D0'
   30369 
   30370    * poly8x8_t vget_low_p8 (poly8x16_t)
   30371      _Form of expected instruction(s):_ `vmov D0, D0'
   30372 
   30373    * uint64x1_t vget_low_u64 (uint64x2_t)
   30374 
   30375    * int64x1_t vget_low_s64 (int64x2_t)
   30376 
   30377 6.54.3.45 Conversions
   30378 .....................
   30379 
   30380    * float32x2_t vcvt_f32_u32 (uint32x2_t)
   30381      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0'
   30382 
   30383    * float32x2_t vcvt_f32_s32 (int32x2_t)
   30384      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0'
   30385 
   30386    * uint32x2_t vcvt_u32_f32 (float32x2_t)
   30387      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0'
   30388 
   30389    * int32x2_t vcvt_s32_f32 (float32x2_t)
   30390      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0'
   30391 
   30392    * float32x4_t vcvtq_f32_u32 (uint32x4_t)
   30393      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0'
   30394 
   30395    * float32x4_t vcvtq_f32_s32 (int32x4_t)
   30396      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0'
   30397 
   30398    * uint32x4_t vcvtq_u32_f32 (float32x4_t)
   30399      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0'
   30400 
   30401    * int32x4_t vcvtq_s32_f32 (float32x4_t)
   30402      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0'
   30403 
   30404    * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
   30405      _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0'
   30406 
   30407    * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
   30408      _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0'
   30409 
   30410    * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
   30411      _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0'
   30412 
   30413    * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
   30414      _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0'
   30415 
   30416    * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
   30417      _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0'
   30418 
   30419    * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
   30420      _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0'
   30421 
   30422    * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
   30423      _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0'
   30424 
   30425    * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
   30426      _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0'
   30427 
   30428 6.54.3.46 Move, single_opcode narrowing
   30429 .......................................
   30430 
   30431    * uint32x2_t vmovn_u64 (uint64x2_t)
   30432      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
   30433 
   30434    * uint16x4_t vmovn_u32 (uint32x4_t)
   30435      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
   30436 
   30437    * uint8x8_t vmovn_u16 (uint16x8_t)
   30438      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
   30439 
   30440    * int32x2_t vmovn_s64 (int64x2_t)
   30441      _Form of expected instruction(s):_ `vmovn.i64 D0, Q0'
   30442 
   30443    * int16x4_t vmovn_s32 (int32x4_t)
   30444      _Form of expected instruction(s):_ `vmovn.i32 D0, Q0'
   30445 
   30446    * int8x8_t vmovn_s16 (int16x8_t)
   30447      _Form of expected instruction(s):_ `vmovn.i16 D0, Q0'
   30448 
   30449    * uint32x2_t vqmovn_u64 (uint64x2_t)
   30450      _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0'
   30451 
   30452    * uint16x4_t vqmovn_u32 (uint32x4_t)
   30453      _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0'
   30454 
   30455    * uint8x8_t vqmovn_u16 (uint16x8_t)
   30456      _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0'
   30457 
   30458    * int32x2_t vqmovn_s64 (int64x2_t)
   30459      _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0'
   30460 
   30461    * int16x4_t vqmovn_s32 (int32x4_t)
   30462      _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0'
   30463 
   30464    * int8x8_t vqmovn_s16 (int16x8_t)
   30465      _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0'
   30466 
   30467    * uint32x2_t vqmovun_s64 (int64x2_t)
   30468      _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0'
   30469 
   30470    * uint16x4_t vqmovun_s32 (int32x4_t)
   30471      _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0'
   30472 
   30473    * uint8x8_t vqmovun_s16 (int16x8_t)
   30474      _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0'
   30475 
   30476 6.54.3.47 Move, single_opcode long
   30477 ..................................
   30478 
   30479    * uint64x2_t vmovl_u32 (uint32x2_t)
   30480      _Form of expected instruction(s):_ `vmovl.u32 Q0, D0'
   30481 
   30482    * uint32x4_t vmovl_u16 (uint16x4_t)
   30483      _Form of expected instruction(s):_ `vmovl.u16 Q0, D0'
   30484 
   30485    * uint16x8_t vmovl_u8 (uint8x8_t)
   30486      _Form of expected instruction(s):_ `vmovl.u8 Q0, D0'
   30487 
   30488    * int64x2_t vmovl_s32 (int32x2_t)
   30489      _Form of expected instruction(s):_ `vmovl.s32 Q0, D0'
   30490 
   30491    * int32x4_t vmovl_s16 (int16x4_t)
   30492      _Form of expected instruction(s):_ `vmovl.s16 Q0, D0'
   30493 
   30494    * int16x8_t vmovl_s8 (int8x8_t)
   30495      _Form of expected instruction(s):_ `vmovl.s8 Q0, D0'
   30496 
   30497 6.54.3.48 Table lookup
   30498 ......................
   30499 
   30500    * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
   30501      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   30502 
   30503    * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
   30504      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   30505 
   30506    * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
   30507      _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0'
   30508 
   30509    * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
   30510      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   30511 
   30512    * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
   30513      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   30514 
   30515    * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
   30516      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0'
   30517 
   30518    * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
   30519      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   30520 
   30521    * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
   30522      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   30523 
   30524    * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
   30525      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0'
   30526 
   30527    * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
   30528      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   30529      D0'
   30530 
   30531    * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
   30532      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   30533      D0'
   30534 
   30535    * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
   30536      _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3},
   30537      D0'
   30538 
   30539 6.54.3.49 Extended table lookup
   30540 ...............................
   30541 
   30542    * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
   30543      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   30544 
   30545    * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
   30546      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   30547 
   30548    * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   30549      _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0'
   30550 
   30551    * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
   30552      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   30553 
   30554    * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
   30555      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   30556 
   30557    * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
   30558      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0'
   30559 
   30560    * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
   30561      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   30562 
   30563    * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
   30564      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   30565 
   30566    * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
   30567      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0'
   30568 
   30569    * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
   30570      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   30571      D0'
   30572 
   30573    * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
   30574      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   30575      D0'
   30576 
   30577    * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
   30578      _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3},
   30579      D0'
   30580 
   30581 6.54.3.50 Multiply, lane
   30582 ........................
   30583 
   30584    * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
   30585      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
   30586 
   30587    * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
   30588      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   30589 
   30590    * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
   30591      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   30592 
   30593    * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
   30594      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   30595 
   30596    * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
   30597      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   30598 
   30599    * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
   30600      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
   30601 
   30602    * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
   30603      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   30604 
   30605    * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
   30606      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   30607 
   30608    * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
   30609      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   30610 
   30611    * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
   30612      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   30613 
   30614 6.54.3.51 Long multiply, lane
   30615 .............................
   30616 
   30617    * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
   30618      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
   30619 
   30620    * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
   30621      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
   30622 
   30623    * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
   30624      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
   30625 
   30626    * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
   30627      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
   30628 
   30629 6.54.3.52 Saturating doubling long multiply, lane
   30630 .................................................
   30631 
   30632    * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
   30633      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
   30634 
   30635    * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
   30636      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
   30637 
   30638 6.54.3.53 Saturating doubling multiply high, lane
   30639 .................................................
   30640 
   30641    * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   30642      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
   30643 
   30644    * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   30645      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
   30646 
   30647    * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   30648      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
   30649 
   30650    * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   30651      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
   30652 
   30653    * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
   30654      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
   30655 
   30656    * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
   30657      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
   30658 
   30659    * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
   30660      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
   30661 
   30662    * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
   30663      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
   30664 
   30665 6.54.3.54 Multiply-accumulate, lane
   30666 ...................................
   30667 
   30668    * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   30669      const int)
   30670      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
   30671 
   30672    * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
   30673      const int)
   30674      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   30675 
   30676    * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
   30677      const int)
   30678      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   30679 
   30680    * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   30681      int)
   30682      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   30683 
   30684    * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   30685      int)
   30686      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   30687 
   30688    * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   30689      const int)
   30690      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
   30691 
   30692    * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   30693      const int)
   30694      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   30695 
   30696    * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   30697      const int)
   30698      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   30699 
   30700    * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   30701      int)
   30702      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   30703 
   30704    * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   30705      int)
   30706      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   30707 
   30708    * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   30709      const int)
   30710      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
   30711 
   30712    * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   30713      const int)
   30714      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
   30715 
   30716    * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   30717      int)
   30718      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
   30719 
   30720    * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   30721      int)
   30722      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
   30723 
   30724    * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   30725      int)
   30726      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
   30727 
   30728    * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   30729      int)
   30730      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
   30731 
   30732 6.54.3.55 Multiply-subtract, lane
   30733 .................................
   30734 
   30735    * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
   30736      const int)
   30737      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
   30738 
   30739    * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t,
   30740      const int)
   30741      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   30742 
   30743    * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t,
   30744      const int)
   30745      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   30746 
   30747    * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
   30748      int)
   30749      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   30750 
   30751    * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
   30752      int)
   30753      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   30754 
   30755    * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
   30756      const int)
   30757      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
   30758 
   30759    * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
   30760      const int)
   30761      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   30762 
   30763    * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
   30764      const int)
   30765      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   30766 
   30767    * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
   30768      int)
   30769      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   30770 
   30771    * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
   30772      int)
   30773      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   30774 
   30775    * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
   30776      const int)
   30777      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
   30778 
   30779    * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
   30780      const int)
   30781      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
   30782 
   30783    * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   30784      int)
   30785      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
   30786 
   30787    * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   30788      int)
   30789      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
   30790 
   30791    * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
   30792      int)
   30793      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
   30794 
   30795    * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
   30796      int)
   30797      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
   30798 
   30799 6.54.3.56 Vector multiply by scalar
   30800 ...................................
   30801 
   30802    * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
   30803      _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]'
   30804 
   30805    * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
   30806      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   30807 
   30808    * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
   30809      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   30810 
   30811    * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
   30812      _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]'
   30813 
   30814    * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
   30815      _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]'
   30816 
   30817    * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
   30818      _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]'
   30819 
   30820    * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
   30821      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   30822 
   30823    * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
   30824      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   30825 
   30826    * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
   30827      _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]'
   30828 
   30829    * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
   30830      _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]'
   30831 
   30832 6.54.3.57 Vector long multiply by scalar
   30833 ........................................
   30834 
   30835    * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
   30836      _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]'
   30837 
   30838    * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
   30839      _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]'
   30840 
   30841    * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
   30842      _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]'
   30843 
   30844    * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
   30845      _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]'
   30846 
   30847 6.54.3.58 Vector saturating doubling long multiply by scalar
   30848 ............................................................
   30849 
   30850    * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
   30851      _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]'
   30852 
   30853    * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
   30854      _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]'
   30855 
   30856 6.54.3.59 Vector saturating doubling multiply high by scalar
   30857 ............................................................
   30858 
   30859    * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
   30860      _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]'
   30861 
   30862    * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
   30863      _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]'
   30864 
   30865    * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
   30866      _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]'
   30867 
   30868    * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
   30869      _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]'
   30870 
   30871    * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
   30872      _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]'
   30873 
   30874    * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
   30875      _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]'
   30876 
   30877    * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
   30878      _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]'
   30879 
   30880    * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
   30881      _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]'
   30882 
   30883 6.54.3.60 Vector multiply-accumulate by scalar
   30884 ..............................................
   30885 
   30886    * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
   30887      _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]'
   30888 
   30889    * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   30890      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   30891 
   30892    * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   30893      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   30894 
   30895    * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
   30896      _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]'
   30897 
   30898    * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
   30899      _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]'
   30900 
   30901    * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
   30902      _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]'
   30903 
   30904    * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   30905      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   30906 
   30907    * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   30908      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   30909 
   30910    * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
   30911      _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]'
   30912 
   30913    * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
   30914      _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]'
   30915 
   30916    * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   30917      _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]'
   30918 
   30919    * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   30920      _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]'
   30921 
   30922    * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   30923      _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]'
   30924 
   30925    * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   30926      _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]'
   30927 
   30928    * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
   30929      _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]'
   30930 
   30931    * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
   30932      _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]'
   30933 
   30934 6.54.3.61 Vector multiply-subtract by scalar
   30935 ............................................
   30936 
   30937    * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
   30938      _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]'
   30939 
   30940    * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
   30941      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   30942 
   30943    * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
   30944      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   30945 
   30946    * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
   30947      _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]'
   30948 
   30949    * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
   30950      _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]'
   30951 
   30952    * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
   30953      _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]'
   30954 
   30955    * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
   30956      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   30957 
   30958    * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
   30959      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   30960 
   30961    * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
   30962      _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]'
   30963 
   30964    * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
   30965      _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]'
   30966 
   30967    * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
   30968      _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]'
   30969 
   30970    * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
   30971      _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]'
   30972 
   30973    * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   30974      _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]'
   30975 
   30976    * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   30977      _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]'
   30978 
   30979    * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
   30980      _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]'
   30981 
   30982    * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
   30983      _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]'
   30984 
   30985 6.54.3.62 Vector extract
   30986 ........................
   30987 
   30988    * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
   30989      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   30990 
   30991    * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
   30992      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   30993 
   30994    * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
   30995      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   30996 
   30997    * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
   30998      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   30999 
   31000    * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
   31001      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   31002 
   31003    * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
   31004      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   31005 
   31006    * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
   31007      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
   31008 
   31009    * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
   31010      _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0'
   31011 
   31012    * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
   31013      _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0'
   31014 
   31015    * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
   31016      _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0'
   31017 
   31018    * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
   31019      _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0'
   31020 
   31021    * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
   31022      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   31023 
   31024    * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
   31025      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   31026 
   31027    * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
   31028      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   31029 
   31030    * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
   31031      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   31032 
   31033    * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
   31034      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   31035 
   31036    * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
   31037      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   31038 
   31039    * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
   31040      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
   31041 
   31042    * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
   31043      _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0'
   31044 
   31045    * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
   31046      _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0'
   31047 
   31048    * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
   31049      _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0'
   31050 
   31051    * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
   31052      _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0'
   31053 
   31054 6.54.3.63 Reverse elements
   31055 ..........................
   31056 
   31057    * uint32x2_t vrev64_u32 (uint32x2_t)
   31058      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   31059 
   31060    * uint16x4_t vrev64_u16 (uint16x4_t)
   31061      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   31062 
   31063    * uint8x8_t vrev64_u8 (uint8x8_t)
   31064      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   31065 
   31066    * int32x2_t vrev64_s32 (int32x2_t)
   31067      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   31068 
   31069    * int16x4_t vrev64_s16 (int16x4_t)
   31070      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   31071 
   31072    * int8x8_t vrev64_s8 (int8x8_t)
   31073      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   31074 
   31075    * float32x2_t vrev64_f32 (float32x2_t)
   31076      _Form of expected instruction(s):_ `vrev64.32 D0, D0'
   31077 
   31078    * poly16x4_t vrev64_p16 (poly16x4_t)
   31079      _Form of expected instruction(s):_ `vrev64.16 D0, D0'
   31080 
   31081    * poly8x8_t vrev64_p8 (poly8x8_t)
   31082      _Form of expected instruction(s):_ `vrev64.8 D0, D0'
   31083 
   31084    * uint32x4_t vrev64q_u32 (uint32x4_t)
   31085      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   31086 
   31087    * uint16x8_t vrev64q_u16 (uint16x8_t)
   31088      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   31089 
   31090    * uint8x16_t vrev64q_u8 (uint8x16_t)
   31091      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   31092 
   31093    * int32x4_t vrev64q_s32 (int32x4_t)
   31094      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   31095 
   31096    * int16x8_t vrev64q_s16 (int16x8_t)
   31097      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   31098 
   31099    * int8x16_t vrev64q_s8 (int8x16_t)
   31100      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   31101 
   31102    * float32x4_t vrev64q_f32 (float32x4_t)
   31103      _Form of expected instruction(s):_ `vrev64.32 Q0, Q0'
   31104 
   31105    * poly16x8_t vrev64q_p16 (poly16x8_t)
   31106      _Form of expected instruction(s):_ `vrev64.16 Q0, Q0'
   31107 
   31108    * poly8x16_t vrev64q_p8 (poly8x16_t)
   31109      _Form of expected instruction(s):_ `vrev64.8 Q0, Q0'
   31110 
   31111    * uint16x4_t vrev32_u16 (uint16x4_t)
   31112      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   31113 
   31114    * int16x4_t vrev32_s16 (int16x4_t)
   31115      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   31116 
   31117    * uint8x8_t vrev32_u8 (uint8x8_t)
   31118      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   31119 
   31120    * int8x8_t vrev32_s8 (int8x8_t)
   31121      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   31122 
   31123    * poly16x4_t vrev32_p16 (poly16x4_t)
   31124      _Form of expected instruction(s):_ `vrev32.16 D0, D0'
   31125 
   31126    * poly8x8_t vrev32_p8 (poly8x8_t)
   31127      _Form of expected instruction(s):_ `vrev32.8 D0, D0'
   31128 
   31129    * uint16x8_t vrev32q_u16 (uint16x8_t)
   31130      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   31131 
   31132    * int16x8_t vrev32q_s16 (int16x8_t)
   31133      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   31134 
   31135    * uint8x16_t vrev32q_u8 (uint8x16_t)
   31136      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   31137 
   31138    * int8x16_t vrev32q_s8 (int8x16_t)
   31139      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   31140 
   31141    * poly16x8_t vrev32q_p16 (poly16x8_t)
   31142      _Form of expected instruction(s):_ `vrev32.16 Q0, Q0'
   31143 
   31144    * poly8x16_t vrev32q_p8 (poly8x16_t)
   31145      _Form of expected instruction(s):_ `vrev32.8 Q0, Q0'
   31146 
   31147    * uint8x8_t vrev16_u8 (uint8x8_t)
   31148      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   31149 
   31150    * int8x8_t vrev16_s8 (int8x8_t)
   31151      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   31152 
   31153    * poly8x8_t vrev16_p8 (poly8x8_t)
   31154      _Form of expected instruction(s):_ `vrev16.8 D0, D0'
   31155 
   31156    * uint8x16_t vrev16q_u8 (uint8x16_t)
   31157      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   31158 
   31159    * int8x16_t vrev16q_s8 (int8x16_t)
   31160      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   31161 
   31162    * poly8x16_t vrev16q_p8 (poly8x16_t)
   31163      _Form of expected instruction(s):_ `vrev16.8 Q0, Q0'
   31164 
   31165 6.54.3.64 Bit selection
   31166 .......................
   31167 
   31168    * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
   31169      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31170      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31171 
   31172    * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
   31173      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31174      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31175 
   31176    * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
   31177      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31178      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31179 
   31180    * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
   31181      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31182      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31183 
   31184    * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
   31185      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31186      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31187 
   31188    * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
   31189      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31190      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31191 
   31192    * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
   31193      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31194      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31195 
   31196    * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
   31197      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31198      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31199 
   31200    * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
   31201      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31202      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31203 
   31204    * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
   31205      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31206      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31207 
   31208    * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
   31209      _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit
   31210      D0, D0, D0' _or_ `vbif D0, D0, D0'
   31211 
   31212    * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
   31213      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31214      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31215 
   31216    * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
   31217      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31218      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31219 
   31220    * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
   31221      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31222      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31223 
   31224    * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
   31225      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31226      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31227 
   31228    * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
   31229      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31230      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31231 
   31232    * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
   31233      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31234      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31235 
   31236    * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
   31237      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31238      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31239 
   31240    * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
   31241      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31242      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31243 
   31244    * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
   31245      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31246      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31247 
   31248    * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
   31249      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31250      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31251 
   31252    * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
   31253      _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit
   31254      Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0'
   31255 
   31256 6.54.3.65 Transpose elements
   31257 ............................
   31258 
   31259    * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
   31260      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
   31261 
   31262    * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
   31263      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   31264 
   31265    * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
   31266      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   31267 
   31268    * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
   31269      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
   31270 
   31271    * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
   31272      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   31273 
   31274    * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
   31275      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   31276 
   31277    * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
   31278      _Form of expected instruction(s):_ `vtrn.32 D0, D1'
   31279 
   31280    * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
   31281      _Form of expected instruction(s):_ `vtrn.16 D0, D1'
   31282 
   31283    * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
   31284      _Form of expected instruction(s):_ `vtrn.8 D0, D1'
   31285 
   31286    * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
   31287      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   31288 
   31289    * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
   31290      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   31291 
   31292    * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
   31293      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   31294 
   31295    * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
   31296      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   31297 
   31298    * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
   31299      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   31300 
   31301    * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
   31302      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   31303 
   31304    * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
   31305      _Form of expected instruction(s):_ `vtrn.32 Q0, Q1'
   31306 
   31307    * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
   31308      _Form of expected instruction(s):_ `vtrn.16 Q0, Q1'
   31309 
   31310    * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
   31311      _Form of expected instruction(s):_ `vtrn.8 Q0, Q1'
   31312 
   31313 6.54.3.66 Zip elements
   31314 ......................
   31315 
   31316    * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
   31317      _Form of expected instruction(s):_ `vzip.32 D0, D1'
   31318 
   31319    * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
   31320      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   31321 
   31322    * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
   31323      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   31324 
   31325    * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
   31326      _Form of expected instruction(s):_ `vzip.32 D0, D1'
   31327 
   31328    * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
   31329      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   31330 
   31331    * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
   31332      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   31333 
   31334    * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
   31335      _Form of expected instruction(s):_ `vzip.32 D0, D1'
   31336 
   31337    * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
   31338      _Form of expected instruction(s):_ `vzip.16 D0, D1'
   31339 
   31340    * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
   31341      _Form of expected instruction(s):_ `vzip.8 D0, D1'
   31342 
   31343    * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
   31344      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   31345 
   31346    * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
   31347      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   31348 
   31349    * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
   31350      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   31351 
   31352    * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
   31353      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   31354 
   31355    * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
   31356      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   31357 
   31358    * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
   31359      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   31360 
   31361    * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
   31362      _Form of expected instruction(s):_ `vzip.32 Q0, Q1'
   31363 
   31364    * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
   31365      _Form of expected instruction(s):_ `vzip.16 Q0, Q1'
   31366 
   31367    * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
   31368      _Form of expected instruction(s):_ `vzip.8 Q0, Q1'
   31369 
   31370 6.54.3.67 Unzip elements
   31371 ........................
   31372 
   31373    * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
   31374      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   31375 
   31376    * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
   31377      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   31378 
   31379    * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
   31380      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   31381 
   31382    * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
   31383      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   31384 
   31385    * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
   31386      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   31387 
   31388    * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
   31389      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   31390 
   31391    * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
   31392      _Form of expected instruction(s):_ `vuzp.32 D0, D1'
   31393 
   31394    * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
   31395      _Form of expected instruction(s):_ `vuzp.16 D0, D1'
   31396 
   31397    * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
   31398      _Form of expected instruction(s):_ `vuzp.8 D0, D1'
   31399 
   31400    * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
   31401      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   31402 
   31403    * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
   31404      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   31405 
   31406    * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
   31407      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   31408 
   31409    * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
   31410      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   31411 
   31412    * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
   31413      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   31414 
   31415    * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
   31416      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   31417 
   31418    * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
   31419      _Form of expected instruction(s):_ `vuzp.32 Q0, Q1'
   31420 
   31421    * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
   31422      _Form of expected instruction(s):_ `vuzp.16 Q0, Q1'
   31423 
   31424    * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
   31425      _Form of expected instruction(s):_ `vuzp.8 Q0, Q1'
   31426 
   31427 6.54.3.68 Element/structure loads, VLD1 variants
   31428 ................................................
   31429 
   31430    * uint32x2_t vld1_u32 (const uint32_t *)
   31431      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   31432 
   31433    * uint16x4_t vld1_u16 (const uint16_t *)
   31434      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   31435 
   31436    * uint8x8_t vld1_u8 (const uint8_t *)
   31437      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   31438 
   31439    * int32x2_t vld1_s32 (const int32_t *)
   31440      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   31441 
   31442    * int16x4_t vld1_s16 (const int16_t *)
   31443      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   31444 
   31445    * int8x8_t vld1_s8 (const int8_t *)
   31446      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   31447 
   31448    * uint64x1_t vld1_u64 (const uint64_t *)
   31449      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31450 
   31451    * int64x1_t vld1_s64 (const int64_t *)
   31452      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31453 
   31454    * float32x2_t vld1_f32 (const float32_t *)
   31455      _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]'
   31456 
   31457    * poly16x4_t vld1_p16 (const poly16_t *)
   31458      _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]'
   31459 
   31460    * poly8x8_t vld1_p8 (const poly8_t *)
   31461      _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]'
   31462 
   31463    * uint32x4_t vld1q_u32 (const uint32_t *)
   31464      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   31465 
   31466    * uint16x8_t vld1q_u16 (const uint16_t *)
   31467      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   31468 
   31469    * uint8x16_t vld1q_u8 (const uint8_t *)
   31470      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   31471 
   31472    * int32x4_t vld1q_s32 (const int32_t *)
   31473      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   31474 
   31475    * int16x8_t vld1q_s16 (const int16_t *)
   31476      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   31477 
   31478    * int8x16_t vld1q_s8 (const int8_t *)
   31479      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   31480 
   31481    * uint64x2_t vld1q_u64 (const uint64_t *)
   31482      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31483 
   31484    * int64x2_t vld1q_s64 (const int64_t *)
   31485      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31486 
   31487    * float32x4_t vld1q_f32 (const float32_t *)
   31488      _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]'
   31489 
   31490    * poly16x8_t vld1q_p16 (const poly16_t *)
   31491      _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]'
   31492 
   31493    * poly8x16_t vld1q_p8 (const poly8_t *)
   31494      _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]'
   31495 
   31496    * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
   31497      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   31498 
   31499    * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
   31500      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   31501 
   31502    * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
   31503      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   31504 
   31505    * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
   31506      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   31507 
   31508    * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
   31509      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   31510 
   31511    * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
   31512      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   31513 
   31514    * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
   31515      int)
   31516      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   31517 
   31518    * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
   31519      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   31520 
   31521    * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
   31522      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   31523 
   31524    * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
   31525      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31526 
   31527    * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
   31528      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31529 
   31530    * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)
   31531      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   31532 
   31533    * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)
   31534      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   31535 
   31536    * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
   31537      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   31538 
   31539    * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
   31540      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   31541 
   31542    * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
   31543      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   31544 
   31545    * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
   31546      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   31547 
   31548    * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
   31549      int)
   31550      _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]'
   31551 
   31552    * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)
   31553      _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]'
   31554 
   31555    * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
   31556      _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]'
   31557 
   31558    * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)
   31559      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31560 
   31561    * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
   31562      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31563 
   31564    * uint32x2_t vld1_dup_u32 (const uint32_t *)
   31565      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   31566 
   31567    * uint16x4_t vld1_dup_u16 (const uint16_t *)
   31568      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   31569 
   31570    * uint8x8_t vld1_dup_u8 (const uint8_t *)
   31571      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   31572 
   31573    * int32x2_t vld1_dup_s32 (const int32_t *)
   31574      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   31575 
   31576    * int16x4_t vld1_dup_s16 (const int16_t *)
   31577      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   31578 
   31579    * int8x8_t vld1_dup_s8 (const int8_t *)
   31580      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   31581 
   31582    * float32x2_t vld1_dup_f32 (const float32_t *)
   31583      _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]'
   31584 
   31585    * poly16x4_t vld1_dup_p16 (const poly16_t *)
   31586      _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]'
   31587 
   31588    * poly8x8_t vld1_dup_p8 (const poly8_t *)
   31589      _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]'
   31590 
   31591    * uint64x1_t vld1_dup_u64 (const uint64_t *)
   31592      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31593 
   31594    * int64x1_t vld1_dup_s64 (const int64_t *)
   31595      _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]'
   31596 
   31597    * uint32x4_t vld1q_dup_u32 (const uint32_t *)
   31598      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   31599 
   31600    * uint16x8_t vld1q_dup_u16 (const uint16_t *)
   31601      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   31602 
   31603    * uint8x16_t vld1q_dup_u8 (const uint8_t *)
   31604      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   31605 
   31606    * int32x4_t vld1q_dup_s32 (const int32_t *)
   31607      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   31608 
   31609    * int16x8_t vld1q_dup_s16 (const int16_t *)
   31610      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   31611 
   31612    * int8x16_t vld1q_dup_s8 (const int8_t *)
   31613      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   31614 
   31615    * float32x4_t vld1q_dup_f32 (const float32_t *)
   31616      _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]'
   31617 
   31618    * poly16x8_t vld1q_dup_p16 (const poly16_t *)
   31619      _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]'
   31620 
   31621    * poly8x16_t vld1q_dup_p8 (const poly8_t *)
   31622      _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]'
   31623 
   31624    * uint64x2_t vld1q_dup_u64 (const uint64_t *)
   31625      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31626 
   31627    * int64x2_t vld1q_dup_s64 (const int64_t *)
   31628      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31629 
   31630 6.54.3.69 Element/structure stores, VST1 variants
   31631 .................................................
   31632 
   31633    * void vst1_u32 (uint32_t *, uint32x2_t)
   31634      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   31635 
   31636    * void vst1_u16 (uint16_t *, uint16x4_t)
   31637      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   31638 
   31639    * void vst1_u8 (uint8_t *, uint8x8_t)
   31640      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   31641 
   31642    * void vst1_s32 (int32_t *, int32x2_t)
   31643      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   31644 
   31645    * void vst1_s16 (int16_t *, int16x4_t)
   31646      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   31647 
   31648    * void vst1_s8 (int8_t *, int8x8_t)
   31649      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   31650 
   31651    * void vst1_u64 (uint64_t *, uint64x1_t)
   31652      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   31653 
   31654    * void vst1_s64 (int64_t *, int64x1_t)
   31655      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   31656 
   31657    * void vst1_f32 (float32_t *, float32x2_t)
   31658      _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]'
   31659 
   31660    * void vst1_p16 (poly16_t *, poly16x4_t)
   31661      _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]'
   31662 
   31663    * void vst1_p8 (poly8_t *, poly8x8_t)
   31664      _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]'
   31665 
   31666    * void vst1q_u32 (uint32_t *, uint32x4_t)
   31667      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   31668 
   31669    * void vst1q_u16 (uint16_t *, uint16x8_t)
   31670      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   31671 
   31672    * void vst1q_u8 (uint8_t *, uint8x16_t)
   31673      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   31674 
   31675    * void vst1q_s32 (int32_t *, int32x4_t)
   31676      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   31677 
   31678    * void vst1q_s16 (int16_t *, int16x8_t)
   31679      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   31680 
   31681    * void vst1q_s8 (int8_t *, int8x16_t)
   31682      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   31683 
   31684    * void vst1q_u64 (uint64_t *, uint64x2_t)
   31685      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   31686 
   31687    * void vst1q_s64 (int64_t *, int64x2_t)
   31688      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   31689 
   31690    * void vst1q_f32 (float32_t *, float32x4_t)
   31691      _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]'
   31692 
   31693    * void vst1q_p16 (poly16_t *, poly16x8_t)
   31694      _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]'
   31695 
   31696    * void vst1q_p8 (poly8_t *, poly8x16_t)
   31697      _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]'
   31698 
   31699    * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
   31700      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   31701 
   31702    * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
   31703      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   31704 
   31705    * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
   31706      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   31707 
   31708    * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
   31709      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   31710 
   31711    * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
   31712      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   31713 
   31714    * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
   31715      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   31716 
   31717    * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
   31718      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   31719 
   31720    * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
   31721      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   31722 
   31723    * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
   31724      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   31725 
   31726    * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
   31727      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   31728 
   31729    * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
   31730      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   31731 
   31732    * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
   31733      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   31734 
   31735    * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
   31736      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   31737 
   31738    * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
   31739      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   31740 
   31741    * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
   31742      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   31743 
   31744    * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
   31745      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   31746 
   31747    * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
   31748      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   31749 
   31750    * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
   31751      _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]'
   31752 
   31753    * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
   31754      _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]'
   31755 
   31756    * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
   31757      _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]'
   31758 
   31759    * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
   31760      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   31761 
   31762    * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
   31763      _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]'
   31764 
   31765 6.54.3.70 Element/structure loads, VLD2 variants
   31766 ................................................
   31767 
   31768    * uint32x2x2_t vld2_u32 (const uint32_t *)
   31769      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   31770 
   31771    * uint16x4x2_t vld2_u16 (const uint16_t *)
   31772      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   31773 
   31774    * uint8x8x2_t vld2_u8 (const uint8_t *)
   31775      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   31776 
   31777    * int32x2x2_t vld2_s32 (const int32_t *)
   31778      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   31779 
   31780    * int16x4x2_t vld2_s16 (const int16_t *)
   31781      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   31782 
   31783    * int8x8x2_t vld2_s8 (const int8_t *)
   31784      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   31785 
   31786    * float32x2x2_t vld2_f32 (const float32_t *)
   31787      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   31788 
   31789    * poly16x4x2_t vld2_p16 (const poly16_t *)
   31790      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   31791 
   31792    * poly8x8x2_t vld2_p8 (const poly8_t *)
   31793      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   31794 
   31795    * uint64x1x2_t vld2_u64 (const uint64_t *)
   31796      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31797 
   31798    * int64x1x2_t vld2_s64 (const int64_t *)
   31799      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31800 
   31801    * uint32x4x2_t vld2q_u32 (const uint32_t *)
   31802      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   31803 
   31804    * uint16x8x2_t vld2q_u16 (const uint16_t *)
   31805      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   31806 
   31807    * uint8x16x2_t vld2q_u8 (const uint8_t *)
   31808      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   31809 
   31810    * int32x4x2_t vld2q_s32 (const int32_t *)
   31811      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   31812 
   31813    * int16x8x2_t vld2q_s16 (const int16_t *)
   31814      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   31815 
   31816    * int8x16x2_t vld2q_s8 (const int8_t *)
   31817      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   31818 
   31819    * float32x4x2_t vld2q_f32 (const float32_t *)
   31820      _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]'
   31821 
   31822    * poly16x8x2_t vld2q_p16 (const poly16_t *)
   31823      _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]'
   31824 
   31825    * poly8x16x2_t vld2q_p8 (const poly8_t *)
   31826      _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]'
   31827 
   31828    * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
   31829      int)
   31830      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   31831 
   31832    * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
   31833      int)
   31834      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   31835 
   31836    * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
   31837      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   31838 
   31839    * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)
   31840      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   31841 
   31842    * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)
   31843      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   31844 
   31845    * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
   31846      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   31847 
   31848    * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
   31849      const int)
   31850      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   31851 
   31852    * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
   31853      int)
   31854      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   31855 
   31856    * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
   31857      _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]'
   31858 
   31859    * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
   31860      int)
   31861      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   31862 
   31863    * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
   31864      int)
   31865      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   31866 
   31867    * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
   31868      int)
   31869      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   31870 
   31871    * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
   31872      int)
   31873      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   31874 
   31875    * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
   31876      const int)
   31877      _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]'
   31878 
   31879    * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
   31880      int)
   31881      _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]'
   31882 
   31883    * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
   31884      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   31885 
   31886    * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
   31887      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   31888 
   31889    * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
   31890      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   31891 
   31892    * int32x2x2_t vld2_dup_s32 (const int32_t *)
   31893      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   31894 
   31895    * int16x4x2_t vld2_dup_s16 (const int16_t *)
   31896      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   31897 
   31898    * int8x8x2_t vld2_dup_s8 (const int8_t *)
   31899      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   31900 
   31901    * float32x2x2_t vld2_dup_f32 (const float32_t *)
   31902      _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]'
   31903 
   31904    * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
   31905      _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]'
   31906 
   31907    * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
   31908      _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]'
   31909 
   31910    * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
   31911      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31912 
   31913    * int64x1x2_t vld2_dup_s64 (const int64_t *)
   31914      _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]'
   31915 
   31916 6.54.3.71 Element/structure stores, VST2 variants
   31917 .................................................
   31918 
   31919    * void vst2_u32 (uint32_t *, uint32x2x2_t)
   31920      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   31921 
   31922    * void vst2_u16 (uint16_t *, uint16x4x2_t)
   31923      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   31924 
   31925    * void vst2_u8 (uint8_t *, uint8x8x2_t)
   31926      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   31927 
   31928    * void vst2_s32 (int32_t *, int32x2x2_t)
   31929      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   31930 
   31931    * void vst2_s16 (int16_t *, int16x4x2_t)
   31932      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   31933 
   31934    * void vst2_s8 (int8_t *, int8x8x2_t)
   31935      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   31936 
   31937    * void vst2_f32 (float32_t *, float32x2x2_t)
   31938      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   31939 
   31940    * void vst2_p16 (poly16_t *, poly16x4x2_t)
   31941      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   31942 
   31943    * void vst2_p8 (poly8_t *, poly8x8x2_t)
   31944      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   31945 
   31946    * void vst2_u64 (uint64_t *, uint64x1x2_t)
   31947      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   31948 
   31949    * void vst2_s64 (int64_t *, int64x1x2_t)
   31950      _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]'
   31951 
   31952    * void vst2q_u32 (uint32_t *, uint32x4x2_t)
   31953      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   31954 
   31955    * void vst2q_u16 (uint16_t *, uint16x8x2_t)
   31956      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   31957 
   31958    * void vst2q_u8 (uint8_t *, uint8x16x2_t)
   31959      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   31960 
   31961    * void vst2q_s32 (int32_t *, int32x4x2_t)
   31962      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   31963 
   31964    * void vst2q_s16 (int16_t *, int16x8x2_t)
   31965      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   31966 
   31967    * void vst2q_s8 (int8_t *, int8x16x2_t)
   31968      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   31969 
   31970    * void vst2q_f32 (float32_t *, float32x4x2_t)
   31971      _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]'
   31972 
   31973    * void vst2q_p16 (poly16_t *, poly16x8x2_t)
   31974      _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]'
   31975 
   31976    * void vst2q_p8 (poly8_t *, poly8x16x2_t)
   31977      _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]'
   31978 
   31979    * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
   31980      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   31981 
   31982    * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
   31983      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   31984 
   31985    * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
   31986      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   31987 
   31988    * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
   31989      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   31990 
   31991    * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
   31992      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   31993 
   31994    * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
   31995      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   31996 
   31997    * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
   31998      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   31999 
   32000    * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
   32001      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   32002 
   32003    * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
   32004      _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]'
   32005 
   32006    * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
   32007      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   32008 
   32009    * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
   32010      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   32011 
   32012    * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
   32013      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   32014 
   32015    * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
   32016      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   32017 
   32018    * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
   32019      _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]'
   32020 
   32021    * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
   32022      _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]'
   32023 
   32024 6.54.3.72 Element/structure loads, VLD3 variants
   32025 ................................................
   32026 
   32027    * uint32x2x3_t vld3_u32 (const uint32_t *)
   32028      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   32029 
   32030    * uint16x4x3_t vld3_u16 (const uint16_t *)
   32031      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   32032 
   32033    * uint8x8x3_t vld3_u8 (const uint8_t *)
   32034      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   32035 
   32036    * int32x2x3_t vld3_s32 (const int32_t *)
   32037      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   32038 
   32039    * int16x4x3_t vld3_s16 (const int16_t *)
   32040      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   32041 
   32042    * int8x8x3_t vld3_s8 (const int8_t *)
   32043      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   32044 
   32045    * float32x2x3_t vld3_f32 (const float32_t *)
   32046      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   32047 
   32048    * poly16x4x3_t vld3_p16 (const poly16_t *)
   32049      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   32050 
   32051    * poly8x8x3_t vld3_p8 (const poly8_t *)
   32052      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   32053 
   32054    * uint64x1x3_t vld3_u64 (const uint64_t *)
   32055      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   32056 
   32057    * int64x1x3_t vld3_s64 (const int64_t *)
   32058      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   32059 
   32060    * uint32x4x3_t vld3q_u32 (const uint32_t *)
   32061      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   32062 
   32063    * uint16x8x3_t vld3q_u16 (const uint16_t *)
   32064      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   32065 
   32066    * uint8x16x3_t vld3q_u8 (const uint8_t *)
   32067      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   32068 
   32069    * int32x4x3_t vld3q_s32 (const int32_t *)
   32070      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   32071 
   32072    * int16x8x3_t vld3q_s16 (const int16_t *)
   32073      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   32074 
   32075    * int8x16x3_t vld3q_s8 (const int8_t *)
   32076      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   32077 
   32078    * float32x4x3_t vld3q_f32 (const float32_t *)
   32079      _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]'
   32080 
   32081    * poly16x8x3_t vld3q_p16 (const poly16_t *)
   32082      _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]'
   32083 
   32084    * poly8x16x3_t vld3q_p8 (const poly8_t *)
   32085      _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]'
   32086 
   32087    * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
   32088      int)
   32089      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   32090      [R0]'
   32091 
   32092    * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
   32093      int)
   32094      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   32095      [R0]'
   32096 
   32097    * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
   32098      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   32099      [R0]'
   32100 
   32101    * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)
   32102      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   32103      [R0]'
   32104 
   32105    * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)
   32106      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   32107      [R0]'
   32108 
   32109    * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
   32110      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   32111      [R0]'
   32112 
   32113    * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
   32114      const int)
   32115      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   32116      [R0]'
   32117 
   32118    * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
   32119      int)
   32120      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   32121      [R0]'
   32122 
   32123    * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
   32124      _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]},
   32125      [R0]'
   32126 
   32127    * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
   32128      int)
   32129      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   32130      [R0]'
   32131 
   32132    * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
   32133      int)
   32134      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   32135      [R0]'
   32136 
   32137    * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
   32138      int)
   32139      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   32140      [R0]'
   32141 
   32142    * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
   32143      int)
   32144      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   32145      [R0]'
   32146 
   32147    * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
   32148      const int)
   32149      _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]},
   32150      [R0]'
   32151 
   32152    * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
   32153      int)
   32154      _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]},
   32155      [R0]'
   32156 
   32157    * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
   32158      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   32159      [R0]'
   32160 
   32161    * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
   32162      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   32163      [R0]'
   32164 
   32165    * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
   32166      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   32167      [R0]'
   32168 
   32169    * int32x2x3_t vld3_dup_s32 (const int32_t *)
   32170      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   32171      [R0]'
   32172 
   32173    * int16x4x3_t vld3_dup_s16 (const int16_t *)
   32174      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   32175      [R0]'
   32176 
   32177    * int8x8x3_t vld3_dup_s8 (const int8_t *)
   32178      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   32179      [R0]'
   32180 
   32181    * float32x2x3_t vld3_dup_f32 (const float32_t *)
   32182      _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]},
   32183      [R0]'
   32184 
   32185    * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
   32186      _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]},
   32187      [R0]'
   32188 
   32189    * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
   32190      _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]},
   32191      [R0]'
   32192 
   32193    * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
   32194      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   32195 
   32196    * int64x1x3_t vld3_dup_s64 (const int64_t *)
   32197      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]'
   32198 
   32199 6.54.3.73 Element/structure stores, VST3 variants
   32200 .................................................
   32201 
   32202    * void vst3_u32 (uint32_t *, uint32x2x3_t)
   32203      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   32204 
   32205    * void vst3_u16 (uint16_t *, uint16x4x3_t)
   32206      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   32207 
   32208    * void vst3_u8 (uint8_t *, uint8x8x3_t)
   32209      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   32210 
   32211    * void vst3_s32 (int32_t *, int32x2x3_t)
   32212      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   32213 
   32214    * void vst3_s16 (int16_t *, int16x4x3_t)
   32215      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   32216 
   32217    * void vst3_s8 (int8_t *, int8x8x3_t)
   32218      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   32219 
   32220    * void vst3_f32 (float32_t *, float32x2x3_t)
   32221      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]'
   32222 
   32223    * void vst3_p16 (poly16_t *, poly16x4x3_t)
   32224      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]'
   32225 
   32226    * void vst3_p8 (poly8_t *, poly8x8x3_t)
   32227      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]'
   32228 
   32229    * void vst3_u64 (uint64_t *, uint64x1x3_t)
   32230      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   32231 
   32232    * void vst3_s64 (int64_t *, int64x1x3_t)
   32233      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   32234 
   32235    * void vst3q_u32 (uint32_t *, uint32x4x3_t)
   32236      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   32237 
   32238    * void vst3q_u16 (uint16_t *, uint16x8x3_t)
   32239      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   32240 
   32241    * void vst3q_u8 (uint8_t *, uint8x16x3_t)
   32242      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   32243 
   32244    * void vst3q_s32 (int32_t *, int32x4x3_t)
   32245      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   32246 
   32247    * void vst3q_s16 (int16_t *, int16x8x3_t)
   32248      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   32249 
   32250    * void vst3q_s8 (int8_t *, int8x16x3_t)
   32251      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   32252 
   32253    * void vst3q_f32 (float32_t *, float32x4x3_t)
   32254      _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]'
   32255 
   32256    * void vst3q_p16 (poly16_t *, poly16x8x3_t)
   32257      _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]'
   32258 
   32259    * void vst3q_p8 (poly8_t *, poly8x16x3_t)
   32260      _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]'
   32261 
   32262    * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
   32263      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   32264      [R0]'
   32265 
   32266    * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
   32267      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   32268      [R0]'
   32269 
   32270    * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
   32271      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   32272      [R0]'
   32273 
   32274    * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
   32275      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   32276      [R0]'
   32277 
   32278    * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
   32279      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   32280      [R0]'
   32281 
   32282    * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
   32283      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   32284      [R0]'
   32285 
   32286    * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
   32287      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   32288      [R0]'
   32289 
   32290    * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
   32291      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   32292      [R0]'
   32293 
   32294    * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
   32295      _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]},
   32296      [R0]'
   32297 
   32298    * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
   32299      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   32300      [R0]'
   32301 
   32302    * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
   32303      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   32304      [R0]'
   32305 
   32306    * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
   32307      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   32308      [R0]'
   32309 
   32310    * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
   32311      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   32312      [R0]'
   32313 
   32314    * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
   32315      _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]},
   32316      [R0]'
   32317 
   32318    * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
   32319      _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]},
   32320      [R0]'
   32321 
   32322 6.54.3.74 Element/structure loads, VLD4 variants
   32323 ................................................
   32324 
   32325    * uint32x2x4_t vld4_u32 (const uint32_t *)
   32326      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   32327 
   32328    * uint16x4x4_t vld4_u16 (const uint16_t *)
   32329      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   32330 
   32331    * uint8x8x4_t vld4_u8 (const uint8_t *)
   32332      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   32333 
   32334    * int32x2x4_t vld4_s32 (const int32_t *)
   32335      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   32336 
   32337    * int16x4x4_t vld4_s16 (const int16_t *)
   32338      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   32339 
   32340    * int8x8x4_t vld4_s8 (const int8_t *)
   32341      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   32342 
   32343    * float32x2x4_t vld4_f32 (const float32_t *)
   32344      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   32345 
   32346    * poly16x4x4_t vld4_p16 (const poly16_t *)
   32347      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   32348 
   32349    * poly8x8x4_t vld4_p8 (const poly8_t *)
   32350      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   32351 
   32352    * uint64x1x4_t vld4_u64 (const uint64_t *)
   32353      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   32354 
   32355    * int64x1x4_t vld4_s64 (const int64_t *)
   32356      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   32357 
   32358    * uint32x4x4_t vld4q_u32 (const uint32_t *)
   32359      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   32360 
   32361    * uint16x8x4_t vld4q_u16 (const uint16_t *)
   32362      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   32363 
   32364    * uint8x16x4_t vld4q_u8 (const uint8_t *)
   32365      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   32366 
   32367    * int32x4x4_t vld4q_s32 (const int32_t *)
   32368      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   32369 
   32370    * int16x8x4_t vld4q_s16 (const int16_t *)
   32371      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   32372 
   32373    * int8x16x4_t vld4q_s8 (const int8_t *)
   32374      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   32375 
   32376    * float32x4x4_t vld4q_f32 (const float32_t *)
   32377      _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]'
   32378 
   32379    * poly16x8x4_t vld4q_p16 (const poly16_t *)
   32380      _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]'
   32381 
   32382    * poly8x16x4_t vld4q_p8 (const poly8_t *)
   32383      _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]'
   32384 
   32385    * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
   32386      int)
   32387      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   32388      D3[0]}, [R0]'
   32389 
   32390    * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
   32391      int)
   32392      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   32393      D3[0]}, [R0]'
   32394 
   32395    * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
   32396      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   32397      D3[0]}, [R0]'
   32398 
   32399    * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)
   32400      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   32401      D3[0]}, [R0]'
   32402 
   32403    * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)
   32404      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   32405      D3[0]}, [R0]'
   32406 
   32407    * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
   32408      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   32409      D3[0]}, [R0]'
   32410 
   32411    * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
   32412      const int)
   32413      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   32414      D3[0]}, [R0]'
   32415 
   32416    * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
   32417      int)
   32418      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   32419      D3[0]}, [R0]'
   32420 
   32421    * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
   32422      _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0],
   32423      D3[0]}, [R0]'
   32424 
   32425    * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
   32426      int)
   32427      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   32428      D3[0]}, [R0]'
   32429 
   32430    * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
   32431      int)
   32432      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   32433      D3[0]}, [R0]'
   32434 
   32435    * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
   32436      int)
   32437      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   32438      D3[0]}, [R0]'
   32439 
   32440    * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
   32441      int)
   32442      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   32443      D3[0]}, [R0]'
   32444 
   32445    * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
   32446      const int)
   32447      _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0],
   32448      D3[0]}, [R0]'
   32449 
   32450    * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
   32451      int)
   32452      _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0],
   32453      D3[0]}, [R0]'
   32454 
   32455    * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
   32456      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   32457      D3[]}, [R0]'
   32458 
   32459    * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
   32460      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   32461      D3[]}, [R0]'
   32462 
   32463    * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
   32464      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   32465      D3[]}, [R0]'
   32466 
   32467    * int32x2x4_t vld4_dup_s32 (const int32_t *)
   32468      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   32469      D3[]}, [R0]'
   32470 
   32471    * int16x4x4_t vld4_dup_s16 (const int16_t *)
   32472      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   32473      D3[]}, [R0]'
   32474 
   32475    * int8x8x4_t vld4_dup_s8 (const int8_t *)
   32476      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   32477      D3[]}, [R0]'
   32478 
   32479    * float32x2x4_t vld4_dup_f32 (const float32_t *)
   32480      _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[],
   32481      D3[]}, [R0]'
   32482 
   32483    * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
   32484      _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[],
   32485      D3[]}, [R0]'
   32486 
   32487    * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
   32488      _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[],
   32489      D3[]}, [R0]'
   32490 
   32491    * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
   32492      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   32493 
   32494    * int64x1x4_t vld4_dup_s64 (const int64_t *)
   32495      _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]'
   32496 
   32497 6.54.3.75 Element/structure stores, VST4 variants
   32498 .................................................
   32499 
   32500    * void vst4_u32 (uint32_t *, uint32x2x4_t)
   32501      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   32502 
   32503    * void vst4_u16 (uint16_t *, uint16x4x4_t)
   32504      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   32505 
   32506    * void vst4_u8 (uint8_t *, uint8x8x4_t)
   32507      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   32508 
   32509    * void vst4_s32 (int32_t *, int32x2x4_t)
   32510      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   32511 
   32512    * void vst4_s16 (int16_t *, int16x4x4_t)
   32513      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   32514 
   32515    * void vst4_s8 (int8_t *, int8x8x4_t)
   32516      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   32517 
   32518    * void vst4_f32 (float32_t *, float32x2x4_t)
   32519      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   32520 
   32521    * void vst4_p16 (poly16_t *, poly16x4x4_t)
   32522      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   32523 
   32524    * void vst4_p8 (poly8_t *, poly8x8x4_t)
   32525      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   32526 
   32527    * void vst4_u64 (uint64_t *, uint64x1x4_t)
   32528      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   32529 
   32530    * void vst4_s64 (int64_t *, int64x1x4_t)
   32531      _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]'
   32532 
   32533    * void vst4q_u32 (uint32_t *, uint32x4x4_t)
   32534      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   32535 
   32536    * void vst4q_u16 (uint16_t *, uint16x8x4_t)
   32537      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   32538 
   32539    * void vst4q_u8 (uint8_t *, uint8x16x4_t)
   32540      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   32541 
   32542    * void vst4q_s32 (int32_t *, int32x4x4_t)
   32543      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   32544 
   32545    * void vst4q_s16 (int16_t *, int16x8x4_t)
   32546      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   32547 
   32548    * void vst4q_s8 (int8_t *, int8x16x4_t)
   32549      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   32550 
   32551    * void vst4q_f32 (float32_t *, float32x4x4_t)
   32552      _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]'
   32553 
   32554    * void vst4q_p16 (poly16_t *, poly16x8x4_t)
   32555      _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]'
   32556 
   32557    * void vst4q_p8 (poly8_t *, poly8x16x4_t)
   32558      _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]'
   32559 
   32560    * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
   32561      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   32562      D3[0]}, [R0]'
   32563 
   32564    * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
   32565      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   32566      D3[0]}, [R0]'
   32567 
   32568    * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
   32569      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   32570      D3[0]}, [R0]'
   32571 
   32572    * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
   32573      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   32574      D3[0]}, [R0]'
   32575 
   32576    * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
   32577      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   32578      D3[0]}, [R0]'
   32579 
   32580    * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
   32581      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   32582      D3[0]}, [R0]'
   32583 
   32584    * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
   32585      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   32586      D3[0]}, [R0]'
   32587 
   32588    * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
   32589      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   32590      D3[0]}, [R0]'
   32591 
   32592    * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
   32593      _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0],
   32594      D3[0]}, [R0]'
   32595 
   32596    * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
   32597      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   32598      D3[0]}, [R0]'
   32599 
   32600    * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
   32601      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   32602      D3[0]}, [R0]'
   32603 
   32604    * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
   32605      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   32606      D3[0]}, [R0]'
   32607 
   32608    * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
   32609      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   32610      D3[0]}, [R0]'
   32611 
   32612    * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
   32613      _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0],
   32614      D3[0]}, [R0]'
   32615 
   32616    * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
   32617      _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0],
   32618      D3[0]}, [R0]'
   32619 
   32620 6.54.3.76 Logical operations (AND)
   32621 ..................................
   32622 
   32623    * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
   32624      _Form of expected instruction(s):_ `vand D0, D0, D0'
   32625 
   32626    * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
   32627      _Form of expected instruction(s):_ `vand D0, D0, D0'
   32628 
   32629    * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
   32630      _Form of expected instruction(s):_ `vand D0, D0, D0'
   32631 
   32632    * int32x2_t vand_s32 (int32x2_t, int32x2_t)
   32633      _Form of expected instruction(s):_ `vand D0, D0, D0'
   32634 
   32635    * int16x4_t vand_s16 (int16x4_t, int16x4_t)
   32636      _Form of expected instruction(s):_ `vand D0, D0, D0'
   32637 
   32638    * int8x8_t vand_s8 (int8x8_t, int8x8_t)
   32639      _Form of expected instruction(s):_ `vand D0, D0, D0'
   32640 
   32641    * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)
   32642 
   32643    * int64x1_t vand_s64 (int64x1_t, int64x1_t)
   32644 
   32645    * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
   32646      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32647 
   32648    * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
   32649      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32650 
   32651    * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
   32652      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32653 
   32654    * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
   32655      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32656 
   32657    * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
   32658      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32659 
   32660    * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
   32661      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32662 
   32663    * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
   32664      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32665 
   32666    * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
   32667      _Form of expected instruction(s):_ `vand Q0, Q0, Q0'
   32668 
   32669 6.54.3.77 Logical operations (OR)
   32670 .................................
   32671 
   32672    * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
   32673      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   32674 
   32675    * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
   32676      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   32677 
   32678    * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
   32679      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   32680 
   32681    * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
   32682      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   32683 
   32684    * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
   32685      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   32686 
   32687    * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
   32688      _Form of expected instruction(s):_ `vorr D0, D0, D0'
   32689 
   32690    * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)
   32691 
   32692    * int64x1_t vorr_s64 (int64x1_t, int64x1_t)
   32693 
   32694    * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
   32695      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32696 
   32697    * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
   32698      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32699 
   32700    * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
   32701      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32702 
   32703    * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
   32704      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32705 
   32706    * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
   32707      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32708 
   32709    * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
   32710      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32711 
   32712    * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
   32713      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32714 
   32715    * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
   32716      _Form of expected instruction(s):_ `vorr Q0, Q0, Q0'
   32717 
   32718 6.54.3.78 Logical operations (exclusive OR)
   32719 ...........................................
   32720 
   32721    * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
   32722      _Form of expected instruction(s):_ `veor D0, D0, D0'
   32723 
   32724    * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
   32725      _Form of expected instruction(s):_ `veor D0, D0, D0'
   32726 
   32727    * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
   32728      _Form of expected instruction(s):_ `veor D0, D0, D0'
   32729 
   32730    * int32x2_t veor_s32 (int32x2_t, int32x2_t)
   32731      _Form of expected instruction(s):_ `veor D0, D0, D0'
   32732 
   32733    * int16x4_t veor_s16 (int16x4_t, int16x4_t)
   32734      _Form of expected instruction(s):_ `veor D0, D0, D0'
   32735 
   32736    * int8x8_t veor_s8 (int8x8_t, int8x8_t)
   32737      _Form of expected instruction(s):_ `veor D0, D0, D0'
   32738 
   32739    * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)
   32740 
   32741    * int64x1_t veor_s64 (int64x1_t, int64x1_t)
   32742 
   32743    * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
   32744      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32745 
   32746    * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
   32747      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32748 
   32749    * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
   32750      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32751 
   32752    * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
   32753      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32754 
   32755    * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
   32756      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32757 
   32758    * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
   32759      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32760 
   32761    * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
   32762      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32763 
   32764    * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
   32765      _Form of expected instruction(s):_ `veor Q0, Q0, Q0'
   32766 
   32767 6.54.3.79 Logical operations (AND-NOT)
   32768 ......................................
   32769 
   32770    * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
   32771      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   32772 
   32773    * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
   32774      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   32775 
   32776    * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
   32777      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   32778 
   32779    * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
   32780      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   32781 
   32782    * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
   32783      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   32784 
   32785    * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
   32786      _Form of expected instruction(s):_ `vbic D0, D0, D0'
   32787 
   32788    * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)
   32789 
   32790    * int64x1_t vbic_s64 (int64x1_t, int64x1_t)
   32791 
   32792    * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
   32793      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32794 
   32795    * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
   32796      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32797 
   32798    * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
   32799      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32800 
   32801    * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
   32802      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32803 
   32804    * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
   32805      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32806 
   32807    * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
   32808      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32809 
   32810    * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
   32811      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32812 
   32813    * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
   32814      _Form of expected instruction(s):_ `vbic Q0, Q0, Q0'
   32815 
   32816 6.54.3.80 Logical operations (OR-NOT)
   32817 .....................................
   32818 
   32819    * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
   32820      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   32821 
   32822    * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
   32823      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   32824 
   32825    * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
   32826      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   32827 
   32828    * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
   32829      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   32830 
   32831    * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
   32832      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   32833 
   32834    * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
   32835      _Form of expected instruction(s):_ `vorn D0, D0, D0'
   32836 
   32837    * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)
   32838 
   32839    * int64x1_t vorn_s64 (int64x1_t, int64x1_t)
   32840 
   32841    * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
   32842      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32843 
   32844    * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
   32845      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32846 
   32847    * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
   32848      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32849 
   32850    * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
   32851      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32852 
   32853    * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
   32854      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32855 
   32856    * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
   32857      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32858 
   32859    * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
   32860      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32861 
   32862    * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
   32863      _Form of expected instruction(s):_ `vorn Q0, Q0, Q0'
   32864 
   32865 6.54.3.81 Reinterpret casts
   32866 ...........................
   32867 
   32868    * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)
   32869 
   32870    * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)
   32871 
   32872    * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)
   32873 
   32874    * poly8x8_t vreinterpret_p8_s32 (int32x2_t)
   32875 
   32876    * poly8x8_t vreinterpret_p8_s16 (int16x4_t)
   32877 
   32878    * poly8x8_t vreinterpret_p8_s8 (int8x8_t)
   32879 
   32880    * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)
   32881 
   32882    * poly8x8_t vreinterpret_p8_s64 (int64x1_t)
   32883 
   32884    * poly8x8_t vreinterpret_p8_f32 (float32x2_t)
   32885 
   32886    * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)
   32887 
   32888    * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)
   32889 
   32890    * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)
   32891 
   32892    * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)
   32893 
   32894    * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)
   32895 
   32896    * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)
   32897 
   32898    * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)
   32899 
   32900    * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)
   32901 
   32902    * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)
   32903 
   32904    * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)
   32905 
   32906    * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)
   32907 
   32908    * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)
   32909 
   32910    * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)
   32911 
   32912    * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)
   32913 
   32914    * poly16x4_t vreinterpret_p16_s32 (int32x2_t)
   32915 
   32916    * poly16x4_t vreinterpret_p16_s16 (int16x4_t)
   32917 
   32918    * poly16x4_t vreinterpret_p16_s8 (int8x8_t)
   32919 
   32920    * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)
   32921 
   32922    * poly16x4_t vreinterpret_p16_s64 (int64x1_t)
   32923 
   32924    * poly16x4_t vreinterpret_p16_f32 (float32x2_t)
   32925 
   32926    * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)
   32927 
   32928    * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)
   32929 
   32930    * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)
   32931 
   32932    * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)
   32933 
   32934    * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)
   32935 
   32936    * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)
   32937 
   32938    * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)
   32939 
   32940    * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)
   32941 
   32942    * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)
   32943 
   32944    * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)
   32945 
   32946    * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)
   32947 
   32948    * float32x2_t vreinterpret_f32_u32 (uint32x2_t)
   32949 
   32950    * float32x2_t vreinterpret_f32_u16 (uint16x4_t)
   32951 
   32952    * float32x2_t vreinterpret_f32_u8 (uint8x8_t)
   32953 
   32954    * float32x2_t vreinterpret_f32_s32 (int32x2_t)
   32955 
   32956    * float32x2_t vreinterpret_f32_s16 (int16x4_t)
   32957 
   32958    * float32x2_t vreinterpret_f32_s8 (int8x8_t)
   32959 
   32960    * float32x2_t vreinterpret_f32_u64 (uint64x1_t)
   32961 
   32962    * float32x2_t vreinterpret_f32_s64 (int64x1_t)
   32963 
   32964    * float32x2_t vreinterpret_f32_p16 (poly16x4_t)
   32965 
   32966    * float32x2_t vreinterpret_f32_p8 (poly8x8_t)
   32967 
   32968    * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)
   32969 
   32970    * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)
   32971 
   32972    * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)
   32973 
   32974    * float32x4_t vreinterpretq_f32_s32 (int32x4_t)
   32975 
   32976    * float32x4_t vreinterpretq_f32_s16 (int16x8_t)
   32977 
   32978    * float32x4_t vreinterpretq_f32_s8 (int8x16_t)
   32979 
   32980    * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)
   32981 
   32982    * float32x4_t vreinterpretq_f32_s64 (int64x2_t)
   32983 
   32984    * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)
   32985 
   32986    * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)
   32987 
   32988    * int64x1_t vreinterpret_s64_u32 (uint32x2_t)
   32989 
   32990    * int64x1_t vreinterpret_s64_u16 (uint16x4_t)
   32991 
   32992    * int64x1_t vreinterpret_s64_u8 (uint8x8_t)
   32993 
   32994    * int64x1_t vreinterpret_s64_s32 (int32x2_t)
   32995 
   32996    * int64x1_t vreinterpret_s64_s16 (int16x4_t)
   32997 
   32998    * int64x1_t vreinterpret_s64_s8 (int8x8_t)
   32999 
   33000    * int64x1_t vreinterpret_s64_u64 (uint64x1_t)
   33001 
   33002    * int64x1_t vreinterpret_s64_f32 (float32x2_t)
   33003 
   33004    * int64x1_t vreinterpret_s64_p16 (poly16x4_t)
   33005 
   33006    * int64x1_t vreinterpret_s64_p8 (poly8x8_t)
   33007 
   33008    * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)
   33009 
   33010    * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)
   33011 
   33012    * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)
   33013 
   33014    * int64x2_t vreinterpretq_s64_s32 (int32x4_t)
   33015 
   33016    * int64x2_t vreinterpretq_s64_s16 (int16x8_t)
   33017 
   33018    * int64x2_t vreinterpretq_s64_s8 (int8x16_t)
   33019 
   33020    * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)
   33021 
   33022    * int64x2_t vreinterpretq_s64_f32 (float32x4_t)
   33023 
   33024    * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)
   33025 
   33026    * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)
   33027 
   33028    * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)
   33029 
   33030    * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)
   33031 
   33032    * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)
   33033 
   33034    * uint64x1_t vreinterpret_u64_s32 (int32x2_t)
   33035 
   33036    * uint64x1_t vreinterpret_u64_s16 (int16x4_t)
   33037 
   33038    * uint64x1_t vreinterpret_u64_s8 (int8x8_t)
   33039 
   33040    * uint64x1_t vreinterpret_u64_s64 (int64x1_t)
   33041 
   33042    * uint64x1_t vreinterpret_u64_f32 (float32x2_t)
   33043 
   33044    * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)
   33045 
   33046    * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)
   33047 
   33048    * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)
   33049 
   33050    * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)
   33051 
   33052    * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)
   33053 
   33054    * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)
   33055 
   33056    * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)
   33057 
   33058    * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)
   33059 
   33060    * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)
   33061 
   33062    * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)
   33063 
   33064    * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)
   33065 
   33066    * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)
   33067 
   33068    * int8x8_t vreinterpret_s8_u32 (uint32x2_t)
   33069 
   33070    * int8x8_t vreinterpret_s8_u16 (uint16x4_t)
   33071 
   33072    * int8x8_t vreinterpret_s8_u8 (uint8x8_t)
   33073 
   33074    * int8x8_t vreinterpret_s8_s32 (int32x2_t)
   33075 
   33076    * int8x8_t vreinterpret_s8_s16 (int16x4_t)
   33077 
   33078    * int8x8_t vreinterpret_s8_u64 (uint64x1_t)
   33079 
   33080    * int8x8_t vreinterpret_s8_s64 (int64x1_t)
   33081 
   33082    * int8x8_t vreinterpret_s8_f32 (float32x2_t)
   33083 
   33084    * int8x8_t vreinterpret_s8_p16 (poly16x4_t)
   33085 
   33086    * int8x8_t vreinterpret_s8_p8 (poly8x8_t)
   33087 
   33088    * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)
   33089 
   33090    * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)
   33091 
   33092    * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)
   33093 
   33094    * int8x16_t vreinterpretq_s8_s32 (int32x4_t)
   33095 
   33096    * int8x16_t vreinterpretq_s8_s16 (int16x8_t)
   33097 
   33098    * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)
   33099 
   33100    * int8x16_t vreinterpretq_s8_s64 (int64x2_t)
   33101 
   33102    * int8x16_t vreinterpretq_s8_f32 (float32x4_t)
   33103 
   33104    * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)
   33105 
   33106    * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)
   33107 
   33108    * int16x4_t vreinterpret_s16_u32 (uint32x2_t)
   33109 
   33110    * int16x4_t vreinterpret_s16_u16 (uint16x4_t)
   33111 
   33112    * int16x4_t vreinterpret_s16_u8 (uint8x8_t)
   33113 
   33114    * int16x4_t vreinterpret_s16_s32 (int32x2_t)
   33115 
   33116    * int16x4_t vreinterpret_s16_s8 (int8x8_t)
   33117 
   33118    * int16x4_t vreinterpret_s16_u64 (uint64x1_t)
   33119 
   33120    * int16x4_t vreinterpret_s16_s64 (int64x1_t)
   33121 
   33122    * int16x4_t vreinterpret_s16_f32 (float32x2_t)
   33123 
   33124    * int16x4_t vreinterpret_s16_p16 (poly16x4_t)
   33125 
   33126    * int16x4_t vreinterpret_s16_p8 (poly8x8_t)
   33127 
   33128    * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)
   33129 
   33130    * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)
   33131 
   33132    * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)
   33133 
   33134    * int16x8_t vreinterpretq_s16_s32 (int32x4_t)
   33135 
   33136    * int16x8_t vreinterpretq_s16_s8 (int8x16_t)
   33137 
   33138    * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)
   33139 
   33140    * int16x8_t vreinterpretq_s16_s64 (int64x2_t)
   33141 
   33142    * int16x8_t vreinterpretq_s16_f32 (float32x4_t)
   33143 
   33144    * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)
   33145 
   33146    * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)
   33147 
   33148    * int32x2_t vreinterpret_s32_u32 (uint32x2_t)
   33149 
   33150    * int32x2_t vreinterpret_s32_u16 (uint16x4_t)
   33151 
   33152    * int32x2_t vreinterpret_s32_u8 (uint8x8_t)
   33153 
   33154    * int32x2_t vreinterpret_s32_s16 (int16x4_t)
   33155 
   33156    * int32x2_t vreinterpret_s32_s8 (int8x8_t)
   33157 
   33158    * int32x2_t vreinterpret_s32_u64 (uint64x1_t)
   33159 
   33160    * int32x2_t vreinterpret_s32_s64 (int64x1_t)
   33161 
   33162    * int32x2_t vreinterpret_s32_f32 (float32x2_t)
   33163 
   33164    * int32x2_t vreinterpret_s32_p16 (poly16x4_t)
   33165 
   33166    * int32x2_t vreinterpret_s32_p8 (poly8x8_t)
   33167 
   33168    * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)
   33169 
   33170    * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)
   33171 
   33172    * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)
   33173 
   33174    * int32x4_t vreinterpretq_s32_s16 (int16x8_t)
   33175 
   33176    * int32x4_t vreinterpretq_s32_s8 (int8x16_t)
   33177 
   33178    * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)
   33179 
   33180    * int32x4_t vreinterpretq_s32_s64 (int64x2_t)
   33181 
   33182    * int32x4_t vreinterpretq_s32_f32 (float32x4_t)
   33183 
   33184    * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)
   33185 
   33186    * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)
   33187 
   33188    * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)
   33189 
   33190    * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)
   33191 
   33192    * uint8x8_t vreinterpret_u8_s32 (int32x2_t)
   33193 
   33194    * uint8x8_t vreinterpret_u8_s16 (int16x4_t)
   33195 
   33196    * uint8x8_t vreinterpret_u8_s8 (int8x8_t)
   33197 
   33198    * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)
   33199 
   33200    * uint8x8_t vreinterpret_u8_s64 (int64x1_t)
   33201 
   33202    * uint8x8_t vreinterpret_u8_f32 (float32x2_t)
   33203 
   33204    * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)
   33205 
   33206    * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)
   33207 
   33208    * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)
   33209 
   33210    * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)
   33211 
   33212    * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)
   33213 
   33214    * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)
   33215 
   33216    * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)
   33217 
   33218    * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)
   33219 
   33220    * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)
   33221 
   33222    * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)
   33223 
   33224    * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)
   33225 
   33226    * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)
   33227 
   33228    * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)
   33229 
   33230    * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)
   33231 
   33232    * uint16x4_t vreinterpret_u16_s32 (int32x2_t)
   33233 
   33234    * uint16x4_t vreinterpret_u16_s16 (int16x4_t)
   33235 
   33236    * uint16x4_t vreinterpret_u16_s8 (int8x8_t)
   33237 
   33238    * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)
   33239 
   33240    * uint16x4_t vreinterpret_u16_s64 (int64x1_t)
   33241 
   33242    * uint16x4_t vreinterpret_u16_f32 (float32x2_t)
   33243 
   33244    * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)
   33245 
   33246    * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)
   33247 
   33248    * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)
   33249 
   33250    * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)
   33251 
   33252    * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)
   33253 
   33254    * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)
   33255 
   33256    * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)
   33257 
   33258    * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)
   33259 
   33260    * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)
   33261 
   33262    * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)
   33263 
   33264    * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)
   33265 
   33266    * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)
   33267 
   33268    * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)
   33269 
   33270    * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)
   33271 
   33272    * uint32x2_t vreinterpret_u32_s32 (int32x2_t)
   33273 
   33274    * uint32x2_t vreinterpret_u32_s16 (int16x4_t)
   33275 
   33276    * uint32x2_t vreinterpret_u32_s8 (int8x8_t)
   33277 
   33278    * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)
   33279 
   33280    * uint32x2_t vreinterpret_u32_s64 (int64x1_t)
   33281 
   33282    * uint32x2_t vreinterpret_u32_f32 (float32x2_t)
   33283 
   33284    * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)
   33285 
   33286    * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)
   33287 
   33288    * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)
   33289 
   33290    * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)
   33291 
   33292    * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)
   33293 
   33294    * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)
   33295 
   33296    * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)
   33297 
   33298    * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)
   33299 
   33300    * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)
   33301 
   33302    * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)
   33303 
   33304    * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)
   33305 
   33306    * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)
   33307 
   33308 
   33309 File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins
   33310 
   33311 6.54.4 Blackfin Built-in Functions
   33312 ----------------------------------
   33313 
   33314 Currently, there are two Blackfin-specific built-in functions.  These
   33315 are used for generating `CSYNC' and `SSYNC' machine insns without using
   33316 inline assembly; by using these built-in functions the compiler can
   33317 automatically add workarounds for hardware errata involving these
   33318 instructions.  These functions are named as follows:
   33319 
   33320      void __builtin_bfin_csync (void)
   33321      void __builtin_bfin_ssync (void)
   33322 
   33323 
   33324 File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
   33325 
   33326 6.54.5 FR-V Built-in Functions
   33327 ------------------------------
   33328 
   33329 GCC provides many FR-V-specific built-in functions.  In general, these
   33330 functions are intended to be compatible with those described by `FR-V
   33331 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
   33332 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
   33333 which pass 128-bit values by pointer rather than by value.
   33334 
   33335  Most of the functions are named after specific FR-V instructions.
   33336 Such functions are said to be "directly mapped" and are summarized here
   33337 in tabular form.
   33338 
   33339 * Menu:
   33340 
   33341 * Argument Types::
   33342 * Directly-mapped Integer Functions::
   33343 * Directly-mapped Media Functions::
   33344 * Raw read/write Functions::
   33345 * Other Built-in Functions::
   33346 
   33347 
   33348 File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   33349 
   33350 6.54.5.1 Argument Types
   33351 .......................
   33352 
   33353 The arguments to the built-in functions can be divided into three
   33354 groups: register numbers, compile-time constants and run-time values.
   33355 In order to make this classification clear at a glance, the arguments
   33356 and return values are given the following pseudo types:
   33357 
   33358 Pseudo type    Real C type            Constant?   Description
   33359 `uh'           `unsigned short'       No          an unsigned halfword
   33360 `uw1'          `unsigned int'         No          an unsigned word
   33361 `sw1'          `int'                  No          a signed word
   33362 `uw2'          `unsigned long long'   No          an unsigned doubleword
   33363 `sw2'          `long long'            No          a signed doubleword
   33364 `const'        `int'                  Yes         an integer constant
   33365 `acc'          `int'                  Yes         an ACC register number
   33366 `iacc'         `int'                  Yes         an IACC register number
   33367 
   33368  These pseudo types are not defined by GCC, they are simply a notational
   33369 convenience used in this manual.
   33370 
   33371  Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
   33372 run time.  They correspond to register operands in the underlying FR-V
   33373 instructions.
   33374 
   33375  `const' arguments represent immediate operands in the underlying FR-V
   33376 instructions.  They must be compile-time constants.
   33377 
   33378  `acc' arguments are evaluated at compile time and specify the number
   33379 of an accumulator register.  For example, an `acc' argument of 2 will
   33380 select the ACC2 register.
   33381 
   33382  `iacc' arguments are similar to `acc' arguments but specify the number
   33383 of an IACC register.  See *note Other Built-in Functions:: for more
   33384 details.
   33385 
   33386 
   33387 File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
   33388 
   33389 6.54.5.2 Directly-mapped Integer Functions
   33390 ..........................................
   33391 
   33392 The functions listed below map directly to FR-V I-type instructions.
   33393 
   33394 Function prototype               Example usage           Assembly output
   33395 `sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
   33396 `sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
   33397 `sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
   33398 `sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
   33399 `void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
   33400 `void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
   33401 `void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
   33402 `sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
   33403 `sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
   33404 `uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
   33405 
   33406 
   33407 File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
   33408 
   33409 6.54.5.3 Directly-mapped Media Functions
   33410 ........................................
   33411 
   33412 The functions listed below map directly to FR-V M-type instructions.
   33413 
   33414 Function prototype               Example usage           Assembly output
   33415 `uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
   33416 `void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
   33417 `sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
   33418 `uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
   33419 `uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
   33420 `void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
   33421 `uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
   33422 `uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
   33423 `void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
   33424 `void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
   33425 `void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
   33426 `uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
   33427 `uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
   33428 `uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
   33429 `uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
   33430 `void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
   33431 `void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
   33432 `void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
   33433 `void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
   33434 `uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
   33435 `uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
   33436 `void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
   33437 `void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
   33438 `uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
   33439 `uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
   33440 `uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
   33441 `void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
   33442 `void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
   33443 `uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
   33444 `uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
   33445 `uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
   33446 `sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
   33447 `uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
   33448 `sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
   33449 `uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
   33450 `sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
   33451 `uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
   33452 `void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
   33453 `void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
   33454 `void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
   33455 `void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
   33456 `void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
   33457 `void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
   33458 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
   33459 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
   33460 `uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
   33461 `uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
   33462 `uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
   33463 `sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
   33464 `uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
   33465 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
   33466 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
   33467 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
   33468 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
   33469 `sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
   33470 `sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
   33471 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
   33472 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
   33473 `void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
   33474 sw2)'                                                    
   33475 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
   33476 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
   33477 `void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
   33478 sw2)'                                                    
   33479 `void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
   33480 uw2)'                                                    
   33481 `sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
   33482 `uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
   33483 `sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
   33484 `sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
   33485 `uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
   33486 `void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
   33487 sw2)'                                                    
   33488 `void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
   33489 sw2)'                                                    
   33490 `uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
   33491 `uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
   33492 `uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
   33493 `uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
   33494 `sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
   33495 `uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
   33496 `uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
   33497 `sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
   33498 `uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
   33499 `void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
   33500 `sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
   33501 `uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
   33502 `void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
   33503 `uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
   33504 `uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
   33505 `void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
   33506 `void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
   33507 `uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
   33508 
   33509 
   33510 File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
   33511 
   33512 6.54.5.4 Raw read/write Functions
   33513 .................................
   33514 
   33515 This sections describes built-in functions related to read and write
   33516 instructions to access memory.  These functions generate `membar'
   33517 instructions to flush the I/O load and stores where appropriate, as
   33518 described in Fujitsu's manual described above.
   33519 
   33520 `unsigned char __builtin_read8 (void *DATA)'
   33521 
   33522 `unsigned short __builtin_read16 (void *DATA)'
   33523 
   33524 `unsigned long __builtin_read32 (void *DATA)'
   33525 
   33526 `unsigned long long __builtin_read64 (void *DATA)'
   33527 
   33528 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
   33529 
   33530 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
   33531 
   33532 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
   33533 
   33534 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
   33535 
   33536 
   33537 File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
   33538 
   33539 6.54.5.5 Other Built-in Functions
   33540 .................................
   33541 
   33542 This section describes built-in functions that are not named after a
   33543 specific FR-V instruction.
   33544 
   33545 `sw2 __IACCreadll (iacc REG)'
   33546      Return the full 64-bit value of IACC0.  The REG argument is
   33547      reserved for future expansion and must be 0.
   33548 
   33549 `sw1 __IACCreadl (iacc REG)'
   33550      Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
   33551      Other values of REG are rejected as invalid.
   33552 
   33553 `void __IACCsetll (iacc REG, sw2 X)'
   33554      Set the full 64-bit value of IACC0 to X.  The REG argument is
   33555      reserved for future expansion and must be 0.
   33556 
   33557 `void __IACCsetl (iacc REG, sw1 X)'
   33558      Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
   33559      values of REG are rejected as invalid.
   33560 
   33561 `void __data_prefetch0 (const void *X)'
   33562      Use the `dcpl' instruction to load the contents of address X into
   33563      the data cache.
   33564 
   33565 `void __data_prefetch (const void *X)'
   33566      Use the `nldub' instruction to load the contents of address X into
   33567      the data cache.  The instruction will be issued in slot I1.
   33568 
   33569 
   33570 File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
   33571 
   33572 6.54.6 X86 Built-in Functions
   33573 -----------------------------
   33574 
   33575 These built-in functions are available for the i386 and x86-64 family
   33576 of computers, depending on the command-line switches used.
   33577 
   33578  Note that, if you specify command-line switches such as `-msse', the
   33579 compiler could use the extended instruction sets even if the built-ins
   33580 are not used explicitly in the program.  For this reason, applications
   33581 which perform runtime CPU detection must compile separate files for each
   33582 supported architecture, using the appropriate flags.  In particular,
   33583 the file containing the CPU detection code should be compiled without
   33584 these options.
   33585 
   33586  The following machine modes are available for use with MMX built-in
   33587 functions (*note Vector Extensions::): `V2SI' for a vector of two
   33588 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
   33589 `V8QI' for a vector of eight 8-bit integers.  Some of the built-in
   33590 functions operate on MMX registers as a whole 64-bit entity, these use
   33591 `V1DI' as their mode.
   33592 
   33593  If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
   33594 of two 32-bit floating point values.
   33595 
   33596  If SSE extensions are enabled, `V4SF' is used for a vector of four
   33597 32-bit floating point values.  Some instructions use a vector of four
   33598 32-bit integers, these use `V4SI'.  Finally, some instructions operate
   33599 on an entire vector register, interpreting it as a 128-bit integer,
   33600 these use mode `TI'.
   33601 
   33602  In 64-bit mode, the x86-64 family of processors uses additional
   33603 built-in functions for efficient use of `TF' (`__float128') 128-bit
   33604 floating point and `TC' 128-bit complex floating point values.
   33605 
   33606  The following floating point built-in functions are available in 64-bit
   33607 mode.  All of them implement the function that is part of the name.
   33608 
   33609      __float128 __builtin_fabsq (__float128)
   33610      __float128 __builtin_copysignq (__float128, __float128)
   33611 
   33612  The following floating point built-in functions are made available in
   33613 the 64-bit mode.
   33614 
   33615 `__float128 __builtin_infq (void)'
   33616      Similar to `__builtin_inf', except the return type is `__float128'.  
   33617 
   33618 `__float128 __builtin_huge_valq (void)'
   33619      Similar to `__builtin_huge_val', except the return type is
   33620      `__float128'.  
   33621 
   33622  The following built-in functions are made available by `-mmmx'.  All
   33623 of them generate the machine instruction that is part of the name.
   33624 
   33625      v8qi __builtin_ia32_paddb (v8qi, v8qi)
   33626      v4hi __builtin_ia32_paddw (v4hi, v4hi)
   33627      v2si __builtin_ia32_paddd (v2si, v2si)
   33628      v8qi __builtin_ia32_psubb (v8qi, v8qi)
   33629      v4hi __builtin_ia32_psubw (v4hi, v4hi)
   33630      v2si __builtin_ia32_psubd (v2si, v2si)
   33631      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
   33632      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
   33633      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
   33634      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
   33635      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
   33636      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
   33637      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
   33638      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
   33639      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
   33640      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
   33641      di __builtin_ia32_pand (di, di)
   33642      di __builtin_ia32_pandn (di,di)
   33643      di __builtin_ia32_por (di, di)
   33644      di __builtin_ia32_pxor (di, di)
   33645      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
   33646      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
   33647      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
   33648      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
   33649      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
   33650      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
   33651      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
   33652      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
   33653      v2si __builtin_ia32_punpckhdq (v2si, v2si)
   33654      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
   33655      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
   33656      v2si __builtin_ia32_punpckldq (v2si, v2si)
   33657      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
   33658      v4hi __builtin_ia32_packssdw (v2si, v2si)
   33659      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
   33660 
   33661      v4hi __builtin_ia32_psllw (v4hi, v4hi)
   33662      v2si __builtin_ia32_pslld (v2si, v2si)
   33663      v1di __builtin_ia32_psllq (v1di, v1di)
   33664      v4hi __builtin_ia32_psrlw (v4hi, v4hi)
   33665      v2si __builtin_ia32_psrld (v2si, v2si)
   33666      v1di __builtin_ia32_psrlq (v1di, v1di)
   33667      v4hi __builtin_ia32_psraw (v4hi, v4hi)
   33668      v2si __builtin_ia32_psrad (v2si, v2si)
   33669      v4hi __builtin_ia32_psllwi (v4hi, int)
   33670      v2si __builtin_ia32_pslldi (v2si, int)
   33671      v1di __builtin_ia32_psllqi (v1di, int)
   33672      v4hi __builtin_ia32_psrlwi (v4hi, int)
   33673      v2si __builtin_ia32_psrldi (v2si, int)
   33674      v1di __builtin_ia32_psrlqi (v1di, int)
   33675      v4hi __builtin_ia32_psrawi (v4hi, int)
   33676      v2si __builtin_ia32_psradi (v2si, int)
   33677 
   33678  The following built-in functions are made available either with
   33679 `-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
   33680 of them generate the machine instruction that is part of the name.
   33681 
   33682      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
   33683      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
   33684      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
   33685      v1di __builtin_ia32_psadbw (v8qi, v8qi)
   33686      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
   33687      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
   33688      v8qi __builtin_ia32_pminub (v8qi, v8qi)
   33689      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
   33690      int __builtin_ia32_pextrw (v4hi, int)
   33691      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
   33692      int __builtin_ia32_pmovmskb (v8qi)
   33693      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
   33694      void __builtin_ia32_movntq (di *, di)
   33695      void __builtin_ia32_sfence (void)
   33696 
   33697  The following built-in functions are available when `-msse' is used.
   33698 All of them generate the machine instruction that is part of the name.
   33699 
   33700      int __builtin_ia32_comieq (v4sf, v4sf)
   33701      int __builtin_ia32_comineq (v4sf, v4sf)
   33702      int __builtin_ia32_comilt (v4sf, v4sf)
   33703      int __builtin_ia32_comile (v4sf, v4sf)
   33704      int __builtin_ia32_comigt (v4sf, v4sf)
   33705      int __builtin_ia32_comige (v4sf, v4sf)
   33706      int __builtin_ia32_ucomieq (v4sf, v4sf)
   33707      int __builtin_ia32_ucomineq (v4sf, v4sf)
   33708      int __builtin_ia32_ucomilt (v4sf, v4sf)
   33709      int __builtin_ia32_ucomile (v4sf, v4sf)
   33710      int __builtin_ia32_ucomigt (v4sf, v4sf)
   33711      int __builtin_ia32_ucomige (v4sf, v4sf)
   33712      v4sf __builtin_ia32_addps (v4sf, v4sf)
   33713      v4sf __builtin_ia32_subps (v4sf, v4sf)
   33714      v4sf __builtin_ia32_mulps (v4sf, v4sf)
   33715      v4sf __builtin_ia32_divps (v4sf, v4sf)
   33716      v4sf __builtin_ia32_addss (v4sf, v4sf)
   33717      v4sf __builtin_ia32_subss (v4sf, v4sf)
   33718      v4sf __builtin_ia32_mulss (v4sf, v4sf)
   33719      v4sf __builtin_ia32_divss (v4sf, v4sf)
   33720      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
   33721      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
   33722      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
   33723      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
   33724      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
   33725      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
   33726      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
   33727      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
   33728      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
   33729      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
   33730      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
   33731      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
   33732      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
   33733      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
   33734      v4si __builtin_ia32_cmpless (v4sf, v4sf)
   33735      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
   33736      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
   33737      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
   33738      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
   33739      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
   33740      v4sf __builtin_ia32_maxps (v4sf, v4sf)
   33741      v4sf __builtin_ia32_maxss (v4sf, v4sf)
   33742      v4sf __builtin_ia32_minps (v4sf, v4sf)
   33743      v4sf __builtin_ia32_minss (v4sf, v4sf)
   33744      v4sf __builtin_ia32_andps (v4sf, v4sf)
   33745      v4sf __builtin_ia32_andnps (v4sf, v4sf)
   33746      v4sf __builtin_ia32_orps (v4sf, v4sf)
   33747      v4sf __builtin_ia32_xorps (v4sf, v4sf)
   33748      v4sf __builtin_ia32_movss (v4sf, v4sf)
   33749      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
   33750      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
   33751      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
   33752      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
   33753      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
   33754      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
   33755      v2si __builtin_ia32_cvtps2pi (v4sf)
   33756      int __builtin_ia32_cvtss2si (v4sf)
   33757      v2si __builtin_ia32_cvttps2pi (v4sf)
   33758      int __builtin_ia32_cvttss2si (v4sf)
   33759      v4sf __builtin_ia32_rcpps (v4sf)
   33760      v4sf __builtin_ia32_rsqrtps (v4sf)
   33761      v4sf __builtin_ia32_sqrtps (v4sf)
   33762      v4sf __builtin_ia32_rcpss (v4sf)
   33763      v4sf __builtin_ia32_rsqrtss (v4sf)
   33764      v4sf __builtin_ia32_sqrtss (v4sf)
   33765      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
   33766      void __builtin_ia32_movntps (float *, v4sf)
   33767      int __builtin_ia32_movmskps (v4sf)
   33768 
   33769  The following built-in functions are available when `-msse' is used.
   33770 
   33771 `v4sf __builtin_ia32_loadaps (float *)'
   33772      Generates the `movaps' machine instruction as a load from memory.
   33773 
   33774 `void __builtin_ia32_storeaps (float *, v4sf)'
   33775      Generates the `movaps' machine instruction as a store to memory.
   33776 
   33777 `v4sf __builtin_ia32_loadups (float *)'
   33778      Generates the `movups' machine instruction as a load from memory.
   33779 
   33780 `void __builtin_ia32_storeups (float *, v4sf)'
   33781      Generates the `movups' machine instruction as a store to memory.
   33782 
   33783 `v4sf __builtin_ia32_loadsss (float *)'
   33784      Generates the `movss' machine instruction as a load from memory.
   33785 
   33786 `void __builtin_ia32_storess (float *, v4sf)'
   33787      Generates the `movss' machine instruction as a store to memory.
   33788 
   33789 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
   33790      Generates the `movhps' machine instruction as a load from memory.
   33791 
   33792 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
   33793      Generates the `movlps' machine instruction as a load from memory
   33794 
   33795 `void __builtin_ia32_storehps (v2sf *, v4sf)'
   33796      Generates the `movhps' machine instruction as a store to memory.
   33797 
   33798 `void __builtin_ia32_storelps (v2sf *, v4sf)'
   33799      Generates the `movlps' machine instruction as a store to memory.
   33800 
   33801  The following built-in functions are available when `-msse2' is used.
   33802 All of them generate the machine instruction that is part of the name.
   33803 
   33804      int __builtin_ia32_comisdeq (v2df, v2df)
   33805      int __builtin_ia32_comisdlt (v2df, v2df)
   33806      int __builtin_ia32_comisdle (v2df, v2df)
   33807      int __builtin_ia32_comisdgt (v2df, v2df)
   33808      int __builtin_ia32_comisdge (v2df, v2df)
   33809      int __builtin_ia32_comisdneq (v2df, v2df)
   33810      int __builtin_ia32_ucomisdeq (v2df, v2df)
   33811      int __builtin_ia32_ucomisdlt (v2df, v2df)
   33812      int __builtin_ia32_ucomisdle (v2df, v2df)
   33813      int __builtin_ia32_ucomisdgt (v2df, v2df)
   33814      int __builtin_ia32_ucomisdge (v2df, v2df)
   33815      int __builtin_ia32_ucomisdneq (v2df, v2df)
   33816      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
   33817      v2df __builtin_ia32_cmpltpd (v2df, v2df)
   33818      v2df __builtin_ia32_cmplepd (v2df, v2df)
   33819      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
   33820      v2df __builtin_ia32_cmpgepd (v2df, v2df)
   33821      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
   33822      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
   33823      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
   33824      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
   33825      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
   33826      v2df __builtin_ia32_cmpngepd (v2df, v2df)
   33827      v2df __builtin_ia32_cmpordpd (v2df, v2df)
   33828      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
   33829      v2df __builtin_ia32_cmpltsd (v2df, v2df)
   33830      v2df __builtin_ia32_cmplesd (v2df, v2df)
   33831      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
   33832      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
   33833      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
   33834      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
   33835      v2df __builtin_ia32_cmpordsd (v2df, v2df)
   33836      v2di __builtin_ia32_paddq (v2di, v2di)
   33837      v2di __builtin_ia32_psubq (v2di, v2di)
   33838      v2df __builtin_ia32_addpd (v2df, v2df)
   33839      v2df __builtin_ia32_subpd (v2df, v2df)
   33840      v2df __builtin_ia32_mulpd (v2df, v2df)
   33841      v2df __builtin_ia32_divpd (v2df, v2df)
   33842      v2df __builtin_ia32_addsd (v2df, v2df)
   33843      v2df __builtin_ia32_subsd (v2df, v2df)
   33844      v2df __builtin_ia32_mulsd (v2df, v2df)
   33845      v2df __builtin_ia32_divsd (v2df, v2df)
   33846      v2df __builtin_ia32_minpd (v2df, v2df)
   33847      v2df __builtin_ia32_maxpd (v2df, v2df)
   33848      v2df __builtin_ia32_minsd (v2df, v2df)
   33849      v2df __builtin_ia32_maxsd (v2df, v2df)
   33850      v2df __builtin_ia32_andpd (v2df, v2df)
   33851      v2df __builtin_ia32_andnpd (v2df, v2df)
   33852      v2df __builtin_ia32_orpd (v2df, v2df)
   33853      v2df __builtin_ia32_xorpd (v2df, v2df)
   33854      v2df __builtin_ia32_movsd (v2df, v2df)
   33855      v2df __builtin_ia32_unpckhpd (v2df, v2df)
   33856      v2df __builtin_ia32_unpcklpd (v2df, v2df)
   33857      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
   33858      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
   33859      v4si __builtin_ia32_paddd128 (v4si, v4si)
   33860      v2di __builtin_ia32_paddq128 (v2di, v2di)
   33861      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
   33862      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
   33863      v4si __builtin_ia32_psubd128 (v4si, v4si)
   33864      v2di __builtin_ia32_psubq128 (v2di, v2di)
   33865      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
   33866      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
   33867      v2di __builtin_ia32_pand128 (v2di, v2di)
   33868      v2di __builtin_ia32_pandn128 (v2di, v2di)
   33869      v2di __builtin_ia32_por128 (v2di, v2di)
   33870      v2di __builtin_ia32_pxor128 (v2di, v2di)
   33871      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
   33872      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
   33873      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
   33874      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
   33875      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
   33876      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
   33877      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
   33878      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
   33879      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
   33880      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
   33881      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
   33882      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
   33883      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
   33884      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
   33885      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
   33886      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
   33887      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
   33888      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
   33889      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
   33890      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
   33891      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
   33892      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
   33893      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
   33894      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
   33895      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
   33896      v2df __builtin_ia32_loadupd (double *)
   33897      void __builtin_ia32_storeupd (double *, v2df)
   33898      v2df __builtin_ia32_loadhpd (v2df, double const *)
   33899      v2df __builtin_ia32_loadlpd (v2df, double const *)
   33900      int __builtin_ia32_movmskpd (v2df)
   33901      int __builtin_ia32_pmovmskb128 (v16qi)
   33902      void __builtin_ia32_movnti (int *, int)
   33903      void __builtin_ia32_movntpd (double *, v2df)
   33904      void __builtin_ia32_movntdq (v2df *, v2df)
   33905      v4si __builtin_ia32_pshufd (v4si, int)
   33906      v8hi __builtin_ia32_pshuflw (v8hi, int)
   33907      v8hi __builtin_ia32_pshufhw (v8hi, int)
   33908      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
   33909      v2df __builtin_ia32_sqrtpd (v2df)
   33910      v2df __builtin_ia32_sqrtsd (v2df)
   33911      v2df __builtin_ia32_shufpd (v2df, v2df, int)
   33912      v2df __builtin_ia32_cvtdq2pd (v4si)
   33913      v4sf __builtin_ia32_cvtdq2ps (v4si)
   33914      v4si __builtin_ia32_cvtpd2dq (v2df)
   33915      v2si __builtin_ia32_cvtpd2pi (v2df)
   33916      v4sf __builtin_ia32_cvtpd2ps (v2df)
   33917      v4si __builtin_ia32_cvttpd2dq (v2df)
   33918      v2si __builtin_ia32_cvttpd2pi (v2df)
   33919      v2df __builtin_ia32_cvtpi2pd (v2si)
   33920      int __builtin_ia32_cvtsd2si (v2df)
   33921      int __builtin_ia32_cvttsd2si (v2df)
   33922      long long __builtin_ia32_cvtsd2si64 (v2df)
   33923      long long __builtin_ia32_cvttsd2si64 (v2df)
   33924      v4si __builtin_ia32_cvtps2dq (v4sf)
   33925      v2df __builtin_ia32_cvtps2pd (v4sf)
   33926      v4si __builtin_ia32_cvttps2dq (v4sf)
   33927      v2df __builtin_ia32_cvtsi2sd (v2df, int)
   33928      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
   33929      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
   33930      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
   33931      void __builtin_ia32_clflush (const void *)
   33932      void __builtin_ia32_lfence (void)
   33933      void __builtin_ia32_mfence (void)
   33934      v16qi __builtin_ia32_loaddqu (const char *)
   33935      void __builtin_ia32_storedqu (char *, v16qi)
   33936      v1di __builtin_ia32_pmuludq (v2si, v2si)
   33937      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
   33938      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
   33939      v4si __builtin_ia32_pslld128 (v4si, v4si)
   33940      v2di __builtin_ia32_psllq128 (v2di, v2di)
   33941      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
   33942      v4si __builtin_ia32_psrld128 (v4si, v4si)
   33943      v2di __builtin_ia32_psrlq128 (v2di, v2di)
   33944      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
   33945      v4si __builtin_ia32_psrad128 (v4si, v4si)
   33946      v2di __builtin_ia32_pslldqi128 (v2di, int)
   33947      v8hi __builtin_ia32_psllwi128 (v8hi, int)
   33948      v4si __builtin_ia32_pslldi128 (v4si, int)
   33949      v2di __builtin_ia32_psllqi128 (v2di, int)
   33950      v2di __builtin_ia32_psrldqi128 (v2di, int)
   33951      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
   33952      v4si __builtin_ia32_psrldi128 (v4si, int)
   33953      v2di __builtin_ia32_psrlqi128 (v2di, int)
   33954      v8hi __builtin_ia32_psrawi128 (v8hi, int)
   33955      v4si __builtin_ia32_psradi128 (v4si, int)
   33956      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
   33957      v2di __builtin_ia32_movq128 (v2di)
   33958 
   33959  The following built-in functions are available when `-msse3' is used.
   33960 All of them generate the machine instruction that is part of the name.
   33961 
   33962      v2df __builtin_ia32_addsubpd (v2df, v2df)
   33963      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
   33964      v2df __builtin_ia32_haddpd (v2df, v2df)
   33965      v4sf __builtin_ia32_haddps (v4sf, v4sf)
   33966      v2df __builtin_ia32_hsubpd (v2df, v2df)
   33967      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
   33968      v16qi __builtin_ia32_lddqu (char const *)
   33969      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
   33970      v2df __builtin_ia32_movddup (v2df)
   33971      v4sf __builtin_ia32_movshdup (v4sf)
   33972      v4sf __builtin_ia32_movsldup (v4sf)
   33973      void __builtin_ia32_mwait (unsigned int, unsigned int)
   33974 
   33975  The following built-in functions are available when `-msse3' is used.
   33976 
   33977 `v2df __builtin_ia32_loadddup (double const *)'
   33978      Generates the `movddup' machine instruction as a load from memory.
   33979 
   33980  The following built-in functions are available when `-mssse3' is used.
   33981 All of them generate the machine instruction that is part of the name
   33982 with MMX registers.
   33983 
   33984      v2si __builtin_ia32_phaddd (v2si, v2si)
   33985      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
   33986      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
   33987      v2si __builtin_ia32_phsubd (v2si, v2si)
   33988      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
   33989      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
   33990      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
   33991      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
   33992      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
   33993      v8qi __builtin_ia32_psignb (v8qi, v8qi)
   33994      v2si __builtin_ia32_psignd (v2si, v2si)
   33995      v4hi __builtin_ia32_psignw (v4hi, v4hi)
   33996      v1di __builtin_ia32_palignr (v1di, v1di, int)
   33997      v8qi __builtin_ia32_pabsb (v8qi)
   33998      v2si __builtin_ia32_pabsd (v2si)
   33999      v4hi __builtin_ia32_pabsw (v4hi)
   34000 
   34001  The following built-in functions are available when `-mssse3' is used.
   34002 All of them generate the machine instruction that is part of the name
   34003 with SSE registers.
   34004 
   34005      v4si __builtin_ia32_phaddd128 (v4si, v4si)
   34006      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
   34007      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
   34008      v4si __builtin_ia32_phsubd128 (v4si, v4si)
   34009      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
   34010      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
   34011      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
   34012      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
   34013      v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
   34014      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
   34015      v4si __builtin_ia32_psignd128 (v4si, v4si)
   34016      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
   34017      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
   34018      v16qi __builtin_ia32_pabsb128 (v16qi)
   34019      v4si __builtin_ia32_pabsd128 (v4si)
   34020      v8hi __builtin_ia32_pabsw128 (v8hi)
   34021 
   34022  The following built-in functions are available when `-msse4.1' is
   34023 used.  All of them generate the machine instruction that is part of the
   34024 name.
   34025 
   34026      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
   34027      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
   34028      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
   34029      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
   34030      v2df __builtin_ia32_dppd (v2df, v2df, const int)
   34031      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
   34032      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
   34033      v2di __builtin_ia32_movntdqa (v2di *);
   34034      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
   34035      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
   34036      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
   34037      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
   34038      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
   34039      v8hi __builtin_ia32_phminposuw128 (v8hi)
   34040      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
   34041      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
   34042      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
   34043      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
   34044      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
   34045      v4si __builtin_ia32_pminsd128 (v4si, v4si)
   34046      v4si __builtin_ia32_pminud128 (v4si, v4si)
   34047      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
   34048      v4si __builtin_ia32_pmovsxbd128 (v16qi)
   34049      v2di __builtin_ia32_pmovsxbq128 (v16qi)
   34050      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
   34051      v2di __builtin_ia32_pmovsxdq128 (v4si)
   34052      v4si __builtin_ia32_pmovsxwd128 (v8hi)
   34053      v2di __builtin_ia32_pmovsxwq128 (v8hi)
   34054      v4si __builtin_ia32_pmovzxbd128 (v16qi)
   34055      v2di __builtin_ia32_pmovzxbq128 (v16qi)
   34056      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
   34057      v2di __builtin_ia32_pmovzxdq128 (v4si)
   34058      v4si __builtin_ia32_pmovzxwd128 (v8hi)
   34059      v2di __builtin_ia32_pmovzxwq128 (v8hi)
   34060      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
   34061      v4si __builtin_ia32_pmulld128 (v4si, v4si)
   34062      int __builtin_ia32_ptestc128 (v2di, v2di)
   34063      int __builtin_ia32_ptestnzc128 (v2di, v2di)
   34064      int __builtin_ia32_ptestz128 (v2di, v2di)
   34065      v2df __builtin_ia32_roundpd (v2df, const int)
   34066      v4sf __builtin_ia32_roundps (v4sf, const int)
   34067      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
   34068      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
   34069 
   34070  The following built-in functions are available when `-msse4.1' is used.
   34071 
   34072 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
   34073      Generates the `insertps' machine instruction.
   34074 
   34075 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
   34076      Generates the `pextrb' machine instruction.
   34077 
   34078 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
   34079      Generates the `pinsrb' machine instruction.
   34080 
   34081 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
   34082      Generates the `pinsrd' machine instruction.
   34083 
   34084 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
   34085      Generates the `pinsrq' machine instruction in 64bit mode.
   34086 
   34087  The following built-in functions are changed to generate new SSE4.1
   34088 instructions when `-msse4.1' is used.
   34089 
   34090 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
   34091      Generates the `extractps' machine instruction.
   34092 
   34093 `int __builtin_ia32_vec_ext_v4si (v4si, const int)'
   34094      Generates the `pextrd' machine instruction.
   34095 
   34096 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
   34097      Generates the `pextrq' machine instruction in 64bit mode.
   34098 
   34099  The following built-in functions are available when `-msse4.2' is
   34100 used.  All of them generate the machine instruction that is part of the
   34101 name.
   34102 
   34103      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
   34104      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
   34105      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
   34106      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
   34107      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
   34108      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
   34109      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
   34110      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
   34111      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
   34112      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
   34113      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
   34114      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
   34115      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
   34116      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
   34117      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
   34118 
   34119  The following built-in functions are available when `-msse4.2' is used.
   34120 
   34121 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
   34122      Generates the `crc32b' machine instruction.
   34123 
   34124 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
   34125      Generates the `crc32w' machine instruction.
   34126 
   34127 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
   34128      Generates the `crc32l' machine instruction.
   34129 
   34130 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
   34131      Generates the `crc32q' machine instruction.
   34132 
   34133  The following built-in functions are changed to generate new SSE4.2
   34134 instructions when `-msse4.2' is used.
   34135 
   34136 `int __builtin_popcount (unsigned int)'
   34137      Generates the `popcntl' machine instruction.
   34138 
   34139 `int __builtin_popcountl (unsigned long)'
   34140      Generates the `popcntl' or `popcntq' machine instruction,
   34141      depending on the size of `unsigned long'.
   34142 
   34143 `int __builtin_popcountll (unsigned long long)'
   34144      Generates the `popcntq' machine instruction.
   34145 
   34146  The following built-in functions are available when `-mavx' is used.
   34147 All of them generate the machine instruction that is part of the name.
   34148 
   34149      v4df __builtin_ia32_addpd256 (v4df,v4df)
   34150      v8sf __builtin_ia32_addps256 (v8sf,v8sf)
   34151      v4df __builtin_ia32_addsubpd256 (v4df,v4df)
   34152      v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
   34153      v4df __builtin_ia32_andnpd256 (v4df,v4df)
   34154      v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
   34155      v4df __builtin_ia32_andpd256 (v4df,v4df)
   34156      v8sf __builtin_ia32_andps256 (v8sf,v8sf)
   34157      v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
   34158      v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
   34159      v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
   34160      v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
   34161      v2df __builtin_ia32_cmppd (v2df,v2df,int)
   34162      v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
   34163      v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
   34164      v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
   34165      v2df __builtin_ia32_cmpsd (v2df,v2df,int)
   34166      v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
   34167      v4df __builtin_ia32_cvtdq2pd256 (v4si)
   34168      v8sf __builtin_ia32_cvtdq2ps256 (v8si)
   34169      v4si __builtin_ia32_cvtpd2dq256 (v4df)
   34170      v4sf __builtin_ia32_cvtpd2ps256 (v4df)
   34171      v8si __builtin_ia32_cvtps2dq256 (v8sf)
   34172      v4df __builtin_ia32_cvtps2pd256 (v4sf)
   34173      v4si __builtin_ia32_cvttpd2dq256 (v4df)
   34174      v8si __builtin_ia32_cvttps2dq256 (v8sf)
   34175      v4df __builtin_ia32_divpd256 (v4df,v4df)
   34176      v8sf __builtin_ia32_divps256 (v8sf,v8sf)
   34177      v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
   34178      v4df __builtin_ia32_haddpd256 (v4df,v4df)
   34179      v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
   34180      v4df __builtin_ia32_hsubpd256 (v4df,v4df)
   34181      v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
   34182      v32qi __builtin_ia32_lddqu256 (pcchar)
   34183      v32qi __builtin_ia32_loaddqu256 (pcchar)
   34184      v4df __builtin_ia32_loadupd256 (pcdouble)
   34185      v8sf __builtin_ia32_loadups256 (pcfloat)
   34186      v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
   34187      v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
   34188      v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
   34189      v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
   34190      void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
   34191      void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
   34192      void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
   34193      void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
   34194      v4df __builtin_ia32_maxpd256 (v4df,v4df)
   34195      v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
   34196      v4df __builtin_ia32_minpd256 (v4df,v4df)
   34197      v8sf __builtin_ia32_minps256 (v8sf,v8sf)
   34198      v4df __builtin_ia32_movddup256 (v4df)
   34199      int __builtin_ia32_movmskpd256 (v4df)
   34200      int __builtin_ia32_movmskps256 (v8sf)
   34201      v8sf __builtin_ia32_movshdup256 (v8sf)
   34202      v8sf __builtin_ia32_movsldup256 (v8sf)
   34203      v4df __builtin_ia32_mulpd256 (v4df,v4df)
   34204      v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
   34205      v4df __builtin_ia32_orpd256 (v4df,v4df)
   34206      v8sf __builtin_ia32_orps256 (v8sf,v8sf)
   34207      v2df __builtin_ia32_pd_pd256 (v4df)
   34208      v4df __builtin_ia32_pd256_pd (v2df)
   34209      v4sf __builtin_ia32_ps_ps256 (v8sf)
   34210      v8sf __builtin_ia32_ps256_ps (v4sf)
   34211      int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
   34212      int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
   34213      int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
   34214      v8sf __builtin_ia32_rcpps256 (v8sf)
   34215      v4df __builtin_ia32_roundpd256 (v4df,int)
   34216      v8sf __builtin_ia32_roundps256 (v8sf,int)
   34217      v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
   34218      v8sf __builtin_ia32_rsqrtps256 (v8sf)
   34219      v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
   34220      v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
   34221      v4si __builtin_ia32_si_si256 (v8si)
   34222      v8si __builtin_ia32_si256_si (v4si)
   34223      v4df __builtin_ia32_sqrtpd256 (v4df)
   34224      v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
   34225      v8sf __builtin_ia32_sqrtps256 (v8sf)
   34226      void __builtin_ia32_storedqu256 (pchar,v32qi)
   34227      void __builtin_ia32_storeupd256 (pdouble,v4df)
   34228      void __builtin_ia32_storeups256 (pfloat,v8sf)
   34229      v4df __builtin_ia32_subpd256 (v4df,v4df)
   34230      v8sf __builtin_ia32_subps256 (v8sf,v8sf)
   34231      v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
   34232      v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
   34233      v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
   34234      v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
   34235      v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
   34236      v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
   34237      v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
   34238      v4sf __builtin_ia32_vbroadcastss (pcfloat)
   34239      v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
   34240      v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
   34241      v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
   34242      v4si __builtin_ia32_vextractf128_si256 (v8si,int)
   34243      v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
   34244      v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
   34245      v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
   34246      v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
   34247      v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
   34248      v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
   34249      v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
   34250      v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
   34251      v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
   34252      v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
   34253      v2df __builtin_ia32_vpermilpd (v2df,int)
   34254      v4df __builtin_ia32_vpermilpd256 (v4df,int)
   34255      v4sf __builtin_ia32_vpermilps (v4sf,int)
   34256      v8sf __builtin_ia32_vpermilps256 (v8sf,int)
   34257      v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
   34258      v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
   34259      v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
   34260      v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
   34261      int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
   34262      int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
   34263      int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
   34264      int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
   34265      int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
   34266      int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
   34267      int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
   34268      int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
   34269      int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
   34270      int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
   34271      int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
   34272      int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
   34273      void __builtin_ia32_vzeroall (void)
   34274      void __builtin_ia32_vzeroupper (void)
   34275      v4df __builtin_ia32_xorpd256 (v4df,v4df)
   34276      v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
   34277 
   34278  The following built-in functions are available when `-maes' is used.
   34279 All of them generate the machine instruction that is part of the name.
   34280 
   34281      v2di __builtin_ia32_aesenc128 (v2di, v2di)
   34282      v2di __builtin_ia32_aesenclast128 (v2di, v2di)
   34283      v2di __builtin_ia32_aesdec128 (v2di, v2di)
   34284      v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
   34285      v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
   34286      v2di __builtin_ia32_aesimc128 (v2di)
   34287 
   34288  The following built-in function is available when `-mpclmul' is used.
   34289 
   34290 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
   34291      Generates the `pclmulqdq' machine instruction.
   34292 
   34293  The following built-in function is available when `-mfsgsbase' is
   34294 used.  All of them generate the machine instruction that is part of the
   34295 name.
   34296 
   34297      unsigned int __builtin_ia32_rdfsbase32 (void)
   34298      unsigned long long __builtin_ia32_rdfsbase64 (void)
   34299      unsigned int __builtin_ia32_rdgsbase32 (void)
   34300      unsigned long long __builtin_ia32_rdgsbase64 (void)
   34301      void _writefsbase_u32 (unsigned int)
   34302      void _writefsbase_u64 (unsigned long long)
   34303      void _writegsbase_u32 (unsigned int)
   34304      void _writegsbase_u64 (unsigned long long)
   34305 
   34306  The following built-in function is available when `-mrdrnd' is used.
   34307 All of them generate the machine instruction that is part of the name.
   34308 
   34309      unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
   34310      unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
   34311      unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
   34312 
   34313  The following built-in functions are available when `-msse4a' is used.
   34314 All of them generate the machine instruction that is part of the name.
   34315 
   34316      void __builtin_ia32_movntsd (double *, v2df)
   34317      void __builtin_ia32_movntss (float *, v4sf)
   34318      v2di __builtin_ia32_extrq  (v2di, v16qi)
   34319      v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
   34320      v2di __builtin_ia32_insertq (v2di, v2di)
   34321      v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
   34322 
   34323  The following built-in functions are available when `-mxop' is used.
   34324      v2df __builtin_ia32_vfrczpd (v2df)
   34325      v4sf __builtin_ia32_vfrczps (v4sf)
   34326      v2df __builtin_ia32_vfrczsd (v2df, v2df)
   34327      v4sf __builtin_ia32_vfrczss (v4sf, v4sf)
   34328      v4df __builtin_ia32_vfrczpd256 (v4df)
   34329      v8sf __builtin_ia32_vfrczps256 (v8sf)
   34330      v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
   34331      v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
   34332      v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
   34333      v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
   34334      v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
   34335      v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
   34336      v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
   34337      v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
   34338      v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
   34339      v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
   34340      v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
   34341      v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
   34342      v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
   34343      v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
   34344      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
   34345      v4si __builtin_ia32_vpcomeqd (v4si, v4si)
   34346      v2di __builtin_ia32_vpcomeqq (v2di, v2di)
   34347      v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
   34348      v4si __builtin_ia32_vpcomequd (v4si, v4si)
   34349      v2di __builtin_ia32_vpcomequq (v2di, v2di)
   34350      v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
   34351      v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
   34352      v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
   34353      v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
   34354      v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
   34355      v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
   34356      v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
   34357      v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
   34358      v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
   34359      v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
   34360      v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
   34361      v4si __builtin_ia32_vpcomged (v4si, v4si)
   34362      v2di __builtin_ia32_vpcomgeq (v2di, v2di)
   34363      v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
   34364      v4si __builtin_ia32_vpcomgeud (v4si, v4si)
   34365      v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
   34366      v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
   34367      v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
   34368      v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
   34369      v4si __builtin_ia32_vpcomgtd (v4si, v4si)
   34370      v2di __builtin_ia32_vpcomgtq (v2di, v2di)
   34371      v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
   34372      v4si __builtin_ia32_vpcomgtud (v4si, v4si)
   34373      v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
   34374      v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
   34375      v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
   34376      v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
   34377      v4si __builtin_ia32_vpcomled (v4si, v4si)
   34378      v2di __builtin_ia32_vpcomleq (v2di, v2di)
   34379      v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
   34380      v4si __builtin_ia32_vpcomleud (v4si, v4si)
   34381      v2di __builtin_ia32_vpcomleuq (v2di, v2di)
   34382      v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
   34383      v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
   34384      v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
   34385      v4si __builtin_ia32_vpcomltd (v4si, v4si)
   34386      v2di __builtin_ia32_vpcomltq (v2di, v2di)
   34387      v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
   34388      v4si __builtin_ia32_vpcomltud (v4si, v4si)
   34389      v2di __builtin_ia32_vpcomltuq (v2di, v2di)
   34390      v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
   34391      v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
   34392      v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
   34393      v4si __builtin_ia32_vpcomned (v4si, v4si)
   34394      v2di __builtin_ia32_vpcomneq (v2di, v2di)
   34395      v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
   34396      v4si __builtin_ia32_vpcomneud (v4si, v4si)
   34397      v2di __builtin_ia32_vpcomneuq (v2di, v2di)
   34398      v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
   34399      v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
   34400      v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
   34401      v4si __builtin_ia32_vpcomtrued (v4si, v4si)
   34402      v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
   34403      v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
   34404      v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
   34405      v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
   34406      v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
   34407      v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
   34408      v4si __builtin_ia32_vphaddbd (v16qi)
   34409      v2di __builtin_ia32_vphaddbq (v16qi)
   34410      v8hi __builtin_ia32_vphaddbw (v16qi)
   34411      v2di __builtin_ia32_vphadddq (v4si)
   34412      v4si __builtin_ia32_vphaddubd (v16qi)
   34413      v2di __builtin_ia32_vphaddubq (v16qi)
   34414      v8hi __builtin_ia32_vphaddubw (v16qi)
   34415      v2di __builtin_ia32_vphaddudq (v4si)
   34416      v4si __builtin_ia32_vphadduwd (v8hi)
   34417      v2di __builtin_ia32_vphadduwq (v8hi)
   34418      v4si __builtin_ia32_vphaddwd (v8hi)
   34419      v2di __builtin_ia32_vphaddwq (v8hi)
   34420      v8hi __builtin_ia32_vphsubbw (v16qi)
   34421      v2di __builtin_ia32_vphsubdq (v4si)
   34422      v4si __builtin_ia32_vphsubwd (v8hi)
   34423      v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
   34424      v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
   34425      v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
   34426      v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
   34427      v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
   34428      v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
   34429      v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
   34430      v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
   34431      v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
   34432      v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
   34433      v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
   34434      v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
   34435      v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
   34436      v16qi __builtin_ia32_vprotb (v16qi, v16qi)
   34437      v4si __builtin_ia32_vprotd (v4si, v4si)
   34438      v2di __builtin_ia32_vprotq (v2di, v2di)
   34439      v8hi __builtin_ia32_vprotw (v8hi, v8hi)
   34440      v16qi __builtin_ia32_vpshab (v16qi, v16qi)
   34441      v4si __builtin_ia32_vpshad (v4si, v4si)
   34442      v2di __builtin_ia32_vpshaq (v2di, v2di)
   34443      v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
   34444      v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
   34445      v4si __builtin_ia32_vpshld (v4si, v4si)
   34446      v2di __builtin_ia32_vpshlq (v2di, v2di)
   34447      v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
   34448 
   34449  The following built-in functions are available when `-mfma4' is used.
   34450 All of them generate the machine instruction that is part of the name
   34451 with MMX registers.
   34452 
   34453      v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
   34454      v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
   34455      v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
   34456      v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
   34457      v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
   34458      v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
   34459      v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
   34460      v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
   34461      v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
   34462      v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
   34463      v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
   34464      v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
   34465      v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
   34466      v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
   34467      v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
   34468      v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
   34469      v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
   34470      v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
   34471      v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
   34472      v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
   34473      v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
   34474      v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
   34475      v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
   34476      v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
   34477      v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
   34478      v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
   34479      v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
   34480      v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
   34481      v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
   34482      v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
   34483      v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
   34484      v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf)
   34485 
   34486  The following built-in functions are available when `-mlwp' is used.
   34487 
   34488      void __builtin_ia32_llwpcb16 (void *);
   34489      void __builtin_ia32_llwpcb32 (void *);
   34490      void __builtin_ia32_llwpcb64 (void *);
   34491      void * __builtin_ia32_llwpcb16 (void);
   34492      void * __builtin_ia32_llwpcb32 (void);
   34493      void * __builtin_ia32_llwpcb64 (void);
   34494      void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
   34495      void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
   34496      void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
   34497      unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
   34498      unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
   34499      unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
   34500 
   34501  The following built-in functions are available when `-mbmi' is used.
   34502 All of them generate the machine instruction that is part of the name.
   34503      unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
   34504      unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
   34505      unsigned short __builtin_ia32_lzcnt_16(unsigned short);
   34506      unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
   34507      unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
   34508 
   34509  The following built-in functions are available when `-mtbm' is used.
   34510 Both of them generate the immediate form of the bextr machine
   34511 instruction.
   34512      unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
   34513      unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
   34514 
   34515  The following built-in functions are available when `-m3dnow' is used.
   34516 All of them generate the machine instruction that is part of the name.
   34517 
   34518      void __builtin_ia32_femms (void)
   34519      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
   34520      v2si __builtin_ia32_pf2id (v2sf)
   34521      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
   34522      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
   34523      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
   34524      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
   34525      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
   34526      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
   34527      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
   34528      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
   34529      v2sf __builtin_ia32_pfrcp (v2sf)
   34530      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
   34531      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
   34532      v2sf __builtin_ia32_pfrsqrt (v2sf)
   34533      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
   34534      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
   34535      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
   34536      v2sf __builtin_ia32_pi2fd (v2si)
   34537      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
   34538 
   34539  The following built-in functions are available when both `-m3dnow' and
   34540 `-march=athlon' are used.  All of them generate the machine instruction
   34541 that is part of the name.
   34542 
   34543      v2si __builtin_ia32_pf2iw (v2sf)
   34544      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
   34545      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
   34546      v2sf __builtin_ia32_pi2fw (v2si)
   34547      v2sf __builtin_ia32_pswapdsf (v2sf)
   34548      v2si __builtin_ia32_pswapdsi (v2si)
   34549 
   34550 
   34551 File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
   34552 
   34553 6.54.7 MIPS DSP Built-in Functions
   34554 ----------------------------------
   34555 
   34556 The MIPS DSP Application-Specific Extension (ASE) includes new
   34557 instructions that are designed to improve the performance of DSP and
   34558 media applications.  It provides instructions that operate on packed
   34559 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
   34560 
   34561  GCC supports MIPS DSP operations using both the generic vector
   34562 extensions (*note Vector Extensions::) and a collection of
   34563 MIPS-specific built-in functions.  Both kinds of support are enabled by
   34564 the `-mdsp' command-line option.
   34565 
   34566  Revision 2 of the ASE was introduced in the second half of 2006.  This
   34567 revision adds extra instructions to the original ASE, but is otherwise
   34568 backwards-compatible with it.  You can select revision 2 using the
   34569 command-line option `-mdspr2'; this option implies `-mdsp'.
   34570 
   34571  The SCOUNT and POS bits of the DSP control register are global.  The
   34572 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
   34573 POS bits.  During optimization, the compiler will not delete these
   34574 instructions and it will not delete calls to functions containing these
   34575 instructions.
   34576 
   34577  At present, GCC only provides support for operations on 32-bit
   34578 vectors.  The vector type associated with 8-bit integer data is usually
   34579 called `v4i8', the vector type associated with Q7 is usually called
   34580 `v4q7', the vector type associated with 16-bit integer data is usually
   34581 called `v2i16', and the vector type associated with Q15 is usually
   34582 called `v2q15'.  They can be defined in C as follows:
   34583 
   34584      typedef signed char v4i8 __attribute__ ((vector_size(4)));
   34585      typedef signed char v4q7 __attribute__ ((vector_size(4)));
   34586      typedef short v2i16 __attribute__ ((vector_size(4)));
   34587      typedef short v2q15 __attribute__ ((vector_size(4)));
   34588 
   34589  `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
   34590 way as aggregates.  For example:
   34591 
   34592      v4i8 a = {1, 2, 3, 4};
   34593      v4i8 b;
   34594      b = (v4i8) {5, 6, 7, 8};
   34595 
   34596      v2q15 c = {0x0fcb, 0x3a75};
   34597      v2q15 d;
   34598      d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
   34599 
   34600  _Note:_ The CPU's endianness determines the order in which values are
   34601 packed.  On little-endian targets, the first value is the least
   34602 significant and the last value is the most significant.  The opposite
   34603 order applies to big-endian targets.  For example, the code above will
   34604 set the lowest byte of `a' to `1' on little-endian targets and `4' on
   34605 big-endian targets.
   34606 
   34607  _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
   34608 representation.  As shown in this example, the integer representation
   34609 of a Q7 value can be obtained by multiplying the fractional value by
   34610 `0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
   34611 The equivalent for Q31 values is to multiply by `0x1.0p31'.
   34612 
   34613  The table below lists the `v4i8' and `v2q15' operations for which
   34614 hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
   34615 `d' are `v2q15' values.
   34616 
   34617 C code                               MIPS instruction
   34618 `a + b'                              `addu.qb'
   34619 `c + d'                              `addq.ph'
   34620 `a - b'                              `subu.qb'
   34621 `c - d'                              `subq.ph'
   34622 
   34623  The table below lists the `v2i16' operation for which hardware support
   34624 exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
   34625 
   34626 C code                               MIPS instruction
   34627 `e * f'                              `mul.ph'
   34628 
   34629  It is easier to describe the DSP built-in functions if we first define
   34630 the following types:
   34631 
   34632      typedef int q31;
   34633      typedef int i32;
   34634      typedef unsigned int ui32;
   34635      typedef long long a64;
   34636 
   34637  `q31' and `i32' are actually the same as `int', but we use `q31' to
   34638 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
   34639 value.  Similarly, `a64' is the same as `long long', but we use `a64'
   34640 to indicate values that will be placed in one of the four DSP
   34641 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
   34642 
   34643  Also, some built-in functions prefer or require immediate numbers as
   34644 parameters, because the corresponding DSP instructions accept both
   34645 immediate numbers and register operands, or accept immediate numbers
   34646 only.  The immediate parameters are listed as follows.
   34647 
   34648      imm0_3: 0 to 3.
   34649      imm0_7: 0 to 7.
   34650      imm0_15: 0 to 15.
   34651      imm0_31: 0 to 31.
   34652      imm0_63: 0 to 63.
   34653      imm0_255: 0 to 255.
   34654      imm_n32_31: -32 to 31.
   34655      imm_n512_511: -512 to 511.
   34656 
   34657  The following built-in functions map directly to a particular MIPS DSP
   34658 instruction.  Please refer to the architecture specification for
   34659 details on what each instruction does.
   34660 
   34661      v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
   34662      v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
   34663      q31 __builtin_mips_addq_s_w (q31, q31)
   34664      v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
   34665      v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
   34666      v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
   34667      v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
   34668      q31 __builtin_mips_subq_s_w (q31, q31)
   34669      v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
   34670      v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
   34671      i32 __builtin_mips_addsc (i32, i32)
   34672      i32 __builtin_mips_addwc (i32, i32)
   34673      i32 __builtin_mips_modsub (i32, i32)
   34674      i32 __builtin_mips_raddu_w_qb (v4i8)
   34675      v2q15 __builtin_mips_absq_s_ph (v2q15)
   34676      q31 __builtin_mips_absq_s_w (q31)
   34677      v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
   34678      v2q15 __builtin_mips_precrq_ph_w (q31, q31)
   34679      v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
   34680      v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
   34681      q31 __builtin_mips_preceq_w_phl (v2q15)
   34682      q31 __builtin_mips_preceq_w_phr (v2q15)
   34683      v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
   34684      v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
   34685      v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
   34686      v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
   34687      v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
   34688      v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
   34689      v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
   34690      v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
   34691      v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
   34692      v4i8 __builtin_mips_shll_qb (v4i8, i32)
   34693      v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
   34694      v2q15 __builtin_mips_shll_ph (v2q15, i32)
   34695      v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
   34696      v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
   34697      q31 __builtin_mips_shll_s_w (q31, imm0_31)
   34698      q31 __builtin_mips_shll_s_w (q31, i32)
   34699      v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
   34700      v4i8 __builtin_mips_shrl_qb (v4i8, i32)
   34701      v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
   34702      v2q15 __builtin_mips_shra_ph (v2q15, i32)
   34703      v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
   34704      v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
   34705      q31 __builtin_mips_shra_r_w (q31, imm0_31)
   34706      q31 __builtin_mips_shra_r_w (q31, i32)
   34707      v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
   34708      v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
   34709      v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
   34710      q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
   34711      q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
   34712      a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
   34713      a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
   34714      a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
   34715      a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
   34716      a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
   34717      a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
   34718      a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
   34719      a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
   34720      a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
   34721      a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
   34722      a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
   34723      a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
   34724      a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
   34725      i32 __builtin_mips_bitrev (i32)
   34726      i32 __builtin_mips_insv (i32, i32)
   34727      v4i8 __builtin_mips_repl_qb (imm0_255)
   34728      v4i8 __builtin_mips_repl_qb (i32)
   34729      v2q15 __builtin_mips_repl_ph (imm_n512_511)
   34730      v2q15 __builtin_mips_repl_ph (i32)
   34731      void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
   34732      void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
   34733      void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
   34734      i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
   34735      i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
   34736      i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
   34737      void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
   34738      void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
   34739      void __builtin_mips_cmp_le_ph (v2q15, v2q15)
   34740      v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
   34741      v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
   34742      v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
   34743      i32 __builtin_mips_extr_w (a64, imm0_31)
   34744      i32 __builtin_mips_extr_w (a64, i32)
   34745      i32 __builtin_mips_extr_r_w (a64, imm0_31)
   34746      i32 __builtin_mips_extr_s_h (a64, i32)
   34747      i32 __builtin_mips_extr_rs_w (a64, imm0_31)
   34748      i32 __builtin_mips_extr_rs_w (a64, i32)
   34749      i32 __builtin_mips_extr_s_h (a64, imm0_31)
   34750      i32 __builtin_mips_extr_r_w (a64, i32)
   34751      i32 __builtin_mips_extp (a64, imm0_31)
   34752      i32 __builtin_mips_extp (a64, i32)
   34753      i32 __builtin_mips_extpdp (a64, imm0_31)
   34754      i32 __builtin_mips_extpdp (a64, i32)
   34755      a64 __builtin_mips_shilo (a64, imm_n32_31)
   34756      a64 __builtin_mips_shilo (a64, i32)
   34757      a64 __builtin_mips_mthlip (a64, i32)
   34758      void __builtin_mips_wrdsp (i32, imm0_63)
   34759      i32 __builtin_mips_rddsp (imm0_63)
   34760      i32 __builtin_mips_lbux (void *, i32)
   34761      i32 __builtin_mips_lhx (void *, i32)
   34762      i32 __builtin_mips_lwx (void *, i32)
   34763      i32 __builtin_mips_bposge32 (void)
   34764      a64 __builtin_mips_madd (a64, i32, i32);
   34765      a64 __builtin_mips_maddu (a64, ui32, ui32);
   34766      a64 __builtin_mips_msub (a64, i32, i32);
   34767      a64 __builtin_mips_msubu (a64, ui32, ui32);
   34768      a64 __builtin_mips_mult (i32, i32);
   34769      a64 __builtin_mips_multu (ui32, ui32);
   34770 
   34771  The following built-in functions map directly to a particular MIPS DSP
   34772 REV 2 instruction.  Please refer to the architecture specification for
   34773 details on what each instruction does.
   34774 
   34775      v4q7 __builtin_mips_absq_s_qb (v4q7);
   34776      v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
   34777      v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
   34778      v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
   34779      v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
   34780      i32 __builtin_mips_append (i32, i32, imm0_31);
   34781      i32 __builtin_mips_balign (i32, i32, imm0_3);
   34782      i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
   34783      i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
   34784      i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
   34785      a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
   34786      a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
   34787      v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
   34788      v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
   34789      q31 __builtin_mips_mulq_rs_w (q31, q31);
   34790      v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
   34791      q31 __builtin_mips_mulq_s_w (q31, q31);
   34792      a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
   34793      v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
   34794      v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
   34795      v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
   34796      i32 __builtin_mips_prepend (i32, i32, imm0_31);
   34797      v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
   34798      v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
   34799      v4i8 __builtin_mips_shra_qb (v4i8, i32);
   34800      v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
   34801      v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
   34802      v2i16 __builtin_mips_shrl_ph (v2i16, i32);
   34803      v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
   34804      v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
   34805      v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
   34806      v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
   34807      v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
   34808      v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
   34809      q31 __builtin_mips_addqh_w (q31, q31);
   34810      q31 __builtin_mips_addqh_r_w (q31, q31);
   34811      v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
   34812      v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
   34813      q31 __builtin_mips_subqh_w (q31, q31);
   34814      q31 __builtin_mips_subqh_r_w (q31, q31);
   34815      a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
   34816      a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
   34817      a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
   34818      a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
   34819      a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
   34820      a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
   34821 
   34822 
   34823 File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
   34824 
   34825 6.54.8 MIPS Paired-Single Support
   34826 ---------------------------------
   34827 
   34828 The MIPS64 architecture includes a number of instructions that operate
   34829 on pairs of single-precision floating-point values.  Each pair is
   34830 packed into a 64-bit floating-point register, with one element being
   34831 designated the "upper half" and the other being designated the "lower
   34832 half".
   34833 
   34834  GCC supports paired-single operations using both the generic vector
   34835 extensions (*note Vector Extensions::) and a collection of
   34836 MIPS-specific built-in functions.  Both kinds of support are enabled by
   34837 the `-mpaired-single' command-line option.
   34838 
   34839  The vector type associated with paired-single values is usually called
   34840 `v2sf'.  It can be defined in C as follows:
   34841 
   34842      typedef float v2sf __attribute__ ((vector_size (8)));
   34843 
   34844  `v2sf' values are initialized in the same way as aggregates.  For
   34845 example:
   34846 
   34847      v2sf a = {1.5, 9.1};
   34848      v2sf b;
   34849      float e, f;
   34850      b = (v2sf) {e, f};
   34851 
   34852  _Note:_ The CPU's endianness determines which value is stored in the
   34853 upper half of a register and which value is stored in the lower half.
   34854 On little-endian targets, the first value is the lower one and the
   34855 second value is the upper one.  The opposite order applies to
   34856 big-endian targets.  For example, the code above will set the lower
   34857 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
   34858 targets.
   34859 
   34860 
   34861 File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
   34862 
   34863 6.54.9 MIPS Loongson Built-in Functions
   34864 ---------------------------------------
   34865 
   34866 GCC provides intrinsics to access the SIMD instructions provided by the
   34867 ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
   34868 available after inclusion of the `loongson.h' header file, operate on
   34869 the following 64-bit vector types:
   34870 
   34871    * `uint8x8_t', a vector of eight unsigned 8-bit integers;
   34872 
   34873    * `uint16x4_t', a vector of four unsigned 16-bit integers;
   34874 
   34875    * `uint32x2_t', a vector of two unsigned 32-bit integers;
   34876 
   34877    * `int8x8_t', a vector of eight signed 8-bit integers;
   34878 
   34879    * `int16x4_t', a vector of four signed 16-bit integers;
   34880 
   34881    * `int32x2_t', a vector of two signed 32-bit integers.
   34882 
   34883  The intrinsics provided are listed below; each is named after the
   34884 machine instruction to which it corresponds, with suffixes added as
   34885 appropriate to distinguish intrinsics that expand to the same machine
   34886 instruction yet have different argument types.  Refer to the
   34887 architecture documentation for a description of the functionality of
   34888 each instruction.
   34889 
   34890      int16x4_t packsswh (int32x2_t s, int32x2_t t);
   34891      int8x8_t packsshb (int16x4_t s, int16x4_t t);
   34892      uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
   34893      uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
   34894      uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
   34895      uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
   34896      int32x2_t paddw_s (int32x2_t s, int32x2_t t);
   34897      int16x4_t paddh_s (int16x4_t s, int16x4_t t);
   34898      int8x8_t paddb_s (int8x8_t s, int8x8_t t);
   34899      uint64_t paddd_u (uint64_t s, uint64_t t);
   34900      int64_t paddd_s (int64_t s, int64_t t);
   34901      int16x4_t paddsh (int16x4_t s, int16x4_t t);
   34902      int8x8_t paddsb (int8x8_t s, int8x8_t t);
   34903      uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
   34904      uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
   34905      uint64_t pandn_ud (uint64_t s, uint64_t t);
   34906      uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
   34907      uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
   34908      uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
   34909      int64_t pandn_sd (int64_t s, int64_t t);
   34910      int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
   34911      int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
   34912      int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
   34913      uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
   34914      uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
   34915      uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
   34916      uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
   34917      uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
   34918      int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
   34919      int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
   34920      int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
   34921      uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
   34922      uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
   34923      uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
   34924      int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
   34925      int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
   34926      int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
   34927      uint16x4_t pextrh_u (uint16x4_t s, int field);
   34928      int16x4_t pextrh_s (int16x4_t s, int field);
   34929      uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
   34930      uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
   34931      uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
   34932      uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
   34933      int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
   34934      int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
   34935      int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
   34936      int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
   34937      int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
   34938      int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
   34939      uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
   34940      int16x4_t pminsh (int16x4_t s, int16x4_t t);
   34941      uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
   34942      uint8x8_t pmovmskb_u (uint8x8_t s);
   34943      int8x8_t pmovmskb_s (int8x8_t s);
   34944      uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
   34945      int16x4_t pmulhh (int16x4_t s, int16x4_t t);
   34946      int16x4_t pmullh (int16x4_t s, int16x4_t t);
   34947      int64_t pmuluw (uint32x2_t s, uint32x2_t t);
   34948      uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
   34949      uint16x4_t biadd (uint8x8_t s);
   34950      uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
   34951      uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
   34952      int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
   34953      uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
   34954      int16x4_t psllh_s (int16x4_t s, uint8_t amount);
   34955      uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
   34956      int32x2_t psllw_s (int32x2_t s, uint8_t amount);
   34957      uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
   34958      int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
   34959      uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
   34960      int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
   34961      uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
   34962      int16x4_t psrah_s (int16x4_t s, uint8_t amount);
   34963      uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
   34964      int32x2_t psraw_s (int32x2_t s, uint8_t amount);
   34965      uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
   34966      uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
   34967      uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
   34968      int32x2_t psubw_s (int32x2_t s, int32x2_t t);
   34969      int16x4_t psubh_s (int16x4_t s, int16x4_t t);
   34970      int8x8_t psubb_s (int8x8_t s, int8x8_t t);
   34971      uint64_t psubd_u (uint64_t s, uint64_t t);
   34972      int64_t psubd_s (int64_t s, int64_t t);
   34973      int16x4_t psubsh (int16x4_t s, int16x4_t t);
   34974      int8x8_t psubsb (int8x8_t s, int8x8_t t);
   34975      uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
   34976      uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
   34977      uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
   34978      uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
   34979      uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
   34980      int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
   34981      int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
   34982      int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
   34983      uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
   34984      uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
   34985      uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
   34986      int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
   34987      int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
   34988      int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
   34989 
   34990 * Menu:
   34991 
   34992 * Paired-Single Arithmetic::
   34993 * Paired-Single Built-in Functions::
   34994 * MIPS-3D Built-in Functions::
   34995 
   34996 
   34997 File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
   34998 
   34999 6.54.9.1 Paired-Single Arithmetic
   35000 .................................
   35001 
   35002 The table below lists the `v2sf' operations for which hardware support
   35003 exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
   35004 value.
   35005 
   35006 C code                               MIPS instruction
   35007 `a + b'                              `add.ps'
   35008 `a - b'                              `sub.ps'
   35009 `-a'                                 `neg.ps'
   35010 `a * b'                              `mul.ps'
   35011 `a * b + c'                          `madd.ps'
   35012 `a * b - c'                          `msub.ps'
   35013 `-(a * b + c)'                       `nmadd.ps'
   35014 `-(a * b - c)'                       `nmsub.ps'
   35015 `x ? a : b'                          `movn.ps'/`movz.ps'
   35016 
   35017  Note that the multiply-accumulate instructions can be disabled using
   35018 the command-line option `-mno-fused-madd'.
   35019 
   35020 
   35021 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
   35022 
   35023 6.54.9.2 Paired-Single Built-in Functions
   35024 .........................................
   35025 
   35026 The following paired-single functions map directly to a particular MIPS
   35027 instruction.  Please refer to the architecture specification for
   35028 details on what each instruction does.
   35029 
   35030 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
   35031      Pair lower lower (`pll.ps').
   35032 
   35033 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
   35034      Pair upper lower (`pul.ps').
   35035 
   35036 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
   35037      Pair lower upper (`plu.ps').
   35038 
   35039 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
   35040      Pair upper upper (`puu.ps').
   35041 
   35042 `v2sf __builtin_mips_cvt_ps_s (float, float)'
   35043      Convert pair to paired single (`cvt.ps.s').
   35044 
   35045 `float __builtin_mips_cvt_s_pl (v2sf)'
   35046      Convert pair lower to single (`cvt.s.pl').
   35047 
   35048 `float __builtin_mips_cvt_s_pu (v2sf)'
   35049      Convert pair upper to single (`cvt.s.pu').
   35050 
   35051 `v2sf __builtin_mips_abs_ps (v2sf)'
   35052      Absolute value (`abs.ps').
   35053 
   35054 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
   35055      Align variable (`alnv.ps').
   35056 
   35057      _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
   35058      otherwise the result will be unpredictable.  Please read the
   35059      instruction description for details.
   35060 
   35061  The following multi-instruction functions are also available.  In each
   35062 case, COND can be any of the 16 floating-point conditions: `f', `un',
   35063 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
   35064 `lt', `nge', `le' or `ngt'.
   35065 
   35066 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   35067 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   35068      Conditional move based on floating point comparison (`c.COND.ps',
   35069      `movt.ps'/`movf.ps').
   35070 
   35071      The `movt' functions return the value X computed by:
   35072 
   35073           c.COND.ps CC,A,B
   35074           mov.ps X,C
   35075           movt.ps X,D,CC
   35076 
   35077      The `movf' functions are similar but use `movf.ps' instead of
   35078      `movt.ps'.
   35079 
   35080 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
   35081 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
   35082      Comparison of two paired-single values (`c.COND.ps',
   35083      `bc1t'/`bc1f').
   35084 
   35085      These functions compare A and B using `c.COND.ps' and return
   35086      either the upper or lower half of the result.  For example:
   35087 
   35088           v2sf a, b;
   35089           if (__builtin_mips_upper_c_eq_ps (a, b))
   35090             upper_halves_are_equal ();
   35091           else
   35092             upper_halves_are_unequal ();
   35093 
   35094           if (__builtin_mips_lower_c_eq_ps (a, b))
   35095             lower_halves_are_equal ();
   35096           else
   35097             lower_halves_are_unequal ();
   35098 
   35099 
   35100 File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
   35101 
   35102 6.54.9.3 MIPS-3D Built-in Functions
   35103 ...................................
   35104 
   35105 The MIPS-3D Application-Specific Extension (ASE) includes additional
   35106 paired-single instructions that are designed to improve the performance
   35107 of 3D graphics operations.  Support for these instructions is controlled
   35108 by the `-mips3d' command-line option.
   35109 
   35110  The functions listed below map directly to a particular MIPS-3D
   35111 instruction.  Please refer to the architecture specification for more
   35112 details on what each instruction does.
   35113 
   35114 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
   35115      Reduction add (`addr.ps').
   35116 
   35117 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
   35118      Reduction multiply (`mulr.ps').
   35119 
   35120 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
   35121      Convert paired single to paired word (`cvt.pw.ps').
   35122 
   35123 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
   35124      Convert paired word to paired single (`cvt.ps.pw').
   35125 
   35126 `float __builtin_mips_recip1_s (float)'
   35127 `double __builtin_mips_recip1_d (double)'
   35128 `v2sf __builtin_mips_recip1_ps (v2sf)'
   35129      Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
   35130 
   35131 `float __builtin_mips_recip2_s (float, float)'
   35132 `double __builtin_mips_recip2_d (double, double)'
   35133 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
   35134      Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
   35135 
   35136 `float __builtin_mips_rsqrt1_s (float)'
   35137 `double __builtin_mips_rsqrt1_d (double)'
   35138 `v2sf __builtin_mips_rsqrt1_ps (v2sf)'
   35139      Reduced precision reciprocal square root (sequence step 1)
   35140      (`rsqrt1.FMT').
   35141 
   35142 `float __builtin_mips_rsqrt2_s (float, float)'
   35143 `double __builtin_mips_rsqrt2_d (double, double)'
   35144 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
   35145      Reduced precision reciprocal square root (sequence step 2)
   35146      (`rsqrt2.FMT').
   35147 
   35148  The following multi-instruction functions are also available.  In each
   35149 case, COND can be any of the 16 floating-point conditions: `f', `un',
   35150 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
   35151 `lt', `nge', `le' or `ngt'.
   35152 
   35153 `int __builtin_mips_cabs_COND_s (float A, float B)'
   35154 `int __builtin_mips_cabs_COND_d (double A, double B)'
   35155      Absolute comparison of two scalar values (`cabs.COND.FMT',
   35156      `bc1t'/`bc1f').
   35157 
   35158      These functions compare A and B using `cabs.COND.s' or
   35159      `cabs.COND.d' and return the result as a boolean value.  For
   35160      example:
   35161 
   35162           float a, b;
   35163           if (__builtin_mips_cabs_eq_s (a, b))
   35164             true ();
   35165           else
   35166             false ();
   35167 
   35168 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
   35169 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
   35170      Absolute comparison of two paired-single values (`cabs.COND.ps',
   35171      `bc1t'/`bc1f').
   35172 
   35173      These functions compare A and B using `cabs.COND.ps' and return
   35174      either the upper or lower half of the result.  For example:
   35175 
   35176           v2sf a, b;
   35177           if (__builtin_mips_upper_cabs_eq_ps (a, b))
   35178             upper_halves_are_equal ();
   35179           else
   35180             upper_halves_are_unequal ();
   35181 
   35182           if (__builtin_mips_lower_cabs_eq_ps (a, b))
   35183             lower_halves_are_equal ();
   35184           else
   35185             lower_halves_are_unequal ();
   35186 
   35187 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   35188 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
   35189      Conditional move based on absolute comparison (`cabs.COND.ps',
   35190      `movt.ps'/`movf.ps').
   35191 
   35192      The `movt' functions return the value X computed by:
   35193 
   35194           cabs.COND.ps CC,A,B
   35195           mov.ps X,C
   35196           movt.ps X,D,CC
   35197 
   35198      The `movf' functions are similar but use `movf.ps' instead of
   35199      `movt.ps'.
   35200 
   35201 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
   35202 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
   35203 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
   35204 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
   35205      Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
   35206      `bc1any2t'/`bc1any2f').
   35207 
   35208      These functions compare A and B using `c.COND.ps' or
   35209      `cabs.COND.ps'.  The `any' forms return true if either result is
   35210      true and the `all' forms return true if both results are true.
   35211      For example:
   35212 
   35213           v2sf a, b;
   35214           if (__builtin_mips_any_c_eq_ps (a, b))
   35215             one_is_true ();
   35216           else
   35217             both_are_false ();
   35218 
   35219           if (__builtin_mips_all_c_eq_ps (a, b))
   35220             both_are_true ();
   35221           else
   35222             one_is_false ();
   35223 
   35224 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   35225 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   35226 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   35227 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
   35228      Comparison of four paired-single values
   35229      (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
   35230 
   35231      These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
   35232      with B and to compare C with D.  The `any' forms return true if
   35233      any of the four results are true and the `all' forms return true
   35234      if all four results are true.  For example:
   35235 
   35236           v2sf a, b, c, d;
   35237           if (__builtin_mips_any_c_eq_4s (a, b, c, d))
   35238             some_are_true ();
   35239           else
   35240             all_are_false ();
   35241 
   35242           if (__builtin_mips_all_c_eq_4s (a, b, c, d))
   35243             all_are_true ();
   35244           else
   35245             some_are_false ();
   35246 
   35247 
   35248 File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
   35249 
   35250 6.54.10 picoChip Built-in Functions
   35251 -----------------------------------
   35252 
   35253 GCC provides an interface to selected machine instructions from the
   35254 picoChip instruction set.
   35255 
   35256 `int __builtin_sbc (int VALUE)'
   35257      Sign bit count.  Return the number of consecutive bits in VALUE
   35258      which have the same value as the sign-bit.  The result is the
   35259      number of leading sign bits minus one, giving the number of
   35260      redundant sign bits in VALUE.
   35261 
   35262 `int __builtin_byteswap (int VALUE)'
   35263      Byte swap.  Return the result of swapping the upper and lower
   35264      bytes of VALUE.
   35265 
   35266 `int __builtin_brev (int VALUE)'
   35267      Bit reversal.  Return the result of reversing the bits in VALUE.
   35268      Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
   35269      on.
   35270 
   35271 `int __builtin_adds (int X, int Y)'
   35272      Saturating addition.  Return the result of adding X and Y, storing
   35273      the value 32767 if the result overflows.
   35274 
   35275 `int __builtin_subs (int X, int Y)'
   35276      Saturating subtraction.  Return the result of subtracting Y from
   35277      X, storing the value -32768 if the result overflows.
   35278 
   35279 `void __builtin_halt (void)'
   35280      Halt.  The processor will stop execution.  This built-in is useful
   35281      for implementing assertions.
   35282 
   35283 
   35284 
   35285 File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
   35286 
   35287 6.54.11 Other MIPS Built-in Functions
   35288 -------------------------------------
   35289 
   35290 GCC provides other MIPS-specific built-in functions:
   35291 
   35292 `void __builtin_mips_cache (int OP, const volatile void *ADDR)'
   35293      Insert a `cache' instruction with operands OP and ADDR.  GCC
   35294      defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
   35295      when this function is available.
   35296 
   35297 
   35298 File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: RX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
   35299 
   35300 6.54.12 PowerPC AltiVec Built-in Functions
   35301 ------------------------------------------
   35302 
   35303 GCC provides an interface for the PowerPC family of processors to access
   35304 the AltiVec operations described in Motorola's AltiVec Programming
   35305 Interface Manual.  The interface is made available by including
   35306 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
   35307 supports the following vector types.
   35308 
   35309      vector unsigned char
   35310      vector signed char
   35311      vector bool char
   35312 
   35313      vector unsigned short
   35314      vector signed short
   35315      vector bool short
   35316      vector pixel
   35317 
   35318      vector unsigned int
   35319      vector signed int
   35320      vector bool int
   35321      vector float
   35322 
   35323  If `-mvsx' is used the following additional vector types are
   35324 implemented.
   35325 
   35326      vector unsigned long
   35327      vector signed long
   35328      vector double
   35329 
   35330  The long types are only implemented for 64-bit code generation, and
   35331 the long type is only used in the floating point/integer conversion
   35332 instructions.
   35333 
   35334  GCC's implementation of the high-level language interface available
   35335 from C and C++ code differs from Motorola's documentation in several
   35336 ways.
   35337 
   35338    * A vector constant is a list of constant expressions within curly
   35339      braces.
   35340 
   35341    * A vector initializer requires no cast if the vector constant is of
   35342      the same type as the variable it is initializing.
   35343 
   35344    * If `signed' or `unsigned' is omitted, the signedness of the vector
   35345      type is the default signedness of the base type.  The default
   35346      varies depending on the operating system, so a portable program
   35347      should always specify the signedness.
   35348 
   35349    * Compiling with `-maltivec' adds keywords `__vector', `vector',
   35350      `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
   35351      the context-sensitive substitution of the keywords `vector',
   35352      `pixel' and `bool' is disabled.  To use them, you must include
   35353      `<altivec.h>' instead.
   35354 
   35355    * GCC allows using a `typedef' name as the type specifier for a
   35356      vector type.
   35357 
   35358    * For C, overloaded functions are implemented with macros so the
   35359      following does not work:
   35360 
   35361             vec_add ((vector signed int){1, 2, 3, 4}, foo);
   35362 
   35363      Since `vec_add' is a macro, the vector constant in the example is
   35364      treated as four separate arguments.  Wrap the entire argument in
   35365      parentheses for this to work.
   35366 
   35367  _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
   35368 GCC uses built-in functions to achieve the functionality in the
   35369 aforementioned header file, but they are not supported and are subject
   35370 to change without notice.
   35371 
   35372  The following interfaces are supported for the generic and specific
   35373 AltiVec operations and the AltiVec predicates.  In cases where there is
   35374 a direct mapping between generic and specific operations, only the
   35375 generic names are shown here, although the specific operations can also
   35376 be used.
   35377 
   35378  Arguments that are documented as `const int' require literal integral
   35379 values within the range required for that operation.
   35380 
   35381      vector signed char vec_abs (vector signed char);
   35382      vector signed short vec_abs (vector signed short);
   35383      vector signed int vec_abs (vector signed int);
   35384      vector float vec_abs (vector float);
   35385 
   35386      vector signed char vec_abss (vector signed char);
   35387      vector signed short vec_abss (vector signed short);
   35388      vector signed int vec_abss (vector signed int);
   35389 
   35390      vector signed char vec_add (vector bool char, vector signed char);
   35391      vector signed char vec_add (vector signed char, vector bool char);
   35392      vector signed char vec_add (vector signed char, vector signed char);
   35393      vector unsigned char vec_add (vector bool char, vector unsigned char);
   35394      vector unsigned char vec_add (vector unsigned char, vector bool char);
   35395      vector unsigned char vec_add (vector unsigned char,
   35396                                    vector unsigned char);
   35397      vector signed short vec_add (vector bool short, vector signed short);
   35398      vector signed short vec_add (vector signed short, vector bool short);
   35399      vector signed short vec_add (vector signed short, vector signed short);
   35400      vector unsigned short vec_add (vector bool short,
   35401                                     vector unsigned short);
   35402      vector unsigned short vec_add (vector unsigned short,
   35403                                     vector bool short);
   35404      vector unsigned short vec_add (vector unsigned short,
   35405                                     vector unsigned short);
   35406      vector signed int vec_add (vector bool int, vector signed int);
   35407      vector signed int vec_add (vector signed int, vector bool int);
   35408      vector signed int vec_add (vector signed int, vector signed int);
   35409      vector unsigned int vec_add (vector bool int, vector unsigned int);
   35410      vector unsigned int vec_add (vector unsigned int, vector bool int);
   35411      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
   35412      vector float vec_add (vector float, vector float);
   35413 
   35414      vector float vec_vaddfp (vector float, vector float);
   35415 
   35416      vector signed int vec_vadduwm (vector bool int, vector signed int);
   35417      vector signed int vec_vadduwm (vector signed int, vector bool int);
   35418      vector signed int vec_vadduwm (vector signed int, vector signed int);
   35419      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
   35420      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
   35421      vector unsigned int vec_vadduwm (vector unsigned int,
   35422                                       vector unsigned int);
   35423 
   35424      vector signed short vec_vadduhm (vector bool short,
   35425                                       vector signed short);
   35426      vector signed short vec_vadduhm (vector signed short,
   35427                                       vector bool short);
   35428      vector signed short vec_vadduhm (vector signed short,
   35429                                       vector signed short);
   35430      vector unsigned short vec_vadduhm (vector bool short,
   35431                                         vector unsigned short);
   35432      vector unsigned short vec_vadduhm (vector unsigned short,
   35433                                         vector bool short);
   35434      vector unsigned short vec_vadduhm (vector unsigned short,
   35435                                         vector unsigned short);
   35436 
   35437      vector signed char vec_vaddubm (vector bool char, vector signed char);
   35438      vector signed char vec_vaddubm (vector signed char, vector bool char);
   35439      vector signed char vec_vaddubm (vector signed char, vector signed char);
   35440      vector unsigned char vec_vaddubm (vector bool char,
   35441                                        vector unsigned char);
   35442      vector unsigned char vec_vaddubm (vector unsigned char,
   35443                                        vector bool char);
   35444      vector unsigned char vec_vaddubm (vector unsigned char,
   35445                                        vector unsigned char);
   35446 
   35447      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
   35448 
   35449      vector unsigned char vec_adds (vector bool char, vector unsigned char);
   35450      vector unsigned char vec_adds (vector unsigned char, vector bool char);
   35451      vector unsigned char vec_adds (vector unsigned char,
   35452                                     vector unsigned char);
   35453      vector signed char vec_adds (vector bool char, vector signed char);
   35454      vector signed char vec_adds (vector signed char, vector bool char);
   35455      vector signed char vec_adds (vector signed char, vector signed char);
   35456      vector unsigned short vec_adds (vector bool short,
   35457                                      vector unsigned short);
   35458      vector unsigned short vec_adds (vector unsigned short,
   35459                                      vector bool short);
   35460      vector unsigned short vec_adds (vector unsigned short,
   35461                                      vector unsigned short);
   35462      vector signed short vec_adds (vector bool short, vector signed short);
   35463      vector signed short vec_adds (vector signed short, vector bool short);
   35464      vector signed short vec_adds (vector signed short, vector signed short);
   35465      vector unsigned int vec_adds (vector bool int, vector unsigned int);
   35466      vector unsigned int vec_adds (vector unsigned int, vector bool int);
   35467      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
   35468      vector signed int vec_adds (vector bool int, vector signed int);
   35469      vector signed int vec_adds (vector signed int, vector bool int);
   35470      vector signed int vec_adds (vector signed int, vector signed int);
   35471 
   35472      vector signed int vec_vaddsws (vector bool int, vector signed int);
   35473      vector signed int vec_vaddsws (vector signed int, vector bool int);
   35474      vector signed int vec_vaddsws (vector signed int, vector signed int);
   35475 
   35476      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
   35477      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
   35478      vector unsigned int vec_vadduws (vector unsigned int,
   35479                                       vector unsigned int);
   35480 
   35481      vector signed short vec_vaddshs (vector bool short,
   35482                                       vector signed short);
   35483      vector signed short vec_vaddshs (vector signed short,
   35484                                       vector bool short);
   35485      vector signed short vec_vaddshs (vector signed short,
   35486                                       vector signed short);
   35487 
   35488      vector unsigned short vec_vadduhs (vector bool short,
   35489                                         vector unsigned short);
   35490      vector unsigned short vec_vadduhs (vector unsigned short,
   35491                                         vector bool short);
   35492      vector unsigned short vec_vadduhs (vector unsigned short,
   35493                                         vector unsigned short);
   35494 
   35495      vector signed char vec_vaddsbs (vector bool char, vector signed char);
   35496      vector signed char vec_vaddsbs (vector signed char, vector bool char);
   35497      vector signed char vec_vaddsbs (vector signed char, vector signed char);
   35498 
   35499      vector unsigned char vec_vaddubs (vector bool char,
   35500                                        vector unsigned char);
   35501      vector unsigned char vec_vaddubs (vector unsigned char,
   35502                                        vector bool char);
   35503      vector unsigned char vec_vaddubs (vector unsigned char,
   35504                                        vector unsigned char);
   35505 
   35506      vector float vec_and (vector float, vector float);
   35507      vector float vec_and (vector float, vector bool int);
   35508      vector float vec_and (vector bool int, vector float);
   35509      vector bool int vec_and (vector bool int, vector bool int);
   35510      vector signed int vec_and (vector bool int, vector signed int);
   35511      vector signed int vec_and (vector signed int, vector bool int);
   35512      vector signed int vec_and (vector signed int, vector signed int);
   35513      vector unsigned int vec_and (vector bool int, vector unsigned int);
   35514      vector unsigned int vec_and (vector unsigned int, vector bool int);
   35515      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
   35516      vector bool short vec_and (vector bool short, vector bool short);
   35517      vector signed short vec_and (vector bool short, vector signed short);
   35518      vector signed short vec_and (vector signed short, vector bool short);
   35519      vector signed short vec_and (vector signed short, vector signed short);
   35520      vector unsigned short vec_and (vector bool short,
   35521                                     vector unsigned short);
   35522      vector unsigned short vec_and (vector unsigned short,
   35523                                     vector bool short);
   35524      vector unsigned short vec_and (vector unsigned short,
   35525                                     vector unsigned short);
   35526      vector signed char vec_and (vector bool char, vector signed char);
   35527      vector bool char vec_and (vector bool char, vector bool char);
   35528      vector signed char vec_and (vector signed char, vector bool char);
   35529      vector signed char vec_and (vector signed char, vector signed char);
   35530      vector unsigned char vec_and (vector bool char, vector unsigned char);
   35531      vector unsigned char vec_and (vector unsigned char, vector bool char);
   35532      vector unsigned char vec_and (vector unsigned char,
   35533                                    vector unsigned char);
   35534 
   35535      vector float vec_andc (vector float, vector float);
   35536      vector float vec_andc (vector float, vector bool int);
   35537      vector float vec_andc (vector bool int, vector float);
   35538      vector bool int vec_andc (vector bool int, vector bool int);
   35539      vector signed int vec_andc (vector bool int, vector signed int);
   35540      vector signed int vec_andc (vector signed int, vector bool int);
   35541      vector signed int vec_andc (vector signed int, vector signed int);
   35542      vector unsigned int vec_andc (vector bool int, vector unsigned int);
   35543      vector unsigned int vec_andc (vector unsigned int, vector bool int);
   35544      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
   35545      vector bool short vec_andc (vector bool short, vector bool short);
   35546      vector signed short vec_andc (vector bool short, vector signed short);
   35547      vector signed short vec_andc (vector signed short, vector bool short);
   35548      vector signed short vec_andc (vector signed short, vector signed short);
   35549      vector unsigned short vec_andc (vector bool short,
   35550                                      vector unsigned short);
   35551      vector unsigned short vec_andc (vector unsigned short,
   35552                                      vector bool short);
   35553      vector unsigned short vec_andc (vector unsigned short,
   35554                                      vector unsigned short);
   35555      vector signed char vec_andc (vector bool char, vector signed char);
   35556      vector bool char vec_andc (vector bool char, vector bool char);
   35557      vector signed char vec_andc (vector signed char, vector bool char);
   35558      vector signed char vec_andc (vector signed char, vector signed char);
   35559      vector unsigned char vec_andc (vector bool char, vector unsigned char);
   35560      vector unsigned char vec_andc (vector unsigned char, vector bool char);
   35561      vector unsigned char vec_andc (vector unsigned char,
   35562                                     vector unsigned char);
   35563 
   35564      vector unsigned char vec_avg (vector unsigned char,
   35565                                    vector unsigned char);
   35566      vector signed char vec_avg (vector signed char, vector signed char);
   35567      vector unsigned short vec_avg (vector unsigned short,
   35568                                     vector unsigned short);
   35569      vector signed short vec_avg (vector signed short, vector signed short);
   35570      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
   35571      vector signed int vec_avg (vector signed int, vector signed int);
   35572 
   35573      vector signed int vec_vavgsw (vector signed int, vector signed int);
   35574 
   35575      vector unsigned int vec_vavguw (vector unsigned int,
   35576                                      vector unsigned int);
   35577 
   35578      vector signed short vec_vavgsh (vector signed short,
   35579                                      vector signed short);
   35580 
   35581      vector unsigned short vec_vavguh (vector unsigned short,
   35582                                        vector unsigned short);
   35583 
   35584      vector signed char vec_vavgsb (vector signed char, vector signed char);
   35585 
   35586      vector unsigned char vec_vavgub (vector unsigned char,
   35587                                       vector unsigned char);
   35588 
   35589      vector float vec_copysign (vector float);
   35590 
   35591      vector float vec_ceil (vector float);
   35592 
   35593      vector signed int vec_cmpb (vector float, vector float);
   35594 
   35595      vector bool char vec_cmpeq (vector signed char, vector signed char);
   35596      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
   35597      vector bool short vec_cmpeq (vector signed short, vector signed short);
   35598      vector bool short vec_cmpeq (vector unsigned short,
   35599                                   vector unsigned short);
   35600      vector bool int vec_cmpeq (vector signed int, vector signed int);
   35601      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
   35602      vector bool int vec_cmpeq (vector float, vector float);
   35603 
   35604      vector bool int vec_vcmpeqfp (vector float, vector float);
   35605 
   35606      vector bool int vec_vcmpequw (vector signed int, vector signed int);
   35607      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
   35608 
   35609      vector bool short vec_vcmpequh (vector signed short,
   35610                                      vector signed short);
   35611      vector bool short vec_vcmpequh (vector unsigned short,
   35612                                      vector unsigned short);
   35613 
   35614      vector bool char vec_vcmpequb (vector signed char, vector signed char);
   35615      vector bool char vec_vcmpequb (vector unsigned char,
   35616                                     vector unsigned char);
   35617 
   35618      vector bool int vec_cmpge (vector float, vector float);
   35619 
   35620      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
   35621      vector bool char vec_cmpgt (vector signed char, vector signed char);
   35622      vector bool short vec_cmpgt (vector unsigned short,
   35623                                   vector unsigned short);
   35624      vector bool short vec_cmpgt (vector signed short, vector signed short);
   35625      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
   35626      vector bool int vec_cmpgt (vector signed int, vector signed int);
   35627      vector bool int vec_cmpgt (vector float, vector float);
   35628 
   35629      vector bool int vec_vcmpgtfp (vector float, vector float);
   35630 
   35631      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
   35632 
   35633      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
   35634 
   35635      vector bool short vec_vcmpgtsh (vector signed short,
   35636                                      vector signed short);
   35637 
   35638      vector bool short vec_vcmpgtuh (vector unsigned short,
   35639                                      vector unsigned short);
   35640 
   35641      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
   35642 
   35643      vector bool char vec_vcmpgtub (vector unsigned char,
   35644                                     vector unsigned char);
   35645 
   35646      vector bool int vec_cmple (vector float, vector float);
   35647 
   35648      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
   35649      vector bool char vec_cmplt (vector signed char, vector signed char);
   35650      vector bool short vec_cmplt (vector unsigned short,
   35651                                   vector unsigned short);
   35652      vector bool short vec_cmplt (vector signed short, vector signed short);
   35653      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
   35654      vector bool int vec_cmplt (vector signed int, vector signed int);
   35655      vector bool int vec_cmplt (vector float, vector float);
   35656 
   35657      vector float vec_ctf (vector unsigned int, const int);
   35658      vector float vec_ctf (vector signed int, const int);
   35659 
   35660      vector float vec_vcfsx (vector signed int, const int);
   35661 
   35662      vector float vec_vcfux (vector unsigned int, const int);
   35663 
   35664      vector signed int vec_cts (vector float, const int);
   35665 
   35666      vector unsigned int vec_ctu (vector float, const int);
   35667 
   35668      void vec_dss (const int);
   35669 
   35670      void vec_dssall (void);
   35671 
   35672      void vec_dst (const vector unsigned char *, int, const int);
   35673      void vec_dst (const vector signed char *, int, const int);
   35674      void vec_dst (const vector bool char *, int, const int);
   35675      void vec_dst (const vector unsigned short *, int, const int);
   35676      void vec_dst (const vector signed short *, int, const int);
   35677      void vec_dst (const vector bool short *, int, const int);
   35678      void vec_dst (const vector pixel *, int, const int);
   35679      void vec_dst (const vector unsigned int *, int, const int);
   35680      void vec_dst (const vector signed int *, int, const int);
   35681      void vec_dst (const vector bool int *, int, const int);
   35682      void vec_dst (const vector float *, int, const int);
   35683      void vec_dst (const unsigned char *, int, const int);
   35684      void vec_dst (const signed char *, int, const int);
   35685      void vec_dst (const unsigned short *, int, const int);
   35686      void vec_dst (const short *, int, const int);
   35687      void vec_dst (const unsigned int *, int, const int);
   35688      void vec_dst (const int *, int, const int);
   35689      void vec_dst (const unsigned long *, int, const int);
   35690      void vec_dst (const long *, int, const int);
   35691      void vec_dst (const float *, int, const int);
   35692 
   35693      void vec_dstst (const vector unsigned char *, int, const int);
   35694      void vec_dstst (const vector signed char *, int, const int);
   35695      void vec_dstst (const vector bool char *, int, const int);
   35696      void vec_dstst (const vector unsigned short *, int, const int);
   35697      void vec_dstst (const vector signed short *, int, const int);
   35698      void vec_dstst (const vector bool short *, int, const int);
   35699      void vec_dstst (const vector pixel *, int, const int);
   35700      void vec_dstst (const vector unsigned int *, int, const int);
   35701      void vec_dstst (const vector signed int *, int, const int);
   35702      void vec_dstst (const vector bool int *, int, const int);
   35703      void vec_dstst (const vector float *, int, const int);
   35704      void vec_dstst (const unsigned char *, int, const int);
   35705      void vec_dstst (const signed char *, int, const int);
   35706      void vec_dstst (const unsigned short *, int, const int);
   35707      void vec_dstst (const short *, int, const int);
   35708      void vec_dstst (const unsigned int *, int, const int);
   35709      void vec_dstst (const int *, int, const int);
   35710      void vec_dstst (const unsigned long *, int, const int);
   35711      void vec_dstst (const long *, int, const int);
   35712      void vec_dstst (const float *, int, const int);
   35713 
   35714      void vec_dststt (const vector unsigned char *, int, const int);
   35715      void vec_dststt (const vector signed char *, int, const int);
   35716      void vec_dststt (const vector bool char *, int, const int);
   35717      void vec_dststt (const vector unsigned short *, int, const int);
   35718      void vec_dststt (const vector signed short *, int, const int);
   35719      void vec_dststt (const vector bool short *, int, const int);
   35720      void vec_dststt (const vector pixel *, int, const int);
   35721      void vec_dststt (const vector unsigned int *, int, const int);
   35722      void vec_dststt (const vector signed int *, int, const int);
   35723      void vec_dststt (const vector bool int *, int, const int);
   35724      void vec_dststt (const vector float *, int, const int);
   35725      void vec_dststt (const unsigned char *, int, const int);
   35726      void vec_dststt (const signed char *, int, const int);
   35727      void vec_dststt (const unsigned short *, int, const int);
   35728      void vec_dststt (const short *, int, const int);
   35729      void vec_dststt (const unsigned int *, int, const int);
   35730      void vec_dststt (const int *, int, const int);
   35731      void vec_dststt (const unsigned long *, int, const int);
   35732      void vec_dststt (const long *, int, const int);
   35733      void vec_dststt (const float *, int, const int);
   35734 
   35735      void vec_dstt (const vector unsigned char *, int, const int);
   35736      void vec_dstt (const vector signed char *, int, const int);
   35737      void vec_dstt (const vector bool char *, int, const int);
   35738      void vec_dstt (const vector unsigned short *, int, const int);
   35739      void vec_dstt (const vector signed short *, int, const int);
   35740      void vec_dstt (const vector bool short *, int, const int);
   35741      void vec_dstt (const vector pixel *, int, const int);
   35742      void vec_dstt (const vector unsigned int *, int, const int);
   35743      void vec_dstt (const vector signed int *, int, const int);
   35744      void vec_dstt (const vector bool int *, int, const int);
   35745      void vec_dstt (const vector float *, int, const int);
   35746      void vec_dstt (const unsigned char *, int, const int);
   35747      void vec_dstt (const signed char *, int, const int);
   35748      void vec_dstt (const unsigned short *, int, const int);
   35749      void vec_dstt (const short *, int, const int);
   35750      void vec_dstt (const unsigned int *, int, const int);
   35751      void vec_dstt (const int *, int, const int);
   35752      void vec_dstt (const unsigned long *, int, const int);
   35753      void vec_dstt (const long *, int, const int);
   35754      void vec_dstt (const float *, int, const int);
   35755 
   35756      vector float vec_expte (vector float);
   35757 
   35758      vector float vec_floor (vector float);
   35759 
   35760      vector float vec_ld (int, const vector float *);
   35761      vector float vec_ld (int, const float *);
   35762      vector bool int vec_ld (int, const vector bool int *);
   35763      vector signed int vec_ld (int, const vector signed int *);
   35764      vector signed int vec_ld (int, const int *);
   35765      vector signed int vec_ld (int, const long *);
   35766      vector unsigned int vec_ld (int, const vector unsigned int *);
   35767      vector unsigned int vec_ld (int, const unsigned int *);
   35768      vector unsigned int vec_ld (int, const unsigned long *);
   35769      vector bool short vec_ld (int, const vector bool short *);
   35770      vector pixel vec_ld (int, const vector pixel *);
   35771      vector signed short vec_ld (int, const vector signed short *);
   35772      vector signed short vec_ld (int, const short *);
   35773      vector unsigned short vec_ld (int, const vector unsigned short *);
   35774      vector unsigned short vec_ld (int, const unsigned short *);
   35775      vector bool char vec_ld (int, const vector bool char *);
   35776      vector signed char vec_ld (int, const vector signed char *);
   35777      vector signed char vec_ld (int, const signed char *);
   35778      vector unsigned char vec_ld (int, const vector unsigned char *);
   35779      vector unsigned char vec_ld (int, const unsigned char *);
   35780 
   35781      vector signed char vec_lde (int, const signed char *);
   35782      vector unsigned char vec_lde (int, const unsigned char *);
   35783      vector signed short vec_lde (int, const short *);
   35784      vector unsigned short vec_lde (int, const unsigned short *);
   35785      vector float vec_lde (int, const float *);
   35786      vector signed int vec_lde (int, const int *);
   35787      vector unsigned int vec_lde (int, const unsigned int *);
   35788      vector signed int vec_lde (int, const long *);
   35789      vector unsigned int vec_lde (int, const unsigned long *);
   35790 
   35791      vector float vec_lvewx (int, float *);
   35792      vector signed int vec_lvewx (int, int *);
   35793      vector unsigned int vec_lvewx (int, unsigned int *);
   35794      vector signed int vec_lvewx (int, long *);
   35795      vector unsigned int vec_lvewx (int, unsigned long *);
   35796 
   35797      vector signed short vec_lvehx (int, short *);
   35798      vector unsigned short vec_lvehx (int, unsigned short *);
   35799 
   35800      vector signed char vec_lvebx (int, char *);
   35801      vector unsigned char vec_lvebx (int, unsigned char *);
   35802 
   35803      vector float vec_ldl (int, const vector float *);
   35804      vector float vec_ldl (int, const float *);
   35805      vector bool int vec_ldl (int, const vector bool int *);
   35806      vector signed int vec_ldl (int, const vector signed int *);
   35807      vector signed int vec_ldl (int, const int *);
   35808      vector signed int vec_ldl (int, const long *);
   35809      vector unsigned int vec_ldl (int, const vector unsigned int *);
   35810      vector unsigned int vec_ldl (int, const unsigned int *);
   35811      vector unsigned int vec_ldl (int, const unsigned long *);
   35812      vector bool short vec_ldl (int, const vector bool short *);
   35813      vector pixel vec_ldl (int, const vector pixel *);
   35814      vector signed short vec_ldl (int, const vector signed short *);
   35815      vector signed short vec_ldl (int, const short *);
   35816      vector unsigned short vec_ldl (int, const vector unsigned short *);
   35817      vector unsigned short vec_ldl (int, const unsigned short *);
   35818      vector bool char vec_ldl (int, const vector bool char *);
   35819      vector signed char vec_ldl (int, const vector signed char *);
   35820      vector signed char vec_ldl (int, const signed char *);
   35821      vector unsigned char vec_ldl (int, const vector unsigned char *);
   35822      vector unsigned char vec_ldl (int, const unsigned char *);
   35823 
   35824      vector float vec_loge (vector float);
   35825 
   35826      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
   35827      vector unsigned char vec_lvsl (int, const volatile signed char *);
   35828      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
   35829      vector unsigned char vec_lvsl (int, const volatile short *);
   35830      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
   35831      vector unsigned char vec_lvsl (int, const volatile int *);
   35832      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
   35833      vector unsigned char vec_lvsl (int, const volatile long *);
   35834      vector unsigned char vec_lvsl (int, const volatile float *);
   35835 
   35836      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
   35837      vector unsigned char vec_lvsr (int, const volatile signed char *);
   35838      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
   35839      vector unsigned char vec_lvsr (int, const volatile short *);
   35840      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
   35841      vector unsigned char vec_lvsr (int, const volatile int *);
   35842      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
   35843      vector unsigned char vec_lvsr (int, const volatile long *);
   35844      vector unsigned char vec_lvsr (int, const volatile float *);
   35845 
   35846      vector float vec_madd (vector float, vector float, vector float);
   35847 
   35848      vector signed short vec_madds (vector signed short,
   35849                                     vector signed short,
   35850                                     vector signed short);
   35851 
   35852      vector unsigned char vec_max (vector bool char, vector unsigned char);
   35853      vector unsigned char vec_max (vector unsigned char, vector bool char);
   35854      vector unsigned char vec_max (vector unsigned char,
   35855                                    vector unsigned char);
   35856      vector signed char vec_max (vector bool char, vector signed char);
   35857      vector signed char vec_max (vector signed char, vector bool char);
   35858      vector signed char vec_max (vector signed char, vector signed char);
   35859      vector unsigned short vec_max (vector bool short,
   35860                                     vector unsigned short);
   35861      vector unsigned short vec_max (vector unsigned short,
   35862                                     vector bool short);
   35863      vector unsigned short vec_max (vector unsigned short,
   35864                                     vector unsigned short);
   35865      vector signed short vec_max (vector bool short, vector signed short);
   35866      vector signed short vec_max (vector signed short, vector bool short);
   35867      vector signed short vec_max (vector signed short, vector signed short);
   35868      vector unsigned int vec_max (vector bool int, vector unsigned int);
   35869      vector unsigned int vec_max (vector unsigned int, vector bool int);
   35870      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
   35871      vector signed int vec_max (vector bool int, vector signed int);
   35872      vector signed int vec_max (vector signed int, vector bool int);
   35873      vector signed int vec_max (vector signed int, vector signed int);
   35874      vector float vec_max (vector float, vector float);
   35875 
   35876      vector float vec_vmaxfp (vector float, vector float);
   35877 
   35878      vector signed int vec_vmaxsw (vector bool int, vector signed int);
   35879      vector signed int vec_vmaxsw (vector signed int, vector bool int);
   35880      vector signed int vec_vmaxsw (vector signed int, vector signed int);
   35881 
   35882      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
   35883      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
   35884      vector unsigned int vec_vmaxuw (vector unsigned int,
   35885                                      vector unsigned int);
   35886 
   35887      vector signed short vec_vmaxsh (vector bool short, vector signed short);
   35888      vector signed short vec_vmaxsh (vector signed short, vector bool short);
   35889      vector signed short vec_vmaxsh (vector signed short,
   35890                                      vector signed short);
   35891 
   35892      vector unsigned short vec_vmaxuh (vector bool short,
   35893                                        vector unsigned short);
   35894      vector unsigned short vec_vmaxuh (vector unsigned short,
   35895                                        vector bool short);
   35896      vector unsigned short vec_vmaxuh (vector unsigned short,
   35897                                        vector unsigned short);
   35898 
   35899      vector signed char vec_vmaxsb (vector bool char, vector signed char);
   35900      vector signed char vec_vmaxsb (vector signed char, vector bool char);
   35901      vector signed char vec_vmaxsb (vector signed char, vector signed char);
   35902 
   35903      vector unsigned char vec_vmaxub (vector bool char,
   35904                                       vector unsigned char);
   35905      vector unsigned char vec_vmaxub (vector unsigned char,
   35906                                       vector bool char);
   35907      vector unsigned char vec_vmaxub (vector unsigned char,
   35908                                       vector unsigned char);
   35909 
   35910      vector bool char vec_mergeh (vector bool char, vector bool char);
   35911      vector signed char vec_mergeh (vector signed char, vector signed char);
   35912      vector unsigned char vec_mergeh (vector unsigned char,
   35913                                       vector unsigned char);
   35914      vector bool short vec_mergeh (vector bool short, vector bool short);
   35915      vector pixel vec_mergeh (vector pixel, vector pixel);
   35916      vector signed short vec_mergeh (vector signed short,
   35917                                      vector signed short);
   35918      vector unsigned short vec_mergeh (vector unsigned short,
   35919                                        vector unsigned short);
   35920      vector float vec_mergeh (vector float, vector float);
   35921      vector bool int vec_mergeh (vector bool int, vector bool int);
   35922      vector signed int vec_mergeh (vector signed int, vector signed int);
   35923      vector unsigned int vec_mergeh (vector unsigned int,
   35924                                      vector unsigned int);
   35925 
   35926      vector float vec_vmrghw (vector float, vector float);
   35927      vector bool int vec_vmrghw (vector bool int, vector bool int);
   35928      vector signed int vec_vmrghw (vector signed int, vector signed int);
   35929      vector unsigned int vec_vmrghw (vector unsigned int,
   35930                                      vector unsigned int);
   35931 
   35932      vector bool short vec_vmrghh (vector bool short, vector bool short);
   35933      vector signed short vec_vmrghh (vector signed short,
   35934                                      vector signed short);
   35935      vector unsigned short vec_vmrghh (vector unsigned short,
   35936                                        vector unsigned short);
   35937      vector pixel vec_vmrghh (vector pixel, vector pixel);
   35938 
   35939      vector bool char vec_vmrghb (vector bool char, vector bool char);
   35940      vector signed char vec_vmrghb (vector signed char, vector signed char);
   35941      vector unsigned char vec_vmrghb (vector unsigned char,
   35942                                       vector unsigned char);
   35943 
   35944      vector bool char vec_mergel (vector bool char, vector bool char);
   35945      vector signed char vec_mergel (vector signed char, vector signed char);
   35946      vector unsigned char vec_mergel (vector unsigned char,
   35947                                       vector unsigned char);
   35948      vector bool short vec_mergel (vector bool short, vector bool short);
   35949      vector pixel vec_mergel (vector pixel, vector pixel);
   35950      vector signed short vec_mergel (vector signed short,
   35951                                      vector signed short);
   35952      vector unsigned short vec_mergel (vector unsigned short,
   35953                                        vector unsigned short);
   35954      vector float vec_mergel (vector float, vector float);
   35955      vector bool int vec_mergel (vector bool int, vector bool int);
   35956      vector signed int vec_mergel (vector signed int, vector signed int);
   35957      vector unsigned int vec_mergel (vector unsigned int,
   35958                                      vector unsigned int);
   35959 
   35960      vector float vec_vmrglw (vector float, vector float);
   35961      vector signed int vec_vmrglw (vector signed int, vector signed int);
   35962      vector unsigned int vec_vmrglw (vector unsigned int,
   35963                                      vector unsigned int);
   35964      vector bool int vec_vmrglw (vector bool int, vector bool int);
   35965 
   35966      vector bool short vec_vmrglh (vector bool short, vector bool short);
   35967      vector signed short vec_vmrglh (vector signed short,
   35968                                      vector signed short);
   35969      vector unsigned short vec_vmrglh (vector unsigned short,
   35970                                        vector unsigned short);
   35971      vector pixel vec_vmrglh (vector pixel, vector pixel);
   35972 
   35973      vector bool char vec_vmrglb (vector bool char, vector bool char);
   35974      vector signed char vec_vmrglb (vector signed char, vector signed char);
   35975      vector unsigned char vec_vmrglb (vector unsigned char,
   35976                                       vector unsigned char);
   35977 
   35978      vector unsigned short vec_mfvscr (void);
   35979 
   35980      vector unsigned char vec_min (vector bool char, vector unsigned char);
   35981      vector unsigned char vec_min (vector unsigned char, vector bool char);
   35982      vector unsigned char vec_min (vector unsigned char,
   35983                                    vector unsigned char);
   35984      vector signed char vec_min (vector bool char, vector signed char);
   35985      vector signed char vec_min (vector signed char, vector bool char);
   35986      vector signed char vec_min (vector signed char, vector signed char);
   35987      vector unsigned short vec_min (vector bool short,
   35988                                     vector unsigned short);
   35989      vector unsigned short vec_min (vector unsigned short,
   35990                                     vector bool short);
   35991      vector unsigned short vec_min (vector unsigned short,
   35992                                     vector unsigned short);
   35993      vector signed short vec_min (vector bool short, vector signed short);
   35994      vector signed short vec_min (vector signed short, vector bool short);
   35995      vector signed short vec_min (vector signed short, vector signed short);
   35996      vector unsigned int vec_min (vector bool int, vector unsigned int);
   35997      vector unsigned int vec_min (vector unsigned int, vector bool int);
   35998      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
   35999      vector signed int vec_min (vector bool int, vector signed int);
   36000      vector signed int vec_min (vector signed int, vector bool int);
   36001      vector signed int vec_min (vector signed int, vector signed int);
   36002      vector float vec_min (vector float, vector float);
   36003 
   36004      vector float vec_vminfp (vector float, vector float);
   36005 
   36006      vector signed int vec_vminsw (vector bool int, vector signed int);
   36007      vector signed int vec_vminsw (vector signed int, vector bool int);
   36008      vector signed int vec_vminsw (vector signed int, vector signed int);
   36009 
   36010      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
   36011      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
   36012      vector unsigned int vec_vminuw (vector unsigned int,
   36013                                      vector unsigned int);
   36014 
   36015      vector signed short vec_vminsh (vector bool short, vector signed short);
   36016      vector signed short vec_vminsh (vector signed short, vector bool short);
   36017      vector signed short vec_vminsh (vector signed short,
   36018                                      vector signed short);
   36019 
   36020      vector unsigned short vec_vminuh (vector bool short,
   36021                                        vector unsigned short);
   36022      vector unsigned short vec_vminuh (vector unsigned short,
   36023                                        vector bool short);
   36024      vector unsigned short vec_vminuh (vector unsigned short,
   36025                                        vector unsigned short);
   36026 
   36027      vector signed char vec_vminsb (vector bool char, vector signed char);
   36028      vector signed char vec_vminsb (vector signed char, vector bool char);
   36029      vector signed char vec_vminsb (vector signed char, vector signed char);
   36030 
   36031      vector unsigned char vec_vminub (vector bool char,
   36032                                       vector unsigned char);
   36033      vector unsigned char vec_vminub (vector unsigned char,
   36034                                       vector bool char);
   36035      vector unsigned char vec_vminub (vector unsigned char,
   36036                                       vector unsigned char);
   36037 
   36038      vector signed short vec_mladd (vector signed short,
   36039                                     vector signed short,
   36040                                     vector signed short);
   36041      vector signed short vec_mladd (vector signed short,
   36042                                     vector unsigned short,
   36043                                     vector unsigned short);
   36044      vector signed short vec_mladd (vector unsigned short,
   36045                                     vector signed short,
   36046                                     vector signed short);
   36047      vector unsigned short vec_mladd (vector unsigned short,
   36048                                       vector unsigned short,
   36049                                       vector unsigned short);
   36050 
   36051      vector signed short vec_mradds (vector signed short,
   36052                                      vector signed short,
   36053                                      vector signed short);
   36054 
   36055      vector unsigned int vec_msum (vector unsigned char,
   36056                                    vector unsigned char,
   36057                                    vector unsigned int);
   36058      vector signed int vec_msum (vector signed char,
   36059                                  vector unsigned char,
   36060                                  vector signed int);
   36061      vector unsigned int vec_msum (vector unsigned short,
   36062                                    vector unsigned short,
   36063                                    vector unsigned int);
   36064      vector signed int vec_msum (vector signed short,
   36065                                  vector signed short,
   36066                                  vector signed int);
   36067 
   36068      vector signed int vec_vmsumshm (vector signed short,
   36069                                      vector signed short,
   36070                                      vector signed int);
   36071 
   36072      vector unsigned int vec_vmsumuhm (vector unsigned short,
   36073                                        vector unsigned short,
   36074                                        vector unsigned int);
   36075 
   36076      vector signed int vec_vmsummbm (vector signed char,
   36077                                      vector unsigned char,
   36078                                      vector signed int);
   36079 
   36080      vector unsigned int vec_vmsumubm (vector unsigned char,
   36081                                        vector unsigned char,
   36082                                        vector unsigned int);
   36083 
   36084      vector unsigned int vec_msums (vector unsigned short,
   36085                                     vector unsigned short,
   36086                                     vector unsigned int);
   36087      vector signed int vec_msums (vector signed short,
   36088                                   vector signed short,
   36089                                   vector signed int);
   36090 
   36091      vector signed int vec_vmsumshs (vector signed short,
   36092                                      vector signed short,
   36093                                      vector signed int);
   36094 
   36095      vector unsigned int vec_vmsumuhs (vector unsigned short,
   36096                                        vector unsigned short,
   36097                                        vector unsigned int);
   36098 
   36099      void vec_mtvscr (vector signed int);
   36100      void vec_mtvscr (vector unsigned int);
   36101      void vec_mtvscr (vector bool int);
   36102      void vec_mtvscr (vector signed short);
   36103      void vec_mtvscr (vector unsigned short);
   36104      void vec_mtvscr (vector bool short);
   36105      void vec_mtvscr (vector pixel);
   36106      void vec_mtvscr (vector signed char);
   36107      void vec_mtvscr (vector unsigned char);
   36108      void vec_mtvscr (vector bool char);
   36109 
   36110      vector unsigned short vec_mule (vector unsigned char,
   36111                                      vector unsigned char);
   36112      vector signed short vec_mule (vector signed char,
   36113                                    vector signed char);
   36114      vector unsigned int vec_mule (vector unsigned short,
   36115                                    vector unsigned short);
   36116      vector signed int vec_mule (vector signed short, vector signed short);
   36117 
   36118      vector signed int vec_vmulesh (vector signed short,
   36119                                     vector signed short);
   36120 
   36121      vector unsigned int vec_vmuleuh (vector unsigned short,
   36122                                       vector unsigned short);
   36123 
   36124      vector signed short vec_vmulesb (vector signed char,
   36125                                       vector signed char);
   36126 
   36127      vector unsigned short vec_vmuleub (vector unsigned char,
   36128                                        vector unsigned char);
   36129 
   36130      vector unsigned short vec_mulo (vector unsigned char,
   36131                                      vector unsigned char);
   36132      vector signed short vec_mulo (vector signed char, vector signed char);
   36133      vector unsigned int vec_mulo (vector unsigned short,
   36134                                    vector unsigned short);
   36135      vector signed int vec_mulo (vector signed short, vector signed short);
   36136 
   36137      vector signed int vec_vmulosh (vector signed short,
   36138                                     vector signed short);
   36139 
   36140      vector unsigned int vec_vmulouh (vector unsigned short,
   36141                                       vector unsigned short);
   36142 
   36143      vector signed short vec_vmulosb (vector signed char,
   36144                                       vector signed char);
   36145 
   36146      vector unsigned short vec_vmuloub (vector unsigned char,
   36147                                         vector unsigned char);
   36148 
   36149      vector float vec_nmsub (vector float, vector float, vector float);
   36150 
   36151      vector float vec_nor (vector float, vector float);
   36152      vector signed int vec_nor (vector signed int, vector signed int);
   36153      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
   36154      vector bool int vec_nor (vector bool int, vector bool int);
   36155      vector signed short vec_nor (vector signed short, vector signed short);
   36156      vector unsigned short vec_nor (vector unsigned short,
   36157                                     vector unsigned short);
   36158      vector bool short vec_nor (vector bool short, vector bool short);
   36159      vector signed char vec_nor (vector signed char, vector signed char);
   36160      vector unsigned char vec_nor (vector unsigned char,
   36161                                    vector unsigned char);
   36162      vector bool char vec_nor (vector bool char, vector bool char);
   36163 
   36164      vector float vec_or (vector float, vector float);
   36165      vector float vec_or (vector float, vector bool int);
   36166      vector float vec_or (vector bool int, vector float);
   36167      vector bool int vec_or (vector bool int, vector bool int);
   36168      vector signed int vec_or (vector bool int, vector signed int);
   36169      vector signed int vec_or (vector signed int, vector bool int);
   36170      vector signed int vec_or (vector signed int, vector signed int);
   36171      vector unsigned int vec_or (vector bool int, vector unsigned int);
   36172      vector unsigned int vec_or (vector unsigned int, vector bool int);
   36173      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
   36174      vector bool short vec_or (vector bool short, vector bool short);
   36175      vector signed short vec_or (vector bool short, vector signed short);
   36176      vector signed short vec_or (vector signed short, vector bool short);
   36177      vector signed short vec_or (vector signed short, vector signed short);
   36178      vector unsigned short vec_or (vector bool short, vector unsigned short);
   36179      vector unsigned short vec_or (vector unsigned short, vector bool short);
   36180      vector unsigned short vec_or (vector unsigned short,
   36181                                    vector unsigned short);
   36182      vector signed char vec_or (vector bool char, vector signed char);
   36183      vector bool char vec_or (vector bool char, vector bool char);
   36184      vector signed char vec_or (vector signed char, vector bool char);
   36185      vector signed char vec_or (vector signed char, vector signed char);
   36186      vector unsigned char vec_or (vector bool char, vector unsigned char);
   36187      vector unsigned char vec_or (vector unsigned char, vector bool char);
   36188      vector unsigned char vec_or (vector unsigned char,
   36189                                   vector unsigned char);
   36190 
   36191      vector signed char vec_pack (vector signed short, vector signed short);
   36192      vector unsigned char vec_pack (vector unsigned short,
   36193                                     vector unsigned short);
   36194      vector bool char vec_pack (vector bool short, vector bool short);
   36195      vector signed short vec_pack (vector signed int, vector signed int);
   36196      vector unsigned short vec_pack (vector unsigned int,
   36197                                      vector unsigned int);
   36198      vector bool short vec_pack (vector bool int, vector bool int);
   36199 
   36200      vector bool short vec_vpkuwum (vector bool int, vector bool int);
   36201      vector signed short vec_vpkuwum (vector signed int, vector signed int);
   36202      vector unsigned short vec_vpkuwum (vector unsigned int,
   36203                                         vector unsigned int);
   36204 
   36205      vector bool char vec_vpkuhum (vector bool short, vector bool short);
   36206      vector signed char vec_vpkuhum (vector signed short,
   36207                                      vector signed short);
   36208      vector unsigned char vec_vpkuhum (vector unsigned short,
   36209                                        vector unsigned short);
   36210 
   36211      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
   36212 
   36213      vector unsigned char vec_packs (vector unsigned short,
   36214                                      vector unsigned short);
   36215      vector signed char vec_packs (vector signed short, vector signed short);
   36216      vector unsigned short vec_packs (vector unsigned int,
   36217                                       vector unsigned int);
   36218      vector signed short vec_packs (vector signed int, vector signed int);
   36219 
   36220      vector signed short vec_vpkswss (vector signed int, vector signed int);
   36221 
   36222      vector unsigned short vec_vpkuwus (vector unsigned int,
   36223                                         vector unsigned int);
   36224 
   36225      vector signed char vec_vpkshss (vector signed short,
   36226                                      vector signed short);
   36227 
   36228      vector unsigned char vec_vpkuhus (vector unsigned short,
   36229                                        vector unsigned short);
   36230 
   36231      vector unsigned char vec_packsu (vector unsigned short,
   36232                                       vector unsigned short);
   36233      vector unsigned char vec_packsu (vector signed short,
   36234                                       vector signed short);
   36235      vector unsigned short vec_packsu (vector unsigned int,
   36236                                        vector unsigned int);
   36237      vector unsigned short vec_packsu (vector signed int, vector signed int);
   36238 
   36239      vector unsigned short vec_vpkswus (vector signed int,
   36240                                         vector signed int);
   36241 
   36242      vector unsigned char vec_vpkshus (vector signed short,
   36243                                        vector signed short);
   36244 
   36245      vector float vec_perm (vector float,
   36246                             vector float,
   36247                             vector unsigned char);
   36248      vector signed int vec_perm (vector signed int,
   36249                                  vector signed int,
   36250                                  vector unsigned char);
   36251      vector unsigned int vec_perm (vector unsigned int,
   36252                                    vector unsigned int,
   36253                                    vector unsigned char);
   36254      vector bool int vec_perm (vector bool int,
   36255                                vector bool int,
   36256                                vector unsigned char);
   36257      vector signed short vec_perm (vector signed short,
   36258                                    vector signed short,
   36259                                    vector unsigned char);
   36260      vector unsigned short vec_perm (vector unsigned short,
   36261                                      vector unsigned short,
   36262                                      vector unsigned char);
   36263      vector bool short vec_perm (vector bool short,
   36264                                  vector bool short,
   36265                                  vector unsigned char);
   36266      vector pixel vec_perm (vector pixel,
   36267                             vector pixel,
   36268                             vector unsigned char);
   36269      vector signed char vec_perm (vector signed char,
   36270                                   vector signed char,
   36271                                   vector unsigned char);
   36272      vector unsigned char vec_perm (vector unsigned char,
   36273                                     vector unsigned char,
   36274                                     vector unsigned char);
   36275      vector bool char vec_perm (vector bool char,
   36276                                 vector bool char,
   36277                                 vector unsigned char);
   36278 
   36279      vector float vec_re (vector float);
   36280 
   36281      vector signed char vec_rl (vector signed char,
   36282                                 vector unsigned char);
   36283      vector unsigned char vec_rl (vector unsigned char,
   36284                                   vector unsigned char);
   36285      vector signed short vec_rl (vector signed short, vector unsigned short);
   36286      vector unsigned short vec_rl (vector unsigned short,
   36287                                    vector unsigned short);
   36288      vector signed int vec_rl (vector signed int, vector unsigned int);
   36289      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
   36290 
   36291      vector signed int vec_vrlw (vector signed int, vector unsigned int);
   36292      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
   36293 
   36294      vector signed short vec_vrlh (vector signed short,
   36295                                    vector unsigned short);
   36296      vector unsigned short vec_vrlh (vector unsigned short,
   36297                                      vector unsigned short);
   36298 
   36299      vector signed char vec_vrlb (vector signed char, vector unsigned char);
   36300      vector unsigned char vec_vrlb (vector unsigned char,
   36301                                     vector unsigned char);
   36302 
   36303      vector float vec_round (vector float);
   36304 
   36305      vector float vec_recip (vector float, vector float);
   36306 
   36307      vector float vec_rsqrt (vector float);
   36308 
   36309      vector float vec_rsqrte (vector float);
   36310 
   36311      vector float vec_sel (vector float, vector float, vector bool int);
   36312      vector float vec_sel (vector float, vector float, vector unsigned int);
   36313      vector signed int vec_sel (vector signed int,
   36314                                 vector signed int,
   36315                                 vector bool int);
   36316      vector signed int vec_sel (vector signed int,
   36317                                 vector signed int,
   36318                                 vector unsigned int);
   36319      vector unsigned int vec_sel (vector unsigned int,
   36320                                   vector unsigned int,
   36321                                   vector bool int);
   36322      vector unsigned int vec_sel (vector unsigned int,
   36323                                   vector unsigned int,
   36324                                   vector unsigned int);
   36325      vector bool int vec_sel (vector bool int,
   36326                               vector bool int,
   36327                               vector bool int);
   36328      vector bool int vec_sel (vector bool int,
   36329                               vector bool int,
   36330                               vector unsigned int);
   36331      vector signed short vec_sel (vector signed short,
   36332                                   vector signed short,
   36333                                   vector bool short);
   36334      vector signed short vec_sel (vector signed short,
   36335                                   vector signed short,
   36336                                   vector unsigned short);
   36337      vector unsigned short vec_sel (vector unsigned short,
   36338                                     vector unsigned short,
   36339                                     vector bool short);
   36340      vector unsigned short vec_sel (vector unsigned short,
   36341                                     vector unsigned short,
   36342                                     vector unsigned short);
   36343      vector bool short vec_sel (vector bool short,
   36344                                 vector bool short,
   36345                                 vector bool short);
   36346      vector bool short vec_sel (vector bool short,
   36347                                 vector bool short,
   36348                                 vector unsigned short);
   36349      vector signed char vec_sel (vector signed char,
   36350                                  vector signed char,
   36351                                  vector bool char);
   36352      vector signed char vec_sel (vector signed char,
   36353                                  vector signed char,
   36354                                  vector unsigned char);
   36355      vector unsigned char vec_sel (vector unsigned char,
   36356                                    vector unsigned char,
   36357                                    vector bool char);
   36358      vector unsigned char vec_sel (vector unsigned char,
   36359                                    vector unsigned char,
   36360                                    vector unsigned char);
   36361      vector bool char vec_sel (vector bool char,
   36362                                vector bool char,
   36363                                vector bool char);
   36364      vector bool char vec_sel (vector bool char,
   36365                                vector bool char,
   36366                                vector unsigned char);
   36367 
   36368      vector signed char vec_sl (vector signed char,
   36369                                 vector unsigned char);
   36370      vector unsigned char vec_sl (vector unsigned char,
   36371                                   vector unsigned char);
   36372      vector signed short vec_sl (vector signed short, vector unsigned short);
   36373      vector unsigned short vec_sl (vector unsigned short,
   36374                                    vector unsigned short);
   36375      vector signed int vec_sl (vector signed int, vector unsigned int);
   36376      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
   36377 
   36378      vector signed int vec_vslw (vector signed int, vector unsigned int);
   36379      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
   36380 
   36381      vector signed short vec_vslh (vector signed short,
   36382                                    vector unsigned short);
   36383      vector unsigned short vec_vslh (vector unsigned short,
   36384                                      vector unsigned short);
   36385 
   36386      vector signed char vec_vslb (vector signed char, vector unsigned char);
   36387      vector unsigned char vec_vslb (vector unsigned char,
   36388                                     vector unsigned char);
   36389 
   36390      vector float vec_sld (vector float, vector float, const int);
   36391      vector signed int vec_sld (vector signed int,
   36392                                 vector signed int,
   36393                                 const int);
   36394      vector unsigned int vec_sld (vector unsigned int,
   36395                                   vector unsigned int,
   36396                                   const int);
   36397      vector bool int vec_sld (vector bool int,
   36398                               vector bool int,
   36399                               const int);
   36400      vector signed short vec_sld (vector signed short,
   36401                                   vector signed short,
   36402                                   const int);
   36403      vector unsigned short vec_sld (vector unsigned short,
   36404                                     vector unsigned short,
   36405                                     const int);
   36406      vector bool short vec_sld (vector bool short,
   36407                                 vector bool short,
   36408                                 const int);
   36409      vector pixel vec_sld (vector pixel,
   36410                            vector pixel,
   36411                            const int);
   36412      vector signed char vec_sld (vector signed char,
   36413                                  vector signed char,
   36414                                  const int);
   36415      vector unsigned char vec_sld (vector unsigned char,
   36416                                    vector unsigned char,
   36417                                    const int);
   36418      vector bool char vec_sld (vector bool char,
   36419                                vector bool char,
   36420                                const int);
   36421 
   36422      vector signed int vec_sll (vector signed int,
   36423                                 vector unsigned int);
   36424      vector signed int vec_sll (vector signed int,
   36425                                 vector unsigned short);
   36426      vector signed int vec_sll (vector signed int,
   36427                                 vector unsigned char);
   36428      vector unsigned int vec_sll (vector unsigned int,
   36429                                   vector unsigned int);
   36430      vector unsigned int vec_sll (vector unsigned int,
   36431                                   vector unsigned short);
   36432      vector unsigned int vec_sll (vector unsigned int,
   36433                                   vector unsigned char);
   36434      vector bool int vec_sll (vector bool int,
   36435                               vector unsigned int);
   36436      vector bool int vec_sll (vector bool int,
   36437                               vector unsigned short);
   36438      vector bool int vec_sll (vector bool int,
   36439                               vector unsigned char);
   36440      vector signed short vec_sll (vector signed short,
   36441                                   vector unsigned int);
   36442      vector signed short vec_sll (vector signed short,
   36443                                   vector unsigned short);
   36444      vector signed short vec_sll (vector signed short,
   36445                                   vector unsigned char);
   36446      vector unsigned short vec_sll (vector unsigned short,
   36447                                     vector unsigned int);
   36448      vector unsigned short vec_sll (vector unsigned short,
   36449                                     vector unsigned short);
   36450      vector unsigned short vec_sll (vector unsigned short,
   36451                                     vector unsigned char);
   36452      vector bool short vec_sll (vector bool short, vector unsigned int);
   36453      vector bool short vec_sll (vector bool short, vector unsigned short);
   36454      vector bool short vec_sll (vector bool short, vector unsigned char);
   36455      vector pixel vec_sll (vector pixel, vector unsigned int);
   36456      vector pixel vec_sll (vector pixel, vector unsigned short);
   36457      vector pixel vec_sll (vector pixel, vector unsigned char);
   36458      vector signed char vec_sll (vector signed char, vector unsigned int);
   36459      vector signed char vec_sll (vector signed char, vector unsigned short);
   36460      vector signed char vec_sll (vector signed char, vector unsigned char);
   36461      vector unsigned char vec_sll (vector unsigned char,
   36462                                    vector unsigned int);
   36463      vector unsigned char vec_sll (vector unsigned char,
   36464                                    vector unsigned short);
   36465      vector unsigned char vec_sll (vector unsigned char,
   36466                                    vector unsigned char);
   36467      vector bool char vec_sll (vector bool char, vector unsigned int);
   36468      vector bool char vec_sll (vector bool char, vector unsigned short);
   36469      vector bool char vec_sll (vector bool char, vector unsigned char);
   36470 
   36471      vector float vec_slo (vector float, vector signed char);
   36472      vector float vec_slo (vector float, vector unsigned char);
   36473      vector signed int vec_slo (vector signed int, vector signed char);
   36474      vector signed int vec_slo (vector signed int, vector unsigned char);
   36475      vector unsigned int vec_slo (vector unsigned int, vector signed char);
   36476      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
   36477      vector signed short vec_slo (vector signed short, vector signed char);
   36478      vector signed short vec_slo (vector signed short, vector unsigned char);
   36479      vector unsigned short vec_slo (vector unsigned short,
   36480                                     vector signed char);
   36481      vector unsigned short vec_slo (vector unsigned short,
   36482                                     vector unsigned char);
   36483      vector pixel vec_slo (vector pixel, vector signed char);
   36484      vector pixel vec_slo (vector pixel, vector unsigned char);
   36485      vector signed char vec_slo (vector signed char, vector signed char);
   36486      vector signed char vec_slo (vector signed char, vector unsigned char);
   36487      vector unsigned char vec_slo (vector unsigned char, vector signed char);
   36488      vector unsigned char vec_slo (vector unsigned char,
   36489                                    vector unsigned char);
   36490 
   36491      vector signed char vec_splat (vector signed char, const int);
   36492      vector unsigned char vec_splat (vector unsigned char, const int);
   36493      vector bool char vec_splat (vector bool char, const int);
   36494      vector signed short vec_splat (vector signed short, const int);
   36495      vector unsigned short vec_splat (vector unsigned short, const int);
   36496      vector bool short vec_splat (vector bool short, const int);
   36497      vector pixel vec_splat (vector pixel, const int);
   36498      vector float vec_splat (vector float, const int);
   36499      vector signed int vec_splat (vector signed int, const int);
   36500      vector unsigned int vec_splat (vector unsigned int, const int);
   36501      vector bool int vec_splat (vector bool int, const int);
   36502 
   36503      vector float vec_vspltw (vector float, const int);
   36504      vector signed int vec_vspltw (vector signed int, const int);
   36505      vector unsigned int vec_vspltw (vector unsigned int, const int);
   36506      vector bool int vec_vspltw (vector bool int, const int);
   36507 
   36508      vector bool short vec_vsplth (vector bool short, const int);
   36509      vector signed short vec_vsplth (vector signed short, const int);
   36510      vector unsigned short vec_vsplth (vector unsigned short, const int);
   36511      vector pixel vec_vsplth (vector pixel, const int);
   36512 
   36513      vector signed char vec_vspltb (vector signed char, const int);
   36514      vector unsigned char vec_vspltb (vector unsigned char, const int);
   36515      vector bool char vec_vspltb (vector bool char, const int);
   36516 
   36517      vector signed char vec_splat_s8 (const int);
   36518 
   36519      vector signed short vec_splat_s16 (const int);
   36520 
   36521      vector signed int vec_splat_s32 (const int);
   36522 
   36523      vector unsigned char vec_splat_u8 (const int);
   36524 
   36525      vector unsigned short vec_splat_u16 (const int);
   36526 
   36527      vector unsigned int vec_splat_u32 (const int);
   36528 
   36529      vector signed char vec_sr (vector signed char, vector unsigned char);
   36530      vector unsigned char vec_sr (vector unsigned char,
   36531                                   vector unsigned char);
   36532      vector signed short vec_sr (vector signed short,
   36533                                  vector unsigned short);
   36534      vector unsigned short vec_sr (vector unsigned short,
   36535                                    vector unsigned short);
   36536      vector signed int vec_sr (vector signed int, vector unsigned int);
   36537      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
   36538 
   36539      vector signed int vec_vsrw (vector signed int, vector unsigned int);
   36540      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
   36541 
   36542      vector signed short vec_vsrh (vector signed short,
   36543                                    vector unsigned short);
   36544      vector unsigned short vec_vsrh (vector unsigned short,
   36545                                      vector unsigned short);
   36546 
   36547      vector signed char vec_vsrb (vector signed char, vector unsigned char);
   36548      vector unsigned char vec_vsrb (vector unsigned char,
   36549                                     vector unsigned char);
   36550 
   36551      vector signed char vec_sra (vector signed char, vector unsigned char);
   36552      vector unsigned char vec_sra (vector unsigned char,
   36553                                    vector unsigned char);
   36554      vector signed short vec_sra (vector signed short,
   36555                                   vector unsigned short);
   36556      vector unsigned short vec_sra (vector unsigned short,
   36557                                     vector unsigned short);
   36558      vector signed int vec_sra (vector signed int, vector unsigned int);
   36559      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
   36560 
   36561      vector signed int vec_vsraw (vector signed int, vector unsigned int);
   36562      vector unsigned int vec_vsraw (vector unsigned int,
   36563                                     vector unsigned int);
   36564 
   36565      vector signed short vec_vsrah (vector signed short,
   36566                                     vector unsigned short);
   36567      vector unsigned short vec_vsrah (vector unsigned short,
   36568                                       vector unsigned short);
   36569 
   36570      vector signed char vec_vsrab (vector signed char, vector unsigned char);
   36571      vector unsigned char vec_vsrab (vector unsigned char,
   36572                                      vector unsigned char);
   36573 
   36574      vector signed int vec_srl (vector signed int, vector unsigned int);
   36575      vector signed int vec_srl (vector signed int, vector unsigned short);
   36576      vector signed int vec_srl (vector signed int, vector unsigned char);
   36577      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
   36578      vector unsigned int vec_srl (vector unsigned int,
   36579                                   vector unsigned short);
   36580      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
   36581      vector bool int vec_srl (vector bool int, vector unsigned int);
   36582      vector bool int vec_srl (vector bool int, vector unsigned short);
   36583      vector bool int vec_srl (vector bool int, vector unsigned char);
   36584      vector signed short vec_srl (vector signed short, vector unsigned int);
   36585      vector signed short vec_srl (vector signed short,
   36586                                   vector unsigned short);
   36587      vector signed short vec_srl (vector signed short, vector unsigned char);
   36588      vector unsigned short vec_srl (vector unsigned short,
   36589                                     vector unsigned int);
   36590      vector unsigned short vec_srl (vector unsigned short,
   36591                                     vector unsigned short);
   36592      vector unsigned short vec_srl (vector unsigned short,
   36593                                     vector unsigned char);
   36594      vector bool short vec_srl (vector bool short, vector unsigned int);
   36595      vector bool short vec_srl (vector bool short, vector unsigned short);
   36596      vector bool short vec_srl (vector bool short, vector unsigned char);
   36597      vector pixel vec_srl (vector pixel, vector unsigned int);
   36598      vector pixel vec_srl (vector pixel, vector unsigned short);
   36599      vector pixel vec_srl (vector pixel, vector unsigned char);
   36600      vector signed char vec_srl (vector signed char, vector unsigned int);
   36601      vector signed char vec_srl (vector signed char, vector unsigned short);
   36602      vector signed char vec_srl (vector signed char, vector unsigned char);
   36603      vector unsigned char vec_srl (vector unsigned char,
   36604                                    vector unsigned int);
   36605      vector unsigned char vec_srl (vector unsigned char,
   36606                                    vector unsigned short);
   36607      vector unsigned char vec_srl (vector unsigned char,
   36608                                    vector unsigned char);
   36609      vector bool char vec_srl (vector bool char, vector unsigned int);
   36610      vector bool char vec_srl (vector bool char, vector unsigned short);
   36611      vector bool char vec_srl (vector bool char, vector unsigned char);
   36612 
   36613      vector float vec_sro (vector float, vector signed char);
   36614      vector float vec_sro (vector float, vector unsigned char);
   36615      vector signed int vec_sro (vector signed int, vector signed char);
   36616      vector signed int vec_sro (vector signed int, vector unsigned char);
   36617      vector unsigned int vec_sro (vector unsigned int, vector signed char);
   36618      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
   36619      vector signed short vec_sro (vector signed short, vector signed char);
   36620      vector signed short vec_sro (vector signed short, vector unsigned char);
   36621      vector unsigned short vec_sro (vector unsigned short,
   36622                                     vector signed char);
   36623      vector unsigned short vec_sro (vector unsigned short,
   36624                                     vector unsigned char);
   36625      vector pixel vec_sro (vector pixel, vector signed char);
   36626      vector pixel vec_sro (vector pixel, vector unsigned char);
   36627      vector signed char vec_sro (vector signed char, vector signed char);
   36628      vector signed char vec_sro (vector signed char, vector unsigned char);
   36629      vector unsigned char vec_sro (vector unsigned char, vector signed char);
   36630      vector unsigned char vec_sro (vector unsigned char,
   36631                                    vector unsigned char);
   36632 
   36633      void vec_st (vector float, int, vector float *);
   36634      void vec_st (vector float, int, float *);
   36635      void vec_st (vector signed int, int, vector signed int *);
   36636      void vec_st (vector signed int, int, int *);
   36637      void vec_st (vector unsigned int, int, vector unsigned int *);
   36638      void vec_st (vector unsigned int, int, unsigned int *);
   36639      void vec_st (vector bool int, int, vector bool int *);
   36640      void vec_st (vector bool int, int, unsigned int *);
   36641      void vec_st (vector bool int, int, int *);
   36642      void vec_st (vector signed short, int, vector signed short *);
   36643      void vec_st (vector signed short, int, short *);
   36644      void vec_st (vector unsigned short, int, vector unsigned short *);
   36645      void vec_st (vector unsigned short, int, unsigned short *);
   36646      void vec_st (vector bool short, int, vector bool short *);
   36647      void vec_st (vector bool short, int, unsigned short *);
   36648      void vec_st (vector pixel, int, vector pixel *);
   36649      void vec_st (vector pixel, int, unsigned short *);
   36650      void vec_st (vector pixel, int, short *);
   36651      void vec_st (vector bool short, int, short *);
   36652      void vec_st (vector signed char, int, vector signed char *);
   36653      void vec_st (vector signed char, int, signed char *);
   36654      void vec_st (vector unsigned char, int, vector unsigned char *);
   36655      void vec_st (vector unsigned char, int, unsigned char *);
   36656      void vec_st (vector bool char, int, vector bool char *);
   36657      void vec_st (vector bool char, int, unsigned char *);
   36658      void vec_st (vector bool char, int, signed char *);
   36659 
   36660      void vec_ste (vector signed char, int, signed char *);
   36661      void vec_ste (vector unsigned char, int, unsigned char *);
   36662      void vec_ste (vector bool char, int, signed char *);
   36663      void vec_ste (vector bool char, int, unsigned char *);
   36664      void vec_ste (vector signed short, int, short *);
   36665      void vec_ste (vector unsigned short, int, unsigned short *);
   36666      void vec_ste (vector bool short, int, short *);
   36667      void vec_ste (vector bool short, int, unsigned short *);
   36668      void vec_ste (vector pixel, int, short *);
   36669      void vec_ste (vector pixel, int, unsigned short *);
   36670      void vec_ste (vector float, int, float *);
   36671      void vec_ste (vector signed int, int, int *);
   36672      void vec_ste (vector unsigned int, int, unsigned int *);
   36673      void vec_ste (vector bool int, int, int *);
   36674      void vec_ste (vector bool int, int, unsigned int *);
   36675 
   36676      void vec_stvewx (vector float, int, float *);
   36677      void vec_stvewx (vector signed int, int, int *);
   36678      void vec_stvewx (vector unsigned int, int, unsigned int *);
   36679      void vec_stvewx (vector bool int, int, int *);
   36680      void vec_stvewx (vector bool int, int, unsigned int *);
   36681 
   36682      void vec_stvehx (vector signed short, int, short *);
   36683      void vec_stvehx (vector unsigned short, int, unsigned short *);
   36684      void vec_stvehx (vector bool short, int, short *);
   36685      void vec_stvehx (vector bool short, int, unsigned short *);
   36686      void vec_stvehx (vector pixel, int, short *);
   36687      void vec_stvehx (vector pixel, int, unsigned short *);
   36688 
   36689      void vec_stvebx (vector signed char, int, signed char *);
   36690      void vec_stvebx (vector unsigned char, int, unsigned char *);
   36691      void vec_stvebx (vector bool char, int, signed char *);
   36692      void vec_stvebx (vector bool char, int, unsigned char *);
   36693 
   36694      void vec_stl (vector float, int, vector float *);
   36695      void vec_stl (vector float, int, float *);
   36696      void vec_stl (vector signed int, int, vector signed int *);
   36697      void vec_stl (vector signed int, int, int *);
   36698      void vec_stl (vector unsigned int, int, vector unsigned int *);
   36699      void vec_stl (vector unsigned int, int, unsigned int *);
   36700      void vec_stl (vector bool int, int, vector bool int *);
   36701      void vec_stl (vector bool int, int, unsigned int *);
   36702      void vec_stl (vector bool int, int, int *);
   36703      void vec_stl (vector signed short, int, vector signed short *);
   36704      void vec_stl (vector signed short, int, short *);
   36705      void vec_stl (vector unsigned short, int, vector unsigned short *);
   36706      void vec_stl (vector unsigned short, int, unsigned short *);
   36707      void vec_stl (vector bool short, int, vector bool short *);
   36708      void vec_stl (vector bool short, int, unsigned short *);
   36709      void vec_stl (vector bool short, int, short *);
   36710      void vec_stl (vector pixel, int, vector pixel *);
   36711      void vec_stl (vector pixel, int, unsigned short *);
   36712      void vec_stl (vector pixel, int, short *);
   36713      void vec_stl (vector signed char, int, vector signed char *);
   36714      void vec_stl (vector signed char, int, signed char *);
   36715      void vec_stl (vector unsigned char, int, vector unsigned char *);
   36716      void vec_stl (vector unsigned char, int, unsigned char *);
   36717      void vec_stl (vector bool char, int, vector bool char *);
   36718      void vec_stl (vector bool char, int, unsigned char *);
   36719      void vec_stl (vector bool char, int, signed char *);
   36720 
   36721      vector signed char vec_sub (vector bool char, vector signed char);
   36722      vector signed char vec_sub (vector signed char, vector bool char);
   36723      vector signed char vec_sub (vector signed char, vector signed char);
   36724      vector unsigned char vec_sub (vector bool char, vector unsigned char);
   36725      vector unsigned char vec_sub (vector unsigned char, vector bool char);
   36726      vector unsigned char vec_sub (vector unsigned char,
   36727                                    vector unsigned char);
   36728      vector signed short vec_sub (vector bool short, vector signed short);
   36729      vector signed short vec_sub (vector signed short, vector bool short);
   36730      vector signed short vec_sub (vector signed short, vector signed short);
   36731      vector unsigned short vec_sub (vector bool short,
   36732                                     vector unsigned short);
   36733      vector unsigned short vec_sub (vector unsigned short,
   36734                                     vector bool short);
   36735      vector unsigned short vec_sub (vector unsigned short,
   36736                                     vector unsigned short);
   36737      vector signed int vec_sub (vector bool int, vector signed int);
   36738      vector signed int vec_sub (vector signed int, vector bool int);
   36739      vector signed int vec_sub (vector signed int, vector signed int);
   36740      vector unsigned int vec_sub (vector bool int, vector unsigned int);
   36741      vector unsigned int vec_sub (vector unsigned int, vector bool int);
   36742      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
   36743      vector float vec_sub (vector float, vector float);
   36744 
   36745      vector float vec_vsubfp (vector float, vector float);
   36746 
   36747      vector signed int vec_vsubuwm (vector bool int, vector signed int);
   36748      vector signed int vec_vsubuwm (vector signed int, vector bool int);
   36749      vector signed int vec_vsubuwm (vector signed int, vector signed int);
   36750      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
   36751      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
   36752      vector unsigned int vec_vsubuwm (vector unsigned int,
   36753                                       vector unsigned int);
   36754 
   36755      vector signed short vec_vsubuhm (vector bool short,
   36756                                       vector signed short);
   36757      vector signed short vec_vsubuhm (vector signed short,
   36758                                       vector bool short);
   36759      vector signed short vec_vsubuhm (vector signed short,
   36760                                       vector signed short);
   36761      vector unsigned short vec_vsubuhm (vector bool short,
   36762                                         vector unsigned short);
   36763      vector unsigned short vec_vsubuhm (vector unsigned short,
   36764                                         vector bool short);
   36765      vector unsigned short vec_vsubuhm (vector unsigned short,
   36766                                         vector unsigned short);
   36767 
   36768      vector signed char vec_vsububm (vector bool char, vector signed char);
   36769      vector signed char vec_vsububm (vector signed char, vector bool char);
   36770      vector signed char vec_vsububm (vector signed char, vector signed char);
   36771      vector unsigned char vec_vsububm (vector bool char,
   36772                                        vector unsigned char);
   36773      vector unsigned char vec_vsububm (vector unsigned char,
   36774                                        vector bool char);
   36775      vector unsigned char vec_vsububm (vector unsigned char,
   36776                                        vector unsigned char);
   36777 
   36778      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
   36779 
   36780      vector unsigned char vec_subs (vector bool char, vector unsigned char);
   36781      vector unsigned char vec_subs (vector unsigned char, vector bool char);
   36782      vector unsigned char vec_subs (vector unsigned char,
   36783                                     vector unsigned char);
   36784      vector signed char vec_subs (vector bool char, vector signed char);
   36785      vector signed char vec_subs (vector signed char, vector bool char);
   36786      vector signed char vec_subs (vector signed char, vector signed char);
   36787      vector unsigned short vec_subs (vector bool short,
   36788                                      vector unsigned short);
   36789      vector unsigned short vec_subs (vector unsigned short,
   36790                                      vector bool short);
   36791      vector unsigned short vec_subs (vector unsigned short,
   36792                                      vector unsigned short);
   36793      vector signed short vec_subs (vector bool short, vector signed short);
   36794      vector signed short vec_subs (vector signed short, vector bool short);
   36795      vector signed short vec_subs (vector signed short, vector signed short);
   36796      vector unsigned int vec_subs (vector bool int, vector unsigned int);
   36797      vector unsigned int vec_subs (vector unsigned int, vector bool int);
   36798      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
   36799      vector signed int vec_subs (vector bool int, vector signed int);
   36800      vector signed int vec_subs (vector signed int, vector bool int);
   36801      vector signed int vec_subs (vector signed int, vector signed int);
   36802 
   36803      vector signed int vec_vsubsws (vector bool int, vector signed int);
   36804      vector signed int vec_vsubsws (vector signed int, vector bool int);
   36805      vector signed int vec_vsubsws (vector signed int, vector signed int);
   36806 
   36807      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
   36808      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
   36809      vector unsigned int vec_vsubuws (vector unsigned int,
   36810                                       vector unsigned int);
   36811 
   36812      vector signed short vec_vsubshs (vector bool short,
   36813                                       vector signed short);
   36814      vector signed short vec_vsubshs (vector signed short,
   36815                                       vector bool short);
   36816      vector signed short vec_vsubshs (vector signed short,
   36817                                       vector signed short);
   36818 
   36819      vector unsigned short vec_vsubuhs (vector bool short,
   36820                                         vector unsigned short);
   36821      vector unsigned short vec_vsubuhs (vector unsigned short,
   36822                                         vector bool short);
   36823      vector unsigned short vec_vsubuhs (vector unsigned short,
   36824                                         vector unsigned short);
   36825 
   36826      vector signed char vec_vsubsbs (vector bool char, vector signed char);
   36827      vector signed char vec_vsubsbs (vector signed char, vector bool char);
   36828      vector signed char vec_vsubsbs (vector signed char, vector signed char);
   36829 
   36830      vector unsigned char vec_vsububs (vector bool char,
   36831                                        vector unsigned char);
   36832      vector unsigned char vec_vsububs (vector unsigned char,
   36833                                        vector bool char);
   36834      vector unsigned char vec_vsububs (vector unsigned char,
   36835                                        vector unsigned char);
   36836 
   36837      vector unsigned int vec_sum4s (vector unsigned char,
   36838                                     vector unsigned int);
   36839      vector signed int vec_sum4s (vector signed char, vector signed int);
   36840      vector signed int vec_sum4s (vector signed short, vector signed int);
   36841 
   36842      vector signed int vec_vsum4shs (vector signed short, vector signed int);
   36843 
   36844      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
   36845 
   36846      vector unsigned int vec_vsum4ubs (vector unsigned char,
   36847                                        vector unsigned int);
   36848 
   36849      vector signed int vec_sum2s (vector signed int, vector signed int);
   36850 
   36851      vector signed int vec_sums (vector signed int, vector signed int);
   36852 
   36853      vector float vec_trunc (vector float);
   36854 
   36855      vector signed short vec_unpackh (vector signed char);
   36856      vector bool short vec_unpackh (vector bool char);
   36857      vector signed int vec_unpackh (vector signed short);
   36858      vector bool int vec_unpackh (vector bool short);
   36859      vector unsigned int vec_unpackh (vector pixel);
   36860 
   36861      vector bool int vec_vupkhsh (vector bool short);
   36862      vector signed int vec_vupkhsh (vector signed short);
   36863 
   36864      vector unsigned int vec_vupkhpx (vector pixel);
   36865 
   36866      vector bool short vec_vupkhsb (vector bool char);
   36867      vector signed short vec_vupkhsb (vector signed char);
   36868 
   36869      vector signed short vec_unpackl (vector signed char);
   36870      vector bool short vec_unpackl (vector bool char);
   36871      vector unsigned int vec_unpackl (vector pixel);
   36872      vector signed int vec_unpackl (vector signed short);
   36873      vector bool int vec_unpackl (vector bool short);
   36874 
   36875      vector unsigned int vec_vupklpx (vector pixel);
   36876 
   36877      vector bool int vec_vupklsh (vector bool short);
   36878      vector signed int vec_vupklsh (vector signed short);
   36879 
   36880      vector bool short vec_vupklsb (vector bool char);
   36881      vector signed short vec_vupklsb (vector signed char);
   36882 
   36883      vector float vec_xor (vector float, vector float);
   36884      vector float vec_xor (vector float, vector bool int);
   36885      vector float vec_xor (vector bool int, vector float);
   36886      vector bool int vec_xor (vector bool int, vector bool int);
   36887      vector signed int vec_xor (vector bool int, vector signed int);
   36888      vector signed int vec_xor (vector signed int, vector bool int);
   36889      vector signed int vec_xor (vector signed int, vector signed int);
   36890      vector unsigned int vec_xor (vector bool int, vector unsigned int);
   36891      vector unsigned int vec_xor (vector unsigned int, vector bool int);
   36892      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
   36893      vector bool short vec_xor (vector bool short, vector bool short);
   36894      vector signed short vec_xor (vector bool short, vector signed short);
   36895      vector signed short vec_xor (vector signed short, vector bool short);
   36896      vector signed short vec_xor (vector signed short, vector signed short);
   36897      vector unsigned short vec_xor (vector bool short,
   36898                                     vector unsigned short);
   36899      vector unsigned short vec_xor (vector unsigned short,
   36900                                     vector bool short);
   36901      vector unsigned short vec_xor (vector unsigned short,
   36902                                     vector unsigned short);
   36903      vector signed char vec_xor (vector bool char, vector signed char);
   36904      vector bool char vec_xor (vector bool char, vector bool char);
   36905      vector signed char vec_xor (vector signed char, vector bool char);
   36906      vector signed char vec_xor (vector signed char, vector signed char);
   36907      vector unsigned char vec_xor (vector bool char, vector unsigned char);
   36908      vector unsigned char vec_xor (vector unsigned char, vector bool char);
   36909      vector unsigned char vec_xor (vector unsigned char,
   36910                                    vector unsigned char);
   36911 
   36912      int vec_all_eq (vector signed char, vector bool char);
   36913      int vec_all_eq (vector signed char, vector signed char);
   36914      int vec_all_eq (vector unsigned char, vector bool char);
   36915      int vec_all_eq (vector unsigned char, vector unsigned char);
   36916      int vec_all_eq (vector bool char, vector bool char);
   36917      int vec_all_eq (vector bool char, vector unsigned char);
   36918      int vec_all_eq (vector bool char, vector signed char);
   36919      int vec_all_eq (vector signed short, vector bool short);
   36920      int vec_all_eq (vector signed short, vector signed short);
   36921      int vec_all_eq (vector unsigned short, vector bool short);
   36922      int vec_all_eq (vector unsigned short, vector unsigned short);
   36923      int vec_all_eq (vector bool short, vector bool short);
   36924      int vec_all_eq (vector bool short, vector unsigned short);
   36925      int vec_all_eq (vector bool short, vector signed short);
   36926      int vec_all_eq (vector pixel, vector pixel);
   36927      int vec_all_eq (vector signed int, vector bool int);
   36928      int vec_all_eq (vector signed int, vector signed int);
   36929      int vec_all_eq (vector unsigned int, vector bool int);
   36930      int vec_all_eq (vector unsigned int, vector unsigned int);
   36931      int vec_all_eq (vector bool int, vector bool int);
   36932      int vec_all_eq (vector bool int, vector unsigned int);
   36933      int vec_all_eq (vector bool int, vector signed int);
   36934      int vec_all_eq (vector float, vector float);
   36935 
   36936      int vec_all_ge (vector bool char, vector unsigned char);
   36937      int vec_all_ge (vector unsigned char, vector bool char);
   36938      int vec_all_ge (vector unsigned char, vector unsigned char);
   36939      int vec_all_ge (vector bool char, vector signed char);
   36940      int vec_all_ge (vector signed char, vector bool char);
   36941      int vec_all_ge (vector signed char, vector signed char);
   36942      int vec_all_ge (vector bool short, vector unsigned short);
   36943      int vec_all_ge (vector unsigned short, vector bool short);
   36944      int vec_all_ge (vector unsigned short, vector unsigned short);
   36945      int vec_all_ge (vector signed short, vector signed short);
   36946      int vec_all_ge (vector bool short, vector signed short);
   36947      int vec_all_ge (vector signed short, vector bool short);
   36948      int vec_all_ge (vector bool int, vector unsigned int);
   36949      int vec_all_ge (vector unsigned int, vector bool int);
   36950      int vec_all_ge (vector unsigned int, vector unsigned int);
   36951      int vec_all_ge (vector bool int, vector signed int);
   36952      int vec_all_ge (vector signed int, vector bool int);
   36953      int vec_all_ge (vector signed int, vector signed int);
   36954      int vec_all_ge (vector float, vector float);
   36955 
   36956      int vec_all_gt (vector bool char, vector unsigned char);
   36957      int vec_all_gt (vector unsigned char, vector bool char);
   36958      int vec_all_gt (vector unsigned char, vector unsigned char);
   36959      int vec_all_gt (vector bool char, vector signed char);
   36960      int vec_all_gt (vector signed char, vector bool char);
   36961      int vec_all_gt (vector signed char, vector signed char);
   36962      int vec_all_gt (vector bool short, vector unsigned short);
   36963      int vec_all_gt (vector unsigned short, vector bool short);
   36964      int vec_all_gt (vector unsigned short, vector unsigned short);
   36965      int vec_all_gt (vector bool short, vector signed short);
   36966      int vec_all_gt (vector signed short, vector bool short);
   36967      int vec_all_gt (vector signed short, vector signed short);
   36968      int vec_all_gt (vector bool int, vector unsigned int);
   36969      int vec_all_gt (vector unsigned int, vector bool int);
   36970      int vec_all_gt (vector unsigned int, vector unsigned int);
   36971      int vec_all_gt (vector bool int, vector signed int);
   36972      int vec_all_gt (vector signed int, vector bool int);
   36973      int vec_all_gt (vector signed int, vector signed int);
   36974      int vec_all_gt (vector float, vector float);
   36975 
   36976      int vec_all_in (vector float, vector float);
   36977 
   36978      int vec_all_le (vector bool char, vector unsigned char);
   36979      int vec_all_le (vector unsigned char, vector bool char);
   36980      int vec_all_le (vector unsigned char, vector unsigned char);
   36981      int vec_all_le (vector bool char, vector signed char);
   36982      int vec_all_le (vector signed char, vector bool char);
   36983      int vec_all_le (vector signed char, vector signed char);
   36984      int vec_all_le (vector bool short, vector unsigned short);
   36985      int vec_all_le (vector unsigned short, vector bool short);
   36986      int vec_all_le (vector unsigned short, vector unsigned short);
   36987      int vec_all_le (vector bool short, vector signed short);
   36988      int vec_all_le (vector signed short, vector bool short);
   36989      int vec_all_le (vector signed short, vector signed short);
   36990      int vec_all_le (vector bool int, vector unsigned int);
   36991      int vec_all_le (vector unsigned int, vector bool int);
   36992      int vec_all_le (vector unsigned int, vector unsigned int);
   36993      int vec_all_le (vector bool int, vector signed int);
   36994      int vec_all_le (vector signed int, vector bool int);
   36995      int vec_all_le (vector signed int, vector signed int);
   36996      int vec_all_le (vector float, vector float);
   36997 
   36998      int vec_all_lt (vector bool char, vector unsigned char);
   36999      int vec_all_lt (vector unsigned char, vector bool char);
   37000      int vec_all_lt (vector unsigned char, vector unsigned char);
   37001      int vec_all_lt (vector bool char, vector signed char);
   37002      int vec_all_lt (vector signed char, vector bool char);
   37003      int vec_all_lt (vector signed char, vector signed char);
   37004      int vec_all_lt (vector bool short, vector unsigned short);
   37005      int vec_all_lt (vector unsigned short, vector bool short);
   37006      int vec_all_lt (vector unsigned short, vector unsigned short);
   37007      int vec_all_lt (vector bool short, vector signed short);
   37008      int vec_all_lt (vector signed short, vector bool short);
   37009      int vec_all_lt (vector signed short, vector signed short);
   37010      int vec_all_lt (vector bool int, vector unsigned int);
   37011      int vec_all_lt (vector unsigned int, vector bool int);
   37012      int vec_all_lt (vector unsigned int, vector unsigned int);
   37013      int vec_all_lt (vector bool int, vector signed int);
   37014      int vec_all_lt (vector signed int, vector bool int);
   37015      int vec_all_lt (vector signed int, vector signed int);
   37016      int vec_all_lt (vector float, vector float);
   37017 
   37018      int vec_all_nan (vector float);
   37019 
   37020      int vec_all_ne (vector signed char, vector bool char);
   37021      int vec_all_ne (vector signed char, vector signed char);
   37022      int vec_all_ne (vector unsigned char, vector bool char);
   37023      int vec_all_ne (vector unsigned char, vector unsigned char);
   37024      int vec_all_ne (vector bool char, vector bool char);
   37025      int vec_all_ne (vector bool char, vector unsigned char);
   37026      int vec_all_ne (vector bool char, vector signed char);
   37027      int vec_all_ne (vector signed short, vector bool short);
   37028      int vec_all_ne (vector signed short, vector signed short);
   37029      int vec_all_ne (vector unsigned short, vector bool short);
   37030      int vec_all_ne (vector unsigned short, vector unsigned short);
   37031      int vec_all_ne (vector bool short, vector bool short);
   37032      int vec_all_ne (vector bool short, vector unsigned short);
   37033      int vec_all_ne (vector bool short, vector signed short);
   37034      int vec_all_ne (vector pixel, vector pixel);
   37035      int vec_all_ne (vector signed int, vector bool int);
   37036      int vec_all_ne (vector signed int, vector signed int);
   37037      int vec_all_ne (vector unsigned int, vector bool int);
   37038      int vec_all_ne (vector unsigned int, vector unsigned int);
   37039      int vec_all_ne (vector bool int, vector bool int);
   37040      int vec_all_ne (vector bool int, vector unsigned int);
   37041      int vec_all_ne (vector bool int, vector signed int);
   37042      int vec_all_ne (vector float, vector float);
   37043 
   37044      int vec_all_nge (vector float, vector float);
   37045 
   37046      int vec_all_ngt (vector float, vector float);
   37047 
   37048      int vec_all_nle (vector float, vector float);
   37049 
   37050      int vec_all_nlt (vector float, vector float);
   37051 
   37052      int vec_all_numeric (vector float);
   37053 
   37054      int vec_any_eq (vector signed char, vector bool char);
   37055      int vec_any_eq (vector signed char, vector signed char);
   37056      int vec_any_eq (vector unsigned char, vector bool char);
   37057      int vec_any_eq (vector unsigned char, vector unsigned char);
   37058      int vec_any_eq (vector bool char, vector bool char);
   37059      int vec_any_eq (vector bool char, vector unsigned char);
   37060      int vec_any_eq (vector bool char, vector signed char);
   37061      int vec_any_eq (vector signed short, vector bool short);
   37062      int vec_any_eq (vector signed short, vector signed short);
   37063      int vec_any_eq (vector unsigned short, vector bool short);
   37064      int vec_any_eq (vector unsigned short, vector unsigned short);
   37065      int vec_any_eq (vector bool short, vector bool short);
   37066      int vec_any_eq (vector bool short, vector unsigned short);
   37067      int vec_any_eq (vector bool short, vector signed short);
   37068      int vec_any_eq (vector pixel, vector pixel);
   37069      int vec_any_eq (vector signed int, vector bool int);
   37070      int vec_any_eq (vector signed int, vector signed int);
   37071      int vec_any_eq (vector unsigned int, vector bool int);
   37072      int vec_any_eq (vector unsigned int, vector unsigned int);
   37073      int vec_any_eq (vector bool int, vector bool int);
   37074      int vec_any_eq (vector bool int, vector unsigned int);
   37075      int vec_any_eq (vector bool int, vector signed int);
   37076      int vec_any_eq (vector float, vector float);
   37077 
   37078      int vec_any_ge (vector signed char, vector bool char);
   37079      int vec_any_ge (vector unsigned char, vector bool char);
   37080      int vec_any_ge (vector unsigned char, vector unsigned char);
   37081      int vec_any_ge (vector signed char, vector signed char);
   37082      int vec_any_ge (vector bool char, vector unsigned char);
   37083      int vec_any_ge (vector bool char, vector signed char);
   37084      int vec_any_ge (vector unsigned short, vector bool short);
   37085      int vec_any_ge (vector unsigned short, vector unsigned short);
   37086      int vec_any_ge (vector signed short, vector signed short);
   37087      int vec_any_ge (vector signed short, vector bool short);
   37088      int vec_any_ge (vector bool short, vector unsigned short);
   37089      int vec_any_ge (vector bool short, vector signed short);
   37090      int vec_any_ge (vector signed int, vector bool int);
   37091      int vec_any_ge (vector unsigned int, vector bool int);
   37092      int vec_any_ge (vector unsigned int, vector unsigned int);
   37093      int vec_any_ge (vector signed int, vector signed int);
   37094      int vec_any_ge (vector bool int, vector unsigned int);
   37095      int vec_any_ge (vector bool int, vector signed int);
   37096      int vec_any_ge (vector float, vector float);
   37097 
   37098      int vec_any_gt (vector bool char, vector unsigned char);
   37099      int vec_any_gt (vector unsigned char, vector bool char);
   37100      int vec_any_gt (vector unsigned char, vector unsigned char);
   37101      int vec_any_gt (vector bool char, vector signed char);
   37102      int vec_any_gt (vector signed char, vector bool char);
   37103      int vec_any_gt (vector signed char, vector signed char);
   37104      int vec_any_gt (vector bool short, vector unsigned short);
   37105      int vec_any_gt (vector unsigned short, vector bool short);
   37106      int vec_any_gt (vector unsigned short, vector unsigned short);
   37107      int vec_any_gt (vector bool short, vector signed short);
   37108      int vec_any_gt (vector signed short, vector bool short);
   37109      int vec_any_gt (vector signed short, vector signed short);
   37110      int vec_any_gt (vector bool int, vector unsigned int);
   37111      int vec_any_gt (vector unsigned int, vector bool int);
   37112      int vec_any_gt (vector unsigned int, vector unsigned int);
   37113      int vec_any_gt (vector bool int, vector signed int);
   37114      int vec_any_gt (vector signed int, vector bool int);
   37115      int vec_any_gt (vector signed int, vector signed int);
   37116      int vec_any_gt (vector float, vector float);
   37117 
   37118      int vec_any_le (vector bool char, vector unsigned char);
   37119      int vec_any_le (vector unsigned char, vector bool char);
   37120      int vec_any_le (vector unsigned char, vector unsigned char);
   37121      int vec_any_le (vector bool char, vector signed char);
   37122      int vec_any_le (vector signed char, vector bool char);
   37123      int vec_any_le (vector signed char, vector signed char);
   37124      int vec_any_le (vector bool short, vector unsigned short);
   37125      int vec_any_le (vector unsigned short, vector bool short);
   37126      int vec_any_le (vector unsigned short, vector unsigned short);
   37127      int vec_any_le (vector bool short, vector signed short);
   37128      int vec_any_le (vector signed short, vector bool short);
   37129      int vec_any_le (vector signed short, vector signed short);
   37130      int vec_any_le (vector bool int, vector unsigned int);
   37131      int vec_any_le (vector unsigned int, vector bool int);
   37132      int vec_any_le (vector unsigned int, vector unsigned int);
   37133      int vec_any_le (vector bool int, vector signed int);
   37134      int vec_any_le (vector signed int, vector bool int);
   37135      int vec_any_le (vector signed int, vector signed int);
   37136      int vec_any_le (vector float, vector float);
   37137 
   37138      int vec_any_lt (vector bool char, vector unsigned char);
   37139      int vec_any_lt (vector unsigned char, vector bool char);
   37140      int vec_any_lt (vector unsigned char, vector unsigned char);
   37141      int vec_any_lt (vector bool char, vector signed char);
   37142      int vec_any_lt (vector signed char, vector bool char);
   37143      int vec_any_lt (vector signed char, vector signed char);
   37144      int vec_any_lt (vector bool short, vector unsigned short);
   37145      int vec_any_lt (vector unsigned short, vector bool short);
   37146      int vec_any_lt (vector unsigned short, vector unsigned short);
   37147      int vec_any_lt (vector bool short, vector signed short);
   37148      int vec_any_lt (vector signed short, vector bool short);
   37149      int vec_any_lt (vector signed short, vector signed short);
   37150      int vec_any_lt (vector bool int, vector unsigned int);
   37151      int vec_any_lt (vector unsigned int, vector bool int);
   37152      int vec_any_lt (vector unsigned int, vector unsigned int);
   37153      int vec_any_lt (vector bool int, vector signed int);
   37154      int vec_any_lt (vector signed int, vector bool int);
   37155      int vec_any_lt (vector signed int, vector signed int);
   37156      int vec_any_lt (vector float, vector float);
   37157 
   37158      int vec_any_nan (vector float);
   37159 
   37160      int vec_any_ne (vector signed char, vector bool char);
   37161      int vec_any_ne (vector signed char, vector signed char);
   37162      int vec_any_ne (vector unsigned char, vector bool char);
   37163      int vec_any_ne (vector unsigned char, vector unsigned char);
   37164      int vec_any_ne (vector bool char, vector bool char);
   37165      int vec_any_ne (vector bool char, vector unsigned char);
   37166      int vec_any_ne (vector bool char, vector signed char);
   37167      int vec_any_ne (vector signed short, vector bool short);
   37168      int vec_any_ne (vector signed short, vector signed short);
   37169      int vec_any_ne (vector unsigned short, vector bool short);
   37170      int vec_any_ne (vector unsigned short, vector unsigned short);
   37171      int vec_any_ne (vector bool short, vector bool short);
   37172      int vec_any_ne (vector bool short, vector unsigned short);
   37173      int vec_any_ne (vector bool short, vector signed short);
   37174      int vec_any_ne (vector pixel, vector pixel);
   37175      int vec_any_ne (vector signed int, vector bool int);
   37176      int vec_any_ne (vector signed int, vector signed int);
   37177      int vec_any_ne (vector unsigned int, vector bool int);
   37178      int vec_any_ne (vector unsigned int, vector unsigned int);
   37179      int vec_any_ne (vector bool int, vector bool int);
   37180      int vec_any_ne (vector bool int, vector unsigned int);
   37181      int vec_any_ne (vector bool int, vector signed int);
   37182      int vec_any_ne (vector float, vector float);
   37183 
   37184      int vec_any_nge (vector float, vector float);
   37185 
   37186      int vec_any_ngt (vector float, vector float);
   37187 
   37188      int vec_any_nle (vector float, vector float);
   37189 
   37190      int vec_any_nlt (vector float, vector float);
   37191 
   37192      int vec_any_numeric (vector float);
   37193 
   37194      int vec_any_out (vector float, vector float);
   37195 
   37196  If the vector/scalar (VSX) instruction set is available, the following
   37197 additional functions are available:
   37198 
   37199      vector double vec_abs (vector double);
   37200      vector double vec_add (vector double, vector double);
   37201      vector double vec_and (vector double, vector double);
   37202      vector double vec_and (vector double, vector bool long);
   37203      vector double vec_and (vector bool long, vector double);
   37204      vector double vec_andc (vector double, vector double);
   37205      vector double vec_andc (vector double, vector bool long);
   37206      vector double vec_andc (vector bool long, vector double);
   37207      vector double vec_ceil (vector double);
   37208      vector bool long vec_cmpeq (vector double, vector double);
   37209      vector bool long vec_cmpge (vector double, vector double);
   37210      vector bool long vec_cmpgt (vector double, vector double);
   37211      vector bool long vec_cmple (vector double, vector double);
   37212      vector bool long vec_cmplt (vector double, vector double);
   37213      vector float vec_div (vector float, vector float);
   37214      vector double vec_div (vector double, vector double);
   37215      vector double vec_floor (vector double);
   37216      vector double vec_ld (int, const vector double *);
   37217      vector double vec_ld (int, const double *);
   37218      vector double vec_ldl (int, const vector double *);
   37219      vector double vec_ldl (int, const double *);
   37220      vector unsigned char vec_lvsl (int, const volatile double *);
   37221      vector unsigned char vec_lvsr (int, const volatile double *);
   37222      vector double vec_madd (vector double, vector double, vector double);
   37223      vector double vec_max (vector double, vector double);
   37224      vector double vec_min (vector double, vector double);
   37225      vector float vec_msub (vector float, vector float, vector float);
   37226      vector double vec_msub (vector double, vector double, vector double);
   37227      vector float vec_mul (vector float, vector float);
   37228      vector double vec_mul (vector double, vector double);
   37229      vector float vec_nearbyint (vector float);
   37230      vector double vec_nearbyint (vector double);
   37231      vector float vec_nmadd (vector float, vector float, vector float);
   37232      vector double vec_nmadd (vector double, vector double, vector double);
   37233      vector double vec_nmsub (vector double, vector double, vector double);
   37234      vector double vec_nor (vector double, vector double);
   37235      vector double vec_or (vector double, vector double);
   37236      vector double vec_or (vector double, vector bool long);
   37237      vector double vec_or (vector bool long, vector double);
   37238      vector double vec_perm (vector double,
   37239                              vector double,
   37240                              vector unsigned char);
   37241      vector double vec_rint (vector double);
   37242      vector double vec_recip (vector double, vector double);
   37243      vector double vec_rsqrt (vector double);
   37244      vector double vec_rsqrte (vector double);
   37245      vector double vec_sel (vector double, vector double, vector bool long);
   37246      vector double vec_sel (vector double, vector double, vector unsigned long);
   37247      vector double vec_sub (vector double, vector double);
   37248      vector float vec_sqrt (vector float);
   37249      vector double vec_sqrt (vector double);
   37250      void vec_st (vector double, int, vector double *);
   37251      void vec_st (vector double, int, double *);
   37252      vector double vec_trunc (vector double);
   37253      vector double vec_xor (vector double, vector double);
   37254      vector double vec_xor (vector double, vector bool long);
   37255      vector double vec_xor (vector bool long, vector double);
   37256      int vec_all_eq (vector double, vector double);
   37257      int vec_all_ge (vector double, vector double);
   37258      int vec_all_gt (vector double, vector double);
   37259      int vec_all_le (vector double, vector double);
   37260      int vec_all_lt (vector double, vector double);
   37261      int vec_all_nan (vector double);
   37262      int vec_all_ne (vector double, vector double);
   37263      int vec_all_nge (vector double, vector double);
   37264      int vec_all_ngt (vector double, vector double);
   37265      int vec_all_nle (vector double, vector double);
   37266      int vec_all_nlt (vector double, vector double);
   37267      int vec_all_numeric (vector double);
   37268      int vec_any_eq (vector double, vector double);
   37269      int vec_any_ge (vector double, vector double);
   37270      int vec_any_gt (vector double, vector double);
   37271      int vec_any_le (vector double, vector double);
   37272      int vec_any_lt (vector double, vector double);
   37273      int vec_any_nan (vector double);
   37274      int vec_any_ne (vector double, vector double);
   37275      int vec_any_nge (vector double, vector double);
   37276      int vec_any_ngt (vector double, vector double);
   37277      int vec_any_nle (vector double, vector double);
   37278      int vec_any_nlt (vector double, vector double);
   37279      int vec_any_numeric (vector double);
   37280 
   37281      vector double vec_vsx_ld (int, const vector double *);
   37282      vector double vec_vsx_ld (int, const double *);
   37283      vector float vec_vsx_ld (int, const vector float *);
   37284      vector float vec_vsx_ld (int, const float *);
   37285      vector bool int vec_vsx_ld (int, const vector bool int *);
   37286      vector signed int vec_vsx_ld (int, const vector signed int *);
   37287      vector signed int vec_vsx_ld (int, const int *);
   37288      vector signed int vec_vsx_ld (int, const long *);
   37289      vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
   37290      vector unsigned int vec_vsx_ld (int, const unsigned int *);
   37291      vector unsigned int vec_vsx_ld (int, const unsigned long *);
   37292      vector bool short vec_vsx_ld (int, const vector bool short *);
   37293      vector pixel vec_vsx_ld (int, const vector pixel *);
   37294      vector signed short vec_vsx_ld (int, const vector signed short *);
   37295      vector signed short vec_vsx_ld (int, const short *);
   37296      vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
   37297      vector unsigned short vec_vsx_ld (int, const unsigned short *);
   37298      vector bool char vec_vsx_ld (int, const vector bool char *);
   37299      vector signed char vec_vsx_ld (int, const vector signed char *);
   37300      vector signed char vec_vsx_ld (int, const signed char *);
   37301      vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
   37302      vector unsigned char vec_vsx_ld (int, const unsigned char *);
   37303 
   37304      void vec_vsx_st (vector double, int, vector double *);
   37305      void vec_vsx_st (vector double, int, double *);
   37306      void vec_vsx_st (vector float, int, vector float *);
   37307      void vec_vsx_st (vector float, int, float *);
   37308      void vec_vsx_st (vector signed int, int, vector signed int *);
   37309      void vec_vsx_st (vector signed int, int, int *);
   37310      void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
   37311      void vec_vsx_st (vector unsigned int, int, unsigned int *);
   37312      void vec_vsx_st (vector bool int, int, vector bool int *);
   37313      void vec_vsx_st (vector bool int, int, unsigned int *);
   37314      void vec_vsx_st (vector bool int, int, int *);
   37315      void vec_vsx_st (vector signed short, int, vector signed short *);
   37316      void vec_vsx_st (vector signed short, int, short *);
   37317      void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
   37318      void vec_vsx_st (vector unsigned short, int, unsigned short *);
   37319      void vec_vsx_st (vector bool short, int, vector bool short *);
   37320      void vec_vsx_st (vector bool short, int, unsigned short *);
   37321      void vec_vsx_st (vector pixel, int, vector pixel *);
   37322      void vec_vsx_st (vector pixel, int, unsigned short *);
   37323      void vec_vsx_st (vector pixel, int, short *);
   37324      void vec_vsx_st (vector bool short, int, short *);
   37325      void vec_vsx_st (vector signed char, int, vector signed char *);
   37326      void vec_vsx_st (vector signed char, int, signed char *);
   37327      void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
   37328      void vec_vsx_st (vector unsigned char, int, unsigned char *);
   37329      void vec_vsx_st (vector bool char, int, vector bool char *);
   37330      void vec_vsx_st (vector bool char, int, unsigned char *);
   37331      void vec_vsx_st (vector bool char, int, signed char *);
   37332 
   37333  Note that the `vec_ld' and `vec_st' builtins will always generate the
   37334 Altivec `LVX' and `STVX' instructions even if the VSX instruction set
   37335 is available.  The `vec_vsx_ld' and `vec_vsx_st' builtins will always
   37336 generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
   37337 instructions.
   37338 
   37339  GCC provides a few other builtins on Powerpc to access certain
   37340 instructions:
   37341      float __builtin_recipdivf (float, float);
   37342      float __builtin_rsqrtf (float);
   37343      double __builtin_recipdiv (double, double);
   37344      double __builtin_rsqrt (double);
   37345      long __builtin_bpermd (long, long);
   37346      int __builtin_bswap16 (int);
   37347 
   37348  The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
   37349 generate multiple instructions to implement the reciprocal sqrt
   37350 functionality using reciprocal sqrt estimate instructions.
   37351 
   37352  The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
   37353 multiple instructions to implement division using the reciprocal
   37354 estimate instructions.
   37355 
   37356 
   37357 File: gcc.info,  Node: RX Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
   37358 
   37359 6.54.13 RX Built-in Functions
   37360 -----------------------------
   37361 
   37362 GCC supports some of the RX instructions which cannot be expressed in
   37363 the C programming language via the use of built-in functions.  The
   37364 following functions are supported:
   37365 
   37366  -- Built-in Function: void __builtin_rx_brk (void)
   37367      Generates the `brk' machine instruction.
   37368 
   37369  -- Built-in Function: void __builtin_rx_clrpsw (int)
   37370      Generates the `clrpsw' machine instruction to clear the specified
   37371      bit in the processor status word.
   37372 
   37373  -- Built-in Function: void __builtin_rx_int (int)
   37374      Generates the `int' machine instruction to generate an interrupt
   37375      with the specified value.
   37376 
   37377  -- Built-in Function: void __builtin_rx_machi (int, int)
   37378      Generates the `machi' machine instruction to add the result of
   37379      multiplying the top 16-bits of the two arguments into the
   37380      accumulator.
   37381 
   37382  -- Built-in Function: void __builtin_rx_maclo (int, int)
   37383      Generates the `maclo' machine instruction to add the result of
   37384      multiplying the bottom 16-bits of the two arguments into the
   37385      accumulator.
   37386 
   37387  -- Built-in Function: void __builtin_rx_mulhi (int, int)
   37388      Generates the `mulhi' machine instruction to place the result of
   37389      multiplying the top 16-bits of the two arguments into the
   37390      accumulator.
   37391 
   37392  -- Built-in Function: void __builtin_rx_mullo (int, int)
   37393      Generates the `mullo' machine instruction to place the result of
   37394      multiplying the bottom 16-bits of the two arguments into the
   37395      accumulator.
   37396 
   37397  -- Built-in Function: int __builtin_rx_mvfachi (void)
   37398      Generates the `mvfachi' machine instruction to read the top
   37399      32-bits of the accumulator.
   37400 
   37401  -- Built-in Function: int __builtin_rx_mvfacmi (void)
   37402      Generates the `mvfacmi' machine instruction to read the middle
   37403      32-bits of the accumulator.
   37404 
   37405  -- Built-in Function: int __builtin_rx_mvfc (int)
   37406      Generates the `mvfc' machine instruction which reads the control
   37407      register specified in its argument and returns its value.
   37408 
   37409  -- Built-in Function: void __builtin_rx_mvtachi (int)
   37410      Generates the `mvtachi' machine instruction to set the top 32-bits
   37411      of the accumulator.
   37412 
   37413  -- Built-in Function: void __builtin_rx_mvtaclo (int)
   37414      Generates the `mvtaclo' machine instruction to set the bottom
   37415      32-bits of the accumulator.
   37416 
   37417  -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
   37418      Generates the `mvtc' machine instruction which sets control
   37419      register number `reg' to `val'.
   37420 
   37421  -- Built-in Function: void __builtin_rx_mvtipl (int)
   37422      Generates the `mvtipl' machine instruction set the interrupt
   37423      priority level.
   37424 
   37425  -- Built-in Function: void __builtin_rx_racw (int)
   37426      Generates the `racw' machine instruction to round the accumulator
   37427      according to the specified mode.
   37428 
   37429  -- Built-in Function: int __builtin_rx_revw (int)
   37430      Generates the `revw' machine instruction which swaps the bytes in
   37431      the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
   37432      and also bits 16-23 occupy bits 24-31 and vice versa.
   37433 
   37434  -- Built-in Function: void __builtin_rx_rmpa (void)
   37435      Generates the `rmpa' machine instruction which initiates a
   37436      repeated multiply and accumulate sequence.
   37437 
   37438  -- Built-in Function: void __builtin_rx_round (float)
   37439      Generates the `round' machine instruction which returns the
   37440      floating point argument rounded according to the current rounding
   37441      mode set in the floating point status word register.
   37442 
   37443  -- Built-in Function: int __builtin_rx_sat (int)
   37444      Generates the `sat' machine instruction which returns the
   37445      saturated value of the argument.
   37446 
   37447  -- Built-in Function: void __builtin_rx_setpsw (int)
   37448      Generates the `setpsw' machine instruction to set the specified
   37449      bit in the processor status word.
   37450 
   37451  -- Built-in Function: void __builtin_rx_wait (void)
   37452      Generates the `wait' machine instruction.
   37453 
   37454 
   37455 File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
   37456 
   37457 6.54.14 SPARC VIS Built-in Functions
   37458 ------------------------------------
   37459 
   37460 GCC supports SIMD operations on the SPARC using both the generic vector
   37461 extensions (*note Vector Extensions::) as well as built-in functions for
   37462 the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
   37463 switch, the VIS extension is exposed as the following built-in
   37464 functions:
   37465 
   37466      typedef int v2si __attribute__ ((vector_size (8)));
   37467      typedef short v4hi __attribute__ ((vector_size (8)));
   37468      typedef short v2hi __attribute__ ((vector_size (4)));
   37469      typedef char v8qi __attribute__ ((vector_size (8)));
   37470      typedef char v4qi __attribute__ ((vector_size (4)));
   37471 
   37472      void * __builtin_vis_alignaddr (void *, long);
   37473      int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
   37474      v2si __builtin_vis_faligndatav2si (v2si, v2si);
   37475      v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
   37476      v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
   37477 
   37478      v4hi __builtin_vis_fexpand (v4qi);
   37479 
   37480      v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
   37481      v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
   37482      v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
   37483      v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
   37484      v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
   37485      v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
   37486      v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
   37487 
   37488      v4qi __builtin_vis_fpack16 (v4hi);
   37489      v8qi __builtin_vis_fpack32 (v2si, v2si);
   37490      v2hi __builtin_vis_fpackfix (v2si);
   37491      v8qi __builtin_vis_fpmerge (v4qi, v4qi);
   37492 
   37493      int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
   37494 
   37495 
   37496 File: gcc.info,  Node: SPU Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
   37497 
   37498 6.54.15 SPU Built-in Functions
   37499 ------------------------------
   37500 
   37501 GCC provides extensions for the SPU processor as described in the
   37502 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
   37503 found at `http://cell.scei.co.jp/' or
   37504 `http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
   37505 differs in several ways.
   37506 
   37507    * The optional extension of specifying vector constants in
   37508      parentheses is not supported.
   37509 
   37510    * A vector initializer requires no cast if the vector constant is of
   37511      the same type as the variable it is initializing.
   37512 
   37513    * If `signed' or `unsigned' is omitted, the signedness of the vector
   37514      type is the default signedness of the base type.  The default
   37515      varies depending on the operating system, so a portable program
   37516      should always specify the signedness.
   37517 
   37518    * By default, the keyword `__vector' is added. The macro `vector' is
   37519      defined in `<spu_intrinsics.h>' and can be undefined.
   37520 
   37521    * GCC allows using a `typedef' name as the type specifier for a
   37522      vector type.
   37523 
   37524    * For C, overloaded functions are implemented with macros so the
   37525      following does not work:
   37526 
   37527             spu_add ((vector signed int){1, 2, 3, 4}, foo);
   37528 
   37529      Since `spu_add' is a macro, the vector constant in the example is
   37530      treated as four separate arguments.  Wrap the entire argument in
   37531      parentheses for this to work.
   37532 
   37533    * The extended version of `__builtin_expect' is not supported.
   37534 
   37535 
   37536  _Note:_ Only the interface described in the aforementioned
   37537 specification is supported. Internally, GCC uses built-in functions to
   37538 implement the required functionality, but these are not supported and
   37539 are subject to change without notice.
   37540 
   37541 
   37542 File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
   37543 
   37544 6.55 Format Checks Specific to Particular Target Machines
   37545 =========================================================
   37546 
   37547 For some target machines, GCC supports additional options to the format
   37548 attribute (*note Declaring Attributes of Functions: Function
   37549 Attributes.).
   37550 
   37551 * Menu:
   37552 
   37553 * Solaris Format Checks::
   37554 * Darwin Format Checks::
   37555 
   37556 
   37557 File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
   37558 
   37559 6.55.1 Solaris Format Checks
   37560 ----------------------------
   37561 
   37562 Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
   37563 `cmn_err' accepts a subset of the standard `printf' conversions, and
   37564 the two-argument `%b' conversion for displaying bit-fields.  See the
   37565 Solaris man page for `cmn_err' for more information.
   37566 
   37567 
   37568 File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
   37569 
   37570 6.55.2 Darwin Format Checks
   37571 ---------------------------
   37572 
   37573 Darwin targets support the `CFString' (or `__CFString__') in the format
   37574 attribute context.  Declarations made with such attribution will be
   37575 parsed for correct syntax and format argument types.  However, parsing
   37576 of the format string itself is currently undefined and will not be
   37577 carried out by this version of the compiler.
   37578 
   37579  Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
   37580 may also be used as format arguments.  Note that the relevant headers
   37581 are only likely to be available on Darwin (OSX) installations.  On such
   37582 installations, the XCode and system documentation provide descriptions
   37583 of `CFString', `CFStringRefs' and associated functions.
   37584 
   37585 
   37586 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
   37587 
   37588 6.56 Pragmas Accepted by GCC
   37589 ============================
   37590 
   37591 GCC supports several types of pragmas, primarily in order to compile
   37592 code originally written for other compilers.  Note that in general we
   37593 do not recommend the use of pragmas; *Note Function Attributes::, for
   37594 further explanation.
   37595 
   37596 * Menu:
   37597 
   37598 * ARM Pragmas::
   37599 * M32C Pragmas::
   37600 * MeP Pragmas::
   37601 * RS/6000 and PowerPC Pragmas::
   37602 * Darwin Pragmas::
   37603 * Solaris Pragmas::
   37604 * Symbol-Renaming Pragmas::
   37605 * Structure-Packing Pragmas::
   37606 * Weak Pragmas::
   37607 * Diagnostic Pragmas::
   37608 * Visibility Pragmas::
   37609 * Push/Pop Macro Pragmas::
   37610 * Function Specific Option Pragmas::
   37611 
   37612 
   37613 File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
   37614 
   37615 6.56.1 ARM Pragmas
   37616 ------------------
   37617 
   37618 The ARM target defines pragmas for controlling the default addition of
   37619 `long_call' and `short_call' attributes to functions.  *Note Function
   37620 Attributes::, for information about the effects of these attributes.
   37621 
   37622 `long_calls'
   37623      Set all subsequent functions to have the `long_call' attribute.
   37624 
   37625 `no_long_calls'
   37626      Set all subsequent functions to have the `short_call' attribute.
   37627 
   37628 `long_calls_off'
   37629      Do not affect the `long_call' or `short_call' attributes of
   37630      subsequent functions.
   37631 
   37632 
   37633 File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
   37634 
   37635 6.56.2 M32C Pragmas
   37636 -------------------
   37637 
   37638 `GCC memregs NUMBER'
   37639      Overrides the command-line option `-memregs=' for the current
   37640      file.  Use with care!  This pragma must be before any function in
   37641      the file, and mixing different memregs values in different objects
   37642      may make them incompatible.  This pragma is useful when a
   37643      performance-critical function uses a memreg for temporary values,
   37644      as it may allow you to reduce the number of memregs used.
   37645 
   37646 `ADDRESS NAME ADDRESS'
   37647      For any declared symbols matching NAME, this does three things to
   37648      that symbol: it forces the symbol to be located at the given
   37649      address (a number), it forces the symbol to be volatile, and it
   37650      changes the symbol's scope to be static.  This pragma exists for
   37651      compatibility with other compilers, but note that the common
   37652      `1234H' numeric syntax is not supported (use `0x1234' instead).
   37653      Example:
   37654 
   37655           #pragma ADDRESS port3 0x103
   37656           char port3;
   37657 
   37658 
   37659 
   37660 File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
   37661 
   37662 6.56.3 MeP Pragmas
   37663 ------------------
   37664 
   37665 `custom io_volatile (on|off)'
   37666      Overrides the command line option `-mio-volatile' for the current
   37667      file.  Note that for compatibility with future GCC releases, this
   37668      option should only be used once before any `io' variables in each
   37669      file.
   37670 
   37671 `GCC coprocessor available REGISTERS'
   37672      Specifies which coprocessor registers are available to the register
   37673      allocator.  REGISTERS may be a single register, register range
   37674      separated by ellipses, or comma-separated list of those.  Example:
   37675 
   37676           #pragma GCC coprocessor available $c0...$c10, $c28
   37677 
   37678 `GCC coprocessor call_saved REGISTERS'
   37679      Specifies which coprocessor registers are to be saved and restored
   37680      by any function using them.  REGISTERS may be a single register,
   37681      register range separated by ellipses, or comma-separated list of
   37682      those.  Example:
   37683 
   37684           #pragma GCC coprocessor call_saved $c4...$c6, $c31
   37685 
   37686 `GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
   37687      Creates and defines a register class.  These register classes can
   37688      be used by inline `asm' constructs.  REGISTERS may be a single
   37689      register, register range separated by ellipses, or comma-separated
   37690      list of those.  Example:
   37691 
   37692           #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
   37693 
   37694           asm ("cpfoo %0" : "=B" (x));
   37695 
   37696 `GCC disinterrupt NAME , NAME ...'
   37697      For the named functions, the compiler adds code to disable
   37698      interrupts for the duration of those functions.  Any functions so
   37699      named, which are not encountered in the source, cause a warning
   37700      that the pragma was not used.  Examples:
   37701 
   37702           #pragma disinterrupt foo
   37703           #pragma disinterrupt bar, grill
   37704           int foo () { ... }
   37705 
   37706 `GCC call NAME , NAME ...'
   37707      For the named functions, the compiler always uses a
   37708      register-indirect call model when calling the named functions.
   37709      Examples:
   37710 
   37711           extern int foo ();
   37712           #pragma call foo
   37713 
   37714 
   37715 
   37716 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
   37717 
   37718 6.56.4 RS/6000 and PowerPC Pragmas
   37719 ----------------------------------
   37720 
   37721 The RS/6000 and PowerPC targets define one pragma for controlling
   37722 whether or not the `longcall' attribute is added to function
   37723 declarations by default.  This pragma overrides the `-mlongcall'
   37724 option, but not the `longcall' and `shortcall' attributes.  *Note
   37725 RS/6000 and PowerPC Options::, for more information about when long
   37726 calls are and are not necessary.
   37727 
   37728 `longcall (1)'
   37729      Apply the `longcall' attribute to all subsequent function
   37730      declarations.
   37731 
   37732 `longcall (0)'
   37733      Do not apply the `longcall' attribute to subsequent function
   37734      declarations.
   37735 
   37736 
   37737 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
   37738 
   37739 6.56.5 Darwin Pragmas
   37740 ---------------------
   37741 
   37742 The following pragmas are available for all architectures running the
   37743 Darwin operating system.  These are useful for compatibility with other
   37744 Mac OS compilers.
   37745 
   37746 `mark TOKENS...'
   37747      This pragma is accepted, but has no effect.
   37748 
   37749 `options align=ALIGNMENT'
   37750      This pragma sets the alignment of fields in structures.  The
   37751      values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
   37752      `power', to emulate PowerPC alignment.  Uses of this pragma nest
   37753      properly; to restore the previous setting, use `reset' for the
   37754      ALIGNMENT.
   37755 
   37756 `segment TOKENS...'
   37757      This pragma is accepted, but has no effect.
   37758 
   37759 `unused (VAR [, VAR]...)'
   37760      This pragma declares variables to be possibly unused.  GCC will not
   37761      produce warnings for the listed variables.  The effect is similar
   37762      to that of the `unused' attribute, except that this pragma may
   37763      appear anywhere within the variables' scopes.
   37764 
   37765 
   37766 File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
   37767 
   37768 6.56.6 Solaris Pragmas
   37769 ----------------------
   37770 
   37771 The Solaris target supports `#pragma redefine_extname' (*note
   37772 Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
   37773 directives for compatibility with the system compiler.
   37774 
   37775 `align ALIGNMENT (VARIABLE [, VARIABLE]...)'
   37776      Increase the minimum alignment of each VARIABLE to ALIGNMENT.
   37777      This is the same as GCC's `aligned' attribute *note Variable
   37778      Attributes::).  Macro expansion occurs on the arguments to this
   37779      pragma when compiling C and Objective-C.  It does not currently
   37780      occur when compiling C++, but this is a bug which may be fixed in
   37781      a future release.
   37782 
   37783 `fini (FUNCTION [, FUNCTION]...)'
   37784      This pragma causes each listed FUNCTION to be called after main,
   37785      or during shared module unloading, by adding a call to the `.fini'
   37786      section.
   37787 
   37788 `init (FUNCTION [, FUNCTION]...)'
   37789      This pragma causes each listed FUNCTION to be called during
   37790      initialization (before `main') or during shared module loading, by
   37791      adding a call to the `.init' section.
   37792 
   37793 
   37794 
   37795 File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
   37796 
   37797 6.56.7 Symbol-Renaming Pragmas
   37798 ------------------------------
   37799 
   37800 For compatibility with the Solaris and Tru64 UNIX system headers, GCC
   37801 supports two `#pragma' directives which change the name used in
   37802 assembly for a given declaration.  `#pragma extern_prefix' is only
   37803 available on platforms whose system headers need it. To get this effect
   37804 on all platforms supported by GCC, use the asm labels extension (*note
   37805 Asm Labels::).
   37806 
   37807 `redefine_extname OLDNAME NEWNAME'
   37808      This pragma gives the C function OLDNAME the assembly symbol
   37809      NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
   37810      be defined if this pragma is available (currently on all
   37811      platforms).
   37812 
   37813 `extern_prefix STRING'
   37814      This pragma causes all subsequent external function and variable
   37815      declarations to have STRING prepended to their assembly symbols.
   37816      This effect may be terminated with another `extern_prefix' pragma
   37817      whose argument is an empty string.  The preprocessor macro
   37818      `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
   37819      available (currently only on Tru64 UNIX).
   37820 
   37821  These pragmas and the asm labels extension interact in a complicated
   37822 manner.  Here are some corner cases you may want to be aware of.
   37823 
   37824   1. Both pragmas silently apply only to declarations with external
   37825      linkage.  Asm labels do not have this restriction.
   37826 
   37827   2. In C++, both pragmas silently apply only to declarations with "C"
   37828      linkage.  Again, asm labels do not have this restriction.
   37829 
   37830   3. If any of the three ways of changing the assembly name of a
   37831      declaration is applied to a declaration whose assembly name has
   37832      already been determined (either by a previous use of one of these
   37833      features, or because the compiler needed the assembly name in
   37834      order to generate code), and the new name is different, a warning
   37835      issues and the name does not change.
   37836 
   37837   4. The OLDNAME used by `#pragma redefine_extname' is always the
   37838      C-language name.
   37839 
   37840   5. If `#pragma extern_prefix' is in effect, and a declaration occurs
   37841      with an asm label attached, the prefix is silently ignored for
   37842      that declaration.
   37843 
   37844   6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
   37845      the same declaration, whichever triggered first wins, and a
   37846      warning issues if they contradict each other.  (We would like to
   37847      have `#pragma redefine_extname' always win, for consistency with
   37848      asm labels, but if `#pragma extern_prefix' triggers first we have
   37849      no way of knowing that that happened.)
   37850 
   37851 
   37852 File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
   37853 
   37854 6.56.8 Structure-Packing Pragmas
   37855 --------------------------------
   37856 
   37857 For compatibility with Microsoft Windows compilers, GCC supports a set
   37858 of `#pragma' directives which change the maximum alignment of members
   37859 of structures (other than zero-width bitfields), unions, and classes
   37860 subsequently defined. The N value below always is required to be a
   37861 small power of two and specifies the new alignment in bytes.
   37862 
   37863   1. `#pragma pack(N)' simply sets the new alignment.
   37864 
   37865   2. `#pragma pack()' sets the alignment to the one that was in effect
   37866      when compilation started (see also command-line option
   37867      `-fpack-struct[=N]' *note Code Gen Options::).
   37868 
   37869   3. `#pragma pack(push[,N])' pushes the current alignment setting on
   37870      an internal stack and then optionally sets the new alignment.
   37871 
   37872   4. `#pragma pack(pop)' restores the alignment setting to the one
   37873      saved at the top of the internal stack (and removes that stack
   37874      entry).  Note that `#pragma pack([N])' does not influence this
   37875      internal stack; thus it is possible to have `#pragma pack(push)'
   37876      followed by multiple `#pragma pack(N)' instances and finalized by
   37877      a single `#pragma pack(pop)'.
   37878 
   37879  Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
   37880 which lays out a structure as the documented `__attribute__
   37881 ((ms_struct))'.
   37882   1. `#pragma ms_struct on' turns on the layout for structures declared.
   37883 
   37884   2. `#pragma ms_struct off' turns off the layout for structures
   37885      declared.
   37886 
   37887   3. `#pragma ms_struct reset' goes back to the default layout.
   37888 
   37889 
   37890 File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
   37891 
   37892 6.56.9 Weak Pragmas
   37893 -------------------
   37894 
   37895 For compatibility with SVR4, GCC supports a set of `#pragma' directives
   37896 for declaring symbols to be weak, and defining weak aliases.
   37897 
   37898 `#pragma weak SYMBOL'
   37899      This pragma declares SYMBOL to be weak, as if the declaration had
   37900      the attribute of the same name.  The pragma may appear before or
   37901      after the declaration of SYMBOL.  It is not an error for SYMBOL to
   37902      never be defined at all.
   37903 
   37904 `#pragma weak SYMBOL1 = SYMBOL2'
   37905      This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
   37906      an error if SYMBOL2 is not defined in the current translation unit.
   37907 
   37908 
   37909 File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
   37910 
   37911 6.56.10 Diagnostic Pragmas
   37912 --------------------------
   37913 
   37914 GCC allows the user to selectively enable or disable certain types of
   37915 diagnostics, and change the kind of the diagnostic.  For example, a
   37916 project's policy might require that all sources compile with `-Werror'
   37917 but certain files might have exceptions allowing specific types of
   37918 warnings.  Or, a project might selectively enable diagnostics and treat
   37919 them as errors depending on which preprocessor macros are defined.
   37920 
   37921 `#pragma GCC diagnostic KIND OPTION'
   37922      Modifies the disposition of a diagnostic.  Note that not all
   37923      diagnostics are modifiable; at the moment only warnings (normally
   37924      controlled by `-W...') can be controlled, and not all of them.
   37925      Use `-fdiagnostics-show-option' to determine which diagnostics are
   37926      controllable and which option controls them.
   37927 
   37928      KIND is `error' to treat this diagnostic as an error, `warning' to
   37929      treat it like a warning (even if `-Werror' is in effect), or
   37930      `ignored' if the diagnostic is to be ignored.  OPTION is a double
   37931      quoted string which matches the command-line option.
   37932 
   37933           #pragma GCC diagnostic warning "-Wformat"
   37934           #pragma GCC diagnostic error "-Wformat"
   37935           #pragma GCC diagnostic ignored "-Wformat"
   37936 
   37937      Note that these pragmas override any command-line options.  GCC
   37938      keeps track of the location of each pragma, and issues diagnostics
   37939      according to the state as of that point in the source file.  Thus,
   37940      pragmas occurring after a line do not affect diagnostics caused by
   37941      that line.
   37942 
   37943 `#pragma GCC diagnostic push'
   37944 `#pragma GCC diagnostic pop'
   37945      Causes GCC to remember the state of the diagnostics as of each
   37946      `push', and restore to that point at each `pop'.  If a `pop' has
   37947      no matching `push', the command line options are restored.
   37948 
   37949           #pragma GCC diagnostic error "-Wuninitialized"
   37950             foo(a);			/* error is given for this one */
   37951           #pragma GCC diagnostic push
   37952           #pragma GCC diagnostic ignored "-Wuninitialized"
   37953             foo(b);			/* no diagnostic for this one */
   37954           #pragma GCC diagnostic pop
   37955             foo(c);			/* error is given for this one */
   37956           #pragma GCC diagnostic pop
   37957             foo(d);			/* depends on command line options */
   37958 
   37959 
   37960  GCC also offers a simple mechanism for printing messages during
   37961 compilation.
   37962 
   37963 `#pragma message STRING'
   37964      Prints STRING as a compiler message on compilation.  The message
   37965      is informational only, and is neither a compilation warning nor an
   37966      error.
   37967 
   37968           #pragma message "Compiling " __FILE__ "..."
   37969 
   37970      STRING may be parenthesized, and is printed with location
   37971      information.  For example,
   37972 
   37973           #define DO_PRAGMA(x) _Pragma (#x)
   37974           #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
   37975 
   37976           TODO(Remember to fix this)
   37977 
   37978      prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
   37979      fix this'.
   37980 
   37981 
   37982 
   37983 File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
   37984 
   37985 6.56.11 Visibility Pragmas
   37986 --------------------------
   37987 
   37988 `#pragma GCC visibility push(VISIBILITY)'
   37989 `#pragma GCC visibility pop'
   37990      This pragma allows the user to set the visibility for multiple
   37991      declarations without having to give each a visibility attribute
   37992      *Note Function Attributes::, for more information about visibility
   37993      and the attribute syntax.
   37994 
   37995      In C++, `#pragma GCC visibility' affects only namespace-scope
   37996      declarations.  Class members and template specializations are not
   37997      affected; if you want to override the visibility for a particular
   37998      member or instantiation, you must use an attribute.
   37999 
   38000 
   38001 
   38002 File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
   38003 
   38004 6.56.12 Push/Pop Macro Pragmas
   38005 ------------------------------
   38006 
   38007 For compatibility with Microsoft Windows compilers, GCC supports
   38008 `#pragma push_macro("MACRO_NAME")' and `#pragma
   38009 pop_macro("MACRO_NAME")'.
   38010 
   38011 `#pragma push_macro("MACRO_NAME")'
   38012      This pragma saves the value of the macro named as MACRO_NAME to
   38013      the top of the stack for this macro.
   38014 
   38015 `#pragma pop_macro("MACRO_NAME")'
   38016      This pragma sets the value of the macro named as MACRO_NAME to the
   38017      value on top of the stack for this macro. If the stack for
   38018      MACRO_NAME is empty, the value of the macro remains unchanged.
   38019 
   38020  For example:
   38021 
   38022      #define X  1
   38023      #pragma push_macro("X")
   38024      #undef X
   38025      #define X -1
   38026      #pragma pop_macro("X")
   38027      int x [X];
   38028 
   38029  In this example, the definition of X as 1 is saved by `#pragma
   38030 push_macro' and restored by `#pragma pop_macro'.
   38031 
   38032 
   38033 File: gcc.info,  Node: Function Specific Option Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
   38034 
   38035 6.56.13 Function Specific Option Pragmas
   38036 ----------------------------------------
   38037 
   38038 `#pragma GCC target ("STRING"...)'
   38039      This pragma allows you to set target specific options for functions
   38040      defined later in the source file.  One or more strings can be
   38041      specified.  Each function that is defined after this point will be
   38042      as if `attribute((target("STRING")))' was specified for that
   38043      function.  The parenthesis around the options is optional.  *Note
   38044      Function Attributes::, for more information about the `target'
   38045      attribute and the attribute syntax.
   38046 
   38047      The `#pragma GCC target' attribute is not implemented in GCC
   38048      versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
   38049      PowerPC backends.  At present, it is not implemented for other
   38050      backends.
   38051 
   38052 `#pragma GCC optimize ("STRING"...)'
   38053      This pragma allows you to set global optimization options for
   38054      functions defined later in the source file.  One or more strings
   38055      can be specified.  Each function that is defined after this point
   38056      will be as if `attribute((optimize("STRING")))' was specified for
   38057      that function.  The parenthesis around the options is optional.
   38058      *Note Function Attributes::, for more information about the
   38059      `optimize' attribute and the attribute syntax.
   38060 
   38061      The `#pragma GCC optimize' pragma is not implemented in GCC
   38062      versions earlier than 4.4.
   38063 
   38064 `#pragma GCC push_options'
   38065 `#pragma GCC pop_options'
   38066      These pragmas maintain a stack of the current target and
   38067      optimization options.  It is intended for include files where you
   38068      temporarily want to switch to using a different `#pragma GCC
   38069      target' or `#pragma GCC optimize' and then to pop back to the
   38070      previous options.
   38071 
   38072      The `#pragma GCC push_options' and `#pragma GCC pop_options'
   38073      pragmas are not implemented in GCC versions earlier than 4.4.
   38074 
   38075 `#pragma GCC reset_options'
   38076      This pragma clears the current `#pragma GCC target' and `#pragma
   38077      GCC optimize' to use the default switches as specified on the
   38078      command line.
   38079 
   38080      The `#pragma GCC reset_options' pragma is not implemented in GCC
   38081      versions earlier than 4.4.
   38082 
   38083 
   38084 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
   38085 
   38086 6.57 Unnamed struct/union fields within structs/unions
   38087 ======================================================
   38088 
   38089 As permitted by ISO C1X and for compatibility with other compilers, GCC
   38090 allows you to define a structure or union that contains, as fields,
   38091 structures and unions without names.  For example:
   38092 
   38093      struct {
   38094        int a;
   38095        union {
   38096          int b;
   38097          float c;
   38098        };
   38099        int d;
   38100      } foo;
   38101 
   38102  In this example, the user would be able to access members of the
   38103 unnamed union with code like `foo.b'.  Note that only unnamed structs
   38104 and unions are allowed, you may not have, for example, an unnamed `int'.
   38105 
   38106  You must never create such structures that cause ambiguous field
   38107 definitions.  For example, this structure:
   38108 
   38109      struct {
   38110        int a;
   38111        struct {
   38112          int a;
   38113        };
   38114      } foo;
   38115 
   38116  It is ambiguous which `a' is being referred to with `foo.a'.  The
   38117 compiler gives errors for such constructs.
   38118 
   38119  Unless `-fms-extensions' is used, the unnamed field must be a
   38120 structure or union definition without a tag (for example, `struct { int
   38121 a; };').  If `-fms-extensions' is used, the field may also be a
   38122 definition with a tag such as `struct foo { int a; };', a reference to
   38123 a previously defined structure or union such as `struct foo;', or a
   38124 reference to a `typedef' name for a previously defined structure or
   38125 union type.
   38126 
   38127  The option `-fplan9-extensions' enables `-fms-extensions' as well as
   38128 two other extensions.  First, a pointer to a structure is automatically
   38129 converted to a pointer to an anonymous field for assignments and
   38130 function calls.  For example:
   38131 
   38132      struct s1 { int a; };
   38133      struct s2 { struct s1; };
   38134      extern void f1 (struct s1 *);
   38135      void f2 (struct s2 *p) { f1 (p); }
   38136 
   38137  In the call to `f1' inside `f2', the pointer `p' is converted into a
   38138 pointer to the anonymous field.
   38139 
   38140  Second, when the type of an anonymous field is a `typedef' for a
   38141 `struct' or `union', code may refer to the field using the name of the
   38142 `typedef'.
   38143 
   38144      typedef struct { int a; } s1;
   38145      struct s2 { s1; };
   38146      s1 f1 (struct s2 *p) { return p->s1; }
   38147 
   38148  These usages are only permitted when they are not ambiguous.
   38149 
   38150 
   38151 File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
   38152 
   38153 6.58 Thread-Local Storage
   38154 =========================
   38155 
   38156 Thread-local storage (TLS) is a mechanism by which variables are
   38157 allocated such that there is one instance of the variable per extant
   38158 thread.  The run-time model GCC uses to implement this originates in
   38159 the IA-64 processor-specific ABI, but has since been migrated to other
   38160 processors as well.  It requires significant support from the linker
   38161 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
   38162 `libpthread.so'), so it is not available everywhere.
   38163 
   38164  At the user level, the extension is visible with a new storage class
   38165 keyword: `__thread'.  For example:
   38166 
   38167      __thread int i;
   38168      extern __thread struct state s;
   38169      static __thread char *p;
   38170 
   38171  The `__thread' specifier may be used alone, with the `extern' or
   38172 `static' specifiers, but with no other storage class specifier.  When
   38173 used with `extern' or `static', `__thread' must appear immediately
   38174 after the other storage class specifier.
   38175 
   38176  The `__thread' specifier may be applied to any global, file-scoped
   38177 static, function-scoped static, or static data member of a class.  It
   38178 may not be applied to block-scoped automatic or non-static data member.
   38179 
   38180  When the address-of operator is applied to a thread-local variable, it
   38181 is evaluated at run-time and returns the address of the current thread's
   38182 instance of that variable.  An address so obtained may be used by any
   38183 thread.  When a thread terminates, any pointers to thread-local
   38184 variables in that thread become invalid.
   38185 
   38186  No static initialization may refer to the address of a thread-local
   38187 variable.
   38188 
   38189  In C++, if an initializer is present for a thread-local variable, it
   38190 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
   38191 standard.
   38192 
   38193  See ELF Handling For Thread-Local Storage
   38194 (http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
   38195 the four thread-local storage addressing models, and how the run-time
   38196 is expected to function.
   38197 
   38198 * Menu:
   38199 
   38200 * C99 Thread-Local Edits::
   38201 * C++98 Thread-Local Edits::
   38202 
   38203 
   38204 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
   38205 
   38206 6.58.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
   38207 -------------------------------------------------------
   38208 
   38209 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
   38210 document the exact semantics of the language extension.
   38211 
   38212    * `5.1.2  Execution environments'
   38213 
   38214      Add new text after paragraph 1
   38215 
   38216           Within either execution environment, a "thread" is a flow of
   38217           control within a program.  It is implementation defined
   38218           whether or not there may be more than one thread associated
   38219           with a program.  It is implementation defined how threads
   38220           beyond the first are created, the name and type of the
   38221           function called at thread startup, and how threads may be
   38222           terminated.  However, objects with thread storage duration
   38223           shall be initialized before thread startup.
   38224 
   38225    * `6.2.4  Storage durations of objects'
   38226 
   38227      Add new text before paragraph 3
   38228 
   38229           An object whose identifier is declared with the storage-class
   38230           specifier `__thread' has "thread storage duration".  Its
   38231           lifetime is the entire execution of the thread, and its
   38232           stored value is initialized only once, prior to thread
   38233           startup.
   38234 
   38235    * `6.4.1  Keywords'
   38236 
   38237      Add `__thread'.
   38238 
   38239    * `6.7.1  Storage-class specifiers'
   38240 
   38241      Add `__thread' to the list of storage class specifiers in
   38242      paragraph 1.
   38243 
   38244      Change paragraph 2 to
   38245 
   38246           With the exception of `__thread', at most one storage-class
   38247           specifier may be given [...].  The `__thread' specifier may
   38248           be used alone, or immediately following `extern' or `static'.
   38249 
   38250      Add new text after paragraph 6
   38251 
   38252           The declaration of an identifier for a variable that has
   38253           block scope that specifies `__thread' shall also specify
   38254           either `extern' or `static'.
   38255 
   38256           The `__thread' specifier shall be used only with variables.
   38257 
   38258 
   38259 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
   38260 
   38261 6.58.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
   38262 --------------------------------------------------------
   38263 
   38264 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
   38265 that document the exact semantics of the language extension.
   38266 
   38267    * [intro.execution]
   38268 
   38269      New text after paragraph 4
   38270 
   38271           A "thread" is a flow of control within the abstract machine.
   38272           It is implementation defined whether or not there may be more
   38273           than one thread.
   38274 
   38275      New text after paragraph 7
   38276 
   38277           It is unspecified whether additional action must be taken to
   38278           ensure when and whether side effects are visible to other
   38279           threads.
   38280 
   38281    * [lex.key]
   38282 
   38283      Add `__thread'.
   38284 
   38285    * [basic.start.main]
   38286 
   38287      Add after paragraph 5
   38288 
   38289           The thread that begins execution at the `main' function is
   38290           called the "main thread".  It is implementation defined how
   38291           functions beginning threads other than the main thread are
   38292           designated or typed.  A function so designated, as well as
   38293           the `main' function, is called a "thread startup function".
   38294           It is implementation defined what happens if a thread startup
   38295           function returns.  It is implementation defined what happens
   38296           to other threads when any thread calls `exit'.
   38297 
   38298    * [basic.start.init]
   38299 
   38300      Add after paragraph 4
   38301 
   38302           The storage for an object of thread storage duration shall be
   38303           statically initialized before the first statement of the
   38304           thread startup function.  An object of thread storage
   38305           duration shall not require dynamic initialization.
   38306 
   38307    * [basic.start.term]
   38308 
   38309      Add after paragraph 3
   38310 
   38311           The type of an object with thread storage duration shall not
   38312           have a non-trivial destructor, nor shall it be an array type
   38313           whose elements (directly or indirectly) have non-trivial
   38314           destructors.
   38315 
   38316    * [basic.stc]
   38317 
   38318      Add "thread storage duration" to the list in paragraph 1.
   38319 
   38320      Change paragraph 2
   38321 
   38322           Thread, static, and automatic storage durations are
   38323           associated with objects introduced by declarations [...].
   38324 
   38325      Add `__thread' to the list of specifiers in paragraph 3.
   38326 
   38327    * [basic.stc.thread]
   38328 
   38329      New section before [basic.stc.static]
   38330 
   38331           The keyword `__thread' applied to a non-local object gives the
   38332           object thread storage duration.
   38333 
   38334           A local variable or class data member declared both `static'
   38335           and `__thread' gives the variable or member thread storage
   38336           duration.
   38337 
   38338    * [basic.stc.static]
   38339 
   38340      Change paragraph 1
   38341 
   38342           All objects which have neither thread storage duration,
   38343           dynamic storage duration nor are local [...].
   38344 
   38345    * [dcl.stc]
   38346 
   38347      Add `__thread' to the list in paragraph 1.
   38348 
   38349      Change paragraph 1
   38350 
   38351           With the exception of `__thread', at most one
   38352           STORAGE-CLASS-SPECIFIER shall appear in a given
   38353           DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
   38354           alone, or immediately following the `extern' or `static'
   38355           specifiers.  [...]
   38356 
   38357      Add after paragraph 5
   38358 
   38359           The `__thread' specifier can be applied only to the names of
   38360           objects and to anonymous unions.
   38361 
   38362    * [class.mem]
   38363 
   38364      Add after paragraph 6
   38365 
   38366           Non-`static' members shall not be `__thread'.
   38367 
   38368 
   38369 File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
   38370 
   38371 6.59 Binary constants using the `0b' prefix
   38372 ===========================================
   38373 
   38374 Integer constants can be written as binary constants, consisting of a
   38375 sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
   38376 particularly useful in environments that operate a lot on the bit-level
   38377 (like microcontrollers).
   38378 
   38379  The following statements are identical:
   38380 
   38381      i =       42;
   38382      i =     0x2a;
   38383      i =      052;
   38384      i = 0b101010;
   38385 
   38386  The type of these constants follows the same rules as for octal or
   38387 hexadecimal integer constants, so suffixes like `L' or `UL' can be
   38388 applied.
   38389 
   38390 
   38391 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C++ Implementation,  Up: Top
   38392 
   38393 7 Extensions to the C++ Language
   38394 ********************************
   38395 
   38396 The GNU compiler provides these extensions to the C++ language (and you
   38397 can also use most of the C language extensions in your C++ programs).
   38398 If you want to write code that checks whether these features are
   38399 available, you can test for the GNU compiler the same way as for C
   38400 programs: check for a predefined macro `__GNUC__'.  You can also use
   38401 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
   38402 (cpp)Common Predefined Macros.).
   38403 
   38404 * Menu:
   38405 
   38406 * C++ Volatiles::       What constitutes an access to a volatile object.
   38407 * Restricted Pointers:: C99 restricted pointers and references.
   38408 * Vague Linkage::       Where G++ puts inlines, vtables and such.
   38409 * C++ Interface::       You can use a single C++ header file for both
   38410                         declarations and definitions.
   38411 * Template Instantiation:: Methods for ensuring that exactly one copy of
   38412                         each needed template instantiation is emitted.
   38413 * Bound member functions:: You can extract a function pointer to the
   38414                         method denoted by a `->*' or `.*' expression.
   38415 * C++ Attributes::      Variable, function, and type attributes for C++ only.
   38416 * Namespace Association:: Strong using-directives for namespace association.
   38417 * Type Traits::         Compiler support for type traits
   38418 * Java Exceptions::     Tweaking exception handling to work with Java.
   38419 * Deprecated Features:: Things will disappear from g++.
   38420 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
   38421 
   38422 
   38423 File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
   38424 
   38425 7.1 When is a Volatile C++ Object Accessed?
   38426 ===========================================
   38427 
   38428 The C++ standard differs from the C standard in its treatment of
   38429 volatile objects.  It fails to specify what constitutes a volatile
   38430 access, except to say that C++ should behave in a similar manner to C
   38431 with respect to volatiles, where possible.  However, the different
   38432 lvalueness of expressions between C and C++ complicate the behavior.
   38433 G++ behaves the same as GCC for volatile access, *Note Volatiles: C
   38434 Extensions, for a description of GCC's behavior.
   38435 
   38436  The C and C++ language specifications differ when an object is
   38437 accessed in a void context:
   38438 
   38439      volatile int *src = SOMEVALUE;
   38440      *src;
   38441 
   38442  The C++ standard specifies that such expressions do not undergo lvalue
   38443 to rvalue conversion, and that the type of the dereferenced object may
   38444 be incomplete.  The C++ standard does not specify explicitly that it is
   38445 lvalue to rvalue conversion which is responsible for causing an access.
   38446 There is reason to believe that it is, because otherwise certain simple
   38447 expressions become undefined.  However, because it would surprise most
   38448 programmers, G++ treats dereferencing a pointer to volatile object of
   38449 complete type as GCC would do for an equivalent type in C.  When the
   38450 object has incomplete type, G++ issues a warning; if you wish to force
   38451 an error, you must force a conversion to rvalue with, for instance, a
   38452 static cast.
   38453 
   38454  When using a reference to volatile, G++ does not treat equivalent
   38455 expressions as accesses to volatiles, but instead issues a warning that
   38456 no volatile is accessed.  The rationale for this is that otherwise it
   38457 becomes difficult to determine where volatile access occur, and not
   38458 possible to ignore the return value from functions returning volatile
   38459 references.  Again, if you wish to force a read, cast the reference to
   38460 an rvalue.
   38461 
   38462  G++ implements the same behavior as GCC does when assigning to a
   38463 volatile object - there is no reread of the assigned-to object, the
   38464 assigned rvalue is reused.  Note that in C++ assignment expressions are
   38465 lvalues, and if used as an lvalue, the volatile object will be referred
   38466 to.  For instance, VREF will refer to VOBJ, as expected, in the
   38467 following example:
   38468 
   38469      volatile int vobj;
   38470      volatile int &vref = vobj = SOMETHING;
   38471 
   38472 
   38473 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
   38474 
   38475 7.2 Restricting Pointer Aliasing
   38476 ================================
   38477 
   38478 As with the C front end, G++ understands the C99 feature of restricted
   38479 pointers, specified with the `__restrict__', or `__restrict' type
   38480 qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
   38481 language flag, `restrict' is not a keyword in C++.
   38482 
   38483  In addition to allowing restricted pointers, you can specify restricted
   38484 references, which indicate that the reference is not aliased in the
   38485 local context.
   38486 
   38487      void fn (int *__restrict__ rptr, int &__restrict__ rref)
   38488      {
   38489        /* ... */
   38490      }
   38491 
   38492 In the body of `fn', RPTR points to an unaliased integer and RREF
   38493 refers to a (different) unaliased integer.
   38494 
   38495  You may also specify whether a member function's THIS pointer is
   38496 unaliased by using `__restrict__' as a member function qualifier.
   38497 
   38498      void T::fn () __restrict__
   38499      {
   38500        /* ... */
   38501      }
   38502 
   38503 Within the body of `T::fn', THIS will have the effective definition `T
   38504 *__restrict__ const this'.  Notice that the interpretation of a
   38505 `__restrict__' member function qualifier is different to that of
   38506 `const' or `volatile' qualifier, in that it is applied to the pointer
   38507 rather than the object.  This is consistent with other compilers which
   38508 implement restricted pointers.
   38509 
   38510  As with all outermost parameter qualifiers, `__restrict__' is ignored
   38511 in function definition matching.  This means you only need to specify
   38512 `__restrict__' in a function definition, rather than in a function
   38513 prototype as well.
   38514 
   38515 
   38516 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
   38517 
   38518 7.3 Vague Linkage
   38519 =================
   38520 
   38521 There are several constructs in C++ which require space in the object
   38522 file but are not clearly tied to a single translation unit.  We say that
   38523 these constructs have "vague linkage".  Typically such constructs are
   38524 emitted wherever they are needed, though sometimes we can be more
   38525 clever.
   38526 
   38527 Inline Functions
   38528      Inline functions are typically defined in a header file which can
   38529      be included in many different compilations.  Hopefully they can
   38530      usually be inlined, but sometimes an out-of-line copy is
   38531      necessary, if the address of the function is taken or if inlining
   38532      fails.  In general, we emit an out-of-line copy in all translation
   38533      units where one is needed.  As an exception, we only emit inline
   38534      virtual functions with the vtable, since it will always require a
   38535      copy.
   38536 
   38537      Local static variables and string constants used in an inline
   38538      function are also considered to have vague linkage, since they
   38539      must be shared between all inlined and out-of-line instances of
   38540      the function.
   38541 
   38542 VTables
   38543      C++ virtual functions are implemented in most compilers using a
   38544      lookup table, known as a vtable.  The vtable contains pointers to
   38545      the virtual functions provided by a class, and each object of the
   38546      class contains a pointer to its vtable (or vtables, in some
   38547      multiple-inheritance situations).  If the class declares any
   38548      non-inline, non-pure virtual functions, the first one is chosen as
   38549      the "key method" for the class, and the vtable is only emitted in
   38550      the translation unit where the key method is defined.
   38551 
   38552      _Note:_ If the chosen key method is later defined as inline, the
   38553      vtable will still be emitted in every translation unit which
   38554      defines it.  Make sure that any inline virtuals are declared
   38555      inline in the class body, even if they are not defined there.
   38556 
   38557 `type_info' objects
   38558      C++ requires information about types to be written out in order to
   38559      implement `dynamic_cast', `typeid' and exception handling.  For
   38560      polymorphic classes (classes with virtual functions), the
   38561      `type_info' object is written out along with the vtable so that
   38562      `dynamic_cast' can determine the dynamic type of a class object at
   38563      runtime.  For all other types, we write out the `type_info' object
   38564      when it is used: when applying `typeid' to an expression, throwing
   38565      an object, or referring to a type in a catch clause or exception
   38566      specification.
   38567 
   38568 Template Instantiations
   38569      Most everything in this section also applies to template
   38570      instantiations, but there are other options as well.  *Note
   38571      Where's the Template?: Template Instantiation.
   38572 
   38573 
   38574  When used with GNU ld version 2.8 or later on an ELF system such as
   38575 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
   38576 these constructs will be discarded at link time.  This is known as
   38577 COMDAT support.
   38578 
   38579  On targets that don't support COMDAT, but do support weak symbols, GCC
   38580 will use them.  This way one copy will override all the others, but the
   38581 unused copies will still take up space in the executable.
   38582 
   38583  For targets which do not support either COMDAT or weak symbols, most
   38584 entities with vague linkage will be emitted as local symbols to avoid
   38585 duplicate definition errors from the linker.  This will not happen for
   38586 local statics in inlines, however, as having multiple copies will
   38587 almost certainly break things.
   38588 
   38589  *Note Declarations and Definitions in One Header: C++ Interface, for
   38590 another way to control placement of these constructs.
   38591 
   38592 
   38593 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
   38594 
   38595 7.4 #pragma interface and implementation
   38596 ========================================
   38597 
   38598 `#pragma interface' and `#pragma implementation' provide the user with
   38599 a way of explicitly directing the compiler to emit entities with vague
   38600 linkage (and debugging information) in a particular translation unit.
   38601 
   38602  _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
   38603 cases, because of COMDAT support and the "key method" heuristic
   38604 mentioned in *note Vague Linkage::.  Using them can actually cause your
   38605 program to grow due to unnecessary out-of-line copies of inline
   38606 functions.  Currently (3.4) the only benefit of these `#pragma's is
   38607 reduced duplication of debugging information, and that should be
   38608 addressed soon on DWARF 2 targets with the use of COMDAT groups.
   38609 
   38610 `#pragma interface'
   38611 `#pragma interface "SUBDIR/OBJECTS.h"'
   38612      Use this directive in _header files_ that define object classes,
   38613      to save space in most of the object files that use those classes.
   38614      Normally, local copies of certain information (backup copies of
   38615      inline member functions, debugging information, and the internal
   38616      tables that implement virtual functions) must be kept in each
   38617      object file that includes class definitions.  You can use this
   38618      pragma to avoid such duplication.  When a header file containing
   38619      `#pragma interface' is included in a compilation, this auxiliary
   38620      information will not be generated (unless the main input source
   38621      file itself uses `#pragma implementation').  Instead, the object
   38622      files will contain references to be resolved at link time.
   38623 
   38624      The second form of this directive is useful for the case where you
   38625      have multiple headers with the same name in different directories.
   38626      If you use this form, you must specify the same string to `#pragma
   38627      implementation'.
   38628 
   38629 `#pragma implementation'
   38630 `#pragma implementation "OBJECTS.h"'
   38631      Use this pragma in a _main input file_, when you want full output
   38632      from included header files to be generated (and made globally
   38633      visible).  The included header file, in turn, should use `#pragma
   38634      interface'.  Backup copies of inline member functions, debugging
   38635      information, and the internal tables used to implement virtual
   38636      functions are all generated in implementation files.
   38637 
   38638      If you use `#pragma implementation' with no argument, it applies to
   38639      an include file with the same basename(1) as your source file.
   38640      For example, in `allclass.cc', giving just `#pragma implementation'
   38641      by itself is equivalent to `#pragma implementation "allclass.h"'.
   38642 
   38643      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
   38644      an implementation file whenever you would include it from
   38645      `allclass.cc' even if you never specified `#pragma
   38646      implementation'.  This was deemed to be more trouble than it was
   38647      worth, however, and disabled.
   38648 
   38649      Use the string argument if you want a single implementation file to
   38650      include code from multiple header files.  (You must also use
   38651      `#include' to include the header file; `#pragma implementation'
   38652      only specifies how to use the file--it doesn't actually include
   38653      it.)
   38654 
   38655      There is no way to split up the contents of a single header file
   38656      into multiple implementation files.
   38657 
   38658  `#pragma implementation' and `#pragma interface' also have an effect
   38659 on function inlining.
   38660 
   38661  If you define a class in a header file marked with `#pragma
   38662 interface', the effect on an inline function defined in that class is
   38663 similar to an explicit `extern' declaration--the compiler emits no code
   38664 at all to define an independent version of the function.  Its
   38665 definition is used only for inlining with its callers.
   38666 
   38667  Conversely, when you include the same header file in a main source file
   38668 that declares it as `#pragma implementation', the compiler emits code
   38669 for the function itself; this defines a version of the function that
   38670 can be found via pointers (or by callers compiled without inlining).
   38671 If all calls to the function can be inlined, you can avoid emitting the
   38672 function by compiling with `-fno-implement-inlines'.  If any calls were
   38673 not inlined, you will get linker errors.
   38674 
   38675  ---------- Footnotes ----------
   38676 
   38677  (1) A file's "basename" was the name stripped of all leading path
   38678 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
   38679 
   38680 
   38681 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
   38682 
   38683 7.5 Where's the Template?
   38684 =========================
   38685 
   38686 C++ templates are the first language feature to require more
   38687 intelligence from the environment than one usually finds on a UNIX
   38688 system.  Somehow the compiler and linker have to make sure that each
   38689 template instance occurs exactly once in the executable if it is needed,
   38690 and not at all otherwise.  There are two basic approaches to this
   38691 problem, which are referred to as the Borland model and the Cfront
   38692 model.
   38693 
   38694 Borland model
   38695      Borland C++ solved the template instantiation problem by adding
   38696      the code equivalent of common blocks to their linker; the compiler
   38697      emits template instances in each translation unit that uses them,
   38698      and the linker collapses them together.  The advantage of this
   38699      model is that the linker only has to consider the object files
   38700      themselves; there is no external complexity to worry about.  This
   38701      disadvantage is that compilation time is increased because the
   38702      template code is being compiled repeatedly.  Code written for this
   38703      model tends to include definitions of all templates in the header
   38704      file, since they must be seen to be instantiated.
   38705 
   38706 Cfront model
   38707      The AT&T C++ translator, Cfront, solved the template instantiation
   38708      problem by creating the notion of a template repository, an
   38709      automatically maintained place where template instances are
   38710      stored.  A more modern version of the repository works as follows:
   38711      As individual object files are built, the compiler places any
   38712      template definitions and instantiations encountered in the
   38713      repository.  At link time, the link wrapper adds in the objects in
   38714      the repository and compiles any needed instances that were not
   38715      previously emitted.  The advantages of this model are more optimal
   38716      compilation speed and the ability to use the system linker; to
   38717      implement the Borland model a compiler vendor also needs to
   38718      replace the linker.  The disadvantages are vastly increased
   38719      complexity, and thus potential for error; for some code this can be
   38720      just as transparent, but in practice it can been very difficult to
   38721      build multiple programs in one directory and one program in
   38722      multiple directories.  Code written for this model tends to
   38723      separate definitions of non-inline member templates into a
   38724      separate file, which should be compiled separately.
   38725 
   38726  When used with GNU ld version 2.8 or later on an ELF system such as
   38727 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
   38728 Borland model.  On other systems, G++ implements neither automatic
   38729 model.
   38730 
   38731  A future version of G++ will support a hybrid model whereby the
   38732 compiler will emit any instantiations for which the template definition
   38733 is included in the compile, and store template definitions and
   38734 instantiation context information into the object file for the rest.
   38735 The link wrapper will extract that information as necessary and invoke
   38736 the compiler to produce the remaining instantiations.  The linker will
   38737 then combine duplicate instantiations.
   38738 
   38739  In the mean time, you have the following options for dealing with
   38740 template instantiations:
   38741 
   38742   1. Compile your template-using code with `-frepo'.  The compiler will
   38743      generate files with the extension `.rpo' listing all of the
   38744      template instantiations used in the corresponding object files
   38745      which could be instantiated there; the link wrapper, `collect2',
   38746      will then update the `.rpo' files to tell the compiler where to
   38747      place those instantiations and rebuild any affected object files.
   38748      The link-time overhead is negligible after the first pass, as the
   38749      compiler will continue to place the instantiations in the same
   38750      files.
   38751 
   38752      This is your best option for application code written for the
   38753      Borland model, as it will just work.  Code written for the Cfront
   38754      model will need to be modified so that the template definitions
   38755      are available at one or more points of instantiation; usually this
   38756      is as simple as adding `#include <tmethods.cc>' to the end of each
   38757      template header.
   38758 
   38759      For library code, if you want the library to provide all of the
   38760      template instantiations it needs, just try to link all of its
   38761      object files together; the link will fail, but cause the
   38762      instantiations to be generated as a side effect.  Be warned,
   38763      however, that this may cause conflicts if multiple libraries try
   38764      to provide the same instantiations.  For greater control, use
   38765      explicit instantiation as described in the next option.
   38766 
   38767   2. Compile your code with `-fno-implicit-templates' to disable the
   38768      implicit generation of template instances, and explicitly
   38769      instantiate all the ones you use.  This approach requires more
   38770      knowledge of exactly which instances you need than do the others,
   38771      but it's less mysterious and allows greater control.  You can
   38772      scatter the explicit instantiations throughout your program,
   38773      perhaps putting them in the translation units where the instances
   38774      are used or the translation units that define the templates
   38775      themselves; you can put all of the explicit instantiations you
   38776      need into one big file; or you can create small files like
   38777 
   38778           #include "Foo.h"
   38779           #include "Foo.cc"
   38780 
   38781           template class Foo<int>;
   38782           template ostream& operator <<
   38783                           (ostream&, const Foo<int>&);
   38784 
   38785      for each of the instances you need, and create a template
   38786      instantiation library from those.
   38787 
   38788      If you are using Cfront-model code, you can probably get away with
   38789      not using `-fno-implicit-templates' when compiling files that don't
   38790      `#include' the member template definitions.
   38791 
   38792      If you use one big file to do the instantiations, you may want to
   38793      compile it without `-fno-implicit-templates' so you get all of the
   38794      instances required by your explicit instantiations (but not by any
   38795      other files) without having to specify them as well.
   38796 
   38797      G++ has extended the template instantiation syntax given in the ISO
   38798      standard to allow forward declaration of explicit instantiations
   38799      (with `extern'), instantiation of the compiler support data for a
   38800      template class (i.e. the vtable) without instantiating any of its
   38801      members (with `inline'), and instantiation of only the static data
   38802      members of a template class, without the support data or member
   38803      functions (with (`static'):
   38804 
   38805           extern template int max (int, int);
   38806           inline template class Foo<int>;
   38807           static template class Foo<int>;
   38808 
   38809   3. Do nothing.  Pretend G++ does implement automatic instantiation
   38810      management.  Code written for the Borland model will work fine, but
   38811      each translation unit will contain instances of each of the
   38812      templates it uses.  In a large program, this can lead to an
   38813      unacceptable amount of code duplication.
   38814 
   38815 
   38816 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
   38817 
   38818 7.6 Extracting the function pointer from a bound pointer to member function
   38819 ===========================================================================
   38820 
   38821 In C++, pointer to member functions (PMFs) are implemented using a wide
   38822 pointer of sorts to handle all the possible call mechanisms; the PMF
   38823 needs to store information about how to adjust the `this' pointer, and
   38824 if the function pointed to is virtual, where to find the vtable, and
   38825 where in the vtable to look for the member function.  If you are using
   38826 PMFs in an inner loop, you should really reconsider that decision.  If
   38827 that is not an option, you can extract the pointer to the function that
   38828 would be called for a given object/PMF pair and call it directly inside
   38829 the inner loop, to save a bit of time.
   38830 
   38831  Note that you will still be paying the penalty for the call through a
   38832 function pointer; on most modern architectures, such a call defeats the
   38833 branch prediction features of the CPU.  This is also true of normal
   38834 virtual function calls.
   38835 
   38836  The syntax for this extension is
   38837 
   38838      extern A a;
   38839      extern int (A::*fp)();
   38840      typedef int (*fptr)(A *);
   38841 
   38842      fptr p = (fptr)(a.*fp);
   38843 
   38844  For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
   38845 object is needed to obtain the address of the function.  They can be
   38846 converted to function pointers directly:
   38847 
   38848      fptr p1 = (fptr)(&A::foo);
   38849 
   38850  You must specify `-Wno-pmf-conversions' to use this extension.
   38851 
   38852 
   38853 File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
   38854 
   38855 7.7 C++-Specific Variable, Function, and Type Attributes
   38856 ========================================================
   38857 
   38858 Some attributes only make sense for C++ programs.
   38859 
   38860 `init_priority (PRIORITY)'
   38861      In Standard C++, objects defined at namespace scope are guaranteed
   38862      to be initialized in an order in strict accordance with that of
   38863      their definitions _in a given translation unit_.  No guarantee is
   38864      made for initializations across translation units.  However, GNU
   38865      C++ allows users to control the order of initialization of objects
   38866      defined at namespace scope with the `init_priority' attribute by
   38867      specifying a relative PRIORITY, a constant integral expression
   38868      currently bounded between 101 and 65535 inclusive.  Lower numbers
   38869      indicate a higher priority.
   38870 
   38871      In the following example, `A' would normally be created before
   38872      `B', but the `init_priority' attribute has reversed that order:
   38873 
   38874           Some_Class  A  __attribute__ ((init_priority (2000)));
   38875           Some_Class  B  __attribute__ ((init_priority (543)));
   38876 
   38877      Note that the particular values of PRIORITY do not matter; only
   38878      their relative ordering.
   38879 
   38880 `java_interface'
   38881      This type attribute informs C++ that the class is a Java
   38882      interface.  It may only be applied to classes declared within an
   38883      `extern "Java"' block.  Calls to methods declared in this
   38884      interface will be dispatched using GCJ's interface table
   38885      mechanism, instead of regular virtual table dispatch.
   38886 
   38887 
   38888  See also *note Namespace Association::.
   38889 
   38890 
   38891 File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions
   38892 
   38893 7.8 Namespace Association
   38894 =========================
   38895 
   38896 *Caution:* The semantics of this extension are not fully defined.
   38897 Users should refrain from using this extension as its semantics may
   38898 change subtly over time.  It is possible that this extension will be
   38899 removed in future versions of G++.
   38900 
   38901  A using-directive with `__attribute ((strong))' is stronger than a
   38902 normal using-directive in two ways:
   38903 
   38904    * Templates from the used namespace can be specialized and explicitly
   38905      instantiated as though they were members of the using namespace.
   38906 
   38907    * The using namespace is considered an associated namespace of all
   38908      templates in the used namespace for purposes of argument-dependent
   38909      name lookup.
   38910 
   38911  The used namespace must be nested within the using namespace so that
   38912 normal unqualified lookup works properly.
   38913 
   38914  This is useful for composing a namespace transparently from
   38915 implementation namespaces.  For example:
   38916 
   38917      namespace std {
   38918        namespace debug {
   38919          template <class T> struct A { };
   38920        }
   38921        using namespace debug __attribute ((__strong__));
   38922        template <> struct A<int> { };   // ok to specialize
   38923 
   38924        template <class T> void f (A<T>);
   38925      }
   38926 
   38927      int main()
   38928      {
   38929        f (std::A<float>());             // lookup finds std::f
   38930        f (std::A<int>());
   38931      }
   38932 
   38933 
   38934 File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
   38935 
   38936 7.9 Type Traits
   38937 ===============
   38938 
   38939 The C++ front-end implements syntactic extensions that allow to
   38940 determine at compile time various characteristics of a type (or of a
   38941 pair of types).
   38942 
   38943 `__has_nothrow_assign (type)'
   38944      If `type' is const qualified or is a reference type then the trait
   38945      is false.  Otherwise if `__has_trivial_assign (type)' is true then
   38946      the trait is true, else if `type' is a cv class or union type with
   38947      copy assignment operators that are known not to throw an exception
   38948      then the trait is true, else it is false.  Requires: `type' shall
   38949      be a complete type, (possibly cv-qualified) `void', or an array of
   38950      unknown bound.
   38951 
   38952 `__has_nothrow_copy (type)'
   38953      If `__has_trivial_copy (type)' is true then the trait is true,
   38954      else if `type' is a cv class or union type with copy constructors
   38955      that are known not to throw an exception then the trait is true,
   38956      else it is false.  Requires: `type' shall be a complete type,
   38957      (possibly cv-qualified) `void', or an array of unknown bound.
   38958 
   38959 `__has_nothrow_constructor (type)'
   38960      If `__has_trivial_constructor (type)' is true then the trait is
   38961      true, else if `type' is a cv class or union type (or array
   38962      thereof) with a default constructor that is known not to throw an
   38963      exception then the trait is true, else it is false.  Requires:
   38964      `type' shall be a complete type, (possibly cv-qualified) `void',
   38965      or an array of unknown bound.
   38966 
   38967 `__has_trivial_assign (type)'
   38968      If `type' is const qualified or is a reference type then the trait
   38969      is false.  Otherwise if `__is_pod (type)' is true then the trait is
   38970      true, else if `type' is a cv class or union type with a trivial
   38971      copy assignment ([class.copy]) then the trait is true, else it is
   38972      false.  Requires: `type' shall be a complete type, (possibly
   38973      cv-qualified) `void', or an array of unknown bound.
   38974 
   38975 `__has_trivial_copy (type)'
   38976      If `__is_pod (type)' is true or `type' is a reference type then
   38977      the trait is true, else if `type' is a cv class or union type with
   38978      a trivial copy constructor ([class.copy]) then the trait is true,
   38979      else it is false.  Requires: `type' shall be a complete type,
   38980      (possibly cv-qualified) `void', or an array of unknown bound.
   38981 
   38982 `__has_trivial_constructor (type)'
   38983      If `__is_pod (type)' is true then the trait is true, else if
   38984      `type' is a cv class or union type (or array thereof) with a
   38985      trivial default constructor ([class.ctor]) then the trait is true,
   38986      else it is false.  Requires: `type' shall be a complete type,
   38987      (possibly cv-qualified) `void', or an array of unknown bound.
   38988 
   38989 `__has_trivial_destructor (type)'
   38990      If `__is_pod (type)' is true or `type' is a reference type then
   38991      the trait is true, else if `type' is a cv class or union type (or
   38992      array thereof) with a trivial destructor ([class.dtor]) then the
   38993      trait is true, else it is false.  Requires: `type' shall be a
   38994      complete type, (possibly cv-qualified) `void', or an array of
   38995      unknown bound.
   38996 
   38997 `__has_virtual_destructor (type)'
   38998      If `type' is a class type with a virtual destructor ([class.dtor])
   38999      then the trait is true, else it is false.  Requires: `type' shall
   39000      be a complete type, (possibly cv-qualified) `void', or an array of
   39001      unknown bound.
   39002 
   39003 `__is_abstract (type)'
   39004      If `type' is an abstract class ([class.abstract]) then the trait
   39005      is true, else it is false.  Requires: `type' shall be a complete
   39006      type, (possibly cv-qualified) `void', or an array of unknown bound.
   39007 
   39008 `__is_base_of (base_type, derived_type)'
   39009      If `base_type' is a base class of `derived_type' ([class.derived])
   39010      then the trait is true, otherwise it is false.  Top-level cv
   39011      qualifications of `base_type' and `derived_type' are ignored.  For
   39012      the purposes of this trait, a class type is considered is own
   39013      base.  Requires: if `__is_class (base_type)' and `__is_class
   39014      (derived_type)' are true and `base_type' and `derived_type' are
   39015      not the same type (disregarding cv-qualifiers), `derived_type'
   39016      shall be a complete type.  Diagnostic is produced if this
   39017      requirement is not met.
   39018 
   39019 `__is_class (type)'
   39020      If `type' is a cv class type, and not a union type
   39021      ([basic.compound]) the trait is true, else it is false.
   39022 
   39023 `__is_empty (type)'
   39024      If `__is_class (type)' is false then the trait is false.
   39025      Otherwise `type' is considered empty if and only if: `type' has no
   39026      non-static data members, or all non-static data members, if any,
   39027      are bit-fields of length 0, and `type' has no virtual members, and
   39028      `type' has no virtual base classes, and `type' has no base classes
   39029      `base_type' for which `__is_empty (base_type)' is false.
   39030      Requires: `type' shall be a complete type, (possibly cv-qualified)
   39031      `void', or an array of unknown bound.
   39032 
   39033 `__is_enum (type)'
   39034      If `type' is a cv enumeration type ([basic.compound]) the trait is
   39035      true, else it is false.
   39036 
   39037 `__is_literal_type (type)'
   39038      If `type' is a literal type ([basic.types]) the trait is true,
   39039      else it is false.  Requires: `type' shall be a complete type,
   39040      (possibly cv-qualified) `void', or an array of unknown bound.
   39041 
   39042 `__is_pod (type)'
   39043      If `type' is a cv POD type ([basic.types]) then the trait is true,
   39044      else it is false.  Requires: `type' shall be a complete type,
   39045      (possibly cv-qualified) `void', or an array of unknown bound.
   39046 
   39047 `__is_polymorphic (type)'
   39048      If `type' is a polymorphic class ([class.virtual]) then the trait
   39049      is true, else it is false.  Requires: `type' shall be a complete
   39050      type, (possibly cv-qualified) `void', or an array of unknown bound.
   39051 
   39052 `__is_standard_layout (type)'
   39053      If `type' is a standard-layout type ([basic.types]) the trait is
   39054      true, else it is false.  Requires: `type' shall be a complete
   39055      type, (possibly cv-qualified) `void', or an array of unknown bound.
   39056 
   39057 `__is_trivial (type)'
   39058      If `type' is a trivial type ([basic.types]) the trait is true,
   39059      else it is false.  Requires: `type' shall be a complete type,
   39060      (possibly cv-qualified) `void', or an array of unknown bound.
   39061 
   39062 `__is_union (type)'
   39063      If `type' is a cv union type ([basic.compound]) the trait is true,
   39064      else it is false.
   39065 
   39066 
   39067 
   39068 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
   39069 
   39070 7.10 Java Exceptions
   39071 ====================
   39072 
   39073 The Java language uses a slightly different exception handling model
   39074 from C++.  Normally, GNU C++ will automatically detect when you are
   39075 writing C++ code that uses Java exceptions, and handle them
   39076 appropriately.  However, if C++ code only needs to execute destructors
   39077 when Java exceptions are thrown through it, GCC will guess incorrectly.
   39078 Sample problematic code is:
   39079 
   39080        struct S { ~S(); };
   39081        extern void bar();    // is written in Java, and may throw exceptions
   39082        void foo()
   39083        {
   39084          S s;
   39085          bar();
   39086        }
   39087 
   39088 The usual effect of an incorrect guess is a link failure, complaining of
   39089 a missing routine called `__gxx_personality_v0'.
   39090 
   39091  You can inform the compiler that Java exceptions are to be used in a
   39092 translation unit, irrespective of what it might think, by writing
   39093 `#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
   39094 must appear before any functions that throw or catch exceptions, or run
   39095 destructors when exceptions are thrown through them.
   39096 
   39097  You cannot mix Java and C++ exceptions in the same translation unit.
   39098 It is believed to be safe to throw a C++ exception from one file through
   39099 another file compiled for the Java exception model, or vice versa, but
   39100 there may be bugs in this area.
   39101 
   39102 
   39103 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
   39104 
   39105 7.11 Deprecated Features
   39106 ========================
   39107 
   39108 In the past, the GNU C++ compiler was extended to experiment with new
   39109 features, at a time when the C++ language was still evolving.  Now that
   39110 the C++ standard is complete, some of those features are superseded by
   39111 superior alternatives.  Using the old features might cause a warning in
   39112 some cases that the feature will be dropped in the future.  In other
   39113 cases, the feature might be gone already.
   39114 
   39115  While the list below is not exhaustive, it documents some of the
   39116 options that are now deprecated:
   39117 
   39118 `-fexternal-templates'
   39119 `-falt-external-templates'
   39120      These are two of the many ways for G++ to implement template
   39121      instantiation.  *Note Template Instantiation::.  The C++ standard
   39122      clearly defines how template definitions have to be organized
   39123      across implementation units.  G++ has an implicit instantiation
   39124      mechanism that should work just fine for standard-conforming code.
   39125 
   39126 `-fstrict-prototype'
   39127 `-fno-strict-prototype'
   39128      Previously it was possible to use an empty prototype parameter
   39129      list to indicate an unspecified number of parameters (like C),
   39130      rather than no parameters, as C++ demands.  This feature has been
   39131      removed, except where it is required for backwards compatibility.
   39132      *Note Backwards Compatibility::.
   39133 
   39134  G++ allows a virtual function returning `void *' to be overridden by
   39135 one returning a different pointer type.  This extension to the
   39136 covariant return type rules is now deprecated and will be removed from a
   39137 future version.
   39138 
   39139  The G++ minimum and maximum operators (`<?' and `>?') and their
   39140 compound forms (`<?=') and `>?=') have been deprecated and are now
   39141 removed from G++.  Code using these operators should be modified to use
   39142 `std::min' and `std::max' instead.
   39143 
   39144  The named return value extension has been deprecated, and is now
   39145 removed from G++.
   39146 
   39147  The use of initializer lists with new expressions has been deprecated,
   39148 and is now removed from G++.
   39149 
   39150  Floating and complex non-type template parameters have been deprecated,
   39151 and are now removed from G++.
   39152 
   39153  The implicit typename extension has been deprecated and is now removed
   39154 from G++.
   39155 
   39156  The use of default arguments in function pointers, function typedefs
   39157 and other places where they are not permitted by the standard is
   39158 deprecated and will be removed from a future version of G++.
   39159 
   39160  G++ allows floating-point literals to appear in integral constant
   39161 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
   39162 deprecated and will be removed from a future version.
   39163 
   39164  G++ allows static data members of const floating-point type to be
   39165 declared with an initializer in a class definition. The standard only
   39166 allows initializers for static members of const integral types and const
   39167 enumeration types so this extension has been deprecated and will be
   39168 removed from a future version.
   39169 
   39170 
   39171 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
   39172 
   39173 7.12 Backwards Compatibility
   39174 ============================
   39175 
   39176 Now that there is a definitive ISO standard C++, G++ has a specification
   39177 to adhere to.  The C++ language evolved over time, and features that
   39178 used to be acceptable in previous drafts of the standard, such as the
   39179 ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
   39180 to allow compilation of C++ written to such drafts, G++ contains some
   39181 backwards compatibilities.  _All such backwards compatibility features
   39182 are liable to disappear in future versions of G++._ They should be
   39183 considered deprecated.   *Note Deprecated Features::.
   39184 
   39185 `For scope'
   39186      If a variable is declared at for scope, it used to remain in scope
   39187      until the end of the scope which contained the for statement
   39188      (rather than just within the for scope).  G++ retains this, but
   39189      issues a warning, if such a variable is accessed outside the for
   39190      scope.
   39191 
   39192 `Implicit C language'
   39193      Old C system header files did not contain an `extern "C" {...}'
   39194      scope to set the language.  On such systems, all header files are
   39195      implicitly scoped inside a C language scope.  Also, an empty
   39196      prototype `()' will be treated as an unspecified number of
   39197      arguments, rather than no arguments, as C++ demands.
   39198 
   39199 
   39200 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
   39201 
   39202 8 GNU Objective-C features
   39203 **************************
   39204 
   39205 This document is meant to describe some of the GNU Objective-C
   39206 features.  It is not intended to teach you Objective-C.  There are
   39207 several resources on the Internet that present the language.
   39208 
   39209 * Menu:
   39210 
   39211 * GNU Objective-C runtime API::
   39212 * Executing code before main::
   39213 * Type encoding::
   39214 * Garbage Collection::
   39215 * Constant string objects::
   39216 * compatibility_alias::
   39217 * Exceptions::
   39218 * Synchronization::
   39219 * Fast enumeration::
   39220 * Messaging with the GNU Objective-C runtime::
   39221 
   39222 
   39223 File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
   39224 
   39225 8.1 GNU Objective-C runtime API
   39226 ===============================
   39227 
   39228 This section is specific for the GNU Objective-C runtime.  If you are
   39229 using a different runtime, you can skip it.
   39230 
   39231  The GNU Objective-C runtime provides an API that allows you to
   39232 interact with the Objective-C runtime system, querying the live runtime
   39233 structures and even manipulating them.  This allows you for example to
   39234 inspect and navigate classes, methods and protocols; to define new
   39235 classes or new methods, and even to modify existing classes or
   39236 protocols.
   39237 
   39238  If you are using a "Foundation" library such as GNUstep-Base, this
   39239 library will provide you with a rich set of functionality to do most of
   39240 the inspection tasks, and you probably will only need direct access to
   39241 the GNU Objective-C runtime API to define new classes or methods.
   39242 
   39243 * Menu:
   39244 
   39245 * Modern GNU Objective-C runtime API::
   39246 * Traditional GNU Objective-C runtime API::
   39247 
   39248 
   39249 File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
   39250 
   39251 8.1.1 Modern GNU Objective-C runtime API
   39252 ----------------------------------------
   39253 
   39254 The GNU Objective-C runtime provides an API which is similar to the one
   39255 provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
   39256 API is documented in the public header files of the GNU Objective-C
   39257 runtime:
   39258 
   39259    * `objc/objc.h': this is the basic Objective-C header file, defining
   39260      the basic Objective-C types such as `id', `Class' and `BOOL'.  You
   39261      have to include this header to do almost anything with Objective-C.
   39262 
   39263    * `objc/runtime.h': this header declares most of the public runtime
   39264      API functions allowing you to inspect and manipulate the
   39265      Objective-C runtime data structures.  These functions are fairly
   39266      standardized across Objective-C runtimes and are almost identical
   39267      to the Apple/NeXT Objective-C runtime ones.  It does not declare
   39268      functions in some specialized areas (constructing and forwarding
   39269      message invocations, threading) which are in the other headers
   39270      below.  You have to include `objc/objc.h' and `objc/runtime.h' to
   39271      use any of the functions, such as `class_getName()', declared in
   39272      `objc/runtime.h'.
   39273 
   39274    * `objc/message.h': this header declares public functions used to
   39275      construct, deconstruct and forward message invocations.  Because
   39276      messaging is done in quite a different way on different runtimes,
   39277      functions in this header are specific to the GNU Objective-C
   39278      runtime implementation.
   39279 
   39280    * `objc/objc-exception.h': this header declares some public
   39281      functions related to Objective-C exceptions.  For example
   39282      functions in this header allow you to throw an Objective-C
   39283      exception from plain C/C++ code.
   39284 
   39285    * `objc/objc-sync.h': this header declares some public functions
   39286      related to the Objective-C `@synchronized()' syntax, allowing you
   39287      to emulate an Objective-C `@synchronized()' block in plain C/C++
   39288      code.
   39289 
   39290    * `objc/thr.h': this header declares a public runtime API threading
   39291      layer that is only provided by the GNU Objective-C runtime.  It
   39292      declares functions such as `objc_mutex_lock()', which provide a
   39293      platform-independent set of threading functions.
   39294 
   39295 
   39296  The header files contain detailed documentation for each function in
   39297 the GNU Objective-C runtime API.
   39298 
   39299 
   39300 File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
   39301 
   39302 8.1.2 Traditional GNU Objective-C runtime API
   39303 ---------------------------------------------
   39304 
   39305 The GNU Objective-C runtime used to provide a different API, which we
   39306 call the "traditional" GNU Objective-C runtime API.  Functions
   39307 belonging to this API are easy to recognize because they use a
   39308 different naming convention, such as `class_get_super_class()'
   39309 (traditional API) instead of `class_getSuperclass()' (modern API).
   39310 Software using this API includes the file `objc/objc-api.h' where it is
   39311 declared.
   39312 
   39313  The traditional API is deprecated but it is still supported in this
   39314 release of the runtime; you can access it as usual by including
   39315 `objc/objc-api.h'.
   39316 
   39317  If you are using the traditional API you are urged to upgrade your
   39318 software to use the modern API because the traditional API requires
   39319 access to private runtime internals to do anything serious with it; for
   39320 this reason, there is no guarantee that future releases of the GNU
   39321 Objective-C runtime library will be able to provide a fully compatible
   39322 `objc/objc-api.h' as the private runtime internals change.  It is
   39323 expected that the next release will hide a number of runtime internals
   39324 making the traditional API nominally supported but fairly useless
   39325 beyond very simple use cases.
   39326 
   39327  Finally, you can not include both `objc/objc-api.h' and
   39328 `objc/runtime.h' at the same time.  The traditional and modern APIs
   39329 unfortunately have some conflicting declarations (such as the one for
   39330 `Method') and can not be used at the same time.
   39331 
   39332 
   39333 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
   39334 
   39335 8.2 `+load': Executing code before main
   39336 =======================================
   39337 
   39338 This section is specific for the GNU Objective-C runtime.  If you are
   39339 using a different runtime, you can skip it.
   39340 
   39341  The GNU Objective-C runtime provides a way that allows you to execute
   39342 code before the execution of the program enters the `main' function.
   39343 The code is executed on a per-class and a per-category basis, through a
   39344 special class method `+load'.
   39345 
   39346  This facility is very useful if you want to initialize global variables
   39347 which can be accessed by the program directly, without sending a message
   39348 to the class first.  The usual way to initialize global variables, in
   39349 the `+initialize' method, might not be useful because `+initialize' is
   39350 only called when the first message is sent to a class object, which in
   39351 some cases could be too late.
   39352 
   39353  Suppose for example you have a `FileStream' class that declares
   39354 `Stdin', `Stdout' and `Stderr' as global variables, like below:
   39355 
   39356 
   39357      FileStream *Stdin = nil;
   39358      FileStream *Stdout = nil;
   39359      FileStream *Stderr = nil;
   39360 
   39361      @implementation FileStream
   39362 
   39363      + (void)initialize
   39364      {
   39365          Stdin = [[FileStream new] initWithFd:0];
   39366          Stdout = [[FileStream new] initWithFd:1];
   39367          Stderr = [[FileStream new] initWithFd:2];
   39368      }
   39369 
   39370      /* Other methods here */
   39371      @end
   39372 
   39373  In this example, the initialization of `Stdin', `Stdout' and `Stderr'
   39374 in `+initialize' occurs too late.  The programmer can send a message to
   39375 one of these objects before the variables are actually initialized,
   39376 thus sending messages to the `nil' object.  The `+initialize' method
   39377 which actually initializes the global variables is not invoked until
   39378 the first message is sent to the class object.  The solution would
   39379 require these variables to be initialized just before entering `main'.
   39380 
   39381  The correct solution of the above problem is to use the `+load' method
   39382 instead of `+initialize':
   39383 
   39384 
   39385      @implementation FileStream
   39386 
   39387      + (void)load
   39388      {
   39389          Stdin = [[FileStream new] initWithFd:0];
   39390          Stdout = [[FileStream new] initWithFd:1];
   39391          Stderr = [[FileStream new] initWithFd:2];
   39392      }
   39393 
   39394      /* Other methods here */
   39395      @end
   39396 
   39397  The `+load' is a method that is not overridden by categories.  If a
   39398 class and a category of it both implement `+load', both methods are
   39399 invoked.  This allows some additional initializations to be performed in
   39400 a category.
   39401 
   39402  This mechanism is not intended to be a replacement for `+initialize'.
   39403 You should be aware of its limitations when you decide to use it
   39404 instead of `+initialize'.
   39405 
   39406 * Menu:
   39407 
   39408 * What you can and what you cannot do in +load::
   39409 
   39410 
   39411 File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
   39412 
   39413 8.2.1 What you can and what you cannot do in `+load'
   39414 ----------------------------------------------------
   39415 
   39416 `+load' is to be used only as a last resort.  Because it is executed
   39417 very early, most of the Objective-C runtime machinery will not be ready
   39418 when `+load' is executed; hence `+load' works best for executing C code
   39419 that is independent on the Objective-C runtime.
   39420 
   39421  The `+load' implementation in the GNU runtime guarantees you the
   39422 following things:
   39423 
   39424    * you can write whatever C code you like;
   39425 
   39426    * you can allocate and send messages to objects whose class is
   39427      implemented in the same file;
   39428 
   39429    * the `+load' implementation of all super classes of a class are
   39430      executed before the `+load' of that class is executed;
   39431 
   39432    * the `+load' implementation of a class is executed before the
   39433      `+load' implementation of any category.
   39434 
   39435 
   39436  In particular, the following things, even if they can work in a
   39437 particular case, are not guaranteed:
   39438 
   39439    * allocation of or sending messages to arbitrary objects;
   39440 
   39441    * allocation of or sending messages to objects whose classes have a
   39442      category implemented in the same file;
   39443 
   39444    * sending messages to Objective-C constant strings (`@"this is a
   39445      constant string"');
   39446 
   39447 
   39448  You should make no assumptions about receiving `+load' in sibling
   39449 classes when you write `+load' of a class.  The order in which sibling
   39450 classes receive `+load' is not guaranteed.
   39451 
   39452  The order in which `+load' and `+initialize' are called could be
   39453 problematic if this matters.  If you don't allocate objects inside
   39454 `+load', it is guaranteed that `+load' is called before `+initialize'.
   39455 If you create an object inside `+load' the `+initialize' method of
   39456 object's class is invoked even if `+load' was not invoked.  Note if you
   39457 explicitly call `+load' on a class, `+initialize' will be called first.
   39458 To avoid possible problems try to implement only one of these methods.
   39459 
   39460  The `+load' method is also invoked when a bundle is dynamically loaded
   39461 into your running program.  This happens automatically without any
   39462 intervening operation from you.  When you write bundles and you need to
   39463 write `+load' you can safely create and send messages to objects whose
   39464 classes already exist in the running program.  The same restrictions as
   39465 above apply to classes defined in bundle.
   39466 
   39467 
   39468 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
   39469 
   39470 8.3 Type encoding
   39471 =================
   39472 
   39473 This is an advanced section.  Type encodings are used extensively by
   39474 the compiler and by the runtime, but you generally do not need to know
   39475 about them to use Objective-C.
   39476 
   39477  The Objective-C compiler generates type encodings for all the types.
   39478 These type encodings are used at runtime to find out information about
   39479 selectors and methods and about objects and classes.
   39480 
   39481  The types are encoded in the following way:
   39482 
   39483 `_Bool'            `B'
   39484 `char'             `c'
   39485 `unsigned char'    `C'
   39486 `short'            `s'
   39487 `unsigned short'   `S'
   39488 `int'              `i'
   39489 `unsigned int'     `I'
   39490 `long'             `l'
   39491 `unsigned long'    `L'
   39492 `long long'        `q'
   39493 `unsigned long     `Q'
   39494 long'              
   39495 `float'            `f'
   39496 `double'           `d'
   39497 `long double'      `D'
   39498 `void'             `v'
   39499 `id'               `@'
   39500 `Class'            `#'
   39501 `SEL'              `:'
   39502 `char*'            `*'
   39503 `enum'             an `enum' is encoded exactly as the integer type that
   39504                    the compiler uses for it, which depends on the
   39505                    enumeration values.  Often the compiler users
   39506                    `unsigned int', which is then encoded as `I'.
   39507 unknown type       `?'
   39508 Complex types      `j' followed by the inner type.  For example
   39509                    `_Complex double' is encoded as "jd".
   39510 bit-fields         `b' followed by the starting position of the
   39511                    bit-field, the type of the bit-field and the size of
   39512                    the bit-field (the bit-fields encoding was changed
   39513                    from the NeXT's compiler encoding, see below)
   39514 
   39515  The encoding of bit-fields has changed to allow bit-fields to be
   39516 properly handled by the runtime functions that compute sizes and
   39517 alignments of types that contain bit-fields.  The previous encoding
   39518 contained only the size of the bit-field.  Using only this information
   39519 it is not possible to reliably compute the size occupied by the
   39520 bit-field.  This is very important in the presence of the Boehm's
   39521 garbage collector because the objects are allocated using the typed
   39522 memory facility available in this collector.  The typed memory
   39523 allocation requires information about where the pointers are located
   39524 inside the object.
   39525 
   39526  The position in the bit-field is the position, counting in bits, of the
   39527 bit closest to the beginning of the structure.
   39528 
   39529  The non-atomic types are encoded as follows:
   39530 
   39531 pointers       `^' followed by the pointed type.
   39532 arrays         `[' followed by the number of elements in the array
   39533                followed by the type of the elements followed by `]'
   39534 structures     `{' followed by the name of the structure (or `?' if the
   39535                structure is unnamed), the `=' sign, the type of the
   39536                members and by `}'
   39537 unions         `(' followed by the name of the structure (or `?' if the
   39538                union is unnamed), the `=' sign, the type of the members
   39539                followed by `)'
   39540 vectors        `![' followed by the vector_size (the number of bytes
   39541                composing the vector) followed by a comma, followed by
   39542                the alignment (in bytes) of the vector, followed by the
   39543                type of the elements followed by `]'
   39544 
   39545  Here are some types and their encodings, as they are generated by the
   39546 compiler on an i386 machine:
   39547 
   39548 
   39549 Objective-C type   Compiler encoding
   39550      int a[10];    `[10i]'
   39551      struct {      `{?=i[3f]b128i3b131i2c}'
   39552        int i;      
   39553        float f[3]; 
   39554        int a:3;    
   39555        int b:2;    
   39556        char c;     
   39557      }             
   39558      int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
   39559 
   39560 
   39561  In addition to the types the compiler also encodes the type
   39562 specifiers.  The table below describes the encoding of the current
   39563 Objective-C type specifiers:
   39564 
   39565 
   39566 Specifier          Encoding
   39567 `const'            `r'
   39568 `in'               `n'
   39569 `inout'            `N'
   39570 `out'              `o'
   39571 `bycopy'           `O'
   39572 `byref'            `R'
   39573 `oneway'           `V'
   39574 
   39575 
   39576  The type specifiers are encoded just before the type.  Unlike types
   39577 however, the type specifiers are only encoded when they appear in method
   39578 argument types.
   39579 
   39580  Note how `const' interacts with pointers:
   39581 
   39582 
   39583 Objective-C type   Compiler encoding
   39584      const int     `ri'
   39585      const int*    `^ri'
   39586      int *const    `r^i'
   39587 
   39588 
   39589  `const int*' is a pointer to a `const int', and so is encoded as
   39590 `^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
   39591 is encoded as `r^i'.
   39592 
   39593  Finally, there is a complication when encoding `const char *' versus
   39594 `char * const'.  Because `char *' is encoded as `*' and not as `^c',
   39595 there is no way to express the fact that `r' applies to the pointer or
   39596 to the pointee.
   39597 
   39598  Hence, it is assumed as a convention that `r*' means `const char *'
   39599 (since it is what is most often meant), and there is no way to encode
   39600 `char *const'.  `char *const' would simply be encoded as `*', and the
   39601 `const' is lost.
   39602 
   39603 * Menu:
   39604 
   39605 * Legacy type encoding::
   39606 * @encode::
   39607 * Method signatures::
   39608 
   39609 
   39610 File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
   39611 
   39612 8.3.1 Legacy type encoding
   39613 --------------------------
   39614 
   39615 Unfortunately, historically GCC used to have a number of bugs in its
   39616 encoding code.  The NeXT runtime expects GCC to emit type encodings in
   39617 this historical format (compatible with GCC-3.3), so when using the
   39618 NeXT runtime, GCC will introduce on purpose a number of incorrect
   39619 encodings:
   39620 
   39621    * the read-only qualifier of the pointee gets emitted before the '^'.
   39622      The read-only qualifier of the pointer itself gets ignored, unless
   39623      it is a typedef.  Also, the 'r' is only emitted for the outermost
   39624      type.
   39625 
   39626    * 32-bit longs are encoded as 'l' or 'L', but not always.  For
   39627      typedefs, the compiler uses 'i' or 'I' instead if encoding a
   39628      struct field or a pointer.
   39629 
   39630    * `enum's are always encoded as 'i' (int) even if they are actually
   39631      unsigned or long.
   39632 
   39633 
   39634  In addition to that, the NeXT runtime uses a different encoding for
   39635 bitfields.  It encodes them as `b' followed by the size, without a bit
   39636 offset or the underlying field type.
   39637 
   39638 
   39639 File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
   39640 
   39641 8.3.2 @encode
   39642 -------------
   39643 
   39644 GNU Objective-C supports the `@encode' syntax that allows you to create
   39645 a type encoding from a C/Objective-C type.  For example, `@encode(int)'
   39646 is compiled by the compiler into `"i"'.
   39647 
   39648  `@encode' does not support type qualifiers other than `const'.  For
   39649 example, `@encode(const char*)' is valid and is compiled into `"r*"',
   39650 while `@encode(bycopy char *)' is invalid and will cause a compilation
   39651 error.
   39652 
   39653 
   39654 File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
   39655 
   39656 8.3.3 Method signatures
   39657 -----------------------
   39658 
   39659 This section documents the encoding of method types, which is rarely
   39660 needed to use Objective-C.  You should skip it at a first reading; the
   39661 runtime provides functions that will work on methods and can walk
   39662 through the list of parameters and interpret them for you.  These
   39663 functions are part of the public "API" and are the preferred way to
   39664 interact with method signatures from user code.
   39665 
   39666  But if you need to debug a problem with method signatures and need to
   39667 know how they are implemented (i.e., the "ABI"), read on.
   39668 
   39669  Methods have their "signature" encoded and made available to the
   39670 runtime.  The "signature" encodes all the information required to
   39671 dynamically build invocations of the method at runtime: return type and
   39672 arguments.
   39673 
   39674  The "signature" is a null-terminated string, composed of the following:
   39675 
   39676    * The return type, including type qualifiers.  For example, a method
   39677      returning `int' would have `i' here.
   39678 
   39679    * The total size (in bytes) required to pass all the parameters.
   39680      This includes the two hidden parameters (the object `self' and the
   39681      method selector `_cmd').
   39682 
   39683    * Each argument, with the type encoding, followed by the offset (in
   39684      bytes) of the argument in the list of parameters.
   39685 
   39686 
   39687  For example, a method with no arguments and returning `int' would have
   39688 the signature `i8@0:4' if the size of a pointer is 4.  The signature is
   39689 interpreted as follows: the `i' is the return type (an `int'), the `8'
   39690 is the total size of the parameters in bytes (two pointers each of size
   39691 4), the `@0' is the first parameter (an object at byte offset `0') and
   39692 `:4' is the second parameter (a `SEL' at byte offset `4').
   39693 
   39694  You can easily find more examples by running the "strings" program on
   39695 an Objective-C object file compiled by GCC.  You'll see a lot of
   39696 strings that look very much like `i8@0:4'.  They are signatures of
   39697 Objective-C methods.
   39698 
   39699 
   39700 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
   39701 
   39702 8.4 Garbage Collection
   39703 ======================
   39704 
   39705 This section is specific for the GNU Objective-C runtime.  If you are
   39706 using a different runtime, you can skip it.
   39707 
   39708  Support for garbage collection with the GNU runtime has been added by
   39709 using a powerful conservative garbage collector, known as the
   39710 Boehm-Demers-Weiser conservative garbage collector.
   39711 
   39712  To enable the support for it you have to configure the compiler using
   39713 an additional argument, `--enable-objc-gc'.  This will build the
   39714 boehm-gc library, and build an additional runtime library which has
   39715 several enhancements to support the garbage collector.  The new library
   39716 has a new name, `libobjc_gc.a' to not conflict with the
   39717 non-garbage-collected library.
   39718 
   39719  When the garbage collector is used, the objects are allocated using the
   39720 so-called typed memory allocation mechanism available in the
   39721 Boehm-Demers-Weiser collector.  This mode requires precise information
   39722 on where pointers are located inside objects.  This information is
   39723 computed once per class, immediately after the class has been
   39724 initialized.
   39725 
   39726  There is a new runtime function `class_ivar_set_gcinvisible()' which
   39727 can be used to declare a so-called "weak pointer" reference.  Such a
   39728 pointer is basically hidden for the garbage collector; this can be
   39729 useful in certain situations, especially when you want to keep track of
   39730 the allocated objects, yet allow them to be collected.  This kind of
   39731 pointers can only be members of objects, you cannot declare a global
   39732 pointer as a weak reference.  Every type which is a pointer type can be
   39733 declared a weak pointer, including `id', `Class' and `SEL'.
   39734 
   39735  Here is an example of how to use this feature.  Suppose you want to
   39736 implement a class whose instances hold a weak pointer reference; the
   39737 following class does this:
   39738 
   39739 
   39740      @interface WeakPointer : Object
   39741      {
   39742          const void* weakPointer;
   39743      }
   39744 
   39745      - initWithPointer:(const void*)p;
   39746      - (const void*)weakPointer;
   39747      @end
   39748 
   39749 
   39750      @implementation WeakPointer
   39751 
   39752      + (void)initialize
   39753      {
   39754        class_ivar_set_gcinvisible (self, "weakPointer", YES);
   39755      }
   39756 
   39757      - initWithPointer:(const void*)p
   39758      {
   39759        weakPointer = p;
   39760        return self;
   39761      }
   39762 
   39763      - (const void*)weakPointer
   39764      {
   39765        return weakPointer;
   39766      }
   39767 
   39768      @end
   39769 
   39770  Weak pointers are supported through a new type character specifier
   39771 represented by the `!' character.  The `class_ivar_set_gcinvisible()'
   39772 function adds or removes this specifier to the string type description
   39773 of the instance variable named as argument.
   39774 
   39775 
   39776 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
   39777 
   39778 8.5 Constant string objects
   39779 ===========================
   39780 
   39781 GNU Objective-C provides constant string objects that are generated
   39782 directly by the compiler.  You declare a constant string object by
   39783 prefixing a C constant string with the character `@':
   39784 
   39785        id myString = @"this is a constant string object";
   39786 
   39787  The constant string objects are by default instances of the
   39788 `NXConstantString' class which is provided by the GNU Objective-C
   39789 runtime.  To get the definition of this class you must include the
   39790 `objc/NXConstStr.h' header file.
   39791 
   39792  User defined libraries may want to implement their own constant string
   39793 class.  To be able to support them, the GNU Objective-C compiler
   39794 provides a new command line options
   39795 `-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
   39796 to a strict structure, the same as `NXConstantString''s structure:
   39797 
   39798 
   39799      @interface MyConstantStringClass
   39800      {
   39801        Class isa;
   39802        char *c_string;
   39803        unsigned int len;
   39804      }
   39805      @end
   39806 
   39807  `NXConstantString' inherits from `Object'; user class libraries may
   39808 choose to inherit the customized constant string class from a different
   39809 class than `Object'.  There is no requirement in the methods the
   39810 constant string class has to implement, but the final ivar layout of
   39811 the class must be the compatible with the given structure.
   39812 
   39813  When the compiler creates the statically allocated constant string
   39814 object, the `c_string' field will be filled by the compiler with the
   39815 string; the `length' field will be filled by the compiler with the
   39816 string length; the `isa' pointer will be filled with `NULL' by the
   39817 compiler, and it will later be fixed up automatically at runtime by the
   39818 GNU Objective-C runtime library to point to the class which was set by
   39819 the `-fconstant-string-class' option when the object file is loaded (if
   39820 you wonder how it works behind the scenes, the name of the class to
   39821 use, and the list of static objects to fixup, are stored by the
   39822 compiler in the object file in a place where the GNU runtime library
   39823 will find them at runtime).
   39824 
   39825  As a result, when a file is compiled with the
   39826 `-fconstant-string-class' option, all the constant string objects will
   39827 be instances of the class specified as argument to this option.  It is
   39828 possible to have multiple compilation units referring to different
   39829 constant string classes, neither the compiler nor the linker impose any
   39830 restrictions in doing this.
   39831 
   39832 
   39833 File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
   39834 
   39835 8.6 compatibility_alias
   39836 =======================
   39837 
   39838 The keyword `@compatibility_alias' allows you to define a class name as
   39839 equivalent to another class name.  For example:
   39840 
   39841      @compatibility_alias WOApplication GSWApplication;
   39842 
   39843  tells the compiler that each time it encounters `WOApplication' as a
   39844 class name, it should replace it with `GSWApplication' (that is,
   39845 `WOApplication' is just an alias for `GSWApplication').
   39846 
   39847  There are some constraints on how this can be used--
   39848 
   39849    * `WOApplication' (the alias) must not be an existing class;
   39850 
   39851    * `GSWApplication' (the real class) must be an existing class.
   39852 
   39853 
   39854 
   39855 File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
   39856 
   39857 8.7 Exceptions
   39858 ==============
   39859 
   39860 GNU Objective-C provides exception support built into the language, as
   39861 in the following example:
   39862 
   39863        @try {
   39864          ...
   39865             @throw expr;
   39866          ...
   39867        }
   39868        @catch (AnObjCClass *exc) {
   39869          ...
   39870            @throw expr;
   39871          ...
   39872            @throw;
   39873          ...
   39874        }
   39875        @catch (AnotherClass *exc) {
   39876          ...
   39877        }
   39878        @catch (id allOthers) {
   39879          ...
   39880        }
   39881        @finally {
   39882          ...
   39883            @throw expr;
   39884          ...
   39885        }
   39886 
   39887  The `@throw' statement may appear anywhere in an Objective-C or
   39888 Objective-C++ program; when used inside of a `@catch' block, the
   39889 `@throw' may appear without an argument (as shown above), in which case
   39890 the object caught by the `@catch' will be rethrown.
   39891 
   39892  Note that only (pointers to) Objective-C objects may be thrown and
   39893 caught using this scheme.  When an object is thrown, it will be caught
   39894 by the nearest `@catch' clause capable of handling objects of that
   39895 type, analogously to how `catch' blocks work in C++ and Java.  A
   39896 `@catch(id ...)' clause (as shown above) may also be provided to catch
   39897 any and all Objective-C exceptions not caught by previous `@catch'
   39898 clauses (if any).
   39899 
   39900  The `@finally' clause, if present, will be executed upon exit from the
   39901 immediately preceding `@try ... @catch' section.  This will happen
   39902 regardless of whether any exceptions are thrown, caught or rethrown
   39903 inside the `@try ... @catch' section, analogously to the behavior of
   39904 the `finally' clause in Java.
   39905 
   39906  There are several caveats to using the new exception mechanism:
   39907 
   39908    * The `-fobjc-exceptions' command line option must be used when
   39909      compiling Objective-C files that use exceptions.
   39910 
   39911    * With the GNU runtime, exceptions are always implemented as "native"
   39912      exceptions and it is recommended that the `-fexceptions' and
   39913      `-shared-libgcc' options are used when linking.
   39914 
   39915    * With the NeXT runtime, although currently designed to be binary
   39916      compatible with `NS_HANDLER'-style idioms provided by the
   39917      `NSException' class, the new exceptions can only be used on Mac OS
   39918      X 10.3 (Panther) and later systems, due to additional functionality
   39919      needed in the NeXT Objective-C runtime.
   39920 
   39921    * As mentioned above, the new exceptions do not support handling
   39922      types other than Objective-C objects.   Furthermore, when used from
   39923      Objective-C++, the Objective-C exception model does not
   39924      interoperate with C++ exceptions at this time.  This means you
   39925      cannot `@throw' an exception from Objective-C and `catch' it in
   39926      C++, or vice versa (i.e., `throw ... @catch').
   39927 
   39928 
   39929 File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
   39930 
   39931 8.8 Synchronization
   39932 ===================
   39933 
   39934 GNU Objective-C provides support for synchronized blocks:
   39935 
   39936        @synchronized (ObjCClass *guard) {
   39937          ...
   39938        }
   39939 
   39940  Upon entering the `@synchronized' block, a thread of execution shall
   39941 first check whether a lock has been placed on the corresponding `guard'
   39942 object by another thread.  If it has, the current thread shall wait
   39943 until the other thread relinquishes its lock.  Once `guard' becomes
   39944 available, the current thread will place its own lock on it, execute
   39945 the code contained in the `@synchronized' block, and finally relinquish
   39946 the lock (thereby making `guard' available to other threads).
   39947 
   39948  Unlike Java, Objective-C does not allow for entire methods to be
   39949 marked `@synchronized'.  Note that throwing exceptions out of
   39950 `@synchronized' blocks is allowed, and will cause the guarding object
   39951 to be unlocked properly.
   39952 
   39953  Because of the interactions between synchronization and exception
   39954 handling, you can only use `@synchronized' when compiling with
   39955 exceptions enabled, that is with the command line option
   39956 `-fobjc-exceptions'.
   39957 
   39958 
   39959 File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
   39960 
   39961 8.9 Fast enumeration
   39962 ====================
   39963 
   39964 * Menu:
   39965 
   39966 * Using fast enumeration::
   39967 * c99-like fast enumeration syntax::
   39968 * Fast enumeration details::
   39969 * Fast enumeration protocol::
   39970 
   39971 
   39972 File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
   39973 
   39974 8.9.1 Using fast enumeration
   39975 ----------------------------
   39976 
   39977 GNU Objective-C provides support for the fast enumeration syntax:
   39978 
   39979        id array = ...;
   39980        id object;
   39981 
   39982        for (object in array)
   39983        {
   39984          /* Do something with 'object' */
   39985        }
   39986 
   39987  `array' needs to be an Objective-C object (usually a collection
   39988 object, for example an array, a dictionary or a set) which implements
   39989 the "Fast Enumeration Protocol" (see below).  If you are using a
   39990 Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
   39991 collection objects in the library implement this protocol and can be
   39992 used in this way.
   39993 
   39994  The code above would iterate over all objects in `array'.  For each of
   39995 them, it assigns it to `object', then executes the `Do something with
   39996 'object'' statements.
   39997 
   39998  Here is a fully worked-out example using a Foundation library (which
   39999 provides the implementation of `NSArray', `NSString' and `NSLog'):
   40000 
   40001        NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
   40002        NSString *object;
   40003 
   40004        for (object in array)
   40005          NSLog (@"Iterating over %@", object);
   40006 
   40007 
   40008 File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
   40009 
   40010 8.9.2 c99-like fast enumeration syntax
   40011 --------------------------------------
   40012 
   40013 A c99-like declaration syntax is also allowed:
   40014 
   40015        id array = ...;
   40016 
   40017        for (id object in array)
   40018        {
   40019          /* Do something with 'object'  */
   40020        }
   40021 
   40022  this is completely equivalent to:
   40023 
   40024        id array = ...;
   40025 
   40026        {
   40027          id object;
   40028          for (object in array)
   40029          {
   40030            /* Do something with 'object'  */
   40031          }
   40032        }
   40033 
   40034  but can save some typing.
   40035 
   40036  Note that the option `-std=c99' is not required to allow this syntax
   40037 in Objective-C.
   40038 
   40039 
   40040 File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
   40041 
   40042 8.9.3 Fast enumeration details
   40043 ------------------------------
   40044 
   40045 Here is a more technical description with the gory details.  Consider
   40046 the code
   40047 
   40048        for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
   40049        {
   40050          STATEMENTS
   40051        }
   40052 
   40053  here is what happens when you run it:
   40054 
   40055    * `COLLECTION EXPRESSION' is evaluated exactly once and the result
   40056      is used as the collection object to iterate over.  This means it
   40057      is safe to write code such as `for (object in [NSDictionary
   40058      keyEnumerator]) ...'.
   40059 
   40060    * the iteration is implemented by the compiler by repeatedly getting
   40061      batches of objects from the collection object using the fast
   40062      enumeration protocol (see below), then iterating over all objects
   40063      in the batch.  This is faster than a normal enumeration where
   40064      objects are retrieved one by one (hence the name "fast
   40065      enumeration").
   40066 
   40067    * if there are no objects in the collection, then `OBJECT
   40068      EXPRESSION' is set to `nil' and the loop immediately terminates.
   40069 
   40070    * if there are objects in the collection, then for each object in the
   40071      collection (in the order they are returned) `OBJECT EXPRESSION' is
   40072      set to the object, then `STATEMENTS' are executed.
   40073 
   40074    * `STATEMENTS' can contain `break' and `continue' commands, which
   40075      will abort the iteration or skip to the next loop iteration as
   40076      expected.
   40077 
   40078    * when the iteration ends because there are no more objects to
   40079      iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
   40080      you to determine whether the iteration finished because a `break'
   40081      command was used (in which case `OBJECT EXPRESSION' will remain
   40082      set to the last object that was iterated over) or because it
   40083      iterated over all the objects (in which case `OBJECT EXPRESSION'
   40084      will be set to `nil').
   40085 
   40086    * `STATEMENTS' must not make any changes to the collection object;
   40087      if they do, it is a hard error and the fast enumeration terminates
   40088      by invoking `objc_enumerationMutation', a runtime function that
   40089      normally aborts the program but which can be customized by
   40090      Foundation libraries via `objc_set_mutation_handler' to do
   40091      something different, such as raising an exception.
   40092 
   40093 
   40094 
   40095 File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
   40096 
   40097 8.9.4 Fast enumeration protocol
   40098 -------------------------------
   40099 
   40100 If you want your own collection object to be usable with fast
   40101 enumeration, you need to have it implement the method
   40102 
   40103      - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
   40104                                            objects: (id *)objects
   40105                                              count: (unsigned long)len;
   40106 
   40107  where `NSFastEnumerationState' must be defined in your code as follows:
   40108 
   40109      typedef struct
   40110      {
   40111        unsigned long state;
   40112        id            *itemsPtr;
   40113        unsigned long *mutationsPtr;
   40114        unsigned long extra[5];
   40115      } NSFastEnumerationState;
   40116 
   40117  If no `NSFastEnumerationState' is defined in your code, the compiler
   40118 will automatically replace `NSFastEnumerationState *' with `struct
   40119 __objcFastEnumerationState *', where that type is silently defined by
   40120 the compiler in an identical way.  This can be confusing and we
   40121 recommend that you define `NSFastEnumerationState' (as shown above)
   40122 instead.
   40123 
   40124  The method is called repeatedly during a fast enumeration to retrieve
   40125 batches of objects.  Each invocation of the method should retrieve the
   40126 next batch of objects.
   40127 
   40128  The return value of the method is the number of objects in the current
   40129 batch; this should not exceed `len', which is the maximum size of a
   40130 batch as requested by the caller.  The batch itself is returned in the
   40131 `itemsPtr' field of the `NSFastEnumerationState' struct.
   40132 
   40133  To help with returning the objects, the `objects' array is a C array
   40134 preallocated by the caller (on the stack) of size `len'.  In many cases
   40135 you can put the objects you want to return in that `objects' array,
   40136 then do `itemsPtr = objects'.  But you don't have to; if your
   40137 collection already has the objects to return in some form of C array,
   40138 it could return them from there instead.
   40139 
   40140  The `state' and `extra' fields of the `NSFastEnumerationState'
   40141 structure allows your collection object to keep track of the state of
   40142 the enumeration.  In a simple array implementation, `state' may keep
   40143 track of the index of the last object that was returned, and `extra'
   40144 may be unused.
   40145 
   40146  The `mutationsPtr' field of the `NSFastEnumerationState' is used to
   40147 keep track of mutations.  It should point to a number; before working
   40148 on each object, the fast enumeration loop will check that this number
   40149 has not changed.  If it has, a mutation has happened and the fast
   40150 enumeration will abort.  So, `mutationsPtr' could be set to point to
   40151 some sort of version number of your collection, which is increased by
   40152 one every time there is a change (for example when an object is added
   40153 or removed).  Or, if you are content with less strict mutation checks,
   40154 it could point to the number of objects in your collection or some
   40155 other value that can be checked to perform an approximate check that
   40156 the collection has not been mutated.
   40157 
   40158  Finally, note how we declared the `len' argument and the return value
   40159 to be of type `unsigned long'.  They could also be declared to be of
   40160 type `unsigned int' and everything would still work.
   40161 
   40162 
   40163 File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
   40164 
   40165 8.10 Messaging with the GNU Objective-C runtime
   40166 ===============================================
   40167 
   40168 This section is specific for the GNU Objective-C runtime.  If you are
   40169 using a different runtime, you can skip it.
   40170 
   40171  The implementation of messaging in the GNU Objective-C runtime is
   40172 designed to be portable, and so is based on standard C.
   40173 
   40174  Sending a message in the GNU Objective-C runtime is composed of two
   40175 separate steps.  First, there is a call to the lookup function,
   40176 `objc_msg_lookup ()' (or, in the case of messages to super,
   40177 `objc_msg_lookup_super ()').  This runtime function takes as argument
   40178 the receiver and the selector of the method to be called; it returns
   40179 the `IMP', that is a pointer to the function implementing the method.
   40180 The second step of method invocation consists of casting this pointer
   40181 function to the appropriate function pointer type, and calling the
   40182 function pointed to it with the right arguments.
   40183 
   40184  For example, when the compiler encounters a method invocation such as
   40185 `[object init]', it compiles it into a call to `objc_msg_lookup
   40186 (object, @selector(init))' followed by a cast of the returned value to
   40187 the appropriate function pointer type, and then it calls it.
   40188 
   40189 * Menu:
   40190 
   40191 * Dynamically registering methods::
   40192 * Forwarding hook::
   40193 
   40194 
   40195 File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
   40196 
   40197 8.10.1 Dynamically registering methods
   40198 --------------------------------------
   40199 
   40200 If `objc_msg_lookup()' does not find a suitable method implementation,
   40201 because the receiver does not implement the required method, it tries
   40202 to see if the class can dynamically register the method.
   40203 
   40204  To do so, the runtime checks if the class of the receiver implements
   40205 the method
   40206 
   40207      + (BOOL) resolveInstanceMethod: (SEL)selector;
   40208 
   40209  in the case of an instance method, or
   40210 
   40211      + (BOOL) resolveClassMethod: (SEL)selector;
   40212 
   40213  in the case of a class method.  If the class implements it, the
   40214 runtime invokes it, passing as argument the selector of the original
   40215 method, and if it returns `YES', the runtime tries the lookup again,
   40216 which could now succeed if a matching method was added dynamically by
   40217 `+resolveInstanceMethod:' or `+resolveClassMethod:'.
   40218 
   40219  This allows classes to dynamically register methods (by adding them to
   40220 the class using `class_addMethod') when they are first called.  To do
   40221 so, a class should implement `+resolveInstanceMethod:' (or, depending
   40222 on the case, `+resolveClassMethod:') and have it recognize the
   40223 selectors of methods that can be registered dynamically at runtime,
   40224 register them, and return `YES'.  It should return `NO' for methods
   40225 that it does not dynamically registered at runtime.
   40226 
   40227  If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
   40228 implemented or returns `NO', the runtime then tries the forwarding hook.
   40229 
   40230  Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
   40231 added to the GNU Objective-C runtime in GCC version 4.6.
   40232 
   40233 
   40234 File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
   40235 
   40236 8.10.2 Forwarding hook
   40237 ----------------------
   40238 
   40239 The GNU Objective-C runtime provides a hook, called
   40240 `__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
   40241 can't find a method implementation in the runtime tables and after
   40242 calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
   40243 attempted and did not succeed in dynamically registering the method.
   40244 
   40245  To configure the hook, you set the global variable
   40246 `__objc_msg_foward2' to a function with the same argument and return
   40247 types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
   40248 method implementation, it invokes the hook function you provided to get
   40249 a method implementation to return.  So, in practice
   40250 `__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
   40251 adding some custom code that is called to do a further lookup when no
   40252 standard method implementation can be found using the normal lookup.
   40253 
   40254  This hook is generally reserved for "Foundation" libraries such as
   40255 GNUstep Base, which use it to implement their high-level method
   40256 forwarding API, typically based around the `forwardInvocation:' method.
   40257 So, unless you are implementing your own "Foundation" library, you
   40258 should not set this hook.
   40259 
   40260  In a typical forwarding implementation, the `__objc_msg_forward2' hook
   40261 function determines the argument and return type of the method that is
   40262 being looked up, and then creates a function that takes these arguments
   40263 and has that return type, and returns it to the caller.  Creating this
   40264 function is non-trivial and is typically performed using a dedicated
   40265 library such as `libffi'.
   40266 
   40267  The forwarding method implementation thus created is returned by
   40268 `objc_msg_lookup()' and is executed as if it was a normal method
   40269 implementation.  When the forwarding method implementation is called,
   40270 it is usually expected to pack all arguments into some sort of object
   40271 (typically, an `NSInvocation' in a "Foundation" library), and hand it
   40272 over to the programmer (`forwardInvocation:') who is then allowed to
   40273 manipulate the method invocation using a high-level API provided by the
   40274 "Foundation" library.  For example, the programmer may want to examine
   40275 the method invocation arguments and name and potentially change them
   40276 before forwarding the method invocation to one or more local objects
   40277 (`performInvocation:') or even to remote objects (by using Distributed
   40278 Objects or some other mechanism).  When all this completes, the return
   40279 value is passed back and must be returned correctly to the original
   40280 caller.
   40281 
   40282  Note that the GNU Objective-C runtime currently provides no support
   40283 for method forwarding or method invocations other than the
   40284 `__objc_msg_forward2' hook.
   40285 
   40286  If the forwarding hook does not exist or returns `NULL', the runtime
   40287 currently attempts forwarding using an older, deprecated API, and if
   40288 that fails, it aborts the program.  In future versions of the GNU
   40289 Objective-C runtime, the runtime will immediately abort.
   40290 
   40291 
   40292 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
   40293 
   40294 9 Binary Compatibility
   40295 **********************
   40296 
   40297 Binary compatibility encompasses several related concepts:
   40298 
   40299 "application binary interface (ABI)"
   40300      The set of runtime conventions followed by all of the tools that
   40301      deal with binary representations of a program, including
   40302      compilers, assemblers, linkers, and language runtime support.
   40303      Some ABIs are formal with a written specification, possibly
   40304      designed by multiple interested parties.  Others are simply the
   40305      way things are actually done by a particular set of tools.
   40306 
   40307 "ABI conformance"
   40308      A compiler conforms to an ABI if it generates code that follows
   40309      all of the specifications enumerated by that ABI.  A library
   40310      conforms to an ABI if it is implemented according to that ABI.  An
   40311      application conforms to an ABI if it is built using tools that
   40312      conform to that ABI and does not contain source code that
   40313      specifically changes behavior specified by the ABI.
   40314 
   40315 "calling conventions"
   40316      Calling conventions are a subset of an ABI that specify of how
   40317      arguments are passed and function results are returned.
   40318 
   40319 "interoperability"
   40320      Different sets of tools are interoperable if they generate files
   40321      that can be used in the same program.  The set of tools includes
   40322      compilers, assemblers, linkers, libraries, header files, startup
   40323      files, and debuggers.  Binaries produced by different sets of
   40324      tools are not interoperable unless they implement the same ABI.
   40325      This applies to different versions of the same tools as well as
   40326      tools from different vendors.
   40327 
   40328 "intercallability"
   40329      Whether a function in a binary built by one set of tools can call a
   40330      function in a binary built by a different set of tools is a subset
   40331      of interoperability.
   40332 
   40333 "implementation-defined features"
   40334      Language standards include lists of implementation-defined
   40335      features whose behavior can vary from one implementation to
   40336      another.  Some of these features are normally covered by a
   40337      platform's ABI and others are not.  The features that are not
   40338      covered by an ABI generally affect how a program behaves, but not
   40339      intercallability.
   40340 
   40341 "compatibility"
   40342      Conformance to the same ABI and the same behavior of
   40343      implementation-defined features are both relevant for
   40344      compatibility.
   40345 
   40346  The application binary interface implemented by a C or C++ compiler
   40347 affects code generation and runtime support for:
   40348 
   40349    * size and alignment of data types
   40350 
   40351    * layout of structured types
   40352 
   40353    * calling conventions
   40354 
   40355    * register usage conventions
   40356 
   40357    * interfaces for runtime arithmetic support
   40358 
   40359    * object file formats
   40360 
   40361  In addition, the application binary interface implemented by a C++
   40362 compiler affects code generation and runtime support for:
   40363    * name mangling
   40364 
   40365    * exception handling
   40366 
   40367    * invoking constructors and destructors
   40368 
   40369    * layout, alignment, and padding of classes
   40370 
   40371    * layout and alignment of virtual tables
   40372 
   40373  Some GCC compilation options cause the compiler to generate code that
   40374 does not conform to the platform's default ABI.  Other options cause
   40375 different program behavior for implementation-defined features that are
   40376 not covered by an ABI.  These options are provided for consistency with
   40377 other compilers that do not follow the platform's default ABI or the
   40378 usual behavior of implementation-defined features for the platform.  Be
   40379 very careful about using such options.
   40380 
   40381  Most platforms have a well-defined ABI that covers C code, but ABIs
   40382 that cover C++ functionality are not yet common.
   40383 
   40384  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
   40385 written, vendor-neutral C++ ABI that was designed to be specific to
   40386 64-bit Itanium but also includes generic specifications that apply to
   40387 any platform.  This C++ ABI is also implemented by other compiler
   40388 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
   40389 tried hard to provide a stable ABI that will be compatible with future
   40390 GCC releases, but it is possible that we will encounter problems that
   40391 make this difficult.  Such problems could include different
   40392 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
   40393 bugs in the implementation of the ABI in different compilers.  GCC's
   40394 `-Wabi' switch warns when G++ generates code that is probably not
   40395 compatible with the C++ ABI.
   40396 
   40397  The C++ library used with a C++ compiler includes the Standard C++
   40398 Library, with functionality defined in the C++ Standard, plus language
   40399 runtime support.  The runtime support is included in a C++ ABI, but
   40400 there is no formal ABI for the Standard C++ Library.  Two
   40401 implementations of that library are interoperable if one follows the
   40402 de-facto ABI of the other and if they are both built with the same
   40403 compiler, or with compilers that conform to the same ABI for C++
   40404 compiler and runtime support.
   40405 
   40406  When G++ and another C++ compiler conform to the same C++ ABI, but the
   40407 implementations of the Standard C++ Library that they normally use do
   40408 not follow the same ABI for the Standard C++ Library, object files
   40409 built with those compilers can be used in the same program only if they
   40410 use the same C++ library.  This requires specifying the location of the
   40411 C++ library header files when invoking the compiler whose usual library
   40412 is not being used.  The location of GCC's C++ header files depends on
   40413 how the GCC build was configured, but can be seen by using the G++ `-v'
   40414 option.  With default configuration options for G++ 3.3 the compile
   40415 line for a different C++ compiler needs to include
   40416 
   40417          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
   40418 
   40419  Similarly, compiling code with G++ that must use a C++ library other
   40420 than the GNU C++ library requires specifying the location of the header
   40421 files for that other library.
   40422 
   40423  The most straightforward way to link a program to use a particular C++
   40424 library is to use a C++ driver that specifies that C++ library by
   40425 default.  The `g++' driver, for example, tells the linker where to find
   40426 GCC's C++ library (`libstdc++') plus the other libraries and startup
   40427 files it needs, in the proper order.
   40428 
   40429  If a program must use a different C++ library and it's not possible to
   40430 do the final link using a C++ driver that uses that library by default,
   40431 it is necessary to tell `g++' the location and name of that library.
   40432 It might also be necessary to specify different startup files and other
   40433 runtime support libraries, and to suppress the use of GCC's support
   40434 libraries with one or more of the options `-nostdlib', `-nostartfiles',
   40435 and `-nodefaultlibs'.
   40436 
   40437 
   40438 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
   40439 
   40440 10 `gcov'--a Test Coverage Program
   40441 **********************************
   40442 
   40443 `gcov' is a tool you can use in conjunction with GCC to test code
   40444 coverage in your programs.
   40445 
   40446 * Menu:
   40447 
   40448 * Gcov Intro::                  Introduction to gcov.
   40449 * Invoking Gcov::               How to use gcov.
   40450 * Gcov and Optimization::       Using gcov with GCC optimization.
   40451 * Gcov Data Files::             The files used by gcov.
   40452 * Cross-profiling::             Data file relocation.
   40453 
   40454 
   40455 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
   40456 
   40457 10.1 Introduction to `gcov'
   40458 ===========================
   40459 
   40460 `gcov' is a test coverage program.  Use it in concert with GCC to
   40461 analyze your programs to help create more efficient, faster running
   40462 code and to discover untested parts of your program.  You can use
   40463 `gcov' as a profiling tool to help discover where your optimization
   40464 efforts will best affect your code.  You can also use `gcov' along with
   40465 the other profiling tool, `gprof', to assess which parts of your code
   40466 use the greatest amount of computing time.
   40467 
   40468  Profiling tools help you analyze your code's performance.  Using a
   40469 profiler such as `gcov' or `gprof', you can find out some basic
   40470 performance statistics, such as:
   40471 
   40472    * how often each line of code executes
   40473 
   40474    * what lines of code are actually executed
   40475 
   40476    * how much computing time each section of code uses
   40477 
   40478  Once you know these things about how your code works when compiled, you
   40479 can look at each module to see which modules should be optimized.
   40480 `gcov' helps you determine where to work on optimization.
   40481 
   40482  Software developers also use coverage testing in concert with
   40483 testsuites, to make sure software is actually good enough for a release.
   40484 Testsuites can verify that a program works as expected; a coverage
   40485 program tests to see how much of the program is exercised by the
   40486 testsuite.  Developers can then determine what kinds of test cases need
   40487 to be added to the testsuites to create both better testing and a better
   40488 final product.
   40489 
   40490  You should compile your code without optimization if you plan to use
   40491 `gcov' because the optimization, by combining some lines of code into
   40492 one function, may not give you as much information as you need to look
   40493 for `hot spots' where the code is using a great deal of computer time.
   40494 Likewise, because `gcov' accumulates statistics by line (at the lowest
   40495 resolution), it works best with a programming style that places only
   40496 one statement on each line.  If you use complicated macros that expand
   40497 to loops or to other control structures, the statistics are less
   40498 helpful--they only report on the line where the macro call appears.  If
   40499 your complex macros behave like functions, you can replace them with
   40500 inline functions to solve this problem.
   40501 
   40502  `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
   40503 many times each line of a source file `SOURCEFILE.c' has executed.  You
   40504 can use these logfiles along with `gprof' to aid in fine-tuning the
   40505 performance of your programs.  `gprof' gives timing information you can
   40506 use along with the information you get from `gcov'.
   40507 
   40508  `gcov' works only on code compiled with GCC.  It is not compatible
   40509 with any other profiling or test coverage mechanism.
   40510 
   40511 
   40512 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
   40513 
   40514 10.2 Invoking `gcov'
   40515 ====================
   40516 
   40517      gcov [OPTIONS] SOURCEFILES
   40518 
   40519  `gcov' accepts the following options:
   40520 
   40521 `-h'
   40522 `--help'
   40523      Display help about using `gcov' (on the standard output), and exit
   40524      without doing any further processing.
   40525 
   40526 `-v'
   40527 `--version'
   40528      Display the `gcov' version number (on the standard output), and
   40529      exit without doing any further processing.
   40530 
   40531 `-a'
   40532 `--all-blocks'
   40533      Write individual execution counts for every basic block.  Normally
   40534      gcov outputs execution counts only for the main blocks of a line.
   40535      With this option you can determine if blocks within a single line
   40536      are not being executed.
   40537 
   40538 `-b'
   40539 `--branch-probabilities'
   40540      Write branch frequencies to the output file, and write branch
   40541      summary info to the standard output.  This option allows you to
   40542      see how often each branch in your program was taken.
   40543      Unconditional branches will not be shown, unless the `-u' option
   40544      is given.
   40545 
   40546 `-c'
   40547 `--branch-counts'
   40548      Write branch frequencies as the number of branches taken, rather
   40549      than the percentage of branches taken.
   40550 
   40551 `-m'
   40552 `--pmu-profile'
   40553      Output the additional PMU profile information if available.
   40554 
   40555 `-q'
   40556 `--pmu_profile-path'
   40557      PMU profile path (default `pmuprofile.gcda').
   40558 
   40559 `-n'
   40560 `--no-output'
   40561      Do not create the `gcov' output file.
   40562 
   40563 `-l'
   40564 `--long-file-names'
   40565      Create long file names for included source files.  For example, if
   40566      the header file `x.h' contains code, and was included in the file
   40567      `a.c', then running `gcov' on the file `a.c' will produce an
   40568      output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
   40569      can be useful if `x.h' is included in multiple source files.  If
   40570      you use the `-p' option, both the including and included file
   40571      names will be complete path names.
   40572 
   40573 `-p'
   40574 `--preserve-paths'
   40575      Preserve complete path information in the names of generated
   40576      `.gcov' files.  Without this option, just the filename component is
   40577      used.  With this option, all directories are used, with `/'
   40578      characters translated to `#' characters, `.' directory components
   40579      removed and `..' components renamed to `^'.  This is useful if
   40580      sourcefiles are in several different directories.  It also affects
   40581      the `-l' option.
   40582 
   40583 `-f'
   40584 `--function-summaries'
   40585      Output summaries for each function in addition to the file level
   40586      summary.
   40587 
   40588 `-o DIRECTORY|FILE'
   40589 `--object-directory DIRECTORY'
   40590 `--object-file FILE'
   40591      Specify either the directory containing the gcov data files, or the
   40592      object path name.  The `.gcno', and `.gcda' data files are
   40593      searched for using this option.  If a directory is specified, the
   40594      data files are in that directory and named after the source file
   40595      name, without its extension.  If a file is specified here, the
   40596      data files are named after that file, without its extension.  If
   40597      this option is not supplied, it defaults to the current directory.
   40598 
   40599 `-u'
   40600 `--unconditional-branches'
   40601      When branch probabilities are given, include those of
   40602      unconditional branches.  Unconditional branches are normally not
   40603      interesting.
   40604 
   40605 `-d'
   40606 `--display-progress'
   40607      Display the progress on the standard output.
   40608 
   40609 `-i'
   40610 `--intermediate-format'
   40611      Output gcov file in an intermediate text format that can be used by
   40612      `lcov' or other applications. It will output a single *.gcov file
   40613      per *.gcda file. No source code is required.
   40614 
   40615      The format of the intermediate `.gcov' file is plain text with one
   40616      entry per line
   40617 
   40618           SF:SOURCE_FILE_NAME
   40619           FN:LINE_NUMBER,FUNCTION_NAME
   40620           FNDA:EXECUTION_COUNT,FUNCTION_NAME
   40621           BA:LINE_NUM,BRANCH_COVERAGE_TYPE
   40622           DA:LINE NUMBER,EXECUTION_COUNT
   40623 
   40624           Where the BRANCH_COVERAGE_TYPE is
   40625              0 (Branch not executed)
   40626              1 (Branch executed, but not taken)
   40627              2 (Branch executed and taken)
   40628 
   40629           There can be multiple SF entries in an intermediate gcov file. All
   40630           entries following SF pertain to that source file until the next SF
   40631           entry.
   40632 
   40633 
   40634  `gcov' should be run with the current directory the same as that when
   40635 you invoked the compiler.  Otherwise it will not be able to locate the
   40636 source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
   40637 current directory.  These contain the coverage information of the
   40638 source file they correspond to.  One `.gcov' file is produced for each
   40639 source file containing code, which was compiled to produce the data
   40640 files.  The MANGLEDNAME part of the output file name is usually simply
   40641 the source file name, but can be something more complicated if the `-l'
   40642 or `-p' options are given.  Refer to those options for details.
   40643 
   40644  The `.gcov' files contain the `:' separated fields along with program
   40645 source code.  The format is
   40646 
   40647      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
   40648 
   40649  Additional block information may succeed each line, when requested by
   40650 command line option.  The EXECUTION_COUNT is `-' for lines containing
   40651 no code and `#####' for lines which were never executed.  Some lines of
   40652 information at the start have LINE_NUMBER of zero.
   40653 
   40654  The preamble lines are of the form
   40655 
   40656      -:0:TAG:VALUE
   40657 
   40658  The ordering and number of these preamble lines will be augmented as
   40659 `gcov' development progresses -- do not rely on them remaining
   40660 unchanged.  Use TAG to locate a particular preamble line.
   40661 
   40662  The additional block information is of the form
   40663 
   40664      TAG INFORMATION
   40665 
   40666  The INFORMATION is human readable, but designed to be simple enough
   40667 for machine parsing too.
   40668 
   40669  When printing percentages, 0% and 100% are only printed when the values
   40670 are _exactly_ 0% and 100% respectively.  Other values which would
   40671 conventionally be rounded to 0% or 100% are instead printed as the
   40672 nearest non-boundary value.
   40673 
   40674  When using `gcov', you must first compile your program with two
   40675 special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
   40676 compiler to generate additional information needed by gcov (basically a
   40677 flow graph of the program) and also includes additional code in the
   40678 object files for generating the extra profiling information needed by
   40679 gcov.  These additional files are placed in the directory where the
   40680 object file is located.
   40681 
   40682  Running the program will cause profile output to be generated.  For
   40683 each source file compiled with `-fprofile-arcs', an accompanying
   40684 `.gcda' file will be placed in the object file directory.
   40685 
   40686  Running `gcov' with your program's source file names as arguments will
   40687 now produce a listing of the code along with frequency of execution for
   40688 each line.  For example, if your program is called `tmp.c', this is
   40689 what you see when you use the basic `gcov' facility:
   40690 
   40691      $ gcc -fprofile-arcs -ftest-coverage tmp.c
   40692      $ a.out
   40693      $ gcov tmp.c
   40694      90.00% of 10 source lines executed in file tmp.c
   40695      Creating tmp.c.gcov.
   40696 
   40697  The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
   40698 
   40699              -:    0:Source:tmp.c
   40700              -:    0:Graph:tmp.gcno
   40701              -:    0:Data:tmp.gcda
   40702              -:    0:Runs:1
   40703              -:    0:Programs:1
   40704              -:    1:#include <stdio.h>
   40705              -:    2:
   40706              -:    3:int main (void)
   40707              1:    4:{
   40708              1:    5:  int i, total;
   40709              -:    6:
   40710              1:    7:  total = 0;
   40711              -:    8:
   40712             11:    9:  for (i = 0; i < 10; i++)
   40713             10:   10:    total += i;
   40714              -:   11:
   40715              1:   12:  if (total != 45)
   40716          #####:   13:    printf ("Failure\n");
   40717              -:   14:  else
   40718              1:   15:    printf ("Success\n");
   40719              1:   16:  return 0;
   40720              -:   17:}
   40721 
   40722  When you use the `-a' option, you will get individual block counts,
   40723 and the output looks like this:
   40724 
   40725              -:    0:Source:tmp.c
   40726              -:    0:Graph:tmp.gcno
   40727              -:    0:Data:tmp.gcda
   40728              -:    0:Runs:1
   40729              -:    0:Programs:1
   40730              -:    1:#include <stdio.h>
   40731              -:    2:
   40732              -:    3:int main (void)
   40733              1:    4:{
   40734              1:    4-block  0
   40735              1:    5:  int i, total;
   40736              -:    6:
   40737              1:    7:  total = 0;
   40738              -:    8:
   40739             11:    9:  for (i = 0; i < 10; i++)
   40740             11:    9-block  0
   40741             10:   10:    total += i;
   40742             10:   10-block  0
   40743              -:   11:
   40744              1:   12:  if (total != 45)
   40745              1:   12-block  0
   40746          #####:   13:    printf ("Failure\n");
   40747          $$$$$:   13-block  0
   40748              -:   14:  else
   40749              1:   15:    printf ("Success\n");
   40750              1:   15-block  0
   40751              1:   16:  return 0;
   40752              1:   16-block  0
   40753              -:   17:}
   40754 
   40755  In this mode, each basic block is only shown on one line - the last
   40756 line of the block.  A multi-line block will only contribute to the
   40757 execution count of that last line, and other lines will not be shown to
   40758 contain code, unless previous blocks end on those lines.  The total
   40759 execution count of a line is shown and subsequent lines show the
   40760 execution counts for individual blocks that end on that line.  After
   40761 each block, the branch and call counts of the block will be shown, if
   40762 the `-b' option is given.
   40763 
   40764  Because of the way GCC instruments calls, a call count can be shown
   40765 after a line with no individual blocks.  As you can see, line 13
   40766 contains a basic block that was not executed.
   40767 
   40768  When you use the `-b' option, your output looks like this:
   40769 
   40770      $ gcov -b tmp.c
   40771      90.00% of 10 source lines executed in file tmp.c
   40772      80.00% of 5 branches executed in file tmp.c
   40773      80.00% of 5 branches taken at least once in file tmp.c
   40774      50.00% of 2 calls executed in file tmp.c
   40775      Creating tmp.c.gcov.
   40776 
   40777  Here is a sample of a resulting `tmp.c.gcov' file:
   40778 
   40779              -:    0:Source:tmp.c
   40780              -:    0:Graph:tmp.gcno
   40781              -:    0:Data:tmp.gcda
   40782              -:    0:Runs:1
   40783              -:    0:Programs:1
   40784              -:    1:#include <stdio.h>
   40785              -:    2:
   40786              -:    3:int main (void)
   40787      function main called 1 returned 1 blocks executed 75%
   40788              1:    4:{
   40789              1:    5:  int i, total;
   40790              -:    6:
   40791              1:    7:  total = 0;
   40792              -:    8:
   40793             11:    9:  for (i = 0; i < 10; i++)
   40794      branch  0 taken 91% (fallthrough)
   40795      branch  1 taken 9%
   40796             10:   10:    total += i;
   40797              -:   11:
   40798              1:   12:  if (total != 45)
   40799      branch  0 taken 0% (fallthrough)
   40800      branch  1 taken 100%
   40801          #####:   13:    printf ("Failure\n");
   40802      call    0 never executed
   40803              -:   14:  else
   40804              1:   15:    printf ("Success\n");
   40805      call    0 called 1 returned 100%
   40806              1:   16:  return 0;
   40807              -:   17:}
   40808 
   40809  For each function, a line is printed showing how many times the
   40810 function is called, how many times it returns and what percentage of the
   40811 function's blocks were executed.
   40812 
   40813  For each basic block, a line is printed after the last line of the
   40814 basic block describing the branch or call that ends the basic block.
   40815 There can be multiple branches and calls listed for a single source
   40816 line if there are multiple basic blocks that end on that line.  In this
   40817 case, the branches and calls are each given a number.  There is no
   40818 simple way to map these branches and calls back to source constructs.
   40819 In general, though, the lowest numbered branch or call will correspond
   40820 to the leftmost construct on the source line.
   40821 
   40822  For a branch, if it was executed at least once, then a percentage
   40823 indicating the number of times the branch was taken divided by the
   40824 number of times the branch was executed will be printed.  Otherwise, the
   40825 message "never executed" is printed.
   40826 
   40827  For a call, if it was executed at least once, then a percentage
   40828 indicating the number of times the call returned divided by the number
   40829 of times the call was executed will be printed.  This will usually be
   40830 100%, but may be less for functions that call `exit' or `longjmp', and
   40831 thus may not return every time they are called.
   40832 
   40833  The execution counts are cumulative.  If the example program were
   40834 executed again without removing the `.gcda' file, the count for the
   40835 number of times each line in the source was executed would be added to
   40836 the results of the previous run(s).  This is potentially useful in
   40837 several ways.  For example, it could be used to accumulate data over a
   40838 number of program runs as part of a test verification suite, or to
   40839 provide more accurate long-term information over a large number of
   40840 program runs.
   40841 
   40842  The data in the `.gcda' files is saved immediately before the program
   40843 exits.  For each source file compiled with `-fprofile-arcs', the
   40844 profiling code first attempts to read in an existing `.gcda' file; if
   40845 the file doesn't match the executable (differing number of basic block
   40846 counts) it will ignore the contents of the file.  It then adds in the
   40847 new execution counts and finally writes the data to the file.
   40848 
   40849 
   40850 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
   40851 
   40852 10.3 Using `gcov' with GCC Optimization
   40853 =======================================
   40854 
   40855 If you plan to use `gcov' to help optimize your code, you must first
   40856 compile your program with two special GCC options: `-fprofile-arcs
   40857 -ftest-coverage'.  Aside from that, you can use any other GCC options;
   40858 but if you want to prove that every single line in your program was
   40859 executed, you should not compile with optimization at the same time.
   40860 On some machines the optimizer can eliminate some simple code lines by
   40861 combining them with other lines.  For example, code like this:
   40862 
   40863      if (a != b)
   40864        c = 1;
   40865      else
   40866        c = 0;
   40867 
   40868 can be compiled into one instruction on some machines.  In this case,
   40869 there is no way for `gcov' to calculate separate execution counts for
   40870 each line because there isn't separate code for each line.  Hence the
   40871 `gcov' output looks like this if you compiled the program with
   40872 optimization:
   40873 
   40874            100:   12:if (a != b)
   40875            100:   13:  c = 1;
   40876            100:   14:else
   40877            100:   15:  c = 0;
   40878 
   40879  The output shows that this block of code, combined by optimization,
   40880 executed 100 times.  In one sense this result is correct, because there
   40881 was only one instruction representing all four of these lines.  However,
   40882 the output does not indicate how many times the result was 0 and how
   40883 many times the result was 1.
   40884 
   40885  Inlineable functions can create unexpected line counts.  Line counts
   40886 are shown for the source code of the inlineable function, but what is
   40887 shown depends on where the function is inlined, or if it is not inlined
   40888 at all.
   40889 
   40890  If the function is not inlined, the compiler must emit an out of line
   40891 copy of the function, in any object file that needs it.  If `fileA.o'
   40892 and `fileB.o' both contain out of line bodies of a particular
   40893 inlineable function, they will also both contain coverage counts for
   40894 that function.  When `fileA.o' and `fileB.o' are linked together, the
   40895 linker will, on many systems, select one of those out of line bodies
   40896 for all calls to that function, and remove or ignore the other.
   40897 Unfortunately, it will not remove the coverage counters for the unused
   40898 function body.  Hence when instrumented, all but one use of that
   40899 function will show zero counts.
   40900 
   40901  If the function is inlined in several places, the block structure in
   40902 each location might not be the same.  For instance, a condition might
   40903 now be calculable at compile time in some instances.  Because the
   40904 coverage of all the uses of the inline function will be shown for the
   40905 same source lines, the line counts themselves might seem inconsistent.
   40906 
   40907 
   40908 File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
   40909 
   40910 10.4 Brief description of `gcov' data files
   40911 ===========================================
   40912 
   40913 `gcov' uses two files for profiling.  The names of these files are
   40914 derived from the original _object_ file by substituting the file suffix
   40915 with either `.gcno', or `.gcda'.  All of these files are placed in the
   40916 same directory as the object file, and contain data stored in a
   40917 platform-independent format.
   40918 
   40919  The `.gcno' file is generated when the source file is compiled with
   40920 the GCC `-ftest-coverage' option.  It contains information to
   40921 reconstruct the basic block graphs and assign source line numbers to
   40922 blocks.
   40923 
   40924  The `.gcda' file is generated when a program containing object files
   40925 built with the GCC `-fprofile-arcs' option is executed.  A separate
   40926 `.gcda' file is created for each object file compiled with this option.
   40927 It contains arc transition counts, and some summary information.
   40928 
   40929  The full details of the file format is specified in `gcov-io.h', and
   40930 functions provided in that header file should be used to access the
   40931 coverage files.
   40932 
   40933 
   40934 File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
   40935 
   40936 10.5 Data file relocation to support cross-profiling
   40937 ====================================================
   40938 
   40939 Running the program will cause profile output to be generated.  For each
   40940 source file compiled with `-fprofile-arcs', an accompanying `.gcda'
   40941 file will be placed in the object file directory. That implicitly
   40942 requires running the program on the same system as it was built or
   40943 having the same absolute directory structure on the target system. The
   40944 program will try to create the needed directory structure, if it is not
   40945 already present.
   40946 
   40947  To support cross-profiling, a program compiled with `-fprofile-arcs'
   40948 can relocate the data files based on two environment variables:
   40949 
   40950    * GCOV_PREFIX contains the prefix to add to the absolute paths in
   40951      the object file. Prefix can be absolute, or relative.  The default
   40952      is no prefix.
   40953 
   40954    * GCOV_PREFIX_STRIP indicates the how many initial directory names
   40955      to strip off the hardwired absolute paths. Default value is 0.
   40956 
   40957      _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
   40958      undefined,  then a relative path is made out of the hardwired
   40959      absolute paths.
   40960 
   40961  For example, if the object file `/user/build/foo.o' was built with
   40962 `-fprofile-arcs', the final executable will try to create the data file
   40963 `/user/build/foo.gcda' when running on the target system.  This will
   40964 fail if the corresponding directory does not exist and it is unable to
   40965 create it.  This can be overcome by, for example, setting the
   40966 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
   40967 Such a setting will name the data file `/target/run/build/foo.gcda'.
   40968 
   40969  You must move the data files to the expected directory tree in order to
   40970 use them for profile directed optimizations (`--use-profile'), or to
   40971 use the `gcov' tool.
   40972 
   40973 
   40974 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
   40975 
   40976 11 Known Causes of Trouble with GCC
   40977 ***********************************
   40978 
   40979 This section describes known problems that affect users of GCC.  Most
   40980 of these are not GCC bugs per se--if they were, we would fix them.  But
   40981 the result for a user may be like the result of a bug.
   40982 
   40983  Some of these problems are due to bugs in other software, some are
   40984 missing features that are too much work to add, and some are places
   40985 where people's opinions differ as to what is best.
   40986 
   40987 * Menu:
   40988 
   40989 * Actual Bugs::         Bugs we will fix later.
   40990 * Cross-Compiler Problems:: Common problems of cross compiling with GCC.
   40991 * Interoperation::      Problems using GCC with other compilers,
   40992                         and with certain linkers, assemblers and debuggers.
   40993 * Incompatibilities::   GCC is incompatible with traditional C.
   40994 * Fixed Headers::       GCC uses corrected versions of system header files.
   40995                         This is necessary, but doesn't always work smoothly.
   40996 * Standard Libraries::  GCC uses the system C library, which might not be
   40997                         compliant with the ISO C standard.
   40998 * Disappointments::     Regrettable things we can't change, but not quite bugs.
   40999 * C++ Misunderstandings:: Common misunderstandings with GNU C++.
   41000 * Non-bugs::            Things we think are right, but some others disagree.
   41001 * Warnings and Errors:: Which problems in your code get warnings,
   41002                         and which get errors.
   41003 
   41004 
   41005 File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
   41006 
   41007 11.1 Actual Bugs We Haven't Fixed Yet
   41008 =====================================
   41009 
   41010    * The `fixincludes' script interacts badly with automounters; if the
   41011      directory of system header files is automounted, it tends to be
   41012      unmounted while `fixincludes' is running.  This would seem to be a
   41013      bug in the automounter.  We don't know any good way to work around
   41014      it.
   41015 
   41016 
   41017 File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
   41018 
   41019 11.2 Cross-Compiler Problems
   41020 ============================
   41021 
   41022 You may run into problems with cross compilation on certain machines,
   41023 for several reasons.
   41024 
   41025    * At present, the program `mips-tfile' which adds debug support to
   41026      object files on MIPS systems does not work in a cross compile
   41027      environment.
   41028 
   41029 
   41030 File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
   41031 
   41032 11.3 Interoperation
   41033 ===================
   41034 
   41035 This section lists various difficulties encountered in using GCC
   41036 together with other compilers or with the assemblers, linkers,
   41037 libraries and debuggers on certain systems.
   41038 
   41039    * On many platforms, GCC supports a different ABI for C++ than do
   41040      other compilers, so the object files compiled by GCC cannot be
   41041      used with object files generated by another C++ compiler.
   41042 
   41043      An area where the difference is most apparent is name mangling.
   41044      The use of different name mangling is intentional, to protect you
   41045      from more subtle problems.  Compilers differ as to many internal
   41046      details of C++ implementation, including: how class instances are
   41047      laid out, how multiple inheritance is implemented, and how virtual
   41048      function calls are handled.  If the name encoding were made the
   41049      same, your programs would link against libraries provided from
   41050      other compilers--but the programs would then crash when run.
   41051      Incompatible libraries are then detected at link time, rather than
   41052      at run time.
   41053 
   41054    * On some BSD systems, including some versions of Ultrix, use of
   41055      profiling causes static variable destructors (currently used only
   41056      in C++) not to be run.
   41057 
   41058    * On some SGI systems, when you use `-lgl_s' as an option, it gets
   41059      translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
   41060      does not happen when you use GCC.  You must specify all three
   41061      options explicitly.
   41062 
   41063    * On a SPARC, GCC aligns all values of type `double' on an 8-byte
   41064      boundary, and it expects every `double' to be so aligned.  The Sun
   41065      compiler usually gives `double' values 8-byte alignment, with one
   41066      exception: function arguments of type `double' may not be aligned.
   41067 
   41068      As a result, if a function compiled with Sun CC takes the address
   41069      of an argument of type `double' and passes this pointer of type
   41070      `double *' to a function compiled with GCC, dereferencing the
   41071      pointer may cause a fatal signal.
   41072 
   41073      One way to solve this problem is to compile your entire program
   41074      with GCC.  Another solution is to modify the function that is
   41075      compiled with Sun CC to copy the argument into a local variable;
   41076      local variables are always properly aligned.  A third solution is
   41077      to modify the function that uses the pointer to dereference it via
   41078      the following function `access_double' instead of directly with
   41079      `*':
   41080 
   41081           inline double
   41082           access_double (double *unaligned_ptr)
   41083           {
   41084             union d2i { double d; int i[2]; };
   41085 
   41086             union d2i *p = (union d2i *) unaligned_ptr;
   41087             union d2i u;
   41088 
   41089             u.i[0] = p->i[0];
   41090             u.i[1] = p->i[1];
   41091 
   41092             return u.d;
   41093           }
   41094 
   41095      Storing into the pointer can be done likewise with the same union.
   41096 
   41097    * On Solaris, the `malloc' function in the `libmalloc.a' library may
   41098      allocate memory that is only 4 byte aligned.  Since GCC on the
   41099      SPARC assumes that doubles are 8 byte aligned, this may result in a
   41100      fatal signal if doubles are stored in memory allocated by the
   41101      `libmalloc.a' library.
   41102 
   41103      The solution is to not use the `libmalloc.a' library.  Use instead
   41104      `malloc' and related functions from `libc.a'; they do not have
   41105      this problem.
   41106 
   41107    * On the HP PA machine, ADB sometimes fails to work on functions
   41108      compiled with GCC.  Specifically, it fails to work on functions
   41109      that use `alloca' or variable-size arrays.  This is because GCC
   41110      doesn't generate HP-UX unwind descriptors for such functions.  It
   41111      may even be impossible to generate them.
   41112 
   41113    * Debugging (`-g') is not supported on the HP PA machine, unless you
   41114      use the preliminary GNU tools.
   41115 
   41116    * Taking the address of a label may generate errors from the HP-UX
   41117      PA assembler.  GAS for the PA does not have this problem.
   41118 
   41119    * Using floating point parameters for indirect calls to static
   41120      functions will not work when using the HP assembler.  There simply
   41121      is no way for GCC to specify what registers hold arguments for
   41122      static functions when using the HP assembler.  GAS for the PA does
   41123      not have this problem.
   41124 
   41125    * In extremely rare cases involving some very large functions you may
   41126      receive errors from the HP linker complaining about an out of
   41127      bounds unconditional branch offset.  This used to occur more often
   41128      in previous versions of GCC, but is now exceptionally rare.  If
   41129      you should run into it, you can work around by making your
   41130      function smaller.
   41131 
   41132    * GCC compiled code sometimes emits warnings from the HP-UX
   41133      assembler of the form:
   41134 
   41135           (warning) Use of GR3 when
   41136             frame >= 8192 may cause conflict.
   41137 
   41138      These warnings are harmless and can be safely ignored.
   41139 
   41140    * In extremely rare cases involving some very large functions you may
   41141      receive errors from the AIX Assembler complaining about a
   41142      displacement that is too large.  If you should run into it, you
   41143      can work around by making your function smaller.
   41144 
   41145    * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
   41146      semantics which merges global symbols between libraries and
   41147      applications, especially necessary for C++ streams functionality.
   41148      This is not the default behavior of AIX shared libraries and
   41149      dynamic linking.  `libstdc++.a' is built on AIX with
   41150      "runtime-linking" enabled so that symbol merging can occur.  To
   41151      utilize this feature, the application linked with `libstdc++.a'
   41152      must include the `-Wl,-brtl' flag on the link line.  G++ cannot
   41153      impose this because this option may interfere with the semantics
   41154      of the user program and users may not always use `g++' to link his
   41155      or her application.  Applications are not required to use the
   41156      `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
   41157      library which is not dependent on the symbol merging semantics
   41158      will continue to function correctly.
   41159 
   41160    * An application can interpose its own definition of functions for
   41161      functions invoked by `libstdc++.a' with "runtime-linking" enabled
   41162      on AIX.  To accomplish this the application must be linked with
   41163      "runtime-linking" option and the functions explicitly must be
   41164      exported by the application (`-Wl,-brtl,-bE:exportfile').
   41165 
   41166    * AIX on the RS/6000 provides support (NLS) for environments outside
   41167      of the United States.  Compilers and assemblers use NLS to support
   41168      locale-specific representations of various objects including
   41169      floating-point numbers (`.' vs `,' for separating decimal
   41170      fractions).  There have been problems reported where the library
   41171      linked with GCC does not produce the same floating-point formats
   41172      that the assembler accepts.  If you have this problem, set the
   41173      `LANG' environment variable to `C' or `En_US'.
   41174 
   41175    * Even if you specify `-fdollars-in-identifiers', you cannot
   41176      successfully use `$' in identifiers on the RS/6000 due to a
   41177      restriction in the IBM assembler.  GAS supports these identifiers.
   41178 
   41179 
   41180 
   41181 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
   41182 
   41183 11.4 Incompatibilities of GCC
   41184 =============================
   41185 
   41186 There are several noteworthy incompatibilities between GNU C and K&R
   41187 (non-ISO) versions of C.
   41188 
   41189    * GCC normally makes string constants read-only.  If several
   41190      identical-looking string constants are used, GCC stores only one
   41191      copy of the string.
   41192 
   41193      One consequence is that you cannot call `mktemp' with a string
   41194      constant argument.  The function `mktemp' always alters the string
   41195      its argument points to.
   41196 
   41197      Another consequence is that `sscanf' does not work on some very
   41198      old systems when passed a string constant as its format control
   41199      string or input.  This is because `sscanf' incorrectly tries to
   41200      write into the string constant.  Likewise `fscanf' and `scanf'.
   41201 
   41202      The solution to these problems is to change the program to use
   41203      `char'-array variables with initialization strings for these
   41204      purposes instead of string constants.
   41205 
   41206    * `-2147483648' is positive.
   41207 
   41208      This is because 2147483648 cannot fit in the type `int', so
   41209      (following the ISO C rules) its data type is `unsigned long int'.
   41210      Negating this value yields 2147483648 again.
   41211 
   41212    * GCC does not substitute macro arguments when they appear inside of
   41213      string constants.  For example, the following macro in GCC
   41214 
   41215           #define foo(a) "a"
   41216 
   41217      will produce output `"a"' regardless of what the argument A is.
   41218 
   41219    * When you use `setjmp' and `longjmp', the only automatic variables
   41220      guaranteed to remain valid are those declared `volatile'.  This is
   41221      a consequence of automatic register allocation.  Consider this
   41222      function:
   41223 
   41224           jmp_buf j;
   41225 
   41226           foo ()
   41227           {
   41228             int a, b;
   41229 
   41230             a = fun1 ();
   41231             if (setjmp (j))
   41232               return a;
   41233 
   41234             a = fun2 ();
   41235             /* `longjmp (j)' may occur in `fun3'. */
   41236             return a + fun3 ();
   41237           }
   41238 
   41239      Here `a' may or may not be restored to its first value when the
   41240      `longjmp' occurs.  If `a' is allocated in a register, then its
   41241      first value is restored; otherwise, it keeps the last value stored
   41242      in it.
   41243 
   41244      If you use the `-W' option with the `-O' option, you will get a
   41245      warning when GCC thinks such a problem might be possible.
   41246 
   41247    * Programs that use preprocessing directives in the middle of macro
   41248      arguments do not work with GCC.  For example, a program like this
   41249      will not work:
   41250 
   41251           foobar (
   41252           #define luser
   41253                   hack)
   41254 
   41255      ISO C does not permit such a construct.
   41256 
   41257    * K&R compilers allow comments to cross over an inclusion boundary
   41258      (i.e. started in an include file and ended in the including file).
   41259 
   41260    * Declarations of external variables and functions within a block
   41261      apply only to the block containing the declaration.  In other
   41262      words, they have the same scope as any other declaration in the
   41263      same place.
   41264 
   41265      In some other C compilers, an `extern' declaration affects all the
   41266      rest of the file even if it happens within a block.
   41267 
   41268    * In traditional C, you can combine `long', etc., with a typedef
   41269      name, as shown here:
   41270 
   41271           typedef int foo;
   41272           typedef long foo bar;
   41273 
   41274      In ISO C, this is not allowed: `long' and other type modifiers
   41275      require an explicit `int'.
   41276 
   41277    * PCC allows typedef names to be used as function parameters.
   41278 
   41279    * Traditional C allows the following erroneous pair of declarations
   41280      to appear together in a given scope:
   41281 
   41282           typedef int foo;
   41283           typedef foo foo;
   41284 
   41285    * GCC treats all characters of identifiers as significant.
   41286      According to K&R-1 (2.2), "No more than the first eight characters
   41287      are significant, although more may be used.".  Also according to
   41288      K&R-1 (2.2), "An identifier is a sequence of letters and digits;
   41289      the first character must be a letter.  The underscore _ counts as
   41290      a letter.", but GCC also allows dollar signs in identifiers.
   41291 
   41292    * PCC allows whitespace in the middle of compound assignment
   41293      operators such as `+='.  GCC, following the ISO standard, does not
   41294      allow this.
   41295 
   41296    * GCC complains about unterminated character constants inside of
   41297      preprocessing conditionals that fail.  Some programs have English
   41298      comments enclosed in conditionals that are guaranteed to fail; if
   41299      these comments contain apostrophes, GCC will probably report an
   41300      error.  For example, this code would produce an error:
   41301 
   41302           #if 0
   41303           You can't expect this to work.
   41304           #endif
   41305 
   41306      The best solution to such a problem is to put the text into an
   41307      actual C comment delimited by `/*...*/'.
   41308 
   41309    * Many user programs contain the declaration `long time ();'.  In the
   41310      past, the system header files on many systems did not actually
   41311      declare `time', so it did not matter what type your program
   41312      declared it to return.  But in systems with ISO C headers, `time'
   41313      is declared to return `time_t', and if that is not the same as
   41314      `long', then `long time ();' is erroneous.
   41315 
   41316      The solution is to change your program to use appropriate system
   41317      headers (`<time.h>' on systems with ISO C headers) and not to
   41318      declare `time' if the system header files declare it, or failing
   41319      that to use `time_t' as the return type of `time'.
   41320 
   41321    * When compiling functions that return `float', PCC converts it to a
   41322      double.  GCC actually returns a `float'.  If you are concerned
   41323      with PCC compatibility, you should declare your functions to return
   41324      `double'; you might as well say what you mean.
   41325 
   41326    * When compiling functions that return structures or unions, GCC
   41327      output code normally uses a method different from that used on most
   41328      versions of Unix.  As a result, code compiled with GCC cannot call
   41329      a structure-returning function compiled with PCC, and vice versa.
   41330 
   41331      The method used by GCC is as follows: a structure or union which is
   41332      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
   41333      union with any other size is stored into an address supplied by
   41334      the caller (usually in a special, fixed register, but on some
   41335      machines it is passed on the stack).  The target hook
   41336      `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
   41337 
   41338      By contrast, PCC on most target machines returns structures and
   41339      unions of any size by copying the data into an area of static
   41340      storage, and then returning the address of that storage as if it
   41341      were a pointer value.  The caller must copy the data from that
   41342      memory area to the place where the value is wanted.  GCC does not
   41343      use this method because it is slower and nonreentrant.
   41344 
   41345      On some newer machines, PCC uses a reentrant convention for all
   41346      structure and union returning.  GCC on most of these machines uses
   41347      a compatible convention when returning structures and unions in
   41348      memory, but still returns small structures and unions in registers.
   41349 
   41350      You can tell GCC to use a compatible convention for all structure
   41351      and union returning with the option `-fpcc-struct-return'.
   41352 
   41353    * GCC complains about program fragments such as `0x74ae-0x4000'
   41354      which appear to be two hexadecimal constants separated by the minus
   41355      operator.  Actually, this string is a single "preprocessing token".
   41356      Each such token must correspond to one token in C.  Since this
   41357      does not, GCC prints an error message.  Although it may appear
   41358      obvious that what is meant is an operator and two values, the ISO
   41359      C standard specifically requires that this be treated as erroneous.
   41360 
   41361      A "preprocessing token" is a "preprocessing number" if it begins
   41362      with a digit and is followed by letters, underscores, digits,
   41363      periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
   41364      character sequences.  (In strict C90 mode, the sequences `p+',
   41365      `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
   41366 
   41367      To make the above program fragment valid, place whitespace in
   41368      front of the minus sign.  This whitespace will end the
   41369      preprocessing number.
   41370 
   41371 
   41372 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
   41373 
   41374 11.5 Fixed Header Files
   41375 =======================
   41376 
   41377 GCC needs to install corrected versions of some system header files.
   41378 This is because most target systems have some header files that won't
   41379 work with GCC unless they are changed.  Some have bugs, some are
   41380 incompatible with ISO C, and some depend on special features of other
   41381 compilers.
   41382 
   41383  Installing GCC automatically creates and installs the fixed header
   41384 files, by running a program called `fixincludes'.  Normally, you don't
   41385 need to pay attention to this.  But there are cases where it doesn't do
   41386 the right thing automatically.
   41387 
   41388    * If you update the system's header files, such as by installing a
   41389      new system version, the fixed header files of GCC are not
   41390      automatically updated.  They can be updated using the `mkheaders'
   41391      script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   41392 
   41393    * On some systems, header file directories contain machine-specific
   41394      symbolic links in certain places.  This makes it possible to share
   41395      most of the header files among hosts running the same version of
   41396      the system on different machine models.
   41397 
   41398      The programs that fix the header files do not understand this
   41399      special way of using symbolic links; therefore, the directory of
   41400      fixed header files is good only for the machine model used to
   41401      build it.
   41402 
   41403      It is possible to make separate sets of fixed header files for the
   41404      different machine models, and arrange a structure of symbolic
   41405      links so as to use the proper set, but you'll have to do this by
   41406      hand.
   41407 
   41408 
   41409 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
   41410 
   41411 11.6 Standard Libraries
   41412 =======================
   41413 
   41414 GCC by itself attempts to be a conforming freestanding implementation.
   41415 *Note Language Standards Supported by GCC: Standards, for details of
   41416 what this means.  Beyond the library facilities required of such an
   41417 implementation, the rest of the C library is supplied by the vendor of
   41418 the operating system.  If that C library doesn't conform to the C
   41419 standards, then your programs might get warnings (especially when using
   41420 `-Wall') that you don't expect.
   41421 
   41422  For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
   41423 while the C standard says that `sprintf' returns an `int'.  The
   41424 `fixincludes' program could make the prototype for this function match
   41425 the Standard, but that would be wrong, since the function will still
   41426 return `char *'.
   41427 
   41428  If you need a Standard compliant library, then you need to find one, as
   41429 GCC does not provide one.  The GNU C library (called `glibc') provides
   41430 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
   41431 HURD-based GNU systems; no recent version of it supports other systems,
   41432 though some very old versions did.  Version 2.2 of the GNU C library
   41433 includes nearly complete C99 support.  You could also ask your
   41434 operating system vendor if newer libraries are available.
   41435 
   41436 
   41437 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
   41438 
   41439 11.7 Disappointments and Misunderstandings
   41440 ==========================================
   41441 
   41442 These problems are perhaps regrettable, but we don't know any practical
   41443 way around them.
   41444 
   41445    * Certain local variables aren't recognized by debuggers when you
   41446      compile with optimization.
   41447 
   41448      This occurs because sometimes GCC optimizes the variable out of
   41449      existence.  There is no way to tell the debugger how to compute the
   41450      value such a variable "would have had", and it is not clear that
   41451      would be desirable anyway.  So GCC simply does not mention the
   41452      eliminated variable when it writes debugging information.
   41453 
   41454      You have to expect a certain amount of disagreement between the
   41455      executable and your source code, when you use optimization.
   41456 
   41457    * Users often think it is a bug when GCC reports an error for code
   41458      like this:
   41459 
   41460           int foo (struct mumble *);
   41461 
   41462           struct mumble { ... };
   41463 
   41464           int foo (struct mumble *x)
   41465           { ... }
   41466 
   41467      This code really is erroneous, because the scope of `struct
   41468      mumble' in the prototype is limited to the argument list
   41469      containing it.  It does not refer to the `struct mumble' defined
   41470      with file scope immediately below--they are two unrelated types
   41471      with similar names in different scopes.
   41472 
   41473      But in the definition of `foo', the file-scope type is used
   41474      because that is available to be inherited.  Thus, the definition
   41475      and the prototype do not match, and you get an error.
   41476 
   41477      This behavior may seem silly, but it's what the ISO standard
   41478      specifies.  It is easy enough for you to make your code work by
   41479      moving the definition of `struct mumble' above the prototype.
   41480      It's not worth being incompatible with ISO C just to avoid an
   41481      error for the example shown above.
   41482 
   41483    * Accesses to bit-fields even in volatile objects works by accessing
   41484      larger objects, such as a byte or a word.  You cannot rely on what
   41485      size of object is accessed in order to read or write the
   41486      bit-field; it may even vary for a given bit-field according to the
   41487      precise usage.
   41488 
   41489      If you care about controlling the amount of memory that is
   41490      accessed, use volatile but do not use bit-fields.
   41491 
   41492    * GCC comes with shell scripts to fix certain known problems in
   41493      system header files.  They install corrected copies of various
   41494      header files in a special directory where only GCC will normally
   41495      look for them.  The scripts adapt to various systems by searching
   41496      all the system header files for the problem cases that we know
   41497      about.
   41498 
   41499      If new system header files are installed, nothing automatically
   41500      arranges to update the corrected header files.  They can be
   41501      updated using the `mkheaders' script installed in
   41502      `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
   41503 
   41504    * On 68000 and x86 systems, for instance, you can get paradoxical
   41505      results if you test the precise values of floating point numbers.
   41506      For example, you can find that a floating point value which is not
   41507      a NaN is not equal to itself.  This results from the fact that the
   41508      floating point registers hold a few more bits of precision than
   41509      fit in a `double' in memory.  Compiled code moves values between
   41510      memory and floating point registers at its convenience, and moving
   41511      them into memory truncates them.
   41512 
   41513      You can partially avoid this problem by using the `-ffloat-store'
   41514      option (*note Optimize Options::).
   41515 
   41516    * On AIX and other platforms without weak symbol support, templates
   41517      need to be instantiated explicitly and symbols for static members
   41518      of templates will not be generated.
   41519 
   41520    * On AIX, GCC scans object files and library archives for static
   41521      constructors and destructors when linking an application before the
   41522      linker prunes unreferenced symbols.  This is necessary to prevent
   41523      the AIX linker from mistakenly assuming that static constructor or
   41524      destructor are unused and removing them before the scanning can
   41525      occur.  All static constructors and destructors found will be
   41526      referenced even though the modules in which they occur may not be
   41527      used by the program.  This may lead to both increased executable
   41528      size and unexpected symbol references.
   41529 
   41530 
   41531 File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
   41532 
   41533 11.8 Common Misunderstandings with GNU C++
   41534 ==========================================
   41535 
   41536 C++ is a complex language and an evolving one, and its standard
   41537 definition (the ISO C++ standard) was only recently completed.  As a
   41538 result, your C++ compiler may occasionally surprise you, even when its
   41539 behavior is correct.  This section discusses some areas that frequently
   41540 give rise to questions of this sort.
   41541 
   41542 * Menu:
   41543 
   41544 * Static Definitions::  Static member declarations are not definitions
   41545 * Name lookup::         Name lookup, templates, and accessing members of base classes
   41546 * Temporaries::         Temporaries may vanish before you expect
   41547 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
   41548 
   41549 
   41550 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
   41551 
   41552 11.8.1 Declare _and_ Define Static Members
   41553 ------------------------------------------
   41554 
   41555 When a class has static data members, it is not enough to _declare_ the
   41556 static member; you must also _define_ it.  For example:
   41557 
   41558      class Foo
   41559      {
   41560        ...
   41561        void method();
   41562        static int bar;
   41563      };
   41564 
   41565  This declaration only establishes that the class `Foo' has an `int'
   41566 named `Foo::bar', and a member function named `Foo::method'.  But you
   41567 still need to define _both_ `method' and `bar' elsewhere.  According to
   41568 the ISO standard, you must supply an initializer in one (and only one)
   41569 source file, such as:
   41570 
   41571      int Foo::bar = 0;
   41572 
   41573  Other C++ compilers may not correctly implement the standard behavior.
   41574 As a result, when you switch to `g++' from one of these compilers, you
   41575 may discover that a program that appeared to work correctly in fact
   41576 does not conform to the standard: `g++' reports as undefined symbols
   41577 any static data members that lack definitions.
   41578 
   41579 
   41580 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
   41581 
   41582 11.8.2 Name lookup, templates, and accessing members of base classes
   41583 --------------------------------------------------------------------
   41584 
   41585 The C++ standard prescribes that all names that are not dependent on
   41586 template parameters are bound to their present definitions when parsing
   41587 a template function or class.(1)  Only names that are dependent are
   41588 looked up at the point of instantiation.  For example, consider
   41589 
   41590        void foo(double);
   41591 
   41592        struct A {
   41593          template <typename T>
   41594          void f () {
   41595            foo (1);        // 1
   41596            int i = N;      // 2
   41597            T t;
   41598            t.bar();        // 3
   41599            foo (t);        // 4
   41600          }
   41601 
   41602          static const int N;
   41603        };
   41604 
   41605  Here, the names `foo' and `N' appear in a context that does not depend
   41606 on the type of `T'.  The compiler will thus require that they are
   41607 defined in the context of use in the template, not only before the
   41608 point of instantiation, and will here use `::foo(double)' and `A::N',
   41609 respectively.  In particular, it will convert the integer value to a
   41610 `double' when passing it to `::foo(double)'.
   41611 
   41612  Conversely, `bar' and the call to `foo' in the fourth marked line are
   41613 used in contexts that do depend on the type of `T', so they are only
   41614 looked up at the point of instantiation, and you can provide
   41615 declarations for them after declaring the template, but before
   41616 instantiating it.  In particular, if you instantiate `A::f<int>', the
   41617 last line will call an overloaded `::foo(int)' if one was provided,
   41618 even if after the declaration of `struct A'.
   41619 
   41620  This distinction between lookup of dependent and non-dependent names is
   41621 called two-stage (or dependent) name lookup.  G++ implements it since
   41622 version 3.4.
   41623 
   41624  Two-stage name lookup sometimes leads to situations with behavior
   41625 different from non-template codes.  The most common is probably this:
   41626 
   41627        template <typename T> struct Base {
   41628          int i;
   41629        };
   41630 
   41631        template <typename T> struct Derived : public Base<T> {
   41632          int get_i() { return i; }
   41633        };
   41634 
   41635  In `get_i()', `i' is not used in a dependent context, so the compiler
   41636 will look for a name declared at the enclosing namespace scope (which
   41637 is the global scope here).  It will not look into the base class, since
   41638 that is dependent and you may declare specializations of `Base' even
   41639 after declaring `Derived', so the compiler can't really know what `i'
   41640 would refer to.  If there is no global variable `i', then you will get
   41641 an error message.
   41642 
   41643  In order to make it clear that you want the member of the base class,
   41644 you need to defer lookup until instantiation time, at which the base
   41645 class is known.  For this, you need to access `i' in a dependent
   41646 context, by either using `this->i' (remember that `this' is of type
   41647 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
   41648 Alternatively, `Base<T>::i' might be brought into scope by a
   41649 `using'-declaration.
   41650 
   41651  Another, similar example involves calling member functions of a base
   41652 class:
   41653 
   41654        template <typename T> struct Base {
   41655            int f();
   41656        };
   41657 
   41658        template <typename T> struct Derived : Base<T> {
   41659            int g() { return f(); };
   41660        };
   41661 
   41662  Again, the call to `f()' is not dependent on template arguments (there
   41663 are no arguments that depend on the type `T', and it is also not
   41664 otherwise specified that the call should be in a dependent context).
   41665 Thus a global declaration of such a function must be available, since
   41666 the one in the base class is not visible until instantiation time.  The
   41667 compiler will consequently produce the following error message:
   41668 
   41669        x.cc: In member function `int Derived<T>::g()':
   41670        x.cc:6: error: there are no arguments to `f' that depend on a template
   41671           parameter, so a declaration of `f' must be available
   41672        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
   41673           allowing the use of an undeclared name is deprecated)
   41674 
   41675  To make the code valid either use `this->f()', or `Base<T>::f()'.
   41676 Using the `-fpermissive' flag will also let the compiler accept the
   41677 code, by marking all function calls for which no declaration is visible
   41678 at the time of definition of the template for later lookup at
   41679 instantiation time, as if it were a dependent call.  We do not
   41680 recommend using `-fpermissive' to work around invalid code, and it will
   41681 also only catch cases where functions in base classes are called, not
   41682 where variables in base classes are used (as in the example above).
   41683 
   41684  Note that some compilers (including G++ versions prior to 3.4) get
   41685 these examples wrong and accept above code without an error.  Those
   41686 compilers do not implement two-stage name lookup correctly.
   41687 
   41688  ---------- Footnotes ----------
   41689 
   41690  (1) The C++ standard just uses the term "dependent" for names that
   41691 depend on the type or value of template parameters.  This shorter term
   41692 will also be used in the rest of this section.
   41693 
   41694 
   41695 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
   41696 
   41697 11.8.3 Temporaries May Vanish Before You Expect
   41698 -----------------------------------------------
   41699 
   41700 It is dangerous to use pointers or references to _portions_ of a
   41701 temporary object.  The compiler may very well delete the object before
   41702 you expect it to, leaving a pointer to garbage.  The most common place
   41703 where this problem crops up is in classes like string classes,
   41704 especially ones that define a conversion function to type `char *' or
   41705 `const char *'--which is one reason why the standard `string' class
   41706 requires you to call the `c_str' member function.  However, any class
   41707 that returns a pointer to some internal structure is potentially
   41708 subject to this problem.
   41709 
   41710  For example, a program may use a function `strfunc' that returns
   41711 `string' objects, and another function `charfunc' that operates on
   41712 pointers to `char':
   41713 
   41714      string strfunc ();
   41715      void charfunc (const char *);
   41716 
   41717      void
   41718      f ()
   41719      {
   41720        const char *p = strfunc().c_str();
   41721        ...
   41722        charfunc (p);
   41723        ...
   41724        charfunc (p);
   41725      }
   41726 
   41727 In this situation, it may seem reasonable to save a pointer to the C
   41728 string returned by the `c_str' member function and use that rather than
   41729 call `c_str' repeatedly.  However, the temporary string created by the
   41730 call to `strfunc' is destroyed after `p' is initialized, at which point
   41731 `p' is left pointing to freed memory.
   41732 
   41733  Code like this may run successfully under some other compilers,
   41734 particularly obsolete cfront-based compilers that delete temporaries
   41735 along with normal local variables.  However, the GNU C++ behavior is
   41736 standard-conforming, so if your program depends on late destruction of
   41737 temporaries it is not portable.
   41738 
   41739  The safe way to write such code is to give the temporary a name, which
   41740 forces it to remain until the end of the scope of the name.  For
   41741 example:
   41742 
   41743      const string& tmp = strfunc ();
   41744      charfunc (tmp.c_str ());
   41745 
   41746 
   41747 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
   41748 
   41749 11.8.4 Implicit Copy-Assignment for Virtual Bases
   41750 -------------------------------------------------
   41751 
   41752 When a base class is virtual, only one subobject of the base class
   41753 belongs to each full object.  Also, the constructors and destructors are
   41754 invoked only once, and called from the most-derived class.  However,
   41755 such objects behave unspecified when being assigned.  For example:
   41756 
   41757      struct Base{
   41758        char *name;
   41759        Base(char *n) : name(strdup(n)){}
   41760        Base& operator= (const Base& other){
   41761         free (name);
   41762         name = strdup (other.name);
   41763        }
   41764      };
   41765 
   41766      struct A:virtual Base{
   41767        int val;
   41768        A():Base("A"){}
   41769      };
   41770 
   41771      struct B:virtual Base{
   41772        int bval;
   41773        B():Base("B"){}
   41774      };
   41775 
   41776      struct Derived:public A, public B{
   41777        Derived():Base("Derived"){}
   41778      };
   41779 
   41780      void func(Derived &d1, Derived &d2)
   41781      {
   41782        d1 = d2;
   41783      }
   41784 
   41785  The C++ standard specifies that `Base::Base' is only called once when
   41786 constructing or copy-constructing a Derived object.  It is unspecified
   41787 whether `Base::operator=' is called more than once when the implicit
   41788 copy-assignment for Derived objects is invoked (as it is inside `func'
   41789 in the example).
   41790 
   41791  G++ implements the "intuitive" algorithm for copy-assignment: assign
   41792 all direct bases, then assign all members.  In that algorithm, the
   41793 virtual base subobject can be encountered more than once.  In the
   41794 example, copying proceeds in the following order: `val', `name' (via
   41795 `strdup'), `bval', and `name' again.
   41796 
   41797  If application code relies on copy-assignment, a user-defined
   41798 copy-assignment operator removes any uncertainties.  With such an
   41799 operator, the application can define whether and how the virtual base
   41800 subobject is assigned.
   41801 
   41802 
   41803 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
   41804 
   41805 11.9 Certain Changes We Don't Want to Make
   41806 ==========================================
   41807 
   41808 This section lists changes that people frequently request, but which we
   41809 do not make because we think GCC is better without them.
   41810 
   41811    * Checking the number and type of arguments to a function which has
   41812      an old-fashioned definition and no prototype.
   41813 
   41814      Such a feature would work only occasionally--only for calls that
   41815      appear in the same file as the called function, following the
   41816      definition.  The only way to check all calls reliably is to add a
   41817      prototype for the function.  But adding a prototype eliminates the
   41818      motivation for this feature.  So the feature is not worthwhile.
   41819 
   41820    * Warning about using an expression whose type is signed as a shift
   41821      count.
   41822 
   41823      Shift count operands are probably signed more often than unsigned.
   41824      Warning about this would cause far more annoyance than good.
   41825 
   41826    * Warning about assigning a signed value to an unsigned variable.
   41827 
   41828      Such assignments must be very common; warning about them would
   41829      cause more annoyance than good.
   41830 
   41831    * Warning when a non-void function value is ignored.
   41832 
   41833      C contains many standard functions that return a value that most
   41834      programs choose to ignore.  One obvious example is `printf'.
   41835      Warning about this practice only leads the defensive programmer to
   41836      clutter programs with dozens of casts to `void'.  Such casts are
   41837      required so frequently that they become visual noise.  Writing
   41838      those casts becomes so automatic that they no longer convey useful
   41839      information about the intentions of the programmer.  For functions
   41840      where the return value should never be ignored, use the
   41841      `warn_unused_result' function attribute (*note Function
   41842      Attributes::).
   41843 
   41844    * Making `-fshort-enums' the default.
   41845 
   41846      This would cause storage layout to be incompatible with most other
   41847      C compilers.  And it doesn't seem very important, given that you
   41848      can get the same result in other ways.  The case where it matters
   41849      most is when the enumeration-valued object is inside a structure,
   41850      and in that case you can specify a field width explicitly.
   41851 
   41852    * Making bit-fields unsigned by default on particular machines where
   41853      "the ABI standard" says to do so.
   41854 
   41855      The ISO C standard leaves it up to the implementation whether a
   41856      bit-field declared plain `int' is signed or not.  This in effect
   41857      creates two alternative dialects of C.
   41858 
   41859      The GNU C compiler supports both dialects; you can specify the
   41860      signed dialect with `-fsigned-bitfields' and the unsigned dialect
   41861      with `-funsigned-bitfields'.  However, this leaves open the
   41862      question of which dialect to use by default.
   41863 
   41864      Currently, the preferred dialect makes plain bit-fields signed,
   41865      because this is simplest.  Since `int' is the same as `signed int'
   41866      in every other context, it is cleanest for them to be the same in
   41867      bit-fields as well.
   41868 
   41869      Some computer manufacturers have published Application Binary
   41870      Interface standards which specify that plain bit-fields should be
   41871      unsigned.  It is a mistake, however, to say anything about this
   41872      issue in an ABI.  This is because the handling of plain bit-fields
   41873      distinguishes two dialects of C.  Both dialects are meaningful on
   41874      every type of machine.  Whether a particular object file was
   41875      compiled using signed bit-fields or unsigned is of no concern to
   41876      other object files, even if they access the same bit-fields in the
   41877      same data structures.
   41878 
   41879      A given program is written in one or the other of these two
   41880      dialects.  The program stands a chance to work on most any machine
   41881      if it is compiled with the proper dialect.  It is unlikely to work
   41882      at all if compiled with the wrong dialect.
   41883 
   41884      Many users appreciate the GNU C compiler because it provides an
   41885      environment that is uniform across machines.  These users would be
   41886      inconvenienced if the compiler treated plain bit-fields
   41887      differently on certain machines.
   41888 
   41889      Occasionally users write programs intended only for a particular
   41890      machine type.  On these occasions, the users would benefit if the
   41891      GNU C compiler were to support by default the same dialect as the
   41892      other compilers on that machine.  But such applications are rare.
   41893      And users writing a program to run on more than one type of
   41894      machine cannot possibly benefit from this kind of compatibility.
   41895 
   41896      This is why GCC does and will treat plain bit-fields in the same
   41897      fashion on all types of machines (by default).
   41898 
   41899      There are some arguments for making bit-fields unsigned by default
   41900      on all machines.  If, for example, this becomes a universal de
   41901      facto standard, it would make sense for GCC to go along with it.
   41902      This is something to be considered in the future.
   41903 
   41904      (Of course, users strongly concerned about portability should
   41905      indicate explicitly in each bit-field whether it is signed or not.
   41906      In this way, they write programs which have the same meaning in
   41907      both C dialects.)
   41908 
   41909    * Undefining `__STDC__' when `-ansi' is not used.
   41910 
   41911      Currently, GCC defines `__STDC__' unconditionally.  This provides
   41912      good results in practice.
   41913 
   41914      Programmers normally use conditionals on `__STDC__' to ask whether
   41915      it is safe to use certain features of ISO C, such as function
   41916      prototypes or ISO token concatenation.  Since plain `gcc' supports
   41917      all the features of ISO C, the correct answer to these questions is
   41918      "yes".
   41919 
   41920      Some users try to use `__STDC__' to check for the availability of
   41921      certain library facilities.  This is actually incorrect usage in
   41922      an ISO C program, because the ISO C standard says that a conforming
   41923      freestanding implementation should define `__STDC__' even though it
   41924      does not have the library facilities.  `gcc -ansi -pedantic' is a
   41925      conforming freestanding implementation, and it is therefore
   41926      required to define `__STDC__', even though it does not come with
   41927      an ISO C library.
   41928 
   41929      Sometimes people say that defining `__STDC__' in a compiler that
   41930      does not completely conform to the ISO C standard somehow violates
   41931      the standard.  This is illogical.  The standard is a standard for
   41932      compilers that claim to support ISO C, such as `gcc -ansi'--not
   41933      for other compilers such as plain `gcc'.  Whatever the ISO C
   41934      standard says is relevant to the design of plain `gcc' without
   41935      `-ansi' only for pragmatic reasons, not as a requirement.
   41936 
   41937      GCC normally defines `__STDC__' to be 1, and in addition defines
   41938      `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
   41939      option for strict conformance to some version of ISO C.  On some
   41940      hosts, system include files use a different convention, where
   41941      `__STDC__' is normally 0, but is 1 if the user specifies strict
   41942      conformance to the C Standard.  GCC follows the host convention
   41943      when processing system include files, but when processing user
   41944      files it follows the usual GNU C convention.
   41945 
   41946    * Undefining `__STDC__' in C++.
   41947 
   41948      Programs written to compile with C++-to-C translators get the
   41949      value of `__STDC__' that goes with the C compiler that is
   41950      subsequently used.  These programs must test `__STDC__' to
   41951      determine what kind of C preprocessor that compiler uses: whether
   41952      they should concatenate tokens in the ISO C fashion or in the
   41953      traditional fashion.
   41954 
   41955      These programs work properly with GNU C++ if `__STDC__' is defined.
   41956      They would not work otherwise.
   41957 
   41958      In addition, many header files are written to provide prototypes
   41959      in ISO C but not in traditional C.  Many of these header files can
   41960      work without change in C++ provided `__STDC__' is defined.  If
   41961      `__STDC__' is not defined, they will all fail, and will all need
   41962      to be changed to test explicitly for C++ as well.
   41963 
   41964    * Deleting "empty" loops.
   41965 
   41966      Historically, GCC has not deleted "empty" loops under the
   41967      assumption that the most likely reason you would put one in a
   41968      program is to have a delay, so deleting them will not make real
   41969      programs run any faster.
   41970 
   41971      However, the rationale here is that optimization of a nonempty loop
   41972      cannot produce an empty one. This held for carefully written C
   41973      compiled with less powerful optimizers but is not always the case
   41974      for carefully written C++ or with more powerful optimizers.  Thus
   41975      GCC will remove operations from loops whenever it can determine
   41976      those operations are not externally visible (apart from the time
   41977      taken to execute them, of course).  In case the loop can be proved
   41978      to be finite, GCC will also remove the loop itself.
   41979 
   41980      Be aware of this when performing timing tests, for instance the
   41981      following loop can be completely removed, provided
   41982      `some_expression' can provably not change any global state.
   41983 
   41984           {
   41985              int sum = 0;
   41986              int ix;
   41987 
   41988              for (ix = 0; ix != 10000; ix++)
   41989                 sum += some_expression;
   41990           }
   41991 
   41992      Even though `sum' is accumulated in the loop, no use is made of
   41993      that summation, so the accumulation can be removed.
   41994 
   41995    * Making side effects happen in the same order as in some other
   41996      compiler.
   41997 
   41998      It is never safe to depend on the order of evaluation of side
   41999      effects.  For example, a function call like this may very well
   42000      behave differently from one compiler to another:
   42001 
   42002           void func (int, int);
   42003 
   42004           int i = 2;
   42005           func (i++, i++);
   42006 
   42007      There is no guarantee (in either the C or the C++ standard language
   42008      definitions) that the increments will be evaluated in any
   42009      particular order.  Either increment might happen first.  `func'
   42010      might get the arguments `2, 3', or it might get `3, 2', or even
   42011      `2, 2'.
   42012 
   42013    * Making certain warnings into errors by default.
   42014 
   42015      Some ISO C testsuites report failure when the compiler does not
   42016      produce an error message for a certain program.
   42017 
   42018      ISO C requires a "diagnostic" message for certain kinds of invalid
   42019      programs, but a warning is defined by GCC to count as a
   42020      diagnostic.  If GCC produces a warning but not an error, that is
   42021      correct ISO C support.  If testsuites call this "failure", they
   42022      should be run with the GCC option `-pedantic-errors', which will
   42023      turn these warnings into errors.
   42024 
   42025 
   42026 
   42027 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
   42028 
   42029 11.10 Warning Messages and Error Messages
   42030 =========================================
   42031 
   42032 The GNU compiler can produce two kinds of diagnostics: errors and
   42033 warnings.  Each kind has a different purpose:
   42034 
   42035      "Errors" report problems that make it impossible to compile your
   42036      program.  GCC reports errors with the source file name and line
   42037      number where the problem is apparent.
   42038 
   42039      "Warnings" report other unusual conditions in your code that _may_
   42040      indicate a problem, although compilation can (and does) proceed.
   42041      Warning messages also report the source file name and line number,
   42042      but include the text `warning:' to distinguish them from error
   42043      messages.
   42044 
   42045  Warnings may indicate danger points where you should check to make sure
   42046 that your program really does what you intend; or the use of obsolete
   42047 features; or the use of nonstandard features of GNU C or C++.  Many
   42048 warnings are issued only if you ask for them, with one of the `-W'
   42049 options (for instance, `-Wall' requests a variety of useful warnings).
   42050 
   42051  GCC always tries to compile your program if possible; it never
   42052 gratuitously rejects a program whose meaning is clear merely because
   42053 (for instance) it fails to conform to a standard.  In some cases,
   42054 however, the C and C++ standards specify that certain extensions are
   42055 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
   42056 The `-pedantic' option tells GCC to issue warnings in such cases;
   42057 `-pedantic-errors' says to make them errors instead.  This does not
   42058 mean that _all_ non-ISO constructs get warnings or errors.
   42059 
   42060  *Note Options to Request or Suppress Warnings: Warning Options, for
   42061 more detail on these and related command-line options.
   42062 
   42063 
   42064 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
   42065 
   42066 12 Reporting Bugs
   42067 *****************
   42068 
   42069 Your bug reports play an essential role in making GCC reliable.
   42070 
   42071  When you encounter a problem, the first thing to do is to see if it is
   42072 already known.  *Note Trouble::.  If it isn't known, then you should
   42073 report the problem.
   42074 
   42075 * Menu:
   42076 
   42077 * Criteria:  Bug Criteria.   Have you really found a bug?
   42078 * Reporting: Bug Reporting.  How to report a bug effectively.
   42079 * Known: Trouble.            Known problems.
   42080 * Help: Service.             Where to ask for help.
   42081 
   42082 
   42083 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
   42084 
   42085 12.1 Have You Found a Bug?
   42086 ==========================
   42087 
   42088 If you are not sure whether you have found a bug, here are some
   42089 guidelines:
   42090 
   42091    * If the compiler gets a fatal signal, for any input whatever, that
   42092      is a compiler bug.  Reliable compilers never crash.
   42093 
   42094    * If the compiler produces invalid assembly code, for any input
   42095      whatever (except an `asm' statement), that is a compiler bug,
   42096      unless the compiler reports errors (not just warnings) which would
   42097      ordinarily prevent the assembler from being run.
   42098 
   42099    * If the compiler produces valid assembly code that does not
   42100      correctly execute the input source code, that is a compiler bug.
   42101 
   42102      However, you must double-check to make sure, because you may have a
   42103      program whose behavior is undefined, which happened by chance to
   42104      give the desired results with another C or C++ compiler.
   42105 
   42106      For example, in many nonoptimizing compilers, you can write `x;'
   42107      at the end of a function instead of `return x;', with the same
   42108      results.  But the value of the function is undefined if `return'
   42109      is omitted; it is not a bug when GCC produces different results.
   42110 
   42111      Problems often result from expressions with two increment
   42112      operators, as in `f (*p++, *p++)'.  Your previous compiler might
   42113      have interpreted that expression the way you intended; GCC might
   42114      interpret it another way.  Neither compiler is wrong.  The bug is
   42115      in your code.
   42116 
   42117      After you have localized the error to a single source line, it
   42118      should be easy to check for these things.  If your program is
   42119      correct and well defined, you have found a compiler bug.
   42120 
   42121    * If the compiler produces an error message for valid input, that is
   42122      a compiler bug.
   42123 
   42124    * If the compiler does not produce an error message for invalid
   42125      input, that is a compiler bug.  However, you should note that your
   42126      idea of "invalid input" might be someone else's idea of "an
   42127      extension" or "support for traditional practice".
   42128 
   42129    * If you are an experienced user of one of the languages GCC
   42130      supports, your suggestions for improvement of GCC are welcome in
   42131      any case.
   42132 
   42133 
   42134 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
   42135 
   42136 12.2 How and where to Report Bugs
   42137 =================================
   42138 
   42139 Bugs should be reported to the bug database at
   42140 `http://gcc.gnu.org/bugs.html'.
   42141 
   42142 
   42143 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
   42144 
   42145 13 How To Get Help with GCC
   42146 ***************************
   42147 
   42148 If you need help installing, using or changing GCC, there are two ways
   42149 to find it:
   42150 
   42151    * Send a message to a suitable network mailing list.  First try
   42152      <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if
   42153      that brings no response, try <gcc (a] gcc.gnu.org>.  For help changing
   42154      GCC, ask <gcc (a] gcc.gnu.org>.  If you think you have found a bug in
   42155      GCC, please report it following the instructions at *note Bug
   42156      Reporting::.
   42157 
   42158    * Look in the service directory for someone who might help you for a
   42159      fee.  The service directory is found at
   42160      `http://www.fsf.org/resources/service'.
   42161 
   42162  For further information, see `http://gcc.gnu.org/faq.html#support'.
   42163 
   42164 
   42165 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
   42166 
   42167 14 Contributing to GCC Development
   42168 **********************************
   42169 
   42170 If you would like to help pretest GCC releases to assure they work well,
   42171 current development sources are available by SVN (see
   42172 `http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
   42173 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
   42174 
   42175  If you would like to work on improvements to GCC, please read the
   42176 advice at these URLs:
   42177 
   42178      `http://gcc.gnu.org/contribute.html'
   42179      `http://gcc.gnu.org/contributewhy.html'
   42180 
   42181 for information on how to make useful contributions and avoid
   42182 duplication of effort.  Suggested projects are listed at
   42183 `http://gcc.gnu.org/projects/'.
   42184 
   42185 
   42186 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
   42187 
   42188 Funding Free Software
   42189 *********************
   42190 
   42191 If you want to have more free software a few years from now, it makes
   42192 sense for you to help encourage people to contribute funds for its
   42193 development.  The most effective approach known is to encourage
   42194 commercial redistributors to donate.
   42195 
   42196  Users of free software systems can boost the pace of development by
   42197 encouraging for-a-fee distributors to donate part of their selling price
   42198 to free software developers--the Free Software Foundation, and others.
   42199 
   42200  The way to convince distributors to do this is to demand it and expect
   42201 it from them.  So when you compare distributors, judge them partly by
   42202 how much they give to free software development.  Show distributors
   42203 they must compete to be the one who gives the most.
   42204 
   42205  To make this approach work, you must insist on numbers that you can
   42206 compare, such as, "We will donate ten dollars to the Frobnitz project
   42207 for each disk sold."  Don't be satisfied with a vague promise, such as
   42208 "A portion of the profits are donated," since it doesn't give a basis
   42209 for comparison.
   42210 
   42211  Even a precise fraction "of the profits from this disk" is not very
   42212 meaningful, since creative accounting and unrelated business decisions
   42213 can greatly alter what fraction of the sales price counts as profit.
   42214 If the price you pay is $50, ten percent of the profit is probably less
   42215 than a dollar; it might be a few cents, or nothing at all.
   42216 
   42217  Some redistributors do development work themselves.  This is useful
   42218 too; but to keep everyone honest, you need to inquire how much they do,
   42219 and what kind.  Some kinds of development make much more long-term
   42220 difference than others.  For example, maintaining a separate version of
   42221 a program contributes very little; maintaining the standard version of a
   42222 program for the whole community contributes much.  Easy new ports
   42223 contribute little, since someone else would surely do them; difficult
   42224 ports such as adding a new CPU to the GNU Compiler Collection
   42225 contribute more; major new features or packages contribute the most.
   42226 
   42227  By establishing the idea that supporting further development is "the
   42228 proper thing to do" when distributing free software for a fee, we can
   42229 assure a steady flow of resources into making more free software.
   42230 
   42231      Copyright (C) 1994 Free Software Foundation, Inc.
   42232      Verbatim copying and redistribution of this section is permitted
   42233      without royalty; alteration is not permitted.
   42234 
   42235 
   42236 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
   42237 
   42238 The GNU Project and GNU/Linux
   42239 *****************************
   42240 
   42241 The GNU Project was launched in 1984 to develop a complete Unix-like
   42242 operating system which is free software: the GNU system.  (GNU is a
   42243 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
   42244 Variants of the GNU operating system, which use the kernel Linux, are
   42245 now widely used; though these systems are often referred to as "Linux",
   42246 they are more accurately called GNU/Linux systems.
   42247 
   42248  For more information, see:
   42249      `http://www.gnu.org/'
   42250      `http://www.gnu.org/gnu/linux-and-gnu.html'
   42251 
   42252 
   42253 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
   42254 
   42255 GNU General Public License
   42256 **************************
   42257 
   42258                         Version 3, 29 June 2007
   42259 
   42260      Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
   42261 
   42262      Everyone is permitted to copy and distribute verbatim copies of this
   42263      license document, but changing it is not allowed.
   42264 
   42265 Preamble
   42266 ========
   42267 
   42268 The GNU General Public License is a free, copyleft license for software
   42269 and other kinds of works.
   42270 
   42271  The licenses for most software and other practical works are designed
   42272 to take away your freedom to share and change the works.  By contrast,
   42273 the GNU General Public License is intended to guarantee your freedom to
   42274 share and change all versions of a program-to make sure it remains free
   42275 software for all its users.  We, the Free Software Foundation, use the
   42276 GNU General Public License for most of our software; it applies also to
   42277 any other work released this way by its authors.  You can apply it to
   42278 your programs, too.
   42279 
   42280  When we speak of free software, we are referring to freedom, not
   42281 price.  Our General Public Licenses are designed to make sure that you
   42282 have the freedom to distribute copies of free software (and charge for
   42283 them if you wish), that you receive source code or can get it if you
   42284 want it, that you can change the software or use pieces of it in new
   42285 free programs, and that you know you can do these things.
   42286 
   42287  To protect your rights, we need to prevent others from denying you
   42288 these rights or asking you to surrender the rights.  Therefore, you
   42289 have certain responsibilities if you distribute copies of the software,
   42290 or if you modify it: responsibilities to respect the freedom of others.
   42291 
   42292  For example, if you distribute copies of such a program, whether
   42293 gratis or for a fee, you must pass on to the recipients the same
   42294 freedoms that you received.  You must make sure that they, too, receive
   42295 or can get the source code.  And you must show them these terms so they
   42296 know their rights.
   42297 
   42298  Developers that use the GNU GPL protect your rights with two steps:
   42299 (1) assert copyright on the software, and (2) offer you this License
   42300 giving you legal permission to copy, distribute and/or modify it.
   42301 
   42302  For the developers' and authors' protection, the GPL clearly explains
   42303 that there is no warranty for this free software.  For both users' and
   42304 authors' sake, the GPL requires that modified versions be marked as
   42305 changed, so that their problems will not be attributed erroneously to
   42306 authors of previous versions.
   42307 
   42308  Some devices are designed to deny users access to install or run
   42309 modified versions of the software inside them, although the
   42310 manufacturer can do so.  This is fundamentally incompatible with the
   42311 aim of protecting users' freedom to change the software.  The
   42312 systematic pattern of such abuse occurs in the area of products for
   42313 individuals to use, which is precisely where it is most unacceptable.
   42314 Therefore, we have designed this version of the GPL to prohibit the
   42315 practice for those products.  If such problems arise substantially in
   42316 other domains, we stand ready to extend this provision to those domains
   42317 in future versions of the GPL, as needed to protect the freedom of
   42318 users.
   42319 
   42320  Finally, every program is threatened constantly by software patents.
   42321 States should not allow patents to restrict development and use of
   42322 software on general-purpose computers, but in those that do, we wish to
   42323 avoid the special danger that patents applied to a free program could
   42324 make it effectively proprietary.  To prevent this, the GPL assures that
   42325 patents cannot be used to render the program non-free.
   42326 
   42327  The precise terms and conditions for copying, distribution and
   42328 modification follow.
   42329 
   42330 TERMS AND CONDITIONS
   42331 ====================
   42332 
   42333   0. Definitions.
   42334 
   42335      "This License" refers to version 3 of the GNU General Public
   42336      License.
   42337 
   42338      "Copyright" also means copyright-like laws that apply to other
   42339      kinds of works, such as semiconductor masks.
   42340 
   42341      "The Program" refers to any copyrightable work licensed under this
   42342      License.  Each licensee is addressed as "you".  "Licensees" and
   42343      "recipients" may be individuals or organizations.
   42344 
   42345      To "modify" a work means to copy from or adapt all or part of the
   42346      work in a fashion requiring copyright permission, other than the
   42347      making of an exact copy.  The resulting work is called a "modified
   42348      version" of the earlier work or a work "based on" the earlier work.
   42349 
   42350      A "covered work" means either the unmodified Program or a work
   42351      based on the Program.
   42352 
   42353      To "propagate" a work means to do anything with it that, without
   42354      permission, would make you directly or secondarily liable for
   42355      infringement under applicable copyright law, except executing it
   42356      on a computer or modifying a private copy.  Propagation includes
   42357      copying, distribution (with or without modification), making
   42358      available to the public, and in some countries other activities as
   42359      well.
   42360 
   42361      To "convey" a work means any kind of propagation that enables other
   42362      parties to make or receive copies.  Mere interaction with a user
   42363      through a computer network, with no transfer of a copy, is not
   42364      conveying.
   42365 
   42366      An interactive user interface displays "Appropriate Legal Notices"
   42367      to the extent that it includes a convenient and prominently visible
   42368      feature that (1) displays an appropriate copyright notice, and (2)
   42369      tells the user that there is no warranty for the work (except to
   42370      the extent that warranties are provided), that licensees may
   42371      convey the work under this License, and how to view a copy of this
   42372      License.  If the interface presents a list of user commands or
   42373      options, such as a menu, a prominent item in the list meets this
   42374      criterion.
   42375 
   42376   1. Source Code.
   42377 
   42378      The "source code" for a work means the preferred form of the work
   42379      for making modifications to it.  "Object code" means any
   42380      non-source form of a work.
   42381 
   42382      A "Standard Interface" means an interface that either is an
   42383      official standard defined by a recognized standards body, or, in
   42384      the case of interfaces specified for a particular programming
   42385      language, one that is widely used among developers working in that
   42386      language.
   42387 
   42388      The "System Libraries" of an executable work include anything,
   42389      other than the work as a whole, that (a) is included in the normal
   42390      form of packaging a Major Component, but which is not part of that
   42391      Major Component, and (b) serves only to enable use of the work
   42392      with that Major Component, or to implement a Standard Interface
   42393      for which an implementation is available to the public in source
   42394      code form.  A "Major Component", in this context, means a major
   42395      essential component (kernel, window system, and so on) of the
   42396      specific operating system (if any) on which the executable work
   42397      runs, or a compiler used to produce the work, or an object code
   42398      interpreter used to run it.
   42399 
   42400      The "Corresponding Source" for a work in object code form means all
   42401      the source code needed to generate, install, and (for an executable
   42402      work) run the object code and to modify the work, including
   42403      scripts to control those activities.  However, it does not include
   42404      the work's System Libraries, or general-purpose tools or generally
   42405      available free programs which are used unmodified in performing
   42406      those activities but which are not part of the work.  For example,
   42407      Corresponding Source includes interface definition files
   42408      associated with source files for the work, and the source code for
   42409      shared libraries and dynamically linked subprograms that the work
   42410      is specifically designed to require, such as by intimate data
   42411      communication or control flow between those subprograms and other
   42412      parts of the work.
   42413 
   42414      The Corresponding Source need not include anything that users can
   42415      regenerate automatically from other parts of the Corresponding
   42416      Source.
   42417 
   42418      The Corresponding Source for a work in source code form is that
   42419      same work.
   42420 
   42421   2. Basic Permissions.
   42422 
   42423      All rights granted under this License are granted for the term of
   42424      copyright on the Program, and are irrevocable provided the stated
   42425      conditions are met.  This License explicitly affirms your unlimited
   42426      permission to run the unmodified Program.  The output from running
   42427      a covered work is covered by this License only if the output,
   42428      given its content, constitutes a covered work.  This License
   42429      acknowledges your rights of fair use or other equivalent, as
   42430      provided by copyright law.
   42431 
   42432      You may make, run and propagate covered works that you do not
   42433      convey, without conditions so long as your license otherwise
   42434      remains in force.  You may convey covered works to others for the
   42435      sole purpose of having them make modifications exclusively for
   42436      you, or provide you with facilities for running those works,
   42437      provided that you comply with the terms of this License in
   42438      conveying all material for which you do not control copyright.
   42439      Those thus making or running the covered works for you must do so
   42440      exclusively on your behalf, under your direction and control, on
   42441      terms that prohibit them from making any copies of your
   42442      copyrighted material outside their relationship with you.
   42443 
   42444      Conveying under any other circumstances is permitted solely under
   42445      the conditions stated below.  Sublicensing is not allowed; section
   42446      10 makes it unnecessary.
   42447 
   42448   3. Protecting Users' Legal Rights From Anti-Circumvention Law.
   42449 
   42450      No covered work shall be deemed part of an effective technological
   42451      measure under any applicable law fulfilling obligations under
   42452      article 11 of the WIPO copyright treaty adopted on 20 December
   42453      1996, or similar laws prohibiting or restricting circumvention of
   42454      such measures.
   42455 
   42456      When you convey a covered work, you waive any legal power to forbid
   42457      circumvention of technological measures to the extent such
   42458      circumvention is effected by exercising rights under this License
   42459      with respect to the covered work, and you disclaim any intention
   42460      to limit operation or modification of the work as a means of
   42461      enforcing, against the work's users, your or third parties' legal
   42462      rights to forbid circumvention of technological measures.
   42463 
   42464   4. Conveying Verbatim Copies.
   42465 
   42466      You may convey verbatim copies of the Program's source code as you
   42467      receive it, in any medium, provided that you conspicuously and
   42468      appropriately publish on each copy an appropriate copyright notice;
   42469      keep intact all notices stating that this License and any
   42470      non-permissive terms added in accord with section 7 apply to the
   42471      code; keep intact all notices of the absence of any warranty; and
   42472      give all recipients a copy of this License along with the Program.
   42473 
   42474      You may charge any price or no price for each copy that you convey,
   42475      and you may offer support or warranty protection for a fee.
   42476 
   42477   5. Conveying Modified Source Versions.
   42478 
   42479      You may convey a work based on the Program, or the modifications to
   42480      produce it from the Program, in the form of source code under the
   42481      terms of section 4, provided that you also meet all of these
   42482      conditions:
   42483 
   42484        a. The work must carry prominent notices stating that you
   42485           modified it, and giving a relevant date.
   42486 
   42487        b. The work must carry prominent notices stating that it is
   42488           released under this License and any conditions added under
   42489           section 7.  This requirement modifies the requirement in
   42490           section 4 to "keep intact all notices".
   42491 
   42492        c. You must license the entire work, as a whole, under this
   42493           License to anyone who comes into possession of a copy.  This
   42494           License will therefore apply, along with any applicable
   42495           section 7 additional terms, to the whole of the work, and all
   42496           its parts, regardless of how they are packaged.  This License
   42497           gives no permission to license the work in any other way, but
   42498           it does not invalidate such permission if you have separately
   42499           received it.
   42500 
   42501        d. If the work has interactive user interfaces, each must display
   42502           Appropriate Legal Notices; however, if the Program has
   42503           interactive interfaces that do not display Appropriate Legal
   42504           Notices, your work need not make them do so.
   42505 
   42506      A compilation of a covered work with other separate and independent
   42507      works, which are not by their nature extensions of the covered
   42508      work, and which are not combined with it such as to form a larger
   42509      program, in or on a volume of a storage or distribution medium, is
   42510      called an "aggregate" if the compilation and its resulting
   42511      copyright are not used to limit the access or legal rights of the
   42512      compilation's users beyond what the individual works permit.
   42513      Inclusion of a covered work in an aggregate does not cause this
   42514      License to apply to the other parts of the aggregate.
   42515 
   42516   6. Conveying Non-Source Forms.
   42517 
   42518      You may convey a covered work in object code form under the terms
   42519      of sections 4 and 5, provided that you also convey the
   42520      machine-readable Corresponding Source under the terms of this
   42521      License, in one of these ways:
   42522 
   42523        a. Convey the object code in, or embodied in, a physical product
   42524           (including a physical distribution medium), accompanied by the
   42525           Corresponding Source fixed on a durable physical medium
   42526           customarily used for software interchange.
   42527 
   42528        b. Convey the object code in, or embodied in, a physical product
   42529           (including a physical distribution medium), accompanied by a
   42530           written offer, valid for at least three years and valid for
   42531           as long as you offer spare parts or customer support for that
   42532           product model, to give anyone who possesses the object code
   42533           either (1) a copy of the Corresponding Source for all the
   42534           software in the product that is covered by this License, on a
   42535           durable physical medium customarily used for software
   42536           interchange, for a price no more than your reasonable cost of
   42537           physically performing this conveying of source, or (2) access
   42538           to copy the Corresponding Source from a network server at no
   42539           charge.
   42540 
   42541        c. Convey individual copies of the object code with a copy of
   42542           the written offer to provide the Corresponding Source.  This
   42543           alternative is allowed only occasionally and noncommercially,
   42544           and only if you received the object code with such an offer,
   42545           in accord with subsection 6b.
   42546 
   42547        d. Convey the object code by offering access from a designated
   42548           place (gratis or for a charge), and offer equivalent access
   42549           to the Corresponding Source in the same way through the same
   42550           place at no further charge.  You need not require recipients
   42551           to copy the Corresponding Source along with the object code.
   42552           If the place to copy the object code is a network server, the
   42553           Corresponding Source may be on a different server (operated
   42554           by you or a third party) that supports equivalent copying
   42555           facilities, provided you maintain clear directions next to
   42556           the object code saying where to find the Corresponding Source.
   42557           Regardless of what server hosts the Corresponding Source, you
   42558           remain obligated to ensure that it is available for as long
   42559           as needed to satisfy these requirements.
   42560 
   42561        e. Convey the object code using peer-to-peer transmission,
   42562           provided you inform other peers where the object code and
   42563           Corresponding Source of the work are being offered to the
   42564           general public at no charge under subsection 6d.
   42565 
   42566 
   42567      A separable portion of the object code, whose source code is
   42568      excluded from the Corresponding Source as a System Library, need
   42569      not be included in conveying the object code work.
   42570 
   42571      A "User Product" is either (1) a "consumer product", which means
   42572      any tangible personal property which is normally used for personal,
   42573      family, or household purposes, or (2) anything designed or sold for
   42574      incorporation into a dwelling.  In determining whether a product
   42575      is a consumer product, doubtful cases shall be resolved in favor of
   42576      coverage.  For a particular product received by a particular user,
   42577      "normally used" refers to a typical or common use of that class of
   42578      product, regardless of the status of the particular user or of the
   42579      way in which the particular user actually uses, or expects or is
   42580      expected to use, the product.  A product is a consumer product
   42581      regardless of whether the product has substantial commercial,
   42582      industrial or non-consumer uses, unless such uses represent the
   42583      only significant mode of use of the product.
   42584 
   42585      "Installation Information" for a User Product means any methods,
   42586      procedures, authorization keys, or other information required to
   42587      install and execute modified versions of a covered work in that
   42588      User Product from a modified version of its Corresponding Source.
   42589      The information must suffice to ensure that the continued
   42590      functioning of the modified object code is in no case prevented or
   42591      interfered with solely because modification has been made.
   42592 
   42593      If you convey an object code work under this section in, or with,
   42594      or specifically for use in, a User Product, and the conveying
   42595      occurs as part of a transaction in which the right of possession
   42596      and use of the User Product is transferred to the recipient in
   42597      perpetuity or for a fixed term (regardless of how the transaction
   42598      is characterized), the Corresponding Source conveyed under this
   42599      section must be accompanied by the Installation Information.  But
   42600      this requirement does not apply if neither you nor any third party
   42601      retains the ability to install modified object code on the User
   42602      Product (for example, the work has been installed in ROM).
   42603 
   42604      The requirement to provide Installation Information does not
   42605      include a requirement to continue to provide support service,
   42606      warranty, or updates for a work that has been modified or
   42607      installed by the recipient, or for the User Product in which it
   42608      has been modified or installed.  Access to a network may be denied
   42609      when the modification itself materially and adversely affects the
   42610      operation of the network or violates the rules and protocols for
   42611      communication across the network.
   42612 
   42613      Corresponding Source conveyed, and Installation Information
   42614      provided, in accord with this section must be in a format that is
   42615      publicly documented (and with an implementation available to the
   42616      public in source code form), and must require no special password
   42617      or key for unpacking, reading or copying.
   42618 
   42619   7. Additional Terms.
   42620 
   42621      "Additional permissions" are terms that supplement the terms of
   42622      this License by making exceptions from one or more of its
   42623      conditions.  Additional permissions that are applicable to the
   42624      entire Program shall be treated as though they were included in
   42625      this License, to the extent that they are valid under applicable
   42626      law.  If additional permissions apply only to part of the Program,
   42627      that part may be used separately under those permissions, but the
   42628      entire Program remains governed by this License without regard to
   42629      the additional permissions.
   42630 
   42631      When you convey a copy of a covered work, you may at your option
   42632      remove any additional permissions from that copy, or from any part
   42633      of it.  (Additional permissions may be written to require their own
   42634      removal in certain cases when you modify the work.)  You may place
   42635      additional permissions on material, added by you to a covered work,
   42636      for which you have or can give appropriate copyright permission.
   42637 
   42638      Notwithstanding any other provision of this License, for material
   42639      you add to a covered work, you may (if authorized by the copyright
   42640      holders of that material) supplement the terms of this License
   42641      with terms:
   42642 
   42643        a. Disclaiming warranty or limiting liability differently from
   42644           the terms of sections 15 and 16 of this License; or
   42645 
   42646        b. Requiring preservation of specified reasonable legal notices
   42647           or author attributions in that material or in the Appropriate
   42648           Legal Notices displayed by works containing it; or
   42649 
   42650        c. Prohibiting misrepresentation of the origin of that material,
   42651           or requiring that modified versions of such material be
   42652           marked in reasonable ways as different from the original
   42653           version; or
   42654 
   42655        d. Limiting the use for publicity purposes of names of licensors
   42656           or authors of the material; or
   42657 
   42658        e. Declining to grant rights under trademark law for use of some
   42659           trade names, trademarks, or service marks; or
   42660 
   42661        f. Requiring indemnification of licensors and authors of that
   42662           material by anyone who conveys the material (or modified
   42663           versions of it) with contractual assumptions of liability to
   42664           the recipient, for any liability that these contractual
   42665           assumptions directly impose on those licensors and authors.
   42666 
   42667      All other non-permissive additional terms are considered "further
   42668      restrictions" within the meaning of section 10.  If the Program as
   42669      you received it, or any part of it, contains a notice stating that
   42670      it is governed by this License along with a term that is a further
   42671      restriction, you may remove that term.  If a license document
   42672      contains a further restriction but permits relicensing or
   42673      conveying under this License, you may add to a covered work
   42674      material governed by the terms of that license document, provided
   42675      that the further restriction does not survive such relicensing or
   42676      conveying.
   42677 
   42678      If you add terms to a covered work in accord with this section, you
   42679      must place, in the relevant source files, a statement of the
   42680      additional terms that apply to those files, or a notice indicating
   42681      where to find the applicable terms.
   42682 
   42683      Additional terms, permissive or non-permissive, may be stated in
   42684      the form of a separately written license, or stated as exceptions;
   42685      the above requirements apply either way.
   42686 
   42687   8. Termination.
   42688 
   42689      You may not propagate or modify a covered work except as expressly
   42690      provided under this License.  Any attempt otherwise to propagate or
   42691      modify it is void, and will automatically terminate your rights
   42692      under this License (including any patent licenses granted under
   42693      the third paragraph of section 11).
   42694 
   42695      However, if you cease all violation of this License, then your
   42696      license from a particular copyright holder is reinstated (a)
   42697      provisionally, unless and until the copyright holder explicitly
   42698      and finally terminates your license, and (b) permanently, if the
   42699      copyright holder fails to notify you of the violation by some
   42700      reasonable means prior to 60 days after the cessation.
   42701 
   42702      Moreover, your license from a particular copyright holder is
   42703      reinstated permanently if the copyright holder notifies you of the
   42704      violation by some reasonable means, this is the first time you have
   42705      received notice of violation of this License (for any work) from
   42706      that copyright holder, and you cure the violation prior to 30 days
   42707      after your receipt of the notice.
   42708 
   42709      Termination of your rights under this section does not terminate
   42710      the licenses of parties who have received copies or rights from
   42711      you under this License.  If your rights have been terminated and
   42712      not permanently reinstated, you do not qualify to receive new
   42713      licenses for the same material under section 10.
   42714 
   42715   9. Acceptance Not Required for Having Copies.
   42716 
   42717      You are not required to accept this License in order to receive or
   42718      run a copy of the Program.  Ancillary propagation of a covered work
   42719      occurring solely as a consequence of using peer-to-peer
   42720      transmission to receive a copy likewise does not require
   42721      acceptance.  However, nothing other than this License grants you
   42722      permission to propagate or modify any covered work.  These actions
   42723      infringe copyright if you do not accept this License.  Therefore,
   42724      by modifying or propagating a covered work, you indicate your
   42725      acceptance of this License to do so.
   42726 
   42727  10. Automatic Licensing of Downstream Recipients.
   42728 
   42729      Each time you convey a covered work, the recipient automatically
   42730      receives a license from the original licensors, to run, modify and
   42731      propagate that work, subject to this License.  You are not
   42732      responsible for enforcing compliance by third parties with this
   42733      License.
   42734 
   42735      An "entity transaction" is a transaction transferring control of an
   42736      organization, or substantially all assets of one, or subdividing an
   42737      organization, or merging organizations.  If propagation of a
   42738      covered work results from an entity transaction, each party to that
   42739      transaction who receives a copy of the work also receives whatever
   42740      licenses to the work the party's predecessor in interest had or
   42741      could give under the previous paragraph, plus a right to
   42742      possession of the Corresponding Source of the work from the
   42743      predecessor in interest, if the predecessor has it or can get it
   42744      with reasonable efforts.
   42745 
   42746      You may not impose any further restrictions on the exercise of the
   42747      rights granted or affirmed under this License.  For example, you
   42748      may not impose a license fee, royalty, or other charge for
   42749      exercise of rights granted under this License, and you may not
   42750      initiate litigation (including a cross-claim or counterclaim in a
   42751      lawsuit) alleging that any patent claim is infringed by making,
   42752      using, selling, offering for sale, or importing the Program or any
   42753      portion of it.
   42754 
   42755  11. Patents.
   42756 
   42757      A "contributor" is a copyright holder who authorizes use under this
   42758      License of the Program or a work on which the Program is based.
   42759      The work thus licensed is called the contributor's "contributor
   42760      version".
   42761 
   42762      A contributor's "essential patent claims" are all patent claims
   42763      owned or controlled by the contributor, whether already acquired or
   42764      hereafter acquired, that would be infringed by some manner,
   42765      permitted by this License, of making, using, or selling its
   42766      contributor version, but do not include claims that would be
   42767      infringed only as a consequence of further modification of the
   42768      contributor version.  For purposes of this definition, "control"
   42769      includes the right to grant patent sublicenses in a manner
   42770      consistent with the requirements of this License.
   42771 
   42772      Each contributor grants you a non-exclusive, worldwide,
   42773      royalty-free patent license under the contributor's essential
   42774      patent claims, to make, use, sell, offer for sale, import and
   42775      otherwise run, modify and propagate the contents of its
   42776      contributor version.
   42777 
   42778      In the following three paragraphs, a "patent license" is any
   42779      express agreement or commitment, however denominated, not to
   42780      enforce a patent (such as an express permission to practice a
   42781      patent or covenant not to sue for patent infringement).  To
   42782      "grant" such a patent license to a party means to make such an
   42783      agreement or commitment not to enforce a patent against the party.
   42784 
   42785      If you convey a covered work, knowingly relying on a patent
   42786      license, and the Corresponding Source of the work is not available
   42787      for anyone to copy, free of charge and under the terms of this
   42788      License, through a publicly available network server or other
   42789      readily accessible means, then you must either (1) cause the
   42790      Corresponding Source to be so available, or (2) arrange to deprive
   42791      yourself of the benefit of the patent license for this particular
   42792      work, or (3) arrange, in a manner consistent with the requirements
   42793      of this License, to extend the patent license to downstream
   42794      recipients.  "Knowingly relying" means you have actual knowledge
   42795      that, but for the patent license, your conveying the covered work
   42796      in a country, or your recipient's use of the covered work in a
   42797      country, would infringe one or more identifiable patents in that
   42798      country that you have reason to believe are valid.
   42799 
   42800      If, pursuant to or in connection with a single transaction or
   42801      arrangement, you convey, or propagate by procuring conveyance of, a
   42802      covered work, and grant a patent license to some of the parties
   42803      receiving the covered work authorizing them to use, propagate,
   42804      modify or convey a specific copy of the covered work, then the
   42805      patent license you grant is automatically extended to all
   42806      recipients of the covered work and works based on it.
   42807 
   42808      A patent license is "discriminatory" if it does not include within
   42809      the scope of its coverage, prohibits the exercise of, or is
   42810      conditioned on the non-exercise of one or more of the rights that
   42811      are specifically granted under this License.  You may not convey a
   42812      covered work if you are a party to an arrangement with a third
   42813      party that is in the business of distributing software, under
   42814      which you make payment to the third party based on the extent of
   42815      your activity of conveying the work, and under which the third
   42816      party grants, to any of the parties who would receive the covered
   42817      work from you, a discriminatory patent license (a) in connection
   42818      with copies of the covered work conveyed by you (or copies made
   42819      from those copies), or (b) primarily for and in connection with
   42820      specific products or compilations that contain the covered work,
   42821      unless you entered into that arrangement, or that patent license
   42822      was granted, prior to 28 March 2007.
   42823 
   42824      Nothing in this License shall be construed as excluding or limiting
   42825      any implied license or other defenses to infringement that may
   42826      otherwise be available to you under applicable patent law.
   42827 
   42828  12. No Surrender of Others' Freedom.
   42829 
   42830      If conditions are imposed on you (whether by court order,
   42831      agreement or otherwise) that contradict the conditions of this
   42832      License, they do not excuse you from the conditions of this
   42833      License.  If you cannot convey a covered work so as to satisfy
   42834      simultaneously your obligations under this License and any other
   42835      pertinent obligations, then as a consequence you may not convey it
   42836      at all.  For example, if you agree to terms that obligate you to
   42837      collect a royalty for further conveying from those to whom you
   42838      convey the Program, the only way you could satisfy both those
   42839      terms and this License would be to refrain entirely from conveying
   42840      the Program.
   42841 
   42842  13. Use with the GNU Affero General Public License.
   42843 
   42844      Notwithstanding any other provision of this License, you have
   42845      permission to link or combine any covered work with a work licensed
   42846      under version 3 of the GNU Affero General Public License into a
   42847      single combined work, and to convey the resulting work.  The terms
   42848      of this License will continue to apply to the part which is the
   42849      covered work, but the special requirements of the GNU Affero
   42850      General Public License, section 13, concerning interaction through
   42851      a network will apply to the combination as such.
   42852 
   42853  14. Revised Versions of this License.
   42854 
   42855      The Free Software Foundation may publish revised and/or new
   42856      versions of the GNU General Public License from time to time.
   42857      Such new versions will be similar in spirit to the present
   42858      version, but may differ in detail to address new problems or
   42859      concerns.
   42860 
   42861      Each version is given a distinguishing version number.  If the
   42862      Program specifies that a certain numbered version of the GNU
   42863      General Public License "or any later version" applies to it, you
   42864      have the option of following the terms and conditions either of
   42865      that numbered version or of any later version published by the
   42866      Free Software Foundation.  If the Program does not specify a
   42867      version number of the GNU General Public License, you may choose
   42868      any version ever published by the Free Software Foundation.
   42869 
   42870      If the Program specifies that a proxy can decide which future
   42871      versions of the GNU General Public License can be used, that
   42872      proxy's public statement of acceptance of a version permanently
   42873      authorizes you to choose that version for the Program.
   42874 
   42875      Later license versions may give you additional or different
   42876      permissions.  However, no additional obligations are imposed on any
   42877      author or copyright holder as a result of your choosing to follow a
   42878      later version.
   42879 
   42880  15. Disclaimer of Warranty.
   42881 
   42882      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   42883      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   42884      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
   42885      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   42886      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   42887      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   42888      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   42889      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   42890      NECESSARY SERVICING, REPAIR OR CORRECTION.
   42891 
   42892  16. Limitation of Liability.
   42893 
   42894      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   42895      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   42896      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
   42897      FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   42898      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   42899      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   42900      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   42901      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   42902      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   42903      THE POSSIBILITY OF SUCH DAMAGES.
   42904 
   42905  17. Interpretation of Sections 15 and 16.
   42906 
   42907      If the disclaimer of warranty and limitation of liability provided
   42908      above cannot be given local legal effect according to their terms,
   42909      reviewing courts shall apply local law that most closely
   42910      approximates an absolute waiver of all civil liability in
   42911      connection with the Program, unless a warranty or assumption of
   42912      liability accompanies a copy of the Program in return for a fee.
   42913 
   42914 
   42915 END OF TERMS AND CONDITIONS
   42916 ===========================
   42917 
   42918 How to Apply These Terms to Your New Programs
   42919 =============================================
   42920 
   42921 If you develop a new program, and you want it to be of the greatest
   42922 possible use to the public, the best way to achieve this is to make it
   42923 free software which everyone can redistribute and change under these
   42924 terms.
   42925 
   42926  To do so, attach the following notices to the program.  It is safest
   42927 to attach them to the start of each source file to most effectively
   42928 state the exclusion of warranty; and each file should have at least the
   42929 "copyright" line and a pointer to where the full notice is found.
   42930 
   42931      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   42932      Copyright (C) YEAR NAME OF AUTHOR
   42933 
   42934      This program is free software: you can redistribute it and/or modify
   42935      it under the terms of the GNU General Public License as published by
   42936      the Free Software Foundation, either version 3 of the License, or (at
   42937      your option) any later version.
   42938 
   42939      This program is distributed in the hope that it will be useful, but
   42940      WITHOUT ANY WARRANTY; without even the implied warranty of
   42941      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   42942      General Public License for more details.
   42943 
   42944      You should have received a copy of the GNU General Public License
   42945      along with this program.  If not, see `http://www.gnu.org/licenses/'.
   42946 
   42947  Also add information on how to contact you by electronic and paper
   42948 mail.
   42949 
   42950  If the program does terminal interaction, make it output a short
   42951 notice like this when it starts in an interactive mode:
   42952 
   42953      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   42954      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   42955      This is free software, and you are welcome to redistribute it
   42956      under certain conditions; type `show c' for details.
   42957 
   42958  The hypothetical commands `show w' and `show c' should show the
   42959 appropriate parts of the General Public License.  Of course, your
   42960 program's commands might be different; for a GUI interface, you would
   42961 use an "about box".
   42962 
   42963  You should also get your employer (if you work as a programmer) or
   42964 school, if any, to sign a "copyright disclaimer" for the program, if
   42965 necessary.  For more information on this, and how to apply and follow
   42966 the GNU GPL, see `http://www.gnu.org/licenses/'.
   42967 
   42968  The GNU General Public License does not permit incorporating your
   42969 program into proprietary programs.  If your program is a subroutine
   42970 library, you may consider it more useful to permit linking proprietary
   42971 applications with the library.  If this is what you want to do, use the
   42972 GNU Lesser General Public License instead of this License.  But first,
   42973 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
   42974 
   42975 
   42976 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
   42977 
   42978 GNU Free Documentation License
   42979 ******************************
   42980 
   42981                      Version 1.3, 3 November 2008
   42982 
   42983      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
   42984      `http://fsf.org/'
   42985 
   42986      Everyone is permitted to copy and distribute verbatim copies
   42987      of this license document, but changing it is not allowed.
   42988 
   42989   0. PREAMBLE
   42990 
   42991      The purpose of this License is to make a manual, textbook, or other
   42992      functional and useful document "free" in the sense of freedom: to
   42993      assure everyone the effective freedom to copy and redistribute it,
   42994      with or without modifying it, either commercially or
   42995      noncommercially.  Secondarily, this License preserves for the
   42996      author and publisher a way to get credit for their work, while not
   42997      being considered responsible for modifications made by others.
   42998 
   42999      This License is a kind of "copyleft", which means that derivative
   43000      works of the document must themselves be free in the same sense.
   43001      It complements the GNU General Public License, which is a copyleft
   43002      license designed for free software.
   43003 
   43004      We have designed this License in order to use it for manuals for
   43005      free software, because free software needs free documentation: a
   43006      free program should come with manuals providing the same freedoms
   43007      that the software does.  But this License is not limited to
   43008      software manuals; it can be used for any textual work, regardless
   43009      of subject matter or whether it is published as a printed book.
   43010      We recommend this License principally for works whose purpose is
   43011      instruction or reference.
   43012 
   43013   1. APPLICABILITY AND DEFINITIONS
   43014 
   43015      This License applies to any manual or other work, in any medium,
   43016      that contains a notice placed by the copyright holder saying it
   43017      can be distributed under the terms of this License.  Such a notice
   43018      grants a world-wide, royalty-free license, unlimited in duration,
   43019      to use that work under the conditions stated herein.  The
   43020      "Document", below, refers to any such manual or work.  Any member
   43021      of the public is a licensee, and is addressed as "you".  You
   43022      accept the license if you copy, modify or distribute the work in a
   43023      way requiring permission under copyright law.
   43024 
   43025      A "Modified Version" of the Document means any work containing the
   43026      Document or a portion of it, either copied verbatim, or with
   43027      modifications and/or translated into another language.
   43028 
   43029      A "Secondary Section" is a named appendix or a front-matter section
   43030      of the Document that deals exclusively with the relationship of the
   43031      publishers or authors of the Document to the Document's overall
   43032      subject (or to related matters) and contains nothing that could
   43033      fall directly within that overall subject.  (Thus, if the Document
   43034      is in part a textbook of mathematics, a Secondary Section may not
   43035      explain any mathematics.)  The relationship could be a matter of
   43036      historical connection with the subject or with related matters, or
   43037      of legal, commercial, philosophical, ethical or political position
   43038      regarding them.
   43039 
   43040      The "Invariant Sections" are certain Secondary Sections whose
   43041      titles are designated, as being those of Invariant Sections, in
   43042      the notice that says that the Document is released under this
   43043      License.  If a section does not fit the above definition of
   43044      Secondary then it is not allowed to be designated as Invariant.
   43045      The Document may contain zero Invariant Sections.  If the Document
   43046      does not identify any Invariant Sections then there are none.
   43047 
   43048      The "Cover Texts" are certain short passages of text that are
   43049      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
   43050      that says that the Document is released under this License.  A
   43051      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
   43052      be at most 25 words.
   43053 
   43054      A "Transparent" copy of the Document means a machine-readable copy,
   43055      represented in a format whose specification is available to the
   43056      general public, that is suitable for revising the document
   43057      straightforwardly with generic text editors or (for images
   43058      composed of pixels) generic paint programs or (for drawings) some
   43059      widely available drawing editor, and that is suitable for input to
   43060      text formatters or for automatic translation to a variety of
   43061      formats suitable for input to text formatters.  A copy made in an
   43062      otherwise Transparent file format whose markup, or absence of
   43063      markup, has been arranged to thwart or discourage subsequent
   43064      modification by readers is not Transparent.  An image format is
   43065      not Transparent if used for any substantial amount of text.  A
   43066      copy that is not "Transparent" is called "Opaque".
   43067 
   43068      Examples of suitable formats for Transparent copies include plain
   43069      ASCII without markup, Texinfo input format, LaTeX input format,
   43070      SGML or XML using a publicly available DTD, and
   43071      standard-conforming simple HTML, PostScript or PDF designed for
   43072      human modification.  Examples of transparent image formats include
   43073      PNG, XCF and JPG.  Opaque formats include proprietary formats that
   43074      can be read and edited only by proprietary word processors, SGML or
   43075      XML for which the DTD and/or processing tools are not generally
   43076      available, and the machine-generated HTML, PostScript or PDF
   43077      produced by some word processors for output purposes only.
   43078 
   43079      The "Title Page" means, for a printed book, the title page itself,
   43080      plus such following pages as are needed to hold, legibly, the
   43081      material this License requires to appear in the title page.  For
   43082      works in formats which do not have any title page as such, "Title
   43083      Page" means the text near the most prominent appearance of the
   43084      work's title, preceding the beginning of the body of the text.
   43085 
   43086      The "publisher" means any person or entity that distributes copies
   43087      of the Document to the public.
   43088 
   43089      A section "Entitled XYZ" means a named subunit of the Document
   43090      whose title either is precisely XYZ or contains XYZ in parentheses
   43091      following text that translates XYZ in another language.  (Here XYZ
   43092      stands for a specific section name mentioned below, such as
   43093      "Acknowledgements", "Dedications", "Endorsements", or "History".)
   43094      To "Preserve the Title" of such a section when you modify the
   43095      Document means that it remains a section "Entitled XYZ" according
   43096      to this definition.
   43097 
   43098      The Document may include Warranty Disclaimers next to the notice
   43099      which states that this License applies to the Document.  These
   43100      Warranty Disclaimers are considered to be included by reference in
   43101      this License, but only as regards disclaiming warranties: any other
   43102      implication that these Warranty Disclaimers may have is void and
   43103      has no effect on the meaning of this License.
   43104 
   43105   2. VERBATIM COPYING
   43106 
   43107      You may copy and distribute the Document in any medium, either
   43108      commercially or noncommercially, provided that this License, the
   43109      copyright notices, and the license notice saying this License
   43110      applies to the Document are reproduced in all copies, and that you
   43111      add no other conditions whatsoever to those of this License.  You
   43112      may not use technical measures to obstruct or control the reading
   43113      or further copying of the copies you make or distribute.  However,
   43114      you may accept compensation in exchange for copies.  If you
   43115      distribute a large enough number of copies you must also follow
   43116      the conditions in section 3.
   43117 
   43118      You may also lend copies, under the same conditions stated above,
   43119      and you may publicly display copies.
   43120 
   43121   3. COPYING IN QUANTITY
   43122 
   43123      If you publish printed copies (or copies in media that commonly
   43124      have printed covers) of the Document, numbering more than 100, and
   43125      the Document's license notice requires Cover Texts, you must
   43126      enclose the copies in covers that carry, clearly and legibly, all
   43127      these Cover Texts: Front-Cover Texts on the front cover, and
   43128      Back-Cover Texts on the back cover.  Both covers must also clearly
   43129      and legibly identify you as the publisher of these copies.  The
   43130      front cover must present the full title with all words of the
   43131      title equally prominent and visible.  You may add other material
   43132      on the covers in addition.  Copying with changes limited to the
   43133      covers, as long as they preserve the title of the Document and
   43134      satisfy these conditions, can be treated as verbatim copying in
   43135      other respects.
   43136 
   43137      If the required texts for either cover are too voluminous to fit
   43138      legibly, you should put the first ones listed (as many as fit
   43139      reasonably) on the actual cover, and continue the rest onto
   43140      adjacent pages.
   43141 
   43142      If you publish or distribute Opaque copies of the Document
   43143      numbering more than 100, you must either include a
   43144      machine-readable Transparent copy along with each Opaque copy, or
   43145      state in or with each Opaque copy a computer-network location from
   43146      which the general network-using public has access to download
   43147      using public-standard network protocols a complete Transparent
   43148      copy of the Document, free of added material.  If you use the
   43149      latter option, you must take reasonably prudent steps, when you
   43150      begin distribution of Opaque copies in quantity, to ensure that
   43151      this Transparent copy will remain thus accessible at the stated
   43152      location until at least one year after the last time you
   43153      distribute an Opaque copy (directly or through your agents or
   43154      retailers) of that edition to the public.
   43155 
   43156      It is requested, but not required, that you contact the authors of
   43157      the Document well before redistributing any large number of
   43158      copies, to give them a chance to provide you with an updated
   43159      version of the Document.
   43160 
   43161   4. MODIFICATIONS
   43162 
   43163      You may copy and distribute a Modified Version of the Document
   43164      under the conditions of sections 2 and 3 above, provided that you
   43165      release the Modified Version under precisely this License, with
   43166      the Modified Version filling the role of the Document, thus
   43167      licensing distribution and modification of the Modified Version to
   43168      whoever possesses a copy of it.  In addition, you must do these
   43169      things in the Modified Version:
   43170 
   43171        A. Use in the Title Page (and on the covers, if any) a title
   43172           distinct from that of the Document, and from those of
   43173           previous versions (which should, if there were any, be listed
   43174           in the History section of the Document).  You may use the
   43175           same title as a previous version if the original publisher of
   43176           that version gives permission.
   43177 
   43178        B. List on the Title Page, as authors, one or more persons or
   43179           entities responsible for authorship of the modifications in
   43180           the Modified Version, together with at least five of the
   43181           principal authors of the Document (all of its principal
   43182           authors, if it has fewer than five), unless they release you
   43183           from this requirement.
   43184 
   43185        C. State on the Title page the name of the publisher of the
   43186           Modified Version, as the publisher.
   43187 
   43188        D. Preserve all the copyright notices of the Document.
   43189 
   43190        E. Add an appropriate copyright notice for your modifications
   43191           adjacent to the other copyright notices.
   43192 
   43193        F. Include, immediately after the copyright notices, a license
   43194           notice giving the public permission to use the Modified
   43195           Version under the terms of this License, in the form shown in
   43196           the Addendum below.
   43197 
   43198        G. Preserve in that license notice the full lists of Invariant
   43199           Sections and required Cover Texts given in the Document's
   43200           license notice.
   43201 
   43202        H. Include an unaltered copy of this License.
   43203 
   43204        I. Preserve the section Entitled "History", Preserve its Title,
   43205           and add to it an item stating at least the title, year, new
   43206           authors, and publisher of the Modified Version as given on
   43207           the Title Page.  If there is no section Entitled "History" in
   43208           the Document, create one stating the title, year, authors,
   43209           and publisher of the Document as given on its Title Page,
   43210           then add an item describing the Modified Version as stated in
   43211           the previous sentence.
   43212 
   43213        J. Preserve the network location, if any, given in the Document
   43214           for public access to a Transparent copy of the Document, and
   43215           likewise the network locations given in the Document for
   43216           previous versions it was based on.  These may be placed in
   43217           the "History" section.  You may omit a network location for a
   43218           work that was published at least four years before the
   43219           Document itself, or if the original publisher of the version
   43220           it refers to gives permission.
   43221 
   43222        K. For any section Entitled "Acknowledgements" or "Dedications",
   43223           Preserve the Title of the section, and preserve in the
   43224           section all the substance and tone of each of the contributor
   43225           acknowledgements and/or dedications given therein.
   43226 
   43227        L. Preserve all the Invariant Sections of the Document,
   43228           unaltered in their text and in their titles.  Section numbers
   43229           or the equivalent are not considered part of the section
   43230           titles.
   43231 
   43232        M. Delete any section Entitled "Endorsements".  Such a section
   43233           may not be included in the Modified Version.
   43234 
   43235        N. Do not retitle any existing section to be Entitled
   43236           "Endorsements" or to conflict in title with any Invariant
   43237           Section.
   43238 
   43239        O. Preserve any Warranty Disclaimers.
   43240 
   43241      If the Modified Version includes new front-matter sections or
   43242      appendices that qualify as Secondary Sections and contain no
   43243      material copied from the Document, you may at your option
   43244      designate some or all of these sections as invariant.  To do this,
   43245      add their titles to the list of Invariant Sections in the Modified
   43246      Version's license notice.  These titles must be distinct from any
   43247      other section titles.
   43248 
   43249      You may add a section Entitled "Endorsements", provided it contains
   43250      nothing but endorsements of your Modified Version by various
   43251      parties--for example, statements of peer review or that the text
   43252      has been approved by an organization as the authoritative
   43253      definition of a standard.
   43254 
   43255      You may add a passage of up to five words as a Front-Cover Text,
   43256      and a passage of up to 25 words as a Back-Cover Text, to the end
   43257      of the list of Cover Texts in the Modified Version.  Only one
   43258      passage of Front-Cover Text and one of Back-Cover Text may be
   43259      added by (or through arrangements made by) any one entity.  If the
   43260      Document already includes a cover text for the same cover,
   43261      previously added by you or by arrangement made by the same entity
   43262      you are acting on behalf of, you may not add another; but you may
   43263      replace the old one, on explicit permission from the previous
   43264      publisher that added the old one.
   43265 
   43266      The author(s) and publisher(s) of the Document do not by this
   43267      License give permission to use their names for publicity for or to
   43268      assert or imply endorsement of any Modified Version.
   43269 
   43270   5. COMBINING DOCUMENTS
   43271 
   43272      You may combine the Document with other documents released under
   43273      this License, under the terms defined in section 4 above for
   43274      modified versions, provided that you include in the combination
   43275      all of the Invariant Sections of all of the original documents,
   43276      unmodified, and list them all as Invariant Sections of your
   43277      combined work in its license notice, and that you preserve all
   43278      their Warranty Disclaimers.
   43279 
   43280      The combined work need only contain one copy of this License, and
   43281      multiple identical Invariant Sections may be replaced with a single
   43282      copy.  If there are multiple Invariant Sections with the same name
   43283      but different contents, make the title of each such section unique
   43284      by adding at the end of it, in parentheses, the name of the
   43285      original author or publisher of that section if known, or else a
   43286      unique number.  Make the same adjustment to the section titles in
   43287      the list of Invariant Sections in the license notice of the
   43288      combined work.
   43289 
   43290      In the combination, you must combine any sections Entitled
   43291      "History" in the various original documents, forming one section
   43292      Entitled "History"; likewise combine any sections Entitled
   43293      "Acknowledgements", and any sections Entitled "Dedications".  You
   43294      must delete all sections Entitled "Endorsements."
   43295 
   43296   6. COLLECTIONS OF DOCUMENTS
   43297 
   43298      You may make a collection consisting of the Document and other
   43299      documents released under this License, and replace the individual
   43300      copies of this License in the various documents with a single copy
   43301      that is included in the collection, provided that you follow the
   43302      rules of this License for verbatim copying of each of the
   43303      documents in all other respects.
   43304 
   43305      You may extract a single document from such a collection, and
   43306      distribute it individually under this License, provided you insert
   43307      a copy of this License into the extracted document, and follow
   43308      this License in all other respects regarding verbatim copying of
   43309      that document.
   43310 
   43311   7. AGGREGATION WITH INDEPENDENT WORKS
   43312 
   43313      A compilation of the Document or its derivatives with other
   43314      separate and independent documents or works, in or on a volume of
   43315      a storage or distribution medium, is called an "aggregate" if the
   43316      copyright resulting from the compilation is not used to limit the
   43317      legal rights of the compilation's users beyond what the individual
   43318      works permit.  When the Document is included in an aggregate, this
   43319      License does not apply to the other works in the aggregate which
   43320      are not themselves derivative works of the Document.
   43321 
   43322      If the Cover Text requirement of section 3 is applicable to these
   43323      copies of the Document, then if the Document is less than one half
   43324      of the entire aggregate, the Document's Cover Texts may be placed
   43325      on covers that bracket the Document within the aggregate, or the
   43326      electronic equivalent of covers if the Document is in electronic
   43327      form.  Otherwise they must appear on printed covers that bracket
   43328      the whole aggregate.
   43329 
   43330   8. TRANSLATION
   43331 
   43332      Translation is considered a kind of modification, so you may
   43333      distribute translations of the Document under the terms of section
   43334      4.  Replacing Invariant Sections with translations requires special
   43335      permission from their copyright holders, but you may include
   43336      translations of some or all Invariant Sections in addition to the
   43337      original versions of these Invariant Sections.  You may include a
   43338      translation of this License, and all the license notices in the
   43339      Document, and any Warranty Disclaimers, provided that you also
   43340      include the original English version of this License and the
   43341      original versions of those notices and disclaimers.  In case of a
   43342      disagreement between the translation and the original version of
   43343      this License or a notice or disclaimer, the original version will
   43344      prevail.
   43345 
   43346      If a section in the Document is Entitled "Acknowledgements",
   43347      "Dedications", or "History", the requirement (section 4) to
   43348      Preserve its Title (section 1) will typically require changing the
   43349      actual title.
   43350 
   43351   9. TERMINATION
   43352 
   43353      You may not copy, modify, sublicense, or distribute the Document
   43354      except as expressly provided under this License.  Any attempt
   43355      otherwise to copy, modify, sublicense, or distribute it is void,
   43356      and will automatically terminate your rights under this License.
   43357 
   43358      However, if you cease all violation of this License, then your
   43359      license from a particular copyright holder is reinstated (a)
   43360      provisionally, unless and until the copyright holder explicitly
   43361      and finally terminates your license, and (b) permanently, if the
   43362      copyright holder fails to notify you of the violation by some
   43363      reasonable means prior to 60 days after the cessation.
   43364 
   43365      Moreover, your license from a particular copyright holder is
   43366      reinstated permanently if the copyright holder notifies you of the
   43367      violation by some reasonable means, this is the first time you have
   43368      received notice of violation of this License (for any work) from
   43369      that copyright holder, and you cure the violation prior to 30 days
   43370      after your receipt of the notice.
   43371 
   43372      Termination of your rights under this section does not terminate
   43373      the licenses of parties who have received copies or rights from
   43374      you under this License.  If your rights have been terminated and
   43375      not permanently reinstated, receipt of a copy of some or all of
   43376      the same material does not give you any rights to use it.
   43377 
   43378  10. FUTURE REVISIONS OF THIS LICENSE
   43379 
   43380      The Free Software Foundation may publish new, revised versions of
   43381      the GNU Free Documentation License from time to time.  Such new
   43382      versions will be similar in spirit to the present version, but may
   43383      differ in detail to address new problems or concerns.  See
   43384      `http://www.gnu.org/copyleft/'.
   43385 
   43386      Each version of the License is given a distinguishing version
   43387      number.  If the Document specifies that a particular numbered
   43388      version of this License "or any later version" applies to it, you
   43389      have the option of following the terms and conditions either of
   43390      that specified version or of any later version that has been
   43391      published (not as a draft) by the Free Software Foundation.  If
   43392      the Document does not specify a version number of this License,
   43393      you may choose any version ever published (not as a draft) by the
   43394      Free Software Foundation.  If the Document specifies that a proxy
   43395      can decide which future versions of this License can be used, that
   43396      proxy's public statement of acceptance of a version permanently
   43397      authorizes you to choose that version for the Document.
   43398 
   43399  11. RELICENSING
   43400 
   43401      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
   43402      World Wide Web server that publishes copyrightable works and also
   43403      provides prominent facilities for anybody to edit those works.  A
   43404      public wiki that anybody can edit is an example of such a server.
   43405      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
   43406      site means any set of copyrightable works thus published on the MMC
   43407      site.
   43408 
   43409      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
   43410      license published by Creative Commons Corporation, a not-for-profit
   43411      corporation with a principal place of business in San Francisco,
   43412      California, as well as future copyleft versions of that license
   43413      published by that same organization.
   43414 
   43415      "Incorporate" means to publish or republish a Document, in whole or
   43416      in part, as part of another Document.
   43417 
   43418      An MMC is "eligible for relicensing" if it is licensed under this
   43419      License, and if all works that were first published under this
   43420      License somewhere other than this MMC, and subsequently
   43421      incorporated in whole or in part into the MMC, (1) had no cover
   43422      texts or invariant sections, and (2) were thus incorporated prior
   43423      to November 1, 2008.
   43424 
   43425      The operator of an MMC Site may republish an MMC contained in the
   43426      site under CC-BY-SA on the same site at any time before August 1,
   43427      2009, provided the MMC is eligible for relicensing.
   43428 
   43429 
   43430 ADDENDUM: How to use this License for your documents
   43431 ====================================================
   43432 
   43433 To use this License in a document you have written, include a copy of
   43434 the License in the document and put the following copyright and license
   43435 notices just after the title page:
   43436 
   43437        Copyright (C)  YEAR  YOUR NAME.
   43438        Permission is granted to copy, distribute and/or modify this document
   43439        under the terms of the GNU Free Documentation License, Version 1.3
   43440        or any later version published by the Free Software Foundation;
   43441        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
   43442        Texts.  A copy of the license is included in the section entitled ``GNU
   43443        Free Documentation License''.
   43444 
   43445  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
   43446 replace the "with...Texts." line with this:
   43447 
   43448          with the Invariant Sections being LIST THEIR TITLES, with
   43449          the Front-Cover Texts being LIST, and with the Back-Cover Texts
   43450          being LIST.
   43451 
   43452  If you have Invariant Sections without Cover Texts, or some other
   43453 combination of the three, merge those two alternatives to suit the
   43454 situation.
   43455 
   43456  If your document contains nontrivial examples of program code, we
   43457 recommend releasing these examples in parallel under your choice of
   43458 free software license, such as the GNU General Public License, to
   43459 permit their use in free software.
   43460 
   43461 
   43462 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
   43463 
   43464 Contributors to GCC
   43465 *******************
   43466 
   43467 The GCC project would like to thank its many contributors.  Without
   43468 them the project would not have been nearly as successful as it has
   43469 been.  Any omissions in this list are accidental.  Feel free to contact
   43470 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or
   43471 some of your contributions are not listed.  Please keep this list in
   43472 alphabetical order.
   43473 
   43474    * Analog Devices helped implement the support for complex data types
   43475      and iterators.
   43476 
   43477    * John David Anglin for threading-related fixes and improvements to
   43478      libstdc++-v3, and the HP-UX port.
   43479 
   43480    * James van Artsdalen wrote the code that makes efficient use of the
   43481      Intel 80387 register stack.
   43482 
   43483    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
   43484      Series port.
   43485 
   43486    * Alasdair Baird for various bug fixes.
   43487 
   43488    * Giovanni Bajo for analyzing lots of complicated C++ problem
   43489      reports.
   43490 
   43491    * Peter Barada for his work to improve code generation for new
   43492      ColdFire cores.
   43493 
   43494    * Gerald Baumgartner added the signature extension to the C++ front
   43495      end.
   43496 
   43497    * Godmar Back for his Java improvements and encouragement.
   43498 
   43499    * Scott Bambrough for help porting the Java compiler.
   43500 
   43501    * Wolfgang Bangerth for processing tons of bug reports.
   43502 
   43503    * Jon Beniston for his Microsoft Windows port of Java and port to
   43504      Lattice Mico32.
   43505 
   43506    * Daniel Berlin for better DWARF2 support, faster/better
   43507      optimizations, improved alias analysis, plus migrating GCC to
   43508      Bugzilla.
   43509 
   43510    * Geoff Berry for his Java object serialization work and various
   43511      patches.
   43512 
   43513    * Uros Bizjak for the implementation of x87 math built-in functions
   43514      and for various middle end and i386 back end improvements and bug
   43515      fixes.
   43516 
   43517    * Eric Blake for helping to make GCJ and libgcj conform to the
   43518      specifications.
   43519 
   43520    * Janne Blomqvist for contributions to GNU Fortran.
   43521 
   43522    * Segher Boessenkool for various fixes.
   43523 
   43524    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
   43525      other Java work.
   43526 
   43527    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
   43528      miscellaneous clean-ups.
   43529 
   43530    * Steven Bosscher for integrating the GNU Fortran front end into GCC
   43531      and for contributing to the tree-ssa branch.
   43532 
   43533    * Eric Botcazou for fixing middle- and backend bugs left and right.
   43534 
   43535    * Per Bothner for his direction via the steering committee and
   43536      various improvements to the infrastructure for supporting new
   43537      languages.  Chill front end implementation.  Initial
   43538      implementations of cpplib, fix-header, config.guess, libio, and
   43539      past C++ library (libg++) maintainer.  Dreaming up, designing and
   43540      implementing much of GCJ.
   43541 
   43542    * Devon Bowen helped port GCC to the Tahoe.
   43543 
   43544    * Don Bowman for mips-vxworks contributions.
   43545 
   43546    * Dave Brolley for work on cpplib and Chill.
   43547 
   43548    * Paul Brook for work on the ARM architecture and maintaining GNU
   43549      Fortran.
   43550 
   43551    * Robert Brown implemented the support for Encore 32000 systems.
   43552 
   43553    * Christian Bruel for improvements to local store elimination.
   43554 
   43555    * Herman A.J. ten Brugge for various fixes.
   43556 
   43557    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
   43558      FAQ.
   43559 
   43560    * Joe Buck for his direction via the steering committee.
   43561 
   43562    * Craig Burley for leadership of the G77 Fortran effort.
   43563 
   43564    * Stephan Buys for contributing Doxygen notes for libstdc++.
   43565 
   43566    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
   43567      to the C++ strings, streambufs and formatted I/O, hard detective
   43568      work on the frustrating localization issues, and keeping up with
   43569      the problem reports.
   43570 
   43571    * John Carr for his alias work, SPARC hacking, infrastructure
   43572      improvements, previous contributions to the steering committee,
   43573      loop optimizations, etc.
   43574 
   43575    * Stephane Carrez for 68HC11 and 68HC12 ports.
   43576 
   43577    * Steve Chamberlain for support for the Renesas SH and H8 processors
   43578      and the PicoJava processor, and for GCJ config fixes.
   43579 
   43580    * Glenn Chambers for help with the GCJ FAQ.
   43581 
   43582    * John-Marc Chandonia for various libgcj patches.
   43583 
   43584    * Denis Chertykov for contributing and maintaining the AVR port, the
   43585      first GCC port for an 8-bit architecture.
   43586 
   43587    * Scott Christley for his Objective-C contributions.
   43588 
   43589    * Eric Christopher for his Java porting help and clean-ups.
   43590 
   43591    * Branko Cibej for more warning contributions.
   43592 
   43593    * The GNU Classpath project for all of their merged runtime code.
   43594 
   43595    * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help',
   43596      and other random hacking.
   43597 
   43598    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
   43599 
   43600    * R. Kelley Cook for making GCC buildable from a read-only directory
   43601      as well as other miscellaneous build process and documentation
   43602      clean-ups.
   43603 
   43604    * Ralf Corsepius for SH testing and minor bug fixing.
   43605 
   43606    * Stan Cox for care and feeding of the x86 port and lots of behind
   43607      the scenes hacking.
   43608 
   43609    * Alex Crain provided changes for the 3b1.
   43610 
   43611    * Ian Dall for major improvements to the NS32k port.
   43612 
   43613    * Paul Dale for his work to add uClinux platform support to the m68k
   43614      backend.
   43615 
   43616    * Dario Dariol contributed the four varieties of sample programs
   43617      that print a copy of their source.
   43618 
   43619    * Russell Davidson for fstream and stringstream fixes in libstdc++.
   43620 
   43621    * Bud Davis for work on the G77 and GNU Fortran compilers.
   43622 
   43623    * Mo DeJong for GCJ and libgcj bug fixes.
   43624 
   43625    * DJ Delorie for the DJGPP port, build and libiberty maintenance,
   43626      various bug fixes, and the M32C and MeP ports.
   43627 
   43628    * Arnaud Desitter for helping to debug GNU Fortran.
   43629 
   43630    * Gabriel Dos Reis for contributions to G++, contributions and
   43631      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
   43632      including `valarray<>', `complex<>', maintaining the numerics
   43633      library (including that pesky `<limits>' :-) and keeping
   43634      up-to-date anything to do with numbers.
   43635 
   43636    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
   43637      ISO C99 support, CFG dumping support, etc., plus support of the
   43638      C++ runtime libraries including for all kinds of C interface
   43639      issues, contributing and maintaining `complex<>', sanity checking
   43640      and disbursement, configuration architecture, libio maintenance,
   43641      and early math work.
   43642 
   43643    * Zdenek Dvorak for a new loop unroller and various fixes.
   43644 
   43645    * Michael Eager for his work on the Xilinx MicroBlaze port.
   43646 
   43647    * Richard Earnshaw for his ongoing work with the ARM.
   43648 
   43649    * David Edelsohn for his direction via the steering committee,
   43650      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
   43651      loop changes, doing the entire AIX port of libstdc++ with his bare
   43652      hands, and for ensuring GCC properly keeps working on AIX.
   43653 
   43654    * Kevin Ediger for the floating point formatting of num_put::do_put
   43655      in libstdc++.
   43656 
   43657    * Phil Edwards for libstdc++ work including configuration hackery,
   43658      documentation maintainer, chief breaker of the web pages, the
   43659      occasional iostream bug fix, and work on shared library symbol
   43660      versioning.
   43661 
   43662    * Paul Eggert for random hacking all over GCC.
   43663 
   43664    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
   43665      configuration support for locales and fstream-related fixes.
   43666 
   43667    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
   43668      iostreams.
   43669 
   43670    * Christian Ehrhardt for dealing with bug reports.
   43671 
   43672    * Ben Elliston for his work to move the Objective-C runtime into its
   43673      own subdirectory and for his work on autoconf.
   43674 
   43675    * Revital Eres for work on the PowerPC 750CL port.
   43676 
   43677    * Marc Espie for OpenBSD support.
   43678 
   43679    * Doug Evans for much of the global optimization framework, arc,
   43680      m32r, and SPARC work.
   43681 
   43682    * Christopher Faylor for his work on the Cygwin port and for caring
   43683      and feeding the gcc.gnu.org box and saving its users tons of spam.
   43684 
   43685    * Fred Fish for BeOS support and Ada fixes.
   43686 
   43687    * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
   43688 
   43689    * Peter Gerwinski for various bug fixes and the Pascal front end.
   43690 
   43691    * Kaveh R. Ghazi for his direction via the steering committee,
   43692      amazing work to make `-W -Wall -W* -Werror' useful, and
   43693      continuously testing GCC on a plethora of platforms.  Kaveh
   43694      extends his gratitude to the CAIP Center at Rutgers University for
   43695      providing him with computing resources to work on Free Software
   43696      since the late 1980s.
   43697 
   43698    * John Gilmore for a donation to the FSF earmarked improving GNU
   43699      Java.
   43700 
   43701    * Judy Goldberg for c++ contributions.
   43702 
   43703    * Torbjorn Granlund for various fixes and the c-torture testsuite,
   43704      multiply- and divide-by-constant optimization, improved long long
   43705      support, improved leaf function register allocation, and his
   43706      direction via the steering committee.
   43707 
   43708    * Anthony Green for his `-Os' contributions, the moxie port, and
   43709      Java front end work.
   43710 
   43711    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
   43712      Java code.
   43713 
   43714    * Michael K. Gschwind contributed the port to the PDP-11.
   43715 
   43716    * Richard Guenther for his ongoing middle-end contributions and bug
   43717      fixes and for release management.
   43718 
   43719    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
   43720      the support for Dwarf symbolic debugging information, and much of
   43721      the support for System V Release 4.  He has also worked heavily on
   43722      the Intel 386 and 860 support.
   43723 
   43724    * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
   43725      GCSE.
   43726 
   43727    * Bruno Haible for improvements in the runtime overhead for EH, new
   43728      warnings and assorted bug fixes.
   43729 
   43730    * Andrew Haley for his amazing Java compiler and library efforts.
   43731 
   43732    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
   43733      series 300.
   43734 
   43735    * Michael Hayes for various thankless work he's done trying to get
   43736      the c30/c40 ports functional.  Lots of loop and unroll
   43737      improvements and fixes.
   43738 
   43739    * Dara Hazeghi for wading through myriads of target-specific bug
   43740      reports.
   43741 
   43742    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
   43743 
   43744    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
   43745      work, loop opts, and generally fixing lots of old problems we've
   43746      ignored for years, flow rewrite and lots of further stuff,
   43747      including reviewing tons of patches.
   43748 
   43749    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
   43750      various fixes.
   43751 
   43752    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
   43753      contributed the support for the Sony NEWS machine.
   43754 
   43755    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
   43756      various fixes.
   43757 
   43758    * Katherine Holcomb for work on GNU Fortran.
   43759 
   43760    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
   43761      of testing and bug fixing, particularly of GCC configury code.
   43762 
   43763    * Steve Holmgren for MachTen patches.
   43764 
   43765    * Jan Hubicka for his x86 port improvements.
   43766 
   43767    * Falk Hueffner for working on C and optimization bug reports.
   43768 
   43769    * Bernardo Innocenti for his m68k work, including merging of
   43770      ColdFire improvements and uClinux support.
   43771 
   43772    * Christian Iseli for various bug fixes.
   43773 
   43774    * Kamil Iskra for general m68k hacking.
   43775 
   43776    * Lee Iverson for random fixes and MIPS testing.
   43777 
   43778    * Andreas Jaeger for testing and benchmarking of GCC and various bug
   43779      fixes.
   43780 
   43781    * Jakub Jelinek for his SPARC work and sibling call optimizations as
   43782      well as lots of bug fixes and test cases, and for improving the
   43783      Java build system.
   43784 
   43785    * Janis Johnson for ia64 testing and fixes, her quality improvement
   43786      sidetracks, and web page maintenance.
   43787 
   43788    * Kean Johnston for SCO OpenServer support and various fixes.
   43789 
   43790    * Tim Josling for the sample language treelang based originally on
   43791      Richard Kenner's "toy" language.
   43792 
   43793    * Nicolai Josuttis for additional libstdc++ documentation.
   43794 
   43795    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
   43796      target.
   43797 
   43798    * Steven G. Kargl for work on GNU Fortran.
   43799 
   43800    * David Kashtan of SRI adapted GCC to VMS.
   43801 
   43802    * Ryszard Kabatek for many, many libstdc++ bug fixes and
   43803      optimizations of strings, especially member functions, and for
   43804      auto_ptr fixes.
   43805 
   43806    * Geoffrey Keating for his ongoing work to make the PPC work for
   43807      GNU/Linux and his automatic regression tester.
   43808 
   43809    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
   43810      work in just about every part of libstdc++.
   43811 
   43812    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
   43813      MIL-STD-1750A.
   43814 
   43815    * Richard Kenner of the New York University Ultracomputer Research
   43816      Laboratory wrote the machine descriptions for the AMD 29000, the
   43817      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
   43818      support for instruction attributes.  He also made changes to
   43819      better support RISC processors including changes to common
   43820      subexpression elimination, strength reduction, function calling
   43821      sequence handling, and condition code support, in addition to
   43822      generalizing the code for frame pointer elimination and delay slot
   43823      scheduling.  Richard Kenner was also the head maintainer of GCC
   43824      for several years.
   43825 
   43826    * Mumit Khan for various contributions to the Cygwin and Mingw32
   43827      ports and maintaining binary releases for Microsoft Windows hosts,
   43828      and for massive libstdc++ porting work to Cygwin/Mingw32.
   43829 
   43830    * Robin Kirkham for cpu32 support.
   43831 
   43832    * Mark Klein for PA improvements.
   43833 
   43834    * Thomas Koenig for various bug fixes.
   43835 
   43836    * Bruce Korb for the new and improved fixincludes code.
   43837 
   43838    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
   43839      effort.
   43840 
   43841    * Charles LaBrec contributed the support for the Integrated Solutions
   43842      68020 system.
   43843 
   43844    * Asher Langton and Mike Kumbera for contributing Cray pointer
   43845      support to GNU Fortran, and for other GNU Fortran improvements.
   43846 
   43847    * Jeff Law for his direction via the steering committee,
   43848      coordinating the entire egcs project and GCC 2.95, rolling out
   43849      snapshots and releases, handling merges from GCC2, reviewing tons
   43850      of patches that might have fallen through the cracks else, and
   43851      random but extensive hacking.
   43852 
   43853    * Marc Lehmann for his direction via the steering committee and
   43854      helping with analysis and improvements of x86 performance.
   43855 
   43856    * Victor Leikehman for work on GNU Fortran.
   43857 
   43858    * Ted Lemon wrote parts of the RTL reader and printer.
   43859 
   43860    * Kriang Lerdsuwanakij for C++ improvements including template as
   43861      template parameter support, and many C++ fixes.
   43862 
   43863    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
   43864      and random work on the Java front end.
   43865 
   43866    * Alain Lichnewsky ported GCC to the MIPS CPU.
   43867 
   43868    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
   43869      and patches.
   43870 
   43871    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
   43872 
   43873    * Chen Liqin for various S+core related fixes/improvement, and for
   43874      maintaining the S+core port.
   43875 
   43876    * Weiwen Liu for testing and various bug fixes.
   43877 
   43878    * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
   43879      diagnostics fixes and improvements.
   43880 
   43881    * Dave Love for his ongoing work with the Fortran front end and
   43882      runtime libraries.
   43883 
   43884    * Martin von Lo"wis for internal consistency checking infrastructure,
   43885      various C++ improvements including namespace support, and tons of
   43886      assistance with libstdc++/compiler merges.
   43887 
   43888    * H.J. Lu for his previous contributions to the steering committee,
   43889      many x86 bug reports, prototype patches, and keeping the GNU/Linux
   43890      ports working.
   43891 
   43892    * Greg McGary for random fixes and (someday) bounded pointers.
   43893 
   43894    * Andrew MacLeod for his ongoing work in building a real EH system,
   43895      various code generation improvements, work on the global
   43896      optimizer, etc.
   43897 
   43898    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
   43899      hacking improvements to compile-time performance, overall
   43900      knowledge and direction in the area of instruction scheduling, and
   43901      design and implementation of the automaton based instruction
   43902      scheduler.
   43903 
   43904    * Bob Manson for his behind the scenes work on dejagnu.
   43905 
   43906    * Philip Martin for lots of libstdc++ string and vector iterator
   43907      fixes and improvements, and string clean up and testsuites.
   43908 
   43909    * All of the Mauve project contributors, for Java test code.
   43910 
   43911    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
   43912 
   43913    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
   43914 
   43915    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
   43916      powerpc, haifa, ECOFF debug support, and other assorted hacking.
   43917 
   43918    * Jason Merrill for his direction via the steering committee and
   43919      leading the G++ effort.
   43920 
   43921    * Martin Michlmayr for testing GCC on several architectures using the
   43922      entire Debian archive.
   43923 
   43924    * David Miller for his direction via the steering committee, lots of
   43925      SPARC work, improvements in jump.c and interfacing with the Linux
   43926      kernel developers.
   43927 
   43928    * Gary Miller ported GCC to Charles River Data Systems machines.
   43929 
   43930    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
   43931      the entire libstdc++ testsuite namespace-compatible.
   43932 
   43933    * Mark Mitchell for his direction via the steering committee,
   43934      mountains of C++ work, load/store hoisting out of loops, alias
   43935      analysis improvements, ISO C `restrict' support, and serving as
   43936      release manager for GCC 3.x.
   43937 
   43938    * Alan Modra for various GNU/Linux bits and testing.
   43939 
   43940    * Toon Moene for his direction via the steering committee, Fortran
   43941      maintenance, and his ongoing work to make us make Fortran run fast.
   43942 
   43943    * Jason Molenda for major help in the care and feeding of all the
   43944      services on the gcc.gnu.org (formerly egcs.cygnus.com)
   43945      machine--mail, web services, ftp services, etc etc.  Doing all
   43946      this work on scrap paper and the backs of envelopes would have
   43947      been... difficult.
   43948 
   43949    * Catherine Moore for fixing various ugly problems we have sent her
   43950      way, including the haifa bug which was killing the Alpha & PowerPC
   43951      Linux kernels.
   43952 
   43953    * Mike Moreton for his various Java patches.
   43954 
   43955    * David Mosberger-Tang for various Alpha improvements, and for the
   43956      initial IA-64 port.
   43957 
   43958    * Stephen Moshier contributed the floating point emulator that
   43959      assists in cross-compilation and permits support for floating
   43960      point numbers wider than 64 bits and for ISO C99 support.
   43961 
   43962    * Bill Moyer for his behind the scenes work on various issues.
   43963 
   43964    * Philippe De Muyter for his work on the m68k port.
   43965 
   43966    * Joseph S. Myers for his work on the PDP-11 port, format checking
   43967      and ISO C99 support, and continuous emphasis on (and contributions
   43968      to) documentation.
   43969 
   43970    * Nathan Myers for his work on libstdc++-v3: architecture and
   43971      authorship through the first three snapshots, including
   43972      implementation of locale infrastructure, string, shadow C headers,
   43973      and the initial project documentation (DESIGN, CHECKLIST, and so
   43974      forth).  Later, more work on MT-safe string and shadow headers.
   43975 
   43976    * Felix Natter for documentation on porting libstdc++.
   43977 
   43978    * Nathanael Nerode for cleaning up the configuration/build process.
   43979 
   43980    * NeXT, Inc. donated the front end that supports the Objective-C
   43981      language.
   43982 
   43983    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
   43984      the search engine setup, various documentation fixes and other
   43985      small fixes.
   43986 
   43987    * Geoff Noer for his work on getting cygwin native builds working.
   43988 
   43989    * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
   43990      tracking web pages, GIMPLE tuples, and assorted fixes.
   43991 
   43992    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
   43993      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
   43994      related infrastructure improvements.
   43995 
   43996    * Alexandre Oliva for various build infrastructure improvements,
   43997      scripts and amazing testing work, including keeping libtool issues
   43998      sane and happy.
   43999 
   44000    * Stefan Olsson for work on mt_alloc.
   44001 
   44002    * Melissa O'Neill for various NeXT fixes.
   44003 
   44004    * Rainer Orth for random MIPS work, including improvements to GCC's
   44005      o32 ABI support, improvements to dejagnu's MIPS support, Java
   44006      configuration clean-ups and porting work, and maintaining the
   44007      IRIX, Solaris 2, and Tru64 UNIX ports.
   44008 
   44009    * Hartmut Penner for work on the s390 port.
   44010 
   44011    * Paul Petersen wrote the machine description for the Alliant FX/8.
   44012 
   44013    * Alexandre Petit-Bianco for implementing much of the Java compiler
   44014      and continued Java maintainership.
   44015 
   44016    * Matthias Pfaller for major improvements to the NS32k port.
   44017 
   44018    * Gerald Pfeifer for his direction via the steering committee,
   44019      pointing out lots of problems we need to solve, maintenance of the
   44020      web pages, and taking care of documentation maintenance in general.
   44021 
   44022    * Andrew Pinski for processing bug reports by the dozen.
   44023 
   44024    * Ovidiu Predescu for his work on the Objective-C front end and
   44025      runtime libraries.
   44026 
   44027    * Jerry Quinn for major performance improvements in C++ formatted
   44028      I/O.
   44029 
   44030    * Ken Raeburn for various improvements to checker, MIPS ports and
   44031      various cleanups in the compiler.
   44032 
   44033    * Rolf W. Rasmussen for hacking on AWT.
   44034 
   44035    * David Reese of Sun Microsystems contributed to the Solaris on
   44036      PowerPC port.
   44037 
   44038    * Volker Reichelt for keeping up with the problem reports.
   44039 
   44040    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
   44041      hacking.
   44042 
   44043    * Loren J. Rittle for improvements to libstdc++-v3 including the
   44044      FreeBSD port, threading fixes, thread-related configury changes,
   44045      critical threading documentation, and solutions to really tricky
   44046      I/O problems, as well as keeping GCC properly working on FreeBSD
   44047      and continuous testing.
   44048 
   44049    * Craig Rodrigues for processing tons of bug reports.
   44050 
   44051    * Ola Ro"nnerup for work on mt_alloc.
   44052 
   44053    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
   44054 
   44055    * David Ronis inspired and encouraged Craig to rewrite the G77
   44056      documentation in texinfo format by contributing a first pass at a
   44057      translation of the old `g77-0.5.16/f/DOC' file.
   44058 
   44059    * Ken Rose for fixes to GCC's delay slot filling code.
   44060 
   44061    * Paul Rubin wrote most of the preprocessor.
   44062 
   44063    * Pe'tur Runo'lfsson for major performance improvements in C++
   44064      formatted I/O and large file support in C++ filebuf.
   44065 
   44066    * Chip Salzenberg for libstdc++ patches and improvements to locales,
   44067      traits, Makefiles, libio, libtool hackery, and "long long" support.
   44068 
   44069    * Juha Sarlin for improvements to the H8 code generator.
   44070 
   44071    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
   44072      300.
   44073 
   44074    * Roger Sayle for improvements to constant folding and GCC's RTL
   44075      optimizers as well as for fixing numerous bugs.
   44076 
   44077    * Bradley Schatz for his work on the GCJ FAQ.
   44078 
   44079    * Peter Schauer wrote the code to allow debugging to work on the
   44080      Alpha.
   44081 
   44082    * William Schelter did most of the work on the Intel 80386 support.
   44083 
   44084    * Tobias Schlu"ter for work on GNU Fortran.
   44085 
   44086    * Bernd Schmidt for various code generation improvements and major
   44087      work in the reload pass as well a serving as release manager for
   44088      GCC 2.95.3.
   44089 
   44090    * Peter Schmid for constant testing of libstdc++--especially
   44091      application testing, going above and beyond what was requested for
   44092      the release criteria--and libstdc++ header file tweaks.
   44093 
   44094    * Jason Schroeder for jcf-dump patches.
   44095 
   44096    * Andreas Schwab for his work on the m68k port.
   44097 
   44098    * Lars Segerlund for work on GNU Fortran.
   44099 
   44100    * Dodji Seketeli for numerous C++ bug fixes and debug info
   44101      improvements.
   44102 
   44103    * Joel Sherrill for his direction via the steering committee, RTEMS
   44104      contributions and RTEMS testing.
   44105 
   44106    * Nathan Sidwell for many C++ fixes/improvements.
   44107 
   44108    * Jeffrey Siegal for helping RMS with the original design of GCC,
   44109      some code which handles the parse tree and RTL data structures,
   44110      constant folding and help with the original VAX & m68k ports.
   44111 
   44112    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
   44113      from the LWG (thereby keeping GCC in line with updates from the
   44114      ISO).
   44115 
   44116    * Franz Sirl for his ongoing work with making the PPC port stable
   44117      for GNU/Linux.
   44118 
   44119    * Andrey Slepuhin for assorted AIX hacking.
   44120 
   44121    * Trevor Smigiel for contributing the SPU port.
   44122 
   44123    * Christopher Smith did the port for Convex machines.
   44124 
   44125    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
   44126 
   44127    * Randy Smith finished the Sun FPA support.
   44128 
   44129    * Scott Snyder for queue, iterator, istream, and string fixes and
   44130      libstdc++ testsuite entries.  Also for providing the patch to G77
   44131      to add rudimentary support for `INTEGER*1', `INTEGER*2', and
   44132      `LOGICAL*1'.
   44133 
   44134    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
   44135 
   44136    * Richard Stallman, for writing the original GCC and launching the
   44137      GNU project.
   44138 
   44139    * Jan Stein of the Chalmers Computer Society provided support for
   44140      Genix, as well as part of the 32000 machine description.
   44141 
   44142    * Nigel Stephens for various mips16 related fixes/improvements.
   44143 
   44144    * Jonathan Stone wrote the machine description for the Pyramid
   44145      computer.
   44146 
   44147    * Graham Stott for various infrastructure improvements.
   44148 
   44149    * John Stracke for his Java HTTP protocol fixes.
   44150 
   44151    * Mike Stump for his Elxsi port, G++ contributions over the years
   44152      and more recently his vxworks contributions
   44153 
   44154    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
   44155 
   44156    * Shigeya Suzuki for this fixes for the bsdi platforms.
   44157 
   44158    * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
   44159      support, general configury hacking, fixincludes, etc.
   44160 
   44161    * Holger Teutsch provided the support for the Clipper CPU.
   44162 
   44163    * Gary Thomas for his ongoing work to make the PPC work for
   44164      GNU/Linux.
   44165 
   44166    * Philipp Thomas for random bug fixes throughout the compiler
   44167 
   44168    * Jason Thorpe for thread support in libstdc++ on NetBSD.
   44169 
   44170    * Kresten Krab Thorup wrote the run time support for the Objective-C
   44171      language and the fantastic Java bytecode interpreter.
   44172 
   44173    * Michael Tiemann for random bug fixes, the first instruction
   44174      scheduler, initial C++ support, function integration, NS32k, SPARC
   44175      and M88k machine description work, delay slot scheduling.
   44176 
   44177    * Andreas Tobler for his work porting libgcj to Darwin.
   44178 
   44179    * Teemu Torma for thread safe exception handling support.
   44180 
   44181    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
   44182      definitions, and of the VAX machine description.
   44183 
   44184    * Daniel Towner and Hariharan Sandanagobalane contributed and
   44185      maintain the picoChip port.
   44186 
   44187    * Tom Tromey for internationalization support and for his many Java
   44188      contributions and libgcj maintainership.
   44189 
   44190    * Lassi Tuura for improvements to config.guess to determine HP
   44191      processor types.
   44192 
   44193    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
   44194 
   44195    * Andy Vaught for the design and initial implementation of the GNU
   44196      Fortran front end.
   44197 
   44198    * Brent Verner for work with the libstdc++ cshadow files and their
   44199      associated configure steps.
   44200 
   44201    * Todd Vierling for contributions for NetBSD ports.
   44202 
   44203    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
   44204      guidance.
   44205 
   44206    * Dean Wakerley for converting the install documentation from HTML
   44207      to texinfo in time for GCC 3.0.
   44208 
   44209    * Krister Walfridsson for random bug fixes.
   44210 
   44211    * Feng Wang for contributions to GNU Fortran.
   44212 
   44213    * Stephen M. Webb for time and effort on making libstdc++ shadow
   44214      files work with the tricky Solaris 8+ headers, and for pushing the
   44215      build-time header tree.
   44216 
   44217    * John Wehle for various improvements for the x86 code generator,
   44218      related infrastructure improvements to help x86 code generation,
   44219      value range propagation and other work, WE32k port.
   44220 
   44221    * Ulrich Weigand for work on the s390 port.
   44222 
   44223    * Zack Weinberg for major work on cpplib and various other bug fixes.
   44224 
   44225    * Matt Welsh for help with Linux Threads support in GCJ.
   44226 
   44227    * Urban Widmark for help fixing java.io.
   44228 
   44229    * Mark Wielaard for new Java library code and his work integrating
   44230      with Classpath.
   44231 
   44232    * Dale Wiles helped port GCC to the Tahoe.
   44233 
   44234    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
   44235 
   44236    * Jim Wilson for his direction via the steering committee, tackling
   44237      hard problems in various places that nobody else wanted to work
   44238      on, strength reduction and other loop optimizations.
   44239 
   44240    * Paul Woegerer and Tal Agmon for the CRX port.
   44241 
   44242    * Carlo Wood for various fixes.
   44243 
   44244    * Tom Wood for work on the m88k port.
   44245 
   44246    * Canqun Yang for work on GNU Fortran.
   44247 
   44248    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
   44249      description for the Tron architecture (specifically, the Gmicro).
   44250 
   44251    * Kevin Zachmann helped port GCC to the Tahoe.
   44252 
   44253    * Ayal Zaks for Swing Modulo Scheduling (SMS).
   44254 
   44255    * Xiaoqiang Zhang for work on GNU Fortran.
   44256 
   44257    * Gilles Zunino for help porting Java to Irix.
   44258 
   44259 
   44260  The following people are recognized for their contributions to GNAT,
   44261 the Ada front end of GCC:
   44262    * Bernard Banner
   44263 
   44264    * Romain Berrendonner
   44265 
   44266    * Geert Bosch
   44267 
   44268    * Emmanuel Briot
   44269 
   44270    * Joel Brobecker
   44271 
   44272    * Ben Brosgol
   44273 
   44274    * Vincent Celier
   44275 
   44276    * Arnaud Charlet
   44277 
   44278    * Chien Chieng
   44279 
   44280    * Cyrille Comar
   44281 
   44282    * Cyrille Crozes
   44283 
   44284    * Robert Dewar
   44285 
   44286    * Gary Dismukes
   44287 
   44288    * Robert Duff
   44289 
   44290    * Ed Falis
   44291 
   44292    * Ramon Fernandez
   44293 
   44294    * Sam Figueroa
   44295 
   44296    * Vasiliy Fofanov
   44297 
   44298    * Michael Friess
   44299 
   44300    * Franco Gasperoni
   44301 
   44302    * Ted Giering
   44303 
   44304    * Matthew Gingell
   44305 
   44306    * Laurent Guerby
   44307 
   44308    * Jerome Guitton
   44309 
   44310    * Olivier Hainque
   44311 
   44312    * Jerome Hugues
   44313 
   44314    * Hristian Kirtchev
   44315 
   44316    * Jerome Lambourg
   44317 
   44318    * Bruno Leclerc
   44319 
   44320    * Albert Lee
   44321 
   44322    * Sean McNeil
   44323 
   44324    * Javier Miranda
   44325 
   44326    * Laurent Nana
   44327 
   44328    * Pascal Obry
   44329 
   44330    * Dong-Ik Oh
   44331 
   44332    * Laurent Pautet
   44333 
   44334    * Brett Porter
   44335 
   44336    * Thomas Quinot
   44337 
   44338    * Nicolas Roche
   44339 
   44340    * Pat Rogers
   44341 
   44342    * Jose Ruiz
   44343 
   44344    * Douglas Rupp
   44345 
   44346    * Sergey Rybin
   44347 
   44348    * Gail Schenker
   44349 
   44350    * Ed Schonberg
   44351 
   44352    * Nicolas Setton
   44353 
   44354    * Samuel Tardieu
   44355 
   44356 
   44357  The following people are recognized for their contributions of new
   44358 features, bug reports, testing and integration of classpath/libgcj for
   44359 GCC version 4.1:
   44360    * Lillian Angel for `JTree' implementation and lots Free Swing
   44361      additions and bug fixes.
   44362 
   44363    * Wolfgang Baer for `GapContent' bug fixes.
   44364 
   44365    * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
   44366      event fixes, lots of Free Swing work including `JTable' editing.
   44367 
   44368    * Stuart Ballard for RMI constant fixes.
   44369 
   44370    * Goffredo Baroncelli for `HTTPURLConnection' fixes.
   44371 
   44372    * Gary Benson for `MessageFormat' fixes.
   44373 
   44374    * Daniel Bonniot for `Serialization' fixes.
   44375 
   44376    * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
   44377      and `DOM xml:id' support.
   44378 
   44379    * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
   44380 
   44381    * Archie Cobbs for build fixes, VM interface updates,
   44382      `URLClassLoader' updates.
   44383 
   44384    * Kelley Cook for build fixes.
   44385 
   44386    * Martin Cordova for Suggestions for better `SocketTimeoutException'.
   44387 
   44388    * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
   44389      and improvements.
   44390 
   44391    * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
   44392      2D support. Lots of imageio framework additions, lots of AWT and
   44393      Free Swing bug fixes.
   44394 
   44395    * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
   44396      fixes, better `Proxy' support, bug fixes and IKVM integration.
   44397 
   44398    * Santiago Gala for `AccessControlContext' fixes.
   44399 
   44400    * Nicolas Geoffray for `VMClassLoader' and `AccessController'
   44401      improvements.
   44402 
   44403    * David Gilbert for `basic' and `metal' icon and plaf support and
   44404      lots of documenting, Lots of Free Swing and metal theme additions.
   44405      `MetalIconFactory' implementation.
   44406 
   44407    * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
   44408 
   44409    * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
   44410      build speedups.
   44411 
   44412    * Kim Ho for `JFileChooser' implementation.
   44413 
   44414    * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
   44415      updates, `Serialization' fixes, `Properties' XML support and
   44416      generic branch work, VMIntegration guide update.
   44417 
   44418    * Bastiaan Huisman for `TimeZone' bug fixing.
   44419 
   44420    * Andreas Jaeger for mprec updates.
   44421 
   44422    * Paul Jenner for better `-Werror' support.
   44423 
   44424    * Ito Kazumitsu for `NetworkInterface' implementation and updates.
   44425 
   44426    * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
   44427      bug fixes all over. Lots of Free Swing work including styled text.
   44428 
   44429    * Simon Kitching for `String' cleanups and optimization suggestions.
   44430 
   44431    * Michael Koch for configuration fixes, `Locale' updates, bug and
   44432      build fixes.
   44433 
   44434    * Guilhem Lavaux for configuration, thread and channel fixes and
   44435      Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
   44436 
   44437    * David Lichteblau for JCL support library global/local reference
   44438      cleanups.
   44439 
   44440    * Aaron Luchko for JDWP updates and documentation fixes.
   44441 
   44442    * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
   44443      features.
   44444 
   44445    * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
   44446      fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
   44447      and implementing the Qt4 peers.
   44448 
   44449    * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
   44450      `SystemLogger' and `FileHandler' rotate implementations, NIO
   44451      `FileChannel.map' support, security and policy updates.
   44452 
   44453    * Bryce McKinlay for RMI work.
   44454 
   44455    * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
   44456      testing and documenting.
   44457 
   44458    * Kalle Olavi Niemitalo for build fixes.
   44459 
   44460    * Rainer Orth for build fixes.
   44461 
   44462    * Andrew Overholt for `File' locking fixes.
   44463 
   44464    * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
   44465 
   44466    * Olga Rodimina for `MenuSelectionManager' implementation.
   44467 
   44468    * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
   44469 
   44470    * Julian Scheid for documentation updates and gjdoc support.
   44471 
   44472    * Christian Schlichtherle for zip fixes and cleanups.
   44473 
   44474    * Robert Schuster for documentation updates and beans fixes,
   44475      `TreeNode' enumerations and `ActionCommand' and various fixes, XML
   44476      and URL, AWT and Free Swing bug fixes.
   44477 
   44478    * Keith Seitz for lots of JDWP work.
   44479 
   44480    * Christian Thalinger for 64-bit cleanups, Configuration and VM
   44481      interface fixes and `CACAO' integration, `fdlibm' updates.
   44482 
   44483    * Gael Thomas for `VMClassLoader' boot packages support suggestions.
   44484 
   44485    * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
   44486      support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
   44487 
   44488    * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
   44489      integration. `Qt4' build infrastructure, `SHA1PRNG' and
   44490      `GdkPixbugDecoder' updates.
   44491 
   44492    * Tom Tromey for Eclipse integration, generics work, lots of bug
   44493      fixes and gcj integration including coordinating The Big Merge.
   44494 
   44495    * Mark Wielaard for bug fixes, packaging and release management,
   44496      `Clipboard' implementation, system call interrupts and network
   44497      timeouts and `GdkPixpufDecoder' fixes.
   44498 
   44499 
   44500  In addition to the above, all of which also contributed time and
   44501 energy in testing GCC, we would like to thank the following for their
   44502 contributions to testing:
   44503 
   44504    * Michael Abd-El-Malek
   44505 
   44506    * Thomas Arend
   44507 
   44508    * Bonzo Armstrong
   44509 
   44510    * Steven Ashe
   44511 
   44512    * Chris Baldwin
   44513 
   44514    * David Billinghurst
   44515 
   44516    * Jim Blandy
   44517 
   44518    * Stephane Bortzmeyer
   44519 
   44520    * Horst von Brand
   44521 
   44522    * Frank Braun
   44523 
   44524    * Rodney Brown
   44525 
   44526    * Sidney Cadot
   44527 
   44528    * Bradford Castalia
   44529 
   44530    * Robert Clark
   44531 
   44532    * Jonathan Corbet
   44533 
   44534    * Ralph Doncaster
   44535 
   44536    * Richard Emberson
   44537 
   44538    * Levente Farkas
   44539 
   44540    * Graham Fawcett
   44541 
   44542    * Mark Fernyhough
   44543 
   44544    * Robert A. French
   44545 
   44546    * Jo"rgen Freyh
   44547 
   44548    * Mark K. Gardner
   44549 
   44550    * Charles-Antoine Gauthier
   44551 
   44552    * Yung Shing Gene
   44553 
   44554    * David Gilbert
   44555 
   44556    * Simon Gornall
   44557 
   44558    * Fred Gray
   44559 
   44560    * John Griffin
   44561 
   44562    * Patrik Hagglund
   44563 
   44564    * Phil Hargett
   44565 
   44566    * Amancio Hasty
   44567 
   44568    * Takafumi Hayashi
   44569 
   44570    * Bryan W. Headley
   44571 
   44572    * Kevin B. Hendricks
   44573 
   44574    * Joep Jansen
   44575 
   44576    * Christian Joensson
   44577 
   44578    * Michel Kern
   44579 
   44580    * David Kidd
   44581 
   44582    * Tobias Kuipers
   44583 
   44584    * Anand Krishnaswamy
   44585 
   44586    * A. O. V. Le Blanc
   44587 
   44588    * llewelly
   44589 
   44590    * Damon Love
   44591 
   44592    * Brad Lucier
   44593 
   44594    * Matthias Klose
   44595 
   44596    * Martin Knoblauch
   44597 
   44598    * Rick Lutowski
   44599 
   44600    * Jesse Macnish
   44601 
   44602    * Stefan Morrell
   44603 
   44604    * Anon A. Mous
   44605 
   44606    * Matthias Mueller
   44607 
   44608    * Pekka Nikander
   44609 
   44610    * Rick Niles
   44611 
   44612    * Jon Olson
   44613 
   44614    * Magnus Persson
   44615 
   44616    * Chris Pollard
   44617 
   44618    * Richard Polton
   44619 
   44620    * Derk Reefman
   44621 
   44622    * David Rees
   44623 
   44624    * Paul Reilly
   44625 
   44626    * Tom Reilly
   44627 
   44628    * Torsten Rueger
   44629 
   44630    * Danny Sadinoff
   44631 
   44632    * Marc Schifer
   44633 
   44634    * Erik Schnetter
   44635 
   44636    * Wayne K. Schroll
   44637 
   44638    * David Schuler
   44639 
   44640    * Vin Shelton
   44641 
   44642    * Tim Souder
   44643 
   44644    * Adam Sulmicki
   44645 
   44646    * Bill Thorson
   44647 
   44648    * George Talbot
   44649 
   44650    * Pedro A. M. Vazquez
   44651 
   44652    * Gregory Warnes
   44653 
   44654    * Ian Watson
   44655 
   44656    * David E. Young
   44657 
   44658    * And many others
   44659 
   44660  And finally we'd like to thank everyone who uses the compiler, provides
   44661 feedback and generally reminds us why we're doing this work in the first
   44662 place.
   44663 
   44664 
   44665 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
   44666 
   44667 Option Index
   44668 ************
   44669 
   44670 GCC's command line options are indexed here without any initial `-' or
   44671 `--'.  Where an option has both positive and negative forms (such as
   44672 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
   44673 indexed under the most appropriate form; it may sometimes be useful to
   44674 look up both forms.
   44675 
   44676 [index]
   44677 * Menu:
   44678 
   44679 * ###:                                   Overall Options.    (line  209)
   44680 * -fno-keep-inline-dllexport:            Optimize Options.   (line  305)
   44681 * -fprofile-generate-sampling:           Optimize Options.   (line 1773)
   44682 * -mcpu:                                 RX Options.         (line   30)
   44683 * -Wno-thread-attr-bind-param:           Warning Options.    (line  606)
   44684 * -Wno-thread-mismatched-lock-acq-rel:   Warning Options.    (line  594)
   44685 * -Wno-thread-mismatched-lock-order:     Warning Options.    (line  589)
   44686 * -Wno-thread-reentrant-lock:            Warning Options.    (line  598)
   44687 * -Wno-thread-unguarded-func:            Warning Options.    (line  584)
   44688 * -Wno-thread-unguarded-var:             Warning Options.    (line  579)
   44689 * -Wno-thread-unsupported-lock-name:     Warning Options.    (line  602)
   44690 * -Wthread-attr-bind-param:              Warning Options.    (line  606)
   44691 * -Wthread-mismatched-lock-acq-rel:      Warning Options.    (line  594)
   44692 * -Wthread-mismatched-lock-order:        Warning Options.    (line  589)
   44693 * -Wthread-reentrant-lock:               Warning Options.    (line  598)
   44694 * -Wthread-unguarded-func:               Warning Options.    (line  584)
   44695 * -Wthread-unguarded-var:                Warning Options.    (line  579)
   44696 * -Wthread-unsupported-lock-name:        Warning Options.    (line  602)
   44697 * 8bit-idiv:                             i386 and x86-64 Options.
   44698                                                              (line  680)
   44699 * A:                                     Preprocessor Options.
   44700                                                              (line  551)
   44701 * all_load:                              Darwin Options.     (line  112)
   44702 * allowable_client:                      Darwin Options.     (line  199)
   44703 * ansi <1>:                              Non-bugs.           (line  107)
   44704 * ansi <2>:                              Other Builtins.     (line   22)
   44705 * ansi <3>:                              Preprocessor Options.
   44706                                                              (line  326)
   44707 * ansi <4>:                              C Dialect Options.  (line   11)
   44708 * ansi:                                  Standards.          (line   16)
   44709 * arch_errors_fatal:                     Darwin Options.     (line  116)
   44710 * aux-info:                              C Dialect Options.  (line  154)
   44711 * avx256-split-unaligned-load:           i386 and x86-64 Options.
   44712                                                              (line  689)
   44713 * avx256-split-unaligned-store:          i386 and x86-64 Options.
   44714                                                              (line  689)
   44715 * B:                                     Directory Options.  (line   46)
   44716 * Bdynamic:                              VxWorks Options.    (line   22)
   44717 * bind_at_load:                          Darwin Options.     (line  120)
   44718 * Bstatic:                               VxWorks Options.    (line   22)
   44719 * bundle:                                Darwin Options.     (line  125)
   44720 * bundle_loader:                         Darwin Options.     (line  129)
   44721 * c:                                     Link Options.       (line   20)
   44722 * C:                                     Preprocessor Options.
   44723                                                              (line  609)
   44724 * c:                                     Overall Options.    (line  164)
   44725 * canonical-prefixes:                    Overall Options.    (line  338)
   44726 * client_name:                           Darwin Options.     (line  199)
   44727 * compatibility_version:                 Darwin Options.     (line  199)
   44728 * coverage:                              Debugging Options.  (line  371)
   44729 * current_version:                       Darwin Options.     (line  199)
   44730 * D:                                     Preprocessor Options.
   44731                                                              (line   34)
   44732 * d:                                     Debugging Options.  (line  497)
   44733 * dA:                                    Debugging Options.  (line  704)
   44734 * dD <1>:                                Preprocessor Options.
   44735                                                              (line  583)
   44736 * dD:                                    Debugging Options.  (line  708)
   44737 * dead_strip:                            Darwin Options.     (line  199)
   44738 * dependency-file:                       Darwin Options.     (line  199)
   44739 * dH:                                    Debugging Options.  (line  712)
   44740 * dI:                                    Preprocessor Options.
   44741                                                              (line  592)
   44742 * dM:                                    Preprocessor Options.
   44743                                                              (line  567)
   44744 * dm:                                    Debugging Options.  (line  715)
   44745 * dN:                                    Preprocessor Options.
   44746                                                              (line  589)
   44747 * dP:                                    Debugging Options.  (line  724)
   44748 * dp:                                    Debugging Options.  (line  719)
   44749 * dU:                                    Preprocessor Options.
   44750                                                              (line  596)
   44751 * dumpmachine:                           Debugging Options.  (line 1203)
   44752 * dumpspecs:                             Debugging Options.  (line 1211)
   44753 * dumpversion:                           Debugging Options.  (line 1207)
   44754 * dv:                                    Debugging Options.  (line  728)
   44755 * dx:                                    Debugging Options.  (line  733)
   44756 * dylib_file:                            Darwin Options.     (line  199)
   44757 * dylinker_install_name:                 Darwin Options.     (line  199)
   44758 * dynamic:                               Darwin Options.     (line  199)
   44759 * dynamiclib:                            Darwin Options.     (line  133)
   44760 * E <1>:                                 Link Options.       (line   20)
   44761 * E:                                     Overall Options.    (line  185)
   44762 * EB <1>:                                MIPS Options.       (line    7)
   44763 * EB:                                    ARC Options.        (line   12)
   44764 * EL <1>:                                MIPS Options.       (line   10)
   44765 * EL:                                    ARC Options.        (line    9)
   44766 * exported_symbols_list:                 Darwin Options.     (line  199)
   44767 * F:                                     Darwin Options.     (line   32)
   44768 * fabi-version:                          C++ Dialect Options.
   44769                                                              (line   20)
   44770 * falign-functions:                      Optimize Options.   (line 1394)
   44771 * falign-jumps:                          Optimize Options.   (line 1444)
   44772 * falign-labels:                         Optimize Options.   (line 1412)
   44773 * falign-loops:                          Optimize Options.   (line 1430)
   44774 * fassociative-math:                     Optimize Options.   (line 1965)
   44775 * fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
   44776 * fauto-inc-dec:                         Optimize Options.   (line  510)
   44777 * fbounds-check:                         Code Gen Options.   (line   15)
   44778 * fbranch-probabilities:                 Optimize Options.   (line 2098)
   44779 * fbranch-target-load-optimize:          Optimize Options.   (line 2209)
   44780 * fbranch-target-load-optimize2:         Optimize Options.   (line 2215)
   44781 * fbtr-bb-exclusive:                     Optimize Options.   (line 2219)
   44782 * fcall-saved:                           Code Gen Options.   (line  262)
   44783 * fcall-used:                            Code Gen Options.   (line  248)
   44784 * fcaller-saves:                         Optimize Options.   (line  779)
   44785 * fcallgraph-profiles-sections:          Optimize Options.   (line 1863)
   44786 * fcheck-data-deps:                      Optimize Options.   (line 1052)
   44787 * fcheck-new:                            C++ Dialect Options.
   44788                                                              (line   45)
   44789 * fcombine-stack-adjustments:            Optimize Options.   (line  792)
   44790 * fcommon:                               Variable Attributes.
   44791                                                              (line  105)
   44792 * fcompare-debug:                        Debugging Options.  (line  160)
   44793 * fcompare-debug-second:                 Debugging Options.  (line  186)
   44794 * fcompare-elim:                         Optimize Options.   (line 1714)
   44795 * fcond-mismatch:                        C Dialect Options.  (line  290)
   44796 * fconserve-space:                       C++ Dialect Options.
   44797                                                              (line   55)
   44798 * fconserve-stack:                       Optimize Options.   (line  798)
   44799 * fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
   44800                                                              (line   30)
   44801 * fconstexpr-depth:                      C++ Dialect Options.
   44802                                                              (line   67)
   44803 * fcprop-registers:                      Optimize Options.   (line 1736)
   44804 * fcrossjumping:                         Optimize Options.   (line  503)
   44805 * fcse-follow-jumps:                     Optimize Options.   (line  431)
   44806 * fcse-skip-blocks:                      Optimize Options.   (line  440)
   44807 * fcx-fortran-rules:                     Optimize Options.   (line 2079)
   44808 * fcx-limited-range:                     Optimize Options.   (line 2067)
   44809 * fdata-sections:                        Optimize Options.   (line 2190)
   44810 * fdbg-cnt:                              Debugging Options.  (line  424)
   44811 * fdbg-cnt-list:                         Debugging Options.  (line  421)
   44812 * fdce:                                  Optimize Options.   (line  516)
   44813 * fdebug-prefix-map:                     Debugging Options.  (line  287)
   44814 * fdelayed-branch:                       Optimize Options.   (line  628)
   44815 * fdelete-null-pointer-checks:           Optimize Options.   (line  539)
   44816 * fdevirtualize:                         Optimize Options.   (line  557)
   44817 * fdiagnostics-show-location:            Language Independent Options.
   44818                                                              (line   21)
   44819 * fdiagnostics-show-option:              Language Independent Options.
   44820                                                              (line   36)
   44821 * fdirectives-only:                      Preprocessor Options.
   44822                                                              (line  459)
   44823 * fdisable-:                             Debugging Options.  (line  434)
   44824 * fdollars-in-identifiers <1>:           Interoperation.     (line  146)
   44825 * fdollars-in-identifiers:               Preprocessor Options.
   44826                                                              (line  481)
   44827 * fdse:                                  Optimize Options.   (line  520)
   44828 * fdump-class-hierarchy:                 Debugging Options.  (line  764)
   44829 * fdump-final-insns:                     Debugging Options.  (line  154)
   44830 * fdump-ipa:                             Debugging Options.  (line  772)
   44831 * fdump-noaddr:                          Debugging Options.  (line  737)
   44832 * fdump-passes:                          Debugging Options.  (line  790)
   44833 * fdump-rtl-alignments:                  Debugging Options.  (line  516)
   44834 * fdump-rtl-all:                         Debugging Options.  (line  701)
   44835 * fdump-rtl-asmcons:                     Debugging Options.  (line  519)
   44836 * fdump-rtl-auto_inc_dec:                Debugging Options.  (line  523)
   44837 * fdump-rtl-barriers:                    Debugging Options.  (line  527)
   44838 * fdump-rtl-bbpart:                      Debugging Options.  (line  530)
   44839 * fdump-rtl-bbro:                        Debugging Options.  (line  533)
   44840 * fdump-rtl-btl2:                        Debugging Options.  (line  537)
   44841 * fdump-rtl-bypass:                      Debugging Options.  (line  541)
   44842 * fdump-rtl-ce1:                         Debugging Options.  (line  552)
   44843 * fdump-rtl-ce2:                         Debugging Options.  (line  552)
   44844 * fdump-rtl-ce3:                         Debugging Options.  (line  552)
   44845 * fdump-rtl-combine:                     Debugging Options.  (line  544)
   44846 * fdump-rtl-compgotos:                   Debugging Options.  (line  547)
   44847 * fdump-rtl-cprop_hardreg:               Debugging Options.  (line  556)
   44848 * fdump-rtl-csa:                         Debugging Options.  (line  559)
   44849 * fdump-rtl-cse1:                        Debugging Options.  (line  563)
   44850 * fdump-rtl-cse2:                        Debugging Options.  (line  563)
   44851 * fdump-rtl-dbr:                         Debugging Options.  (line  570)
   44852 * fdump-rtl-dce:                         Debugging Options.  (line  567)
   44853 * fdump-rtl-dce1:                        Debugging Options.  (line  574)
   44854 * fdump-rtl-dce2:                        Debugging Options.  (line  574)
   44855 * fdump-rtl-dfinish:                     Debugging Options.  (line  698)
   44856 * fdump-rtl-dfinit:                      Debugging Options.  (line  698)
   44857 * fdump-rtl-eh:                          Debugging Options.  (line  578)
   44858 * fdump-rtl-eh_ranges:                   Debugging Options.  (line  581)
   44859 * fdump-rtl-expand:                      Debugging Options.  (line  584)
   44860 * fdump-rtl-fwprop1:                     Debugging Options.  (line  588)
   44861 * fdump-rtl-fwprop2:                     Debugging Options.  (line  588)
   44862 * fdump-rtl-gcse1:                       Debugging Options.  (line  593)
   44863 * fdump-rtl-gcse2:                       Debugging Options.  (line  593)
   44864 * fdump-rtl-init-regs:                   Debugging Options.  (line  597)
   44865 * fdump-rtl-initvals:                    Debugging Options.  (line  600)
   44866 * fdump-rtl-into_cfglayout:              Debugging Options.  (line  603)
   44867 * fdump-rtl-ira:                         Debugging Options.  (line  606)
   44868 * fdump-rtl-jump:                        Debugging Options.  (line  609)
   44869 * fdump-rtl-loop2:                       Debugging Options.  (line  612)
   44870 * fdump-rtl-mach:                        Debugging Options.  (line  616)
   44871 * fdump-rtl-mode_sw:                     Debugging Options.  (line  620)
   44872 * fdump-rtl-outof_cfglayout:             Debugging Options.  (line  626)
   44873 * fdump-rtl-peephole2:                   Debugging Options.  (line  629)
   44874 * fdump-rtl-postreload:                  Debugging Options.  (line  632)
   44875 * fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  635)
   44876 * fdump-rtl-regclass:                    Debugging Options.  (line  698)
   44877 * fdump-rtl-regmove:                     Debugging Options.  (line  638)
   44878 * fdump-rtl-rnreg:                       Debugging Options.  (line  623)
   44879 * fdump-rtl-sched1:                      Debugging Options.  (line  642)
   44880 * fdump-rtl-sched2:                      Debugging Options.  (line  642)
   44881 * fdump-rtl-see:                         Debugging Options.  (line  646)
   44882 * fdump-rtl-seqabstr:                    Debugging Options.  (line  649)
   44883 * fdump-rtl-shorten:                     Debugging Options.  (line  652)
   44884 * fdump-rtl-sibling:                     Debugging Options.  (line  655)
   44885 * fdump-rtl-sms:                         Debugging Options.  (line  668)
   44886 * fdump-rtl-split1:                      Debugging Options.  (line  662)
   44887 * fdump-rtl-split2:                      Debugging Options.  (line  662)
   44888 * fdump-rtl-split3:                      Debugging Options.  (line  662)
   44889 * fdump-rtl-split4:                      Debugging Options.  (line  662)
   44890 * fdump-rtl-split5:                      Debugging Options.  (line  662)
   44891 * fdump-rtl-stack:                       Debugging Options.  (line  672)
   44892 * fdump-rtl-subreg1:                     Debugging Options.  (line  678)
   44893 * fdump-rtl-subreg2:                     Debugging Options.  (line  678)
   44894 * fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  698)
   44895 * fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  698)
   44896 * fdump-rtl-unshare:                     Debugging Options.  (line  682)
   44897 * fdump-rtl-vartrack:                    Debugging Options.  (line  685)
   44898 * fdump-rtl-vregs:                       Debugging Options.  (line  688)
   44899 * fdump-rtl-web:                         Debugging Options.  (line  691)
   44900 * fdump-statistics:                      Debugging Options.  (line  794)
   44901 * fdump-translation-unit:                Debugging Options.  (line  755)
   44902 * fdump-tree:                            Debugging Options.  (line  805)
   44903 * fdump-tree-alias:                      Debugging Options.  (line  899)
   44904 * fdump-tree-all:                        Debugging Options.  (line  989)
   44905 * fdump-tree-ccp:                        Debugging Options.  (line  903)
   44906 * fdump-tree-cfg:                        Debugging Options.  (line  879)
   44907 * fdump-tree-ch:                         Debugging Options.  (line  891)
   44908 * fdump-tree-copyprop:                   Debugging Options.  (line  919)
   44909 * fdump-tree-copyrename:                 Debugging Options.  (line  965)
   44910 * fdump-tree-dce:                        Debugging Options.  (line  927)
   44911 * fdump-tree-dom:                        Debugging Options.  (line  945)
   44912 * fdump-tree-dse:                        Debugging Options.  (line  950)
   44913 * fdump-tree-forwprop:                   Debugging Options.  (line  960)
   44914 * fdump-tree-fre:                        Debugging Options.  (line  915)
   44915 * fdump-tree-gimple:                     Debugging Options.  (line  874)
   44916 * fdump-tree-mudflap:                    Debugging Options.  (line  931)
   44917 * fdump-tree-nrv:                        Debugging Options.  (line  970)
   44918 * fdump-tree-optimized:                  Debugging Options.  (line  871)
   44919 * fdump-tree-original:                   Debugging Options.  (line  868)
   44920 * fdump-tree-phiopt:                     Debugging Options.  (line  955)
   44921 * fdump-tree-pre:                        Debugging Options.  (line  911)
   44922 * fdump-tree-sink:                       Debugging Options.  (line  941)
   44923 * fdump-tree-slp:                        Debugging Options.  (line  980)
   44924 * fdump-tree-sra:                        Debugging Options.  (line  936)
   44925 * fdump-tree-ssa:                        Debugging Options.  (line  895)
   44926 * fdump-tree-store_copyprop:             Debugging Options.  (line  923)
   44927 * fdump-tree-storeccp:                   Debugging Options.  (line  907)
   44928 * fdump-tree-vcg:                        Debugging Options.  (line  883)
   44929 * fdump-tree-vect:                       Debugging Options.  (line  975)
   44930 * fdump-tree-vrp:                        Debugging Options.  (line  985)
   44931 * fdump-unnumbered:                      Debugging Options.  (line  743)
   44932 * fdump-unnumbered-links:                Debugging Options.  (line  749)
   44933 * fdwarf2-cfi-asm:                       Debugging Options.  (line  291)
   44934 * fearly-inlining:                       Optimize Options.   (line  262)
   44935 * feliminate-dwarf2-dups:                Debugging Options.  (line  199)
   44936 * feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
   44937 * feliminate-unused-debug-types:         Debugging Options.  (line 1215)
   44938 * fenable-:                              Debugging Options.  (line  434)
   44939 * fenable-icf-debug:                     Debugging Options.  (line  274)
   44940 * fexceptions:                           Code Gen Options.   (line   34)
   44941 * fexcess-precision:                     Optimize Options.   (line 1893)
   44942 * fexec-charset:                         Preprocessor Options.
   44943                                                              (line  508)
   44944 * fexpensive-optimizations:              Optimize Options.   (line  564)
   44945 * fextended-identifiers:                 Preprocessor Options.
   44946                                                              (line  484)
   44947 * ffast-math:                            Optimize Options.   (line 1916)
   44948 * ffinite-math-only:                     Optimize Options.   (line 1991)
   44949 * ffix-and-continue:                     Darwin Options.     (line  106)
   44950 * ffixed:                                Code Gen Options.   (line  236)
   44951 * ffloat-store <1>:                      Disappointments.    (line   77)
   44952 * ffloat-store:                          Optimize Options.   (line 1879)
   44953 * ffor-scope:                            C++ Dialect Options.
   44954                                                              (line  121)
   44955 * fforward-propagate:                    Optimize Options.   (line  174)
   44956 * ffp-contract:                          Optimize Options.   (line  183)
   44957 * ffreestanding <1>:                     Function Attributes.
   44958                                                              (line  459)
   44959 * ffreestanding <2>:                     Warning Options.    (line  240)
   44960 * ffreestanding <3>:                     C Dialect Options.  (line  225)
   44961 * ffreestanding:                         Standards.          (line   88)
   44962 * ffriend-injection:                     C++ Dialect Options.
   44963                                                              (line   91)
   44964 * ffunction-sections:                    Optimize Options.   (line 2190)
   44965 * fgcse:                                 Optimize Options.   (line  454)
   44966 * fgcse-after-reload:                    Optimize Options.   (line  490)
   44967 * fgcse-las:                             Optimize Options.   (line  483)
   44968 * fgcse-lm:                              Optimize Options.   (line  465)
   44969 * fgcse-sm:                              Optimize Options.   (line  474)
   44970 * fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
   44971                                                              (line   39)
   44972 * fgnu89-inline:                         C Dialect Options.  (line  133)
   44973 * fgraphite-identity:                    Optimize Options.   (line 1033)
   44974 * fhosted:                               C Dialect Options.  (line  218)
   44975 * fif-conversion:                        Optimize Options.   (line  524)
   44976 * fif-conversion2:                       Optimize Options.   (line  533)
   44977 * filelist:                              Darwin Options.     (line  199)
   44978 * findirect-data:                        Darwin Options.     (line  106)
   44979 * findirect-inlining:                    Optimize Options.   (line  235)
   44980 * finhibit-size-directive:               Code Gen Options.   (line  158)
   44981 * finline-functions:                     Optimize Options.   (line  243)
   44982 * finline-functions-called-once:         Optimize Options.   (line  254)
   44983 * finline-limit:                         Optimize Options.   (line  279)
   44984 * finline-small-functions:               Optimize Options.   (line  227)
   44985 * finput-charset:                        Preprocessor Options.
   44986                                                              (line  521)
   44987 * finstrument-functions <1>:             Function Attributes.
   44988                                                              (line  899)
   44989 * finstrument-functions:                 Code Gen Options.   (line  292)
   44990 * finstrument-functions-exclude-file-list: Code Gen Options. (line  329)
   44991 * finstrument-functions-exclude-function-list: Code Gen Options.
   44992                                                              (line  349)
   44993 * fipa-cp:                               Optimize Options.   (line  868)
   44994 * fipa-cp-clone:                         Optimize Options.   (line  876)
   44995 * fipa-matrix-reorg:                     Optimize Options.   (line  886)
   44996 * fipa-profile:                          Optimize Options.   (line  860)
   44997 * fipa-pta:                              Optimize Options.   (line  854)
   44998 * fipa-pure-const:                       Optimize Options.   (line  832)
   44999 * fipa-reference:                        Optimize Options.   (line  836)
   45000 * fipa-sra:                              Optimize Options.   (line  272)
   45001 * fipa-struct-reorg:                     Optimize Options.   (line  840)
   45002 * fira-loop-pressure:                    Optimize Options.   (line  603)
   45003 * fira-verbose:                          Optimize Options.   (line  623)
   45004 * fivopts:                               Optimize Options.   (line 1128)
   45005 * fkeep-inline-functions <1>:            Inline.             (line   51)
   45006 * fkeep-inline-functions:                Optimize Options.   (line  311)
   45007 * fkeep-static-consts:                   Optimize Options.   (line  318)
   45008 * flat_namespace:                        Darwin Options.     (line  199)
   45009 * flax-vector-conversions:               C Dialect Options.  (line  295)
   45010 * fleading-underscore:                   Code Gen Options.   (line  432)
   45011 * floop-block:                           Optimize Options.   (line 1004)
   45012 * floop-flatten:                         Optimize Options.   (line 1041)
   45013 * floop-interchange:                     Optimize Options.   (line  957)
   45014 * floop-parallelize-all:                 Optimize Options.   (line 1046)
   45015 * floop-strip-mine:                      Optimize Options.   (line  982)
   45016 * flto:                                  Optimize Options.   (line 1508)
   45017 * flto-partition:                        Optimize Options.   (line 1672)
   45018 * fmax-errors:                           Warning Options.    (line   18)
   45019 * fmem-report:                           Debugging Options.  (line  315)
   45020 * fmerge-all-constants:                  Optimize Options.   (line  337)
   45021 * fmerge-constants:                      Optimize Options.   (line  327)
   45022 * fmerge-debug-strings:                  Debugging Options.  (line  279)
   45023 * fmessage-length:                       Language Independent Options.
   45024                                                              (line   15)
   45025 * fmodulo-sched:                         Optimize Options.   (line  348)
   45026 * fmodulo-sched-allow-regmoves:          Optimize Options.   (line  353)
   45027 * fmove-loop-invariants:                 Optimize Options.   (line 2180)
   45028 * fms-extensions <1>:                    Unnamed Fields.     (line   36)
   45029 * fms-extensions <2>:                    C++ Dialect Options.
   45030                                                              (line  156)
   45031 * fms-extensions:                        C Dialect Options.  (line  243)
   45032 * fmudflap:                              Optimize Options.   (line  393)
   45033 * fmudflapir:                            Optimize Options.   (line  393)
   45034 * fmudflapth:                            Optimize Options.   (line  393)
   45035 * fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
   45036                                                              (line   43)
   45037 * fno-access-control:                    C++ Dialect Options.
   45038                                                              (line   41)
   45039 * fno-asm:                               C Dialect Options.  (line  170)
   45040 * fno-branch-count-reg:                  Optimize Options.   (line  360)
   45041 * fno-builtin <1>:                       Other Builtins.     (line   14)
   45042 * fno-builtin <2>:                       Function Attributes.
   45043                                                              (line  459)
   45044 * fno-builtin <3>:                       Warning Options.    (line  240)
   45045 * fno-builtin:                           C Dialect Options.  (line  184)
   45046 * fno-common <1>:                        Variable Attributes.
   45047                                                              (line  105)
   45048 * fno-common:                            Code Gen Options.   (line  135)
   45049 * fno-compare-debug:                     Debugging Options.  (line  160)
   45050 * fno-deduce-init-list:                  C++ Dialect Options.
   45051                                                              (line   73)
   45052 * fno-default-inline <1>:                Inline.             (line   71)
   45053 * fno-default-inline <2>:                Optimize Options.   (line  159)
   45054 * fno-default-inline:                    C++ Dialect Options.
   45055                                                              (line  330)
   45056 * fno-defer-pop:                         Optimize Options.   (line  166)
   45057 * fno-diagnostics-show-option:           Language Independent Options.
   45058                                                              (line   36)
   45059 * fno-dwarf2-cfi-asm:                    Debugging Options.  (line  291)
   45060 * fno-elide-constructors:                C++ Dialect Options.
   45061                                                              (line  104)
   45062 * fno-enforce-eh-specs:                  C++ Dialect Options.
   45063                                                              (line  110)
   45064 * fno-for-scope:                         C++ Dialect Options.
   45065                                                              (line  121)
   45066 * fno-function-cse:                      Optimize Options.   (line  370)
   45067 * fno-gnu-keywords:                      C++ Dialect Options.
   45068                                                              (line  133)
   45069 * fno-guess-branch-probability:          Optimize Options.   (line 1266)
   45070 * fno-ident:                             Code Gen Options.   (line  155)
   45071 * fno-implement-inlines <1>:             C++ Interface.      (line   75)
   45072 * fno-implement-inlines:                 C++ Dialect Options.
   45073                                                              (line  150)
   45074 * fno-implicit-inline-templates:         C++ Dialect Options.
   45075                                                              (line  144)
   45076 * fno-implicit-templates <1>:            Template Instantiation.
   45077                                                              (line   87)
   45078 * fno-implicit-templates:                C++ Dialect Options.
   45079                                                              (line  138)
   45080 * fno-inline:                            Optimize Options.   (line  221)
   45081 * fno-ira-share-save-slots:              Optimize Options.   (line  611)
   45082 * fno-ira-share-spill-slots:             Optimize Options.   (line  617)
   45083 * fno-jump-tables:                       Code Gen Options.   (line  228)
   45084 * fno-math-errno:                        Optimize Options.   (line 1930)
   45085 * fno-merge-debug-strings:               Debugging Options.  (line  279)
   45086 * fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
   45087                                                              (line   49)
   45088 * fno-nonansi-builtins:                  C++ Dialect Options.
   45089                                                              (line  161)
   45090 * fno-operator-names:                    C++ Dialect Options.
   45091                                                              (line  177)
   45092 * fno-optional-diags:                    C++ Dialect Options.
   45093                                                              (line  181)
   45094 * fno-peephole:                          Optimize Options.   (line 1257)
   45095 * fno-peephole2:                         Optimize Options.   (line 1257)
   45096 * fno-pretty-templates:                  C++ Dialect Options.
   45097                                                              (line  191)
   45098 * fno-rtti:                              C++ Dialect Options.
   45099                                                              (line  209)
   45100 * fno-sched-interblock:                  Optimize Options.   (line  654)
   45101 * fno-sched-spec:                        Optimize Options.   (line  659)
   45102 * fno-set-stack-executable:              i386 and x86-64 Windows Options.
   45103                                                              (line   46)
   45104 * fno-show-column:                       Preprocessor Options.
   45105                                                              (line  546)
   45106 * fno-signed-bitfields:                  C Dialect Options.  (line  328)
   45107 * fno-signed-zeros:                      Optimize Options.   (line 2003)
   45108 * fno-stack-limit:                       Code Gen Options.   (line  400)
   45109 * fno-threadsafe-statics:                C++ Dialect Options.
   45110                                                              (line  240)
   45111 * fno-toplevel-reorder:                  Optimize Options.   (line 1464)
   45112 * fno-trapping-math:                     Optimize Options.   (line 2013)
   45113 * fno-unsigned-bitfields:                C Dialect Options.  (line  328)
   45114 * fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
   45115                                                              (line  253)
   45116 * fno-var-tracking-assignments:          Debugging Options.  (line 1126)
   45117 * fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1136)
   45118 * fno-weak:                              C++ Dialect Options.
   45119                                                              (line  315)
   45120 * fno-working-directory:                 Preprocessor Options.
   45121                                                              (line  531)
   45122 * fno-zero-initialized-in-bss:           Optimize Options.   (line  381)
   45123 * fnon-call-exceptions:                  Code Gen Options.   (line   48)
   45124 * fnothrow-opt:                          C++ Dialect Options.
   45125                                                              (line  166)
   45126 * fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
   45127                                                              (line   56)
   45128 * fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
   45129                                                              (line   67)
   45130 * fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
   45131                                                              (line   92)
   45132 * fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
   45133                                                              (line   96)
   45134 * fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
   45135                                                              (line  105)
   45136 * fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
   45137                                                              (line  111)
   45138 * fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
   45139                                                              (line  120)
   45140 * fomit-frame-pointer:                   Optimize Options.   (line  194)
   45141 * fopenmp:                               C Dialect Options.  (line  235)
   45142 * foptimize-register-move:               Optimize Options.   (line  571)
   45143 * foptimize-sibling-calls:               Optimize Options.   (line  216)
   45144 * force_cpusubtype_ALL:                  Darwin Options.     (line  138)
   45145 * force_flat_namespace:                  Darwin Options.     (line  199)
   45146 * fpack-struct:                          Code Gen Options.   (line  279)
   45147 * fpartial-inlining:                     Optimize Options.   (line 1232)
   45148 * fpcc-struct-return <1>:                Incompatibilities.  (line  170)
   45149 * fpcc-struct-return:                    Code Gen Options.   (line   70)
   45150 * fpch-deps:                             Preprocessor Options.
   45151                                                              (line  282)
   45152 * fpch-preprocess:                       Preprocessor Options.
   45153                                                              (line  290)
   45154 * fpeel-loops:                           Optimize Options.   (line 2172)
   45155 * fpermissive:                           C++ Dialect Options.
   45156                                                              (line  186)
   45157 * fPIC:                                  Code Gen Options.   (line  205)
   45158 * fpic:                                  Code Gen Options.   (line  184)
   45159 * fPIE:                                  Code Gen Options.   (line  218)
   45160 * fpie:                                  Code Gen Options.   (line  218)
   45161 * fplan9-extensions:                     Unnamed Fields.     (line   44)
   45162 * fpmu-profile-generate:                 Optimize Options.   (line 1801)
   45163 * fpmu-profile-use:                      Optimize Options.   (line 1812)
   45164 * fpost-ipa-mem-report:                  Debugging Options.  (line  321)
   45165 * fpre-ipa-mem-report:                   Debugging Options.  (line  319)
   45166 * fpredictive-commoning:                 Optimize Options.   (line 1239)
   45167 * fprefetch-loop-arrays:                 Optimize Options.   (line 1246)
   45168 * fpreprocessed:                         Preprocessor Options.
   45169                                                              (line  489)
   45170 * fprofile-arcs <1>:                     Other Builtins.     (line  247)
   45171 * fprofile-arcs:                         Debugging Options.  (line  356)
   45172 * fprofile-correction:                   Optimize Options.   (line 1743)
   45173 * fprofile-dir:                          Optimize Options.   (line 1750)
   45174 * fprofile-generate:                     Optimize Options.   (line 1761)
   45175 * fprofile-use:                          Optimize Options.   (line 1786)
   45176 * fprofile-values:                       Optimize Options.   (line 2121)
   45177 * fpu:                                   RX Options.         (line   17)
   45178 * frandom-seed:                          Debugging Options.  (line 1020)
   45179 * freciprocal-math:                      Optimize Options.   (line 1982)
   45180 * frecord-gcc-switches:                  Code Gen Options.   (line  174)
   45181 * frecord-gcc-switches-in-elf:           Optimize Options.   (line 1871)
   45182 * freg-struct-return:                    Code Gen Options.   (line   88)
   45183 * fregmove:                              Optimize Options.   (line  571)
   45184 * frename-registers:                     Optimize Options.   (line 2139)
   45185 * freorder-blocks:                       Optimize Options.   (line 1283)
   45186 * freorder-blocks-and-partition:         Optimize Options.   (line 1289)
   45187 * freorder-functions:                    Optimize Options.   (line 1300)
   45188 * freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
   45189                                                              (line  131)
   45190 * frepo <1>:                             Template Instantiation.
   45191                                                              (line   62)
   45192 * frepo:                                 C++ Dialect Options.
   45193                                                              (line  204)
   45194 * frerun-cse-after-loop:                 Optimize Options.   (line  448)
   45195 * freschedule-modulo-scheduled-loops:    Optimize Options.   (line  755)
   45196 * fripa:                                 Optimize Options.   (line 1817)
   45197 * fripa-disallow-asm-modules:            Optimize Options.   (line 1825)
   45198 * fripa-disallow-opt-mismatch:           Optimize Options.   (line 1833)
   45199 * fripa-no-promote-always-inline-func:   Optimize Options.   (line 1840)
   45200 * fripa-peel-size-limit:                 Optimize Options.   (line 1849)
   45201 * fripa-unroll-size-limit:               Optimize Options.   (line 1856)
   45202 * fripa-verbose:                         Optimize Options.   (line 1844)
   45203 * frounding-math:                        Optimize Options.   (line 2028)
   45204 * fsched-critical-path-heuristic:        Optimize Options.   (line  721)
   45205 * fsched-dep-count-heuristic:            Optimize Options.   (line  748)
   45206 * fsched-group-heuristic:                Optimize Options.   (line  715)
   45207 * fsched-last-insn-heuristic:            Optimize Options.   (line  741)
   45208 * fsched-pressure:                       Optimize Options.   (line  664)
   45209 * fsched-rank-heuristic:                 Optimize Options.   (line  734)
   45210 * fsched-spec-insn-heuristic:            Optimize Options.   (line  727)
   45211 * fsched-spec-load:                      Optimize Options.   (line  673)
   45212 * fsched-spec-load-dangerous:            Optimize Options.   (line  678)
   45213 * fsched-stalled-insns:                  Optimize Options.   (line  684)
   45214 * fsched-stalled-insns-dep:              Optimize Options.   (line  694)
   45215 * fsched-verbose:                        Debugging Options.  (line 1030)
   45216 * fsched2-use-superblocks:               Optimize Options.   (line  704)
   45217 * fschedule-insns:                       Optimize Options.   (line  635)
   45218 * fschedule-insns2:                      Optimize Options.   (line  645)
   45219 * fsection-anchors:                      Optimize Options.   (line 2240)
   45220 * fsel-sched-pipelining:                 Optimize Options.   (line  769)
   45221 * fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  774)
   45222 * fselective-scheduling:                 Optimize Options.   (line  761)
   45223 * fselective-scheduling2:                Optimize Options.   (line  765)
   45224 * fshort-double:                         Code Gen Options.   (line  117)
   45225 * fshort-enums <1>:                      Non-bugs.           (line   42)
   45226 * fshort-enums <2>:                      Type Attributes.    (line  113)
   45227 * fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
   45228                                                              (line   43)
   45229 * fshort-enums:                          Code Gen Options.   (line  106)
   45230 * fshort-wchar:                          Code Gen Options.   (line  125)
   45231 * fsignaling-nans:                       Optimize Options.   (line 2048)
   45232 * fsigned-bitfields <1>:                 Non-bugs.           (line   57)
   45233 * fsigned-bitfields:                     C Dialect Options.  (line  328)
   45234 * fsigned-char <1>:                      Characters implementation.
   45235                                                              (line   31)
   45236 * fsigned-char:                          C Dialect Options.  (line  318)
   45237 * fsingle-precision-constant:            Optimize Options.   (line 2063)
   45238 * fsplit-ivs-in-unroller:                Optimize Options.   (line 1213)
   45239 * fsplit-stack <1>:                      Function Attributes.
   45240                                                              (line  904)
   45241 * fsplit-stack:                          Code Gen Options.   (line  414)
   45242 * fsplit-wide-types:                     Optimize Options.   (line  423)
   45243 * fstack-check:                          Code Gen Options.   (line  361)
   45244 * fstack-limit-register:                 Code Gen Options.   (line  400)
   45245 * fstack-limit-symbol:                   Code Gen Options.   (line  400)
   45246 * fstack-protector:                      Optimize Options.   (line 2223)
   45247 * fstack-protector-all:                  Optimize Options.   (line 2232)
   45248 * fstack-protector-strong:               Optimize Options.   (line 2235)
   45249 * fstack-usage:                          Debugging Options.  (line  325)
   45250 * fstats:                                C++ Dialect Options.
   45251                                                              (line  219)
   45252 * fstrict-aliasing:                      Optimize Options.   (line 1313)
   45253 * fstrict-enums:                         C++ Dialect Options.
   45254                                                              (line  224)
   45255 * fstrict-overflow:                      Optimize Options.   (line 1359)
   45256 * fstrict-volatile-bitfields:            Code Gen Options.   (line  517)
   45257 * fsyntax-only:                          Warning Options.    (line   14)
   45258 * ftabstop:                              Preprocessor Options.
   45259                                                              (line  502)
   45260 * ftemplate-depth:                       C++ Dialect Options.
   45261                                                              (line  233)
   45262 * ftest-coverage:                        Debugging Options.  (line  412)
   45263 * fthread-jumps:                         Optimize Options.   (line  414)
   45264 * ftime-report:                          Debugging Options.  (line  311)
   45265 * ftls-model:                            Code Gen Options.   (line  443)
   45266 * ftracer:                               Optimize Options.   (line 1196)
   45267 * ftrapv:                                Code Gen Options.   (line   22)
   45268 * ftree-bit-ccp:                         Optimize Options.   (line  900)
   45269 * ftree-builtin-call-dce:                Optimize Options.   (line  920)
   45270 * ftree-ccp:                             Optimize Options.   (line  906)
   45271 * ftree-ch:                              Optimize Options.   (line  940)
   45272 * ftree-copy-prop:                       Optimize Options.   (line  827)
   45273 * ftree-copyrename:                      Optimize Options.   (line 1152)
   45274 * ftree-dce:                             Optimize Options.   (line  916)
   45275 * ftree-dominator-opts:                  Optimize Options.   (line  926)
   45276 * ftree-dse:                             Optimize Options.   (line  933)
   45277 * ftree-forwprop:                        Optimize Options.   (line  812)
   45278 * ftree-fre:                             Optimize Options.   (line  816)
   45279 * ftree-loop-im:                         Optimize Options.   (line 1113)
   45280 * ftree-loop-ivcanon:                    Optimize Options.   (line 1122)
   45281 * ftree-loop-linear:                     Optimize Options.   (line  951)
   45282 * ftree-loop-optimize:                   Optimize Options.   (line  947)
   45283 * ftree-parallelize-loops:               Optimize Options.   (line 1133)
   45284 * ftree-phiprop:                         Optimize Options.   (line  823)
   45285 * ftree-pre:                             Optimize Options.   (line  808)
   45286 * ftree-pta:                             Optimize Options.   (line 1142)
   45287 * ftree-reassoc:                         Optimize Options.   (line  804)
   45288 * ftree-sink:                            Optimize Options.   (line  896)
   45289 * ftree-slp-vectorize:                   Optimize Options.   (line 1171)
   45290 * ftree-sra:                             Optimize Options.   (line 1146)
   45291 * ftree-ter:                             Optimize Options.   (line 1159)
   45292 * ftree-vect-loop-version:               Optimize Options.   (line 1175)
   45293 * ftree-vectorize:                       Optimize Options.   (line 1167)
   45294 * ftree-vectorizer-verbose:              Debugging Options.  (line  993)
   45295 * ftree-vrp:                             Optimize Options.   (line 1187)
   45296 * funit-at-a-time:                       Optimize Options.   (line 1457)
   45297 * funroll-all-loops:                     Optimize Options.   (line 1207)
   45298 * funroll-loops:                         Optimize Options.   (line 1201)
   45299 * funsafe-loop-optimizations:            Optimize Options.   (line  495)
   45300 * funsafe-math-optimizations:            Optimize Options.   (line 1948)
   45301 * funsigned-bitfields <1>:               Non-bugs.           (line   57)
   45302 * funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
   45303                                                              (line   17)
   45304 * funsigned-bitfields:                   C Dialect Options.  (line  328)
   45305 * funsigned-char <1>:                    Characters implementation.
   45306                                                              (line   31)
   45307 * funsigned-char:                        C Dialect Options.  (line  300)
   45308 * funswitch-loops:                       Optimize Options.   (line 2184)
   45309 * funwind-tables:                        Code Gen Options.   (line   57)
   45310 * fuse-cxa-atexit:                       C++ Dialect Options.
   45311                                                              (line  246)
   45312 * fvar-tracking:                         Debugging Options.  (line 1116)
   45313 * fvar-tracking-assignments:             Debugging Options.  (line 1126)
   45314 * fvar-tracking-assignments-toggle:      Debugging Options.  (line 1136)
   45315 * fvariable-expansion-in-unroller:       Optimize Options.   (line 1227)
   45316 * fvect-cost-model:                      Optimize Options.   (line 1184)
   45317 * fverbose-asm:                          Code Gen Options.   (line  165)
   45318 * fvisibility:                           Code Gen Options.   (line  451)
   45319 * fvisibility-inlines-hidden:            C++ Dialect Options.
   45320                                                              (line  258)
   45321 * fvisibility-ms-compat:                 C++ Dialect Options.
   45322                                                              (line  286)
   45323 * fvpt:                                  Optimize Options.   (line 2130)
   45324 * fweb:                                  Optimize Options.   (line 1476)
   45325 * fwhole-program:                        Optimize Options.   (line 1487)
   45326 * fwide-exec-charset:                    Preprocessor Options.
   45327                                                              (line  513)
   45328 * fworking-directory:                    Preprocessor Options.
   45329                                                              (line  531)
   45330 * fwrapv:                                Code Gen Options.   (line   26)
   45331 * fzero-link:                            Objective-C and Objective-C++ Dialect Options.
   45332                                                              (line  141)
   45333 * G <1>:                                 System V Options.   (line   10)
   45334 * G <2>:                                 RS/6000 and PowerPC Options.
   45335                                                              (line  703)
   45336 * G <3>:                                 MIPS Options.       (line  315)
   45337 * G:                                     M32R/D Options.     (line   57)
   45338 * g:                                     Debugging Options.  (line   10)
   45339 * gcoff:                                 Debugging Options.  (line   70)
   45340 * gdwarf-VERSION:                        Debugging Options.  (line   88)
   45341 * gen-decls:                             Objective-C and Objective-C++ Dialect Options.
   45342                                                              (line  153)
   45343 * gfull:                                 Darwin Options.     (line   71)
   45344 * ggdb:                                  Debugging Options.  (line   38)
   45345 * gmlt:                                  Debugging Options.  (line  142)
   45346 * gno-strict-dwarf:                      Debugging Options.  (line  105)
   45347 * gstabs:                                Debugging Options.  (line   44)
   45348 * gstabs+:                               Debugging Options.  (line   64)
   45349 * gstrict-dwarf:                         Debugging Options.  (line   99)
   45350 * gtoggle:                               Debugging Options.  (line  146)
   45351 * gused:                                 Darwin Options.     (line   66)
   45352 * gvms:                                  Debugging Options.  (line  109)
   45353 * gxcoff:                                Debugging Options.  (line   75)
   45354 * gxcoff+:                               Debugging Options.  (line   80)
   45355 * H:                                     Preprocessor Options.
   45356                                                              (line  664)
   45357 * headerpad_max_install_names:           Darwin Options.     (line  199)
   45358 * help <1>:                              Preprocessor Options.
   45359                                                              (line  656)
   45360 * help:                                  Overall Options.    (line  221)
   45361 * I <1>:                                 Directory Options.  (line   10)
   45362 * I:                                     Preprocessor Options.
   45363                                                              (line   65)
   45364 * I- <1>:                                Directory Options.  (line  112)
   45365 * I-:                                    Preprocessor Options.
   45366                                                              (line  373)
   45367 * idirafter:                             Preprocessor Options.
   45368                                                              (line  415)
   45369 * iframework:                            Darwin Options.     (line   59)
   45370 * imacros:                               Preprocessor Options.
   45371                                                              (line  406)
   45372 * image_base:                            Darwin Options.     (line  199)
   45373 * imultilib:                             Preprocessor Options.
   45374                                                              (line  440)
   45375 * include:                               Preprocessor Options.
   45376                                                              (line  395)
   45377 * init:                                  Darwin Options.     (line  199)
   45378 * install_name:                          Darwin Options.     (line  199)
   45379 * iprefix:                               Preprocessor Options.
   45380                                                              (line  422)
   45381 * iquote <1>:                            Directory Options.  (line   36)
   45382 * iquote:                                Preprocessor Options.
   45383                                                              (line  452)
   45384 * isysroot:                              Preprocessor Options.
   45385                                                              (line  434)
   45386 * isystem:                               Preprocessor Options.
   45387                                                              (line  444)
   45388 * iwithprefix:                           Preprocessor Options.
   45389                                                              (line  428)
   45390 * iwithprefixbefore:                     Preprocessor Options.
   45391                                                              (line  428)
   45392 * keep_private_externs:                  Darwin Options.     (line  199)
   45393 * L:                                     Directory Options.  (line   42)
   45394 * l:                                     Link Options.       (line   26)
   45395 * lobjc:                                 Link Options.       (line   53)
   45396 * m:                                     RS/6000 and PowerPC Options.
   45397                                                              (line  552)
   45398 * M:                                     Preprocessor Options.
   45399                                                              (line  173)
   45400 * m1:                                    SH Options.         (line    9)
   45401 * m10:                                   PDP-11 Options.     (line   29)
   45402 * m128bit-long-double:                   i386 and x86-64 Options.
   45403                                                              (line  283)
   45404 * m16-bit:                               CRIS Options.       (line   64)
   45405 * m2:                                    SH Options.         (line   12)
   45406 * m210:                                  MCore Options.      (line   43)
   45407 * m2a:                                   SH Options.         (line   30)
   45408 * m2a-nofpu:                             SH Options.         (line   18)
   45409 * m2a-single:                            SH Options.         (line   26)
   45410 * m2a-single-only:                       SH Options.         (line   22)
   45411 * m3:                                    SH Options.         (line   34)
   45412 * m31:                                   S/390 and zSeries Options.
   45413                                                              (line   87)
   45414 * m32 <1>:                               SPARC Options.      (line  182)
   45415 * m32 <2>:                               RS/6000 and PowerPC Options.
   45416                                                              (line  266)
   45417 * m32:                                   i386 and x86-64 Options.
   45418                                                              (line  697)
   45419 * m32-bit:                               CRIS Options.       (line   64)
   45420 * m32bit-doubles:                        RX Options.         (line   10)
   45421 * m32r:                                  M32R/D Options.     (line   15)
   45422 * m32r2:                                 M32R/D Options.     (line    9)
   45423 * m32rx:                                 M32R/D Options.     (line   12)
   45424 * m340:                                  MCore Options.      (line   43)
   45425 * m3dnow:                                i386 and x86-64 Options.
   45426                                                              (line  477)
   45427 * m3e:                                   SH Options.         (line   37)
   45428 * m4:                                    SH Options.         (line   51)
   45429 * m4-nofpu:                              SH Options.         (line   40)
   45430 * m4-single:                             SH Options.         (line   47)
   45431 * m4-single-only:                        SH Options.         (line   43)
   45432 * m40:                                   PDP-11 Options.     (line   23)
   45433 * m45:                                   PDP-11 Options.     (line   26)
   45434 * m4a:                                   SH Options.         (line   66)
   45435 * m4a-nofpu:                             SH Options.         (line   54)
   45436 * m4a-single:                            SH Options.         (line   62)
   45437 * m4a-single-only:                       SH Options.         (line   58)
   45438 * m4al:                                  SH Options.         (line   69)
   45439 * m4byte-functions:                      MCore Options.      (line   27)
   45440 * m5200:                                 M680x0 Options.     (line  146)
   45441 * m5206e:                                M680x0 Options.     (line  155)
   45442 * m528x:                                 M680x0 Options.     (line  159)
   45443 * m5307:                                 M680x0 Options.     (line  163)
   45444 * m5407:                                 M680x0 Options.     (line  167)
   45445 * m64 <1>:                               SPARC Options.      (line  182)
   45446 * m64 <2>:                               S/390 and zSeries Options.
   45447                                                              (line   87)
   45448 * m64 <3>:                               RS/6000 and PowerPC Options.
   45449                                                              (line  266)
   45450 * m64:                                   i386 and x86-64 Options.
   45451                                                              (line  697)
   45452 * m64bit-doubles:                        RX Options.         (line   10)
   45453 * m68000:                                M680x0 Options.     (line   94)
   45454 * m68010:                                M680x0 Options.     (line  102)
   45455 * m68020:                                M680x0 Options.     (line  108)
   45456 * m68020-40:                             M680x0 Options.     (line  177)
   45457 * m68020-60:                             M680x0 Options.     (line  186)
   45458 * m68030:                                M680x0 Options.     (line  113)
   45459 * m68040:                                M680x0 Options.     (line  118)
   45460 * m68060:                                M680x0 Options.     (line  127)
   45461 * m6811:                                 M68hc1x Options.    (line   13)
   45462 * m6812:                                 M68hc1x Options.    (line   18)
   45463 * m68881:                                M680x0 Options.     (line  196)
   45464 * m68hc11:                               M68hc1x Options.    (line   13)
   45465 * m68hc12:                               M68hc1x Options.    (line   18)
   45466 * m68hcs12:                              M68hc1x Options.    (line   23)
   45467 * m68S12:                                M68hc1x Options.    (line   23)
   45468 * m8-bit:                                CRIS Options.       (line   64)
   45469 * m96bit-long-double:                    i386 and x86-64 Options.
   45470                                                              (line  283)
   45471 * mabi <1>:                              RS/6000 and PowerPC Options.
   45472                                                              (line  583)
   45473 * mabi <2>:                              i386 and x86-64 Options.
   45474                                                              (line  592)
   45475 * mabi:                                  ARM Options.        (line   10)
   45476 * mabi=32:                               MIPS Options.       (line  130)
   45477 * mabi=64:                               MIPS Options.       (line  130)
   45478 * mabi=eabi:                             MIPS Options.       (line  130)
   45479 * mabi=gnu:                              MMIX Options.       (line   20)
   45480 * mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
   45481                                                              (line  596)
   45482 * mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
   45483                                                              (line  600)
   45484 * mabi=mmixware:                         MMIX Options.       (line   20)
   45485 * mabi=n32:                              MIPS Options.       (line  130)
   45486 * mabi=no-spe:                           RS/6000 and PowerPC Options.
   45487                                                              (line  593)
   45488 * mabi=o64:                              MIPS Options.       (line  130)
   45489 * mabi=spe:                              RS/6000 and PowerPC Options.
   45490                                                              (line  588)
   45491 * mabicalls:                             MIPS Options.       (line  154)
   45492 * mabort-on-noreturn:                    ARM Options.        (line  162)
   45493 * mabsdiff:                              MeP Options.        (line    7)
   45494 * mabshi:                                PDP-11 Options.     (line   55)
   45495 * mac0:                                  PDP-11 Options.     (line   16)
   45496 * macc-4:                                FRV Options.        (line  113)
   45497 * macc-8:                                FRV Options.        (line  116)
   45498 * maccumulate-outgoing-args <1>:         SH Options.         (line  199)
   45499 * maccumulate-outgoing-args:             i386 and x86-64 Options.
   45500                                                              (line  609)
   45501 * maddress-space-conversion:             SPU Options.        (line   63)
   45502 * madjust-unroll:                        SH Options.         (line  219)
   45503 * mads:                                  RS/6000 and PowerPC Options.
   45504                                                              (line  626)
   45505 * maix-struct-return:                    RS/6000 and PowerPC Options.
   45506                                                              (line  576)
   45507 * maix32:                                RS/6000 and PowerPC Options.
   45508                                                              (line  304)
   45509 * maix64:                                RS/6000 and PowerPC Options.
   45510                                                              (line  304)
   45511 * malign-300:                            H8/300 Options.     (line   31)
   45512 * malign-double:                         i386 and x86-64 Options.
   45513                                                              (line  267)
   45514 * malign-int:                            M680x0 Options.     (line  266)
   45515 * malign-labels:                         FRV Options.        (line  104)
   45516 * malign-loops:                          M32R/D Options.     (line   73)
   45517 * malign-natural:                        RS/6000 and PowerPC Options.
   45518                                                              (line  343)
   45519 * malign-power:                          RS/6000 and PowerPC Options.
   45520                                                              (line  343)
   45521 * mall-opts:                             MeP Options.        (line   11)
   45522 * malloc-cc:                             FRV Options.        (line   25)
   45523 * malpha-as:                             DEC Alpha Options.  (line  159)
   45524 * maltivec:                              RS/6000 and PowerPC Options.
   45525                                                              (line  191)
   45526 * mam33:                                 MN10300 Options.    (line   17)
   45527 * mam33-2:                               MN10300 Options.    (line   24)
   45528 * mam34:                                 MN10300 Options.    (line   28)
   45529 * mandroid:                              GNU/Linux Options.  (line   21)
   45530 * mapcs:                                 ARM Options.        (line   22)
   45531 * mapcs-frame:                           ARM Options.        (line   14)
   45532 * mapp-regs <1>:                         V850 Options.       (line   57)
   45533 * mapp-regs:                             SPARC Options.      (line   10)
   45534 * march <1>:                             S/390 and zSeries Options.
   45535                                                              (line  116)
   45536 * march <2>:                             MIPS Options.       (line   14)
   45537 * march <3>:                             M680x0 Options.     (line   12)
   45538 * march <4>:                             i386 and x86-64 Options.
   45539                                                              (line  166)
   45540 * march <5>:                             HPPA Options.       (line    9)
   45541 * march <6>:                             CRIS Options.       (line   10)
   45542 * march:                                 ARM Options.        (line  108)
   45543 * mas100-syntax:                         RX Options.         (line   75)
   45544 * masm=DIALECT:                          i386 and x86-64 Options.
   45545                                                              (line  223)
   45546 * matomic-updates:                       SPU Options.        (line   78)
   45547 * mauto-incdec:                          M68hc1x Options.    (line   26)
   45548 * mauto-pic:                             IA-64 Options.      (line   50)
   45549 * maverage:                              MeP Options.        (line   16)
   45550 * mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
   45551                                                              (line  412)
   45552 * mb:                                    SH Options.         (line   74)
   45553 * mbackchain:                            S/390 and zSeries Options.
   45554                                                              (line   35)
   45555 * mbarrel-shift-enabled:                 LM32 Options.       (line    9)
   45556 * mbase-addresses:                       MMIX Options.       (line   54)
   45557 * mbased=:                               MeP Options.        (line   20)
   45558 * mbcopy:                                PDP-11 Options.     (line   36)
   45559 * mbcopy-builtin:                        PDP-11 Options.     (line   32)
   45560 * mbig:                                  RS/6000 and PowerPC Options.
   45561                                                              (line  493)
   45562 * mbig-endian <1>:                       RS/6000 and PowerPC Options.
   45563                                                              (line  493)
   45564 * mbig-endian <2>:                       MCore Options.      (line   39)
   45565 * mbig-endian <3>:                       IA-64 Options.      (line    9)
   45566 * mbig-endian:                           ARM Options.        (line   67)
   45567 * mbig-endian-data:                      RX Options.         (line   42)
   45568 * mbig-switch <1>:                       V850 Options.       (line   52)
   45569 * mbig-switch:                           HPPA Options.       (line   23)
   45570 * mbigtable:                             SH Options.         (line   90)
   45571 * mbionic:                               GNU/Linux Options.  (line   17)
   45572 * mbit-align:                            RS/6000 and PowerPC Options.
   45573                                                              (line  444)
   45574 * mbitfield:                             M680x0 Options.     (line  234)
   45575 * mbitops <1>:                           SH Options.         (line   94)
   45576 * mbitops:                               MeP Options.        (line   26)
   45577 * mblock-move-inline-limit:              RS/6000 and PowerPC Options.
   45578                                                              (line  697)
   45579 * mbranch-cheap:                         PDP-11 Options.     (line   65)
   45580 * mbranch-cost:                          MIPS Options.       (line  611)
   45581 * mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
   45582 * mbranch-expensive:                     PDP-11 Options.     (line   61)
   45583 * mbranch-hints:                         SPU Options.        (line   27)
   45584 * mbranch-likely:                        MIPS Options.       (line  618)
   45585 * mbranch-predict:                       MMIX Options.       (line   49)
   45586 * mbss-plt:                              RS/6000 and PowerPC Options.
   45587                                                              (line  214)
   45588 * mbuild-constants:                      DEC Alpha Options.  (line  142)
   45589 * mbwx:                                  DEC Alpha Options.  (line  171)
   45590 * mc68000:                               M680x0 Options.     (line   94)
   45591 * mc68020:                               M680x0 Options.     (line  108)
   45592 * mc=:                                   MeP Options.        (line   31)
   45593 * mcache-size:                           SPU Options.        (line   70)
   45594 * mcall-eabi:                            RS/6000 and PowerPC Options.
   45595                                                              (line  546)
   45596 * mcall-freebsd:                         RS/6000 and PowerPC Options.
   45597                                                              (line  564)
   45598 * mcall-gnu:                             RS/6000 and PowerPC Options.
   45599                                                              (line  560)
   45600 * mcall-linux:                           RS/6000 and PowerPC Options.
   45601                                                              (line  556)
   45602 * mcall-netbsd:                          RS/6000 and PowerPC Options.
   45603                                                              (line  568)
   45604 * mcall-prologues:                       AVR Options.        (line   36)
   45605 * mcall-sysv:                            RS/6000 and PowerPC Options.
   45606                                                              (line  538)
   45607 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
   45608                                                              (line  546)
   45609 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
   45610                                                              (line  549)
   45611 * mcallee-super-interworking:            ARM Options.        (line  255)
   45612 * mcaller-super-interworking:            ARM Options.        (line  262)
   45613 * mcallgraph-data:                       MCore Options.      (line   31)
   45614 * mcc-init:                              CRIS Options.       (line   41)
   45615 * mcfv4e:                                M680x0 Options.     (line  171)
   45616 * mcheck-zero-division:                  MIPS Options.       (line  426)
   45617 * mcirrus-fix-invalid-insns:             ARM Options.        (line  202)
   45618 * mcix:                                  DEC Alpha Options.  (line  171)
   45619 * mcld:                                  i386 and x86-64 Options.
   45620                                                              (line  506)
   45621 * mclip:                                 MeP Options.        (line   35)
   45622 * mcmodel=embmedany:                     SPARC Options.      (line  204)
   45623 * mcmodel=kernel:                        i386 and x86-64 Options.
   45624                                                              (line  719)
   45625 * mcmodel=large <1>:                     RS/6000 and PowerPC Options.
   45626                                                              (line  185)
   45627 * mcmodel=large:                         i386 and x86-64 Options.
   45628                                                              (line  731)
   45629 * mcmodel=medany:                        SPARC Options.      (line  198)
   45630 * mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
   45631                                                              (line  181)
   45632 * mcmodel=medium:                        i386 and x86-64 Options.
   45633                                                              (line  724)
   45634 * mcmodel=medlow:                        SPARC Options.      (line  187)
   45635 * mcmodel=medmid:                        SPARC Options.      (line  192)
   45636 * mcmodel=small <1>:                     RS/6000 and PowerPC Options.
   45637                                                              (line  177)
   45638 * mcmodel=small:                         i386 and x86-64 Options.
   45639                                                              (line  713)
   45640 * mcmpb:                                 RS/6000 and PowerPC Options.
   45641                                                              (line   33)
   45642 * mcode-readable:                        MIPS Options.       (line  386)
   45643 * mcond-exec:                            FRV Options.        (line  152)
   45644 * mcond-move:                            FRV Options.        (line  128)
   45645 * mconfig=:                              MeP Options.        (line   39)
   45646 * mconsole:                              i386 and x86-64 Windows Options.
   45647                                                              (line    9)
   45648 * mconst-align:                          CRIS Options.       (line   55)
   45649 * mconst16:                              Xtensa Options.     (line   10)
   45650 * mconstant-gp:                          IA-64 Options.      (line   46)
   45651 * mcop:                                  MeP Options.        (line   48)
   45652 * mcop32:                                MeP Options.        (line   53)
   45653 * mcop64:                                MeP Options.        (line   56)
   45654 * mcorea:                                Blackfin Options.   (line  150)
   45655 * mcoreb:                                Blackfin Options.   (line  156)
   45656 * mcpu <1>:                              SPARC Options.      (line   81)
   45657 * mcpu <2>:                              RS/6000 and PowerPC Options.
   45658                                                              (line  119)
   45659 * mcpu <3>:                              picoChip Options.   (line    9)
   45660 * mcpu <4>:                              M680x0 Options.     (line   28)
   45661 * mcpu <5>:                              i386 and x86-64 Options.
   45662                                                              (line  171)
   45663 * mcpu <6>:                              FRV Options.        (line  212)
   45664 * mcpu <7>:                              DEC Alpha Options.  (line  223)
   45665 * mcpu <8>:                              CRIS Options.       (line   10)
   45666 * mcpu <9>:                              ARM Options.        (line   79)
   45667 * mcpu:                                  ARC Options.        (line   23)
   45668 * mcpu32:                                M680x0 Options.     (line  137)
   45669 * mcpu= <1>:                             MicroBlaze Options. (line   20)
   45670 * mcpu= <2>:                             M32C Options.       (line    7)
   45671 * mcpu=:                                 Blackfin Options.   (line    7)
   45672 * mcrc32:                                i386 and x86-64 Options.
   45673                                                              (line  548)
   45674 * mcsync-anomaly:                        Blackfin Options.   (line   56)
   45675 * mcx16:                                 i386 and x86-64 Options.
   45676                                                              (line  526)
   45677 * MD:                                    Preprocessor Options.
   45678                                                              (line  262)
   45679 * mdalign:                               SH Options.         (line   80)
   45680 * mdata:                                 ARC Options.        (line   30)
   45681 * mdata-align:                           CRIS Options.       (line   55)
   45682 * mdc:                                   MeP Options.        (line   62)
   45683 * mdebug <1>:                            S/390 and zSeries Options.
   45684                                                              (line  112)
   45685 * mdebug:                                M32R/D Options.     (line   69)
   45686 * mdebug-main=PREFIX <1>:                IA-64/VMS Options.  (line   13)
   45687 * mdebug-main=PREFIX:                    DEC Alpha/VMS Options.
   45688                                                              (line   13)
   45689 * mdec-asm:                              PDP-11 Options.     (line   72)
   45690 * mdisable-callt:                        V850 Options.       (line   93)
   45691 * mdisable-fpregs:                       HPPA Options.       (line   33)
   45692 * mdisable-indexing:                     HPPA Options.       (line   40)
   45693 * mdiv <1>:                              MeP Options.        (line   65)
   45694 * mdiv <2>:                              MCore Options.      (line   15)
   45695 * mdiv:                                  M680x0 Options.     (line  208)
   45696 * mdiv=STRATEGY:                         SH Options.         (line  158)
   45697 * mdivide-breaks:                        MIPS Options.       (line  432)
   45698 * mdivide-enabled:                       LM32 Options.       (line   12)
   45699 * mdivide-traps:                         MIPS Options.       (line  432)
   45700 * mdivsi3_libfunc=NAME:                  SH Options.         (line  205)
   45701 * mdll:                                  i386 and x86-64 Windows Options.
   45702                                                              (line   16)
   45703 * mdlmzb:                                RS/6000 and PowerPC Options.
   45704                                                              (line  437)
   45705 * mdmx:                                  MIPS Options.       (line  279)
   45706 * mdouble:                               FRV Options.        (line   38)
   45707 * mdouble-float <1>:                     RS/6000 and PowerPC Options.
   45708                                                              (line  361)
   45709 * mdouble-float:                         MIPS Options.       (line  237)
   45710 * mdsp:                                  MIPS Options.       (line  256)
   45711 * mdspr2:                                MIPS Options.       (line  262)
   45712 * mdual-nops:                            SPU Options.        (line   90)
   45713 * mdwarf2-asm:                           IA-64 Options.      (line   94)
   45714 * mdword:                                FRV Options.        (line   32)
   45715 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
   45716                                                              (line  498)
   45717 * mea32:                                 SPU Options.        (line   55)
   45718 * mea64:                                 SPU Options.        (line   55)
   45719 * meabi:                                 RS/6000 and PowerPC Options.
   45720                                                              (line  645)
   45721 * mearly-stop-bits:                      IA-64 Options.      (line  100)
   45722 * meb <1>:                               Score Options.      (line    9)
   45723 * meb:                                   MeP Options.        (line   68)
   45724 * mel <1>:                               Score Options.      (line   12)
   45725 * mel:                                   MeP Options.        (line   71)
   45726 * melf <1>:                              MMIX Options.       (line   44)
   45727 * melf:                                  CRIS Options.       (line   87)
   45728 * memb:                                  RS/6000 and PowerPC Options.
   45729                                                              (line  640)
   45730 * membedded-data:                        MIPS Options.       (line  373)
   45731 * memregs=:                              M32C Options.       (line   21)
   45732 * mep:                                   V850 Options.       (line   16)
   45733 * mepsilon:                              MMIX Options.       (line   15)
   45734 * merror-reloc:                          SPU Options.        (line   10)
   45735 * mesa:                                  S/390 and zSeries Options.
   45736                                                              (line   95)
   45737 * metrax100:                             CRIS Options.       (line   26)
   45738 * metrax4:                               CRIS Options.       (line   26)
   45739 * mexplicit-relocs <1>:                  MIPS Options.       (line  417)
   45740 * mexplicit-relocs:                      DEC Alpha Options.  (line  184)
   45741 * mextern-sdata:                         MIPS Options.       (line  335)
   45742 * MF:                                    Preprocessor Options.
   45743                                                              (line  208)
   45744 * mfast-fp:                              Blackfin Options.   (line  129)
   45745 * mfast-indirect-calls:                  HPPA Options.       (line   52)
   45746 * mfaster-structs:                       SPARC Options.      (line   71)
   45747 * mfdpic:                                FRV Options.        (line   56)
   45748 * mfentry:                               i386 and x86-64 Options.
   45749                                                              (line  673)
   45750 * mfix:                                  DEC Alpha Options.  (line  171)
   45751 * mfix-and-continue:                     Darwin Options.     (line  106)
   45752 * mfix-at697f:                           SPARC Options.      (line  168)
   45753 * mfix-cortex-m3-ldrd:                   ARM Options.        (line  284)
   45754 * mfix-r10000:                           MIPS Options.       (line  503)
   45755 * mfix-r4000:                            MIPS Options.       (line  482)
   45756 * mfix-r4400:                            MIPS Options.       (line  496)
   45757 * mfix-sb1:                              MIPS Options.       (line  535)
   45758 * mfix-vr4120:                           MIPS Options.       (line  514)
   45759 * mfix-vr4130:                           MIPS Options.       (line  528)
   45760 * mfixed-cc:                             FRV Options.        (line   28)
   45761 * mfixed-range <1>:                      SPU Options.        (line   47)
   45762 * mfixed-range <2>:                      SH Options.         (line  212)
   45763 * mfixed-range <3>:                      IA-64 Options.      (line  105)
   45764 * mfixed-range:                          HPPA Options.       (line   59)
   45765 * mflip-mips16:                          MIPS Options.       (line  110)
   45766 * mfloat-abi:                            ARM Options.        (line   41)
   45767 * mfloat-gprs:                           RS/6000 and PowerPC Options.
   45768                                                              (line  249)
   45769 * mfloat-ieee:                           DEC Alpha Options.  (line  179)
   45770 * mfloat-vax:                            DEC Alpha Options.  (line  179)
   45771 * mfloat32:                              PDP-11 Options.     (line   52)
   45772 * mfloat64:                              PDP-11 Options.     (line   48)
   45773 * mflush-func:                           MIPS Options.       (line  602)
   45774 * mflush-func=NAME:                      M32R/D Options.     (line   94)
   45775 * mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
   45776 * mfmovd:                                SH Options.         (line   97)
   45777 * mforce-no-pic:                         Xtensa Options.     (line   41)
   45778 * mfp:                                   ARM Options.        (line  120)
   45779 * mfp-exceptions:                        MIPS Options.       (line  629)
   45780 * mfp-reg:                               DEC Alpha Options.  (line   25)
   45781 * mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
   45782 * mfp-trap-mode:                         DEC Alpha Options.  (line   63)
   45783 * mfp16-format:                          ARM Options.        (line  141)
   45784 * mfp32:                                 MIPS Options.       (line  220)
   45785 * mfp64:                                 MIPS Options.       (line  223)
   45786 * mfpe:                                  ARM Options.        (line  120)
   45787 * mfpmath <1>:                           i386 and x86-64 Options.
   45788                                                              (line  174)
   45789 * mfpmath:                               Optimize Options.   (line 1908)
   45790 * mfpr-32:                               FRV Options.        (line   13)
   45791 * mfpr-64:                               FRV Options.        (line   16)
   45792 * mfprnd:                                RS/6000 and PowerPC Options.
   45793                                                              (line   33)
   45794 * mfpu <1>:                              SPARC Options.      (line   20)
   45795 * mfpu <2>:                              RS/6000 and PowerPC Options.
   45796                                                              (line  369)
   45797 * mfpu <3>:                              PDP-11 Options.     (line    9)
   45798 * mfpu:                                  ARM Options.        (line  120)
   45799 * mfriz:                                 RS/6000 and PowerPC Options.
   45800                                                              (line  827)
   45801 * mfull-toc:                             RS/6000 and PowerPC Options.
   45802                                                              (line  277)
   45803 * mfused-madd <1>:                       Xtensa Options.     (line   19)
   45804 * mfused-madd <2>:                       S/390 and zSeries Options.
   45805                                                              (line  137)
   45806 * mfused-madd <3>:                       RS/6000 and PowerPC Options.
   45807                                                              (line  421)
   45808 * mfused-madd <4>:                       MIPS Options.       (line  467)
   45809 * mfused-madd <5>:                       IA-64 Options.      (line   88)
   45810 * mfused-madd:                           i386 and x86-64 Options.
   45811                                                              (line  501)
   45812 * mg:                                    VAX Options.        (line   17)
   45813 * MG:                                    Preprocessor Options.
   45814                                                              (line  217)
   45815 * mgas <1>:                              HPPA Options.       (line   75)
   45816 * mgas:                                  DEC Alpha Options.  (line  159)
   45817 * mgen-cell-microcode:                   RS/6000 and PowerPC Options.
   45818                                                              (line  202)
   45819 * mgettrcost=NUMBER:                     SH Options.         (line  234)
   45820 * mglibc:                                GNU/Linux Options.  (line    9)
   45821 * mgnu:                                  VAX Options.        (line   13)
   45822 * mgnu-as:                               IA-64 Options.      (line   18)
   45823 * mgnu-ld <1>:                           IA-64 Options.      (line   23)
   45824 * mgnu-ld:                               HPPA Options.       (line  111)
   45825 * mgotplt:                               CRIS Options.       (line   81)
   45826 * mgp32:                                 MIPS Options.       (line  214)
   45827 * mgp64:                                 MIPS Options.       (line  217)
   45828 * mgpopt:                                MIPS Options.       (line  358)
   45829 * mgpr-32:                               FRV Options.        (line    7)
   45830 * mgpr-64:                               FRV Options.        (line   10)
   45831 * mgprel-ro:                             FRV Options.        (line   79)
   45832 * mh:                                    H8/300 Options.     (line   14)
   45833 * mhard-dfp <1>:                         S/390 and zSeries Options.
   45834                                                              (line   20)
   45835 * mhard-dfp:                             RS/6000 and PowerPC Options.
   45836                                                              (line   33)
   45837 * mhard-float <1>:                       SPARC Options.      (line   20)
   45838 * mhard-float <2>:                       S/390 and zSeries Options.
   45839                                                              (line   11)
   45840 * mhard-float <3>:                       RS/6000 and PowerPC Options.
   45841                                                              (line  355)
   45842 * mhard-float <4>:                       MIPS Options.       (line  226)
   45843 * mhard-float <5>:                       MicroBlaze Options. (line   10)
   45844 * mhard-float <6>:                       M680x0 Options.     (line  196)
   45845 * mhard-float <7>:                       FRV Options.        (line   19)
   45846 * mhard-float:                           ARM Options.        (line   57)
   45847 * mhard-quad-float:                      SPARC Options.      (line   41)
   45848 * mhardlit:                              MCore Options.      (line   10)
   45849 * mhint-max-distance:                    SPU Options.        (line  102)
   45850 * mhint-max-nops:                        SPU Options.        (line   96)
   45851 * mhitachi:                              SH Options.         (line  101)
   45852 * mhp-ld:                                HPPA Options.       (line  123)
   45853 * micplb:                                Blackfin Options.   (line  169)
   45854 * mid-shared-library:                    Blackfin Options.   (line   77)
   45855 * mieee <1>:                             SH Options.         (line  116)
   45856 * mieee:                                 DEC Alpha Options.  (line   39)
   45857 * mieee-conformant:                      DEC Alpha Options.  (line  134)
   45858 * mieee-fp:                              i386 and x86-64 Options.
   45859                                                              (line  229)
   45860 * mieee-with-inexact:                    DEC Alpha Options.  (line   52)
   45861 * milp32:                                IA-64 Options.      (line  121)
   45862 * mimpure-text:                          Solaris 2 Options.  (line    9)
   45863 * mincoming-stack-boundary:              i386 and x86-64 Options.
   45864                                                              (line  407)
   45865 * mindexed-addressing:                   SH Options.         (line  224)
   45866 * minline-all-stringops:                 i386 and x86-64 Options.
   45867                                                              (line  630)
   45868 * minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
   45869 * minline-float-divide-min-latency:      IA-64 Options.      (line   54)
   45870 * minline-ic_invalidate:                 SH Options.         (line  123)
   45871 * minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
   45872 * minline-int-divide-min-latency:        IA-64 Options.      (line   65)
   45873 * minline-plt <1>:                       FRV Options.        (line   64)
   45874 * minline-plt:                           Blackfin Options.   (line  134)
   45875 * minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
   45876 * minline-sqrt-min-latency:              IA-64 Options.      (line   76)
   45877 * minline-stringops-dynamically:         i386 and x86-64 Options.
   45878                                                              (line  637)
   45879 * minmax:                                M68hc1x Options.    (line   31)
   45880 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
   45881                                                              (line  526)
   45882 * mint-register:                         RX Options.         (line   99)
   45883 * mint16:                                PDP-11 Options.     (line   40)
   45884 * mint32 <1>:                            PDP-11 Options.     (line   44)
   45885 * mint32:                                H8/300 Options.     (line   28)
   45886 * mint8:                                 AVR Options.        (line   43)
   45887 * minterlink-mips16:                     MIPS Options.       (line  117)
   45888 * minvalid-symbols:                      SH Options.         (line  257)
   45889 * mio-volatile:                          MeP Options.        (line   74)
   45890 * mips1:                                 MIPS Options.       (line   77)
   45891 * mips16:                                MIPS Options.       (line  102)
   45892 * mips2:                                 MIPS Options.       (line   80)
   45893 * mips3:                                 MIPS Options.       (line   83)
   45894 * mips32:                                MIPS Options.       (line   89)
   45895 * mips32r2:                              MIPS Options.       (line   92)
   45896 * mips3d:                                MIPS Options.       (line  285)
   45897 * mips4:                                 MIPS Options.       (line   86)
   45898 * mips64:                                MIPS Options.       (line   95)
   45899 * mips64r2:                              MIPS Options.       (line   98)
   45900 * misel:                                 RS/6000 and PowerPC Options.
   45901                                                              (line  220)
   45902 * misize:                                SH Options.         (line  135)
   45903 * missue-rate=NUMBER:                    M32R/D Options.     (line   79)
   45904 * mivc2:                                 MeP Options.        (line   59)
   45905 * mjump-in-delay:                        HPPA Options.       (line   28)
   45906 * mkernel:                               Darwin Options.     (line   84)
   45907 * mknuthdiv:                             MMIX Options.       (line   33)
   45908 * ml <1>:                                SH Options.         (line   77)
   45909 * ml:                                    MeP Options.        (line   78)
   45910 * mlarge-data:                           DEC Alpha Options.  (line  195)
   45911 * mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
   45912                                                              (line  309)
   45913 * mlarge-mem:                            SPU Options.        (line   35)
   45914 * mlarge-text:                           DEC Alpha Options.  (line  213)
   45915 * mleadz:                                MeP Options.        (line   81)
   45916 * mleaf-id-shared-library:               Blackfin Options.   (line   88)
   45917 * mlibfuncs:                             MMIX Options.       (line   10)
   45918 * mlibrary-pic:                          FRV Options.        (line  110)
   45919 * mlinked-fp:                            FRV Options.        (line   94)
   45920 * mlinker-opt:                           HPPA Options.       (line   85)
   45921 * mlinux:                                CRIS Options.       (line   91)
   45922 * mlittle:                               RS/6000 and PowerPC Options.
   45923                                                              (line  487)
   45924 * mlittle-endian <1>:                    SPARC Options.      (line  176)
   45925 * mlittle-endian <2>:                    RS/6000 and PowerPC Options.
   45926                                                              (line  487)
   45927 * mlittle-endian <3>:                    MCore Options.      (line   39)
   45928 * mlittle-endian <4>:                    IA-64 Options.      (line   13)
   45929 * mlittle-endian:                        ARM Options.        (line   63)
   45930 * mlittle-endian-data:                   RX Options.         (line   42)
   45931 * mliw:                                  MN10300 Options.    (line   55)
   45932 * mllsc:                                 MIPS Options.       (line  242)
   45933 * mlocal-sdata:                          MIPS Options.       (line  323)
   45934 * mlong-calls <1>:                       V850 Options.       (line   10)
   45935 * mlong-calls <2>:                       MIPS Options.       (line  453)
   45936 * mlong-calls <3>:                       M68hc1x Options.    (line   35)
   45937 * mlong-calls <4>:                       FRV Options.        (line   99)
   45938 * mlong-calls <5>:                       Blackfin Options.   (line  117)
   45939 * mlong-calls:                           ARM Options.        (line  167)
   45940 * mlong-double-128:                      S/390 and zSeries Options.
   45941                                                              (line   29)
   45942 * mlong-double-64:                       S/390 and zSeries Options.
   45943                                                              (line   29)
   45944 * mlong-load-store:                      HPPA Options.       (line   66)
   45945 * mlong32:                               MIPS Options.       (line  298)
   45946 * mlong64:                               MIPS Options.       (line  293)
   45947 * mlongcall:                             RS/6000 and PowerPC Options.
   45948                                                              (line  717)
   45949 * mlongcalls:                            Xtensa Options.     (line   72)
   45950 * mlow-64k:                              Blackfin Options.   (line   66)
   45951 * mlp64:                                 IA-64 Options.      (line  121)
   45952 * mm:                                    MeP Options.        (line   84)
   45953 * MM:                                    Preprocessor Options.
   45954                                                              (line  198)
   45955 * mmac <1>:                              Score Options.      (line   21)
   45956 * mmac:                                  CRX Options.        (line    9)
   45957 * mmad:                                  MIPS Options.       (line  462)
   45958 * mmalloc64 <1>:                         IA-64/VMS Options.  (line   17)
   45959 * mmalloc64:                             DEC Alpha/VMS Options.
   45960                                                              (line   17)
   45961 * mmangle-cpu:                           ARC Options.        (line   15)
   45962 * mmax:                                  DEC Alpha Options.  (line  171)
   45963 * mmax-constant-size:                    RX Options.         (line   81)
   45964 * mmax-stack-frame:                      CRIS Options.       (line   22)
   45965 * mmcount-ra-address:                    MIPS Options.       (line  678)
   45966 * mmcu:                                  AVR Options.        (line    9)
   45967 * MMD:                                   Preprocessor Options.
   45968                                                              (line  278)
   45969 * mmedia:                                FRV Options.        (line   44)
   45970 * mmemcpy <1>:                           MIPS Options.       (line  447)
   45971 * mmemcpy:                               MicroBlaze Options. (line   13)
   45972 * mmemory-latency:                       DEC Alpha Options.  (line  276)
   45973 * mmfcrf:                                RS/6000 and PowerPC Options.
   45974                                                              (line   33)
   45975 * mmfpgpr:                               RS/6000 and PowerPC Options.
   45976                                                              (line   33)
   45977 * mminimal-toc:                          RS/6000 and PowerPC Options.
   45978                                                              (line  277)
   45979 * mminmax:                               MeP Options.        (line   87)
   45980 * mmmx:                                  i386 and x86-64 Options.
   45981                                                              (line  477)
   45982 * mmodel=large:                          M32R/D Options.     (line   33)
   45983 * mmodel=medium:                         M32R/D Options.     (line   27)
   45984 * mmodel=small:                          M32R/D Options.     (line   18)
   45985 * mmovbe:                                i386 and x86-64 Options.
   45986                                                              (line  544)
   45987 * mmt:                                   MIPS Options.       (line  290)
   45988 * mmul-bug-workaround:                   CRIS Options.       (line   31)
   45989 * mmuladd:                               FRV Options.        (line   50)
   45990 * mmulhw:                                RS/6000 and PowerPC Options.
   45991                                                              (line  430)
   45992 * mmult:                                 MeP Options.        (line   90)
   45993 * mmult-bug:                             MN10300 Options.    (line    9)
   45994 * mmulti-cond-exec:                      FRV Options.        (line  176)
   45995 * mmulticore:                            Blackfin Options.   (line  138)
   45996 * mmultiple:                             RS/6000 and PowerPC Options.
   45997                                                              (line  380)
   45998 * mmvcle:                                S/390 and zSeries Options.
   45999                                                              (line  105)
   46000 * mmvme:                                 RS/6000 and PowerPC Options.
   46001                                                              (line  621)
   46002 * mn:                                    H8/300 Options.     (line   20)
   46003 * mnested-cond-exec:                     FRV Options.        (line  189)
   46004 * mnew-mnemonics:                        RS/6000 and PowerPC Options.
   46005                                                              (line  104)
   46006 * mnhwloop:                              Score Options.      (line   15)
   46007 * mno-3dnow:                             i386 and x86-64 Options.
   46008                                                              (line  477)
   46009 * mno-4byte-functions:                   MCore Options.      (line   27)
   46010 * mno-abicalls:                          MIPS Options.       (line  154)
   46011 * mno-abshi:                             PDP-11 Options.     (line   58)
   46012 * mno-ac0:                               PDP-11 Options.     (line   20)
   46013 * mno-address-space-conversion:          SPU Options.        (line   63)
   46014 * mno-align-double:                      i386 and x86-64 Options.
   46015                                                              (line  267)
   46016 * mno-align-int:                         M680x0 Options.     (line  266)
   46017 * mno-align-loops:                       M32R/D Options.     (line   76)
   46018 * mno-align-stringops:                   i386 and x86-64 Options.
   46019                                                              (line  625)
   46020 * mno-altivec:                           RS/6000 and PowerPC Options.
   46021                                                              (line  191)
   46022 * mno-am33:                              MN10300 Options.    (line   20)
   46023 * mno-app-regs <1>:                      V850 Options.       (line   61)
   46024 * mno-app-regs:                          SPARC Options.      (line   10)
   46025 * mno-as100-syntax:                      RX Options.         (line   75)
   46026 * mno-atomic-updates:                    SPU Options.        (line   78)
   46027 * mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
   46028                                                              (line  412)
   46029 * mno-backchain:                         S/390 and zSeries Options.
   46030                                                              (line   35)
   46031 * mno-base-addresses:                    MMIX Options.       (line   54)
   46032 * mno-bit-align:                         RS/6000 and PowerPC Options.
   46033                                                              (line  444)
   46034 * mno-bitfield:                          M680x0 Options.     (line  230)
   46035 * mno-branch-likely:                     MIPS Options.       (line  618)
   46036 * mno-branch-predict:                    MMIX Options.       (line   49)
   46037 * mno-bwx:                               DEC Alpha Options.  (line  171)
   46038 * mno-callgraph-data:                    MCore Options.      (line   31)
   46039 * mno-check-zero-division:               MIPS Options.       (line  426)
   46040 * mno-cirrus-fix-invalid-insns:          ARM Options.        (line  202)
   46041 * mno-cix:                               DEC Alpha Options.  (line  171)
   46042 * mno-clearbss:                          MicroBlaze Options. (line   16)
   46043 * mno-cmpb:                              RS/6000 and PowerPC Options.
   46044                                                              (line   33)
   46045 * mno-cond-exec:                         FRV Options.        (line  158)
   46046 * mno-cond-move:                         FRV Options.        (line  134)
   46047 * mno-const-align:                       CRIS Options.       (line   55)
   46048 * mno-const16:                           Xtensa Options.     (line   10)
   46049 * mno-crt0:                              MN10300 Options.    (line   44)
   46050 * mno-csync-anomaly:                     Blackfin Options.   (line   62)
   46051 * mno-data-align:                        CRIS Options.       (line   55)
   46052 * mno-debug:                             S/390 and zSeries Options.
   46053                                                              (line  112)
   46054 * mno-div <1>:                           MCore Options.      (line   15)
   46055 * mno-div:                               M680x0 Options.     (line  208)
   46056 * mno-dlmzb:                             RS/6000 and PowerPC Options.
   46057                                                              (line  437)
   46058 * mno-double:                            FRV Options.        (line   41)
   46059 * mno-dsp:                               MIPS Options.       (line  256)
   46060 * mno-dspr2:                             MIPS Options.       (line  262)
   46061 * mno-dwarf2-asm:                        IA-64 Options.      (line   94)
   46062 * mno-dword:                             FRV Options.        (line   35)
   46063 * mno-eabi:                              RS/6000 and PowerPC Options.
   46064                                                              (line  645)
   46065 * mno-early-stop-bits:                   IA-64 Options.      (line  100)
   46066 * mno-eflags:                            FRV Options.        (line  125)
   46067 * mno-embedded-data:                     MIPS Options.       (line  373)
   46068 * mno-ep:                                V850 Options.       (line   16)
   46069 * mno-epsilon:                           MMIX Options.       (line   15)
   46070 * mno-explicit-relocs <1>:               MIPS Options.       (line  417)
   46071 * mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
   46072 * mno-extern-sdata:                      MIPS Options.       (line  335)
   46073 * mno-fancy-math-387:                    i386 and x86-64 Options.
   46074                                                              (line  256)
   46075 * mno-faster-structs:                    SPARC Options.      (line   71)
   46076 * mno-fix:                               DEC Alpha Options.  (line  171)
   46077 * mno-fix-r10000:                        MIPS Options.       (line  503)
   46078 * mno-fix-r4000:                         MIPS Options.       (line  482)
   46079 * mno-fix-r4400:                         MIPS Options.       (line  496)
   46080 * mno-float32:                           PDP-11 Options.     (line   48)
   46081 * mno-float64:                           PDP-11 Options.     (line   52)
   46082 * mno-flush-func:                        M32R/D Options.     (line   99)
   46083 * mno-flush-trap:                        M32R/D Options.     (line   91)
   46084 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
   46085                                                              (line  277)
   46086 * mno-fp-regs:                           DEC Alpha Options.  (line   25)
   46087 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
   46088                                                              (line  246)
   46089 * mno-fprnd:                             RS/6000 and PowerPC Options.
   46090                                                              (line   33)
   46091 * mno-fpu:                               SPARC Options.      (line   25)
   46092 * mno-fused-madd <1>:                    Xtensa Options.     (line   19)
   46093 * mno-fused-madd <2>:                    S/390 and zSeries Options.
   46094                                                              (line  137)
   46095 * mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
   46096                                                              (line  421)
   46097 * mno-fused-madd <4>:                    MIPS Options.       (line  467)
   46098 * mno-fused-madd <5>:                    IA-64 Options.      (line   88)
   46099 * mno-fused-madd:                        i386 and x86-64 Options.
   46100                                                              (line  501)
   46101 * mno-gnu-as:                            IA-64 Options.      (line   18)
   46102 * mno-gnu-ld:                            IA-64 Options.      (line   23)
   46103 * mno-gotplt:                            CRIS Options.       (line   81)
   46104 * mno-gpopt:                             MIPS Options.       (line  358)
   46105 * mno-hard-dfp <1>:                      S/390 and zSeries Options.
   46106                                                              (line   20)
   46107 * mno-hard-dfp:                          RS/6000 and PowerPC Options.
   46108                                                              (line   33)
   46109 * mno-hardlit:                           MCore Options.      (line   10)
   46110 * mno-id-shared-library:                 Blackfin Options.   (line   84)
   46111 * mno-ieee-fp:                           i386 and x86-64 Options.
   46112                                                              (line  229)
   46113 * mno-inline-float-divide:               IA-64 Options.      (line   62)
   46114 * mno-inline-int-divide:                 IA-64 Options.      (line   73)
   46115 * mno-inline-sqrt:                       IA-64 Options.      (line   84)
   46116 * mno-int16:                             PDP-11 Options.     (line   44)
   46117 * mno-int32:                             PDP-11 Options.     (line   40)
   46118 * mno-interlink-mips16:                  MIPS Options.       (line  117)
   46119 * mno-interrupts:                        AVR Options.        (line   32)
   46120 * mno-isel:                              RS/6000 and PowerPC Options.
   46121                                                              (line  220)
   46122 * mno-knuthdiv:                          MMIX Options.       (line   33)
   46123 * mno-leaf-id-shared-library:            Blackfin Options.   (line   94)
   46124 * mno-libfuncs:                          MMIX Options.       (line   10)
   46125 * mno-llsc:                              MIPS Options.       (line  242)
   46126 * mno-local-sdata:                       MIPS Options.       (line  323)
   46127 * mno-long-calls <1>:                    V850 Options.       (line   10)
   46128 * mno-long-calls <2>:                    MIPS Options.       (line  453)
   46129 * mno-long-calls <3>:                    M68hc1x Options.    (line   35)
   46130 * mno-long-calls <4>:                    HPPA Options.       (line  136)
   46131 * mno-long-calls <5>:                    Blackfin Options.   (line  117)
   46132 * mno-long-calls:                        ARM Options.        (line  167)
   46133 * mno-longcall:                          RS/6000 and PowerPC Options.
   46134                                                              (line  717)
   46135 * mno-longcalls:                         Xtensa Options.     (line   72)
   46136 * mno-low-64k:                           Blackfin Options.   (line   70)
   46137 * mno-lsim <1>:                          MCore Options.      (line   46)
   46138 * mno-lsim:                              FR30 Options.       (line   14)
   46139 * mno-mad:                               MIPS Options.       (line  462)
   46140 * mno-max:                               DEC Alpha Options.  (line  171)
   46141 * mno-mcount-ra-address:                 MIPS Options.       (line  678)
   46142 * mno-mdmx:                              MIPS Options.       (line  279)
   46143 * mno-media:                             FRV Options.        (line   47)
   46144 * mno-memcpy:                            MIPS Options.       (line  447)
   46145 * mno-mfcrf:                             RS/6000 and PowerPC Options.
   46146                                                              (line   33)
   46147 * mno-mfpgpr:                            RS/6000 and PowerPC Options.
   46148                                                              (line   33)
   46149 * mno-mips16:                            MIPS Options.       (line  102)
   46150 * mno-mips3d:                            MIPS Options.       (line  285)
   46151 * mno-mmx:                               i386 and x86-64 Options.
   46152                                                              (line  477)
   46153 * mno-mt:                                MIPS Options.       (line  290)
   46154 * mno-mul-bug-workaround:                CRIS Options.       (line   31)
   46155 * mno-muladd:                            FRV Options.        (line   53)
   46156 * mno-mulhw:                             RS/6000 and PowerPC Options.
   46157                                                              (line  430)
   46158 * mno-mult-bug:                          MN10300 Options.    (line   13)
   46159 * mno-multi-cond-exec:                   FRV Options.        (line  183)
   46160 * mno-multiple:                          RS/6000 and PowerPC Options.
   46161                                                              (line  380)
   46162 * mno-mvcle:                             S/390 and zSeries Options.
   46163                                                              (line  105)
   46164 * mno-nested-cond-exec:                  FRV Options.        (line  195)
   46165 * mno-optimize-membar:                   FRV Options.        (line  205)
   46166 * mno-opts:                              MeP Options.        (line   93)
   46167 * mno-pack:                              FRV Options.        (line  122)
   46168 * mno-packed-stack:                      S/390 and zSeries Options.
   46169                                                              (line   54)
   46170 * mno-paired:                            RS/6000 and PowerPC Options.
   46171                                                              (line  234)
   46172 * mno-paired-single:                     MIPS Options.       (line  273)
   46173 * mno-pic:                               IA-64 Options.      (line   26)
   46174 * mno-plt:                               MIPS Options.       (line  181)
   46175 * mno-popcntb:                           RS/6000 and PowerPC Options.
   46176                                                              (line   33)
   46177 * mno-popcntd:                           RS/6000 and PowerPC Options.
   46178                                                              (line   33)
   46179 * mno-power:                             RS/6000 and PowerPC Options.
   46180                                                              (line   33)
   46181 * mno-power2:                            RS/6000 and PowerPC Options.
   46182                                                              (line   33)
   46183 * mno-powerpc:                           RS/6000 and PowerPC Options.
   46184                                                              (line   33)
   46185 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
   46186                                                              (line   33)
   46187 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
   46188                                                              (line   33)
   46189 * mno-powerpc64:                         RS/6000 and PowerPC Options.
   46190                                                              (line   33)
   46191 * mno-prolog-function:                   V850 Options.       (line   23)
   46192 * mno-prologue-epilogue:                 CRIS Options.       (line   71)
   46193 * mno-prototype:                         RS/6000 and PowerPC Options.
   46194                                                              (line  605)
   46195 * mno-push-args:                         i386 and x86-64 Options.
   46196                                                              (line  602)
   46197 * mno-red-zone:                          i386 and x86-64 Options.
   46198                                                              (line  705)
   46199 * mno-register-names:                    IA-64 Options.      (line   37)
   46200 * mno-regnames:                          RS/6000 and PowerPC Options.
   46201                                                              (line  711)
   46202 * mno-relax-immediate:                   MCore Options.      (line   19)
   46203 * mno-relocatable:                       RS/6000 and PowerPC Options.
   46204                                                              (line  461)
   46205 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
   46206                                                              (line  472)
   46207 * mno-rtd:                               M680x0 Options.     (line  261)
   46208 * mno-scc:                               FRV Options.        (line  146)
   46209 * mno-sched-ar-data-spec:                IA-64 Options.      (line  135)
   46210 * mno-sched-ar-in-data-spec:             IA-64 Options.      (line  156)
   46211 * mno-sched-br-data-spec:                IA-64 Options.      (line  128)
   46212 * mno-sched-br-in-data-spec:             IA-64 Options.      (line  149)
   46213 * mno-sched-control-spec:                IA-64 Options.      (line  142)
   46214 * mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  183)
   46215 * mno-sched-in-control-spec:             IA-64 Options.      (line  163)
   46216 * mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  176)
   46217 * mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  169)
   46218 * mno-sched-prolog:                      ARM Options.        (line   32)
   46219 * mno-sdata <1>:                         RS/6000 and PowerPC Options.
   46220                                                              (line  692)
   46221 * mno-sdata:                             IA-64 Options.      (line   42)
   46222 * mno-sep-data:                          Blackfin Options.   (line  112)
   46223 * mno-serialize-volatile:                Xtensa Options.     (line   35)
   46224 * mno-short:                             M680x0 Options.     (line  225)
   46225 * mno-side-effects:                      CRIS Options.       (line   46)
   46226 * mno-sim:                               RX Options.         (line   70)
   46227 * mno-single-exit:                       MMIX Options.       (line   66)
   46228 * mno-slow-bytes:                        MCore Options.      (line   35)
   46229 * mno-small-exec:                        S/390 and zSeries Options.
   46230                                                              (line   80)
   46231 * mno-smartmips:                         MIPS Options.       (line  269)
   46232 * mno-soft-float:                        DEC Alpha Options.  (line   10)
   46233 * mno-space-regs:                        HPPA Options.       (line   45)
   46234 * mno-spe:                               RS/6000 and PowerPC Options.
   46235                                                              (line  229)
   46236 * mno-specld-anomaly:                    Blackfin Options.   (line   52)
   46237 * mno-split-addresses:                   MIPS Options.       (line  411)
   46238 * mno-sse:                               i386 and x86-64 Options.
   46239                                                              (line  477)
   46240 * mno-stack-align:                       CRIS Options.       (line   55)
   46241 * mno-stack-bias:                        SPARC Options.      (line  213)
   46242 * mno-strict-align <1>:                  RS/6000 and PowerPC Options.
   46243                                                              (line  456)
   46244 * mno-strict-align:                      M680x0 Options.     (line  286)
   46245 * mno-string:                            RS/6000 and PowerPC Options.
   46246                                                              (line  391)
   46247 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
   46248                                                              (line  277)
   46249 * mno-sym32:                             MIPS Options.       (line  308)
   46250 * mno-target-align:                      Xtensa Options.     (line   59)
   46251 * mno-text-section-literals:             Xtensa Options.     (line   47)
   46252 * mno-tls-markers:                       RS/6000 and PowerPC Options.
   46253                                                              (line  750)
   46254 * mno-toc:                               RS/6000 and PowerPC Options.
   46255                                                              (line  481)
   46256 * mno-toplevel-symbols:                  MMIX Options.       (line   40)
   46257 * mno-tpf-trace:                         S/390 and zSeries Options.
   46258                                                              (line  131)
   46259 * mno-unaligned-doubles:                 SPARC Options.      (line   59)
   46260 * mno-uninit-const-in-rodata:            MIPS Options.       (line  381)
   46261 * mno-update:                            RS/6000 and PowerPC Options.
   46262                                                              (line  402)
   46263 * mno-v8plus:                            SPARC Options.      (line  156)
   46264 * mno-vis:                               SPARC Options.      (line  163)
   46265 * mno-vliw-branch:                       FRV Options.        (line  170)
   46266 * mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
   46267 * mno-vrsave:                            RS/6000 and PowerPC Options.
   46268                                                              (line  199)
   46269 * mno-vsx:                               RS/6000 and PowerPC Options.
   46270                                                              (line  243)
   46271 * mno-wide-bitfields:                    MCore Options.      (line   23)
   46272 * mno-xgot <1>:                          MIPS Options.       (line  191)
   46273 * mno-xgot:                              M680x0 Options.     (line  318)
   46274 * mno-xl-compat:                         RS/6000 and PowerPC Options.
   46275                                                              (line  312)
   46276 * mno-zero-extend:                       MMIX Options.       (line   27)
   46277 * mnobitfield:                           M680x0 Options.     (line  230)
   46278 * mnoliw:                                MN10300 Options.    (line   60)
   46279 * mnomacsave:                            SH Options.         (line  112)
   46280 * mnominmax:                             M68hc1x Options.    (line   31)
   46281 * mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
   46282                                                              (line   22)
   46283 * mold-mnemonics:                        RS/6000 and PowerPC Options.
   46284                                                              (line  104)
   46285 * momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
   46286                                                              (line  650)
   46287 * momit-leaf-frame-pointer:              Blackfin Options.   (line   40)
   46288 * mone-byte-bool:                        Darwin Options.     (line   92)
   46289 * moptimize-membar:                      FRV Options.        (line  201)
   46290 * MP:                                    Preprocessor Options.
   46291                                                              (line  227)
   46292 * mpa-risc-1-0:                          HPPA Options.       (line   19)
   46293 * mpa-risc-1-1:                          HPPA Options.       (line   19)
   46294 * mpa-risc-2-0:                          HPPA Options.       (line   19)
   46295 * mpack:                                 FRV Options.        (line  119)
   46296 * mpacked-stack:                         S/390 and zSeries Options.
   46297                                                              (line   54)
   46298 * mpadstruct:                            SH Options.         (line  138)
   46299 * mpaired:                               RS/6000 and PowerPC Options.
   46300                                                              (line  234)
   46301 * mpaired-single:                        MIPS Options.       (line  273)
   46302 * mpc32:                                 i386 and x86-64 Options.
   46303                                                              (line  372)
   46304 * mpc64:                                 i386 and x86-64 Options.
   46305                                                              (line  372)
   46306 * mpc80:                                 i386 and x86-64 Options.
   46307                                                              (line  372)
   46308 * mpcrel:                                M680x0 Options.     (line  278)
   46309 * mpdebug:                               CRIS Options.       (line   35)
   46310 * mpe:                                   RS/6000 and PowerPC Options.
   46311                                                              (line  332)
   46312 * mpe-aligned-commons:                   i386 and x86-64 Windows Options.
   46313                                                              (line   53)
   46314 * mpic-register:                         ARM Options.        (line  198)
   46315 * mplt:                                  MIPS Options.       (line  181)
   46316 * mpoke-function-name:                   ARM Options.        (line  212)
   46317 * mpopcntb:                              RS/6000 and PowerPC Options.
   46318                                                              (line   33)
   46319 * mpopcntd:                              RS/6000 and PowerPC Options.
   46320                                                              (line   33)
   46321 * mportable-runtime:                     HPPA Options.       (line   71)
   46322 * mpower:                                RS/6000 and PowerPC Options.
   46323                                                              (line   33)
   46324 * mpower2:                               RS/6000 and PowerPC Options.
   46325                                                              (line   33)
   46326 * mpowerpc:                              RS/6000 and PowerPC Options.
   46327                                                              (line   33)
   46328 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
   46329                                                              (line   33)
   46330 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
   46331                                                              (line   33)
   46332 * mpowerpc64:                            RS/6000 and PowerPC Options.
   46333                                                              (line   33)
   46334 * mprefergot:                            SH Options.         (line  145)
   46335 * mpreferred-stack-boundary:             i386 and x86-64 Options.
   46336                                                              (line  402)
   46337 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
   46338                                                              (line  510)
   46339 * mprolog-function:                      V850 Options.       (line   23)
   46340 * mprologue-epilogue:                    CRIS Options.       (line   71)
   46341 * mprototype:                            RS/6000 and PowerPC Options.
   46342                                                              (line  605)
   46343 * mpt-fixed:                             SH Options.         (line  238)
   46344 * mpush-args <1>:                        i386 and x86-64 Options.
   46345                                                              (line  602)
   46346 * mpush-args:                            CRX Options.        (line   13)
   46347 * MQ:                                    Preprocessor Options.
   46348                                                              (line  253)
   46349 * mr10k-cache-barrier:                   MIPS Options.       (line  540)
   46350 * mrecip <1>:                            RS/6000 and PowerPC Options.
   46351                                                              (line  762)
   46352 * mrecip:                                i386 and x86-64 Options.
   46353                                                              (line  554)
   46354 * mrecip-precision:                      RS/6000 and PowerPC Options.
   46355                                                              (line  798)
   46356 * mrecip=opt:                            RS/6000 and PowerPC Options.
   46357                                                              (line  775)
   46358 * mregister-names:                       IA-64 Options.      (line   37)
   46359 * mregnames:                             RS/6000 and PowerPC Options.
   46360                                                              (line  711)
   46361 * mregparm:                              i386 and x86-64 Options.
   46362                                                              (line  339)
   46363 * mrelax <1>:                            SH Options.         (line   86)
   46364 * mrelax <2>:                            RX Options.         (line   94)
   46365 * mrelax <3>:                            MN10300 Options.    (line   47)
   46366 * mrelax:                                H8/300 Options.     (line    9)
   46367 * mrelax-immediate:                      MCore Options.      (line   19)
   46368 * mrelax-pic-calls:                      MIPS Options.       (line  665)
   46369 * mrelocatable:                          RS/6000 and PowerPC Options.
   46370                                                              (line  461)
   46371 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
   46372                                                              (line  472)
   46373 * mrepeat:                               MeP Options.        (line   96)
   46374 * mreturn-pointer-on-d0:                 MN10300 Options.    (line   37)
   46375 * mrodata:                               ARC Options.        (line   30)
   46376 * mrtd <1>:                              Function Attributes.
   46377                                                              (line  177)
   46378 * mrtd <2>:                              M680x0 Options.     (line  239)
   46379 * mrtd:                                  i386 and x86-64 Options.
   46380                                                              (line  315)
   46381 * mrtp:                                  VxWorks Options.    (line   11)
   46382 * ms <1>:                                MeP Options.        (line  100)
   46383 * ms:                                    H8/300 Options.     (line   17)
   46384 * ms2600:                                H8/300 Options.     (line   24)
   46385 * msafe-dma:                             SPU Options.        (line   17)
   46386 * msafe-hints:                           SPU Options.        (line  107)
   46387 * msahf:                                 i386 and x86-64 Options.
   46388                                                              (line  534)
   46389 * msatur:                                MeP Options.        (line  105)
   46390 * msave-acc-in-interrupts:               RX Options.         (line  108)
   46391 * mscc:                                  FRV Options.        (line  140)
   46392 * msched-ar-data-spec:                   IA-64 Options.      (line  135)
   46393 * msched-ar-in-data-spec:                IA-64 Options.      (line  156)
   46394 * msched-br-data-spec:                   IA-64 Options.      (line  128)
   46395 * msched-br-in-data-spec:                IA-64 Options.      (line  149)
   46396 * msched-control-spec:                   IA-64 Options.      (line  142)
   46397 * msched-costly-dep:                     RS/6000 and PowerPC Options.
   46398                                                              (line  517)
   46399 * msched-count-spec-in-critical-path:    IA-64 Options.      (line  183)
   46400 * msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  200)
   46401 * msched-in-control-spec:                IA-64 Options.      (line  163)
   46402 * msched-max-memory-insns:               IA-64 Options.      (line  209)
   46403 * msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  215)
   46404 * msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  176)
   46405 * msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  169)
   46406 * msched-spec-ldc:                       IA-64 Options.      (line  189)
   46407 * msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  196)
   46408 * mschedule:                             HPPA Options.       (line   78)
   46409 * mscore5:                               Score Options.      (line   25)
   46410 * mscore5u:                              Score Options.      (line   28)
   46411 * mscore7:                               Score Options.      (line   31)
   46412 * mscore7d:                              Score Options.      (line   34)
   46413 * msda:                                  V850 Options.       (line   40)
   46414 * msdata <1>:                            RS/6000 and PowerPC Options.
   46415                                                              (line  679)
   46416 * msdata:                                IA-64 Options.      (line   42)
   46417 * msdata=data:                           RS/6000 and PowerPC Options.
   46418                                                              (line  684)
   46419 * msdata=default:                        RS/6000 and PowerPC Options.
   46420                                                              (line  679)
   46421 * msdata=eabi:                           RS/6000 and PowerPC Options.
   46422                                                              (line  659)
   46423 * msdata=none <1>:                       RS/6000 and PowerPC Options.
   46424                                                              (line  692)
   46425 * msdata=none:                           M32R/D Options.     (line   40)
   46426 * msdata=sdata:                          M32R/D Options.     (line   49)
   46427 * msdata=sysv:                           RS/6000 and PowerPC Options.
   46428                                                              (line  670)
   46429 * msdata=use:                            M32R/D Options.     (line   53)
   46430 * msdram <1>:                            MeP Options.        (line  110)
   46431 * msdram:                                Blackfin Options.   (line  163)
   46432 * msecure-plt:                           RS/6000 and PowerPC Options.
   46433                                                              (line  209)
   46434 * msel-sched-dont-check-control-spec:    IA-64 Options.      (line  205)
   46435 * msep-data:                             Blackfin Options.   (line  106)
   46436 * mserialize-volatile:                   Xtensa Options.     (line   35)
   46437 * mshared-library-id:                    Blackfin Options.   (line   99)
   46438 * mshort <1>:                            M68hc1x Options.    (line   40)
   46439 * mshort:                                M680x0 Options.     (line  219)
   46440 * msign-extend-enabled:                  LM32 Options.       (line   18)
   46441 * msim <1>:                              Xstormy16 Options.  (line    9)
   46442 * msim <2>:                              RX Options.         (line   70)
   46443 * msim <3>:                              RS/6000 and PowerPC Options.
   46444                                                              (line  615)
   46445 * msim <4>:                              MeP Options.        (line  114)
   46446 * msim <5>:                              M32C Options.       (line   13)
   46447 * msim:                                  Blackfin Options.   (line   33)
   46448 * msimnovec:                             MeP Options.        (line  117)
   46449 * msimple-fpu:                           RS/6000 and PowerPC Options.
   46450                                                              (line  365)
   46451 * msingle-exit:                          MMIX Options.       (line   66)
   46452 * msingle-float <1>:                     RS/6000 and PowerPC Options.
   46453                                                              (line  361)
   46454 * msingle-float:                         MIPS Options.       (line  233)
   46455 * msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
   46456                                                              (line  504)
   46457 * msingle-pic-base:                      ARM Options.        (line  192)
   46458 * msio:                                  HPPA Options.       (line  105)
   46459 * mslow-bytes:                           MCore Options.      (line   35)
   46460 * msmall-data:                           DEC Alpha Options.  (line  195)
   46461 * msmall-data-limit:                     RX Options.         (line   47)
   46462 * msmall-divides:                        MicroBlaze Options. (line   38)
   46463 * msmall-exec:                           S/390 and zSeries Options.
   46464                                                              (line   80)
   46465 * msmall-mem:                            SPU Options.        (line   35)
   46466 * msmall-model:                          FR30 Options.       (line    9)
   46467 * msmall-text:                           DEC Alpha Options.  (line  213)
   46468 * msmartmips:                            MIPS Options.       (line  269)
   46469 * msoft-float <1>:                       SPARC Options.      (line   25)
   46470 * msoft-float <2>:                       S/390 and zSeries Options.
   46471                                                              (line   11)
   46472 * msoft-float <3>:                       RS/6000 and PowerPC Options.
   46473                                                              (line  355)
   46474 * msoft-float <4>:                       PDP-11 Options.     (line   13)
   46475 * msoft-float <5>:                       MIPS Options.       (line  229)
   46476 * msoft-float <6>:                       MicroBlaze Options. (line    7)
   46477 * msoft-float <7>:                       M680x0 Options.     (line  202)
   46478 * msoft-float <8>:                       i386 and x86-64 Options.
   46479                                                              (line  234)
   46480 * msoft-float <9>:                       HPPA Options.       (line   91)
   46481 * msoft-float <10>:                      FRV Options.        (line   22)
   46482 * msoft-float <11>:                      DEC Alpha Options.  (line   10)
   46483 * msoft-float:                           ARM Options.        (line   60)
   46484 * msoft-quad-float:                      SPARC Options.      (line   45)
   46485 * msoft-reg-count:                       M68hc1x Options.    (line   43)
   46486 * mspace <1>:                            V850 Options.       (line   30)
   46487 * mspace:                                SH Options.         (line  142)
   46488 * mspe:                                  RS/6000 and PowerPC Options.
   46489                                                              (line  229)
   46490 * mspecld-anomaly:                       Blackfin Options.   (line   47)
   46491 * msplit-addresses:                      MIPS Options.       (line  411)
   46492 * msse:                                  i386 and x86-64 Options.
   46493                                                              (line  477)
   46494 * msse2avx:                              i386 and x86-64 Options.
   46495                                                              (line  668)
   46496 * msseregparm:                           i386 and x86-64 Options.
   46497                                                              (line  350)
   46498 * mstack-align:                          CRIS Options.       (line   55)
   46499 * mstack-bias:                           SPARC Options.      (line  213)
   46500 * mstack-check-l1:                       Blackfin Options.   (line   73)
   46501 * mstack-guard:                          S/390 and zSeries Options.
   46502                                                              (line  156)
   46503 * mstack-increment:                      MCore Options.      (line   50)
   46504 * mstack-size:                           S/390 and zSeries Options.
   46505                                                              (line  156)
   46506 * mstackrealign:                         i386 and x86-64 Options.
   46507                                                              (line  393)
   46508 * mstdmain:                              SPU Options.        (line   40)
   46509 * mstrict-align <1>:                     RS/6000 and PowerPC Options.
   46510                                                              (line  456)
   46511 * mstrict-align:                         M680x0 Options.     (line  286)
   46512 * mstring:                               RS/6000 and PowerPC Options.
   46513                                                              (line  391)
   46514 * mstringop-strategy=ALG:                i386 and x86-64 Options.
   46515                                                              (line  642)
   46516 * mstructure-size-boundary:              ARM Options.        (line  147)
   46517 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
   46518                                                              (line  579)
   46519 * msym32:                                MIPS Options.       (line  308)
   46520 * msynci:                                MIPS Options.       (line  650)
   46521 * MT:                                    Preprocessor Options.
   46522                                                              (line  239)
   46523 * mtarget-align:                         Xtensa Options.     (line   59)
   46524 * mtda:                                  V850 Options.       (line   34)
   46525 * mtext:                                 ARC Options.        (line   30)
   46526 * mtext-section-literals:                Xtensa Options.     (line   47)
   46527 * mtf:                                   MeP Options.        (line  121)
   46528 * mthread:                               i386 and x86-64 Windows Options.
   46529                                                              (line   26)
   46530 * mthreads:                              i386 and x86-64 Options.
   46531                                                              (line  617)
   46532 * mthumb:                                ARM Options.        (line  233)
   46533 * mthumb-interwork:                      ARM Options.        (line   25)
   46534 * mtiny-stack:                           AVR Options.        (line   40)
   46535 * mtiny=:                                MeP Options.        (line  125)
   46536 * mtls:                                  FRV Options.        (line   75)
   46537 * mTLS:                                  FRV Options.        (line   72)
   46538 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
   46539                                                              (line  658)
   46540 * mtls-markers:                          RS/6000 and PowerPC Options.
   46541                                                              (line  750)
   46542 * mtls-size:                             IA-64 Options.      (line  112)
   46543 * mtoc:                                  RS/6000 and PowerPC Options.
   46544                                                              (line  481)
   46545 * mtomcat-stats:                         FRV Options.        (line  209)
   46546 * mtoplevel-symbols:                     MMIX Options.       (line   40)
   46547 * mtp:                                   ARM Options.        (line  270)
   46548 * mtpcs-frame:                           ARM Options.        (line  243)
   46549 * mtpcs-leaf-frame:                      ARM Options.        (line  249)
   46550 * mtpf-trace:                            S/390 and zSeries Options.
   46551                                                              (line  131)
   46552 * mtrap-precision:                       DEC Alpha Options.  (line  109)
   46553 * mtune <1>:                             SPARC Options.      (line  143)
   46554 * mtune <2>:                             S/390 and zSeries Options.
   46555                                                              (line  124)
   46556 * mtune <3>:                             RS/6000 and PowerPC Options.
   46557                                                              (line  168)
   46558 * mtune <4>:                             MN10300 Options.    (line   31)
   46559 * mtune <5>:                             MIPS Options.       (line   62)
   46560 * mtune <6>:                             M680x0 Options.     (line   69)
   46561 * mtune <7>:                             IA-64 Options.      (line  116)
   46562 * mtune <8>:                             i386 and x86-64 Options.
   46563                                                              (line   10)
   46564 * mtune <9>:                             DEC Alpha Options.  (line  267)
   46565 * mtune <10>:                            CRIS Options.       (line   16)
   46566 * mtune:                                 ARM Options.        (line   98)
   46567 * muclibc:                               GNU/Linux Options.  (line   13)
   46568 * muls:                                  Score Options.      (line   18)
   46569 * multcost=NUMBER:                       SH Options.         (line  155)
   46570 * multi_module:                          Darwin Options.     (line  199)
   46571 * multilib-library-pic:                  FRV Options.        (line   89)
   46572 * multiply-enabled:                      LM32 Options.       (line   15)
   46573 * multiply_defined:                      Darwin Options.     (line  199)
   46574 * multiply_defined_unused:               Darwin Options.     (line  199)
   46575 * munaligned-doubles:                    SPARC Options.      (line   59)
   46576 * municode:                              i386 and x86-64 Windows Options.
   46577                                                              (line   30)
   46578 * muninit-const-in-rodata:               MIPS Options.       (line  381)
   46579 * munix:                                 VAX Options.        (line    9)
   46580 * munix-asm:                             PDP-11 Options.     (line   68)
   46581 * munsafe-dma:                           SPU Options.        (line   17)
   46582 * mupdate:                               RS/6000 and PowerPC Options.
   46583                                                              (line  402)
   46584 * muser-enabled:                         LM32 Options.       (line   21)
   46585 * musermode:                             SH Options.         (line  150)
   46586 * mv850:                                 V850 Options.       (line   49)
   46587 * mv850e:                                V850 Options.       (line   81)
   46588 * mv850e1:                               V850 Options.       (line   73)
   46589 * mv850e2:                               V850 Options.       (line   69)
   46590 * mv850e2v3:                             V850 Options.       (line   64)
   46591 * mv850es:                               V850 Options.       (line   77)
   46592 * mv8plus:                               SPARC Options.      (line  156)
   46593 * mveclibabi <1>:                        RS/6000 and PowerPC Options.
   46594                                                              (line  807)
   46595 * mveclibabi:                            i386 and x86-64 Options.
   46596                                                              (line  571)
   46597 * mvect8-ret-in-mem:                     i386 and x86-64 Options.
   46598                                                              (line  360)
   46599 * mvis:                                  SPARC Options.      (line  163)
   46600 * mvliw-branch:                          FRV Options.        (line  164)
   46601 * mvms-return-codes <1>:                 IA-64/VMS Options.  (line    9)
   46602 * mvms-return-codes:                     DEC Alpha/VMS Options.
   46603                                                              (line    9)
   46604 * mvolatile-asm-stop:                    IA-64 Options.      (line   32)
   46605 * mvr4130-align:                         MIPS Options.       (line  639)
   46606 * mvrsave:                               RS/6000 and PowerPC Options.
   46607                                                              (line  199)
   46608 * mvsx:                                  RS/6000 and PowerPC Options.
   46609                                                              (line  243)
   46610 * mvxworks:                              RS/6000 and PowerPC Options.
   46611                                                              (line  636)
   46612 * mvzeroupper:                           i386 and x86-64 Options.
   46613                                                              (line  520)
   46614 * mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
   46615                                                              (line  205)
   46616 * mwarn-dynamicstack:                    S/390 and zSeries Options.
   46617                                                              (line  150)
   46618 * mwarn-framesize:                       S/390 and zSeries Options.
   46619                                                              (line  142)
   46620 * mwarn-reloc:                           SPU Options.        (line   10)
   46621 * mwide-bitfields:                       MCore Options.      (line   23)
   46622 * mwin32:                                i386 and x86-64 Windows Options.
   46623                                                              (line   35)
   46624 * mwindows:                              i386 and x86-64 Windows Options.
   46625                                                              (line   41)
   46626 * mword-relocations:                     ARM Options.        (line  278)
   46627 * mwords-little-endian:                  ARM Options.        (line   71)
   46628 * mxgot <1>:                             MIPS Options.       (line  191)
   46629 * mxgot:                                 M680x0 Options.     (line  318)
   46630 * mxilinx-fpu:                           RS/6000 and PowerPC Options.
   46631                                                              (line  375)
   46632 * mxl-barrel-shift:                      MicroBlaze Options. (line   32)
   46633 * mxl-compat:                            RS/6000 and PowerPC Options.
   46634                                                              (line  312)
   46635 * mxl-float-convert:                     MicroBlaze Options. (line   50)
   46636 * mxl-float-sqrt:                        MicroBlaze Options. (line   53)
   46637 * mxl-gp-opt:                            MicroBlaze Options. (line   44)
   46638 * mxl-multiply-high:                     MicroBlaze Options. (line   47)
   46639 * mxl-pattern-compare:                   MicroBlaze Options. (line   35)
   46640 * mxl-soft-div:                          MicroBlaze Options. (line   29)
   46641 * mxl-soft-mul:                          MicroBlaze Options. (line   26)
   46642 * mxl-stack-check:                       MicroBlaze Options. (line   41)
   46643 * myellowknife:                          RS/6000 and PowerPC Options.
   46644                                                              (line  631)
   46645 * mzarch:                                S/390 and zSeries Options.
   46646                                                              (line   95)
   46647 * mzda:                                  V850 Options.       (line   45)
   46648 * mzero-extend:                          MMIX Options.       (line   27)
   46649 * no-canonical-prefixes:                 Overall Options.    (line  343)
   46650 * no-integrated-cpp:                     C Dialect Options.  (line  272)
   46651 * no_dead_strip_inits_and_terms:         Darwin Options.     (line  199)
   46652 * noall_load:                            Darwin Options.     (line  199)
   46653 * nocpp:                                 MIPS Options.       (line  477)
   46654 * nodefaultlibs:                         Link Options.       (line   62)
   46655 * nofixprebinding:                       Darwin Options.     (line  199)
   46656 * nofpu:                                 RX Options.         (line   17)
   46657 * nolibdld:                              HPPA Options.       (line  188)
   46658 * nomultidefs:                           Darwin Options.     (line  199)
   46659 * non-static:                            VxWorks Options.    (line   16)
   46660 * noprebind:                             Darwin Options.     (line  199)
   46661 * noseglinkedit:                         Darwin Options.     (line  199)
   46662 * nostartfiles:                          Link Options.       (line   57)
   46663 * nostdinc:                              Preprocessor Options.
   46664                                                              (line  385)
   46665 * nostdinc++ <1>:                        Preprocessor Options.
   46666                                                              (line  390)
   46667 * nostdinc++:                            C++ Dialect Options.
   46668                                                              (line  322)
   46669 * nostdlib:                              Link Options.       (line   73)
   46670 * o:                                     Preprocessor Options.
   46671                                                              (line   75)
   46672 * O:                                     Optimize Options.   (line   39)
   46673 * o:                                     Overall Options.    (line  192)
   46674 * O0:                                    Optimize Options.   (line  126)
   46675 * O1:                                    Optimize Options.   (line   39)
   46676 * O2:                                    Optimize Options.   (line   82)
   46677 * O3:                                    Optimize Options.   (line  119)
   46678 * Ofast:                                 Optimize Options.   (line  140)
   46679 * Os:                                    Optimize Options.   (line  130)
   46680 * P:                                     Preprocessor Options.
   46681                                                              (line  603)
   46682 * p:                                     Debugging Options.  (line  295)
   46683 * pagezero_size:                         Darwin Options.     (line  199)
   46684 * param:                                 Optimize Options.   (line 2264)
   46685 * pass-exit-codes:                       Overall Options.    (line  150)
   46686 * pedantic <1>:                          Warnings and Errors.
   46687                                                              (line   25)
   46688 * pedantic <2>:                          Alternate Keywords. (line   30)
   46689 * pedantic <3>:                          C Extensions.       (line    6)
   46690 * pedantic <4>:                          Preprocessor Options.
   46691                                                              (line  163)
   46692 * pedantic <5>:                          Warning Options.    (line   72)
   46693 * pedantic:                              Standards.          (line   16)
   46694 * pedantic-errors <1>:                   Warnings and Errors.
   46695                                                              (line   25)
   46696 * pedantic-errors <2>:                   Non-bugs.           (line  216)
   46697 * pedantic-errors <3>:                   Preprocessor Options.
   46698                                                              (line  168)
   46699 * pedantic-errors <4>:                   Warning Options.    (line  114)
   46700 * pedantic-errors:                       Standards.          (line   16)
   46701 * pg:                                    Debugging Options.  (line  301)
   46702 * pie:                                   Link Options.       (line   95)
   46703 * pipe:                                  Overall Options.    (line  215)
   46704 * prebind:                               Darwin Options.     (line  199)
   46705 * prebind_all_twolevel_modules:          Darwin Options.     (line  199)
   46706 * print-file-name:                       Debugging Options.  (line 1140)
   46707 * print-libgcc-file-name:                Debugging Options.  (line 1170)
   46708 * print-multi-directory:                 Debugging Options.  (line 1146)
   46709 * print-multi-lib:                       Debugging Options.  (line 1151)
   46710 * print-multi-os-directory:              Debugging Options.  (line 1158)
   46711 * print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
   46712                                                              (line  203)
   46713 * print-prog-name:                       Debugging Options.  (line 1167)
   46714 * print-search-dirs:                     Debugging Options.  (line 1178)
   46715 * print-sysroot:                         Debugging Options.  (line 1191)
   46716 * print-sysroot-headers-suffix:          Debugging Options.  (line 1198)
   46717 * private_bundle:                        Darwin Options.     (line  199)
   46718 * pthread <1>:                           Solaris 2 Options.  (line   37)
   46719 * pthread:                               RS/6000 and PowerPC Options.
   46720                                                              (line  757)
   46721 * pthreads:                              Solaris 2 Options.  (line   31)
   46722 * Q:                                     Debugging Options.  (line  307)
   46723 * Qn:                                    System V Options.   (line   18)
   46724 * Qy:                                    System V Options.   (line   14)
   46725 * rdynamic:                              Link Options.       (line  101)
   46726 * read_only_relocs:                      Darwin Options.     (line  199)
   46727 * remap:                                 Preprocessor Options.
   46728                                                              (line  651)
   46729 * s:                                     Link Options.       (line  108)
   46730 * S <1>:                                 Link Options.       (line   20)
   46731 * S:                                     Overall Options.    (line  175)
   46732 * save-temps:                            Debugging Options.  (line 1048)
   46733 * save-temps=obj:                        Debugging Options.  (line 1074)
   46734 * sectalign:                             Darwin Options.     (line  199)
   46735 * sectcreate:                            Darwin Options.     (line  199)
   46736 * sectobjectsymbols:                     Darwin Options.     (line  199)
   46737 * sectorder:                             Darwin Options.     (line  199)
   46738 * seg1addr:                              Darwin Options.     (line  199)
   46739 * seg_addr_table:                        Darwin Options.     (line  199)
   46740 * seg_addr_table_filename:               Darwin Options.     (line  199)
   46741 * segaddr:                               Darwin Options.     (line  199)
   46742 * seglinkedit:                           Darwin Options.     (line  199)
   46743 * segprot:                               Darwin Options.     (line  199)
   46744 * segs_read_only_addr:                   Darwin Options.     (line  199)
   46745 * segs_read_write_addr:                  Darwin Options.     (line  199)
   46746 * shared:                                Link Options.       (line  117)
   46747 * shared-libgcc:                         Link Options.       (line  125)
   46748 * sim:                                   CRIS Options.       (line   95)
   46749 * sim2:                                  CRIS Options.       (line  101)
   46750 * single_module:                         Darwin Options.     (line  199)
   46751 * specs:                                 Directory Options.  (line   89)
   46752 * static <1>:                            HPPA Options.       (line  192)
   46753 * static <2>:                            Darwin Options.     (line  199)
   46754 * static:                                Link Options.       (line  112)
   46755 * static-libgcc:                         Link Options.       (line  125)
   46756 * std <1>:                               Non-bugs.           (line  107)
   46757 * std <2>:                               Other Builtins.     (line   22)
   46758 * std <3>:                               C Dialect Options.  (line   47)
   46759 * std:                                   Standards.          (line   16)
   46760 * std=:                                  Preprocessor Options.
   46761                                                              (line  326)
   46762 * sub_library:                           Darwin Options.     (line  199)
   46763 * sub_umbrella:                          Darwin Options.     (line  199)
   46764 * symbolic:                              Link Options.       (line  172)
   46765 * sysroot:                               Directory Options.  (line   97)
   46766 * T:                                     Link Options.       (line  178)
   46767 * target-help <1>:                       Preprocessor Options.
   46768                                                              (line  656)
   46769 * target-help:                           Overall Options.    (line  230)
   46770 * threads <1>:                           Solaris 2 Options.  (line   25)
   46771 * threads:                               HPPA Options.       (line  205)
   46772 * time:                                  Debugging Options.  (line 1089)
   46773 * tno-android-cc:                        GNU/Linux Options.  (line   31)
   46774 * tno-android-ld:                        GNU/Linux Options.  (line   35)
   46775 * traditional <1>:                       Incompatibilities.  (line    6)
   46776 * traditional:                           C Dialect Options.  (line  284)
   46777 * traditional-cpp <1>:                   Preprocessor Options.
   46778                                                              (line  634)
   46779 * traditional-cpp:                       C Dialect Options.  (line  284)
   46780 * trigraphs <1>:                         Preprocessor Options.
   46781                                                              (line  638)
   46782 * trigraphs:                             C Dialect Options.  (line  268)
   46783 * twolevel_namespace:                    Darwin Options.     (line  199)
   46784 * u:                                     Link Options.       (line  211)
   46785 * U:                                     Preprocessor Options.
   46786                                                              (line   57)
   46787 * umbrella:                              Darwin Options.     (line  199)
   46788 * undef:                                 Preprocessor Options.
   46789                                                              (line   61)
   46790 * undefined:                             Darwin Options.     (line  199)
   46791 * unexported_symbols_list:               Darwin Options.     (line  199)
   46792 * v <1>:                                 Preprocessor Options.
   46793                                                              (line  660)
   46794 * v:                                     Overall Options.    (line  203)
   46795 * version <1>:                           Preprocessor Options.
   46796                                                              (line  673)
   46797 * version:                               Overall Options.    (line  351)
   46798 * W:                                     Incompatibilities.  (line   64)
   46799 * w:                                     Preprocessor Options.
   46800                                                              (line  159)
   46801 * W:                                     Warning Options.    (line  168)
   46802 * w:                                     Warning Options.    (line   25)
   46803 * Wa:                                    Assembler Options.  (line    9)
   46804 * Wabi:                                  C++ Dialect Options.
   46805                                                              (line  336)
   46806 * Waddress:                              Warning Options.    (line 1214)
   46807 * Waggregate-return:                     Warning Options.    (line 1232)
   46808 * Wall <1>:                              Standard Libraries. (line    6)
   46809 * Wall <2>:                              Preprocessor Options.
   46810                                                              (line   81)
   46811 * Wall:                                  Warning Options.    (line  118)
   46812 * Warray-bounds:                         Warning Options.    (line  877)
   46813 * Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
   46814                                                              (line  157)
   46815 * Wattributes:                           Warning Options.    (line 1237)
   46816 * Wbad-function-cast:                    Warning Options.    (line 1100)
   46817 * Wbuiltin-macro-redefined:              Warning Options.    (line 1243)
   46818 * Wcast-align:                           Warning Options.    (line 1131)
   46819 * Wcast-qual:                            Warning Options.    (line 1115)
   46820 * Wchar-subscripts:                      Warning Options.    (line  207)
   46821 * Wclobbered:                            Warning Options.    (line 1151)
   46822 * Wcomment <1>:                          Preprocessor Options.
   46823                                                              (line   89)
   46824 * Wcomment:                              Warning Options.    (line  212)
   46825 * Wcomments:                             Preprocessor Options.
   46826                                                              (line   89)
   46827 * Wconversion:                           Warning Options.    (line 1155)
   46828 * Wconversion-null:                      Warning Options.    (line 1173)
   46829 * Wcoverage-mismatch:                    Language Independent Options.
   46830                                                              (line   42)
   46831 * Wctor-dtor-privacy:                    C++ Dialect Options.
   46832                                                              (line  446)
   46833 * Wdeclaration-after-statement:          Warning Options.    (line 1009)
   46834 * Wdeprecated:                           Warning Options.    (line 1372)
   46835 * Wdeprecated-declarations:              Warning Options.    (line 1376)
   46836 * Wdisabled-optimization:                Warning Options.    (line 1511)
   46837 * Wdiv-by-zero:                          Warning Options.    (line  882)
   46838 * Wdouble-promotion:                     Warning Options.    (line  222)
   46839 * weak_reference_mismatches:             Darwin Options.     (line  199)
   46840 * Weffc++:                               C++ Dialect Options.
   46841                                                              (line  479)
   46842 * Wempty-body:                           Warning Options.    (line 1181)
   46843 * Wendif-labels <1>:                     Preprocessor Options.
   46844                                                              (line  136)
   46845 * Wendif-labels:                         Warning Options.    (line 1019)
   46846 * Wenum-compare:                         Warning Options.    (line 1185)
   46847 * Werror <1>:                            Preprocessor Options.
   46848                                                              (line  149)
   46849 * Werror:                                Warning Options.    (line   28)
   46850 * Werror=:                               Warning Options.    (line   31)
   46851 * Wextra:                                Warning Options.    (line  168)
   46852 * Wfatal-errors:                         Warning Options.    (line   48)
   46853 * Wfloat-equal:                          Warning Options.    (line  909)
   46854 * Wformat <1>:                           Function Attributes.
   46855                                                              (line  420)
   46856 * Wformat:                               Warning Options.    (line  240)
   46857 * Wformat-contains-nul:                  Warning Options.    (line  279)
   46858 * Wformat-extra-args:                    Warning Options.    (line  283)
   46859 * Wformat-nonliteral <1>:                Function Attributes.
   46860                                                              (line  485)
   46861 * Wformat-nonliteral:                    Warning Options.    (line  301)
   46862 * Wformat-security:                      Warning Options.    (line  306)
   46863 * Wformat-y2k:                           Warning Options.    (line  275)
   46864 * Wformat-zero-length:                   Warning Options.    (line  297)
   46865 * Wformat=2:                             Warning Options.    (line  317)
   46866 * Wframe-larger-than:                    Warning Options.    (line 1065)
   46867 * whatsloaded:                           Darwin Options.     (line  199)
   46868 * whyload:                               Darwin Options.     (line  199)
   46869 * Wignored-qualifiers:                   Warning Options.    (line  356)
   46870 * Wimplicit:                             Warning Options.    (line  352)
   46871 * Wimplicit-function-declaration:        Warning Options.    (line  346)
   46872 * Wimplicit-int:                         Warning Options.    (line  342)
   46873 * Winit-self:                            Warning Options.    (line  329)
   46874 * Winline <1>:                           Inline.             (line   63)
   46875 * Winline:                               Warning Options.    (line 1442)
   46876 * Wint-to-pointer-cast:                  Warning Options.    (line 1469)
   46877 * Winvalid-offsetof:                     Warning Options.    (line 1455)
   46878 * Winvalid-pch:                          Warning Options.    (line 1486)
   46879 * Wjump-misses-init:                     Warning Options.    (line 1190)
   46880 * Wl:                                    Link Options.       (line  203)
   46881 * Wlarger-than-LEN:                      Warning Options.    (line 1062)
   46882 * Wlarger-than=LEN:                      Warning Options.    (line 1062)
   46883 * Wlogical-op:                           Warning Options.    (line 1227)
   46884 * Wlong-long:                            Warning Options.    (line 1490)
   46885 * Wmain:                                 Warning Options.    (line  367)
   46886 * Wmaybe-uninitialized:                  Warning Options.    (line  711)
   46887 * Wmissing-braces:                       Warning Options.    (line  374)
   46888 * Wmissing-declarations:                 Warning Options.    (line 1278)
   46889 * Wmissing-field-initializers:           Warning Options.    (line 1286)
   46890 * Wmissing-format-attribute:             Warning Options.    (line 1304)
   46891 * Wmissing-include-dirs:                 Warning Options.    (line  384)
   46892 * Wmissing-parameter-type:               Warning Options.    (line 1264)
   46893 * Wmissing-prototypes:                   Warning Options.    (line 1272)
   46894 * Wmultichar:                            Warning Options.    (line 1323)
   46895 * Wnested-externs:                       Warning Options.    (line 1439)
   46896 * Wno-abi:                               C++ Dialect Options.
   46897                                                              (line  336)
   46898 * Wno-address:                           Warning Options.    (line 1214)
   46899 * Wno-aggregate-return:                  Warning Options.    (line 1232)
   46900 * Wno-all:                               Warning Options.    (line  118)
   46901 * Wno-array-bounds:                      Warning Options.    (line  877)
   46902 * Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
   46903                                                              (line  157)
   46904 * Wno-attributes:                        Warning Options.    (line 1237)
   46905 * Wno-bad-function-cast:                 Warning Options.    (line 1100)
   46906 * Wno-builtin-macro-redefined:           Warning Options.    (line 1243)
   46907 * Wno-cast-align:                        Warning Options.    (line 1131)
   46908 * Wno-cast-qual:                         Warning Options.    (line 1115)
   46909 * Wno-char-subscripts:                   Warning Options.    (line  207)
   46910 * Wno-clobbered:                         Warning Options.    (line 1151)
   46911 * Wno-comment:                           Warning Options.    (line  212)
   46912 * Wno-conversion:                        Warning Options.    (line 1155)
   46913 * Wno-conversion-null:                   Warning Options.    (line 1173)
   46914 * Wno-ctor-dtor-privacy:                 C++ Dialect Options.
   46915                                                              (line  446)
   46916 * Wno-declaration-after-statement:       Warning Options.    (line 1009)
   46917 * Wno-deprecated:                        Warning Options.    (line 1372)
   46918 * Wno-deprecated-declarations:           Warning Options.    (line 1376)
   46919 * Wno-disabled-optimization:             Warning Options.    (line 1511)
   46920 * Wno-div-by-zero:                       Warning Options.    (line  882)
   46921 * Wno-double-promotion:                  Warning Options.    (line  222)
   46922 * Wno-effc++:                            C++ Dialect Options.
   46923                                                              (line  479)
   46924 * Wno-empty-body:                        Warning Options.    (line 1181)
   46925 * Wno-endif-labels:                      Warning Options.    (line 1019)
   46926 * Wno-enum-compare:                      Warning Options.    (line 1185)
   46927 * Wno-error:                             Warning Options.    (line   28)
   46928 * Wno-error=:                            Warning Options.    (line   31)
   46929 * Wno-extra:                             Warning Options.    (line  168)
   46930 * Wno-fatal-errors:                      Warning Options.    (line   48)
   46931 * Wno-float-equal:                       Warning Options.    (line  909)
   46932 * Wno-format:                            Warning Options.    (line  240)
   46933 * Wno-format-contains-nul:               Warning Options.    (line  279)
   46934 * Wno-format-extra-args:                 Warning Options.    (line  283)
   46935 * Wno-format-nonliteral:                 Warning Options.    (line  301)
   46936 * Wno-format-security:                   Warning Options.    (line  306)
   46937 * Wno-format-y2k:                        Warning Options.    (line  275)
   46938 * Wno-format-zero-length:                Warning Options.    (line  297)
   46939 * Wno-format=2:                          Warning Options.    (line  317)
   46940 * Wno-ignored-qualifiers:                Warning Options.    (line  356)
   46941 * Wno-implicit:                          Warning Options.    (line  352)
   46942 * Wno-implicit-function-declaration:     Warning Options.    (line  346)
   46943 * Wno-implicit-int:                      Warning Options.    (line  342)
   46944 * Wno-init-self:                         Warning Options.    (line  329)
   46945 * Wno-inline:                            Warning Options.    (line 1442)
   46946 * Wno-int-to-pointer-cast:               Warning Options.    (line 1469)
   46947 * Wno-invalid-offsetof:                  Warning Options.    (line 1455)
   46948 * Wno-invalid-pch:                       Warning Options.    (line 1486)
   46949 * Wno-jump-misses-init:                  Warning Options.    (line 1190)
   46950 * Wno-logical-op:                        Warning Options.    (line 1227)
   46951 * Wno-long-long:                         Warning Options.    (line 1490)
   46952 * Wno-main:                              Warning Options.    (line  367)
   46953 * Wno-maybe-uninitialized:               Warning Options.    (line  711)
   46954 * Wno-missing-braces:                    Warning Options.    (line  374)
   46955 * Wno-missing-declarations:              Warning Options.    (line 1278)
   46956 * Wno-missing-field-initializers:        Warning Options.    (line 1286)
   46957 * Wno-missing-format-attribute:          Warning Options.    (line 1304)
   46958 * Wno-missing-include-dirs:              Warning Options.    (line  384)
   46959 * Wno-missing-parameter-type:            Warning Options.    (line 1264)
   46960 * Wno-missing-prototypes:                Warning Options.    (line 1272)
   46961 * Wno-mudflap:                           Warning Options.    (line 1531)
   46962 * Wno-multichar:                         Warning Options.    (line 1323)
   46963 * Wno-nested-externs:                    Warning Options.    (line 1439)
   46964 * Wno-noexcept:                          C++ Dialect Options.
   46965                                                              (line  451)
   46966 * Wno-non-template-friend:               C++ Dialect Options.
   46967                                                              (line  516)
   46968 * Wno-non-virtual-dtor:                  C++ Dialect Options.
   46969                                                              (line  457)
   46970 * Wno-nonnull:                           Warning Options.    (line  322)
   46971 * Wno-old-style-cast:                    C++ Dialect Options.
   46972                                                              (line  532)
   46973 * Wno-old-style-declaration:             Warning Options.    (line 1254)
   46974 * Wno-old-style-definition:              Warning Options.    (line 1260)
   46975 * Wno-overflow:                          Warning Options.    (line 1382)
   46976 * Wno-overlength-strings:                Warning Options.    (line 1535)
   46977 * Wno-overloaded-virtual:                C++ Dialect Options.
   46978                                                              (line  538)
   46979 * Wno-override-init:                     Warning Options.    (line 1385)
   46980 * Wno-packed:                            Warning Options.    (line 1393)
   46981 * Wno-packed-bitfield-compat:            Warning Options.    (line 1410)
   46982 * Wno-padded:                            Warning Options.    (line 1427)
   46983 * Wno-parentheses:                       Warning Options.    (line  387)
   46984 * Wno-pedantic-ms-format:                Warning Options.    (line 1080)
   46985 * Wno-pmf-conversions <1>:               Bound member functions.
   46986                                                              (line   35)
   46987 * Wno-pmf-conversions:                   C++ Dialect Options.
   46988                                                              (line  557)
   46989 * Wno-pointer-arith:                     Warning Options.    (line 1086)
   46990 * Wno-pointer-sign:                      Warning Options.    (line 1520)
   46991 * Wno-pointer-to-int-cast:               Warning Options.    (line 1482)
   46992 * Wno-pragmas:                           Warning Options.    (line  762)
   46993 * Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
   46994                                                              (line  161)
   46995 * Wno-real-conversion:                   Warning Options.    (line 1177)
   46996 * Wno-redundant-decls:                   Warning Options.    (line 1434)
   46997 * Wno-reorder:                           C++ Dialect Options.
   46998                                                              (line  463)
   46999 * Wno-return-type:                       Warning Options.    (line  527)
   47000 * Wno-ripa-opt-mismatch:                 Warning Options.    (line  542)
   47001 * Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
   47002                                                              (line  171)
   47003 * Wno-self-assign:                       Warning Options.    (line  483)
   47004 * Wno-self-assign-non-pod:               Warning Options.    (line  506)
   47005 * Wno-sequence-point:                    Warning Options.    (line  437)
   47006 * Wno-shadow:                            Warning Options.    (line 1023)
   47007 * Wno-shadow-compatible-local:           Warning Options.    (line 1034)
   47008 * Wno-shadow-local:                      Warning Options.    (line 1030)
   47009 * Wno-sign-compare:                      Warning Options.    (line 1201)
   47010 * Wno-sign-conversion:                   Warning Options.    (line 1208)
   47011 * Wno-sign-promo:                        C++ Dialect Options.
   47012                                                              (line  561)
   47013 * Wno-stack-protector:                   Warning Options.    (line 1526)
   47014 * Wno-strict-aliasing:                   Warning Options.    (line  767)
   47015 * Wno-strict-aliasing=n:                 Warning Options.    (line  775)
   47016 * Wno-strict-null-sentinel:              C++ Dialect Options.
   47017                                                              (line  509)
   47018 * Wno-strict-overflow:                   Warning Options.    (line  808)
   47019 * Wno-strict-prototypes:                 Warning Options.    (line 1248)
   47020 * Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
   47021                                                              (line  183)
   47022 * Wno-suggest-attribute=:                Warning Options.    (line  859)
   47023 * Wno-suggest-attribute=const:           Warning Options.    (line  865)
   47024 * Wno-suggest-attribute=noreturn:        Warning Options.    (line  865)
   47025 * Wno-suggest-attribute=pure:            Warning Options.    (line  865)
   47026 * Wno-switch:                            Warning Options.    (line  550)
   47027 * Wno-switch-default:                    Warning Options.    (line  558)
   47028 * Wno-switch-enum:                       Warning Options.    (line  561)
   47029 * Wno-sync-nand:                         Warning Options.    (line  570)
   47030 * Wno-system-headers:                    Warning Options.    (line  887)
   47031 * Wno-thread-safety:                     Warning Options.    (line  575)
   47032 * Wno-traditional:                       Warning Options.    (line  924)
   47033 * Wno-traditional-conversion:            Warning Options.    (line 1001)
   47034 * Wno-trampolines:                       Warning Options.    (line  898)
   47035 * Wno-trigraphs:                         Warning Options.    (line  611)
   47036 * Wno-type-limits:                       Warning Options.    (line 1093)
   47037 * Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
   47038                                                              (line  191)
   47039 * Wno-undef:                             Warning Options.    (line 1016)
   47040 * Wno-uninitialized:                     Warning Options.    (line  688)
   47041 * Wno-unknown-pragmas:                   Warning Options.    (line  755)
   47042 * Wno-unsafe-loop-optimizations:         Warning Options.    (line 1074)
   47043 * Wno-unused:                            Warning Options.    (line  681)
   47044 * Wno-unused-but-set-parameter:          Warning Options.    (line  616)
   47045 * Wno-unused-but-set-variable:           Warning Options.    (line  625)
   47046 * Wno-unused-function:                   Warning Options.    (line  635)
   47047 * Wno-unused-label:                      Warning Options.    (line  640)
   47048 * Wno-unused-parameter:                  Warning Options.    (line  647)
   47049 * Wno-unused-result:                     Warning Options.    (line  654)
   47050 * Wno-unused-value:                      Warning Options.    (line  671)
   47051 * Wno-unused-variable:                   Warning Options.    (line  659)
   47052 * Wno-variadic-macros:                   Warning Options.    (line 1495)
   47053 * Wno-vla:                               Warning Options.    (line 1501)
   47054 * Wno-volatile-register-var:             Warning Options.    (line 1505)
   47055 * Wno-write-strings:                     Warning Options.    (line 1137)
   47056 * Wnoexcept:                             C++ Dialect Options.
   47057                                                              (line  451)
   47058 * Wnon-template-friend:                  C++ Dialect Options.
   47059                                                              (line  516)
   47060 * Wnon-virtual-dtor:                     C++ Dialect Options.
   47061                                                              (line  457)
   47062 * Wnonnull:                              Warning Options.    (line  322)
   47063 * Wnormalized=:                          Warning Options.    (line 1329)
   47064 * Wold-style-cast:                       C++ Dialect Options.
   47065                                                              (line  532)
   47066 * Wold-style-declaration:                Warning Options.    (line 1254)
   47067 * Wold-style-definition:                 Warning Options.    (line 1260)
   47068 * Woverflow:                             Warning Options.    (line 1382)
   47069 * Woverlength-strings:                   Warning Options.    (line 1535)
   47070 * Woverloaded-virtual:                   C++ Dialect Options.
   47071                                                              (line  538)
   47072 * Woverride-init:                        Warning Options.    (line 1385)
   47073 * Wp:                                    Preprocessor Options.
   47074                                                              (line   14)
   47075 * Wpacked:                               Warning Options.    (line 1393)
   47076 * Wpacked-bitfield-compat:               Warning Options.    (line 1410)
   47077 * Wpadded:                               Warning Options.    (line 1427)
   47078 * Wparentheses:                          Warning Options.    (line  387)
   47079 * Wpedantic-ms-format:                   Warning Options.    (line 1080)
   47080 * Wpmf-conversions:                      C++ Dialect Options.
   47081                                                              (line  557)
   47082 * Wpointer-arith <1>:                    Pointer Arith.      (line   13)
   47083 * Wpointer-arith:                        Warning Options.    (line 1086)
   47084 * Wpointer-sign:                         Warning Options.    (line 1520)
   47085 * Wpointer-to-int-cast:                  Warning Options.    (line 1482)
   47086 * Wpragmas:                              Warning Options.    (line  762)
   47087 * Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
   47088                                                              (line  161)
   47089 * wrapper:                               Overall Options.    (line  354)
   47090 * Wreal-conversion:                      Warning Options.    (line 1177)
   47091 * Wredundant-decls:                      Warning Options.    (line 1434)
   47092 * Wreorder:                              C++ Dialect Options.
   47093                                                              (line  463)
   47094 * Wreturn-type:                          Warning Options.    (line  527)
   47095 * Wripa-opt-mismatch:                    Warning Options.    (line  542)
   47096 * Wselector:                             Objective-C and Objective-C++ Dialect Options.
   47097                                                              (line  171)
   47098 * Wself-assign:                          Warning Options.    (line  483)
   47099 * Wself-assign-non-pod:                  Warning Options.    (line  506)
   47100 * Wsequence-point:                       Warning Options.    (line  437)
   47101 * Wshadow:                               Warning Options.    (line 1023)
   47102 * Wshadow-compatible-local:              Warning Options.    (line 1034)
   47103 * Wshadow-local:                         Warning Options.    (line 1030)
   47104 * Wsign-compare:                         Warning Options.    (line 1201)
   47105 * Wsign-conversion:                      Warning Options.    (line 1208)
   47106 * Wsign-promo:                           C++ Dialect Options.
   47107                                                              (line  561)
   47108 * Wstack-protector:                      Warning Options.    (line 1526)
   47109 * Wstrict-aliasing:                      Warning Options.    (line  767)
   47110 * Wstrict-aliasing=n:                    Warning Options.    (line  775)
   47111 * Wstrict-null-sentinel:                 C++ Dialect Options.
   47112                                                              (line  509)
   47113 * Wstrict-overflow:                      Warning Options.    (line  808)
   47114 * Wstrict-prototypes:                    Warning Options.    (line 1248)
   47115 * Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
   47116                                                              (line  183)
   47117 * Wsuggest-attribute=:                   Warning Options.    (line  859)
   47118 * Wsuggest-attribute=const:              Warning Options.    (line  865)
   47119 * Wsuggest-attribute=noreturn:           Warning Options.    (line  865)
   47120 * Wsuggest-attribute=pure:               Warning Options.    (line  865)
   47121 * Wswitch:                               Warning Options.    (line  550)
   47122 * Wswitch-default:                       Warning Options.    (line  558)
   47123 * Wswitch-enum:                          Warning Options.    (line  561)
   47124 * Wsync-nand:                            Warning Options.    (line  570)
   47125 * Wsystem-headers <1>:                   Preprocessor Options.
   47126                                                              (line  153)
   47127 * Wsystem-headers:                       Warning Options.    (line  887)
   47128 * Wthread-safety:                        Warning Options.    (line  575)
   47129 * Wtraditional <1>:                      Preprocessor Options.
   47130                                                              (line  106)
   47131 * Wtraditional:                          Warning Options.    (line  924)
   47132 * Wtraditional-conversion:               Warning Options.    (line 1001)
   47133 * Wtrampolines:                          Warning Options.    (line  898)
   47134 * Wtrigraphs <1>:                        Preprocessor Options.
   47135                                                              (line   94)
   47136 * Wtrigraphs:                            Warning Options.    (line  611)
   47137 * Wtype-limits:                          Warning Options.    (line 1093)
   47138 * Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
   47139                                                              (line  191)
   47140 * Wundef <1>:                            Preprocessor Options.
   47141                                                              (line  112)
   47142 * Wundef:                                Warning Options.    (line 1016)
   47143 * Wuninitialized:                        Warning Options.    (line  688)
   47144 * Wunknown-pragmas:                      Warning Options.    (line  755)
   47145 * Wunsafe-loop-optimizations:            Warning Options.    (line 1074)
   47146 * Wunsuffixed-float-constants:           Warning Options.    (line 1550)
   47147 * Wunused:                               Warning Options.    (line  681)
   47148 * Wunused-but-set-parameter:             Warning Options.    (line  616)
   47149 * Wunused-but-set-variable:              Warning Options.    (line  625)
   47150 * Wunused-function:                      Warning Options.    (line  635)
   47151 * Wunused-label:                         Warning Options.    (line  640)
   47152 * Wunused-macros:                        Preprocessor Options.
   47153                                                              (line  117)
   47154 * Wunused-parameter:                     Warning Options.    (line  647)
   47155 * Wunused-result:                        Warning Options.    (line  654)
   47156 * Wunused-value:                         Warning Options.    (line  671)
   47157 * Wunused-variable:                      Warning Options.    (line  659)
   47158 * Wvariadic-macros:                      Warning Options.    (line 1495)
   47159 * Wvla:                                  Warning Options.    (line 1501)
   47160 * Wvolatile-register-var:                Warning Options.    (line 1505)
   47161 * Wwrite-strings:                        Warning Options.    (line 1137)
   47162 * x <1>:                                 Preprocessor Options.
   47163                                                              (line  310)
   47164 * x:                                     Overall Options.    (line  126)
   47165 * Xassembler:                            Assembler Options.  (line   13)
   47166 * Xbind-lazy:                            VxWorks Options.    (line   26)
   47167 * Xbind-now:                             VxWorks Options.    (line   30)
   47168 * Xlinker:                               Link Options.       (line  184)
   47169 * Xpreprocessor:                         Preprocessor Options.
   47170                                                              (line   25)
   47171 * Ym:                                    System V Options.   (line   26)
   47172 * YP:                                    System V Options.   (line   22)
   47173 
   47174 
   47175 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
   47176 
   47177 Keyword Index
   47178 *************
   47179 
   47180 [index]
   47181 * Menu:
   47182 
   47183 * ! in constraint:                       Multi-Alternative.  (line   33)
   47184 * # in constraint:                       Modifiers.          (line   57)
   47185 * #pragma:                               Pragmas.            (line    6)
   47186 * #pragma implementation:                C++ Interface.      (line   39)
   47187 * #pragma implementation, implied:       C++ Interface.      (line   46)
   47188 * #pragma interface:                     C++ Interface.      (line   20)
   47189 * #pragma, reason for not using:         Function Attributes.
   47190                                                              (line 1767)
   47191 * $:                                     Dollar Signs.       (line    6)
   47192 * % in constraint:                       Modifiers.          (line   45)
   47193 * %include:                              Spec Files.         (line   27)
   47194 * %include_noerr:                        Spec Files.         (line   31)
   47195 * %rename:                               Spec Files.         (line   35)
   47196 * & in constraint:                       Modifiers.          (line   25)
   47197 * ':                                     Incompatibilities.  (line  116)
   47198 * * in constraint:                       Modifiers.          (line   62)
   47199 * + in constraint:                       Modifiers.          (line   12)
   47200 * -lgcc, use with -nodefaultlibs:        Link Options.       (line   82)
   47201 * -lgcc, use with -nostdlib:             Link Options.       (line   82)
   47202 * -nodefaultlibs and unresolved references: Link Options.    (line   82)
   47203 * -nostdlib and unresolved references:   Link Options.       (line   82)
   47204 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
   47205                                                              (line  703)
   47206 * //:                                    C++ Comments.       (line    6)
   47207 * 0 in constraint:                       Simple Constraints. (line  127)
   47208 * < in constraint:                       Simple Constraints. (line   48)
   47209 * = in constraint:                       Modifiers.          (line    8)
   47210 * > in constraint:                       Simple Constraints. (line   61)
   47211 * ? in constraint:                       Multi-Alternative.  (line   27)
   47212 * ?: extensions:                         Conditionals.       (line    6)
   47213 * ?: side effect:                        Conditionals.       (line   20)
   47214 * _ in variables in macros:              Typeof.             (line   46)
   47215 * __builtin___clear_cache:               Other Builtins.     (line  329)
   47216 * __builtin___fprintf_chk:               Object Size Checking.
   47217                                                              (line    6)
   47218 * __builtin___memcpy_chk:                Object Size Checking.
   47219                                                              (line    6)
   47220 * __builtin___memmove_chk:               Object Size Checking.
   47221                                                              (line    6)
   47222 * __builtin___mempcpy_chk:               Object Size Checking.
   47223                                                              (line    6)
   47224 * __builtin___memset_chk:                Object Size Checking.
   47225                                                              (line    6)
   47226 * __builtin___printf_chk:                Object Size Checking.
   47227                                                              (line    6)
   47228 * __builtin___snprintf_chk:              Object Size Checking.
   47229                                                              (line    6)
   47230 * __builtin___sprintf_chk:               Object Size Checking.
   47231                                                              (line    6)
   47232 * __builtin___stpcpy_chk:                Object Size Checking.
   47233                                                              (line    6)
   47234 * __builtin___strcat_chk:                Object Size Checking.
   47235                                                              (line    6)
   47236 * __builtin___strcpy_chk:                Object Size Checking.
   47237                                                              (line    6)
   47238 * __builtin___strncat_chk:               Object Size Checking.
   47239                                                              (line    6)
   47240 * __builtin___strncpy_chk:               Object Size Checking.
   47241                                                              (line    6)
   47242 * __builtin___vfprintf_chk:              Object Size Checking.
   47243                                                              (line    6)
   47244 * __builtin___vprintf_chk:               Object Size Checking.
   47245                                                              (line    6)
   47246 * __builtin___vsnprintf_chk:             Object Size Checking.
   47247                                                              (line    6)
   47248 * __builtin___vsprintf_chk:              Object Size Checking.
   47249                                                              (line    6)
   47250 * __builtin_apply:                       Constructing Calls. (line   31)
   47251 * __builtin_apply_args:                  Constructing Calls. (line   20)
   47252 * __builtin_bswap32:                     Other Builtins.     (line  548)
   47253 * __builtin_bswap64:                     Other Builtins.     (line  553)
   47254 * __builtin_choose_expr:                 Other Builtins.     (line  157)
   47255 * __builtin_clz:                         Other Builtins.     (line  481)
   47256 * __builtin_clzl:                        Other Builtins.     (line  499)
   47257 * __builtin_clzll:                       Other Builtins.     (line  519)
   47258 * __builtin_constant_p:                  Other Builtins.     (line  197)
   47259 * __builtin_ctz:                         Other Builtins.     (line  485)
   47260 * __builtin_ctzl:                        Other Builtins.     (line  503)
   47261 * __builtin_ctzll:                       Other Builtins.     (line  523)
   47262 * __builtin_expect:                      Other Builtins.     (line  247)
   47263 * __builtin_extract_return_address:      Return Address.     (line   37)
   47264 * __builtin_ffs:                         Other Builtins.     (line  477)
   47265 * __builtin_ffsl:                        Other Builtins.     (line  495)
   47266 * __builtin_ffsll:                       Other Builtins.     (line  515)
   47267 * __builtin_fpclassify:                  Other Builtins.     (line    6)
   47268 * __builtin_frame_address:               Return Address.     (line   51)
   47269 * __builtin_frob_return_address:         Return Address.     (line   46)
   47270 * __builtin_huge_val:                    Other Builtins.     (line  380)
   47271 * __builtin_huge_valf:                   Other Builtins.     (line  385)
   47272 * __builtin_huge_vall:                   Other Builtins.     (line  388)
   47273 * __builtin_huge_valq:                   X86 Built-in Functions.
   47274                                                              (line   51)
   47275 * __builtin_inf:                         Other Builtins.     (line  403)
   47276 * __builtin_infd128:                     Other Builtins.     (line  413)
   47277 * __builtin_infd32:                      Other Builtins.     (line  407)
   47278 * __builtin_infd64:                      Other Builtins.     (line  410)
   47279 * __builtin_inff:                        Other Builtins.     (line  417)
   47280 * __builtin_infl:                        Other Builtins.     (line  422)
   47281 * __builtin_infq:                        X86 Built-in Functions.
   47282                                                              (line   47)
   47283 * __builtin_isfinite:                    Other Builtins.     (line    6)
   47284 * __builtin_isgreater:                   Other Builtins.     (line    6)
   47285 * __builtin_isgreaterequal:              Other Builtins.     (line    6)
   47286 * __builtin_isinf_sign:                  Other Builtins.     (line    6)
   47287 * __builtin_isless:                      Other Builtins.     (line    6)
   47288 * __builtin_islessequal:                 Other Builtins.     (line    6)
   47289 * __builtin_islessgreater:               Other Builtins.     (line    6)
   47290 * __builtin_isnormal:                    Other Builtins.     (line    6)
   47291 * __builtin_isunordered:                 Other Builtins.     (line    6)
   47292 * __builtin_nan:                         Other Builtins.     (line  433)
   47293 * __builtin_nand128:                     Other Builtins.     (line  455)
   47294 * __builtin_nand32:                      Other Builtins.     (line  449)
   47295 * __builtin_nand64:                      Other Builtins.     (line  452)
   47296 * __builtin_nanf:                        Other Builtins.     (line  459)
   47297 * __builtin_nanl:                        Other Builtins.     (line  462)
   47298 * __builtin_nans:                        Other Builtins.     (line  466)
   47299 * __builtin_nansf:                       Other Builtins.     (line  470)
   47300 * __builtin_nansl:                       Other Builtins.     (line  473)
   47301 * __builtin_object_size:                 Object Size Checking.
   47302                                                              (line    6)
   47303 * __builtin_offsetof:                    Offsetof.           (line    6)
   47304 * __builtin_parity:                      Other Builtins.     (line  492)
   47305 * __builtin_parityl:                     Other Builtins.     (line  511)
   47306 * __builtin_parityll:                    Other Builtins.     (line  531)
   47307 * __builtin_popcount:                    Other Builtins.     (line  489)
   47308 * __builtin_popcountl:                   Other Builtins.     (line  507)
   47309 * __builtin_popcountll:                  Other Builtins.     (line  527)
   47310 * __builtin_powi:                        Other Builtins.     (line    6)
   47311 * __builtin_powif:                       Other Builtins.     (line    6)
   47312 * __builtin_powil:                       Other Builtins.     (line    6)
   47313 * __builtin_prefetch:                    Other Builtins.     (line  341)
   47314 * __builtin_return:                      Constructing Calls. (line   48)
   47315 * __builtin_return_address:              Return Address.     (line   11)
   47316 * __builtin_rx_brk:                      RX Built-in Functions.
   47317                                                              (line   11)
   47318 * __builtin_rx_clrpsw:                   RX Built-in Functions.
   47319                                                              (line   14)
   47320 * __builtin_rx_int:                      RX Built-in Functions.
   47321                                                              (line   18)
   47322 * __builtin_rx_machi:                    RX Built-in Functions.
   47323                                                              (line   22)
   47324 * __builtin_rx_maclo:                    RX Built-in Functions.
   47325                                                              (line   27)
   47326 * __builtin_rx_mulhi:                    RX Built-in Functions.
   47327                                                              (line   32)
   47328 * __builtin_rx_mullo:                    RX Built-in Functions.
   47329                                                              (line   37)
   47330 * __builtin_rx_mvfachi:                  RX Built-in Functions.
   47331                                                              (line   42)
   47332 * __builtin_rx_mvfacmi:                  RX Built-in Functions.
   47333                                                              (line   46)
   47334 * __builtin_rx_mvfc:                     RX Built-in Functions.
   47335                                                              (line   50)
   47336 * __builtin_rx_mvtachi:                  RX Built-in Functions.
   47337                                                              (line   54)
   47338 * __builtin_rx_mvtaclo:                  RX Built-in Functions.
   47339                                                              (line   58)
   47340 * __builtin_rx_mvtc:                     RX Built-in Functions.
   47341                                                              (line   62)
   47342 * __builtin_rx_mvtipl:                   RX Built-in Functions.
   47343                                                              (line   66)
   47344 * __builtin_rx_racw:                     RX Built-in Functions.
   47345                                                              (line   70)
   47346 * __builtin_rx_revw:                     RX Built-in Functions.
   47347                                                              (line   74)
   47348 * __builtin_rx_rmpa:                     RX Built-in Functions.
   47349                                                              (line   79)
   47350 * __builtin_rx_round:                    RX Built-in Functions.
   47351                                                              (line   83)
   47352 * __builtin_rx_sat:                      RX Built-in Functions.
   47353                                                              (line   88)
   47354 * __builtin_rx_setpsw:                   RX Built-in Functions.
   47355                                                              (line   92)
   47356 * __builtin_rx_wait:                     RX Built-in Functions.
   47357                                                              (line   96)
   47358 * __builtin_trap:                        Other Builtins.     (line  271)
   47359 * __builtin_types_compatible_p:          Other Builtins.     (line  111)
   47360 * __builtin_unreachable:                 Other Builtins.     (line  278)
   47361 * __builtin_va_arg_pack:                 Constructing Calls. (line   53)
   47362 * __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
   47363 * __complex__ keyword:                   Complex.            (line    6)
   47364 * __declspec(dllexport):                 Function Attributes.
   47365                                                              (line  259)
   47366 * __declspec(dllimport):                 Function Attributes.
   47367                                                              (line  294)
   47368 * __extension__:                         Alternate Keywords. (line   30)
   47369 * __float128 data type:                  Floating Types.     (line    6)
   47370 * __float80 data type:                   Floating Types.     (line    6)
   47371 * __fp16 data type:                      Half-Precision.     (line    6)
   47372 * __func__ identifier:                   Function Names.     (line    6)
   47373 * __FUNCTION__ identifier:               Function Names.     (line    6)
   47374 * __imag__ keyword:                      Complex.            (line   27)
   47375 * __int128 data types:                   __int128.           (line    6)
   47376 * __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
   47377 * __real__ keyword:                      Complex.            (line   27)
   47378 * __STDC_HOSTED__:                       Standards.          (line   13)
   47379 * __sync_add_and_fetch:                  Atomic Builtins.    (line   61)
   47380 * __sync_and_and_fetch:                  Atomic Builtins.    (line   61)
   47381 * __sync_bool_compare_and_swap:          Atomic Builtins.    (line   73)
   47382 * __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
   47383 * __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
   47384 * __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
   47385 * __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
   47386 * __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
   47387 * __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
   47388 * __sync_lock_release:                   Atomic Builtins.    (line  103)
   47389 * __sync_lock_test_and_set:              Atomic Builtins.    (line   85)
   47390 * __sync_nand_and_fetch:                 Atomic Builtins.    (line   61)
   47391 * __sync_or_and_fetch:                   Atomic Builtins.    (line   61)
   47392 * __sync_sub_and_fetch:                  Atomic Builtins.    (line   61)
   47393 * __sync_synchronize:                    Atomic Builtins.    (line   82)
   47394 * __sync_val_compare_and_swap:           Atomic Builtins.    (line   73)
   47395 * __sync_xor_and_fetch:                  Atomic Builtins.    (line   61)
   47396 * __thread:                              Thread-Local.       (line    6)
   47397 * _Accum data type:                      Fixed-Point.        (line    6)
   47398 * _Complex keyword:                      Complex.            (line    6)
   47399 * _Decimal128 data type:                 Decimal Float.      (line    6)
   47400 * _Decimal32 data type:                  Decimal Float.      (line    6)
   47401 * _Decimal64 data type:                  Decimal Float.      (line    6)
   47402 * _exit:                                 Other Builtins.     (line    6)
   47403 * _Exit:                                 Other Builtins.     (line    6)
   47404 * _Fract data type:                      Fixed-Point.        (line    6)
   47405 * _Sat data type:                        Fixed-Point.        (line    6)
   47406 * ABI:                                   Compatibility.      (line    6)
   47407 * abort:                                 Other Builtins.     (line    6)
   47408 * abs:                                   Other Builtins.     (line    6)
   47409 * accessing volatiles <1>:               C++ Volatiles.      (line    6)
   47410 * accessing volatiles:                   Volatiles.          (line    6)
   47411 * acos:                                  Other Builtins.     (line    6)
   47412 * acosf:                                 Other Builtins.     (line    6)
   47413 * acosh:                                 Other Builtins.     (line    6)
   47414 * acoshf:                                Other Builtins.     (line    6)
   47415 * acoshl:                                Other Builtins.     (line    6)
   47416 * acosl:                                 Other Builtins.     (line    6)
   47417 * Ada:                                   G++ and GCC.        (line    6)
   47418 * additional floating types:             Floating Types.     (line    6)
   47419 * address constraints:                   Simple Constraints. (line  154)
   47420 * address of a label:                    Labels as Values.   (line    6)
   47421 * address_operand:                       Simple Constraints. (line  158)
   47422 * alias attribute:                       Function Attributes.
   47423                                                              (line   36)
   47424 * aligned attribute <1>:                 Type Attributes.    (line   31)
   47425 * aligned attribute <2>:                 Variable Attributes.
   47426                                                              (line   23)
   47427 * aligned attribute:                     Function Attributes.
   47428                                                              (line   49)
   47429 * alignment:                             Alignment.          (line    6)
   47430 * alloc_size attribute:                  Function Attributes.
   47431                                                              (line   69)
   47432 * alloca:                                Other Builtins.     (line    6)
   47433 * alloca vs variable-length arrays:      Variable Length.    (line   26)
   47434 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
   47435                                                              (line  888)
   47436 * alternate keywords:                    Alternate Keywords. (line    6)
   47437 * always_inline function attribute:      Function Attributes.
   47438                                                              (line   90)
   47439 * AMD x86-64 Options:                    i386 and x86-64 Options.
   47440                                                              (line    6)
   47441 * AMD1:                                  Standards.          (line   13)
   47442 * ANSI C:                                Standards.          (line   13)
   47443 * ANSI C standard:                       Standards.          (line   13)
   47444 * ANSI C89:                              Standards.          (line   13)
   47445 * ANSI support:                          C Dialect Options.  (line   10)
   47446 * ANSI X3.159-1989:                      Standards.          (line   13)
   47447 * apostrophes:                           Incompatibilities.  (line  116)
   47448 * application binary interface:          Compatibility.      (line    6)
   47449 * ARC Options:                           ARC Options.        (line    6)
   47450 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
   47451                                                              (line    6)
   47452 * ARM options:                           ARM Options.        (line    6)
   47453 * arrays of length zero:                 Zero Length.        (line    6)
   47454 * arrays of variable length:             Variable Length.    (line    6)
   47455 * arrays, non-lvalue:                    Subscripting.       (line    6)
   47456 * artificial function attribute:         Function Attributes.
   47457                                                              (line  133)
   47458 * asin:                                  Other Builtins.     (line    6)
   47459 * asinf:                                 Other Builtins.     (line    6)
   47460 * asinh:                                 Other Builtins.     (line    6)
   47461 * asinhf:                                Other Builtins.     (line    6)
   47462 * asinhl:                                Other Builtins.     (line    6)
   47463 * asinl:                                 Other Builtins.     (line    6)
   47464 * asm constraints:                       Constraints.        (line    6)
   47465 * asm expressions:                       Extended Asm.       (line    6)
   47466 * assembler instructions:                Extended Asm.       (line    6)
   47467 * assembler names for identifiers:       Asm Labels.         (line    6)
   47468 * assembly code, invalid:                Bug Criteria.       (line   12)
   47469 * atan:                                  Other Builtins.     (line    6)
   47470 * atan2:                                 Other Builtins.     (line    6)
   47471 * atan2f:                                Other Builtins.     (line    6)
   47472 * atan2l:                                Other Builtins.     (line    6)
   47473 * atanf:                                 Other Builtins.     (line    6)
   47474 * atanh:                                 Other Builtins.     (line    6)
   47475 * atanhf:                                Other Builtins.     (line    6)
   47476 * atanhl:                                Other Builtins.     (line    6)
   47477 * atanl:                                 Other Builtins.     (line    6)
   47478 * attribute of types:                    Type Attributes.    (line    6)
   47479 * attribute of variables:                Variable Attributes.
   47480                                                              (line    6)
   47481 * attribute syntax:                      Attribute Syntax.   (line    6)
   47482 * autoincrement/decrement addressing:    Simple Constraints. (line   30)
   47483 * automatic inline for C++ member fns:   Inline.             (line   71)
   47484 * AVR Options:                           AVR Options.        (line    6)
   47485 * Backwards Compatibility:               Backwards Compatibility.
   47486                                                              (line    6)
   47487 * base class members:                    Name lookup.        (line    6)
   47488 * bcmp:                                  Other Builtins.     (line    6)
   47489 * below100 attribute:                    Variable Attributes.
   47490                                                              (line  562)
   47491 * binary compatibility:                  Compatibility.      (line    6)
   47492 * Binary constants using the 0b prefix:  Binary constants.   (line    6)
   47493 * Blackfin Options:                      Blackfin Options.   (line    6)
   47494 * bound pointer to member function:      Bound member functions.
   47495                                                              (line    6)
   47496 * bounds checking:                       Optimize Options.   (line  393)
   47497 * bug criteria:                          Bug Criteria.       (line    6)
   47498 * bugs:                                  Bugs.               (line    6)
   47499 * bugs, known:                           Trouble.            (line    6)
   47500 * built-in functions <1>:                Other Builtins.     (line    6)
   47501 * built-in functions:                    C Dialect Options.  (line  184)
   47502 * bzero:                                 Other Builtins.     (line    6)
   47503 * C compilation options:                 Invoking GCC.       (line   17)
   47504 * C intermediate output, nonexistent:    G++ and GCC.        (line   35)
   47505 * C language extensions:                 C Extensions.       (line    6)
   47506 * C language, traditional:               C Dialect Options.  (line  282)
   47507 * C standard:                            Standards.          (line   13)
   47508 * C standards:                           Standards.          (line   13)
   47509 * c++:                                   Invoking G++.       (line   14)
   47510 * C++:                                   G++ and GCC.        (line   30)
   47511 * C++ comments:                          C++ Comments.       (line    6)
   47512 * C++ compilation options:               Invoking GCC.       (line   23)
   47513 * C++ interface and implementation headers: C++ Interface.   (line    6)
   47514 * C++ language extensions:               C++ Extensions.     (line    6)
   47515 * C++ member fns, automatically inline:  Inline.             (line   71)
   47516 * C++ misunderstandings:                 C++ Misunderstandings.
   47517                                                              (line    6)
   47518 * C++ options, command line:             C++ Dialect Options.
   47519                                                              (line    6)
   47520 * C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
   47521 * C++ source file suffixes:              Invoking G++.       (line    6)
   47522 * C++ static data, declaring and defining: Static Definitions.
   47523                                                              (line    6)
   47524 * C1X:                                   Standards.          (line   13)
   47525 * C89:                                   Standards.          (line   13)
   47526 * C90:                                   Standards.          (line   13)
   47527 * C94:                                   Standards.          (line   13)
   47528 * C95:                                   Standards.          (line   13)
   47529 * C99:                                   Standards.          (line   13)
   47530 * C9X:                                   Standards.          (line   13)
   47531 * C_INCLUDE_PATH:                        Environment Variables.
   47532                                                              (line  127)
   47533 * cabs:                                  Other Builtins.     (line    6)
   47534 * cabsf:                                 Other Builtins.     (line    6)
   47535 * cabsl:                                 Other Builtins.     (line    6)
   47536 * cacos:                                 Other Builtins.     (line    6)
   47537 * cacosf:                                Other Builtins.     (line    6)
   47538 * cacosh:                                Other Builtins.     (line    6)
   47539 * cacoshf:                               Other Builtins.     (line    6)
   47540 * cacoshl:                               Other Builtins.     (line    6)
   47541 * cacosl:                                Other Builtins.     (line    6)
   47542 * callee_pop_aggregate_return attribute: Function Attributes.
   47543                                                              (line  847)
   47544 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
   47545                                                              (line  532)
   47546 * calloc:                                Other Builtins.     (line    6)
   47547 * carg:                                  Other Builtins.     (line    6)
   47548 * cargf:                                 Other Builtins.     (line    6)
   47549 * cargl:                                 Other Builtins.     (line    6)
   47550 * case labels in initializers:           Designated Inits.   (line    6)
   47551 * case ranges:                           Case Ranges.        (line    6)
   47552 * casin:                                 Other Builtins.     (line    6)
   47553 * casinf:                                Other Builtins.     (line    6)
   47554 * casinh:                                Other Builtins.     (line    6)
   47555 * casinhf:                               Other Builtins.     (line    6)
   47556 * casinhl:                               Other Builtins.     (line    6)
   47557 * casinl:                                Other Builtins.     (line    6)
   47558 * cast to a union:                       Cast to Union.      (line    6)
   47559 * catan:                                 Other Builtins.     (line    6)
   47560 * catanf:                                Other Builtins.     (line    6)
   47561 * catanh:                                Other Builtins.     (line    6)
   47562 * catanhf:                               Other Builtins.     (line    6)
   47563 * catanhl:                               Other Builtins.     (line    6)
   47564 * catanl:                                Other Builtins.     (line    6)
   47565 * cbrt:                                  Other Builtins.     (line    6)
   47566 * cbrtf:                                 Other Builtins.     (line    6)
   47567 * cbrtl:                                 Other Builtins.     (line    6)
   47568 * ccos:                                  Other Builtins.     (line    6)
   47569 * ccosf:                                 Other Builtins.     (line    6)
   47570 * ccosh:                                 Other Builtins.     (line    6)
   47571 * ccoshf:                                Other Builtins.     (line    6)
   47572 * ccoshl:                                Other Builtins.     (line    6)
   47573 * ccosl:                                 Other Builtins.     (line    6)
   47574 * ceil:                                  Other Builtins.     (line    6)
   47575 * ceilf:                                 Other Builtins.     (line    6)
   47576 * ceill:                                 Other Builtins.     (line    6)
   47577 * cexp:                                  Other Builtins.     (line    6)
   47578 * cexpf:                                 Other Builtins.     (line    6)
   47579 * cexpl:                                 Other Builtins.     (line    6)
   47580 * character set, execution:              Preprocessor Options.
   47581                                                              (line  508)
   47582 * character set, input:                  Preprocessor Options.
   47583                                                              (line  521)
   47584 * character set, input normalization:    Warning Options.    (line 1329)
   47585 * character set, wide execution:         Preprocessor Options.
   47586                                                              (line  513)
   47587 * cimag:                                 Other Builtins.     (line    6)
   47588 * cimagf:                                Other Builtins.     (line    6)
   47589 * cimagl:                                Other Builtins.     (line    6)
   47590 * cleanup attribute:                     Variable Attributes.
   47591                                                              (line   89)
   47592 * clog:                                  Other Builtins.     (line    6)
   47593 * clogf:                                 Other Builtins.     (line    6)
   47594 * clogl:                                 Other Builtins.     (line    6)
   47595 * COBOL:                                 G++ and GCC.        (line   23)
   47596 * code generation conventions:           Code Gen Options.   (line    6)
   47597 * code, mixed with declarations:         Mixed Declarations. (line    6)
   47598 * cold function attribute:               Function Attributes.
   47599                                                              (line 1098)
   47600 * command options:                       Invoking GCC.       (line    6)
   47601 * comments, C++ style:                   C++ Comments.       (line    6)
   47602 * common attribute:                      Variable Attributes.
   47603                                                              (line  105)
   47604 * comparison of signed and unsigned values, warning: Warning Options.
   47605                                                              (line 1201)
   47606 * compiler bugs, reporting:              Bug Reporting.      (line    6)
   47607 * compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
   47608 * compiler options, C++:                 C++ Dialect Options.
   47609                                                              (line    6)
   47610 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   47611                                                              (line    6)
   47612 * compiler version, specifying:          Target Options.     (line    6)
   47613 * COMPILER_PATH:                         Environment Variables.
   47614                                                              (line   88)
   47615 * complex conjugation:                   Complex.            (line   34)
   47616 * complex numbers:                       Complex.            (line    6)
   47617 * compound literals:                     Compound Literals.  (line    6)
   47618 * computed gotos:                        Labels as Values.   (line    6)
   47619 * conditional expressions, extensions:   Conditionals.       (line    6)
   47620 * conflicting types:                     Disappointments.    (line   21)
   47621 * conj:                                  Other Builtins.     (line    6)
   47622 * conjf:                                 Other Builtins.     (line    6)
   47623 * conjl:                                 Other Builtins.     (line    6)
   47624 * const applied to function:             Function Attributes.
   47625                                                              (line    6)
   47626 * const function attribute:              Function Attributes.
   47627                                                              (line  183)
   47628 * constants in constraints:              Simple Constraints. (line   70)
   47629 * constraint modifier characters:        Modifiers.          (line    6)
   47630 * constraint, matching:                  Simple Constraints. (line  139)
   47631 * constraints, asm:                      Constraints.        (line    6)
   47632 * constraints, machine specific:         Machine Constraints.
   47633                                                              (line    6)
   47634 * constructing calls:                    Constructing Calls. (line    6)
   47635 * constructor expressions:               Compound Literals.  (line    6)
   47636 * constructor function attribute:        Function Attributes.
   47637                                                              (line  211)
   47638 * contributors:                          Contributors.       (line    6)
   47639 * copysign:                              Other Builtins.     (line    6)
   47640 * copysignf:                             Other Builtins.     (line    6)
   47641 * copysignl:                             Other Builtins.     (line    6)
   47642 * core dump:                             Bug Criteria.       (line    9)
   47643 * cos:                                   Other Builtins.     (line    6)
   47644 * cosf:                                  Other Builtins.     (line    6)
   47645 * cosh:                                  Other Builtins.     (line    6)
   47646 * coshf:                                 Other Builtins.     (line    6)
   47647 * coshl:                                 Other Builtins.     (line    6)
   47648 * cosl:                                  Other Builtins.     (line    6)
   47649 * CPATH:                                 Environment Variables.
   47650                                                              (line  126)
   47651 * CPLUS_INCLUDE_PATH:                    Environment Variables.
   47652                                                              (line  128)
   47653 * cpow:                                  Other Builtins.     (line    6)
   47654 * cpowf:                                 Other Builtins.     (line    6)
   47655 * cpowl:                                 Other Builtins.     (line    6)
   47656 * cproj:                                 Other Builtins.     (line    6)
   47657 * cprojf:                                Other Builtins.     (line    6)
   47658 * cprojl:                                Other Builtins.     (line    6)
   47659 * creal:                                 Other Builtins.     (line    6)
   47660 * crealf:                                Other Builtins.     (line    6)
   47661 * creall:                                Other Builtins.     (line    6)
   47662 * CRIS Options:                          CRIS Options.       (line    6)
   47663 * cross compiling:                       Target Options.     (line    6)
   47664 * CRX Options:                           CRX Options.        (line    6)
   47665 * csin:                                  Other Builtins.     (line    6)
   47666 * csinf:                                 Other Builtins.     (line    6)
   47667 * csinh:                                 Other Builtins.     (line    6)
   47668 * csinhf:                                Other Builtins.     (line    6)
   47669 * csinhl:                                Other Builtins.     (line    6)
   47670 * csinl:                                 Other Builtins.     (line    6)
   47671 * csqrt:                                 Other Builtins.     (line    6)
   47672 * csqrtf:                                Other Builtins.     (line    6)
   47673 * csqrtl:                                Other Builtins.     (line    6)
   47674 * ctan:                                  Other Builtins.     (line    6)
   47675 * ctanf:                                 Other Builtins.     (line    6)
   47676 * ctanh:                                 Other Builtins.     (line    6)
   47677 * ctanhf:                                Other Builtins.     (line    6)
   47678 * ctanhl:                                Other Builtins.     (line    6)
   47679 * ctanl:                                 Other Builtins.     (line    6)
   47680 * Darwin options:                        Darwin Options.     (line    6)
   47681 * dcgettext:                             Other Builtins.     (line    6)
   47682 * DD integer suffix:                     Decimal Float.      (line    6)
   47683 * dd integer suffix:                     Decimal Float.      (line    6)
   47684 * deallocating variable length arrays:   Variable Length.    (line   22)
   47685 * debugging information options:         Debugging Options.  (line    6)
   47686 * decimal floating types:                Decimal Float.      (line    6)
   47687 * declaration scope:                     Incompatibilities.  (line   80)
   47688 * declarations inside expressions:       Statement Exprs.    (line    6)
   47689 * declarations, mixed with code:         Mixed Declarations. (line    6)
   47690 * declaring attributes of functions:     Function Attributes.
   47691                                                              (line    6)
   47692 * declaring static data in C++:          Static Definitions. (line    6)
   47693 * defining static data in C++:           Static Definitions. (line    6)
   47694 * dependencies for make as output:       Environment Variables.
   47695                                                              (line  154)
   47696 * dependencies, make:                    Preprocessor Options.
   47697                                                              (line  173)
   47698 * DEPENDENCIES_OUTPUT:                   Environment Variables.
   47699                                                              (line  153)
   47700 * dependent name lookup:                 Name lookup.        (line    6)
   47701 * deprecated attribute:                  Variable Attributes.
   47702                                                              (line  114)
   47703 * deprecated attribute.:                 Function Attributes.
   47704                                                              (line  234)
   47705 * designated initializers:               Designated Inits.   (line    6)
   47706 * designator lists:                      Designated Inits.   (line   94)
   47707 * designators:                           Designated Inits.   (line   61)
   47708 * destructor function attribute:         Function Attributes.
   47709                                                              (line  211)
   47710 * DF integer suffix:                     Decimal Float.      (line    6)
   47711 * df integer suffix:                     Decimal Float.      (line    6)
   47712 * dgettext:                              Other Builtins.     (line    6)
   47713 * diagnostic messages:                   Language Independent Options.
   47714                                                              (line    6)
   47715 * dialect options:                       C Dialect Options.  (line    6)
   47716 * digits in constraint:                  Simple Constraints. (line  127)
   47717 * directory options:                     Directory Options.  (line    6)
   47718 * disinterrupt attribute:                Function Attributes.
   47719                                                              (line  254)
   47720 * DL integer suffix:                     Decimal Float.      (line    6)
   47721 * dl integer suffix:                     Decimal Float.      (line    6)
   47722 * dollar signs in identifier names:      Dollar Signs.       (line    6)
   47723 * double-word arithmetic:                Long Long.          (line    6)
   47724 * downward funargs:                      Nested Functions.   (line    6)
   47725 * drem:                                  Other Builtins.     (line    6)
   47726 * dremf:                                 Other Builtins.     (line    6)
   47727 * dreml:                                 Other Builtins.     (line    6)
   47728 * E in constraint:                       Simple Constraints. (line   89)
   47729 * earlyclobber operand:                  Modifiers.          (line   25)
   47730 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
   47731                                                              (line  347)
   47732 * empty structures:                      Empty Structures.   (line    6)
   47733 * environment variables:                 Environment Variables.
   47734                                                              (line    6)
   47735 * erf:                                   Other Builtins.     (line    6)
   47736 * erfc:                                  Other Builtins.     (line    6)
   47737 * erfcf:                                 Other Builtins.     (line    6)
   47738 * erfcl:                                 Other Builtins.     (line    6)
   47739 * erff:                                  Other Builtins.     (line    6)
   47740 * erfl:                                  Other Builtins.     (line    6)
   47741 * error function attribute:              Function Attributes.
   47742                                                              (line  152)
   47743 * error messages:                        Warnings and Errors.
   47744                                                              (line    6)
   47745 * escaped newlines:                      Escaped Newlines.   (line    6)
   47746 * exception handler functions on the Blackfin processor: Function Attributes.
   47747                                                              (line  357)
   47748 * exclamation point:                     Multi-Alternative.  (line   33)
   47749 * exit:                                  Other Builtins.     (line    6)
   47750 * exp:                                   Other Builtins.     (line    6)
   47751 * exp10:                                 Other Builtins.     (line    6)
   47752 * exp10f:                                Other Builtins.     (line    6)
   47753 * exp10l:                                Other Builtins.     (line    6)
   47754 * exp2:                                  Other Builtins.     (line    6)
   47755 * exp2f:                                 Other Builtins.     (line    6)
   47756 * exp2l:                                 Other Builtins.     (line    6)
   47757 * expf:                                  Other Builtins.     (line    6)
   47758 * expl:                                  Other Builtins.     (line    6)
   47759 * explicit register variables:           Explicit Reg Vars.  (line    6)
   47760 * expm1:                                 Other Builtins.     (line    6)
   47761 * expm1f:                                Other Builtins.     (line    6)
   47762 * expm1l:                                Other Builtins.     (line    6)
   47763 * expressions containing statements:     Statement Exprs.    (line    6)
   47764 * expressions, constructor:              Compound Literals.  (line    6)
   47765 * extended asm:                          Extended Asm.       (line    6)
   47766 * extensible constraints:                Simple Constraints. (line  163)
   47767 * extensions, ?::                        Conditionals.       (line    6)
   47768 * extensions, C language:                C Extensions.       (line    6)
   47769 * extensions, C++ language:              C++ Extensions.     (line    6)
   47770 * external declaration scope:            Incompatibilities.  (line   80)
   47771 * externally_visible attribute.:         Function Attributes.
   47772                                                              (line  363)
   47773 * F in constraint:                       Simple Constraints. (line   94)
   47774 * fabs:                                  Other Builtins.     (line    6)
   47775 * fabsf:                                 Other Builtins.     (line    6)
   47776 * fabsl:                                 Other Builtins.     (line    6)
   47777 * fatal signal:                          Bug Criteria.       (line    9)
   47778 * fdim:                                  Other Builtins.     (line    6)
   47779 * fdimf:                                 Other Builtins.     (line    6)
   47780 * fdiml:                                 Other Builtins.     (line    6)
   47781 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
   47782                                                              (line    6)
   47783 * ffs:                                   Other Builtins.     (line    6)
   47784 * file name suffix:                      Overall Options.    (line   14)
   47785 * file names:                            Link Options.       (line   10)
   47786 * fixed-point types:                     Fixed-Point.        (line    6)
   47787 * flatten function attribute:            Function Attributes.
   47788                                                              (line  145)
   47789 * flexible array members:                Zero Length.        (line    6)
   47790 * float as function value type:          Incompatibilities.  (line  141)
   47791 * floating point precision <1>:          Disappointments.    (line   68)
   47792 * floating point precision:              Optimize Options.   (line 1883)
   47793 * floor:                                 Other Builtins.     (line    6)
   47794 * floorf:                                Other Builtins.     (line    6)
   47795 * floorl:                                Other Builtins.     (line    6)
   47796 * fma:                                   Other Builtins.     (line    6)
   47797 * fmaf:                                  Other Builtins.     (line    6)
   47798 * fmal:                                  Other Builtins.     (line    6)
   47799 * fmax:                                  Other Builtins.     (line    6)
   47800 * fmaxf:                                 Other Builtins.     (line    6)
   47801 * fmaxl:                                 Other Builtins.     (line    6)
   47802 * fmin:                                  Other Builtins.     (line    6)
   47803 * fminf:                                 Other Builtins.     (line    6)
   47804 * fminl:                                 Other Builtins.     (line    6)
   47805 * fmod:                                  Other Builtins.     (line    6)
   47806 * fmodf:                                 Other Builtins.     (line    6)
   47807 * fmodl:                                 Other Builtins.     (line    6)
   47808 * force_align_arg_pointer attribute:     Function Attributes.
   47809                                                              (line 1140)
   47810 * format function attribute:             Function Attributes.
   47811                                                              (line  420)
   47812 * format_arg function attribute:         Function Attributes.
   47813                                                              (line  485)
   47814 * Fortran:                               G++ and GCC.        (line    6)
   47815 * forwarding calls:                      Constructing Calls. (line    6)
   47816 * fprintf:                               Other Builtins.     (line    6)
   47817 * fprintf_unlocked:                      Other Builtins.     (line    6)
   47818 * fputs:                                 Other Builtins.     (line    6)
   47819 * fputs_unlocked:                        Other Builtins.     (line    6)
   47820 * FR30 Options:                          FR30 Options.       (line    6)
   47821 * freestanding environment:              Standards.          (line   13)
   47822 * freestanding implementation:           Standards.          (line   13)
   47823 * frexp:                                 Other Builtins.     (line    6)
   47824 * frexpf:                                Other Builtins.     (line    6)
   47825 * frexpl:                                Other Builtins.     (line    6)
   47826 * FRV Options:                           FRV Options.        (line    6)
   47827 * fscanf:                                Other Builtins.     (line    6)
   47828 * fscanf, and constant strings:          Incompatibilities.  (line   17)
   47829 * function addressability on the M32R/D: Function Attributes.
   47830                                                              (line  807)
   47831 * function attributes:                   Function Attributes.
   47832                                                              (line    6)
   47833 * function pointers, arithmetic:         Pointer Arith.      (line    6)
   47834 * function prototype declarations:       Function Prototypes.
   47835                                                              (line    6)
   47836 * function without a prologue/epilogue code: Function Attributes.
   47837                                                              (line  865)
   47838 * function, size of pointer to:          Pointer Arith.      (line    6)
   47839 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
   47840                                                              (line  761)
   47841 * functions in arbitrary sections:       Function Attributes.
   47842                                                              (line    6)
   47843 * functions that are dynamically resolved: Function Attributes.
   47844                                                              (line    6)
   47845 * functions that are passed arguments in registers on the 386: Function Attributes.
   47846                                                              (line    6)
   47847 * functions that behave like malloc:     Function Attributes.
   47848                                                              (line    6)
   47849 * functions that do not pop the argument stack on the 386: Function Attributes.
   47850                                                              (line    6)
   47851 * functions that do pop the argument stack on the 386: Function Attributes.
   47852                                                              (line  177)
   47853 * functions that have different compilation options on the 386: Function Attributes.
   47854                                                              (line    6)
   47855 * functions that have different optimization options: Function Attributes.
   47856                                                              (line    6)
   47857 * functions that have no side effects:   Function Attributes.
   47858                                                              (line    6)
   47859 * functions that never return:           Function Attributes.
   47860                                                              (line    6)
   47861 * functions that pop the argument stack on the 386: Function Attributes.
   47862                                                              (line    6)
   47863 * functions that return more than once:  Function Attributes.
   47864                                                              (line    6)
   47865 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
   47866                                                              (line  878)
   47867 * functions which handle memory bank switching: Function Attributes.
   47868                                                              (line  375)
   47869 * functions with non-null pointer arguments: Function Attributes.
   47870                                                              (line    6)
   47871 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
   47872                                                              (line    6)
   47873 * g in constraint:                       Simple Constraints. (line  120)
   47874 * G in constraint:                       Simple Constraints. (line   98)
   47875 * g++:                                   Invoking G++.       (line   14)
   47876 * G++:                                   G++ and GCC.        (line   30)
   47877 * gamma:                                 Other Builtins.     (line    6)
   47878 * gamma_r:                               Other Builtins.     (line    6)
   47879 * gammaf:                                Other Builtins.     (line    6)
   47880 * gammaf_r:                              Other Builtins.     (line    6)
   47881 * gammal:                                Other Builtins.     (line    6)
   47882 * gammal_r:                              Other Builtins.     (line    6)
   47883 * GCC:                                   G++ and GCC.        (line    6)
   47884 * GCC command options:                   Invoking GCC.       (line    6)
   47885 * GCC_EXEC_PREFIX:                       Environment Variables.
   47886                                                              (line   52)
   47887 * gcc_struct:                            Type Attributes.    (line  319)
   47888 * gcc_struct attribute:                  Variable Attributes.
   47889                                                              (line  419)
   47890 * gcov:                                  Debugging Options.  (line  370)
   47891 * gettext:                               Other Builtins.     (line    6)
   47892 * global offset table:                   Code Gen Options.   (line  184)
   47893 * global register after longjmp:         Global Reg Vars.    (line   66)
   47894 * global register variables:             Global Reg Vars.    (line    6)
   47895 * GNAT:                                  G++ and GCC.        (line   30)
   47896 * GNU C Compiler:                        G++ and GCC.        (line    6)
   47897 * GNU Compiler Collection:               G++ and GCC.        (line    6)
   47898 * gnu_inline function attribute:         Function Attributes.
   47899                                                              (line   95)
   47900 * Go:                                    G++ and GCC.        (line    6)
   47901 * goto with computed label:              Labels as Values.   (line    6)
   47902 * gprof:                                 Debugging Options.  (line  300)
   47903 * grouping options:                      Invoking GCC.       (line   26)
   47904 * H in constraint:                       Simple Constraints. (line   98)
   47905 * half-precision floating point:         Half-Precision.     (line    6)
   47906 * hardware models and configurations, specifying: Submodel Options.
   47907                                                              (line    6)
   47908 * hex floats:                            Hex Floats.         (line    6)
   47909 * HK fixed-suffix:                       Fixed-Point.        (line    6)
   47910 * hk fixed-suffix:                       Fixed-Point.        (line    6)
   47911 * hosted environment <1>:                C Dialect Options.  (line  218)
   47912 * hosted environment:                    Standards.          (line   13)
   47913 * hosted implementation:                 Standards.          (line   13)
   47914 * hot function attribute:                Function Attributes.
   47915                                                              (line 1085)
   47916 * HPPA Options:                          HPPA Options.       (line    6)
   47917 * HR fixed-suffix:                       Fixed-Point.        (line    6)
   47918 * hr fixed-suffix:                       Fixed-Point.        (line    6)
   47919 * hypot:                                 Other Builtins.     (line    6)
   47920 * hypotf:                                Other Builtins.     (line    6)
   47921 * hypotl:                                Other Builtins.     (line    6)
   47922 * I in constraint:                       Simple Constraints. (line   81)
   47923 * i in constraint:                       Simple Constraints. (line   70)
   47924 * i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
   47925                                                              (line    6)
   47926 * i386 Options:                          i386 and x86-64 Options.
   47927                                                              (line    6)
   47928 * IA-64 Options:                         IA-64 Options.      (line    6)
   47929 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
   47930                                                              (line    6)
   47931 * identifier names, dollar signs in:     Dollar Signs.       (line    6)
   47932 * identifiers, names in assembler code:  Asm Labels.         (line    6)
   47933 * ifunc attribute:                       Function Attributes.
   47934                                                              (line  648)
   47935 * ilogb:                                 Other Builtins.     (line    6)
   47936 * ilogbf:                                Other Builtins.     (line    6)
   47937 * ilogbl:                                Other Builtins.     (line    6)
   47938 * imaxabs:                               Other Builtins.     (line    6)
   47939 * implementation-defined behavior, C language: C Implementation.
   47940                                                              (line    6)
   47941 * implementation-defined behavior, C++ language: C++ Implementation.
   47942                                                              (line    6)
   47943 * implied #pragma implementation:        C++ Interface.      (line   46)
   47944 * incompatibilities of GCC:              Incompatibilities.  (line    6)
   47945 * increment operators:                   Bug Criteria.       (line   17)
   47946 * index:                                 Other Builtins.     (line    6)
   47947 * indirect calls on ARM:                 Function Attributes.
   47948                                                              (line  751)
   47949 * indirect calls on MIPS:                Function Attributes.
   47950                                                              (line  773)
   47951 * init_priority attribute:               C++ Attributes.     (line    9)
   47952 * initializations in expressions:        Compound Literals.  (line    6)
   47953 * initializers with labeled elements:    Designated Inits.   (line    6)
   47954 * initializers, non-constant:            Initializers.       (line    6)
   47955 * inline automatic for C++ member fns:   Inline.             (line   71)
   47956 * inline functions:                      Inline.             (line    6)
   47957 * inline functions, omission of:         Inline.             (line   51)
   47958 * inlining and C++ pragmas:              C++ Interface.      (line   66)
   47959 * installation trouble:                  Trouble.            (line    6)
   47960 * integrating function code:             Inline.             (line    6)
   47961 * Intel 386 Options:                     i386 and x86-64 Options.
   47962                                                              (line    6)
   47963 * interface and implementation headers, C++: C++ Interface.  (line    6)
   47964 * intermediate C version, nonexistent:   G++ and GCC.        (line   35)
   47965 * interrupt handler functions:           Function Attributes.
   47966                                                              (line  140)
   47967 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
   47968                                                              (line  688)
   47969 * interrupt service routines on ARM:     Function Attributes.
   47970                                                              (line  703)
   47971 * interrupt thread functions on fido:    Function Attributes.
   47972                                                              (line  695)
   47973 * introduction:                          Top.                (line    6)
   47974 * invalid assembly code:                 Bug Criteria.       (line   12)
   47975 * invalid input:                         Bug Criteria.       (line   42)
   47976 * invoking g++:                          Invoking G++.       (line   22)
   47977 * isalnum:                               Other Builtins.     (line    6)
   47978 * isalpha:                               Other Builtins.     (line    6)
   47979 * isascii:                               Other Builtins.     (line    6)
   47980 * isblank:                               Other Builtins.     (line    6)
   47981 * iscntrl:                               Other Builtins.     (line    6)
   47982 * isdigit:                               Other Builtins.     (line    6)
   47983 * isgraph:                               Other Builtins.     (line    6)
   47984 * islower:                               Other Builtins.     (line    6)
   47985 * ISO 9899:                              Standards.          (line   13)
   47986 * ISO C:                                 Standards.          (line   13)
   47987 * ISO C standard:                        Standards.          (line   13)
   47988 * ISO C1X:                               Standards.          (line   13)
   47989 * ISO C90:                               Standards.          (line   13)
   47990 * ISO C94:                               Standards.          (line   13)
   47991 * ISO C95:                               Standards.          (line   13)
   47992 * ISO C99:                               Standards.          (line   13)
   47993 * ISO C9X:                               Standards.          (line   13)
   47994 * ISO support:                           C Dialect Options.  (line   10)
   47995 * ISO/IEC 9899:                          Standards.          (line   13)
   47996 * isprint:                               Other Builtins.     (line    6)
   47997 * ispunct:                               Other Builtins.     (line    6)
   47998 * isspace:                               Other Builtins.     (line    6)
   47999 * isupper:                               Other Builtins.     (line    6)
   48000 * iswalnum:                              Other Builtins.     (line    6)
   48001 * iswalpha:                              Other Builtins.     (line    6)
   48002 * iswblank:                              Other Builtins.     (line    6)
   48003 * iswcntrl:                              Other Builtins.     (line    6)
   48004 * iswdigit:                              Other Builtins.     (line    6)
   48005 * iswgraph:                              Other Builtins.     (line    6)
   48006 * iswlower:                              Other Builtins.     (line    6)
   48007 * iswprint:                              Other Builtins.     (line    6)
   48008 * iswpunct:                              Other Builtins.     (line    6)
   48009 * iswspace:                              Other Builtins.     (line    6)
   48010 * iswupper:                              Other Builtins.     (line    6)
   48011 * iswxdigit:                             Other Builtins.     (line    6)
   48012 * isxdigit:                              Other Builtins.     (line    6)
   48013 * j0:                                    Other Builtins.     (line    6)
   48014 * j0f:                                   Other Builtins.     (line    6)
   48015 * j0l:                                   Other Builtins.     (line    6)
   48016 * j1:                                    Other Builtins.     (line    6)
   48017 * j1f:                                   Other Builtins.     (line    6)
   48018 * j1l:                                   Other Builtins.     (line    6)
   48019 * Java:                                  G++ and GCC.        (line    6)
   48020 * java_interface attribute:              C++ Attributes.     (line   29)
   48021 * jn:                                    Other Builtins.     (line    6)
   48022 * jnf:                                   Other Builtins.     (line    6)
   48023 * jnl:                                   Other Builtins.     (line    6)
   48024 * K fixed-suffix:                        Fixed-Point.        (line    6)
   48025 * k fixed-suffix:                        Fixed-Point.        (line    6)
   48026 * keep_interrupts_masked attribute:      Function Attributes.
   48027                                                              (line  624)
   48028 * keywords, alternate:                   Alternate Keywords. (line    6)
   48029 * known causes of trouble:               Trouble.            (line    6)
   48030 * l1_data variable attribute:            Variable Attributes.
   48031                                                              (line  330)
   48032 * l1_data_A variable attribute:          Variable Attributes.
   48033                                                              (line  330)
   48034 * l1_data_B variable attribute:          Variable Attributes.
   48035                                                              (line  330)
   48036 * l1_text function attribute:            Function Attributes.
   48037                                                              (line  712)
   48038 * l2 function attribute:                 Function Attributes.
   48039                                                              (line  718)
   48040 * l2 variable attribute:                 Variable Attributes.
   48041                                                              (line  338)
   48042 * labeled elements in initializers:      Designated Inits.   (line    6)
   48043 * labels as values:                      Labels as Values.   (line    6)
   48044 * labs:                                  Other Builtins.     (line    6)
   48045 * LANG:                                  Environment Variables.
   48046                                                              (line   21)
   48047 * language dialect options:              C Dialect Options.  (line    6)
   48048 * LC_ALL:                                Environment Variables.
   48049                                                              (line   21)
   48050 * LC_CTYPE:                              Environment Variables.
   48051                                                              (line   21)
   48052 * LC_MESSAGES:                           Environment Variables.
   48053                                                              (line   21)
   48054 * ldexp:                                 Other Builtins.     (line    6)
   48055 * ldexpf:                                Other Builtins.     (line    6)
   48056 * ldexpl:                                Other Builtins.     (line    6)
   48057 * leaf function attribute:               Function Attributes.
   48058                                                              (line  724)
   48059 * length-zero arrays:                    Zero Length.        (line    6)
   48060 * lgamma:                                Other Builtins.     (line    6)
   48061 * lgamma_r:                              Other Builtins.     (line    6)
   48062 * lgammaf:                               Other Builtins.     (line    6)
   48063 * lgammaf_r:                             Other Builtins.     (line    6)
   48064 * lgammal:                               Other Builtins.     (line    6)
   48065 * lgammal_r:                             Other Builtins.     (line    6)
   48066 * Libraries:                             Link Options.       (line   24)
   48067 * LIBRARY_PATH:                          Environment Variables.
   48068                                                              (line   94)
   48069 * link options:                          Link Options.       (line    6)
   48070 * linker script:                         Link Options.       (line  178)
   48071 * LK fixed-suffix:                       Fixed-Point.        (line    6)
   48072 * lk fixed-suffix:                       Fixed-Point.        (line    6)
   48073 * LL integer suffix:                     Long Long.          (line    6)
   48074 * llabs:                                 Other Builtins.     (line    6)
   48075 * LLK fixed-suffix:                      Fixed-Point.        (line    6)
   48076 * llk fixed-suffix:                      Fixed-Point.        (line    6)
   48077 * LLR fixed-suffix:                      Fixed-Point.        (line    6)
   48078 * llr fixed-suffix:                      Fixed-Point.        (line    6)
   48079 * llrint:                                Other Builtins.     (line    6)
   48080 * llrintf:                               Other Builtins.     (line    6)
   48081 * llrintl:                               Other Builtins.     (line    6)
   48082 * llround:                               Other Builtins.     (line    6)
   48083 * llroundf:                              Other Builtins.     (line    6)
   48084 * llroundl:                              Other Builtins.     (line    6)
   48085 * LM32 options:                          LM32 Options.       (line    6)
   48086 * load address instruction:              Simple Constraints. (line  154)
   48087 * local labels:                          Local Labels.       (line    6)
   48088 * local variables in macros:             Typeof.             (line   46)
   48089 * local variables, specifying registers: Local Reg Vars.     (line    6)
   48090 * locale:                                Environment Variables.
   48091                                                              (line   21)
   48092 * locale definition:                     Environment Variables.
   48093                                                              (line  103)
   48094 * log:                                   Other Builtins.     (line    6)
   48095 * log10:                                 Other Builtins.     (line    6)
   48096 * log10f:                                Other Builtins.     (line    6)
   48097 * log10l:                                Other Builtins.     (line    6)
   48098 * log1p:                                 Other Builtins.     (line    6)
   48099 * log1pf:                                Other Builtins.     (line    6)
   48100 * log1pl:                                Other Builtins.     (line    6)
   48101 * log2:                                  Other Builtins.     (line    6)
   48102 * log2f:                                 Other Builtins.     (line    6)
   48103 * log2l:                                 Other Builtins.     (line    6)
   48104 * logb:                                  Other Builtins.     (line    6)
   48105 * logbf:                                 Other Builtins.     (line    6)
   48106 * logbl:                                 Other Builtins.     (line    6)
   48107 * logf:                                  Other Builtins.     (line    6)
   48108 * logl:                                  Other Builtins.     (line    6)
   48109 * long long data types:                  Long Long.          (line    6)
   48110 * longjmp:                               Global Reg Vars.    (line   66)
   48111 * longjmp incompatibilities:             Incompatibilities.  (line   39)
   48112 * longjmp warnings:                      Warning Options.    (line  738)
   48113 * LR fixed-suffix:                       Fixed-Point.        (line    6)
   48114 * lr fixed-suffix:                       Fixed-Point.        (line    6)
   48115 * lrint:                                 Other Builtins.     (line    6)
   48116 * lrintf:                                Other Builtins.     (line    6)
   48117 * lrintl:                                Other Builtins.     (line    6)
   48118 * lround:                                Other Builtins.     (line    6)
   48119 * lroundf:                               Other Builtins.     (line    6)
   48120 * lroundl:                               Other Builtins.     (line    6)
   48121 * m in constraint:                       Simple Constraints. (line   17)
   48122 * M32C options:                          M32C Options.       (line    6)
   48123 * M32R/D options:                        M32R/D Options.     (line    6)
   48124 * M680x0 options:                        M680x0 Options.     (line    6)
   48125 * M68hc1x options:                       M68hc1x Options.    (line    6)
   48126 * machine dependent options:             Submodel Options.   (line    6)
   48127 * machine specific constraints:          Machine Constraints.
   48128                                                              (line    6)
   48129 * macro with variable arguments:         Variadic Macros.    (line    6)
   48130 * macros containing asm:                 Extended Asm.       (line  242)
   48131 * macros, inline alternative:            Inline.             (line    6)
   48132 * macros, local labels:                  Local Labels.       (line    6)
   48133 * macros, local variables in:            Typeof.             (line   46)
   48134 * macros, statements in expressions:     Statement Exprs.    (line    6)
   48135 * macros, types of arguments:            Typeof.             (line    6)
   48136 * make:                                  Preprocessor Options.
   48137                                                              (line  173)
   48138 * malloc:                                Other Builtins.     (line    6)
   48139 * malloc attribute:                      Function Attributes.
   48140                                                              (line  783)
   48141 * matching constraint:                   Simple Constraints. (line  139)
   48142 * MCore options:                         MCore Options.      (line    6)
   48143 * member fns, automatically inline:      Inline.             (line   71)
   48144 * memchr:                                Other Builtins.     (line    6)
   48145 * memcmp:                                Other Builtins.     (line    6)
   48146 * memcpy:                                Other Builtins.     (line    6)
   48147 * memory references in constraints:      Simple Constraints. (line   17)
   48148 * mempcpy:                               Other Builtins.     (line    6)
   48149 * memset:                                Other Builtins.     (line    6)
   48150 * MeP options:                           MeP Options.        (line    6)
   48151 * Mercury:                               G++ and GCC.        (line   23)
   48152 * message formatting:                    Language Independent Options.
   48153                                                              (line    6)
   48154 * messages, warning:                     Warning Options.    (line    6)
   48155 * messages, warning and error:           Warnings and Errors.
   48156                                                              (line    6)
   48157 * MicroBlaze Options:                    MicroBlaze Options. (line    6)
   48158 * middle-operands, omitted:              Conditionals.       (line    6)
   48159 * MIPS options:                          MIPS Options.       (line    6)
   48160 * mips16 attribute:                      Function Attributes.
   48161                                                              (line  793)
   48162 * misunderstandings in C++:              C++ Misunderstandings.
   48163                                                              (line    6)
   48164 * mixed declarations and code:           Mixed Declarations. (line    6)
   48165 * mktemp, and constant strings:          Incompatibilities.  (line   13)
   48166 * MMIX Options:                          MMIX Options.       (line    6)
   48167 * MN10300 options:                       MN10300 Options.    (line    6)
   48168 * mode attribute:                        Variable Attributes.
   48169                                                              (line  134)
   48170 * modf:                                  Other Builtins.     (line    6)
   48171 * modff:                                 Other Builtins.     (line    6)
   48172 * modfl:                                 Other Builtins.     (line    6)
   48173 * modifiers in constraints:              Modifiers.          (line    6)
   48174 * ms_abi attribute:                      Function Attributes.
   48175                                                              (line  835)
   48176 * ms_hook_prologue attribute:            Function Attributes.
   48177                                                              (line  859)
   48178 * ms_struct:                             Type Attributes.    (line  319)
   48179 * ms_struct attribute:                   Variable Attributes.
   48180                                                              (line  419)
   48181 * mudflap:                               Optimize Options.   (line  393)
   48182 * multiple alternative constraints:      Multi-Alternative.  (line    6)
   48183 * multiprecision arithmetic:             Long Long.          (line    6)
   48184 * n in constraint:                       Simple Constraints. (line   75)
   48185 * named address spaces:                  Named Address Spaces.
   48186                                                              (line    6)
   48187 * names used in assembler code:          Asm Labels.         (line    6)
   48188 * naming convention, implementation headers: C++ Interface.  (line   46)
   48189 * nearbyint:                             Other Builtins.     (line    6)
   48190 * nearbyintf:                            Other Builtins.     (line    6)
   48191 * nearbyintl:                            Other Builtins.     (line    6)
   48192 * nested functions:                      Nested Functions.   (line    6)
   48193 * newlines (escaped):                    Escaped Newlines.   (line    6)
   48194 * nextafter:                             Other Builtins.     (line    6)
   48195 * nextafterf:                            Other Builtins.     (line    6)
   48196 * nextafterl:                            Other Builtins.     (line    6)
   48197 * nexttoward:                            Other Builtins.     (line    6)
   48198 * nexttowardf:                           Other Builtins.     (line    6)
   48199 * nexttowardl:                           Other Builtins.     (line    6)
   48200 * NFC:                                   Warning Options.    (line 1329)
   48201 * NFKC:                                  Warning Options.    (line 1329)
   48202 * NMI handler functions on the Blackfin processor: Function Attributes.
   48203                                                              (line  893)
   48204 * no_instrument_function function attribute: Function Attributes.
   48205                                                              (line  899)
   48206 * no_split_stack function attribute:     Function Attributes.
   48207                                                              (line  904)
   48208 * noclone function attribute:            Function Attributes.
   48209                                                              (line  920)
   48210 * nocommon attribute:                    Variable Attributes.
   48211                                                              (line  105)
   48212 * noinline function attribute:           Function Attributes.
   48213                                                              (line  910)
   48214 * nomips16 attribute:                    Function Attributes.
   48215                                                              (line  793)
   48216 * non-constant initializers:             Initializers.       (line    6)
   48217 * non-static inline function:            Inline.             (line   85)
   48218 * nonnull function attribute:            Function Attributes.
   48219                                                              (line  926)
   48220 * noreturn function attribute:           Function Attributes.
   48221                                                              (line  953)
   48222 * nothrow function attribute:            Function Attributes.
   48223                                                              (line  995)
   48224 * o in constraint:                       Simple Constraints. (line   23)
   48225 * OBJC_INCLUDE_PATH:                     Environment Variables.
   48226                                                              (line  129)
   48227 * Objective-C <1>:                       Standards.          (line  157)
   48228 * Objective-C:                           G++ and GCC.        (line    6)
   48229 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
   48230                                                              (line    6)
   48231 * Objective-C++ <1>:                     Standards.          (line  157)
   48232 * Objective-C++:                         G++ and GCC.        (line    6)
   48233 * offsettable address:                   Simple Constraints. (line   23)
   48234 * old-style function definitions:        Function Prototypes.
   48235                                                              (line    6)
   48236 * omitted middle-operands:               Conditionals.       (line    6)
   48237 * open coding:                           Inline.             (line    6)
   48238 * OpenMP parallel:                       C Dialect Options.  (line  235)
   48239 * operand constraints, asm:              Constraints.        (line    6)
   48240 * optimize function attribute:           Function Attributes.
   48241                                                              (line 1003)
   48242 * optimize options:                      Optimize Options.   (line    6)
   48243 * options to control diagnostics formatting: Language Independent Options.
   48244                                                              (line    6)
   48245 * options to control warnings:           Warning Options.    (line    6)
   48246 * options, C++:                          C++ Dialect Options.
   48247                                                              (line    6)
   48248 * options, code generation:              Code Gen Options.   (line    6)
   48249 * options, debugging:                    Debugging Options.  (line    6)
   48250 * options, dialect:                      C Dialect Options.  (line    6)
   48251 * options, directory search:             Directory Options.  (line    6)
   48252 * options, GCC command:                  Invoking GCC.       (line    6)
   48253 * options, grouping:                     Invoking GCC.       (line   26)
   48254 * options, linking:                      Link Options.       (line    6)
   48255 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
   48256                                                              (line    6)
   48257 * options, optimization:                 Optimize Options.   (line    6)
   48258 * options, order:                        Invoking GCC.       (line   30)
   48259 * options, preprocessor:                 Preprocessor Options.
   48260                                                              (line    6)
   48261 * order of evaluation, side effects:     Non-bugs.           (line  196)
   48262 * order of options:                      Invoking GCC.       (line   30)
   48263 * OS_main AVR function attribute:        Function Attributes.
   48264                                                              (line 1020)
   48265 * OS_task AVR function attribute:        Function Attributes.
   48266                                                              (line 1020)
   48267 * other register constraints:            Simple Constraints. (line  163)
   48268 * output file option:                    Overall Options.    (line  191)
   48269 * overloaded virtual function, warning:  C++ Dialect Options.
   48270                                                              (line  538)
   48271 * p in constraint:                       Simple Constraints. (line  154)
   48272 * packed attribute:                      Variable Attributes.
   48273                                                              (line  145)
   48274 * parameter forward declaration:         Variable Length.    (line   59)
   48275 * Pascal:                                G++ and GCC.        (line   23)
   48276 * pcs function attribute:                Function Attributes.
   48277                                                              (line 1045)
   48278 * PDP-11 Options:                        PDP-11 Options.     (line    6)
   48279 * PIC:                                   Code Gen Options.   (line  184)
   48280 * picoChip options:                      picoChip Options.   (line    6)
   48281 * pmf:                                   Bound member functions.
   48282                                                              (line    6)
   48283 * pointer arguments:                     Function Attributes.
   48284                                                              (line  188)
   48285 * pointer to member function:            Bound member functions.
   48286                                                              (line    6)
   48287 * portions of temporary objects, pointers to: Temporaries.   (line    6)
   48288 * pow:                                   Other Builtins.     (line    6)
   48289 * pow10:                                 Other Builtins.     (line    6)
   48290 * pow10f:                                Other Builtins.     (line    6)
   48291 * pow10l:                                Other Builtins.     (line    6)
   48292 * PowerPC options:                       PowerPC Options.    (line    6)
   48293 * powf:                                  Other Builtins.     (line    6)
   48294 * powl:                                  Other Builtins.     (line    6)
   48295 * pragma GCC optimize:                   Function Specific Option Pragmas.
   48296                                                              (line   21)
   48297 * pragma GCC pop_options:                Function Specific Option Pragmas.
   48298                                                              (line   34)
   48299 * pragma GCC push_options:               Function Specific Option Pragmas.
   48300                                                              (line   34)
   48301 * pragma GCC reset_options:              Function Specific Option Pragmas.
   48302                                                              (line   44)
   48303 * pragma GCC target:                     Function Specific Option Pragmas.
   48304                                                              (line    7)
   48305 * pragma, address:                       M32C Pragmas.       (line   15)
   48306 * pragma, align:                         Solaris Pragmas.    (line   11)
   48307 * pragma, call:                          MeP Pragmas.        (line   48)
   48308 * pragma, coprocessor available:         MeP Pragmas.        (line   13)
   48309 * pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
   48310 * pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
   48311 * pragma, custom io_volatile:            MeP Pragmas.        (line    7)
   48312 * pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
   48313 * pragma, disinterrupt:                  MeP Pragmas.        (line   38)
   48314 * pragma, extern_prefix:                 Symbol-Renaming Pragmas.
   48315                                                              (line   20)
   48316 * pragma, fini:                          Solaris Pragmas.    (line   19)
   48317 * pragma, init:                          Solaris Pragmas.    (line   24)
   48318 * pragma, long_calls:                    ARM Pragmas.        (line   11)
   48319 * pragma, long_calls_off:                ARM Pragmas.        (line   17)
   48320 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
   48321                                                              (line   14)
   48322 * pragma, mark:                          Darwin Pragmas.     (line   11)
   48323 * pragma, memregs:                       M32C Pragmas.       (line    7)
   48324 * pragma, no_long_calls:                 ARM Pragmas.        (line   14)
   48325 * pragma, options align:                 Darwin Pragmas.     (line   14)
   48326 * pragma, pop_macro:                     Push/Pop Macro Pragmas.
   48327                                                              (line   15)
   48328 * pragma, push_macro:                    Push/Pop Macro Pragmas.
   48329                                                              (line   11)
   48330 * pragma, reason for not using:          Function Attributes.
   48331                                                              (line 1767)
   48332 * pragma, redefine_extname:              Symbol-Renaming Pragmas.
   48333                                                              (line   14)
   48334 * pragma, segment:                       Darwin Pragmas.     (line   21)
   48335 * pragma, unused:                        Darwin Pragmas.     (line   24)
   48336 * pragma, visibility:                    Visibility Pragmas. (line    8)
   48337 * pragma, weak:                          Weak Pragmas.       (line   10)
   48338 * pragmas:                               Pragmas.            (line    6)
   48339 * pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
   48340 * pragmas, interface and implementation: C++ Interface.      (line    6)
   48341 * pragmas, warning of unknown:           Warning Options.    (line  755)
   48342 * precompiled headers:                   Precompiled Headers.
   48343                                                              (line    6)
   48344 * preprocessing numbers:                 Incompatibilities.  (line  173)
   48345 * preprocessing tokens:                  Incompatibilities.  (line  173)
   48346 * preprocessor options:                  Preprocessor Options.
   48347                                                              (line    6)
   48348 * printf:                                Other Builtins.     (line    6)
   48349 * printf_unlocked:                       Other Builtins.     (line    6)
   48350 * prof:                                  Debugging Options.  (line  294)
   48351 * progmem AVR variable attribute:        Variable Attributes.
   48352                                                              (line  314)
   48353 * promotion of formal parameters:        Function Prototypes.
   48354                                                              (line    6)
   48355 * pure function attribute:               Function Attributes.
   48356                                                              (line 1063)
   48357 * push address instruction:              Simple Constraints. (line  154)
   48358 * putchar:                               Other Builtins.     (line    6)
   48359 * puts:                                  Other Builtins.     (line    6)
   48360 * Q floating point suffix:               Floating Types.     (line    6)
   48361 * q floating point suffix:               Floating Types.     (line    6)
   48362 * qsort, and global register variables:  Global Reg Vars.    (line   42)
   48363 * question mark:                         Multi-Alternative.  (line   27)
   48364 * R fixed-suffix:                        Fixed-Point.        (line    6)
   48365 * r fixed-suffix:                        Fixed-Point.        (line    6)
   48366 * r in constraint:                       Simple Constraints. (line   66)
   48367 * ranges in case statements:             Case Ranges.        (line    6)
   48368 * read-only strings:                     Incompatibilities.  (line    9)
   48369 * register variable after longjmp:       Global Reg Vars.    (line   66)
   48370 * registers:                             Extended Asm.       (line    6)
   48371 * registers for local variables:         Local Reg Vars.     (line    6)
   48372 * registers in constraints:              Simple Constraints. (line   66)
   48373 * registers, global allocation:          Explicit Reg Vars.  (line    6)
   48374 * registers, global variables in:        Global Reg Vars.    (line    6)
   48375 * regparm attribute:                     Function Attributes.
   48376                                                              (line 1116)
   48377 * relocation truncated to fit (ColdFire): M680x0 Options.    (line  328)
   48378 * relocation truncated to fit (MIPS):    MIPS Options.       (line  199)
   48379 * remainder:                             Other Builtins.     (line    6)
   48380 * remainderf:                            Other Builtins.     (line    6)
   48381 * remainderl:                            Other Builtins.     (line    6)
   48382 * remquo:                                Other Builtins.     (line    6)
   48383 * remquof:                               Other Builtins.     (line    6)
   48384 * remquol:                               Other Builtins.     (line    6)
   48385 * reordering, warning:                   C++ Dialect Options.
   48386                                                              (line  463)
   48387 * reporting bugs:                        Bugs.               (line    6)
   48388 * resbank attribute:                     Function Attributes.
   48389                                                              (line 1148)
   48390 * rest argument (in macro):              Variadic Macros.    (line    6)
   48391 * restricted pointers:                   Restricted Pointers.
   48392                                                              (line    6)
   48393 * restricted references:                 Restricted Pointers.
   48394                                                              (line    6)
   48395 * restricted this pointer:               Restricted Pointers.
   48396                                                              (line    6)
   48397 * returns_twice attribute:               Function Attributes.
   48398                                                              (line 1162)
   48399 * rindex:                                Other Builtins.     (line    6)
   48400 * rint:                                  Other Builtins.     (line    6)
   48401 * rintf:                                 Other Builtins.     (line    6)
   48402 * rintl:                                 Other Builtins.     (line    6)
   48403 * round:                                 Other Builtins.     (line    6)
   48404 * roundf:                                Other Builtins.     (line    6)
   48405 * roundl:                                Other Builtins.     (line    6)
   48406 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
   48407                                                              (line    6)
   48408 * RTTI:                                  Vague Linkage.      (line   43)
   48409 * run-time options:                      Code Gen Options.   (line    6)
   48410 * RX Options:                            RX Options.         (line    6)
   48411 * s in constraint:                       Simple Constraints. (line  102)
   48412 * S/390 and zSeries Options:             S/390 and zSeries Options.
   48413                                                              (line    6)
   48414 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
   48415                                                              (line 1171)
   48416 * save volatile registers on the MicroBlaze: Function Attributes.
   48417                                                              (line 1176)
   48418 * scalb:                                 Other Builtins.     (line    6)
   48419 * scalbf:                                Other Builtins.     (line    6)
   48420 * scalbl:                                Other Builtins.     (line    6)
   48421 * scalbln:                               Other Builtins.     (line    6)
   48422 * scalblnf:                              Other Builtins.     (line    6)
   48423 * scalbn:                                Other Builtins.     (line    6)
   48424 * scalbnf:                               Other Builtins.     (line    6)
   48425 * scanf, and constant strings:           Incompatibilities.  (line   17)
   48426 * scanfnl:                               Other Builtins.     (line    6)
   48427 * scope of a variable length array:      Variable Length.    (line   22)
   48428 * scope of declaration:                  Disappointments.    (line   21)
   48429 * scope of external declarations:        Incompatibilities.  (line   80)
   48430 * Score Options:                         Score Options.      (line    6)
   48431 * search path:                           Directory Options.  (line    6)
   48432 * section function attribute:            Function Attributes.
   48433                                                              (line 1184)
   48434 * section variable attribute:            Variable Attributes.
   48435                                                              (line  166)
   48436 * sentinel function attribute:           Function Attributes.
   48437                                                              (line 1200)
   48438 * setjmp:                                Global Reg Vars.    (line   66)
   48439 * setjmp incompatibilities:              Incompatibilities.  (line   39)
   48440 * shared strings:                        Incompatibilities.  (line    9)
   48441 * shared variable attribute:             Variable Attributes.
   48442                                                              (line  211)
   48443 * side effect in ?::                     Conditionals.       (line   20)
   48444 * side effects, macro argument:          Statement Exprs.    (line   35)
   48445 * side effects, order of evaluation:     Non-bugs.           (line  196)
   48446 * signal handler functions on the AVR processors: Function Attributes.
   48447                                                              (line 1231)
   48448 * signbit:                               Other Builtins.     (line    6)
   48449 * signbitd128:                           Other Builtins.     (line    6)
   48450 * signbitd32:                            Other Builtins.     (line    6)
   48451 * signbitd64:                            Other Builtins.     (line    6)
   48452 * signbitf:                              Other Builtins.     (line    6)
   48453 * signbitl:                              Other Builtins.     (line    6)
   48454 * signed and unsigned values, comparison warning: Warning Options.
   48455                                                              (line 1201)
   48456 * significand:                           Other Builtins.     (line    6)
   48457 * significandf:                          Other Builtins.     (line    6)
   48458 * significandl:                          Other Builtins.     (line    6)
   48459 * simple constraints:                    Simple Constraints. (line    6)
   48460 * sin:                                   Other Builtins.     (line    6)
   48461 * sincos:                                Other Builtins.     (line    6)
   48462 * sincosf:                               Other Builtins.     (line    6)
   48463 * sincosl:                               Other Builtins.     (line    6)
   48464 * sinf:                                  Other Builtins.     (line    6)
   48465 * sinh:                                  Other Builtins.     (line    6)
   48466 * sinhf:                                 Other Builtins.     (line    6)
   48467 * sinhl:                                 Other Builtins.     (line    6)
   48468 * sinl:                                  Other Builtins.     (line    6)
   48469 * sizeof:                                Typeof.             (line    6)
   48470 * smaller data references:               M32R/D Options.     (line   57)
   48471 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
   48472                                                              (line  703)
   48473 * snprintf:                              Other Builtins.     (line    6)
   48474 * Solaris 2 options:                     Solaris 2 Options.  (line    6)
   48475 * SPARC options:                         SPARC Options.      (line    6)
   48476 * Spec Files:                            Spec Files.         (line    6)
   48477 * specified registers:                   Explicit Reg Vars.  (line    6)
   48478 * specifying compiler version and target machine: Target Options.
   48479                                                              (line    6)
   48480 * specifying hardware config:            Submodel Options.   (line    6)
   48481 * specifying machine version:            Target Options.     (line    6)
   48482 * specifying registers for local variables: Local Reg Vars.  (line    6)
   48483 * speed of compilation:                  Precompiled Headers.
   48484                                                              (line    6)
   48485 * sprintf:                               Other Builtins.     (line    6)
   48486 * SPU options:                           SPU Options.        (line    6)
   48487 * sqrt:                                  Other Builtins.     (line    6)
   48488 * sqrtf:                                 Other Builtins.     (line    6)
   48489 * sqrtl:                                 Other Builtins.     (line    6)
   48490 * sscanf:                                Other Builtins.     (line    6)
   48491 * sscanf, and constant strings:          Incompatibilities.  (line   17)
   48492 * sseregparm attribute:                  Function Attributes.
   48493                                                              (line 1133)
   48494 * statements inside expressions:         Statement Exprs.    (line    6)
   48495 * static data in C++, declaring and defining: Static Definitions.
   48496                                                              (line    6)
   48497 * stpcpy:                                Other Builtins.     (line    6)
   48498 * stpncpy:                               Other Builtins.     (line    6)
   48499 * strcasecmp:                            Other Builtins.     (line    6)
   48500 * strcat:                                Other Builtins.     (line    6)
   48501 * strchr:                                Other Builtins.     (line    6)
   48502 * strcmp:                                Other Builtins.     (line    6)
   48503 * strcpy:                                Other Builtins.     (line    6)
   48504 * strcspn:                               Other Builtins.     (line    6)
   48505 * strdup:                                Other Builtins.     (line    6)
   48506 * strfmon:                               Other Builtins.     (line    6)
   48507 * strftime:                              Other Builtins.     (line    6)
   48508 * string constants:                      Incompatibilities.  (line    9)
   48509 * strlen:                                Other Builtins.     (line    6)
   48510 * strncasecmp:                           Other Builtins.     (line    6)
   48511 * strncat:                               Other Builtins.     (line    6)
   48512 * strncmp:                               Other Builtins.     (line    6)
   48513 * strncpy:                               Other Builtins.     (line    6)
   48514 * strndup:                               Other Builtins.     (line    6)
   48515 * strpbrk:                               Other Builtins.     (line    6)
   48516 * strrchr:                               Other Builtins.     (line    6)
   48517 * strspn:                                Other Builtins.     (line    6)
   48518 * strstr:                                Other Builtins.     (line    6)
   48519 * struct:                                Unnamed Fields.     (line    6)
   48520 * structures:                            Incompatibilities.  (line  146)
   48521 * structures, constructor expression:    Compound Literals.  (line    6)
   48522 * submodel options:                      Submodel Options.   (line    6)
   48523 * subscripting:                          Subscripting.       (line    6)
   48524 * subscripting and function values:      Subscripting.       (line    6)
   48525 * suffixes for C++ source:               Invoking G++.       (line    6)
   48526 * SUNPRO_DEPENDENCIES:                   Environment Variables.
   48527                                                              (line  169)
   48528 * suppressing warnings:                  Warning Options.    (line    6)
   48529 * surprises in C++:                      C++ Misunderstandings.
   48530                                                              (line    6)
   48531 * syntax checking:                       Warning Options.    (line   13)
   48532 * syscall_linkage attribute:             Function Attributes.
   48533                                                              (line 1253)
   48534 * system headers, warnings from:         Warning Options.    (line  887)
   48535 * sysv_abi attribute:                    Function Attributes.
   48536                                                              (line  835)
   48537 * tan:                                   Other Builtins.     (line    6)
   48538 * tanf:                                  Other Builtins.     (line    6)
   48539 * tanh:                                  Other Builtins.     (line    6)
   48540 * tanhf:                                 Other Builtins.     (line    6)
   48541 * tanhl:                                 Other Builtins.     (line    6)
   48542 * tanl:                                  Other Builtins.     (line    6)
   48543 * target function attribute:             Function Attributes.
   48544                                                              (line 1260)
   48545 * target machine, specifying:            Target Options.     (line    6)
   48546 * target options:                        Target Options.     (line    6)
   48547 * target("abm") attribute:               Function Attributes.
   48548                                                              (line 1287)
   48549 * target("aes") attribute:               Function Attributes.
   48550                                                              (line 1292)
   48551 * target("align-stringops") attribute:   Function Attributes.
   48552                                                              (line 1382)
   48553 * target("altivec") attribute:           Function Attributes.
   48554                                                              (line 1408)
   48555 * target("arch=ARCH") attribute:         Function Attributes.
   48556                                                              (line 1391)
   48557 * target("avoid-indexed-addresses") attribute: Function Attributes.
   48558                                                              (line 1528)
   48559 * target("cld") attribute:               Function Attributes.
   48560                                                              (line 1353)
   48561 * target("cmpb") attribute:              Function Attributes.
   48562                                                              (line 1414)
   48563 * target("cpu=CPU") attribute:           Function Attributes.
   48564                                                              (line 1543)
   48565 * target("dlmzb") attribute:             Function Attributes.
   48566                                                              (line 1420)
   48567 * target("fancy-math-387") attribute:    Function Attributes.
   48568                                                              (line 1357)
   48569 * target("fma4") attribute:              Function Attributes.
   48570                                                              (line 1337)
   48571 * target("fpmath=FPMATH") attribute:     Function Attributes.
   48572                                                              (line 1399)
   48573 * target("fprnd") attribute:             Function Attributes.
   48574                                                              (line 1427)
   48575 * target("friz") attribute:              Function Attributes.
   48576                                                              (line 1519)
   48577 * target("fused-madd") attribute:        Function Attributes.
   48578                                                              (line 1362)
   48579 * target("hard-dfp") attribute:          Function Attributes.
   48580                                                              (line 1433)
   48581 * target("ieee-fp") attribute:           Function Attributes.
   48582                                                              (line 1367)
   48583 * target("inline-all-stringops") attribute: Function Attributes.
   48584                                                              (line 1372)
   48585 * target("inline-stringops-dynamically") attribute: Function Attributes.
   48586                                                              (line 1376)
   48587 * target("isel") attribute:              Function Attributes.
   48588                                                              (line 1438)
   48589 * target("longcall") attribute:          Function Attributes.
   48590                                                              (line 1538)
   48591 * target("lwp") attribute:               Function Attributes.
   48592                                                              (line 1345)
   48593 * target("mfcrf") attribute:             Function Attributes.
   48594                                                              (line 1442)
   48595 * target("mfpgpr") attribute:            Function Attributes.
   48596                                                              (line 1449)
   48597 * target("mmx") attribute:               Function Attributes.
   48598                                                              (line 1296)
   48599 * target("mulhw") attribute:             Function Attributes.
   48600                                                              (line 1456)
   48601 * target("multiple") attribute:          Function Attributes.
   48602                                                              (line 1463)
   48603 * target("paired") attribute:            Function Attributes.
   48604                                                              (line 1533)
   48605 * target("pclmul") attribute:            Function Attributes.
   48606                                                              (line 1300)
   48607 * target("popcnt") attribute:            Function Attributes.
   48608                                                              (line 1304)
   48609 * target("popcntb") attribute:           Function Attributes.
   48610                                                              (line 1474)
   48611 * target("popcntd") attribute:           Function Attributes.
   48612                                                              (line 1481)
   48613 * target("powerpc-gfxopt") attribute:    Function Attributes.
   48614                                                              (line 1487)
   48615 * target("powerpc-gpopt") attribute:     Function Attributes.
   48616                                                              (line 1493)
   48617 * target("recip") attribute:             Function Attributes.
   48618                                                              (line 1386)
   48619 * target("recip-precision") attribute:   Function Attributes.
   48620                                                              (line 1499)
   48621 * target("sse") attribute:               Function Attributes.
   48622                                                              (line 1308)
   48623 * target("sse2") attribute:              Function Attributes.
   48624                                                              (line 1312)
   48625 * target("sse3") attribute:              Function Attributes.
   48626                                                              (line 1316)
   48627 * target("sse4") attribute:              Function Attributes.
   48628                                                              (line 1320)
   48629 * target("sse4.1") attribute:            Function Attributes.
   48630                                                              (line 1325)
   48631 * target("sse4.2") attribute:            Function Attributes.
   48632                                                              (line 1329)
   48633 * target("sse4a") attribute:             Function Attributes.
   48634                                                              (line 1333)
   48635 * target("ssse3") attribute:             Function Attributes.
   48636                                                              (line 1349)
   48637 * target("string") attribute:            Function Attributes.
   48638                                                              (line 1505)
   48639 * target("tune=TUNE") attribute:         Function Attributes.
   48640                                                              (line 1395)
   48641 * target("update") attribute:            Function Attributes.
   48642                                                              (line 1468)
   48643 * target("vsx") attribute:               Function Attributes.
   48644                                                              (line 1511)
   48645 * target("xop") attribute:               Function Attributes.
   48646                                                              (line 1341)
   48647 * TC1:                                   Standards.          (line   13)
   48648 * TC2:                                   Standards.          (line   13)
   48649 * TC3:                                   Standards.          (line   13)
   48650 * Technical Corrigenda:                  Standards.          (line   13)
   48651 * Technical Corrigendum 1:               Standards.          (line   13)
   48652 * Technical Corrigendum 2:               Standards.          (line   13)
   48653 * Technical Corrigendum 3:               Standards.          (line   13)
   48654 * template instantiation:                Template Instantiation.
   48655                                                              (line    6)
   48656 * temporaries, lifetime of:              Temporaries.        (line    6)
   48657 * tgamma:                                Other Builtins.     (line    6)
   48658 * tgammaf:                               Other Builtins.     (line    6)
   48659 * tgammal:                               Other Builtins.     (line    6)
   48660 * Thread-Local Storage:                  Thread-Local.       (line    6)
   48661 * thunks:                                Nested Functions.   (line    6)
   48662 * tiny data section on the H8/300H and H8S: Function Attributes.
   48663                                                              (line 1572)
   48664 * TLS:                                   Thread-Local.       (line    6)
   48665 * tls_model attribute:                   Variable Attributes.
   48666                                                              (line  235)
   48667 * TMPDIR:                                Environment Variables.
   48668                                                              (line   45)
   48669 * toascii:                               Other Builtins.     (line    6)
   48670 * tolower:                               Other Builtins.     (line    6)
   48671 * toupper:                               Other Builtins.     (line    6)
   48672 * towlower:                              Other Builtins.     (line    6)
   48673 * towupper:                              Other Builtins.     (line    6)
   48674 * traditional C language:                C Dialect Options.  (line  282)
   48675 * trunc:                                 Other Builtins.     (line    6)
   48676 * truncf:                                Other Builtins.     (line    6)
   48677 * truncl:                                Other Builtins.     (line    6)
   48678 * two-stage name lookup:                 Name lookup.        (line    6)
   48679 * type alignment:                        Alignment.          (line    6)
   48680 * type attributes:                       Type Attributes.    (line    6)
   48681 * type_info:                             Vague Linkage.      (line   43)
   48682 * typedef names as function parameters:  Incompatibilities.  (line   97)
   48683 * typeof:                                Typeof.             (line    6)
   48684 * UHK fixed-suffix:                      Fixed-Point.        (line    6)
   48685 * uhk fixed-suffix:                      Fixed-Point.        (line    6)
   48686 * UHR fixed-suffix:                      Fixed-Point.        (line    6)
   48687 * uhr fixed-suffix:                      Fixed-Point.        (line    6)
   48688 * UK fixed-suffix:                       Fixed-Point.        (line    6)
   48689 * uk fixed-suffix:                       Fixed-Point.        (line    6)
   48690 * ULK fixed-suffix:                      Fixed-Point.        (line    6)
   48691 * ulk fixed-suffix:                      Fixed-Point.        (line    6)
   48692 * ULL integer suffix:                    Long Long.          (line    6)
   48693 * ULLK fixed-suffix:                     Fixed-Point.        (line    6)
   48694 * ullk fixed-suffix:                     Fixed-Point.        (line    6)
   48695 * ULLR fixed-suffix:                     Fixed-Point.        (line    6)
   48696 * ullr fixed-suffix:                     Fixed-Point.        (line    6)
   48697 * ULR fixed-suffix:                      Fixed-Point.        (line    6)
   48698 * ulr fixed-suffix:                      Fixed-Point.        (line    6)
   48699 * undefined behavior:                    Bug Criteria.       (line   17)
   48700 * undefined function value:              Bug Criteria.       (line   17)
   48701 * underscores in variables in macros:    Typeof.             (line   46)
   48702 * union:                                 Unnamed Fields.     (line    6)
   48703 * union, casting to a:                   Cast to Union.      (line    6)
   48704 * unions:                                Incompatibilities.  (line  146)
   48705 * unknown pragmas, warning:              Warning Options.    (line  755)
   48706 * unresolved references and -nodefaultlibs: Link Options.    (line   82)
   48707 * unresolved references and -nostdlib:   Link Options.       (line   82)
   48708 * unused attribute.:                     Function Attributes.
   48709                                                              (line 1584)
   48710 * UR fixed-suffix:                       Fixed-Point.        (line    6)
   48711 * ur fixed-suffix:                       Fixed-Point.        (line    6)
   48712 * use_debug_exception_return attribute:  Function Attributes.
   48713                                                              (line  629)
   48714 * use_shadow_register_set attribute:     Function Attributes.
   48715                                                              (line  620)
   48716 * used attribute.:                       Function Attributes.
   48717                                                              (line 1589)
   48718 * User stack pointer in interrupts on the Blackfin: Function Attributes.
   48719                                                              (line  707)
   48720 * V in constraint:                       Simple Constraints. (line   43)
   48721 * V850 Options:                          V850 Options.       (line    6)
   48722 * vague linkage:                         Vague Linkage.      (line    6)
   48723 * value after longjmp:                   Global Reg Vars.    (line   66)
   48724 * variable addressability on the IA-64:  Function Attributes.
   48725                                                              (line  807)
   48726 * variable addressability on the M32R/D: Variable Attributes.
   48727                                                              (line  348)
   48728 * variable alignment:                    Alignment.          (line    6)
   48729 * variable attributes:                   Variable Attributes.
   48730                                                              (line    6)
   48731 * variable number of arguments:          Variadic Macros.    (line    6)
   48732 * variable-length array scope:           Variable Length.    (line   22)
   48733 * variable-length arrays:                Variable Length.    (line    6)
   48734 * variables in specified registers:      Explicit Reg Vars.  (line    6)
   48735 * variables, local, in macros:           Typeof.             (line   46)
   48736 * variadic macros:                       Variadic Macros.    (line    6)
   48737 * VAX options:                           VAX Options.        (line    6)
   48738 * version_id attribute:                  Function Attributes.
   48739                                                              (line 1595)
   48740 * vfprintf:                              Other Builtins.     (line    6)
   48741 * vfscanf:                               Other Builtins.     (line    6)
   48742 * visibility attribute:                  Function Attributes.
   48743                                                              (line 1605)
   48744 * VLAs:                                  Variable Length.    (line    6)
   48745 * vliw attribute:                        Function Attributes.
   48746                                                              (line 1699)
   48747 * void pointers, arithmetic:             Pointer Arith.      (line    6)
   48748 * void, size of pointer to:              Pointer Arith.      (line    6)
   48749 * volatile access <1>:                   C++ Volatiles.      (line    6)
   48750 * volatile access:                       Volatiles.          (line    6)
   48751 * volatile applied to function:          Function Attributes.
   48752                                                              (line    6)
   48753 * volatile read <1>:                     C++ Volatiles.      (line    6)
   48754 * volatile read:                         Volatiles.          (line    6)
   48755 * volatile write <1>:                    C++ Volatiles.      (line    6)
   48756 * volatile write:                        Volatiles.          (line    6)
   48757 * vprintf:                               Other Builtins.     (line    6)
   48758 * vscanf:                                Other Builtins.     (line    6)
   48759 * vsnprintf:                             Other Builtins.     (line    6)
   48760 * vsprintf:                              Other Builtins.     (line    6)
   48761 * vsscanf:                               Other Builtins.     (line    6)
   48762 * vtable:                                Vague Linkage.      (line   28)
   48763 * VxWorks Options:                       VxWorks Options.    (line    6)
   48764 * W floating point suffix:               Floating Types.     (line    6)
   48765 * w floating point suffix:               Floating Types.     (line    6)
   48766 * warn_unused_result attribute:          Function Attributes.
   48767                                                              (line 1705)
   48768 * warning for comparison of signed and unsigned values: Warning Options.
   48769                                                              (line 1201)
   48770 * warning for overloaded virtual function: C++ Dialect Options.
   48771                                                              (line  538)
   48772 * warning for reordering of member initializers: C++ Dialect Options.
   48773                                                              (line  463)
   48774 * warning for unknown pragmas:           Warning Options.    (line  755)
   48775 * warning function attribute:            Function Attributes.
   48776                                                              (line  165)
   48777 * warning messages:                      Warning Options.    (line    6)
   48778 * warnings from system headers:          Warning Options.    (line  887)
   48779 * warnings vs errors:                    Warnings and Errors.
   48780                                                              (line    6)
   48781 * weak attribute:                        Function Attributes.
   48782                                                              (line 1722)
   48783 * weakref attribute:                     Function Attributes.
   48784                                                              (line 1731)
   48785 * whitespace:                            Incompatibilities.  (line  112)
   48786 * X in constraint:                       Simple Constraints. (line  124)
   48787 * X3.159-1989:                           Standards.          (line   13)
   48788 * x86-64 options:                        x86-64 Options.     (line    6)
   48789 * x86-64 Options:                        i386 and x86-64 Options.
   48790                                                              (line    6)
   48791 * Xstormy16 Options:                     Xstormy16 Options.  (line    6)
   48792 * Xtensa Options:                        Xtensa Options.     (line    6)
   48793 * y0:                                    Other Builtins.     (line    6)
   48794 * y0f:                                   Other Builtins.     (line    6)
   48795 * y0l:                                   Other Builtins.     (line    6)
   48796 * y1:                                    Other Builtins.     (line    6)
   48797 * y1f:                                   Other Builtins.     (line    6)
   48798 * y1l:                                   Other Builtins.     (line    6)
   48799 * yn:                                    Other Builtins.     (line    6)
   48800 * ynf:                                   Other Builtins.     (line    6)
   48801 * ynl:                                   Other Builtins.     (line    6)
   48802 * zero-length arrays:                    Zero Length.        (line    6)
   48803 * zero-size structures:                  Empty Structures.   (line    6)
   48804 * zSeries options:                       zSeries Options.    (line    6)
   48805 
   48806 
   48807 
   48808 Tag Table:
   48809 Node: Top2107
   48810 Node: G++ and GCC3880
   48811 Node: Standards5949
   48812 Node: Invoking GCC18116
   48813 Node: Option Summary21867
   48814 Node: Overall Options59753
   48815 Node: Invoking G++74494
   48816 Node: C Dialect Options76017
   48817 Node: C++ Dialect Options91097
   48818 Node: Objective-C and Objective-C++ Dialect Options116097
   48819 Node: Language Independent Options126636
   48820 Node: Warning Options129560
   48821 Node: Debugging Options198943
   48822 Node: Optimize Options249747
   48823 Ref: Type-punning305785
   48824 Node: Preprocessor Options385196
   48825 Ref: Wtrigraphs389294
   48826 Ref: dashMF394042
   48827 Ref: fdollars-in-identifiers404886
   48828 Node: Assembler Options413447
   48829 Node: Link Options414249
   48830 Ref: Link Options-Footnote-1424607
   48831 Node: Directory Options424941
   48832 Node: Spec Files431230
   48833 Node: Target Options453208
   48834 Node: Submodel Options453607
   48835 Node: ARC Options455226
   48836 Node: ARM Options456416
   48837 Node: AVR Options470147
   48838 Node: Blackfin Options475725
   48839 Node: CRIS Options483673
   48840 Node: CRX Options487414
   48841 Node: Darwin Options487839
   48842 Node: DEC Alpha Options495331
   48843 Node: DEC Alpha/VMS Options507247
   48844 Node: FR30 Options507821
   48845 Node: FRV Options508396
   48846 Node: GNU/Linux Options515113
   48847 Node: H8/300 Options516374
   48848 Node: HPPA Options517441
   48849 Node: i386 and x86-64 Options526941
   48850 Node: i386 and x86-64 Windows Options558101
   48851 Node: IA-64 Options560649
   48852 Node: IA-64/VMS Options568667
   48853 Node: LM32 Options569222
   48854 Node: M32C Options569751
   48855 Node: M32R/D Options571041
   48856 Node: M680x0 Options574628
   48857 Node: M68hc1x Options588635
   48858 Node: MCore Options590204
   48859 Node: MeP Options591711
   48860 Node: MicroBlaze Options595684
   48861 Node: MIPS Options598255
   48862 Node: MMIX Options626175
   48863 Node: MN10300 Options628657
   48864 Node: PDP-11 Options630865
   48865 Node: picoChip Options632559
   48866 Node: PowerPC Options634758
   48867 Node: RS/6000 and PowerPC Options634994
   48868 Node: RX Options671736
   48869 Node: S/390 and zSeries Options677308
   48870 Node: Score Options685239
   48871 Node: SH Options686067
   48872 Node: Solaris 2 Options697206
   48873 Node: SPARC Options698726
   48874 Node: SPU Options708544
   48875 Node: System V Options713548
   48876 Node: V850 Options714371
   48877 Node: VAX Options717950
   48878 Node: VxWorks Options718498
   48879 Node: x86-64 Options719653
   48880 Node: Xstormy16 Options719871
   48881 Node: Xtensa Options720160
   48882 Node: zSeries Options724494
   48883 Node: Code Gen Options724690
   48884 Node: Environment Variables751121
   48885 Node: Precompiled Headers759017
   48886 Node: C Implementation765216
   48887 Node: Translation implementation766879
   48888 Node: Environment implementation767453
   48889 Node: Identifiers implementation768003
   48890 Node: Characters implementation769057
   48891 Node: Integers implementation771863
   48892 Node: Floating point implementation773688
   48893 Node: Arrays and pointers implementation776617
   48894 Ref: Arrays and pointers implementation-Footnote-1778052
   48895 Node: Hints implementation778176
   48896 Node: Structures unions enumerations and bit-fields implementation779642
   48897 Node: Qualifiers implementation781628
   48898 Node: Declarators implementation783400
   48899 Node: Statements implementation783742
   48900 Node: Preprocessing directives implementation784069
   48901 Node: Library functions implementation786174
   48902 Node: Architecture implementation786814
   48903 Node: Locale-specific behavior implementation787517
   48904 Node: C++ Implementation787822
   48905 Node: Conditionally-supported behavior789102
   48906 Node: Exception handling789612
   48907 Node: C Extensions790021
   48908 Node: Statement Exprs794856
   48909 Node: Local Labels799369
   48910 Node: Labels as Values802348
   48911 Ref: Labels as Values-Footnote-1804757
   48912 Node: Nested Functions804940
   48913 Node: Constructing Calls808873
   48914 Node: Typeof813604
   48915 Node: Conditionals816919
   48916 Node: __int128817810
   48917 Node: Long Long818330
   48918 Node: Complex819832
   48919 Node: Floating Types822403
   48920 Node: Half-Precision823541
   48921 Node: Decimal Float825723
   48922 Node: Hex Floats827590
   48923 Node: Fixed-Point828631
   48924 Node: Named Address Spaces831925
   48925 Node: Zero Length833224
   48926 Node: Empty Structures836511
   48927 Node: Variable Length836927
   48928 Node: Variadic Macros839580
   48929 Node: Escaped Newlines841962
   48930 Node: Subscripting842801
   48931 Node: Pointer Arith843524
   48932 Node: Initializers844092
   48933 Node: Compound Literals844588
   48934 Node: Designated Inits846763
   48935 Node: Case Ranges850418
   48936 Node: Cast to Union851101
   48937 Node: Mixed Declarations852197
   48938 Node: Function Attributes852703
   48939 Node: Attribute Syntax933863
   48940 Node: Function Prototypes944309
   48941 Node: C++ Comments946090
   48942 Node: Dollar Signs946609
   48943 Node: Character Escapes947074
   48944 Node: Variable Attributes947368
   48945 Ref: MeP Variable Attributes962694
   48946 Ref: i386 Variable Attributes964655
   48947 Node: Type Attributes970348
   48948 Ref: MeP Type Attributes984089
   48949 Ref: i386 Type Attributes984363
   48950 Ref: PowerPC Type Attributes985203
   48951 Ref: SPU Type Attributes986065
   48952 Node: Alignment986356
   48953 Node: Inline987730
   48954 Node: Volatiles992714
   48955 Node: Extended Asm995609
   48956 Ref: Example of asm with clobbered asm reg1001698
   48957 Ref: Extended asm with goto1011465
   48958 Node: Constraints1019200
   48959 Node: Simple Constraints1020284
   48960 Node: Multi-Alternative1027605
   48961 Node: Modifiers1029322
   48962 Node: Machine Constraints1032216
   48963 Node: Asm Labels1070860
   48964 Node: Explicit Reg Vars1072536
   48965 Node: Global Reg Vars1074144
   48966 Node: Local Reg Vars1078694
   48967 Node: Alternate Keywords1081135
   48968 Node: Incomplete Enums1082621
   48969 Node: Function Names1083378
   48970 Node: Return Address1085540
   48971 Node: Vector Extensions1089093
   48972 Node: Offsetof1093499
   48973 Node: Atomic Builtins1094313
   48974 Node: Object Size Checking1099691
   48975 Node: Other Builtins1105119
   48976 Node: Target Builtins1131799
   48977 Node: Alpha Built-in Functions1132723
   48978 Node: ARM iWMMXt Built-in Functions1135722
   48979 Node: ARM NEON Intrinsics1142441
   48980 Node: Blackfin Built-in Functions1348641
   48981 Node: FR-V Built-in Functions1349255
   48982 Node: Argument Types1350114
   48983 Node: Directly-mapped Integer Functions1351870
   48984 Node: Directly-mapped Media Functions1352952
   48985 Node: Raw read/write Functions1359984
   48986 Node: Other Built-in Functions1360896
   48987 Node: X86 Built-in Functions1362085
   48988 Node: MIPS DSP Built-in Functions1407221
   48989 Node: MIPS Paired-Single Support1419668
   48990 Node: MIPS Loongson Built-in Functions1421169
   48991 Node: Paired-Single Arithmetic1427687
   48992 Node: Paired-Single Built-in Functions1428633
   48993 Node: MIPS-3D Built-in Functions1431303
   48994 Node: picoChip Built-in Functions1436678
   48995 Node: Other MIPS Built-in Functions1438044
   48996 Node: PowerPC AltiVec/VSX Built-in Functions1438568
   48997 Node: RX Built-in Functions1549226
   48998 Node: SPARC VIS Built-in Functions1553236
   48999 Node: SPU Built-in Functions1554915
   49000 Node: Target Format Checks1556697
   49001 Node: Solaris Format Checks1557129
   49002 Node: Darwin Format Checks1557555
   49003 Node: Pragmas1558382
   49004 Node: ARM Pragmas1559092
   49005 Node: M32C Pragmas1559695
   49006 Node: MeP Pragmas1560769
   49007 Node: RS/6000 and PowerPC Pragmas1562838
   49008 Node: Darwin Pragmas1563579
   49009 Node: Solaris Pragmas1564646
   49010 Node: Symbol-Renaming Pragmas1565807
   49011 Node: Structure-Packing Pragmas1568441
   49012 Node: Weak Pragmas1570091
   49013 Node: Diagnostic Pragmas1570825
   49014 Node: Visibility Pragmas1573853
   49015 Node: Push/Pop Macro Pragmas1574605
   49016 Node: Function Specific Option Pragmas1575578
   49017 Node: Unnamed Fields1577842
   49018 Node: Thread-Local1580080
   49019 Node: C99 Thread-Local Edits1582187
   49020 Node: C++98 Thread-Local Edits1584199
   49021 Node: Binary constants1587644
   49022 Node: C++ Extensions1588315
   49023 Node: C++ Volatiles1589963
   49024 Node: Restricted Pointers1592323
   49025 Node: Vague Linkage1593921
   49026 Node: C++ Interface1597583
   49027 Ref: C++ Interface-Footnote-11601880
   49028 Node: Template Instantiation1602017
   49029 Node: Bound member functions1609029
   49030 Node: C++ Attributes1610572
   49031 Node: Namespace Association1612230
   49032 Node: Type Traits1613644
   49033 Node: Java Exceptions1619999
   49034 Node: Deprecated Features1621396
   49035 Node: Backwards Compatibility1624361
   49036 Node: Objective-C1625719
   49037 Node: GNU Objective-C runtime API1626328
   49038 Node: Modern GNU Objective-C runtime API1627335
   49039 Node: Traditional GNU Objective-C runtime API1629772
   49040 Node: Executing code before main1631394
   49041 Node: What you can and what you cannot do in +load1634132
   49042 Node: Type encoding1636522
   49043 Node: Legacy type encoding1641598
   49044 Node: @encode1642689
   49045 Node: Method signatures1643230
   49046 Node: Garbage Collection1645225
   49047 Node: Constant string objects1647859
   49048 Node: compatibility_alias1650367
   49049 Node: Exceptions1651089
   49050 Node: Synchronization1653800
   49051 Node: Fast enumeration1654984
   49052 Node: Using fast enumeration1655296
   49053 Node: c99-like fast enumeration syntax1656507
   49054 Node: Fast enumeration details1657210
   49055 Node: Fast enumeration protocol1659551
   49056 Node: Messaging with the GNU Objective-C runtime1662703
   49057 Node: Dynamically registering methods1664074
   49058 Node: Forwarding hook1665765
   49059 Node: Compatibility1668804
   49060 Node: Gcov1675371
   49061 Node: Gcov Intro1675904
   49062 Node: Invoking Gcov1678622
   49063 Node: Gcov and Optimization1691588
   49064 Node: Gcov Data Files1694243
   49065 Node: Cross-profiling1695383
   49066 Node: Trouble1697234
   49067 Node: Actual Bugs1698719
   49068 Node: Cross-Compiler Problems1699175
   49069 Node: Interoperation1699589
   49070 Node: Incompatibilities1706726
   49071 Node: Fixed Headers1714877
   49072 Node: Standard Libraries1716540
   49073 Node: Disappointments1717912
   49074 Node: C++ Misunderstandings1722270
   49075 Node: Static Definitions1723081
   49076 Node: Name lookup1724134
   49077 Ref: Name lookup-Footnote-11728912
   49078 Node: Temporaries1729099
   49079 Node: Copy Assignment1731075
   49080 Node: Non-bugs1732882
   49081 Node: Warnings and Errors1743389
   49082 Node: Bugs1745153
   49083 Node: Bug Criteria1745717
   49084 Node: Bug Reporting1747927
   49085 Node: Service1748148
   49086 Node: Contributing1748967
   49087 Node: Funding1749707
   49088 Node: GNU Project1752196
   49089 Node: Copying1752842
   49090 Node: GNU Free Documentation License1790370
   49091 Node: Contributors1815507
   49092 Node: Option Index1852376
   49093 Node: Keyword Index2032684
   49094 
   49095 End Tag Table
   49096